gnome-settings-daemon r645 - in trunk: . plugins/screensaver



Author: jensg
Date: Sun Dec 28 19:57:28 2008
New Revision: 645
URL: http://svn.gnome.org/viewvc/gnome-settings-daemon?rev=645&view=rev

Log:
2008-12-28  Jens Granseuer  <jensgr gmx net>

	* plugins/screensaver/gsd-screensaver-manager.c:
	(start_screensaver_cb), (gsd_screensaver_manager_start): spawn
	screensaver after a 30 second timeout instead of when idle so that
	it doesn't compete with other processes when the session starts
	(bug #564059). Also plug a few small leaks.


Modified:
   trunk/ChangeLog
   trunk/plugins/screensaver/gsd-screensaver-manager.c

Modified: trunk/plugins/screensaver/gsd-screensaver-manager.c
==============================================================================
--- trunk/plugins/screensaver/gsd-screensaver-manager.c	(original)
+++ trunk/plugins/screensaver/gsd-screensaver-manager.c	Sun Dec 28 19:57:28 2008
@@ -77,7 +77,7 @@
 }
 
 static gboolean
-start_screensaver_idle_cb (GsdScreensaverManager *manager)
+start_screensaver_cb (GsdScreensaverManager *manager)
 {
         GError      *error = NULL;
         char        *ss_cmd;
@@ -85,14 +85,14 @@
         char        *args[3];
         GConfClient *client;
 
-        g_debug ("Starting screensaver process in idle callback");
+        g_debug ("Starting screensaver process after timeout");
         gnome_settings_profile_start (NULL);
 
         client = gconf_client_get_default ();
 
         manager->priv->start_screensaver = gconf_client_get_bool (client, START_SCREENSAVER_KEY, NULL);
         if (!manager->priv->start_screensaver)
-                return FALSE;
+                goto done;
 
         if ((ss_cmd = g_find_program_in_path ("gnome-screensaver"))) {
                 manager->priv->have_gscreensaver = TRUE;
@@ -116,13 +116,12 @@
                 args[1] = "-nosplash";
         } else {
                 g_warning ("No screensaver available");
-                return FALSE;
+                goto done;
         }
         args[2] = NULL;
 
         if (g_spawn_async (g_get_home_dir (), args, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, &manager->priv->screensaver_pid, &error)) {
-                g_object_unref (client);
-                return FALSE;
+                goto done;
         }
 
         show_error = gconf_client_get_bool (client, SHOW_STARTUP_ERRORS_KEY, NULL);
@@ -139,8 +138,6 @@
                                "Screensaver functionality will not work in this session."),
                              error->message);
 
-                g_error_free (error);
-
                 g_signal_connect (dialog, "response",
                                   G_CALLBACK (gtk_widget_destroy),
                                   NULL);
@@ -165,7 +162,9 @@
 
                 gtk_widget_show (dialog);
         }
+        g_error_free (error);
 
+done:
         g_object_unref (client);
 
         gnome_settings_profile_end (NULL);
@@ -181,18 +180,10 @@
         gnome_settings_profile_start (NULL);
 
         /*
-	 * with gnome-screensaver, all settings are loaded internally
-	 * from gconf at startup
-	 *
-	 * with xscreensaver, our settings only apply to startup, and
-	 * the screensaver settings are all in xscreensaver and not
-	 * gconf.
-	 *
-	 * we could have xscreensaver-demo run gconftool-2 directly,
-	 * and start / stop xscreensaver here
+         * We'll start the screensaver after a delay so it doesn't
+         * compete with other processes while the session is starting
          */
-
-        g_idle_add ((GSourceFunc) start_screensaver_idle_cb, manager);
+        g_timeout_add_seconds (30, (GSourceFunc) start_screensaver_cb, manager);
 
         gnome_settings_profile_end (NULL);
 



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