[Xfce4-commits] <terminal:master> Only save accel map on changes.

Nick Schermer noreply at xfce.org
Sun Dec 23 22:38:03 CET 2012


Updating branch refs/heads/master
         to f723d96862b116213d850eb4d373859551196294 (commit)
       from b4957dde55683f0f596216ad38877c884a514fd7 (commit)

commit f723d96862b116213d850eb4d373859551196294
Author: Nick Schermer <nick at xfce.org>
Date:   Sun Dec 23 15:06:33 2012 +0100

    Only save accel map on changes.

 terminal/terminal-app.c |   82 ++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 63 insertions(+), 19 deletions(-)

diff --git a/terminal/terminal-app.c b/terminal/terminal-app.c
index 448f873..181163c 100644
--- a/terminal/terminal-app.c
+++ b/terminal/terminal-app.c
@@ -42,14 +42,15 @@
 #include <terminal/terminal-private.h>
 #include <terminal/terminal-window.h>
 
-#define TERMINALACCELMAP "xfce4/terminal/accels.scm"
+#define ACCEL_MAP_PATH "xfce4/terminal/accels.scm"
 
 
 
 static void               terminal_app_finalize                 (GObject            *object);
 static void               terminal_app_update_accels            (TerminalApp        *app);
 static void               terminal_app_update_mnemonics         (TerminalApp        *app);
-static gboolean           terminal_app_load_accel_map           (gpointer            user_data);
+static gboolean           terminal_app_accel_map_load           (gpointer            user_data);
+static gboolean           terminal_app_accel_map_save           (gpointer            user_data);
 static GtkWidget         *terminal_app_create_window            (TerminalApp        *app,
                                                                  gboolean            fullscreen,
                                                                  TerminalVisibility  menubar,
@@ -85,7 +86,11 @@ struct _TerminalApp
   XfceSMClient        *session_client;
   gchar               *initial_menu_bar_accel;
   GSList              *windows;
-  guint                accelmap_id;
+
+  guint                accel_map_load_id;
+  guint                accel_map_save_id;
+  GtkAccelMap         *accel_map;
+
 };
 
 
@@ -132,10 +137,9 @@ terminal_app_init (TerminalApp *app)
 
   terminal_app_update_accels (app);
   terminal_app_update_mnemonics (app);
-  terminal_app_load_accel_map (app);
 
   /* schedule accel map load */
-  app->accelmap_id = g_idle_add_full (G_PRIORITY_LOW, terminal_app_load_accel_map, app, NULL);
+  app->accel_map_load_id = g_idle_add_full (G_PRIORITY_LOW, terminal_app_accel_map_load, app, NULL);
 }
 
 
@@ -145,19 +149,16 @@ terminal_app_finalize (GObject *object)
 {
   TerminalApp *app = TERMINAL_APP (object);
   GSList      *lp;
-  gchar       *path;
 
-  /* stop loading idle */
-  if (G_UNLIKELY (app->accelmap_id != 0))
-    g_source_remove (app->accelmap_id);
-
-  /* save the current accel map */
-  path = xfce_resource_save_location (XFCE_RESOURCE_CONFIG, TERMINALACCELMAP, TRUE);
-  if (G_LIKELY (path != NULL))
+  /* stop accel map stuff */
+  if (G_UNLIKELY (app->accel_map_load_id != 0))
+    g_source_remove (app->accel_map_load_id);
+  if (app->accel_map != NULL)
+    g_object_unref (G_OBJECT (app->accel_map));
+  if (G_UNLIKELY (app->accel_map_save_id != 0))
     {
-      /* save the accel map */
-      gtk_accel_map_save (path);
-      g_free (path);
+      g_source_remove (app->accel_map_save_id);
+      terminal_app_accel_map_save (app);
     }
 
   for (lp = app->windows; lp != NULL; lp = lp->next)
@@ -221,14 +222,52 @@ terminal_app_update_mnemonics (TerminalApp *app)
 
 
 static gboolean
-terminal_app_load_accel_map (gpointer user_data)
+terminal_app_accel_map_save (gpointer user_data)
+{
+  TerminalApp *app = TERMINAL_APP (user_data);
+  gchar       *path;
+
+  app->accel_map_save_id = 0;
+
+  /* save the current accel map */
+  path = xfce_resource_save_location (XFCE_RESOURCE_CONFIG, ACCEL_MAP_PATH, TRUE);
+  if (G_LIKELY (path != NULL))
+    {
+      /* save the accel map */
+      gtk_accel_map_save (path);
+      g_free (path);
+    }
+
+  return FALSE;
+}
+
+
+
+static void
+terminal_app_accel_map_changed (TerminalApp *app)
+{
+  /* stop pending save */
+  if (app->accel_map_save_id != 0)
+    {
+      g_source_remove (app->accel_map_save_id);
+      app->accel_map_save_id = 0;
+    }
+
+  /* schedule new save */
+  app->accel_map_save_id = g_timeout_add_seconds (10, terminal_app_accel_map_save, app);
+}
+
+
+
+static gboolean
+terminal_app_accel_map_load (gpointer user_data)
 {
   TerminalApp *app = TERMINAL_APP (user_data);
   gchar       *path;
 
-  app->accelmap_id = 0;
+  app->accel_map_load_id = 0;
 
-  path = xfce_resource_lookup (XFCE_RESOURCE_CONFIG, TERMINALACCELMAP);
+  path = xfce_resource_lookup (XFCE_RESOURCE_CONFIG, ACCEL_MAP_PATH);
   if (G_LIKELY (path != NULL))
     {
       /* load the accel map */
@@ -236,6 +275,11 @@ terminal_app_load_accel_map (gpointer user_data)
       g_free (path);
     }
 
+  /* watch for changes */
+  app->accel_map = gtk_accel_map_get ();
+  g_signal_connect_swapped (G_OBJECT (app->accel_map), "changed",
+      G_CALLBACK (terminal_app_accel_map_changed), app);
+
   return FALSE;
 }
 


More information about the Xfce4-commits mailing list