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 *backwards_checkbutton;
 | 
			
		||||
	GtkWidget *wrap_around_checkbutton;
 | 
			
		||||
	GtkWidget *parse_escapes_checkbutton;
 | 
			
		||||
	GtkWidget *find_button;
 | 
			
		||||
	GtkWidget *replace_button;
 | 
			
		||||
	GtkWidget *replace_all_button;
 | 
			
		||||
@@ -357,6 +358,7 @@ pluma_search_dialog_init (PlumaSearchDialog *dlg)
 | 
			
		||||
					  "entire_word_checkbutton", &dlg->priv->entire_word_checkbutton,
 | 
			
		||||
					  "search_backwards_checkbutton", &dlg->priv->backwards_checkbutton,
 | 
			
		||||
					  "wrap_around_checkbutton", &dlg->priv->wrap_around_checkbutton,
 | 
			
		||||
					  "parse_escapes_checkbutton", &dlg->priv->parse_escapes_checkbutton,
 | 
			
		||||
					  NULL);
 | 
			
		||||
	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));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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	 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
 | 
			
		||||
 | 
			
		||||
#endif  /* __PLUMA_SEARCH_DIALOG_H__  */
 | 
			
		||||
 
 | 
			
		||||
@@ -229,6 +229,24 @@
 | 
			
		||||
                    <property name="fill">False</property>
 | 
			
		||||
                  </packing>
 | 
			
		||||
                </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>
 | 
			
		||||
              <packing>
 | 
			
		||||
                <property name="padding">0</property>
 | 
			
		||||
 
 | 
			
		||||
@@ -229,6 +229,7 @@ do_find (PlumaSearchDialog *dialog,
 | 
			
		||||
	gboolean entire_word;
 | 
			
		||||
	gboolean wrap_around;
 | 
			
		||||
	gboolean search_backwards;
 | 
			
		||||
	gboolean parse_escapes;
 | 
			
		||||
	guint flags = 0;
 | 
			
		||||
	guint old_flags = 0;
 | 
			
		||||
	gboolean found;
 | 
			
		||||
@@ -241,12 +242,17 @@ do_find (PlumaSearchDialog *dialog,
 | 
			
		||||
 | 
			
		||||
	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);
 | 
			
		||||
	entire_word = pluma_search_dialog_get_entire_word (dialog);
 | 
			
		||||
	search_backwards = pluma_search_dialog_get_backwards (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_ENTIRE_WORD (flags, entire_word);
 | 
			
		||||
@@ -268,8 +274,13 @@ do_find (PlumaSearchDialog *dialog,
 | 
			
		||||
 | 
			
		||||
	if (found)
 | 
			
		||||
		text_found (window, 0);
 | 
			
		||||
	else
 | 
			
		||||
	else {
 | 
			
		||||
		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),
 | 
			
		||||
					   PLUMA_SEARCH_DIALOG_REPLACE_RESPONSE,
 | 
			
		||||
@@ -330,17 +341,27 @@ do_replace (PlumaSearchDialog *dialog,
 | 
			
		||||
	gchar *unescaped_replace_text;
 | 
			
		||||
	gchar *selected_text = NULL;
 | 
			
		||||
	gboolean match_case;
 | 
			
		||||
	gboolean parse_escapes;
 | 
			
		||||
 | 
			
		||||
	doc = pluma_window_get_active_document (window);
 | 
			
		||||
	if (doc == NULL)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	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) != '\0');
 | 
			
		||||
 | 
			
		||||
	/* replace text may be "", we just delete */
 | 
			
		||||
	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);
 | 
			
		||||
 | 
			
		||||
	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;
 | 
			
		||||
	gboolean match_case;
 | 
			
		||||
	gboolean entire_word;
 | 
			
		||||
	gboolean parse_escapes;
 | 
			
		||||
	guint flags = 0;
 | 
			
		||||
	gint count;
 | 
			
		||||
 | 
			
		||||
@@ -394,12 +416,21 @@ do_replace_all (PlumaSearchDialog *dialog,
 | 
			
		||||
 | 
			
		||||
	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) != '\0');
 | 
			
		||||
 | 
			
		||||
	/* replace text may be "", we just delete all occurrencies */
 | 
			
		||||
	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);
 | 
			
		||||
 | 
			
		||||
	match_case = pluma_search_dialog_get_match_case (dialog);
 | 
			
		||||
@@ -419,7 +450,11 @@ do_replace_all (PlumaSearchDialog *dialog,
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		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),
 | 
			
		||||
 
 | 
			
		||||
@@ -78,7 +78,8 @@ typedef enum
 | 
			
		||||
{
 | 
			
		||||
	PLUMA_SEARCH_DONT_SET_FLAGS	= 1 << 0, 
 | 
			
		||||
	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;
 | 
			
		||||
 | 
			
		||||
@@ -322,6 +323,10 @@ void		_pluma_document_search_region   (PlumaDocument       *doc,
 | 
			
		||||
#define PLUMA_SEARCH_SET_CASE_SENSITIVE(sflags,state) ((state == TRUE) ? \
 | 
			
		||||
(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, 
 | 
			
		||||
						       gpointer       userdata);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1165,6 +1165,14 @@ match_case_menu_item_toggled (GtkCheckMenuItem *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
 | 
			
		||||
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),
 | 
			
		||||
					PLUMA_SEARCH_IS_CASE_SENSITIVE (view->priv->search_flags));
 | 
			
		||||
	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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user