gnome-settings-daemon r100 - in trunk: . plugins/screensaver
- From: jensg svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-settings-daemon r100 - in trunk: . plugins/screensaver
- Date: Mon, 4 Feb 2008 21:06:28 +0000 (GMT)
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 <jensgr gmx net>
* 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
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]