gnome-terminal r2724 - trunk/src



Author: chpe
Date: Thu May 29 19:48:28 2008
New Revision: 2724
URL: http://svn.gnome.org/viewvc/gnome-terminal?rev=2724&view=rev

Log:
Move the menubar accel handling to TerminalWindow in the same function that handles the mnemonics setting.
Add a property for the menubar accel state to TerminalApp.


Modified:
   trunk/src/terminal-accels.c
   trunk/src/terminal-app.c
   trunk/src/terminal-app.h
   trunk/src/terminal-window.c

Modified: trunk/src/terminal-accels.c
==============================================================================
--- trunk/src/terminal-accels.c	(original)
+++ trunk/src/terminal-accels.c	Thu May 29 19:48:28 2008
@@ -196,16 +196,6 @@
                                 GConfEntry  *entry,
                                 gpointer     user_data);
 
-static void mnemonics_change_notify (GConfClient *client,
-                                    guint        cnxn_id,
-                                    GConfEntry  *entry,
-                                    gpointer     user_data);
-
-static void menu_accels_change_notify (GConfClient *client,
-                                       guint        cnxn_id,
-                                       GConfEntry  *entry,
-                                       gpointer     user_data);
-
 static void accel_changed_callback (GtkAccelGroup  *accel_group,
                                     guint           keyval,
                                     GdkModifierType modifier,
@@ -226,14 +216,9 @@
 
 static void      queue_gconf_sync (void);
 
-static void      update_menu_accel_state (void);
-
 static GtkAccelGroup * /* accel_group_i_need_because_gtk_accel_api_sucks */ hack_group = NULL;
-static gboolean using_mnemonics = TRUE;
-static gboolean using_menu_accels = TRUE;
 /* never set gconf keys in response to receiving a gconf notify. */
 static int inside_gconf_notify = 0;
-static char *saved_menu_accel = NULL;
 static GtkWidget *edit_keys_dialog = NULL;
 static GtkWidget *edit_keys_dialog_treeview = NULL;
 static GtkWidget *edit_keys_dialog_mnemonics_checkbutton = NULL;
@@ -308,20 +293,6 @@
                     "accel_changed",
                     G_CALLBACK (accel_changed_callback),
                     NULL);
-
-  using_mnemonics = gconf_client_get_bool (conf, CONF_GLOBAL_PREFIX"/use_mnemonics", NULL);
-  gconf_client_notify_add (conf,
-                           CONF_GLOBAL_PREFIX"/use_mnemonics",
-                           mnemonics_change_notify,
-                           NULL, NULL, NULL);
-
-  using_menu_accels = gconf_client_get_bool (conf, CONF_GLOBAL_PREFIX"/use_menu_accelerators", NULL);
-  update_menu_accel_state ();
-  
-  gconf_client_notify_add (conf,
-                           CONF_GLOBAL_PREFIX"/use_menu_accelerators",
-                           menu_accels_change_notify,
-                           NULL, NULL, NULL);
 }
 
 static gboolean
@@ -469,6 +440,7 @@
     }
 }
 
+#if 0
 static void
 mnemonics_change_notify (GConfClient *client,
                          guint        cnxn_id,
@@ -531,6 +503,7 @@
         }
     }
 }
+#endif
 
 static gboolean
 binding_from_string (const char      *str,
@@ -918,6 +891,7 @@
 disable_mnemonics_toggled (GtkWidget *button,
                            gpointer   data)
 {
+#if 0
   gboolean active;
 
   active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button));
@@ -935,12 +909,14 @@
                              !active, NULL);
       g_object_unref (conf);
     }
+#endif
 }
 
 static void
 disable_menu_accels_toggled (GtkWidget *button,
                              gpointer   data)
 {
+#if 0
   gboolean active;
 
   active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button));
@@ -958,6 +934,7 @@
                              !active, NULL);
       g_object_unref (conf);
     }
+#endif
 }
 
 void
