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.