diff options
author | Anas Nashif <anas.nashif@intel.com> | 2012-11-10 07:14:07 -0800 |
---|---|---|
committer | Anas Nashif <anas.nashif@intel.com> | 2012-11-10 07:14:07 -0800 |
commit | e5e3ddd765e3a5ab31e47fd0664c4a531c805803 (patch) | |
tree | 6e7c1d1030e866da14b69540a055a1062b78e466 | |
parent | 9b9d173d07231f3833de120360fef5c2c122a875 (diff) | |
download | xdg-utils-e5e3ddd765e3a5ab31e47fd0664c4a531c805803.tar.gz xdg-utils-e5e3ddd765e3a5ab31e47fd0664c4a531c805803.tar.bz2 xdg-utils-e5e3ddd765e3a5ab31e47fd0664c4a531c805803.zip |
screensaver gnome perl
-rw-r--r-- | scripts/xdg-screensaver.in | 56 |
1 files changed, 48 insertions, 8 deletions
diff --git a/scripts/xdg-screensaver.in b/scripts/xdg-screensaver.in index 07c3fc1..0513ee2 100644 --- a/scripts/xdg-screensaver.in +++ b/scripts/xdg-screensaver.in @@ -435,14 +435,54 @@ screensaver_gnome_screensaver() # 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) |