@@ -989,7 +966,9 @@
                     G_CALLBACK (gtk_widget_destroyed),
                     &edit_keys_dialog_mnemonics_checkbutton);
 
+#if 0
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (disable_mnemonics_button), !using_mnemonics);
+#endif
   g_signal_connect (disable_mnemonics_button, "toggled",
                     G_CALLBACK (disable_mnemonics_toggled),
                     NULL);
@@ -999,7 +978,9 @@
                     G_CALLBACK (gtk_widget_destroyed),
                     &edit_keys_dialog_menu_accel_checkbutton);
 
+#if 0
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (disable_menu_accel_button), !using_menu_accels);
+#endif
   g_signal_connect (disable_menu_accel_button, "toggled",
                     G_CALLBACK (disable_menu_accels_toggled),
                     NULL);
@@ -1083,36 +1064,3 @@
 
   gtk_window_present (GTK_WINDOW (edit_keys_dialog));
 }
-
-static void
-update_menu_accel_state (void)
-{
-  /* Now this is a bad hack on so many levels. */
-  
-  if (saved_menu_accel == NULL)
-    {
-      g_object_get (G_OBJECT (gtk_settings_get_default ()),
-                    "gtk-menu-bar-accel",
-                    &saved_menu_accel,
-                    NULL);
-      /* FIXME if gtkrc is reparsed we don't catch on,
-       * I guess.
-       */
-    }
-  
-  if (using_menu_accels)
-    {
-      gtk_settings_set_string_property (gtk_settings_get_default (),
-                                        "gtk-menu-bar-accel",
-                                        saved_menu_accel,
-                                        "gnome-terminal");
-    }
-  else
-    {
-      gtk_settings_set_string_property (gtk_settings_get_default (),
-                                        "gtk-menu-bar-accel",
-                                        /* no one will ever press this ;-) */
-                                        "<Shift><Control><Mod1><Mod2><Mod3><Mod4><Mod5>F10",
-                                        "gnome-terminal");
-    }
-}

Modified: trunk/src/terminal-app.c
==============================================================================
--- trunk/src/terminal-app.c	(original)
+++ trunk/src/terminal-app.c	Thu May 29 19:48:28 2008
@@ -92,6 +92,7 @@
   guint default_profile_notify_id;
   guint system_font_notify_id;
   guint enable_mnemonics_notify_id;
+  guint enable_menu_accels_notify_id;
 
   GHashTable *profiles;
   char* default_profile_id;
@@ -100,6 +101,7 @@
 
   PangoFontDescription *system_font_desc;
   gboolean enable_mnemonics;
+  gboolean enable_menu_accels;
 
   gboolean use_factory;
 };
@@ -108,6 +110,7 @@
 {
   PROP_0,
   PROP_DEFAULT_PROFILE,
+  PROP_ENABLE_MENU_ACCELS,
   PROP_ENABLE_MNEMONICS,
   PROP_SYSTEM_FONT,
 };
@@ -136,6 +139,9 @@
 #define ENABLE_MNEMONICS_KEY CONF_GLOBAL_PREFIX "/use_mnemonics"
 #define DEFAULT_ENABLE_MNEMONICS (TRUE)
 
+#define ENABLE_MENU_ACCELS_KEY CONF_GLOBAL_PREFIX"/use_menu_accelerators"
+#define DEFAULT_ENABLE_MENU_ACCELS (TRUE)
+
 #define PROFILE_LIST_KEY CONF_GLOBAL_PREFIX "/profile_list"
 #define DEFAULT_PROFILE_KEY CONF_GLOBAL_PREFIX "/default_profile"
 
@@ -210,7 +216,7 @@
     {
       /* We are the default profile */
       app->default_profile = profile;
-      g_object_notify (G_OBJECT (app), "default-profile");
+      g_object_notify (G_OBJECT (app), TERMINAL_APP_DEFAULT_PROFILE);
     }
   
   return profile;
