[Xfce4-commits] r30116 - terminal/trunk/terminal

Nick Schermer nick at xfce.org
Sun Jun 28 20:04:18 CEST 2009


Author: nick
Date: 2009-06-28 18:04:18 +0000 (Sun, 28 Jun 2009)
New Revision: 30116

Modified:
   terminal/trunk/terminal/terminal-accel-map.c
   terminal/trunk/terminal/terminal-accel-map.h
   terminal/trunk/terminal/terminal-app.c
   terminal/trunk/terminal/terminal-preferences.c
   terminal/trunk/terminal/terminal-private.h
   terminal/trunk/terminal/terminal-screen.c
   terminal/trunk/terminal/terminal-shortcut-editor.c
   terminal/trunk/terminal/terminal-widget.c
   terminal/trunk/terminal/terminal-window.c
Log:
Change handling of accelerators (bug #4246).

You can now also edit accelerators in the in menu, so
editable menu accelerators are not lost anymore. Also
make the code a bit more efficient on startup and during
shortcut editing.


Modified: terminal/trunk/terminal/terminal-accel-map.c
===================================================================
--- terminal/trunk/terminal/terminal-accel-map.c	2009-06-28 17:02:52 UTC (rev 30115)
+++ terminal/trunk/terminal/terminal-accel-map.c	2009-06-28 18:04:18 UTC (rev 30116)
@@ -65,8 +65,7 @@
   GParamSpec **specs;
   GParamSpec  *spec;
   gchar       *signal_name;
-  guint        nspecs;
-  guint        n;
+  guint        nspecs, n;
 
   map->preferences = terminal_preferences_get ();
 
@@ -114,28 +113,68 @@
 
   _terminal_return_if_fail (g_str_has_prefix (pspec->name, "accel-"));
 
+  g_object_get (G_OBJECT (preferences), pspec->name, &accelerator, NULL);
+
   accelerator_path = g_strconcat ("<Actions>/terminal-window/", pspec->name + 6, NULL);
-
-  g_object_get (G_OBJECT (preferences), pspec->name, &accelerator, NULL);
-  if (G_LIKELY (accelerator != NULL))
+  if (G_UNLIKELY (IS_STRING (accelerator)))
     {
       gtk_accelerator_parse (accelerator, &accelerator_key, &accelerator_mods);
       gtk_accel_map_change_entry (accelerator_path,
                                   accelerator_key,
                                   accelerator_mods,
                                   TRUE);
-      g_free (accelerator);
     }
   else
     {
       gtk_accel_map_change_entry (accelerator_path, 0, 0, TRUE);
     }
-
   g_free (accelerator_path);
+  g_free (accelerator);
 }
 
 
 
+static void
+terminal_accel_map_changed (GtkAccelMap      *object,
+                            gchar            *accel_path,
+                            guint             accel_key,
+                            GdkModifierType   accel_mods,
+                            TerminalAccelMap *map)
+{
+  gchar        *property, *name;
+  GParamSpec **specs;
+  guint         nspecs, n;
+
+  _terminal_return_if_fail (TERMINAL_IS_ACCEL_MAP (map));
+  _terminal_return_if_fail (GTK_IS_ACCEL_MAP (object));
+
+  /* only accept window property names */
+  if (!g_str_has_prefix (accel_path, "<Actions>/terminal-window/"))
+    return;
+
+  /* create the property name */
+  property = g_strconcat ("accel-", accel_path + 26, NULL);
+
+  /* check if the property exists in the preferences object */
+  specs = g_object_class_list_properties (G_OBJECT_GET_CLASS (map->preferences), &nspecs);
+  for (n = 0; n < nspecs; ++n)
+    {
+      if (exo_str_is_equal (specs[n]->name, property))
+        {
+          /* store the new accelerator */
+          name = gtk_accelerator_name (accel_key, accel_mods);
+          g_object_set (G_OBJECT (map->preferences), property, name, NULL);
+          g_free (name);
+
+          break;
+        }
+    }
+  g_free (property);
+  g_free (specs);
+}
+
+
+
 /**
  * terminal_accel_map_new:
  *
@@ -146,3 +185,17 @@
 {
   return g_object_new (TERMINAL_TYPE_ACCEL_MAP, NULL);
 }
+
+
+
+void
+terminal_accel_map_start_monitor (TerminalAccelMap *map)
+{
+  GtkAccelMap *gtkmap;
+
+  _terminal_return_if_fail (TERMINAL_IS_ACCEL_MAP (map));
+
+  /* monitor the accel map for changes */
+  gtkmap = gtk_accel_map_get ();
+  g_signal_connect (G_OBJECT (gtkmap), "changed", G_CALLBACK (terminal_accel_map_changed), map);
+}

