[gedit/wip/redesign] Make the language combo a button



commit dff04b065c3533ab21b92c17d247bfd7637ecb94
Author: Ignacio Casal Quinteiro <icq gnome org>
Date:   Fri May 10 08:39:50 2013 +0200

    Make the language combo a button

 gedit/gedit-window-private.h |    4 +-
 gedit/gedit-window.c         |  100 ++++++++++++-----------------------------
 2 files changed, 31 insertions(+), 73 deletions(-)
---
diff --git a/gedit/gedit-window-private.h b/gedit/gedit-window-private.h
index 49f07b2..164bfed 100644
--- a/gedit/gedit-window-private.h
+++ b/gedit/gedit-window-private.h
@@ -73,8 +73,8 @@ struct _GeditWindowPrivate
        GtkWidget      *statusbar;
        GtkWidget      *tab_width_combo;
        GtkWidget      *tab_width_combo_menu;
-       GtkWidget      *language_combo;
-       GtkWidget      *language_combo_menu;
+       GtkWidget      *language_button;
+       GtkWidget      *language_button_label;
        guint           generic_message_cid;
        guint           tip_message_cid;
        guint           bracket_match_message_cid;
diff --git a/gedit/gedit-window.c b/gedit/gedit-window.c
index 997bea7..0cb3515 100644
--- a/gedit/gedit-window.c
+++ b/gedit/gedit-window.c
@@ -61,10 +61,9 @@
 #include "gedit-status-menu-button.h"
 #include "gedit-settings.h"
 #include "gedit-marshal.h"
+#include "gedit-close-button.h"
 
-#define LANGUAGE_NONE (const gchar *)"LangNone"
 #define TAB_WIDTH_DATA "GeditWindowTabWidthData"
-#define LANGUAGE_DATA "GeditWindowLanguageData"
 #define FULLSCREEN_ANIMATION_SPEED 4
 
 #define GEDIT_WINDOW_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object),\
@@ -1180,82 +1179,41 @@ create_tab_width_combo (GeditWindow *window)
 }
 
 static void
-language_combo_item_activated (GtkMenuItem *item,
-                              GeditWindow *window)
+on_language_button_clicked (GtkButton   *button,
+                            GeditWindow *window)
 {
-       GeditDocument *doc;
-       GtkSourceLanguage *language;
-
-       doc = gedit_window_get_active_document (window);
-
-       if (!doc)
-               return;
-
-       language = GTK_SOURCE_LANGUAGE (g_object_get_data (G_OBJECT (item), LANGUAGE_DATA));
-       gedit_document_set_language (doc, language);
+       _gedit_cmd_view_highlight_mode (NULL, NULL, window);
 }
 
 static void
-create_language_combo (GeditWindow *window)
+create_language_button (GeditWindow *window)
 {
-       GtkSourceLanguageManager *lm;
-       const gchar * const *ids;
-       const gchar *name;
-       GtkWidget *item;
-       gint i;
+       GtkWidget *box;
+       GtkWidget *arrow;
 
-       window->priv->language_combo = gedit_status_menu_button_new ();
-       window->priv->language_combo_menu = gtk_menu_new ();
-       gtk_menu_button_set_popup (GTK_MENU_BUTTON (window->priv->language_combo),
-                                  window->priv->language_combo_menu);
-       gtk_widget_show (window->priv->language_combo);
+       // quick hack to have the right style
+       window->priv->language_button = gedit_close_button_new ();
+       gtk_widget_show (window->priv->language_button);
        gtk_box_pack_end (GTK_BOX (window->priv->statusbar),
-                         window->priv->language_combo,
-                         FALSE,
-                         TRUE,
-                         0);
-
-       name = _("Plain Text");
-       item = gtk_menu_item_new_with_label (name);
-       gtk_widget_show (item);
-
-       g_object_set_data (G_OBJECT (item), LANGUAGE_DATA, NULL);
-       gtk_menu_shell_append (GTK_MENU_SHELL (window->priv->language_combo_menu),
-                              GTK_WIDGET (item));
-       g_signal_connect (item,
-                         "activate",
-                         G_CALLBACK (language_combo_item_activated),
-                         window);
+                         window->priv->language_button,
+                         FALSE, TRUE, 0);
 
