Make escape sequence parsing in search a GUI checkbox option
This commit is contained in:
		@@ -70,6 +70,7 @@ struct _PlumaSearchDialogPrivate
 | 
				
			|||||||
	GtkWidget *entire_word_checkbutton;
 | 
						GtkWidget *entire_word_checkbutton;
 | 
				
			||||||
	GtkWidget *backwards_checkbutton;
 | 
						GtkWidget *backwards_checkbutton;
 | 
				
			||||||
	GtkWidget *wrap_around_checkbutton;
 | 
						GtkWidget *wrap_around_checkbutton;
 | 
				
			||||||
 | 
						GtkWidget *parse_escapes_checkbutton;
 | 
				
			||||||
	GtkWidget *find_button;
 | 
						GtkWidget *find_button;
 | 
				
			||||||
	GtkWidget *replace_button;
 | 
						GtkWidget *replace_button;
 | 
				
			||||||
	GtkWidget *replace_all_button;
 | 
						GtkWidget *replace_all_button;
 | 
				
			||||||
@@ -357,6 +358,7 @@ pluma_search_dialog_init (PlumaSearchDialog *dlg)
 | 
				
			|||||||
					  "entire_word_checkbutton", &dlg->priv->entire_word_checkbutton,
 | 
										  "entire_word_checkbutton", &dlg->priv->entire_word_checkbutton,
 | 
				
			||||||
					  "search_backwards_checkbutton", &dlg->priv->backwards_checkbutton,
 | 
										  "search_backwards_checkbutton", &dlg->priv->backwards_checkbutton,
 | 
				
			||||||
					  "wrap_around_checkbutton", &dlg->priv->wrap_around_checkbutton,
 | 
										  "wrap_around_checkbutton", &dlg->priv->wrap_around_checkbutton,
 | 
				
			||||||
 | 
										  "parse_escapes_checkbutton", &dlg->priv->parse_escapes_checkbutton,
 | 
				
			||||||
					  NULL);
 | 
										  NULL);
 | 
				
			||||||
	g_free (file);
 | 
						g_free (file);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -632,3 +634,21 @@ pluma_search_dialog_get_wrap_around (PlumaSearchDialog *dialog)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->priv->wrap_around_checkbutton));
 | 
						return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->priv->wrap_around_checkbutton));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					pluma_search_dialog_set_parse_escapes (PlumaSearchDialog *dialog,
 | 
				
			||||||
 | 
									       gboolean           parse_escapes)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						g_return_if_fail (PLUMA_IS_SEARCH_DIALOG (dialog));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->parse_escapes_checkbutton),
 | 
				
			||||||
 | 
									      parse_escapes);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gboolean
 | 
				
			||||||
 | 
					pluma_search_dialog_get_parse_escapes (PlumaSearchDialog *dialog)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						g_return_val_if_fail (PLUMA_IS_SEARCH_DIALOG (dialog), FALSE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->priv->parse_escapes_checkbutton));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -123,6 +123,11 @@ void		 pluma_search_dialog_set_wrap_around	(PlumaSearchDialog *dialog,
 | 
				
			|||||||
							 gboolean           wrap_around);
 | 
												 gboolean           wrap_around);
 | 
				
			||||||
gboolean	 pluma_search_dialog_get_wrap_around	(PlumaSearchDialog *dialog);
 | 
					gboolean	 pluma_search_dialog_get_wrap_around	(PlumaSearchDialog *dialog);
 | 
				
			||||||
   
 | 
					   
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void		pluma_search_dialog_set_parse_escapes (PlumaSearchDialog *dialog,
 | 
				
			||||||
 | 
					                                    		       gboolean           parse_escapes);
 | 
				
			||||||
 | 
					gboolean	pluma_search_dialog_get_parse_escapes (PlumaSearchDialog *dialog);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
