gnome-settings-daemon r295 - in trunk: . plugins/mouse



Author: jensg
Date: Fri Apr 11 18:47:22 2008
New Revision: 295
URL: http://svn.gnome.org/viewvc/gnome-settings-daemon?rev=295&view=rev

Log:
2008-04-11  Jens Granseuer  <jensgr gmx net>

	Make mouse plugin deactivation work

	* plugins/mouse/gsd-mouse-manager.c: (register_config_callback),
	(gsd_mouse_manager_init), (gsd_mouse_manager_start),
	(gsd_mouse_manager_stop): clean up properly on stop
	* plugins/mouse/gsd-mouse-plugin.c: (impl_deactivate): stop manager on
	deactivation


Modified:
   trunk/ChangeLog
   trunk/plugins/mouse/gsd-mouse-manager.c
   trunk/plugins/mouse/gsd-mouse-plugin.c

Modified: trunk/plugins/mouse/gsd-mouse-manager.c
==============================================================================
--- trunk/plugins/mouse/gsd-mouse-manager.c	(original)
+++ trunk/plugins/mouse/gsd-mouse-manager.c	Fri Apr 11 18:47:22 2008
@@ -52,6 +52,9 @@
 
 #define GSD_MOUSE_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSD_TYPE_MOUSE_MANAGER, GsdMouseManagerPrivate))
 
+#define GCONF_MOUSE_DIR         "/desktop/gnome/peripherals/mouse"
+#define GCONF_MOUSE_A11Y_DIR    "/desktop/gnome/accessibility/mouse"
+
 #define KEY_LEFT_HANDED         "/desktop/gnome/peripherals/mouse/left_handed"
 #define KEY_MOTION_ACCELERATION "/desktop/gnome/peripherals/mouse/motion_acceleration"
 #define KEY_MOTION_THRESHOLD    "/desktop/gnome/peripherals/mouse/motion_threshold"
@@ -61,11 +64,8 @@
 
 struct GsdMouseManagerPrivate
 {
-        gboolean dummy;
-};
-
-enum {
-        PROP_0,
+        guint notify;
+        guint notify_a11y;
 };
 
 static void     gsd_mouse_manager_class_init  (GsdMouseManagerClass *klass);
@@ -76,12 +76,6 @@
 
 static gpointer manager_object = NULL;
 
-void
-gsd_mouse_manager_stop (GsdMouseManager *manager)
-{
-        g_debug ("Stopping mouse manager");
-}
-
 static void
 gsd_mouse_manager_set_property (GObject        *object,
                                guint           prop_id,
@@ -627,32 +621,20 @@
         }
 }
 
-static void
+static guint
 register_config_callback (GsdMouseManager         *manager,
+                          GConfClient             *client,
                           const char              *path,
                           GConfClientNotifyFunc    func)
 {
-        GConfClient *client;
-
-        client = gconf_client_get_default ();
-
         gconf_client_add_dir (client, path, GCONF_CLIENT_PRELOAD_NONE, NULL);
-        gconf_client_notify_add (client, path, func, manager, NULL, NULL);
-
-        g_object_unref (client);
+        return gconf_client_notify_add (client, path, func, manager, NULL, NULL);
 }
 
 static void
 gsd_mouse_manager_init (GsdMouseManager *manager)
 {
         manager->priv = GSD_MOUSE_MANAGER_GET_PRIVATE (manager);
-
-        register_config_callback (manager,
-                                  "/desktop/gnome/peripherals/mouse",
-                                  (GConfClientNotifyFunc)mouse_callback);
-        register_config_callback (manager,
-                                  "/desktop/gnome/accessibility/mouse",
-                                  (GConfClientNotifyFunc)mouse_callback);
 }
 
 gboolean
@@ -666,6 +648,17 @@
 
         client = gconf_client_get_default ();
 
+        manager->priv->notify =
+                register_config_callback (manager,
+                                          client,
+                                          GCONF_MOUSE_DIR,
+                                          (GConfClientNotifyFunc) mouse_callback);
+        manager->priv->notify_a11y =
+                register_config_callback (manager,
+                                          client,
+                                          GCONF_MOUSE_A11Y_DIR,
+                                          (GConfClientNotifyFunc) mouse_callback);
+
         set_left_handed (manager, gconf_client_get_bool (client, KEY_LEFT_HANDED, NULL));
         set_motion_acceleration (manager, gconf_client_get_float (client, KEY_MOTION_ACCELERATION , NULL));
         set_motion_threshold (manager, gconf_client_get_int (client, KEY_MOTION_THRESHOLD, NULL));
@@ -681,6 +674,33 @@
         return TRUE;
 }
 
+void
+gsd_mouse_manager_stop (GsdMouseManager *manager)
+{
+        GsdMouseManagerPrivate *p = manager->priv;
+        GConfClient *client;
+
+        g_debug ("Stopping mouse manager");
+
+        client = gconf_client_get_default ();
+
+        if (p->notify != 0) {
+                gconf_client_remove_dir (client, GCONF_MOUSE_DIR, NULL);
+                gconf_client_notify_remove (client, p->notify);
+                p->notify = 0;
+        }
+
+        if (p->notify_a11y != 0) {
+                gconf_client_remove_dir (client, GCONF_MOUSE_A11Y_DIR, NULL);
+                gconf_client_notify_remove (client, p->notify_a11y);
+                p->notify_a11y = 0;
+        }
+
+        g_object_unref (client);
+
+        set_locate_pointer (manager, FALSE);
+}
+
 static void
 gsd_mouse_manager_finalize (GObject *object)
 {

Modified: trunk/plugins/mouse/gsd-mouse-plugin.c
==============================================================================
--- trunk/plugins/mouse/gsd-mouse-plugin.c	(original)
+++ trunk/plugins/mouse/gsd-mouse-plugin.c	Fri Apr 11 18:47:22 2008
@@ -86,6 +86,7 @@
 impl_deactivate (GnomeSettingsPlugin *plugin)
 {
         g_debug ("Deactivating mouse plugin");
+        gsd_mouse_manager_stop (GSD_MOUSE_PLUGIN (plugin)->priv->manager);
 }
 
 static void



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