-       lm = gtk_source_language_manager_get_default ();
-       ids = gtk_source_language_manager_get_language_ids (lm);
+       gtk_widget_destroy (gtk_bin_get_child (GTK_BIN (window->priv->language_button)));
+       box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3);
+       gtk_widget_show (box);
+       gtk_container_add (GTK_CONTAINER (window->priv->language_button), box);
 
-       for (i = 0; ids[i] != NULL; i++)
-       {
-               GtkSourceLanguage *lang;
-
-               lang = gtk_source_language_manager_get_language (lm, ids[i]);
+       window->priv->language_button_label = gtk_label_new (NULL);
+       gtk_widget_show (window->priv->language_button_label);
+       gtk_box_pack_start (GTK_BOX (box), window->priv->language_button_label,
+                           FALSE, TRUE, 0);
 
-               if (!gtk_source_language_get_hidden (lang))
-               {
-                       name = gtk_source_language_get_name (lang);
-                       item = gtk_menu_item_new_with_label (name);
-                       gtk_widget_show (item);
+       arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_NONE);
+       gtk_widget_show (arrow);
+       gtk_box_pack_start (GTK_BOX (box), arrow, FALSE, FALSE, 0);
 
-                       g_object_set_data_full (G_OBJECT (item),
-                                               LANGUAGE_DATA,
-                                               g_object_ref (lang),
-                                               (GDestroyNotify)g_object_unref);
-
-                       gtk_menu_shell_append (GTK_MENU_SHELL (window->priv->language_combo_menu),
-                                              GTK_WIDGET (item));
-
-                       g_signal_connect (item,
-                                         "activate",
-                                         G_CALLBACK (language_combo_item_activated),
-                                         window);
-               }
-       }
+       g_signal_connect (window->priv->language_button, "clicked",
+                         G_CALLBACK (on_language_button_clicked), window);
 }
 
 static void
@@ -1271,7 +1229,7 @@ setup_statusbar (GeditWindow *window)
                (GTK_STATUSBAR (window->priv->statusbar), "bracket_match_message");
 
        create_tab_width_combo (window);
-       create_language_combo (window);
+       create_language_button (window);
 
        g_settings_bind (window->priv->ui_settings,
                         "statusbar-visible",
@@ -1602,7 +1560,7 @@ language_changed (GObject     *object,
        else
                label = _("Plain Text");
 
-       gtk_button_set_label (GTK_BUTTON (window->priv->language_combo), label);
+       gtk_label_set_text (GTK_LABEL (window->priv->language_button_label), label);
 
        peas_extension_set_foreach (window->priv->extensions,
                                    (PeasExtensionSetForeachFunc) extension_update_state,
@@ -1652,7 +1610,7 @@ update_statusbar (GeditWindow *window,
                                       gtk_text_view_get_overwrite (GTK_TEXT_VIEW (new_view)));
 
        gtk_widget_show (window->priv->tab_width_combo);
-       gtk_widget_show (window->priv->language_combo);
+       gtk_widget_show (window->priv->language_button);
 
        /* find the use spaces item */
        items = gtk_container_get_children (GTK_CONTAINER (window->priv->tab_width_combo_menu));
@@ -2685,7 +2643,7 @@ on_tab_removed (GeditMultiNotebook *multi,
 
                /* hide the combos */
                gtk_widget_hide (window->priv->tab_width_combo);
-               gtk_widget_hide (window->priv->language_combo);
+               gtk_widget_hide (window->priv->language_button);
        }
 
        if (!window->priv->dispose_has_run)


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