Author: jensg
Date: Mon Feb  4 21:06:28 2008
New Revision: 100
URL: http://svn.gnome.org/viewvc/gnome-settings-daemon?rev=100&view=rev

Log:
2008-02-04  Jens Granseuer  <[EMAIL PROTECTED]>

        * plugins/screensaver/gsd-screensaver-manager.c:
        (gsd_screensaver_manager_start): don't crash when running the
        screensaver fails. The plugin relies on the GError it passes always
        being filled in if we couldn't start the module, so set it up properly
        in those cases (bug #514385)


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 Mon Feb  4 21:06:28 2008
@@ -52,10 +52,6 @@
         gboolean have_xscreensaver;
 };
 
-enum {
-        PROP_0,
-};
-
 static void     gsd_screensaver_manager_class_init  
(GsdScreensaverManagerClass *klass);
 static void     gsd_screensaver_manager_init        (GsdScreensaverManager     
 *screensaver_manager);
 static void     gsd_screensaver_manager_finalize    (GObject             
*object);
@@ -86,8 +82,6 @@
         char        *ss_cmd;
         GError      *gerr = NULL;
         gboolean     show_error;
-        GtkWidget   *dialog;
-        GtkWidget   *toggle;
         char        *args[3];
         GConfClient *client;
 
@@ -103,7 +97,6 @@
         *
         * we could have xscreensaver-demo run gconftool-2 directly,
         * and start / stop xscreensaver here
-        *
          */
 
         client = gconf_client_get_default ();
@@ -134,8 +127,11 @@
         } else if (manager->priv->have_xscreensaver) {
                 args[0] = "xscreensaver";
                 args[1] = "-nosplash";
-        } else
+        } else {
+                g_set_error (error, G_SPAWN_ERROR, G_SPAWN_ERROR_FAILED,
+                             "No screensaver available.");
                 return FALSE;
+        }
         args[2] = NULL;
 
         if (g_spawn_async (g_get_home_dir (), args, NULL, G_SPAWN_SEARCH_PATH, 
NULL, NULL, &manager->priv->screensaver_pid, &gerr)) {
@@ -144,48 +140,48 @@
         }
 
         show_error = gconf_client_get_bool (client, SHOW_STARTUP_ERRORS_KEY, 
NULL);
-        if (!show_error) {
-                g_error_free (gerr);
-                g_object_unref (client);
-                return FALSE;
-        }
 
-        dialog = gtk_message_dialog_new (NULL,
-                                         0,
-                                         GTK_MESSAGE_ERROR,
-                                         GTK_BUTTONS_OK,
-                                         _("There was an error starting up the 
screensaver:\n\n"
-                                         "%s\n\n"
-                                         "Screensaver functionality will not 
work in this session."),
-                                         gerr->message);
-        g_error_free (gerr);
-
-        g_signal_connect (dialog, "response",
-                          G_CALLBACK (gtk_widget_destroy),
-                          NULL);
-
-        toggle = gtk_check_button_new_with_mnemonic (_("_Do not show this 
message again"));
-        gtk_widget_show (toggle);
-
-        if (gconf_client_key_is_writable (client, SHOW_STARTUP_ERRORS_KEY, 
NULL)) {
-                g_signal_connect (toggle,
-                                  "toggled",
-                                  G_CALLBACK (key_toggled_cb),
-                                  manager);
-        } else {
-                gtk_widget_set_sensitive (toggle, FALSE);
-        }
-        g_object_unref (client);
+        if (show_error) {
+                GtkWidget *dialog;
+                GtkWidget *toggle;
+
+               dialog = gtk_message_dialog_new (NULL,
+                             0, GTK_MESSAGE_ERROR,
+                             GTK_BUTTONS_OK,
+                             _("There was an error starting up the 
screensaver:\n\n"
+                               "%s\n\n"
+                               "Screensaver functionality will not work in 
this session."),
+                             gerr->message);
+
+                g_signal_connect (dialog, "response",
+                                  G_CALLBACK (gtk_widget_destroy),
+                                  NULL);
+
+                toggle = gtk_check_button_new_with_mnemonic (_("_Do not show 
this message again"));
+                gtk_widget_show (toggle);
+
+                if (gconf_client_key_is_writable (client, 
SHOW_STARTUP_ERRORS_KEY, NULL)) {
+                        g_signal_connect (toggle,
+                                          "toggled",
+                                          G_CALLBACK (key_toggled_cb),
+                                          manager);
+                } else {
+                        gtk_widget_set_sensitive (toggle, FALSE);
+                }
+
+                gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox),
+                                    toggle,
+                                    FALSE, FALSE, 0);
 
-        gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox),
-                            toggle,
-                            FALSE, FALSE, 0);
+                gtk_dialog_set_default_response (GTK_DIALOG (dialog), 
GTK_RESPONSE_OK);
 
-        gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
+                gtk_widget_show (dialog);
+        }
 
-        gtk_widget_show (dialog);
+        g_propagate_error (error, gerr);
+        g_object_unref (client);
 
-        return TRUE;
+        return FALSE;
 }
 
 void
@@ -275,7 +271,6 @@
 gsd_screensaver_manager_init (GsdScreensaverManager *manager)
 {
         manager->priv = GSD_SCREENSAVER_MANAGER_GET_PRIVATE (manager);
-
 }
 
 static void
_______________________________________________
SVN-commits-list mailing list (read only)
http://mail.gnome.org/mailman/listinfo/svn-commits-list

Want to limit the commits to a few modules? Go to above URL, log in to edit 
your options and select the modules ('topics') you want.
Module maintainer? It is possible to set the reply-to to your development 
mailing list. Email [EMAIL PROTECTED] if interested.

Reply via email to