diff --git a/gnome-settings-daemon/ChangeLog b/gnome-settings-daemon/ChangeLog index 47e0c9f00..a07711197 100644 --- a/gnome-settings-daemon/ChangeLog +++ b/gnome-settings-daemon/ChangeLog @@ -1,3 +1,9 @@ +2005-07-20 Rodrigo Moya + + * gnome-settings-screensaver.c (gnome_settings_screensaver_load): + * gnome-settings-multimedia-keys.c (do_action): try to run + gnome-screensaver, and if that fails, run xscreensaver. + 2005-07-12 Sebastien Bacher * modmap-dialog.glade: fix a label form (Closes: #167739). diff --git a/gnome-settings-daemon/gnome-settings-multimedia-keys.c b/gnome-settings-daemon/gnome-settings-multimedia-keys.c index 42f7abdf7..eec9eeac0 100644 --- a/gnome-settings-daemon/gnome-settings-multimedia-keys.c +++ b/gnome-settings-daemon/gnome-settings-multimedia-keys.c @@ -804,6 +804,8 @@ do_sound_action (Acme *acme, int type) static void do_action (Acme *acme, int type) { + gchar *cmd; + switch (type) { case MUTE_KEY: case VOLUME_DOWN_KEY: @@ -829,7 +831,12 @@ do_action (Acme *acme, int type) do_sleep_action ("apm", "xset dpms force off"); break; case SCREENSAVER_KEY: - execute ("xscreensaver-command -lock", FALSE); + if ((cmd = g_find_program_in_path ("gnome-screensaver-command"))) + execute ("gnome-screensaver-command --lock", FALSE); + else + execute ("xscreensaver-command -lock", FALSE); + + g_free (cmd); break; case HELP_KEY: do_help_action (acme); diff --git a/gnome-settings-daemon/gnome-settings-screensaver.c b/gnome-settings-daemon/gnome-settings-screensaver.c index 75f8cbd45..8da197cfa 100644 --- a/gnome-settings-daemon/gnome-settings-screensaver.c +++ b/gnome-settings-daemon/gnome-settings-screensaver.c @@ -35,6 +35,7 @@ #define START_SCREENSAVER_KEY "/apps/gnome_settings_daemon/screensaver/start_screensaver" #define SHOW_STARTUP_ERRORS_KEY "/apps/gnome_settings_daemon/screensaver/show_startup_errors" #define XSCREENSAVER_COMMAND "xscreensaver -nosplash" +#define GSCREENSAVER_COMMAND "gnome-screensaver" void gnome_settings_screensaver_init (GConfClient *client) @@ -42,8 +43,12 @@ gnome_settings_screensaver_init (GConfClient *client) /* * do nothing. * - * our settings only apply to startup, and the screensaver - * settings are all in xscreensaver and not gconf. + * 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 @@ -69,16 +74,30 @@ void gnome_settings_screensaver_load (GConfClient *client) { GError *gerr = NULL; - gboolean start_screensaver; + gboolean start_screensaver, use_gscreensaver = FALSE; gboolean show_error; GtkWidget *dialog, *toggle; + gchar *ss_command; start_screensaver = gconf_client_get_bool (client, START_SCREENSAVER_KEY, NULL); if (!start_screensaver) return; - if (g_spawn_command_line_async (XSCREENSAVER_COMMAND, &gerr)) + if ((ss_command = g_find_program_in_path ("gnome-screensaver"))) + use_gscreensaver = TRUE; + else { + if (!(ss_command = g_find_program_in_path ("xscreensaver"))) + return; + } + + g_free (ss_command); + if (use_gscreensaver) + ss_command = GSCREENSAVER_COMMAND; + else + ss_command = XSCREENSAVER_COMMAND; + + if (g_spawn_command_line_async (ss_command, &gerr)) return; show_error = gconf_client_get_bool (client, SHOW_STARTUP_ERRORS_KEY, NULL);