1
Description: Use DBus API for GNOME since gnome-screensaver-command --poke
3
Author: Ben Hutchings <ben@decadent.org.uk>
4
Bug: http://bugs.debian.org/610155
6
--- a/scripts/xdg-screensaver.in
7
+++ b/scripts/xdg-screensaver.in
8
@@ -442,14 +442,54 @@ screensaver_gnome_screensaver()
9
# http://people.gnome.org/~mccann/gnome-screensaver/docs/gnome-screensaver.html
12
- screensaver_suspend_loop \
13
- dbus-send --session \
14
- --dest=org.gnome.ScreenSaver \
15
- --type=method_call \
16
- /org/gnome/ScreenSaver \
17
- org.gnome.ScreenSaver.SimulateUserActivity \
27
+my ($window_id, $screensaver_file) = @ARGV;
29
+# Find window name to pass to session manager.
30
+my $x = X11::Protocol->new();
31
+my $named_window_id = hex($window_id);
34
+ ($window_name) = $x->GetProperty($named_window_id, $x->atom("WM_NAME"),
35
+ $x->atom("STRING"), 0, 1000, 0);
36
+ last if defined($window_name) && $window_name ne "";
37
+ (undef, $named_window_id) = $x->QueryTree($named_window_id);
38
+ if (!defined($named_window_id)) {
44
+# Inhibit idle detection (flags = 8) with window name and ID.
45
+# We have no reason so just send the window name again.
46
+my $bus = Net::DBus->session();
47
+my $sm_svc = $bus->get_service("org.gnome.SessionManager");
48
+my $sm = $sm_svc->get_object("/org/gnome/SessionManager",
49
+ "org.gnome.SessionManager");
50
+$sm->Inhibit($window_name, hex($window_id), $window_name, 8);
52
+# Wait until removed from the status file.
55
+ my $status = new IO::File($screensaver_file, "r")
59
+ if (/^$window_id:/) {
64
+ exit 0 unless $found;
66
+' $window_id $screensaver_file &