gnome-power-manager-07-screensaver.diff revision 12666
18861N/A--- data/gpm-prefs.glade.orig 2008-02-04 10:15:41.232379000 +0800
18861N/A+++ data/gpm-prefs.glade 2008-02-04 16:22:55.133775000 +0800
18861N/A@@ -1784,6 +1784,25 @@
18861N/A </child>
18861N/A
18861N/A <child>
18861N/A+ <widget class="GtkCheckButton" id="checkbutton_screen_lock">
18861N/A+ <property name="visible">True</property>
18861N/A+ <property name="can_focus">True</property>
18861N/A+ <property name="label" translatable="yes">_Lock screen when computer is restored from blank screen, suspend or hibernate</property>
18861N/A+ <property name="use_underline">True</property>
18861N/A+ <property name="relief">GTK_RELIEF_NORMAL</property>
18861N/A+ <property name="focus_on_click">True</property>
18861N/A+ <property name="active">False</property>
18861N/A+ <property name="inconsistent">False</property>
18861N/A+ <property name="draw_indicator">True</property>
18861N/A+ </widget>
18861N/A+ <packing>
18861N/A+ <property name="padding">0</property>
18861N/A+ <property name="expand">False</property>
18861N/A+ <property name="fill">False</property>
18861N/A+ </packing>
18861N/A+ </child>
18861N/A+
18861N/A+ <child>
18861N/A <widget class="GtkCheckButton" id="checkbutton_general_ambient">
18861N/A <property name="visible">True</property>
18861N/A <property name="can_focus">True</property>
18861N/A--- data/gnome-power-manager.schemas.in.orig 2008-02-04 10:12:40.941327000 +0800
18861N/A+++ data/gnome-power-manager.schemas.in 2008-02-04 10:24:07.361341000 +0800
18861N/A@@ -929,6 +929,18 @@
18861N/A </schema>
18861N/A
18861N/A <schema>
18861N/A+ <key>/schemas/apps/gnome-power-manager/ui/enable_screen_lock</key>
18861N/A+ <applyto>/apps/gnome-power-manager/ui/enable_screen_lock</applyto>
18861N/A+ <owner>gnome-power-manager</owner>
18861N/A+ <type>bool</type>
18861N/A+ <default>true</default>
18861N/A+ <locale name="C">
18861N/A+ <short>If screen lock should be used</short>
18861N/A+ <long>If screen lock should be used when lid is closed, or system performs a suspend or hibernate action.</long>
18861N/A+ </locale>
18861N/A+ </schema>
18861N/A+
18861N/A+ <schema>
18861N/A <key>/schemas/apps/gnome-power-manager/ui/show_actions_in_menu</key>
18861N/A <applyto>/apps/gnome-power-manager/ui/show_actions_in_menu</applyto>
18861N/A <owner>gnome-power-manager</owner>
18861N/A--- src/gpm-control.c.orig 2007-07-27 07:28:18.000000000 +0800
18861N/A+++ src/gpm-control.c 2008-02-13 13:06:29.259536000 +0800
18861N/A@@ -377,6 +377,10 @@
18861N/A {
18861N/A gboolean do_lock;
18861N/A gboolean use_ss_setting;
18861N/A+#ifdef SOLARIS
18861N/A+ gpm_conf_get_bool (control->priv->conf, GPM_CONF_UI_ENABLE_SCREEN_LOCK, &do_lock);
18861N/A+ gpm_debug ("Using custom locking settings (%i)", do_lock);
18861N/A+#else
18861N/A /* This allows us to over-ride the custom lock settings set in gconf
18861N/A with a system default set in gnome-screensaver.
18861N/A See bug #331164 for all the juicy details. :-) */
18861N/A@@ -388,6 +392,7 @@
18861N/A gpm_conf_get_bool (control->priv->conf, policy, &do_lock);
18861N/A gpm_debug ("Using custom locking settings (%i)", do_lock);
18861N/A }
18861N/A+#endif
18861N/A return do_lock;
18861N/A }
18861N/A
18861N/A--- src/gpm-conf.h.orig 2008-02-18 16:47:20.806807000 +0800
18861N/A+++ src/gpm-conf.h 2008-02-18 16:48:11.849112000 +0800
18861N/A@@ -148,6 +148,7 @@
18861N/A #define GPM_CONF_UI_SHOW_ACTIONS_IN_MENU GPM_CONF_DIR "/ui/show_actions_in_menu"
18861N/A #define GPM_CONF_UI_ENABLE_BEEPING GPM_CONF_DIR "/ui/enable_sound"
18861N/A #define GPM_CONF_UI_SHOW_CONTEXT_MENU GPM_CONF_DIR "/ui/show_context_menu"
18861N/A+#define GPM_CONF_UI_ENABLE_SCREEN_LOCK GPM_CONF_DIR "/ui/enable_screen_lock"
18861N/A
18861N/A /* we use the gnome-session key now */
18861N/A #define GPM_CONF_SESSION_REQUEST_SAVE "/apps/gnome-session/options/auto_save_session"
18861N/A--- src/gpm-screensaver.c.orig 2008-03-19 22:34:35.519979000 +0800
18861N/A+++ src/gpm-screensaver.c 2008-03-27 12:34:08.147100000 +0800
18861N/A@@ -29,6 +29,10 @@
18861N/A #include "gpm-conf.h"
18861N/A #include "gpm-screensaver.h"
18861N/A #include "gpm-debug.h"
18861N/A+#ifdef SOLARIS
18861N/A+#include <gtk/gtk.h>
18861N/A+#include <gdk/gdk.h>
18861N/A+#endif
18861N/A #include <libdbus-proxy.h>
18861N/A
18861N/A static void gpm_screensaver_class_init (GpmScreensaverClass *klass);
@@ -239,6 +243,49 @@
guint sleepcount = 0;
DBusGProxy *proxy;
+#ifdef SOLARIS
+ GError *error = NULL;
+ char *command;
+ GdkScreen *screen;
+ GtkWidget *invisible;
+
+ /* As per ARC requriement, use xdg-screensaver on Solaris */
+ command = g_strdup ("/usr/bin/xdg-screensaver lock");
+ screen = gdk_screen_get_default ();
+
+ gpm_debug ("Doing xdg-screensaver lock");
+ if (! gdk_spawn_command_line_on_screen (screen, command, &error)) {
+ g_warning ("Cannot lock screen: %s", error->message);
+ g_error_free (error);
+ }
+ g_free (command);
+
+ /* Make sure screen locking takes effect until both point
+ * and keyboard are grabbed successfully.
+ */
+ invisible = gtk_invisible_new_for_screen (screen);
+ gtk_widget_show (invisible);
+ while (sleepcount++ < 50) {
+ gpm_debug ("Try to determine if screen lock is active!");
+ if (gdk_pointer_grab (invisible->window,
+ TRUE,
+ 0,
+ NULL,
+ NULL,
+ GDK_CURRENT_TIME)
+ == GDK_GRAB_SUCCESS) {
+ if (gdk_keyboard_grab (invisible->window, FALSE, GDK_CURRENT_TIME)
+ == GDK_GRAB_SUCCESS)
+ break;
+ else
+ gdk_pointer_ungrab (GDK_CURRENT_TIME);
+ }
+
+ g_usleep (1000 * 100);
+ }
+ gtk_widget_destroy (invisible);
+ gpm_debug ("Screen locking is sucessful!, sleepcount = %d", sleepcount);
+#else
g_return_val_if_fail (GPM_IS_SCREENSAVER (screensaver), FALSE);
proxy = dbus_proxy_get_proxy (screensaver->priv->gproxy);
@@ -265,6 +312,7 @@
break;
}
}
+#endif
return TRUE;
}
--- src/gpm-manager.c.orig 2008-03-22 00:30:47.830993000 +0800
+++ src/gpm-manager.c 2008-03-22 01:52:19.061395000 +0800
@@ -1754,11 +1754,13 @@
/* try and start an interactive service */
manager->priv->cpufreq = gpm_cpufreq_new ();
+#ifndef SOLARIS
/* try and start an interactive service */
manager->priv->screensaver = gpm_screensaver_new ();
g_signal_connect (manager->priv->screensaver, "auth-request",
G_CALLBACK (screensaver_auth_request_cb), manager);
manager->priv->srv_screensaver = gpm_srv_screensaver_new ();
+#endif
/* try an start an interactive service */
manager->priv->backlight = gpm_backlight_new ();