[gnome-settings-daemon] cursor: Handle the changed GdkDeviceManager signal



commit 836b321e71fd6b945b3b18bc6205dc54e3a2fefe
Author: Bastien Nocera <hadess hadess net>
Date:   Tue Nov 13 07:51:42 2012 +0100

    cursor: Handle the changed GdkDeviceManager signal

 plugins/cursor/gsd-cursor-manager.c |   19 +++++++++++++++++++
 1 files changed, 19 insertions(+), 0 deletions(-)
---
diff --git a/plugins/cursor/gsd-cursor-manager.c b/plugins/cursor/gsd-cursor-manager.c
index bf1654e..2c01ba7 100644
--- a/plugins/cursor/gsd-cursor-manager.c
+++ b/plugins/cursor/gsd-cursor-manager.c
@@ -51,6 +51,7 @@ struct GsdCursorManagerPrivate
         guint start_idle_id;
         guint added_id;
         guint removed_id;
+        guint changed_id;
         gboolean cursor_shown;
 };
 
@@ -217,6 +218,17 @@ device_removed_cb (GdkDeviceManager *device_manager,
         update_cursor_for_current (manager);
 }
 
+static void
+device_changed_cb (GdkDeviceManager *device_manager,
+                   GdkDevice        *device,
+                   GsdCursorManager *manager)
+{
+	if (gdk_device_get_device_type (device) == GDK_DEVICE_TYPE_FLOATING)
+		device_removed_cb (device_manager, device, manager);
+	else
+		device_added_cb (device_manager, device, manager);
+}
+
 static gboolean
 supports_xfixes (void)
 {
@@ -286,6 +298,8 @@ gsd_cursor_manager_idle_cb (GsdCursorManager *manager)
                                                     G_CALLBACK (device_added_cb), manager);
         manager->priv->removed_id = g_signal_connect (G_OBJECT (device_manager), "device-removed",
                                                       G_CALLBACK (device_removed_cb), manager);
+        manager->priv->changed_id = g_signal_connect (G_OBJECT (device_manager), "device-changed",
+                                                      G_CALLBACK (device_changed_cb), manager);
 
         gnome_settings_profile_end (NULL);
 
@@ -325,6 +339,11 @@ gsd_cursor_manager_stop (GsdCursorManager *manager)
                 manager->priv->removed_id = 0;
         }
 
+        if (manager->priv->changed_id > 0) {
+                g_signal_handler_disconnect (G_OBJECT (device_manager), manager->priv->changed_id);
+                manager->priv->changed_id = 0;
+        }
+
         if (manager->priv->cursor_shown == FALSE) {
                 set_cursor_visibility (manager, TRUE);
         }



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