diff --git a/xdg-screensaver-gnome-dbus.diff b/xdg-screensaver-gnome-dbus.diff new file mode 100644 index 0000000..704707b --- /dev/null +++ b/xdg-screensaver-gnome-dbus.diff @@ -0,0 +1,83 @@ +Source of the patch: http://cgit.freedesktop.org/xdg/xdg-utils/commit/?id=666d65cae0f2e66d33ec0dc48c054afbf16c9e3f +--- scripts/xdg-screensaver 2012-05-21 12:55:11.846122671 +0200 ++++ scripts/xdg-screensaver 2012-05-21 12:58:36.269876261 +0200 +@@ -613,16 +613,18 @@ + + screensaver_gnome() + { +-# TODO +-# There seems to be a DBUS interface for gnome-screensaver +-# See http://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/2006-April/042579.html and +-# http://cvs.gnome.org/viewcvs/gnome-screensaver/src/gs-listener-dbus.c?rev=1.36&view=log +-# A problem seems to be that Inhibit is tied to the lifetime of the DBUS appname and +-# this can not be used from a script ++# DBUS interface for gnome-screensaver ++# http://people.gnome.org/~mccann/gnome-screensaver/docs/gnome-screensaver.html + case "$1" in + suspend) +- screensaver_suspend_loop gnome-screensaver-command --poke +- result=0 ++ screensaver_suspend_loop \ ++ dbus-send --session \ ++ --dest=org.gnome.ScreenSaver \ ++ --type=method_call \ ++ /org/gnome/ScreenSaver \ ++ org.gnome.ScreenSaver.SimulateUserActivity \ ++ 2> /dev/null ++ result=$? + ;; + + resume) +@@ -631,7 +633,13 @@ + ;; + + activate) +- gnome-screensaver-command --activate > /dev/null 2> /dev/null ++ dbus-send --session \ ++ --dest=org.gnome.ScreenSaver \ ++ --type=method_call \ ++ /org/gnome/ScreenSaver \ ++ org.gnome.ScreenSaver.SetActive \ ++ boolean:true \ ++ 2> /dev/null + result=$? + ;; + +@@ -642,18 +650,31 @@ + + reset) + # Turns the screensaver off right now +- gnome-screensaver-command --deactivate > /dev/null 2> /dev/null ++ dbus-send --session \ ++ --dest=org.gnome.ScreenSaver \ ++ --type=method_call \ ++ /org/gnome/ScreenSaver \ ++ org.gnome.ScreenSaver.SimulateUserActivity \ ++ 2> /dev/null + result=$? + ;; + + status) +- result=0 +- if [ -f "$screensaver_file" ] ; then +- echo "disabled" +- elif gnome-screensaver-command --query > /dev/null 2> /dev/null; then ++ status=`dbus-send --session \ ++ --dest=org.gnome.ScreenSaver \ ++ --type=method_call \ ++ --print-reply \ ++ --reply-timeout=2000 \ ++ /org/gnome/ScreenSaver \ ++ org.gnome.ScreenSaver.GetActive \ ++ | grep boolean | cut -d ' ' -f 5` ++ result=$? ++ if [ x"$status" = "xtrue" -o x"$status" = "xfalse" ]; then + echo "enabled" ++ elif [ x"$result" != "x0" ]; then ++ echo "ERROR: dbus org.gnome.ScreenSaver.GetActive returned '$status'" >&2 ++ return 1 + else +- # Something is wrong + echo "disabled" + fi + ;; diff --git a/xdg-screensaver-gnome-perl.diff b/xdg-screensaver-gnome-perl.diff new file mode 100644 index 0000000..ee7184c --- /dev/null +++ b/xdg-screensaver-gnome-perl.diff @@ -0,0 +1,66 @@ +Source of the patch: http://patch-tracker.debian.org/patch/series/view/xdg-utils/1.1.0~rc1+git20111210-6/xdg-screensaver-new-gnome.diff +--- scripts/xdg-screensaver 2012-05-21 12:58:36.269876261 +0200 ++++ scripts/xdg-screensaver 2012-05-21 13:01:12.328342683 +0200 +@@ -617,14 +617,54 @@ + # http://people.gnome.org/~mccann/gnome-screensaver/docs/gnome-screensaver.html + case "$1" in + suspend) +- screensaver_suspend_loop \ +- dbus-send --session \ +- --dest=org.gnome.ScreenSaver \ +- --type=method_call \ +- /org/gnome/ScreenSaver \ +- org.gnome.ScreenSaver.SimulateUserActivity \ +- 2> /dev/null +- result=$? ++ perl -e ' ++use strict; ++use warnings; ++use IO::File; ++use Net::DBus; ++use X11::Protocol; ++ ++my ($window_id, $screensaver_file) = @ARGV; ++ ++# Find window name to pass to session manager. ++my $x = X11::Protocol->new(); ++my $named_window_id = hex($window_id); ++my $window_name; ++while (1) { ++ ($window_name) = $x->GetProperty($named_window_id, $x->atom("WM_NAME"), ++ $x->atom("STRING"), 0, 1000, 0); ++ last if defined($window_name) && $window_name ne ""; ++ (undef, $named_window_id) = $x->QueryTree($named_window_id); ++ if (!defined($named_window_id)) { ++ $window_name = "?"; ++ last; ++ } ++} ++ ++# Inhibit idle detection (flags = 8) with window name and ID. ++# We have no reason so just send the window name again. ++my $bus = Net::DBus->session(); ++my $sm_svc = $bus->get_service("org.gnome.SessionManager"); ++my $sm = $sm_svc->get_object("/org/gnome/SessionManager", ++ "org.gnome.SessionManager"); ++$sm->Inhibit($window_name, hex($window_id), $window_name, 8); ++ ++# Wait until removed from the status file. ++while (1) { ++ sleep(10); ++ my $status = new IO::File($screensaver_file, "r") ++ or exit 0; ++ my $found; ++ while (<$status>) { ++ if (/^$window_id:/) { ++ $found = 1; ++ last; ++ } ++ } ++ exit 0 unless $found; ++} ++' $window_id $screensaver_file & ++ result=0 + ;; + + resume) diff --git a/xdg-screensaver-sleep.diff b/xdg-screensaver-sleep.diff new file mode 100644 index 0000000..6fbc697 --- /dev/null +++ b/xdg-screensaver-sleep.diff @@ -0,0 +1,12 @@ +Source of the patch: http://cgit.freedesktop.org/xdg/xdg-utils/commit/?id=7465b22a95e9a28e3f4960e6ea40a4abeca1c2e9 +--- scripts/xdg-screensaver 2007-06-24 21:58:06.000000000 +0200 ++++ scripts/xdg-screensaver 2012-05-21 12:51:51.108252420 +0200 +@@ -608,7 +608,7 @@ + fi + $MV "$tmpfile" "$screensaver_file" + unlockfile +- (while [ -f "$screensaver_file" ]; do $*; sleep 59; done) > /dev/null 2> /dev/null & ++ (while [ -f "$screensaver_file" ]; do $*; sleep 50; done) > /dev/null 2> /dev/null & + } + + screensaver_gnome() diff --git a/xdg-utils.changes b/xdg-utils.changes index 5a39198..ada1925 100644 --- a/xdg-utils.changes +++ b/xdg-utils.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Mon May 21 10:16:02 UTC 2012 - vargusz@fazekas.hu + +- Fix xdg-screensaver issues with Gnome 3 (bnc#559110) + ------------------------------------------------------------------- Sun Oct 23 23:12:02 UTC 2011 - pascal.bleser@opensuse.org diff --git a/xdg-utils.spec b/xdg-utils.spec index 5c29a4d..1bf1405 100644 --- a/xdg-utils.spec +++ b/xdg-utils.spec @@ -41,6 +41,10 @@ Patch4: %name-1.0.2-lxde-support.patch # PATCH-FIX-UPSTREAM xdg-utils-1.0.2-bnc591714.patch fdo#27551 andrea@opensuse.org # this patch fix bnc#591714 Patch5: %name-1.0.2-bnc591714.patch +Patch6: xdg-screensaver-sleep.diff +Patch7: xdg-screensaver-gnome-dbus.diff +Patch8: xdg-screensaver-gnome-perl.diff +Requires: perl, perl-Net-DBus, perl-X11-Protocol %description The xdg-utils package is a set of simple scripts that provide basic @@ -67,6 +71,9 @@ these utilities work properly in their environment. %patch3 -p1 %patch4 -p1 %patch5 -p1 +%patch6 +%patch7 +%patch8 %build %configure