Modified: terminal/trunk/terminal/terminal-accel-map.h
===================================================================
--- terminal/trunk/terminal/terminal-accel-map.h	2009-06-28 17:02:52 UTC (rev 30115)
+++ terminal/trunk/terminal/terminal-accel-map.h	2009-06-28 18:04:18 UTC (rev 30116)
@@ -41,10 +41,12 @@
   GObjectClass  __parent__;
 };
 
-GType             terminal_accel_map_get_type (void) G_GNUC_CONST;
+GType             terminal_accel_map_get_type      (void) G_GNUC_CONST;
 
-TerminalAccelMap *terminal_accel_map_new      (void);
+TerminalAccelMap *terminal_accel_map_new           (void);
 
+void              terminal_accel_map_start_monitor (TerminalAccelMap *map);
+
 G_END_DECLS
 
 #endif /* !__TERMINAL_ACCEL_MAP_H__ */

Modified: terminal/trunk/terminal/terminal-app.c
===================================================================
--- terminal/trunk/terminal/terminal-app.c	2009-06-28 17:02:52 UTC (rev 30115)
+++ terminal/trunk/terminal/terminal-app.c	2009-06-28 18:04:18 UTC (rev 30116)
@@ -48,7 +48,7 @@
 
 static void               terminal_app_finalize                 (GObject            *object);
 static void               terminal_app_update_accels            (TerminalApp        *app);
-static GtkWidget           *terminal_app_create_window          (TerminalApp        *app,
+static GtkWidget         *terminal_app_create_window            (TerminalApp        *app,
                                                                  gboolean            fullscreen,
                                                                  TerminalVisibility  menubar,
                                                                  TerminalVisibility  borders,
@@ -483,6 +483,8 @@
   g_list_foreach (attrs, (GFunc) terminal_window_attr_free, NULL);
   g_list_free (attrs);
 
+  terminal_accel_map_start_monitor (app->accel_map);
+
   return TRUE;
 }
 

Modified: terminal/trunk/terminal/terminal-preferences.c
===================================================================
--- terminal/trunk/terminal/terminal-preferences.c	2009-06-28 17:02:52 UTC (rev 30115)
+++ terminal/trunk/terminal/terminal-preferences.c	2009-06-28 18:04:18 UTC (rev 30116)
@@ -395,7 +395,7 @@
                                    g_param_spec_string ("accel-preferences",
                                                         _("Preferences"),
                                                         "AccelPreferences",
-                                                        _("Disabled"),
+                                                        NULL,
                                                         EXO_PARAM_READWRITE));
 
   /**
@@ -406,7 +406,7 @@
                                    g_param_spec_string ("accel-show-menubar",
                                                         _("Show menubar"),
                                                         "AccelShowMenubar",
-                                                        _("Disabled"),
+                                                        NULL,
                                                         EXO_PARAM_READWRITE));
 
   /**
@@ -417,7 +417,7 @@
                                    g_param_spec_string ("accel-show-toolbars",
                                                         _("Show toolbars"),
                                                         "AccelShowToolbars",
-                                                        _("Disabled"),
+                                                        NULL,
                                                         EXO_PARAM_READWRITE));
 
   /**
@@ -428,7 +428,7 @@
                                    g_param_spec_string ("accel-show-borders",
                                                         _("Show borders"),
                                                         "AccelShowBorders",
-                                                        _("Disabled"),
+                                                        NULL,
                                                         EXO_PARAM_READWRITE));
 
   /**
@@ -450,7 +450,7 @@
                                    g_param_spec_string ("accel-set-title",
                                                         _("Set Title"),
                                                         "AccelSetTitle",
-                                                        _("Disabled"),
+                                                        NULL,
                                                         EXO_PARAM_READWRITE));
 
   /**
@@ -461,7 +461,7 @@
                                    g_param_spec_string ("accel-reset",
                                                         _("Reset"),
                                                         "AccelReset",
-                                                        _("Disabled"),
+                                                        NULL,
                                                         EXO_PARAM_READWRITE));
 
   /**
@@ -472,7 +472,7 @@
                                    g_param_spec_string ("accel-reset-and-clear",
                                                         _("Reset and Clear"),
                                                         "AccelResetAndClear",
-                                                        _("Disabled"),
+                                                        NULL,
                                                         EXO_PARAM_READWRITE));
 
   /**

Modified: terminal/trunk/terminal/terminal-private.h
===================================================================
--- terminal/trunk/terminal/terminal-private.h	2009-06-28 17:02:52 UTC (rev 30115)
+++ terminal/trunk/terminal/terminal-private.h	2009-06-28 18:04:18 UTC (rev 30116)
@@ -33,6 +33,8 @@
 #define TERMINAL_HAS_ANTI_ALIAS_SETTING (TRUE)
 #endif
 
+#define IS_STRING(string) (string != NULL && *string != '\0')
+
 /* support macros for debugging */
 #ifndef NDEBUG
 #define _terminal_assert(expr)                  g_assert (expr)