G_END_DECLS
 | 
					G_END_DECLS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif  /* __PLUMA_SEARCH_DIALOG_H__  */
 | 
					#endif  /* __PLUMA_SEARCH_DIALOG_H__  */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -229,6 +229,24 @@
 | 
				
			|||||||
                    <property name="fill">False</property>
 | 
					                    <property name="fill">False</property>
 | 
				
			||||||
                  </packing>
 | 
					                  </packing>
 | 
				
			||||||
                </child>
 | 
					                </child>
 | 
				
			||||||
 | 
					                <child>
 | 
				
			||||||
 | 
					                  <object class="GtkCheckButton" id="parse_escapes_checkbutton">
 | 
				
			||||||
 | 
					                    <property name="visible">True</property>
 | 
				
			||||||
 | 
					                    <property name="can_focus">True</property>
 | 
				
			||||||
 | 
					                    <property name="label" translatable="yes">_Parse escape sequences (e.g. \n)</property>
 | 
				
			||||||
 | 
					                    <property name="use_underline">True</property>
 | 
				
			||||||
 | 
					                    <property name="relief">GTK_RELIEF_NORMAL</property>
 | 
				
			||||||
 | 
					                    <property name="focus_on_click">True</property>
 | 
				
			||||||
 | 
					                    <property name="active">True</property>
 | 
				
			||||||
 | 
					                    <property name="inconsistent">False</property>
 | 
				
			||||||
 | 
					                    <property name="draw_indicator">True</property>
 | 
				
			||||||
 | 
					                  </object>
 | 
				
			||||||
 | 
					                  <packing>
 | 
				
			||||||
 | 
					                    <property name="padding">0</property>
 | 
				
			||||||
 | 
					                    <property name="expand">False</property>
 | 
				
			||||||
 | 
					                    <property name="fill">False</property>
 | 
				
			||||||
 | 
					                  </packing>
 | 
				
			||||||
 | 
					                </child>
 | 
				
			||||||
              </object>
 | 
					              </object>
 | 
				
			||||||
              <packing>
 | 
					              <packing>
 | 
				
			||||||
                <property name="padding">0</property>
 | 
					                <property name="padding">0</property>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -229,6 +229,7 @@ do_find (PlumaSearchDialog *dialog,
 | 
				
			|||||||
	gboolean entire_word;
 | 
						gboolean entire_word;
 | 
				
			||||||
	gboolean wrap_around;
 | 
						gboolean wrap_around;
 | 
				
			||||||
	gboolean search_backwards;
 | 
						gboolean search_backwards;
 | 
				
			||||||
 | 
						gboolean parse_escapes;
 | 
				
			||||||
	guint flags = 0;
 | 
						guint flags = 0;
 | 
				
			||||||
	guint old_flags = 0;
 | 
						guint old_flags = 0;
 | 
				
			||||||
	gboolean found;
 | 
						gboolean found;
 | 
				
			||||||
@@ -241,12 +242,17 @@ do_find (PlumaSearchDialog *dialog,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	doc = PLUMA_DOCUMENT (gtk_text_view_get_buffer (GTK_TEXT_VIEW (active_view)));
 | 
						doc = PLUMA_DOCUMENT (gtk_text_view_get_buffer (GTK_TEXT_VIEW (active_view)));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	entry_text = pluma_utils_escape_search_text (pluma_search_dialog_get_search_text (dialog));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	match_case = pluma_search_dialog_get_match_case (dialog);
 | 
						match_case = pluma_search_dialog_get_match_case (dialog);
 | 
				
			||||||
	entire_word = pluma_search_dialog_get_entire_word (dialog);
 | 
						entire_word = pluma_search_dialog_get_entire_word (dialog);
 | 
				
			||||||
	search_backwards = pluma_search_dialog_get_backwards (dialog);
 | 
						search_backwards = pluma_search_dialog_get_backwards (dialog);
 | 
				
			||||||
	wrap_around = pluma_search_dialog_get_wrap_around (dialog);
 | 
						wrap_around = pluma_search_dialog_get_wrap_around (dialog);
 | 
				
			||||||
 | 
						parse_escapes = pluma_search_dialog_get_parse_escapes (dialog);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!parse_escapes) {
 | 
				
			||||||
 | 
							entry_text = pluma_utils_escape_search_text (pluma_search_dialog_get_search_text (dialog));
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							entry_text = pluma_search_dialog_get_search_text (dialog);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	PLUMA_SEARCH_SET_CASE_SENSITIVE (flags, match_case);
 | 
						PLUMA_SEARCH_SET_CASE_SENSITIVE (flags, match_case);
 | 
				
			||||||
	PLUMA_SEARCH_SET_ENTIRE_WORD (flags, entire_word);
 | 
						PLUMA_SEARCH_SET_ENTIRE_WORD (flags, entire_word);
 | 
				
			||||||
@@ -268,8 +274,13 @@ do_find (PlumaSearchDialog *dialog,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if (found)
 | 
						if (found)
 | 
				
			||||||
		text_found (window, 0);
 | 
							text_found (window, 0);
 | 
				
			||||||
	else
 | 
						else {
 | 
				
			||||||
		text_not_found (window, pluma_utils_unescape_search_text (entry_text));
 | 
							if (!parse_escapes) {
 | 
				
			||||||
 | 
								text_not_found (window, pluma_utils_unescape_search_text (entry_text));
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								text_not_found (window, entry_text);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog),
 | 
						gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog),
 | 
				
			||||||
					   PLUMA_SEARCH_DIALOG_REPLACE_RESPONSE,
 | 
										   PLUMA_SEARCH_DIALOG_REPLACE_RESPONSE,
 | 
				
			||||||
@@ -330,17 +341,27 @@ do_replace (PlumaSearchDialog *dialog,
 | 
				
			|||||||
	gchar *unescaped_replace_text;
 | 
						gchar *unescaped_replace_text;
 | 
				
			||||||
	gchar *selected_text = NULL;
 | 
						gchar *selected_text = NULL;
 | 
				
			||||||
	gboolean match_case;
 | 
						gboolean match_case;
 | 
				
			||||||
 | 
						gboolean parse_escapes;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	doc = pluma_window_get_active_document (window);
 | 
						doc = pluma_window_get_active_document (window);
 | 
				
			||||||
	if (doc == NULL)
 | 
						if (doc == NULL)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	search_entry_text = pluma_utils_escape_search_text (pluma_search_dialog_get_search_text (dialog));
 | 
						parse_escapes = pluma_search_dialog_get_parse_escapes (dialog);
 | 
				
			||||||
 | 
						if (!parse_escapes) {
 | 
				
			||||||
 | 
							search_entry_text = pluma_utils_escape_search_text (pluma_search_dialog_get_search_text (dialog));
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							search_entry_text = pluma_search_dialog_get_search_text (dialog);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	g_return_if_fail ((search_entry_text) != NULL);
 | 
						g_return_if_fail ((search_entry_text) != NULL);
 | 
				
			||||||
	g_return_if_fail ((*search_entry_text) != '\0');
 | 
						g_return_if_fail ((*search_entry_text) != '\0');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* replace text may be "", we just delete */
 | 
						/* replace text may be "", we just delete */
 | 
				
			||||||
	replace_entry_text = pluma_utils_escape_search_text (pluma_search_dialog_get_replace_text (dialog));
 | 
						if (!parse_escapes) {
 | 
				
			||||||
 | 
							replace_entry_text = pluma_utils_escape_search_text (pluma_search_dialog_get_replace_text (dialog));
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							replace_entry_text = pluma_search_dialog_get_replace_text (dialog);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	g_return_if_fail ((replace_entry_text) != NULL);
 | 
						g_return_if_fail ((replace_entry_text) != NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	unescaped_search_text = pluma_utils_unescape_search_text (search_entry_text);
 | 
						unescaped_search_text = pluma_utils_unescape_search_text (search_entry_text);
 | 
				
			||||||
@@ -385,6 +406,7 @@ do_replace_all (PlumaSearchDialog *dialog,
 | 
				
			|||||||
	const gchar *replace_entry_text;
 | 
						const gchar *replace_entry_text;
 | 
				
			||||||
	gboolean match_case;
 | 
						gboolean match_case;
 | 
				
			||||||
	gboolean entire_word;
 | 
						gboolean entire_word;
 | 
				
			||||||
 | 
						gboolean parse_escapes;
 | 
				
			||||||
	guint flags = 0;
 | 
						guint flags = 0;
 | 
				
			||||||
	gint count;
 | 
						gint count;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -394,12 +416,21 @@ do_replace_all (PlumaSearchDialog *dialog,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	doc = PLUMA_DOCUMENT (gtk_text_view_get_buffer (GTK_TEXT_VIEW (active_view)));
 | 
						doc = PLUMA_DOCUMENT (gtk_text_view_get_buffer (GTK_TEXT_VIEW (active_view)));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	search_entry_text = pluma_utils_escape_search_text( pluma_search_dialog_get_search_text (dialog));
 | 
						parse_escapes = pluma_search_dialog_get_parse_escapes (dialog);
 | 
				
			||||||
 | 
						if (!parse_escapes) {
 | 
				
			||||||
 | 
							search_entry_text = pluma_utils_escape_search_text(pluma_search_dialog_get_search_text (dialog));
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							search_entry_text = pluma_search_dialog_get_search_text (dialog);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	g_return_if_fail ((search_entry_text) != NULL);
 | 
						g_return_if_fail ((search_entry_text) != NULL);
 | 
				
			||||||
	g_return_if_fail ((*search_entry_text) != '\0');
 | 
						g_return_if_fail ((*search_entry_text) != '\0');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* replace text may be "", we just delete all occurrencies */
 | 
						/* replace text may be "", we just delete all occurrencies */
 | 
				
			||||||
	replace_entry_text = pluma_utils_escape_search_text (pluma_search_dialog_get_replace_text (dialog));
 | 
						if (!parse_escapes) {
 | 
				
			||||||
 | 
							replace_entry_text = pluma_utils_escape_search_text (pluma_search_dialog_get_replace_text (dialog));
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							replace_entry_text = pluma_search_dialog_get_replace_text (dialog);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	g_return_if_fail ((replace_entry_text) != NULL);
 | 
						g_return_if_fail ((replace_entry_text) != NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	match_case = pluma_search_dialog_get_match_case (dialog);
 | 
						match_case = pluma_search_dialog_get_match_case (dialog);
 | 
				
			||||||
@@ -419,7 +450,11 @@ do_replace_all (PlumaSearchDialog *dialog,
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		text_not_found (window, pluma_utils_unescape_search_text (search_entry_text));
 | 
							if (!parse_escapes) {
 | 
				
			||||||
 | 
								text_not_found (window, pluma_utils_unescape_search_text (search_entry_text));
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								text_not_found (window, search_entry_text);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog),
 | 
						gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -78,7 +78,8 @@ typedef enum
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	PLUMA_SEARCH_DONT_SET_FLAGS	= 1 << 0, 
 | 
						PLUMA_SEARCH_DONT_SET_FLAGS	= 1 << 0, 
 | 
				
			||||||
	PLUMA_SEARCH_ENTIRE_WORD	= 1 << 1,
 | 
						PLUMA_SEARCH_ENTIRE_WORD	= 1 << 1,
 | 
				
			||||||
	PLUMA_SEARCH_CASE_SENSITIVE	= 1 << 2
 | 
						PLUMA_SEARCH_CASE_SENSITIVE	= 1 << 2,
 | 
				
			||||||
 | 
						PLUMA_SEARCH_PARSE_ESCAPES	= 1 << 3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
} PlumaSearchFlags;
 | 
					} PlumaSearchFlags;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -322,6 +323,10 @@ void		_pluma_document_search_region   (PlumaDocument       *doc,
 | 
				
			|||||||
#define PLUMA_SEARCH_SET_CASE_SENSITIVE(sflags,state) ((state == TRUE) ? \
 | 
					#define PLUMA_SEARCH_SET_CASE_SENSITIVE(sflags,state) ((state == TRUE) ? \
 | 
				
			||||||
(sflags |= PLUMA_SEARCH_CASE_SENSITIVE) : (sflags &= ~PLUMA_SEARCH_CASE_SENSITIVE))
 | 
					(sflags |= PLUMA_SEARCH_CASE_SENSITIVE) : (sflags &= ~PLUMA_SEARCH_CASE_SENSITIVE))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define PLUMA_SEARCH_IS_PARSE_ESCAPES(sflags) ((sflags &  PLUMA_SEARCH_PARSE_ESCAPES) != 0)
 | 
				
			||||||
 | 
					#define PLUMA_SEARCH_SET_PARSE_ESCAPES(sflags,state) ((state == TRUE) ? \
 | 
				
			||||||
 | 
					(sflags |= PLUMA_SEARCH_PARSE_ESCAPES) : (sflags &= ~PLUMA_SEARCH_PARSE_ESCAPES))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef GMountOperation *(*PlumaMountOperationFactory)(PlumaDocument *doc, 
 | 
					typedef GMountOperation *(*PlumaMountOperationFactory)(PlumaDocument *doc, 
 | 
				
			||||||
						       gpointer       userdata);
 | 
											       gpointer       userdata);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1165,6 +1165,14 @@ match_case_menu_item_toggled (GtkCheckMenuItem *checkmenuitem,
 | 
				
			|||||||
					 gtk_check_menu_item_get_active (checkmenuitem));
 | 
										 gtk_check_menu_item_get_active (checkmenuitem));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					parse_escapes_menu_item_toggled (GtkCheckMenuItem *checkmenuitem,
 | 
				
			||||||
 | 
								         PlumaView        *view)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						PLUMA_SEARCH_SET_PARSE_ESCAPES (view->priv->search_flags,
 | 
				
			||||||
 | 
										gtk_check_menu_item_get_active (checkmenuitem));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static gboolean
 | 
					static gboolean
 | 
				
			||||||
real_search_enable_popdown (gpointer data)
 | 
					real_search_enable_popdown (gpointer data)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -1243,6 +1251,16 @@ search_entry_populate_popup (GtkEntry  *entry,
 | 
				
			|||||||
	gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item),
 | 
						gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item),
 | 
				
			||||||
					PLUMA_SEARCH_IS_CASE_SENSITIVE (view->priv->search_flags));
 | 
										PLUMA_SEARCH_IS_CASE_SENSITIVE (view->priv->search_flags));
 | 
				
			||||||
	gtk_widget_show (menu_item);
 | 
						gtk_widget_show (menu_item);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* create "Parse escapes" menu item. */
 | 
				
			||||||
 | 
						menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Parse escape sequences (e.g. \n)"));
 | 
				
			||||||
 | 
						g_signal_connect (G_OBJECT (menu_item), "toggled",
 | 
				
			||||||
 | 
								  G_CALLBACK (parse_escapes_menu_item_toggled), 
 | 
				
			||||||
 | 
								  view);
 | 
				
			||||||
 | 
						gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), menu_item);
 | 
				
			||||||
 | 
						gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item),
 | 
				
			||||||
 | 
										PLUMA_SEARCH_IS_PARSE_ESCAPES (view->priv->search_flags));
 | 
				
			||||||
 | 
						gtk_widget_show (menu_item);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user