[gedit] Bug 730947 - Fix highlight mode selector to activate selected language on activate



commit c95a2d9f85ae51a992039038b7beab2a645d4673
Author: Garrett Regier <garrettregier gmail com>
Date:   Thu May 29 17:46:55 2014 -0700

    Bug 730947 - Fix highlight mode selector to activate selected language on activate
    
    Also, only emit language-selected if their is a language.

 gedit/gedit-highlight-mode-dialog.c   |   14 ++++++++++++++
 gedit/gedit-highlight-mode-selector.c |   26 +++++++++++++++++---------
 2 files changed, 31 insertions(+), 9 deletions(-)
---
diff --git a/gedit/gedit-highlight-mode-dialog.c b/gedit/gedit-highlight-mode-dialog.c
index 995cbde..1e00452 100644
--- a/gedit/gedit-highlight-mode-dialog.c
+++ b/gedit/gedit-highlight-mode-dialog.c
@@ -36,9 +36,20 @@ gedit_highlight_mode_dialog_response (GtkDialog *dialog,
 
        if (response_id == GTK_RESPONSE_OK)
        {
+               /* The dialog will be destroyed if a language is selected */
                gedit_highlight_mode_selector_activate_selected_language (priv->selector);
        }
+       else
+       {
+               gtk_widget_destroy (GTK_WIDGET (dialog));
+       }
+}
 
+static void
+on_language_selected (GeditHighlightModeSelector *sel,
+                      GtkSourceLanguage          *language,
+                      GtkDialog                  *dialog)
+{
        gtk_widget_destroy (GTK_WIDGET (dialog));
 }
 
@@ -63,6 +74,9 @@ gedit_highlight_mode_dialog_init (GeditHighlightModeDialog *dlg)
 
        gtk_widget_init_template (GTK_WIDGET (dlg));
        gtk_dialog_set_default_response (GTK_DIALOG (dlg), GTK_RESPONSE_OK);
+
+       g_signal_connect (dlg->priv->selector, "language-selected",
+                         G_CALLBACK (on_language_selected), dlg);
 }
 
 GtkWidget *
diff --git a/gedit/gedit-highlight-mode-selector.c b/gedit/gedit-highlight-mode-selector.c
index 4f7727d..a7a64ba 100644
--- a/gedit/gedit-highlight-mode-selector.c
+++ b/gedit/gedit-highlight-mode-selector.c
@@ -113,6 +113,13 @@ visible_func (GtkTreeModel               *model,
 }
 
 static void
+on_entry_activate (GtkEntry                   *entry,
+                   GeditHighlightModeSelector *selector)
+{
+       gedit_highlight_mode_selector_activate_selected_language (selector);
+}
+
+static void
 on_entry_changed (GtkEntry                   *entry,
                   GeditHighlightModeSelector *selector)
 {
@@ -233,6 +240,8 @@ gedit_highlight_mode_selector_init (GeditHighlightModeSelector *selector)
                                                selector,
                                                NULL);
 
+       g_signal_connect (priv->entry, "activate",
+                         G_CALLBACK (on_entry_activate), selector);
        g_signal_connect (priv->entry, "changed",
                          G_CALLBACK (on_entry_changed), selector);
        g_signal_connect (priv->entry, "key-press-event",
@@ -332,24 +341,23 @@ void
 gedit_highlight_mode_selector_activate_selected_language (GeditHighlightModeSelector *selector)
 {
        GeditHighlightModeSelectorPrivate *priv = selector->priv;
-       GtkSourceLanguage *lang = NULL;
+       GtkSourceLanguage *lang;
        GtkTreeIter iter;
 
        g_return_if_fail (GEDIT_IS_HIGHLIGHT_MODE_SELECTOR (selector));
 
-       if (gtk_tree_selection_get_selected (priv->treeview_selection, NULL, &iter))
+       if (!gtk_tree_selection_get_selected (priv->treeview_selection, NULL, &iter))
        {
-               gtk_tree_model_get (GTK_TREE_MODEL (priv->treemodelfilter), &iter,
-                                   COLUMN_LANG, &lang,
-                                   -1);
+               return;
        }
 
+       gtk_tree_model_get (GTK_TREE_MODEL (priv->treemodelfilter), &iter,
+                           COLUMN_LANG, &lang,
+                           -1);
+
        g_signal_emit (G_OBJECT (selector), signals[LANGUAGE_SELECTED], 0, lang);
 
-       if (lang)
-       {
-               g_object_unref (lang);
-       }
+       g_object_unref (lang);
 }
 
 /* ex:set ts=8 noet: */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]