[PATCH] xdg-screensaver: fix inhibition for freedesktop(BR102124)

David Kis <[email protected]>
Newsgroups gmane.linux.xdg.devel
Message-ID <[email protected]>
According to the spec the dbus-send approach is not working for inhibition.
This will change that to a perl solution similiar to the gnome case.
Also fix `reset` to call `SimulateUserActivity`
---
I have yet to grok the codebase, but this fix my issues under KDE.

 scripts/xdg-screensaver.in | 73 ++++++++++++++++++++------------------
 1 file changed, 38 insertions(+), 35 deletions(-)

diff --git a/scripts/xdg-screensaver.in b/scripts/xdg-screensaver.in
index 9e68196..6ba6c26 100644
--- a/scripts/xdg-screensaver.in
+++ b/scripts/xdg-screensaver.in
@@ -236,33 +236,41 @@ screensaver_freedesktop()
 {
     case "$1" in
         suspend)
-        dbus-send --session \
-                  --dest=org.freedesktop.ScreenSaver \
-                  --type=method_call \
-                  --print-reply \
-                  --reply-timeout=2000 \
-                  /ScreenSaver \
-                  org.freedesktop.ScreenSaver.Inhibit \
-                  string:$window_id \
-                  string:xdg-screensaver \
-                  | grep uint32 | cut -d ' ' -f 5 >| "$screensaver_file.cookie" \
-                  2> /dev/null
-        result=$?
+        perl -e '
+use strict;
+use warnings;
+use IO::File;
+use Net::DBus;
+
+my ($window_id, $screensaver_file) = @ARGV;
+
+my $bus = Net::DBus->session();
+my $ss_svc = $bus->get_service("org.freedesktop.ScreenSaver");
+my $ss = $ss_svc->get_object("/org/freedesktop/ScreenSaver",
+           "org.freedesktop.ScreenSaver");
+$ss->Inhibit($window_id, "xdg-screensaver");
+
+# 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)
-        if [ -f "$screensaver_file.cookie" ] ; then
-            value=`cat "$screensaver_file.cookie"`
-            dbus-send --session \
-                      --dest=org.freedesktop.ScreenSaver \
-                      --type=method_call \
-                      /ScreenSaver \
-                      org.freedesktop.ScreenSaver.UnInhibit \
-                      uint32:$value \
-                      2> /dev/null
-            rm -f "$screensaver_file.cookie"
-        fi
-        result=$?
+        # Automatic resume when $screensaver_file disappears
+        result=0
         ;;
 
         activate)
@@ -286,17 +294,12 @@ screensaver_freedesktop()
         ;;
 
         reset)
-        if [ -f "$screensaver_file.cookie" ] ; then
-            value=`cat "$screensaver_file.cookie"`
-            dbus-send --session \
-                      --dest=org.freedesktop.ScreenSaver \
-                      --type=method_call \
-                      /ScreenSaver \
-                      org.freedesktop.ScreenSaver.UnInhibit \
-                      uint32:$value \
-                      2> /dev/null
-            rm -f "$screensaver_file.cookie"
-        fi
+        dbus-send --session \
+                  --dest=org.freedesktop.ScreenSaver \
+                  --type=method_call \
+                  /ScreenSaver \
+                  org.freedesktop.ScreenSaver.SimulateUserActivity \
+                 2> /dev/null
         result=$?
         ;;
 
-- 
2.19.0

_______________________________________________
xdg mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/xdg
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.