2010-01-06 Jeff Cai <[email protected]>
authorjeffcai
Wed, 06 Jan 2010 13:46:32 +0000
changeset 2271 4ece9ad86c58
parent 2270 f0d2ae60071b
child 2272 08b50601fd23
2010-01-06 Jeff Cai <[email protected]> * SFEgnome-screensaver.spec: * SUNWgnome-screensaver.spec: * base-specs/gnome-screensaver.spec: * patches/gnome-screensaver-02-unlock-first.diff: Start the unlock dialog once the lock is enabled * patches/gnome-screensaver-03-gs-debug.diff: Make the debug msgs be printed on Solaris Change the file name SUNW to SFE. Add two patches.
ChangeLog
SFEgnome-screensaver.spec
SUNWgnome-screensaver.spec
base-specs/gnome-screensaver.spec
patches/gnome-screensaver-02-unlock-first.diff
patches/gnome-screensaver-03-gs-debug.diff
--- a/ChangeLog	Wed Jan 06 03:31:12 2010 +0000
+++ b/ChangeLog	Wed Jan 06 13:46:32 2010 +0000
@@ -1,3 +1,16 @@
+2010-01-06  Jeff Cai  <[email protected]>
+
+	* SFEgnome-screensaver.spec:
+	* SUNWgnome-screensaver.spec:
+	* base-specs/gnome-screensaver.spec:
+	* patches/gnome-screensaver-02-unlock-first.diff: Start the unlock
+	  dialog once the lock is enabled
+	* patches/gnome-screensaver-03-gs-debug.diff: Make the debug msgs
+	  be printed on Solaris
+
+	Change the file name SUNW to SFE.
+	Add two patches.
+
 2010-01-06  Brian Lu  <[email protected]>
 
 	* SFElibmapi.spec:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SFEgnome-screensaver.spec	Wed Jan 06 13:46:32 2010 +0000
