| ... |
... |
@@ -59,10 +59,10 @@ class DBusFreedesktop(IdleMonitor): |
|
59
|
59
|
|
|
60
|
60
|
def __init__(self) -> None:
|
|
61
|
61
|
IdleMonitor.__init__(self)
|
|
62
|
|
- self.last_idle_time = 0
|
|
|
62
|
+ self._last_idle_time = 0
|
|
63
|
63
|
|
|
64
|
64
|
log.debug('Connecting to org.freedesktop.ScreenSaver')
|
|
65
|
|
- self.dbus_proxy = Gio.DBusProxy.new_for_bus_sync(
|
|
|
65
|
+ self._dbus_proxy = Gio.DBusProxy.new_for_bus_sync(
|
|
66
|
66
|
Gio.BusType.SESSION,
|
|
67
|
67
|
Gio.DBusProxyFlags.NONE,
|
|
68
|
68
|
None,
|
| ... |
... |
@@ -80,7 +80,7 @@ def __init__(self) -> None: |
|
80
|
80
|
log.debug('Test successful')
|
|
81
|
81
|
|
|
82
|
82
|
def _get_idle_sec_fail(self) -> int:
|
|
83
|
|
- (idle_time,) = cast(tuple[int], self.dbus_proxy.call_sync(
|
|
|
83
|
+ (idle_time,) = cast(tuple[int], self._dbus_proxy.call_sync(
|
|
84
|
84
|
'GetSessionIdleTime',
|
|
85
|
85
|
None,
|
|
86
|
86
|
Gio.DBusCallFlags.NO_AUTO_START,
|
| ... |
... |
@@ -91,23 +91,23 @@ def _get_idle_sec_fail(self) -> int: |
|
91
|
91
|
|
|
92
|
92
|
def get_idle_sec(self) -> int:
|
|
93
|
93
|
try:
|
|
94
|
|
- self.last_idle_time = self._get_idle_sec_fail()
|
|
|
94
|
+ self._last_idle_time = self._get_idle_sec_fail()
|
|
95
|
95
|
except GLib.Error as error:
|
|
96
|
96
|
log.warning(
|
|
97
|
97
|
'org.freedesktop.ScreenSaver.GetSessionIdleTime() failed: %s',
|
|
98
|
98
|
error)
|
|
99
|
99
|
|
|
100
|
|
- return self.last_idle_time
|
|
|
100
|
+ return self._last_idle_time
|
|
101
|
101
|
|
|
102
|
102
|
|
|
103
|
103
|
class DBusGnome(IdleMonitor):
|
|
104
|
104
|
|
|
105
|
105
|
def __init__(self) -> None:
|
|
106
|
106
|
IdleMonitor.__init__(self)
|
|
107
|
|
- self.last_idle_time = 0
|
|
|
107
|
+ self._last_idle_time = 0
|
|
108
|
108
|
|
|
109
|
109
|
log.debug('Connecting to org.gnome.Mutter.IdleMonitor')
|
|
110
|
|
- self.dbus_gnome_proxy = Gio.DBusProxy.new_for_bus_sync(
|
|
|
110
|
+ self._dbus_proxy = Gio.DBusProxy.new_for_bus_sync(
|
|
111
|
111
|
Gio.BusType.SESSION,
|
|
112
|
112
|
Gio.DBusProxyFlags.NONE,
|
|
113
|
113
|
None,
|
| ... |
... |
@@ -125,7 +125,7 @@ def __init__(self) -> None: |
|
125
|
125
|
log.debug('Test successful')
|
|
126
|
126
|
|
|
127
|
127
|
def _get_idle_sec_fail(self) -> int:
|
|
128
|
|
- (idle_time,) = cast(tuple[int], self.dbus_gnome_proxy.call_sync(
|
|
|
128
|
+ (idle_time,) = cast(tuple[int], self._dbus_proxy.call_sync(
|
|
129
|
129
|
'GetIdletime',
|
|
130
|
130
|
None,
|
|
131
|
131
|
Gio.DBusCallFlags.NO_AUTO_START,
|
| ... |
... |
@@ -136,13 +136,13 @@ def _get_idle_sec_fail(self) -> int: |
|
136
|
136
|
|
|
137
|
137
|
def get_idle_sec(self) -> int:
|
|
138
|
138
|
try:
|
|
139
|
|
- self.last_idle_time = self._get_idle_sec_fail()
|
|
|
139
|
+ self._last_idle_time = self._get_idle_sec_fail()
|
|
140
|
140
|
except GLib.Error as error:
|
|
141
|
141
|
log.warning(
|
|
142
|
142
|
'org.gnome.Mutter.IdleMonitor.GetIdletime() failed: %s',
|
|
143
|
143
|
error)
|
|
144
|
144
|
|
|
145
|
|
- return self.last_idle_time
|
|
|
145
|
+ return self._last_idle_time
|
|
146
|
146
|
|
|
147
|
147
|
|
|
148
|
148
|
class Xss(IdleMonitor):
|
| ... |
... |
@@ -165,59 +165,60 @@ class XScreenSaverInfo(ctypes.Structure): |
|
165
|
165
|
xid = ctypes.c_ulong
|
|
166
|
166
|
c_int_p = ctypes.POINTER(ctypes.c_int)
|
|
167
|
167
|
|
|
168
|
|
- libX11path = ctypes.util.find_library('X11')
|
|
169
|
|
- if libX11path is None:
|
|
|
168
|
+ lib_x11_path = ctypes.util.find_library('X11')
|
|
|
169
|
+ if lib_x11_path is None:
|
|
170
|
170
|
raise OSError('libX11 could not be found.')
|
|
171
|
|
- libX11 = ctypes.cdll.LoadLibrary(libX11path)
|
|
172
|
|
- libX11.XOpenDisplay.restype = display_p
|
|
173
|
|
- libX11.XOpenDisplay.argtypes = (ctypes.c_char_p,)
|
|
174
|
|
- libX11.XDefaultRootWindow.restype = xid
|
|
175
|
|
- libX11.XDefaultRootWindow.argtypes = (display_p,)
|
|
176
|
|
-
|
|
177
|
|
- libXsspath = ctypes.util.find_library('Xss')
|
|
178
|
|
- if libXsspath is None:
|
|
|
171
|
+
|
|
|
172
|
+ lib_x11 = ctypes.cdll.LoadLibrary(lib_x11_path)
|
|
|
173
|
+ lib_x11.XOpenDisplay.restype = display_p
|
|
|
174
|
+ lib_x11.XOpenDisplay.argtypes = (ctypes.c_char_p,)
|
|
|
175
|
+ lib_x11.XDefaultRootWindow.restype = xid
|
|
|
176
|
+ lib_x11.XDefaultRootWindow.argtypes = (display_p,)
|
|
|
177
|
+
|
|
|
178
|
+ lib_xss_path = ctypes.util.find_library('Xss')
|
|
|
179
|
+ if lib_xss_path is None:
|
|
179
|
180
|
raise OSError('libXss could not be found.')
|
|
180
|
|
- self.libXss = ctypes.cdll.LoadLibrary(libXsspath)
|
|
181
|
|
- self.libXss.XScreenSaverQueryExtension.argtypes = (display_p,
|
|
182
|
|
- c_int_p,
|
|
183
|
|
- c_int_p)
|
|
184
|
|
- self.libXss.XScreenSaverAllocInfo.restype = XScreenSaverInfo_p
|
|
185
|
|
- self.libXss.XScreenSaverQueryInfo.argtypes = (
|
|
|
181
|
+
|
|
|
182
|
+ self._lib_xss = ctypes.cdll.LoadLibrary(lib_xss_path)
|
|
|
183
|
+ self._lib_xss.XScreenSaverQueryExtension.argtypes = (
|
|
|
184
|
+ display_p, c_int_p, c_int_p)
|
|
|
185
|
+ self._lib_xss.XScreenSaverAllocInfo.restype = XScreenSaverInfo_p
|
|
|
186
|
+ self._lib_xss.XScreenSaverQueryInfo.argtypes = (
|
|
186
|
187
|
display_p, xid, XScreenSaverInfo_p)
|
|
187
|
188
|
|
|
188
|
|
- self.dpy_p = libX11.XOpenDisplay(None)
|
|
189
|
|
- if self.dpy_p is None:
|
|
|
189
|
+ self._dpy_p = lib_x11.XOpenDisplay(None)
|
|
|
190
|
+ if self._dpy_p is None:
|
|
190
|
191
|
raise OSError('Could not open X Display.')
|
|
191
|
192
|
|
|
192
|
193
|
_event_basep = ctypes.c_int()
|
|
193
|
194
|
_error_basep = ctypes.c_int()
|
|
194
|
|
- extension = self.libXss.XScreenSaverQueryExtension(
|
|
195
|
|
- self.dpy_p, ctypes.byref(_event_basep), ctypes.byref(_error_basep))
|
|
|
195
|
+ extension = self._lib_xss.XScreenSaverQueryExtension(
|
|
|
196
|
+ self._dpy_p, ctypes.byref(_event_basep), ctypes.byref(_error_basep))
|
|
196
|
197
|
if extension == 0:
|
|
197
|
198
|
raise OSError('XScreenSaver Extension not available on display.')
|
|
198
|
199
|
|
|
199
|
|
- self.xss_info_p = self.libXss.XScreenSaverAllocInfo()
|
|
200
|
|
- if self.xss_info_p is None:
|
|
|
200
|
+ self._xss_info_p = self._lib_xss.XScreenSaverAllocInfo()
|
|
|
201
|
+ if self._xss_info_p is None:
|
|
201
|
202
|
raise OSError('XScreenSaverAllocInfo: Out of Memory.')
|
|
202
|
203
|
|
|
203
|
|
- self.rootwindow = libX11.XDefaultRootWindow(self.dpy_p)
|
|
|
204
|
+ self.root_window = lib_x11.XDefaultRootWindow(self._dpy_p)
|
|
204
|
205
|
|
|
205
|
206
|
def get_idle_sec(self) -> int:
|
|
206
|
|
- info = self.libXss.XScreenSaverQueryInfo(
|
|
207
|
|
- self.dpy_p, self.rootwindow, self.xss_info_p)
|
|
|
207
|
+ info = self._lib_xss.XScreenSaverQueryInfo(
|
|
|
208
|
+ self._dpy_p, self.root_window, self._xss_info_p)
|
|
208
|
209
|
if info == 0:
|
|
209
|
210
|
return info
|
|
210
|
|
- return self.xss_info_p.contents.idle // 1000
|
|
|
211
|
+ return self._xss_info_p.contents.idle // 1000
|
|
211
|
212
|
|
|
212
|
213
|
|
|
213
|
214
|
class Windows(IdleMonitor):
|
|
214
|
215
|
def __init__(self) -> None:
|
|
215
|
216
|
IdleMonitor.__init__(self)
|
|
216
|
|
- self.OpenInputDesktop = ctypes.windll.user32.OpenInputDesktop
|
|
217
|
|
- self.CloseDesktop = ctypes.windll.user32.CloseDesktop
|
|
218
|
|
- self.SystemParametersInfo = ctypes.windll.user32.SystemParametersInfoW
|
|
219
|
|
- self.GetTickCount = ctypes.windll.kernel32.GetTickCount
|
|
220
|
|
- self.GetLastInputInfo = ctypes.windll.user32.GetLastInputInfo
|
|
|
217
|
+ self._OpenInputDesktop = ctypes.windll.user32.OpenInputDesktop
|
|
|
218
|
+ self._CloseDesktop = ctypes.windll.user32.CloseDesktop
|
|
|
219
|
+ self._SystemParametersInfo = ctypes.windll.user32.SystemParametersInfoW
|
|
|
220
|
+ self._GetTickCount = ctypes.windll.kernel32.GetTickCount
|
|
|
221
|
+ self._GetLastInputInfo = ctypes.windll.user32.GetLastInputInfo
|
|
221
|
222
|
|
|
222
|
223
|
self._locked_time = None
|
|
223
|
224
|
|
| ... |
... |
@@ -227,12 +228,12 @@ class LastInputInfo(ctypes.Structure): |
|
227
|
228
|
('dwTime', ctypes.c_uint)
|
|
228
|
229
|
]
|
|
229
|
230
|
|
|
230
|
|
- self.lastInputInfo = LastInputInfo()
|
|
231
|
|
- self.lastInputInfo.cbSize = ctypes.sizeof(self.lastInputInfo)
|
|
|
231
|
+ self._lastInputInfo = LastInputInfo()
|
|
|
232
|
+ self._lastInputInfo.cbSize = ctypes.sizeof(self._lastInputInfo)
|
|
232
|
233
|
|
|
233
|
234
|
def get_idle_sec(self) -> int:
|
|
234
|
|
- self.GetLastInputInfo(ctypes.byref(self.lastInputInfo))
|
|
235
|
|
- return int(self.GetTickCount() - self.lastInputInfo.dwTime) // 1000
|
|
|
235
|
+ self._GetLastInputInfo(ctypes.byref(self._lastInputInfo))
|
|
|
236
|
+ return int(self._GetTickCount() - self._lastInputInfo.dwTime) // 1000
|
|
236
|
237
|
|
|
237
|
238
|
def set_extended_away(self, state: bool) -> None:
|
|
238
|
239
|
raise NotImplementedError
|
| ... |
... |
@@ -241,7 +242,7 @@ def is_extended_away(self) -> bool: |
|
241
|
242
|
# Check if Screen Saver is running
|
|
242
|
243
|
# 0x72 is SPI_GETSCREENSAVERRUNNING
|
|
243
|
244
|
saver_runing = ctypes.c_int(0)
|
|
244
|
|
- info = self.SystemParametersInfo(
|
|
|
245
|
+ info = self._SystemParametersInfo(
|
|
245
|
246
|
0x72, 0, ctypes.byref(saver_runing), 0)
|
|
246
|
247
|
if info and saver_runing.value:
|
|
247
|
248
|
return True
|
| ... |
... |
@@ -249,9 +250,9 @@ def is_extended_away(self) -> bool: |
|
249
|
250
|
# Check if Screen is locked
|
|
250
|
251
|
# Also a UAC prompt counts as locked
|
|
251
|
252
|
# So just return True if we are more than 10 seconds locked
|
|
252
|
|
- desk = self.OpenInputDesktop(0, False, 0)
|
|
|
253
|
+ desk = self._OpenInputDesktop(0, False, 0)
|
|
253
|
254
|
unlocked = bool(desk)
|
|
254
|
|
- self.CloseDesktop(desk)
|
|
|
255
|
+ self._CloseDesktop(desk)
|
|
255
|
256
|
|
|
256
|
257
|
if unlocked:
|
|
257
|
258
|
self._locked_time = None
|