@@ -521,7 +527,7 @@
    */
   app->default_profile = profile;
  
-  g_object_notify (G_OBJECT (app), "default-profile");
+  g_object_notify (G_OBJECT (app), TERMINAL_APP_DEFAULT_PROFILE);
 
   g_object_unref (profile);
 }
@@ -849,7 +855,7 @@
 
       app->default_profile = new_default;
     
-      g_object_notify (object, "default-profile");
+      g_object_notify (object, TERMINAL_APP_DEFAULT_PROFILE);
     }
 
   g_assert (terminal_app_get_profile_count (app) > 0);
@@ -883,7 +889,7 @@
 
   app->default_profile = terminal_app_get_profile_by_name (app, name);
 
-  g_object_notify (G_OBJECT (app), "default-profile");
+  g_object_notify (G_OBJECT (app), TERMINAL_APP_DEFAULT_PROFILE);
 }
 
 static void
@@ -921,7 +927,7 @@
 
   app->system_font_desc = font_desc;
 
-  g_object_notify (G_OBJECT (app), "system-font");
+  g_object_notify (G_OBJECT (app), TERMINAL_APP_SYSTEM_FONT);
 }
 
 static void
@@ -933,8 +939,7 @@
   TerminalApp *app = TERMINAL_APP (user_data);
   GConfValue *gconf_value;
 
-  if (strcmp (gconf_entry_get_key (entry),
-              CONF_GLOBAL_PREFIX "/use_mnemonics") != 0)
+  if (strcmp (gconf_entry_get_key (entry), ENABLE_MNEMONICS_KEY) != 0)
     return;
 
   gconf_value = gconf_entry_get_value (entry);
@@ -942,7 +947,27 @@
     return;
 
   app->enable_mnemonics = gconf_value_get_bool (gconf_value);
-  g_object_notify (G_OBJECT (app), "enable-mnemonics");
+  g_object_notify (G_OBJECT (app), TERMINAL_APP_ENABLE_MNEMONICS);
+}
+
+static void
+terminal_app_enable_menu_accels_notify_cb (GConfClient *client,
+                                           guint        cnxn_id,
+                                           GConfEntry  *entry,
+                                           gpointer     user_data)
+{
+  TerminalApp *app = TERMINAL_APP (user_data);
+  GConfValue *gconf_value;
+
+  if (strcmp (gconf_entry_get_key (entry), ENABLE_MENU_ACCELS_KEY) != 0)
+    return;
+
+  gconf_value = gconf_entry_get_value (entry);
+  if (!gconf_value || gconf_value->type != GCONF_VALUE_BOOL)
+    return;
+
+  app->enable_menu_accels = gconf_value_get_bool (gconf_value);
+  g_object_notify (G_OBJECT (app), TERMINAL_APP_ENABLE_MENU_ACCELS);
 }
 
 static void
@@ -1452,9 +1477,16 @@
                              terminal_app_enable_mnemonics_notify_cb,
                              app, NULL, NULL);
 
+  app->enable_menu_accels_notify_id =
+    gconf_client_notify_add (app->conf,
+                             ENABLE_MENU_ACCELS_KEY,
+                             terminal_app_enable_menu_accels_notify_cb,
+                             app, NULL, NULL);
+
   gconf_client_notify (app->conf, PROFILE_LIST_KEY);
   gconf_client_notify (app->conf, DEFAULT_PROFILE_KEY);
   gconf_client_notify (app->conf, MONOSPACE_FONT_KEY);
+  gconf_client_notify (app->conf, ENABLE_MENU_ACCELS_KEY);
   gconf_client_notify (app->conf, ENABLE_MNEMONICS_KEY);
 
   terminal_accels_init ();
@@ -1482,6 +1514,8 @@
     gconf_client_notify_remove (app->conf, app->default_profile_notify_id);
   if (app->system_font_notify_id != 0)
     gconf_client_notify_remove (app->conf, app->system_font_notify_id);
