[gedit/wip/search] Search and replace: fix a bug with text escaping



commit 2993027c457fb6961a80636a0fa0f8fc9bd3b9b7
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]