Philipp Hörist pushed to branch master at gajim / gajim
Commits:
02cca30d by André at 2020-11-25T20:16:14+01:00
Support idle time from org.freedesktop.ScreenSaver
- - - - -
2 changed files:
- flatpak/org.gajim.Gajim.yaml
- gajim/common/idle.py
Changes:
=====================================
flatpak/org.gajim.Gajim.yaml
=====================================
@@ -21,6 +21,7 @@ finish-args:
- --talk-name=org.mpris.MediaPlayer2.*
- --talk-name=org.freedesktop.portal.Fcitx
# Automatic status
+ - --talk-name=org.freedesktop.ScreenSaver
- --talk-name=org.gnome.Mutter.IdleMonitor
# Keyring
- --talk-name=org.freedesktop.secrets
=====================================
gajim/common/idle.py
=====================================
@@ -33,6 +33,57 @@
log = logging.getLogger('gajim.c.idle')
+class DBusFreedesktopIdleMonitor:
+
+ def __init__(self):
+ self.last_idle_time = 0
+ self._extended_away = False
+
+ log.debug('Connecting to D-Bus')
+ self.dbus_proxy = Gio.DBusProxy.new_for_bus_sync(
+ Gio.BusType.SESSION,
+ Gio.DBusProxyFlags.NONE,
+ None,
+ 'org.freedesktop.ScreenSaver',
+ '/org/freedesktop/ScreenSaver',
+ 'org.freedesktop.ScreenSaver',
+ None
+ )
+ log.debug('D-Bus connected')
+
+ # Only the following call will trigger exceptions if the D-Bus
+ # interface/method/... does not exist. Using the failing method
+ # for class init to allow other idle monitors to be used on failure.
+ self._get_idle_sec_fail()
+ log.debug('D-Bus call test successful')
+
+ def _get_idle_sec_fail(self):
+ (idle_time,) = self.dbus_proxy.call_sync(
+ 'GetSessionIdleTime',
+ None,
+ Gio.DBusCallFlags.NO_AUTO_START,
+ -1,
+ None
+ )
+ return idle_time//1000
+
+ def get_idle_sec(self):
+ try:
+ self.last_idle_time = self._get_idle_sec_fail()
+ except GLib.Error as error:
+ log.warning(
+ 'org.freedesktop.ScreenSaver.GetSessionIdleTime() failed: %s',
+ error)
+
+ return self.last_idle_time
+
+ def set_extended_away(self, state):
+ self._extended_away = state
+
+ def is_extended_away(self):
+ return self._extended_away
+
+
class DBusGnomeIdleMonitor:
def __init__(self):
@@ -257,15 +308,19 @@ def _get_idle_monitor():
return WindowsIdleMonitor()
try:
- return DBusGnomeIdleMonitor()
+ return DBusFreedesktopIdleMonitor()
except GLib.Error as error:
log.info('Idle time via D-Bus not available: %s', error)
- try:
- return XssIdleMonitor()
- except OSError as error:
- log.info('Idle time via XScreenSaverInfo '
- 'not available: %s', error)
+ try:
+ return DBusGnomeIdleMonitor()
+ except GLib.Error as error:
+ log.info('Idle time via D-Bus (GNOME) not available: %s', error)
+
+ try:
+ return XssIdleMonitor()
+ except OSError as error:
+ log.info('Idle time via XScreenSaverInfo not available: %s', error)
def get_idle_sec(self):
return self._idle_monitor.get_idle_sec()
View it on GitLab:
https://dev.gajim.org/gajim/gajim/-/commit/02cca30da43bdb5d33e3e89cc1def16593835bf4
--
View it on GitLab:
https://dev.gajim.org/gajim/gajim/-/commit/02cca30da43bdb5d33e3e89cc1def16593835bf4
You're receiving this email because of your account on dev.gajim.org.
_______________________________________________
Commits mailing list
[email protected]
https://lists.gajim.org/cgi-bin/listinfo/commits