File gnome-settings-daemon-icewm-cursor.patch of Package gnome-settings-daemon.391

diff -Npur gnome-settings-daemon-3.10.2.bak/plugins/cursor/gsd-cursor-manager.c gnome-settings-daemon-3.10.2/plugins/cursor/gsd-cursor-manager.c
--- gnome-settings-daemon-3.10.2.bak/plugins/cursor/gsd-cursor-manager.c	2014-12-05 09:04:34.626211196 +0800
+++ gnome-settings-daemon-3.10.2/plugins/cursor/gsd-cursor-manager.c	2014-12-05 09:05:13.610212123 +0800
@@ -58,6 +58,7 @@ struct GsdCursorManagerPrivate
         guint added_id;
         guint removed_id;
         guint changed_id;
+        gint  name_watch_id;
         gboolean cursor_shown;
         GHashTable *monitors;
 
@@ -409,6 +410,27 @@ register_manager_dbus (GsdCursorManager
                    manager);
 }
 
+static void
+on_name_appeared (GDBusConnection *connection,
+                  const char      *name,
+                  const char      *name_owner,
+                  gpointer         user_data)
+{
+        GsdCursorManager  *manager = user_data;
+        /* Start by hiding the cursor */
+        set_cursor_visibility (manager, FALSE);
+}
+
+static void
+on_name_vanished (GDBusConnection *connection,
+                  const char      *name,
+                  gpointer         user_data)
+{
+        GsdCursorManager  *manager = user_data;
+        /* if Mutter was not start or was replaced, show the cursor */
+        set_cursor_visibility (manager, TRUE);
+}
+
 gboolean
 gsd_cursor_manager_start (GsdCursorManager  *manager,
                           GError           **error)
@@ -449,8 +471,15 @@ gsd_cursor_manager_start (GsdCursorManag
                 return FALSE;
         }
 
-        /* Start by hiding the cursor */
-        set_cursor_visibility (manager, FALSE);
+        gint id;
+        id = g_bus_watch_name (G_BUS_TYPE_SESSION,
+                               "org.gnome.Mutter.IdleMonitor",
+                               G_BUS_NAME_WATCHER_FLAGS_NONE,
+                               on_name_appeared,
+                               on_name_vanished,
+                               manager, NULL);
+        manager->priv->name_watch_id = id;
+
 
         manager->priv->cancellable = g_cancellable_new ();
         register_manager_dbus (manager);
@@ -469,6 +498,11 @@ gsd_cursor_manager_stop (GsdCursorManage
 
         device_manager = gdk_display_get_device_manager (gdk_display_get_default ());
 
+        if (manager->priv->name_watch_id) {
+                g_bus_unwatch_name (manager->priv->name_watch_id);
+                manager->priv->name_watch_id = 0;
+        }
+
         if (manager->priv->added_id > 0) {
                 g_signal_handler_disconnect (G_OBJECT (device_manager), manager->priv->added_id);
                 manager->priv->added_id = 0;
@@ -511,6 +545,7 @@ gsd_cursor_manager_init (GsdCursorManage
         manager->priv->cursor_shown = TRUE;
 
         manager->priv->show_osk = FALSE;
+        manager->priv->name_watch_id = 0;
 }
 
 GsdCursorManager *
openSUSE Build Service is sponsored by