[gedit] Search and replace: fix a bug with text escaping
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gedit] Search and replace: fix a bug with text escaping
- Date: Mon, 19 Aug 2013 14:03:47 +0000 (UTC)
commit c0bd412fb19d33d820d823d686b87975c008fafb
Author: Sébastien Wilmet <swilmet gnome org>
Date: Wed Aug 14 20:02:38 2013 +0200
Search and replace: fix a bug with text escaping
gedit/gedit-commands-search.c | 7 ++-
gedit/gedit-replace-dialog.c | 87 +++++------------------------------------
gedit/gedit-replace-dialog.h | 3 +
3 files changed, 17 insertions(+), 80 deletions(-)
---
diff --git a/gedit/gedit-commands-search.c b/gedit/gedit-commands-search.c
index 36652af..dddad6e 100644
--- a/gedit/gedit-commands-search.c
+++ b/gedit/gedit-commands-search.c
@@ -661,11 +661,12 @@ _gedit_cmd_search_replace (GtkAction *action,
if (selection_exists && find_text != NULL && sel_len < 80)
{
- GtkSourceSearchSettings *search_settings;
+ gchar *escaped_find_text = gtk_source_utils_escape_search_text (find_text);
- search_settings = gedit_replace_dialog_get_search_settings (GEDIT_REPLACE_DIALOG
(replace_dialog));
+ gedit_replace_dialog_set_search_text (GEDIT_REPLACE_DIALOG (replace_dialog),
+ escaped_find_text);
- gtk_source_search_settings_set_search_text (search_settings, find_text);
+ g_free (escaped_find_text);
}
g_free (find_text);
diff --git a/gedit/gedit-replace-dialog.c b/gedit/gedit-replace-dialog.c
index c454fa4..55fb669 100644
--- a/gedit/gedit-replace-dialog.c
+++ b/gedit/gedit-replace-dialog.c
@@ -151,46 +151,6 @@ gedit_replace_dialog_class_init (GeditReplaceDialogClass *klass)
}
static void
-insert_text_handler (GtkEditable *editable,
- const gchar *text,
- gint length,
- gint *position,
- gpointer data)
-{
- /* FIXME: I think we can remove this function. This was a hack in the
- * escape_search_text() function. Now there is a bug when inserting '\'
- * in the text entry (the '\' is escaped and becomes '\\').
- */
- static gboolean insert_text = FALSE;
- gchar *escaped_text;
- gint new_len;
-
- /* To avoid recursive behavior */
- if (insert_text)
- return;
-
- escaped_text = gtk_source_utils_escape_search_text (text);
-
- new_len = strlen (escaped_text);
-
- if (new_len == length)
- {
- g_free (escaped_text);
- return;
- }
-
- insert_text = TRUE;
-
- g_signal_stop_emission_by_name (editable, "insert_text");
-
- gtk_editable_insert_text (editable, escaped_text, new_len, position);
-
- insert_text = FALSE;
-
- g_free (escaped_text);
-}
-
-static void
search_text_entry_changed (GtkEditable *editable,
GeditReplaceDialog *dialog)
{
@@ -234,28 +194,6 @@ search_text_entry_changed (GtkEditable *editable,
}
static void
-search_text_notify_cb (GtkSourceSearchSettings *search_settings,
- GParamSpec *pspec,
- GeditReplaceDialog *dialog)
-{
- const gchar *search_text = gtk_source_search_settings_get_search_text (search_settings);
-
- if (search_text == NULL)
- {
- gtk_entry_set_text (GTK_ENTRY (dialog->priv->search_text_entry), "");
- }
- else
- {
- gchar *escaped_search_text = gtk_source_utils_escape_search_text (search_text);
-
- gtk_entry_set_text (GTK_ENTRY (dialog->priv->search_text_entry),
- escaped_search_text);
-
- g_free (escaped_search_text);
- }
-}
-
-static void
gedit_replace_dialog_init (GeditReplaceDialog *dlg)
{
dlg->priv = gedit_replace_dialog_get_instance_private (dlg);
@@ -305,16 +243,6 @@ gedit_replace_dialog_init (GeditReplaceDialog *dlg)
FALSE);
g_signal_connect (dlg->priv->search_text_entry,
- "insert_text",
- G_CALLBACK (insert_text_handler),
- NULL);
-
- g_signal_connect (dlg->priv->replace_text_entry,
- "insert_text",
- G_CALLBACK (insert_text_handler),
- NULL);
-
- g_signal_connect (dlg->priv->search_text_entry,
"changed",
G_CALLBACK (search_text_entry_changed),
dlg);
@@ -337,11 +265,6 @@ gedit_replace_dialog_init (GeditReplaceDialog *dlg)
dlg->priv->search_settings, "wrap-around",
G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
- g_signal_connect (dlg->priv->search_settings,
- "notify::search-text",
- G_CALLBACK (search_text_notify_cb),
- dlg);
-
gtk_widget_show_all (GTK_WIDGET (dlg));
}
@@ -389,4 +312,14 @@ gedit_replace_dialog_get_search_settings (GeditReplaceDialog *dialog)
return dialog->priv->search_settings;
}
+void
+gedit_replace_dialog_set_search_text (GeditReplaceDialog *dialog,
+ const gchar *search_text)
+{
+ g_return_if_fail (GEDIT_IS_REPLACE_DIALOG (dialog));
+
+ gtk_entry_set_text (GTK_ENTRY (dialog->priv->search_text_entry),
+ search_text);
+}
+
/* ex:set ts=8 noet: */
diff --git a/gedit/gedit-replace-dialog.h b/gedit/gedit-replace-dialog.h
index 3f7b834..241b6b2 100644
--- a/gedit/gedit-replace-dialog.h
+++ b/gedit/gedit-replace-dialog.h
@@ -96,6 +96,9 @@ gboolean gedit_replace_dialog_get_backwards (GeditReplaceDialog
*dialog);
GtkSourceSearchSettings *gedit_replace_dialog_get_search_settings (GeditReplaceDialog *dialog);
+void gedit_replace_dialog_set_search_text (GeditReplaceDialog *dialog,
+ const gchar *search_text);
+
G_END_DECLS
#endif /* __GEDIT_REPLACE_DIALOG_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]