Modified: terminal/trunk/terminal/terminal-screen.c
===================================================================
--- terminal/trunk/terminal/terminal-screen.c	2009-06-28 17:02:52 UTC (rev 30115)
+++ terminal/trunk/terminal/terminal-screen.c	2009-06-28 18:04:18 UTC (rev 30116)
@@ -1239,7 +1239,7 @@
 
   _terminal_return_val_if_fail (TERMINAL_IS_SCREEN (screen), NULL);
 
-  if (G_UNLIKELY (*screen->custom_title != '\0'))
+  if (IS_STRING (screen->custom_title))
     return g_strdup (screen->custom_title);
 
   g_object_get (G_OBJECT (screen->preferences),

Modified: terminal/trunk/terminal/terminal-shortcut-editor.c
===================================================================
--- terminal/trunk/terminal/terminal-shortcut-editor.c	2009-06-28 17:02:52 UTC (rev 30115)
+++ terminal/trunk/terminal/terminal-shortcut-editor.c	2009-06-28 18:04:18 UTC (rev 30116)
@@ -30,6 +30,7 @@
 #include <terminal/terminal-preferences.h>
 #include <terminal/terminal-shortcut-editor.h>
 #include <terminal/terminal-stock.h>
+#include <terminal/terminal-private.h>
 
 #if defined(GDK_WINDOWING_WIN32)
 #include <gdk/gdkwin32.h>
@@ -203,18 +204,13 @@
 
           g_object_get (G_OBJECT (editor->preferences), pspec->name, &accel, NULL);
 
-          if (accel == NULL)
-            accel = g_strdup (_("Disabled"));
-
           gtk_tree_store_append (store, &child, &parent);
           gtk_tree_store_set (store, &child,
                               COLUMN_TITLE, g_param_spec_get_nick (pspec),
-                              COLUMN_ACCEL, accel,
+                              COLUMN_ACCEL, IS_STRING (accel) ? accel : _("Disabled"),
                               COLUMN_PROPERTY, pspec->name,
                               -1);
-
-          if (accel != NULL)
-            g_free (accel);
+          g_free (accel);
         }
     }
 
@@ -393,7 +389,7 @@
 
   response = gtk_dialog_run (GTK_DIALOG (dialog));
   if (response == TERMINAL_RESPONSE_CLEAR)
-    g_object_set (G_OBJECT (editor->preferences), property, _("Disabled"), NULL);
+    g_object_set (G_OBJECT (editor->preferences), property, "", NULL);
 
   gdk_keyboard_ungrab (GDK_CURRENT_TIME);
 
@@ -483,6 +479,7 @@
   GtkTreeIter   child;
   gchar        *property;
   gchar        *accel;
+  gboolean      found = FALSE;
 
   g_object_get (G_OBJECT (preferences), pspec->name, &accel, NULL);
 
@@ -499,13 +496,17 @@
                                       COLUMN_PROPERTY, &property,
                                       -1);
                   if (exo_str_is_equal (property, pspec->name))
-                    gtk_tree_store_set (GTK_TREE_STORE (model), &child, COLUMN_ACCEL, accel, -1);
+                    {
+                      gtk_tree_store_set (GTK_TREE_STORE (model), &child,
+                          COLUMN_ACCEL, IS_STRING (accel) ? accel : _("Disabled"), -1);
+                      found = TRUE;
+                    }
                   g_free (property);
                 }
-              while (gtk_tree_model_iter_next (model, &child));
+              while (!found && gtk_tree_model_iter_next (model, &child));
             }
         }
-      while (gtk_tree_model_iter_next (model, &parent));
+      while (!found && gtk_tree_model_iter_next (model, &parent));
     }
 
   g_free (accel);

Modified: terminal/trunk/terminal/terminal-widget.c
===================================================================
--- terminal/trunk/terminal/terminal-widget.c	2009-06-28 17:02:52 UTC (rev 30115)
+++ terminal/trunk/terminal/terminal-widget.c	2009-06-28 18:04:18 UTC (rev 30116)
@@ -483,7 +483,7 @@
       text = (gchar *) gtk_selection_data_get_text (selection_data);
       if (G_LIKELY (text != NULL))
         {
-          if (G_LIKELY (*text != '\0'))
+          if (G_LIKELY (IS_STRING (text)))
             vte_terminal_feed_child (VTE_TERMINAL (widget), text, strlen (text));
           g_free (text);
         }

Modified: terminal/trunk/terminal/terminal-window.c
===================================================================
--- terminal/trunk/terminal/terminal-window.c	2009-06-28 17:02:52 UTC (rev 30115)
+++ terminal/trunk/terminal/terminal-window.c	2009-06-28 18:04:18 UTC (rev 30116)
@@ -365,7 +365,6 @@
         }
     }
 
-
   /* setup mnemonics */
   g_object_get (G_OBJECT (window->preferences), "shortcuts-no-mnemonics", &bval, NULL);
   if (G_UNLIKELY (bval))




More information about the Xfce4-commits mailing list