File gsd-speed-clipboard.patch of Package gnome-settings-daemon

diff -u -r a/plugins/clipboard/gsd-clipboard-manager.c b/plugins/clipboard/gsd-clipboard-manager.c
--- a/plugins/clipboard/gsd-clipboard-manager.c	2008-08-04 15:25:53.000000000 +0100
+++ b/plugins/clipboard/gsd-clipboard-manager.c	2009-01-30 12:23:34.000000000 +0000
@@ -82,13 +82,6 @@
         int         offset;
 } IncrConversion;
 
-#define GSD_CLIPBOARD_ERROR gsd_clipboard_error_quark ()
-
-enum {
-        GSD_CLIPBOARD_ERROR_RUNNING,
-        GSD_CLIPBOARD_ERROR_FAILED
-};
-
 static void     gsd_clipboard_manager_class_init  (GsdClipboardManagerClass *klass);
 static void     gsd_clipboard_manager_init        (GsdClipboardManager      *clipboard_manager);
 static void     gsd_clipboard_manager_finalize    (GObject                  *object);
@@ -103,12 +96,6 @@
 
 static gpointer manager_object = NULL;
 
-static GQuark
-gsd_clipboard_error_quark (void)
-{
-        return g_quark_from_static_string ("gsd-clipboard-error-quark");
-}
-
 /* We need to use reference counting for the target data, since we may
  * need to keep the data around after loosing the CLIPBOARD ownership
  * to complete incremental transfers.
@@ -858,22 +845,19 @@
         }
 }
 
-gboolean
-gsd_clipboard_manager_start (GsdClipboardManager *manager,
-                             GError             **error)
+static gboolean
+start_clipboard_idle_cb (GsdClipboardManager *manager)
 {
         XClientMessageEvent xev;
 
-        g_debug ("Starting clipboard manager");
+
         gnome_settings_profile_start (NULL);
 
         init_atoms (manager->priv->display);
 
         /* check if there is a clipboard manager running */
         if (XGetSelectionOwner (manager->priv->display, XA_CLIPBOARD_MANAGER)) {
-                g_set_error (error, GSD_CLIPBOARD_ERROR,
-                             GSD_CLIPBOARD_ERROR_RUNNING,
-                             "Clipboard manager is already running.");
+                g_warning ("Clipboard manager is already running.");
                 return FALSE;
         }
 
@@ -929,15 +913,23 @@
                                             0,
                                             NULL);
                 /* FIXME: manager->priv->terminate (manager->priv->cb_data); */
-
-                g_set_error (error, GSD_CLIPBOARD_ERROR,
-                             GSD_CLIPBOARD_ERROR_FAILED,
-                             "Failed to claim selection.");
-                return FALSE;
         }
 
         gnome_settings_profile_end (NULL);
 
+        return FALSE;
+}
+
+gboolean
+gsd_clipboard_manager_start (GsdClipboardManager *manager,
+                             GError             **error)
+{
+        gnome_settings_profile_start (NULL);
+
+        g_idle_add ((GSourceFunc) start_clipboard_idle_cb, manager);
+
+        gnome_settings_profile_end (NULL);
+
         return TRUE;
 }
 
openSUSE Build Service is sponsored by