Index: third_party/xdg-utils/scripts/xdg-screensaver.in |
=================================================================== |
--- third_party/xdg-utils/scripts/xdg-screensaver.in (revision 57942) |
+++ third_party/xdg-utils/scripts/xdg-screensaver.in (working copy) |
@@ -26,7 +26,7 @@ |
#@xdg-utils-common@ |
-# Check if we can use "mv -T" |
+# Check if we can use "mv -T" |
if mv -T ... ... 2>&1 | grep '\.\.\.' > /dev/null ; then |
# We can securely move files in /tmp with mv -T |
DEBUG 1 "mv -T available" |
@@ -53,7 +53,7 @@ |
do |
sleep 1 |
try=$(($try+1)) |
- if [ $try -eq 3 ] ; then |
+ if [ $try -eq 3 ] ; then |
rm -f "$screensaver_file".lock || return # Can't remove lockfile |
try=0 |
fi |
@@ -86,11 +86,15 @@ |
case "$DE" in |
kde) |
- screensaver_kde "$1" |
+ if [ x"$KDE_SESSION_VERSION" = x"4" ]; then |
+ screensaver_freedesktop "$1" |
+ else |
+ screensaver_kde "$1" |
+ fi |
;; |
- gnome) |
- screensaver_gnome "$1" |
+ gnome_screensaver) |
+ screensaver_gnome_screensaver "$1" |
;; |
xscreensaver) |
@@ -132,13 +136,13 @@ |
{ |
lockfile # Obtain lockfile |
# Find the PID of the trackingprocess |
- xprop_pid=`grep "$window_id:" "$screensaver_file" 2> /dev/null | cut -d ':' -f 2` |
+ xprop_pid=`grep "$window_id:" "$screensaver_file" 2> /dev/null | cut -d ':' -f 2` |
unlockfile # Free lockfile |
if [ -n "$xprop_pid" ] && ps -p "$xprop_pid" 2> /dev/null | grep xprop > /dev/null; then |
- # Kill the tracking process |
+ # Kill the tracking process |
kill -s TERM $xprop_pid |
fi |
- cleanup_suspend |
+ cleanup_suspend |
} |
XPROP=`which xprop 2> /dev/null` |
@@ -148,7 +152,7 @@ |
if [ -z "$XPROP" ]; then |
DEBUG 3 "xprop not found" |
return |
- fi |
+ fi |
DEBUG 2 "Running $XPROP -id $window_id" |
if $XPROP -id $window_id > /dev/null 2> /dev/null; then |
DEBUG 3 Window $window_id exists |
@@ -179,7 +183,7 @@ |
echo "$wid:$pid" |
if [ $wid = $window_id ] ; then |
already_tracked=0 |
- fi |
+ fi |
fi |
done |
IFS="$IFS_save" |
@@ -211,33 +215,79 @@ |
{ |
case "$1" in |
suspend) |
- #FIXME (get/store cookie) |
- qdbus org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.ScreenSaver.Inhibit $window_id xdg-screensaver > /dev/null |
+ 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=$? |
;; |
resume) |
- qdbus org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.ScreenSaver.SetActive true > /dev/null |
+ 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=$? |
;; |
activate) |
- qdbus org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.ScreenSaver.SetActive true > /dev/null |
+ dbus-send --session \ |
+ --dest=org.freedesktop.ScreenSaver \ |
+ --type=method_call \ |
+ /ScreenSaver \ |
+ org.freedesktop.ScreenSaver.SetActive \ |
+ boolean:true \ |
+ 2> /dev/null |
result=$? |
;; |
lock) |
- qdbus org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.ScreenSaver.Lock > /dev/null |
+ dbus-send --session \ |
+ --dest=org.freedesktop.ScreenSaver \ |
+ --type=method_call \ |
+ /ScreenSaver \ |
+ org.freedesktop.ScreenSaver.Lock \ |
+ 2> /dev/null |
;; |
reset) |
- #FIXME (cookies?) |
- qdbus org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.ScreenSaver.UnInhibit $window_id > /dev/null |
+ 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=$? |
;; |
status) |
- status=`qdbus org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.ScreenSaver.GetActive` |
+ status=`dbus-send --session \ |
+ --dest=org.freedesktop.ScreenSaver \ |
+ --type=method_call \ |
+ --print-reply \ |
+ --reply-timeout=2000 \ |
+ /ScreenSaver \ |
+ org.freedesktop.ScreenSaver.GetActive \ |
+ | grep boolean | cut -d ' ' -f 5` |
result=$? |
if [ x"$status" = "xtrue" ]; then |
echo "enabled" |
@@ -259,7 +309,7 @@ |
screensaver_kde() |
{ |
case "$1" in |
- suspend) |
+ suspend) |
dcop kdesktop KScreensaverIface enable false > /dev/null |
result=$? |
;; |
@@ -268,7 +318,7 @@ |
dcop kdesktop KScreensaverIface configure > /dev/null |
result=$? |
;; |
- |
+ |
activate) |
dcop kdesktop KScreensaverIface save > /dev/null |
result=$? |
@@ -278,7 +328,7 @@ |
dcop kdesktop KScreensaverIface lock > /dev/null |
result=$? |
;; |
- |
+ |
reset) |
# Turns the screensaver off right now |
dcop kdesktop KScreensaverIface quit > /dev/null |
@@ -325,14 +375,14 @@ |
# Suspend pending, don't do a thing |
$MV "$tmpfile" "$screensaver_file" |
unlockfile |
- return |
+ return |
fi |
$MV "$tmpfile" "$screensaver_file" |
unlockfile |
(while [ -f "$screensaver_file" ]; do $*; sleep 50; done) > /dev/null 2> /dev/null & |
} |
-screensaver_gnome() |
+screensaver_gnome_screensaver() |
{ |
# TODO |
# There seems to be a DBUS interface for gnome-screensaver |
@@ -341,7 +391,7 @@ |
# 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 |
case "$1" in |
- suspend) |
+ suspend) |
screensaver_suspend_loop gnome-screensaver-command --poke |
result=0 |
;; |
@@ -350,17 +400,17 @@ |
# Automatic resume when $screensaver_file disappears |
result=0 |
;; |
- |
+ |
activate) |
gnome-screensaver-command --activate > /dev/null 2> /dev/null |
result=$? |
;; |
- |
+ |
lock) |
gnome-screensaver-command --lock > /dev/null 2> /dev/null |
result=$? |
;; |
- |
+ |
reset) |
# Turns the screensaver off right now |
gnome-screensaver-command --deactivate > /dev/null 2> /dev/null |
@@ -389,7 +439,7 @@ |
screensaver_xscreensaver() |
{ |
case "$1" in |
- suspend) |
+ suspend) |
screensaver_suspend_loop xscreensaver-command -deactivate |
result=0 |
;; |
@@ -398,7 +448,7 @@ |
# Automatic resume when $screensaver_file disappears |
result=0 |
;; |
- |
+ |
activate) |
xscreensaver-command -activate > /dev/null 2> /dev/null |
result=$? |
@@ -408,7 +458,7 @@ |
xscreensaver-command -lock > /dev/null 2> /dev/null |
result=$? |
;; |
- |
+ |
reset) |
# Turns the screensaver off right now |
xscreensaver-command -deactivate > /dev/null 2> /dev/null |
@@ -439,26 +489,26 @@ |
case $1 in |
suspend) |
action="$1" |
- |
+ |
shift |
- if [ -z "$1" ] ; then |
+ if [ -z "$1" ] ; then |
exit_failure_syntax "WindowID argument missing" |
fi |
- |
+ |
window_id="$1" |
check_window_id |
;; |
resume) |
action="$1" |
- |
+ |
shift |
- if [ -z "$1" ] ; then |
+ if [ -z "$1" ] ; then |
exit_failure_syntax "WindowID argument missing" |
fi |
- |
+ |
window_id="$1" |
check_window_id |
;; |
@@ -478,7 +528,7 @@ |
status) |
action="$1" |
;; |
- |
+ |
*) |
exit_failure_syntax "unknown command '$1'" |
;; |
@@ -487,6 +537,8 @@ |
detectDE |
# Consider "xscreensaver" a separate DE |
xscreensaver-command -version 2> /dev/null | grep XScreenSaver > /dev/null && DE="xscreensaver" |
+# Consider "gnome-screensaver" a separate DE |
+gnome-screensaver-command -q > /dev/null 2>&1 && DE="gnome_screensaver" |
if [ "$action" = "resume" ] ; then |
do_resume |
@@ -498,7 +550,7 @@ |
if [ "$action" = "suspend" ] ; then |
# Start tracking $window_id and resume the screensaver once it disappears |
( track_window ) 2> /dev/null > /dev/null & |
-fi |
+fi |
if [ $result -eq 0 ]; then |
exit_success |