@@ -0,0 +1,168 @@
+#
+# spec file for package SUNWgnome-screensaver
+#
+# includes module(s): gnome-screensaver
+#
+# Copyright 2007 Sun Microsystems, Inc.
+# This file and all modifications and additions to the pristine
+# package are under the same license as the package itself.
+#
+# Owner: me, me, me, I want it!
+#
+%include Solaris.inc
+
+%use gss = gnome-screensaver.spec
+
+Name:                    SFEgnome-screensaver
+Summary:                 GNOME screensaver
+Version:                 %{default_pkg_version}
+SUNW_BaseDir:            %{_basedir}
+BuildRoot:               %{_tmppath}/%{name}-%{version}-build
+%include default-depend.inc
+
+Requires:	SUNWcsl
+Requires:       SUNWdbus
+Requires:       SUNWgtk2
+Requires:       SUNWlibglade
+Requires:       SUNWlibpopt
+Requires:	SUNWlxml
+Requires:	SUNWgnome-config
+Requires:	SUNWgnome-panel
+Requires:       SUNWlibms
+Requires:       SUNWzlib
+Requires:       SUNWpostrun
+Requires:       %{name}-root
+BuildRequires:	SUNWcsl
+BuildRequires:  SUNWdbus-devel
+BuildRequires:  SUNWgtk2-devel
+BuildRequires:  SUNWlibglade-devel
+BuildRequires:  SUNWlibpopt-devel
+BuildRequires:	SUNWlxml
+BuildRequires:	SUNWgnome-config-devel
+BuildRequires:	SUNWgnome-panel-devel
+
+%package root
+Summary:                 %{summary} - / filesystem
+SUNW_BaseDir:            /
+%include default-depend.inc
+Requires:                %{name}
+
+%if %build_l10n
+%package l10n
+Summary:                 %{summary} - l10n files
+SUNW_BaseDir:            %{_basedir}
+%include default-depend.inc
+Requires:                %{name}
+%endif
+
+%prep
+rm -rf %name-%version
+mkdir %name-%version
+%gss.prep -d %name-%version
+
+%build
+export CFLAGS="%optflags"
+export LDFLAGS="%_ldflags"
+%gss.build -d %name-%version
+
+%install
+rm -rf $RPM_BUILD_ROOT
+%gss.install -d %name-%version
+
+rm -r $RPM_BUILD_ROOT%{_sysconfdir}/pam.d
+
+%if %build_l10n
+%else
+# REMOVE l10n FILES
+rm -rf $RPM_BUILD_ROOT%{_datadir}/locale
+%endif                                
+
+
+%{?pkgbuild_postprocess: %pkgbuild_postprocess -v -c "%{version}:%{jds_version}:%{name}:$RPM_ARCH:%(date +%%Y-%%m-%%d):%{support_level}" $RPM_BUILD_ROOT}
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%post
+( echo 'test -x /usr/bin/update-desktop-database || exit 0';
+  echo '/usr/bin/update-desktop-database'
+) | $BASEDIR/lib/postrun -b -u -c JDS_wait
+
+%postun
+test -x $BASEDIR/lib/postrun || exit 0
+( echo 'test -x /usr/bin/update-desktop-database || exit 0';
+  echo '/usr/bin/update-desktop-database'
+) | $BASEDIR/lib/postrun -b -u -c JDS
+
+%files
+%defattr (-, root, bin)
+%dir %attr (0755, root, bin) %{_bindir}
+%{_bindir}/*
+%dir %attr (0755, root, bin) %{_libdir}
+%{_libdir}/gnome-screensaver
+%{_libdir}/gnome-screensaver-gl-helper
+%{_libexecdir}/gnome-screensaver-dialog
+%dir %attr (0755, root, other) %{_libdir}/pkgconfig
+%{_libdir}/pkgconfig/*
+%dir %attr(0755, root, sys) %{_datadir}
+%dir %attr (0755, root, other) %{_datadir}/applications
+%{_datadir}/applications/*
+%{_datadir}/desktop-directories
+%{_datadir}/gnome-screensaver
+%dir %attr (0755, root, other) %{_datadir}/pixmaps
+%{_datadir}/pixmaps/*
+%dir %attr (0755, root, other) %{_datadir}/backgrounds
+%{_datadir}/backgrounds/*
+%dir %attr (0755, root, bin) %{_datadir}/gnome-background-properties
+%{_datadir}/gnome-background-properties/*
+%dir %attr(0755, root, bin) %{_mandir}
+%dir %attr(0755, root, bin) %{_mandir}/man1
+%{_mandir}/man1/gnome-screensaver.1
+%{_mandir}/man1/gnome-screensaver-command.1
+%{_mandir}/man1/gnome-screensaver-preferences.1
+
+%files root
+%defattr (-, root, sys)
+%attr (0755, root, sys) %dir %{_sysconfdir}
+%{_sysconfdir}/gconf/schemas/gnome-screensaver.schemas
+%{_sysconfdir}/xdg
+
+%if %build_l10n
+%files l10n
+%defattr (-, root, bin)
+%dir %attr (0755, root, sys) %{_datadir}
+%attr (-, root, other) %{_datadir}/locale
+%endif
+
+%changelog
+* Thu Jan 31 2007 - [email protected]
+- Add manpages to %files after tarball bump.
+* Fri Oct  5 2007 - [email protected]
+- set CFLAGS and LDFLAGS
+* Wed May 09 2007 - [email protected]
+- Add %{_libdir}/gnome-screensaver-gl-helper to %files after getting new tarball
+  to build.
+* Fri Jul 14 2006 - [email protected]
+- update %post/%postun/etc scripts to support diskless client setup,
+  part of 6448317
+* Thu Jun 29 2006 - [email protected]
+- update postrun scripts
+* Sun Jun 11 2006 - [email protected]
+- change group from other to bin/sys
+* Mon Feb 20 2006 - [email protected]
+- Update Build/Requires after running check-deps.pl script.
+* Sat Dec  3 2005 - [email protected]
+- add %post script that runs update-desktop-database
+* Wed Nov 30 2005 - [email protected]
+- Add ACLOCAL_FLAGS setting back as it is needed in bumped tarball.
+* Fri Nov 04 2005 - [email protected]
+- Remove ACLOCAL_FLAGS setting as bugs fixed in bumped tarball.
+* Tue Nov 01 2005 - [email protected]
+- Set ACLOCAL_FLAGS for use in base spec file.
+* Tue Oct 25 2005 - [email protected]
+- Remove unused environment variables in %build section.
+* Mon Oct 24 2005 - [email protected]
+- Remove share package; add build and runtime dependencies.
+* Fri Oct 21 2005 - [email protected]
+- Initial spec file created.
+
--- a/SUNWgnome-screensaver.spec	Wed Jan 06 03:31:12 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,157 +0,0 @@
-#
-# spec file for package SUNWgnome-screensaver
-#
-# includes module(s): gnome-screensaver
-#
-# Copyright 2007 Sun Microsystems, Inc.
-# This file and all modifications and additions to the pristine
-# package are under the same license as the package itself.
-#
-# Owner: me, me, me, I want it!
-#
-%include Solaris.inc
-
-%use gss = gnome-screensaver.spec
-
-Name:                    SUNWgnome-screensaver
-Summary:                 GNOME screensaver
-Version:                 %{default_pkg_version}
-SUNW_BaseDir:            %{_basedir}
-BuildRoot:               %{_tmppath}/%{name}-%{version}-build
-%include default-depend.inc
-
-Requires:	SUNWcsl
-Requires:       SUNWdbus
-Requires:       SUNWgtk2
-Requires:       SUNWlibglade
-Requires:       SUNWlibpopt
-Requires:	SUNWlxml
-Requires:	SUNWgnome-config
-Requires:	SUNWgnome-panel
-Requires:       SUNWlibms
-Requires:       SUNWmlib
-Requires:       SUNWzlib
-Requires:       SUNWpostrun
-BuildRequires:	SUNWcsl
-BuildRequires:  SUNWdbus-devel
-BuildRequires:  SUNWgtk2-devel
-BuildRequires:  SUNWlibglade-devel
-BuildRequires:  SUNWlibpopt-devel
-BuildRequires:	SUNWlxml
-BuildRequires:	SUNWgnome-config-devel
-BuildRequires:	SUNWgnome-panel-devel
-
-%if %build_l10n
-%package l10n
-Summary:                 %{summary} - l10n files
-SUNW_BaseDir:            %{_basedir}
-%include default-depend.inc
-Requires:                %{name}
-%endif
-
-%prep
-rm -rf %name-%version
-mkdir %name-%version
-%gss.prep -d %name-%version
-
-%build
-export CFLAGS="%optflags"
-export LDFLAGS="%_ldflags"
-%gss.build -d %name-%version
-
-%install
-rm -rf $RPM_BUILD_ROOT
-%gss.install -d %name-%version
-
-# TODO: Should we keep the gconf files?
-rm -rf $RPM_BUILD_ROOT%{_sysconfdir}
-
-%if %build_l10n
-%else
-# REMOVE l10n FILES
-rm -rf $RPM_BUILD_ROOT%{_datadir}/locale
-%endif                                
-
-
-%{?pkgbuild_postprocess: %pkgbuild_postprocess -v -c "%{version}:%{jds_version}:%{name}:$RPM_ARCH:%(date +%%Y-%%m-%%d):%{support_level}" $RPM_BUILD_ROOT}
-
-%clean
-rm -rf $RPM_BUILD_ROOT
-
-%post
-( echo 'test -x /usr/bin/update-desktop-database || exit 0';
-  echo '/usr/bin/update-desktop-database'
-) | $BASEDIR/lib/postrun -b -u -c JDS_wait
-
-%postun
-test -x $BASEDIR/lib/postrun || exit 0
-( echo 'test -x /usr/bin/update-desktop-database || exit 0';
-  echo '/usr/bin/update-desktop-database'
-) | $BASEDIR/lib/postrun -b -u -c JDS
-
-%files
-%defattr (-, root, bin)
-%dir %attr (0755, root, bin) %{_bindir}
-%{_bindir}/*
-%dir %attr (0755, root, bin) %{_libdir}
-%{_libdir}/gnome-screensaver
-%{_libdir}/gnome-screensaver-gl-helper
-%{_libexecdir}/gnome-screensaver-dialog
-%dir %attr (0755, root, other) %{_libdir}/pkgconfig
-%{_libdir}/pkgconfig/*
-%dir %attr(0755, root, sys) %{_datadir}
-%dir %attr (0755, root, other) %{_datadir}/applications
-%{_datadir}/applications/*
-%{_datadir}/desktop-directories
-%{_datadir}/gnome-screensaver
-%dir %attr (0755, root, other) %{_datadir}/pixmaps
-%{_datadir}/pixmaps/*
-%dir %attr (0755, root, other) %{_datadir}/backgrounds
-%{_datadir}/backgrounds/*
-%dir %attr (0755, root, bin) %{_datadir}/gnome-background-properties
-%{_datadir}/gnome-background-properties/*
-%dir %attr(0755, root, bin) %{_mandir}
-%dir %attr(0755, root, bin) %{_mandir}/man1
-%{_mandir}/man1/gnome-screensaver.1
-%{_mandir}/man1/gnome-screensaver-command.1
-%{_mandir}/man1/gnome-screensaver-preferences.1
-
-%if %build_l10n
-%files l10n
-%defattr (-, root, bin)
-%dir %attr (0755, root, sys) %{_datadir}
-%attr (-, root, other) %{_datadir}/locale
-%endif
-
-%changelog
-* Thu Jan 31 2007 - [email protected]
-- Add manpages to %files after tarball bump.
-* Fri Oct  5 2007 - [email protected]
-- set CFLAGS and LDFLAGS
-* Wed May 09 2007 - [email protected]
-- Add %{_libdir}/gnome-screensaver-gl-helper to %files after getting new tarball
-  to build.
-* Fri Jul 14 2006 - [email protected]
-- update %post/%postun/etc scripts to support diskless client setup,
-  part of 6448317
-* Thu Jun 29 2006 - [email protected]
-- update postrun scripts
-* Sun Jun 11 2006 - [email protected]
-- change group from other to bin/sys
-* Mon Feb 20 2006 - [email protected]
-- Update Build/Requires after running check-deps.pl script.
-* Sat Dec  3 2005 - [email protected]
-- add %post script that runs update-desktop-database
-* Wed Nov 30 2005 - [email protected]
-- Add ACLOCAL_FLAGS setting back as it is needed in bumped tarball.
-* Fri Nov 04 2005 - [email protected]
-- Remove ACLOCAL_FLAGS setting as bugs fixed in bumped tarball.
-* Tue Nov 01 2005 - [email protected]
-- Set ACLOCAL_FLAGS for use in base spec file.
-* Tue Oct 25 2005 - [email protected]
-- Remove unused environment variables in %build section.
-* Mon Oct 24 2005 - [email protected]
-- Remove share package; add build and runtime dependencies.
-* Fri Oct 21 2005 - [email protected]
-- Initial spec file created.
-
--- a/base-specs/gnome-screensaver.spec	Wed Jan 06 03:31:12 2010 +0000
+++ b/base-specs/gnome-screensaver.spec	Wed Jan 06 13:46:32 2010 +0000
@@ -18,6 +18,12 @@
 Source:       http://ftp.gnome.org/pub/GNOME/sources/%{name}/2.28/%{name}-%{version}.tar.bz2
 # date:2009-05-11 owner:johnf type:feature
 Patch1:       gnome-screensaver-01-pam-audit.diff
+
+#This patch starts the unlock dialog first.
+# date:2010-01-06 owner:jefftsai type:feature
+Patch2:       gnome-screensaver-02-unlock-first.diff
+# date:2010-01-06 owner:jefftsai type:bug
+Patch3:       gnome-screensaver-03-gs-debug.diff
 URL:          www.gnome.org
 BuildRoot:    %{_tmppath}/%{name}-%{version}-build
 Autoreqprov:  on
@@ -57,6 +63,8 @@
 %prep
 %setup -q
 %patch1 -p1
+%patch2 -p1
+%patch3 -p1
 
 # Fix for 332967.
 for po in po/*.po; do
@@ -87,7 +95,9 @@
     --sysconfdir=%{_sysconfdir} \
     --libexecdir=%{_libexecdir} \
     --localstatedir=/var/lib \
-    --enable-locking
+    --enable-pam=no \
+    --with-passwd-helper=%{_libdir}/gnome-screensaver/pam-helper
+
 make -j $CPUS
 
 %install
@@ -103,6 +113,11 @@
 %{_libdir}/*
 
 %changelog
+* Wed Jan 06 2010 - [email protected]
+- Add patch -02-unlock-first. This patch can start the unlock dialog
+  process once the lock is active. The process keeps running.
+- Also add patch -03-gs-debug, this make the debug message can be 
+  printed on Solaris.
 * Tue May 19 2009 - [email protected]
 - Bump to 2.26.1.  Add patch gnome-screensaver-01-pam-audit.diff which
   John Fischer wrote to add Sun Audit and Sun PAM interfaces.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/gnome-screensaver-02-unlock-first.diff	Wed Jan 06 13:46:32 2010 +0000
@@ -0,0 +1,294 @@
+--- gnome-screensaver-2.28.0/src/gs-window.h.orig	2010-01-06 20:59:03.390728691 +0800
++++ gnome-screensaver-2.28.0/src/gs-window.h	2010-01-04 14:00:17.572287531 +0800
+@@ -52,6 +52,7 @@
+         void            (* deactivated)         (GSWindow *window);
+         void            (* dialog_up)           (GSWindow *window);
+         void            (* dialog_down)         (GSWindow *window);
++        void            (* dialog_timeout)      (GSWindow *window);
+ } GSWindowClass;
+ 
+ GType       gs_window_get_type           (void);
+@@ -96,6 +97,9 @@
+ GtkWidget * gs_window_get_drawing_area   (GSWindow  *window);
+ void        gs_window_clear              (GSWindow  *window);
+ 
++void        gs_window_show_unlock          (GSWindow *window);
++void        gs_window_hide_unlock          (GSWindow *window);
++
+ G_END_DECLS
+ 
+ #endif /* __GS_WINDOW_H */
+--- gnome-screensaver-2.28.0/src/gs-manager.c.orig	2010-01-06 20:50:45.226262893 +0800
++++ gnome-screensaver-2.28.0/src/gs-manager.c	2010-01-06 12:52:44.900096152 +0800
+@@ -504,6 +504,8 @@
+ {
+         if (manager->priv->lock_enabled) {
+                 gs_manager_set_lock_active (manager, TRUE);
++                /* start the unlock dialog right after the screen is locked */
++                gs_manager_start_unlock (manager);
+         }
+ 
+         manager->priv->lock_timeout_id = 0;
+@@ -1137,6 +1139,17 @@
+         g_signal_emit (manager, signals [AUTH_REQUEST_END], 0);
+ }
+ 
++static void
++window_dialog_timeout_cb (GSWindow  *window,
++                       GSManager *manager)
++{
++        g_return_if_fail (manager != NULL);
++        g_return_if_fail (GS_IS_MANAGER (manager));
++
++        gs_debug ("Handling dialog timeout");
++        gs_window_hide_unlock (window);
++}
++
+ static GSWindow *
+ find_window_at_pointer (GSManager *manager)
+ {
+@@ -1381,6 +1394,7 @@
+         g_signal_handlers_disconnect_by_func (window, window_activity_cb, manager);
+         g_signal_handlers_disconnect_by_func (window, window_dialog_up_cb, manager);
+         g_signal_handlers_disconnect_by_func (window, window_dialog_down_cb, manager);
++        g_signal_handlers_disconnect_by_func (window, window_dialog_timeout_cb, manager);
+         g_signal_handlers_disconnect_by_func (window, window_show_cb, manager);
+         g_signal_handlers_disconnect_by_func (window, window_map_cb, manager);
+         g_signal_handlers_disconnect_by_func (window, window_map_event_cb, manager);
+@@ -1410,6 +1424,8 @@
+                                  G_CALLBACK (window_dialog_up_cb), manager, 0);
+         g_signal_connect_object (window, "dialog-down",
+                                  G_CALLBACK (window_dialog_down_cb), manager, 0);
++        g_signal_connect_object (window, "dialog-timeout",
++                                 G_CALLBACK (window_dialog_timeout_cb), manager, 0);
+         g_signal_connect_object (window, "show",
+                                  G_CALLBACK (window_show_cb), manager, G_CONNECT_AFTER);
+         g_signal_connect_object (window, "map",
+@@ -1771,7 +1787,7 @@
+ }
+ 
+ gboolean
+-gs_manager_request_unlock (GSManager *manager)
++gs_manager_start_unlock (GSManager *manager)
+ {
+         GSWindow *window;
+ 
+@@ -1805,6 +1821,44 @@
+         return TRUE;
+ }
+ 
++gboolean
++gs_manager_request_unlock (GSManager *manager)
++{
++        GSWindow *window;
++
++        g_return_val_if_fail (manager != NULL, FALSE);
++        g_return_val_if_fail (GS_IS_MANAGER (manager), FALSE);
++
++        if (! manager->priv->active) {
++                gs_debug ("Request unlock but manager is not active");
++                return FALSE;
++        }
++
++        if (manager->priv->fading) {
++                gs_debug ("Request unlock so finishing fade");
++                gs_fade_finish (manager->priv->fade);
++        }
++
++        if (manager->priv->windows == NULL) {
++                gs_debug ("We don't have any windows!");
++                return FALSE;
++        }
++
++        if (manager->priv->dialog_up) {
++                /* Find the GSWindow that contains the pointer */
++                window = find_window_at_pointer (manager);
++                gs_window_show_unlock (window);
++                return TRUE;
++        }
++
++	if (!manager->priv->lock_enabled) {
++		g_signal_emit (manager, signals [DEACTIVATED], 0);
++		return TRUE;
++	}
++
++        return FALSE;
++}
++
+ void
+ gs_manager_cancel_unlock_request (GSManager *manager)
+ {
+--- gnome-screensaver-2.28.0/src/gs-lock-plug.c.orig	2010-01-06 20:50:45.226087162 +0800
++++ gnome-screensaver-2.28.0/src/gs-lock-plug.c	2010-01-06 20:51:47.304843245 +0800
+@@ -319,11 +319,6 @@
+ static void
+ restart_cancel_timeout (GSLockPlug *plug)
+ {
+-        remove_cancel_timeout (plug);
+-
+-        plug->priv->cancel_timeout_id = g_timeout_add (plug->priv->timeout,
+-                                                       (GSourceFunc)dialog_timed_out,
+-                                                       plug);
+ }
+ 
+ void
+--- gnome-screensaver-2.28.0/src/gs-window-x11.c.orig	2010-01-06 20:50:45.226455005 +0800
++++ gnome-screensaver-2.28.0/src/gs-window-x11.c	2010-01-06 20:58:14.763298449 +0800
+@@ -102,6 +102,8 @@
+ 
+         GTimer    *timer;
+ 
++        guint      dialog_timeout_id;
++
+ #ifdef HAVE_SHAPE_EXT
+         int        shape_event_base;
+ #endif
+@@ -112,6 +114,7 @@
+         DEACTIVATED,
+         DIALOG_UP,
+         DIALOG_DOWN,
++        DIALOG_TIMEOUT,
+         LAST_SIGNAL
+ };
+ 
+@@ -1072,6 +1075,52 @@
+         return result;
+ }
+ 
++static gboolean
++dialog_timedout (GSWindow *window)
++{
++        g_signal_emit (window, signals [DIALOG_TIMEOUT], 0);
++
++        return FALSE;
++}
++
++static void
++remove_dialog_timeout (GSWindow *window)
++{
++        if (window->priv->dialog_timeout_id > 0) {
++                g_source_remove (window->priv->dialog_timeout_id);
++                window->priv->dialog_timeout_id = 0;
++        }
++}
++
++void
++gs_window_show_unlock (GSWindow *window)
++{
++        gs_window_clear_to_background_pixmap (window);
++        set_invisible_cursor (GTK_WIDGET (window)->window, FALSE);
++
++        gtk_widget_show (window->priv->lock_socket);
++        if (window->priv->keyboard_enabled) {
++                gtk_widget_show (window->priv->keyboard_socket);
++        }
++        window->priv->dialog_timeout_id =
++                g_timeout_add (60000,
++                                (GSourceFunc)dialog_timedout,
++                                window);
++}
++
++void
++gs_window_hide_unlock (GSWindow *window)
++{
++        gs_window_clear (window);
++        set_invisible_cursor (GTK_WIDGET (window)->window, TRUE);
++
++        gtk_widget_hide (window->priv->lock_socket);
++        if (window->priv->keyboard_enabled) {
++                gtk_widget_hide (window->priv->keyboard_socket);
++        }
++        remove_dialog_timeout (window);
++}
++
+ static void
+ lock_plug_added (GtkWidget *widget,
+                  GSWindow  *window)
+@@ -1112,7 +1161,6 @@
+                            GSWindow  *window)
+ {
+         g_signal_handlers_disconnect_by_func (widget, keyboard_socket_destroyed, window);
+-        g_signal_handlers_disconnect_by_func (widget, keyboard_plug_added, window);
+         g_signal_handlers_disconnect_by_func (widget, keyboard_plug_removed, window);
+ 
+         window->priv->keyboard_socket = NULL;
+@@ -1164,7 +1212,6 @@
+ {
+         g_signal_handlers_disconnect_by_func (widget, lock_socket_show, window);
+         g_signal_handlers_disconnect_by_func (widget, lock_socket_destroyed, window);
+-        g_signal_handlers_disconnect_by_func (widget, lock_plug_added, window);
+         g_signal_handlers_disconnect_by_func (widget, lock_plug_removed, window);
+ 
+         window->priv->lock_socket = NULL;
+@@ -1183,8 +1230,6 @@
+ 
+         g_signal_connect (window->priv->keyboard_socket, "destroy",
+                           G_CALLBACK (keyboard_socket_destroyed), window);
+-        g_signal_connect (window->priv->keyboard_socket, "plug_added",
+-                          G_CALLBACK (keyboard_plug_added), window);
+         g_signal_connect (window->priv->keyboard_socket, "plug_removed",
+                           G_CALLBACK (keyboard_plug_removed), window);
+         gtk_box_pack_start (GTK_BOX (window->priv->vbox), window->priv->keyboard_socket, FALSE, FALSE, 0);
+@@ -1345,8 +1390,6 @@
+                           G_CALLBACK (lock_socket_show), window);
+         g_signal_connect (window->priv->lock_socket, "destroy",
+                           G_CALLBACK (lock_socket_destroyed), window);
+-        g_signal_connect (window->priv->lock_socket, "plug_added",
+-                          G_CALLBACK (lock_plug_added), window);
+         g_signal_connect (window->priv->lock_socket, "plug_removed",
+                           G_CALLBACK (lock_plug_removed), window);
+ 
+@@ -1566,10 +1609,6 @@
+ 
+         gtk_widget_hide (window->priv->drawing_area);
+ 
+-        gs_window_clear_to_background_pixmap (window);
+-
+-        set_invisible_cursor (GTK_WIDGET (window)->window, FALSE);
+-
+         result = spawn_on_window (window,
+                                   command->str,
+                                   &window->priv->lock_pid,
+@@ -1889,11 +1928,11 @@
+ 
+         handled = FALSE;
+ 
+-        /* if we already have a socket then don't bother */
+-        if (! window->priv->lock_socket
+-            && GTK_WIDGET_IS_SENSITIVE (GTK_WIDGET (window))) {
+-                g_signal_emit (window, signals [ACTIVITY], 0, &handled);
+-        }
++	if (GTK_WIDGET_IS_SENSITIVE (GTK_WIDGET (window))) {
++		if (window->priv->lock_socket)
++			remove_dialog_timeout (window);
++		g_signal_emit (window, signals [ACTIVITY], 0, &handled);
++	}
+ 
+         return handled;
+ }
+@@ -2146,6 +2185,17 @@
+                               G_TYPE_NONE,
+                               0);
+ 
++        signals [DIALOG_TIMEOUT] =
++                g_signal_new ("dialog-timeout",
++                              G_TYPE_FROM_CLASS (object_class),
++                              G_SIGNAL_RUN_LAST,
++                              G_STRUCT_OFFSET (GSWindowClass, dialog_timeout),
++                              NULL,
++                              NULL,
++                              g_cclosure_marshal_VOID__VOID,
++                              G_TYPE_NONE,
++                              0);
++
+         g_object_class_install_property (object_class,
+                                          PROP_OBSCURED,
+                                          g_param_spec_boolean ("obscured",
+@@ -2292,6 +2342,7 @@
+ 
+         remove_watchdog_timer (window);
+         remove_popup_dialog_idle (window);
++        remove_dialog_timeout (window);
+ 
+         if (window->priv->timer) {
+                 g_timer_destroy (window->priv->timer);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/gnome-screensaver-03-gs-debug.diff	Wed Jan 06 13:46:32 2010 +0000
@@ -0,0 +1,17 @@
+--- gnome-screensaver-2.28.0/src/gs-debug.h.orig	2010-01-04 13:55:30.357437050 +0800
++++ gnome-screensaver-2.28.0/src/gs-debug.h	2010-01-04 13:55:58.245752863 +0800
+@@ -28,13 +28,7 @@
+ 
+ G_BEGIN_DECLS
+ 
+-#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+-#define gs_debug(...) gs_debug_real (__func__, __FILE__, __LINE__, __VA_ARGS__)
+-#elif defined(__GNUC__) && __GNUC__ >= 3
+-#define gs_debug(...) gs_debug_real (__FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
+-#else
+-#define gs_debug(...)
+-#endif
++#define gs_debug(...) gs_debug_real (G_STRFUNC, __FILE__, __LINE__, __VA_ARGS__)
+ 
+ void gs_debug_init             (gboolean debug,
+                                 gboolean to_file);