+  if (app->enable_menu_accels_notify_id != 0)
+    gconf_client_notify_remove (app->conf, app->enable_menu_accels_notify_id);
   if (app->enable_mnemonics_notify_id != 0)
     gconf_client_notify_remove (app->conf, app->enable_mnemonics_notify_id);
 
@@ -1518,6 +1552,9 @@
         else
           g_value_take_boxed (value, pango_font_description_from_string (DEFAULT_MONOSPACE_FONT));
         break;
+      case PROP_ENABLE_MENU_ACCELS:
+        g_value_set_boolean (value, app->enable_menu_accels);
+        break;
       case PROP_ENABLE_MNEMONICS:
         g_value_set_boolean (value, app->enable_mnemonics);
         break;
@@ -1558,15 +1595,22 @@
 
   g_object_class_install_property
     (object_class,
+     PROP_ENABLE_MENU_ACCELS,
+     g_param_spec_boolean (TERMINAL_APP_ENABLE_MENU_ACCELS, NULL, NULL,
+                           DEFAULT_ENABLE_MENU_ACCELS,
+                           G_PARAM_READABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
+
+  g_object_class_install_property
+    (object_class,
      PROP_ENABLE_MNEMONICS,
-     g_param_spec_boolean ("enable-mnemonics", NULL, NULL,
+     g_param_spec_boolean (TERMINAL_APP_ENABLE_MNEMONICS, NULL, NULL,
                            DEFAULT_ENABLE_MNEMONICS,
                            G_PARAM_READABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
 
   g_object_class_install_property
     (object_class,
      PROP_SYSTEM_FONT,
-     g_param_spec_boxed ("system-font", NULL, NULL,
+     g_param_spec_boxed (TERMINAL_APP_SYSTEM_FONT, NULL, NULL,
                          PANGO_TYPE_FONT_DESCRIPTION,
                          G_PARAM_READABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
 
@@ -1574,7 +1618,7 @@
   g_object_class_install_property
     (object_class,
      PROP_DEFAULT_PROFILE,
-     g_param_spec_object ("default-profile", NULL, NULL,
+     g_param_spec_object (TERMINAL_APP_DEFAULT_PROFILE, NULL, NULL,
                           TERMINAL_TYPE_PROFILE,
                           G_PARAM_READABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
 }

Modified: trunk/src/terminal-app.h
==============================================================================
--- trunk/src/terminal-app.h	(original)
+++ trunk/src/terminal-app.h	Thu May 29 19:48:28 2008
@@ -33,6 +33,11 @@
 
 #define GNOME_TERMINAL_ICON_NAME "utilities-terminal"
 
+#define TERMINAL_APP_DEFAULT_PROFILE    "default-profile"
+#define TERMINAL_APP_ENABLE_MENU_ACCELS "enable-menu-accels"
+#define TERMINAL_APP_ENABLE_MNEMONICS   "enable-mnemonics"
+#define TERMINAL_APP_SYSTEM_FONT        "system-font"
+
 /* TerminalApp */
 
 #define TERMINAL_TYPE_APP              (terminal_app_get_type ())

Modified: trunk/src/terminal-window.c
==============================================================================
--- trunk/src/terminal-window.c	(original)
+++ trunk/src/terminal-window.c	Thu May 29 19:48:28 2008
@@ -189,27 +189,64 @@
 
 G_DEFINE_TYPE (TerminalWindow, terminal_window, GTK_TYPE_WINDOW)
 
-/* Menubar mnemonics settings handling */
+/* Menubar mnemonics & accel settings handling */
+
+/* no one will ever press this ;-) */
+#define IMPOSSIBLE_MENUBAR_ACCEL "<Shift><Control><Mod1><Mod2><Mod3><Mod4><Mod5>F10"
 
 static void
-mnemonics_setting_change_notify_cb (TerminalApp *app,
-                                    GParamSpec *pspec,
-                                    GdkScreen *screen)
+app_setting_notify_cb (TerminalApp *app,
+                       GParamSpec *pspec,
+                       GdkScreen *screen)
 {
-  gboolean enable_mnemonics;
+  GtkSettings *settings;
+  const char *prop_name;
+
+  if (pspec)
+    prop_name = pspec->name;
+  else
+    prop_name = NULL;
 
-  g_object_get (app, "enable-mnemonics", &enable_mnemonics, NULL);
+  settings = gtk_settings_get_for_screen (screen);
 
-  g_object_set (gtk_settings_get_for_screen (screen),
-                "gtk-enable-mnemonics", enable_mnemonics,
-                NULL);
+  if (!prop_name || prop_name == I_(TERMINAL_APP_ENABLE_MNEMONICS))
+    {
+      gboolean enable_mnemonics;
+
+      g_object_get (app, TERMINAL_APP_ENABLE_MNEMONICS, &enable_mnemonics, NULL);
+      g_object_set (settings, "gtk-enable-mnemonics", enable_mnemonics, NULL);
+    }
+  else if (!prop_name || prop_name == I_(TERMINAL_APP_ENABLE_MENU_ACCELS))
+    {
+      /* const */ char *saved_menubar_accel;
+      gboolean enable_menu_accels;
+
+      /* Now this is a bad hack on so many levels. */
+      /* FIXMEchpe: instead of doing this crappy hack, file a gtk+ bug
+       * so we get a simple function to reset an overridden setting to
+       * its natural value!!
+       */
+      saved_menubar_accel = g_object_get_data (G_OBJECT (settings), "GT::gtk-menu-bar-accel");
+      if (!saved_menubar_accel)
+        {
+          g_object_get (settings, "gtk-menu-bar-accel", &saved_menubar_accel, NULL);
+          g_object_set_data_full (G_OBJECT (settings), "GT::gtk-menu-bar-accel",
+                                  saved_menubar_accel, (GDestroyNotify) g_free);
+        }
+
+      g_object_get (app, TERMINAL_APP_ENABLE_MENU_ACCELS, &enable_menu_accels, NULL);
+      if (enable_menu_accels)
+        g_object_set (settings, "gtk-menu-bar-accel", saved_menubar_accel, NULL);
+      else
+        g_object_set (settings, "gtk-menu-bar-accel", IMPOSSIBLE_MENUBAR_ACCEL, NULL);
+    }
 }
 
 static void
-mnemonics_setting_change_destroy (GdkScreen *screen)
+app_setting_notify_destroy_cb (GdkScreen *screen)
 {
   g_signal_handlers_disconnect_by_func (terminal_app_get (),
-                                        G_CALLBACK (mnemonics_setting_change_notify_cb),
+                                        G_CALLBACK (app_setting_notify_cb),
                                         screen);
 }
 
@@ -1046,12 +1083,14 @@
 
   g_object_set_data_full (G_OBJECT (screen), "GT::HasSettingsConnection",
                           GINT_TO_POINTER (TRUE),
-                          (GDestroyNotify) mnemonics_setting_change_destroy);
+                          (GDestroyNotify) app_setting_notify_destroy_cb);
 
   app = terminal_app_get ();
-  mnemonics_setting_change_notify_cb (app, NULL, screen);
-  g_signal_connect (app, "notify::enable-mnemonics",
-                    G_CALLBACK (mnemonics_setting_change_notify_cb), screen);
+  app_setting_notify_cb (app, NULL, screen);
+  g_signal_connect (app, "notify::" TERMINAL_APP_ENABLE_MNEMONICS,
+                    G_CALLBACK (app_setting_notify_cb), screen);
+  g_signal_connect (app, "notify::" TERMINAL_APP_ENABLE_MENU_ACCELS,
+                    G_CALLBACK (app_setting_notify_cb), screen);
 }
 
 static void



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