gnome-terminal r2463 - trunk/src



Author: chpe
Date: Wed Mar 19 15:22:29 2008
New Revision: 2463
URL: http://svn.gnome.org/viewvc/gnome-terminal?rev=2463&view=rev

Log:
Make the use-mnemonics setting work again.


Modified:
   trunk/src/terminal-window.c

Modified: trunk/src/terminal-window.c
==============================================================================
--- trunk/src/terminal-window.c	(original)
+++ trunk/src/terminal-window.c	Wed Mar 19 15:22:29 2008
@@ -119,13 +119,6 @@
                                               guint            page_num,
                                               TerminalWindow  *window);
 
-static void config_change_notify            (GConfClient *client,
-                                             guint        cnxn_id,
-                                             GConfEntry  *entry,
-                                             gpointer     user_data);
-
-static void reset_menubar_labels          (TerminalWindow *window);
-
 static void new_window                    (TerminalWindow  *window,
                                            TerminalScreen  *screen,
                                            TerminalProfile *profile,
@@ -216,6 +209,99 @@
 
 G_DEFINE_TYPE (TerminalWindow, terminal_window, GTK_TYPE_WINDOW)
 
+/* Menubar mnemonics settings handling */
+
+static void
+menuitem_set_mnemonic (GtkBin *menu_item,
+                       gpointer data)
+{
+  GtkWidget *label;
+  GtkAction *action;
+  char *text;
+  gboolean enable = GPOINTER_TO_UINT (data);
+
+  if (!GTK_IS_MENU_ITEM (menu_item))
+    return;
+
+  label = gtk_bin_get_child (menu_item);
+
+  action = gtk_widget_get_action (GTK_WIDGET (menu_item));
+  g_assert (action != NULL);
+
+  g_object_get (action, "label", &text, NULL);
+  if (enable)
+    gtk_label_set_text_with_mnemonic (GTK_LABEL (label), text);
+  else
+    {
+      char *src, *dest, *new_text;
+
+      src = text;
+      new_text = dest = g_new (char, strlen (text) + 1);
+
+      while (*src)
+        {
+          if (*src != '_')
+            {
+              *dest = *src;
+              ++dest;
+            }
+
+          ++src;
+        }
+      *dest = '\0';
+
+      gtk_label_set_text (GTK_LABEL (label), new_text);
+      g_free (new_text);
+    }
+  g_free (text);
+}
+
+static void
+mnemonics_setting_apply (TerminalWindow *window)
+{
+  TerminalWindowPrivate *priv = window->priv;
+  gboolean want_mnemonics, enable_mnemonics;
+
+  g_object_get (gtk_widget_get_settings (GTK_WIDGET (window)),
+                "gtk-enable-mnemonics", &enable_mnemonics,
+                NULL);
+  want_mnemonics = enable_mnemonics && priv->use_mnemonics;
+
+  if (want_mnemonics == priv->using_mnemonics)
+    return;
+
+  priv->using_mnemonics = want_mnemonics;
+  gtk_container_foreach (GTK_CONTAINER (priv->menubar),
+                         (GtkCallback) menuitem_set_mnemonic,
+                         GUINT_TO_POINTER (want_mnemonics));
+}
+
+/* FIXMEchpe: also update this when the gtk setting changes! */
+static void
+mnemonics_gconf_change_notify (GConfClient *client,
+                               guint        cnxn_id,
+                               GConfEntry  *entry,
+                               gpointer     user_data)
+{
+  GConfValue *val;
+  TerminalWindow *window = TERMINAL_WINDOW (user_data);
+  TerminalWindowPrivate *priv = window->priv;
+
+  val = gconf_entry_get_value (entry);
+  
+  if (strcmp (gconf_entry_get_key (entry),
+              CONF_GLOBAL_PREFIX"/use_mnemonics") == 0)
+    {      
+      if (val && val->type == GCONF_VALUE_BOOL)
+        {
+          priv->use_mnemonics = gconf_value_get_bool (val);
+          mnemonics_setting_apply (window);
+        }
+    }
+}
+
+/* utility functions */
+
 static char *
 escape_underscores (const char *name)
 {
@@ -1237,10 +1323,9 @@
   priv->notify_id =
     gconf_client_notify_add (priv->conf,
                              CONF_GLOBAL_PREFIX,
-                             config_change_notify,
+                             mnemonics_gconf_change_notify,
                              window,
                              NULL, NULL);
-
   error = NULL;
   use_mnemonics = gconf_client_get_bool (priv->conf,
                                          CONF_GLOBAL_PREFIX"/use_mnemonics",
@@ -1324,7 +1409,7 @@
   terminal_window_set_menubar_visible (window, TRUE);
   priv->use_default_menubar_visibility = TRUE;
 
-  reset_menubar_labels (window);
+  mnemonics_setting_apply (window);
 }
 
 static void
@@ -1779,8 +1864,6 @@
   
   g_object_set (priv->menubar, "visible", setting, NULL);
 
-  reset_menubar_labels (window);
-
   if (priv->active_term)
     {
 #ifdef DEBUG_GEOMETRY
@@ -2235,115 +2318,6 @@
 }
 
 /*
- * Config updates
- */
-
-static void
-config_change_notify (GConfClient *client,
-                      guint        cnxn_id,
-                      GConfEntry  *entry,
-                      gpointer     user_data)
-{
-  GConfValue *val;
-  TerminalWindow *window = TERMINAL_WINDOW (user_data);
-  TerminalWindowPrivate *priv = window->priv;
-
-  val = gconf_entry_get_value (entry);
-  
-  if (strcmp (gconf_entry_get_key (entry),
-              CONF_GLOBAL_PREFIX"/use_mnemonics") == 0)
-    {      
-      if (val && val->type == GCONF_VALUE_BOOL)
-        {
-          priv->use_mnemonics = gconf_value_get_bool (val);
-          reset_menubar_labels (window);
-        }
-    }
-}
-
-static void
-set_menuitem_text (GtkWidget  *mi,
-                   const char *text,
-                   gboolean    strip_mnemonic)
-{
-  GtkWidget *child;
-
-  child = gtk_bin_get_child (GTK_BIN (mi));
-
-  if (child && GTK_IS_LABEL (child))
-    {
-      const char *label;
-      char *no_mnemonic;
-      
-      label = NULL;
-      no_mnemonic = NULL;
-      
-      if (strip_mnemonic)
-        {
-          const char *src;
-          char *dest;
-
-          no_mnemonic = g_strdup (text);
-          dest = no_mnemonic;
-          src = text;
-
-          while (*src)
-            {
-              if (*src != '_')
-                {
-                  *dest = *src;
-                  ++dest;
-                }
-              
-              ++src;
-            }
-          *dest = '\0';
-
-          label = no_mnemonic;
-        }
-      else
-        {
-          label = text;
-        }
-
-      if (strip_mnemonic)
-        gtk_label_set_text (GTK_LABEL (child), label);
-      else
-        gtk_label_set_text_with_mnemonic (GTK_LABEL (child), label);
-      
-      if (no_mnemonic)
-        g_free (no_mnemonic);
-    }
-}
-
-static void
-reset_menubar_labels (TerminalWindow *window)
-{
-#if 0
-  TerminalWindowPrivate *priv = window->priv;
-  gboolean want_mnemonics =
-	  priv->use_mnemonics && priv->menubar_visible;
-
-  if (want_mnemonics == priv->using_mnemonics)
-    return;
-
-  priv->using_mnemonics = want_mnemonics;
-  set_menuitem_text (priv->file_menuitem,
-                     _("_File"), !priv->using_mnemonics);
-  set_menuitem_text (priv->edit_menuitem,
-                     _("_Edit"), !priv->using_mnemonics);
-  set_menuitem_text (priv->view_menuitem,
-                     _("_View"), !priv->using_mnemonics);
-  set_menuitem_text (priv->terminal_menuitem,
-                     _("_Terminal"), !priv->using_mnemonics);
-  set_menuitem_text (priv->go_menuitem,
-                     _("Ta_bs"), !priv->using_mnemonics);
-  set_menuitem_text (priv->help_menuitem,
-                     _("_Help"), !priv->using_mnemonics);
-#endif
-}
-
-/*
  * Callbacks for the menus
  */
 



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