Merge 2786f55c8a
into 00c33908a3
This commit is contained in:
commit
31cccdf8b2
|
@ -22,6 +22,8 @@ from safeeyes import utility
|
||||||
def validate(plugin_config, plugin_settings):
|
def validate(plugin_config, plugin_settings):
|
||||||
command = None
|
command = None
|
||||||
if utility.IS_WAYLAND:
|
if utility.IS_WAYLAND:
|
||||||
|
if utility.DESKTOP_ENVIRONMENT == "gnome":
|
||||||
|
return None
|
||||||
command = "wlrctl"
|
command = "wlrctl"
|
||||||
else:
|
else:
|
||||||
command = "xprop"
|
command = "xprop"
|
||||||
|
|
|
@ -30,6 +30,7 @@ import gi
|
||||||
gi.require_version('Gdk', '3.0')
|
gi.require_version('Gdk', '3.0')
|
||||||
from gi.repository import Gdk
|
from gi.repository import Gdk
|
||||||
from gi.repository import GdkX11 # noqa F401
|
from gi.repository import GdkX11 # noqa F401
|
||||||
|
from gi.repository import Gio
|
||||||
from safeeyes import utility
|
from safeeyes import utility
|
||||||
|
|
||||||
context = None
|
context = None
|
||||||
|
@ -96,6 +97,31 @@ def is_active_window_skipped_xorg(pre_break):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def is_idle_inhibited_gnome():
|
||||||
|
"""
|
||||||
|
GNOME Shell doesn't work with wlrctl, and there is no way to enumerate
|
||||||
|
fullscreen windows, but GNOME does expose whether idle actions like
|
||||||
|
starting a screensaver are inhibited, which is a close approximation if
|
||||||
|
not a better metric.
|
||||||
|
"""
|
||||||
|
|
||||||
|
dbus_proxy = Gio.DBusProxy.new_for_bus_sync(
|
||||||
|
bus_type=Gio.BusType.SESSION,
|
||||||
|
flags=Gio.DBusProxyFlags.NONE,
|
||||||
|
info=None,
|
||||||
|
name='org.gnome.SessionManager',
|
||||||
|
object_path='/org/gnome/SessionManager',
|
||||||
|
interface_name='org.gnome.SessionManager',
|
||||||
|
cancellable=None,
|
||||||
|
)
|
||||||
|
result = dbus_proxy.get_cached_property('InhibitedActions').unpack()
|
||||||
|
|
||||||
|
# The result is a bitfield, documented here:
|
||||||
|
# https://gitlab.gnome.org/GNOME/gnome-session/-/blob/9aa419397b7f6d42bee6e66cc5c5aad12902fba0/gnome-session/org.gnome.SessionManager.xml#L155
|
||||||
|
# The fourth bit indicates that idle is inhibited.
|
||||||
|
return bool(result & 0b1000)
|
||||||
|
|
||||||
|
|
||||||
def _window_class_matches(window_class: str, classes: list) -> bool:
|
def _window_class_matches(window_class: str, classes: list) -> bool:
|
||||||
return any(map(lambda w: w in classes, window_class.split()))
|
return any(map(lambda w: w in classes, window_class.split()))
|
||||||
|
|
||||||
|
@ -149,7 +175,10 @@ def on_pre_break(break_obj):
|
||||||
Lifecycle method executes before the pre-break period.
|
Lifecycle method executes before the pre-break period.
|
||||||
"""
|
"""
|
||||||
if utility.IS_WAYLAND:
|
if utility.IS_WAYLAND:
|
||||||
skip_break = is_active_window_skipped_wayland(True)
|
if utility.DESKTOP_ENVIRONMENT == 'gnome':
|
||||||
|
skip_break = is_idle_inhibited_gnome()
|
||||||
|
else:
|
||||||
|
skip_break = is_active_window_skipped_wayland(True)
|
||||||
else:
|
else:
|
||||||
skip_break = is_active_window_skipped_xorg(True)
|
skip_break = is_active_window_skipped_xorg(True)
|
||||||
if dnd_while_on_battery and not skip_break:
|
if dnd_while_on_battery and not skip_break:
|
||||||
|
@ -162,7 +191,10 @@ def on_start_break(break_obj):
|
||||||
Lifecycle method executes just before the break.
|
Lifecycle method executes just before the break.
|
||||||
"""
|
"""
|
||||||
if utility.IS_WAYLAND:
|
if utility.IS_WAYLAND:
|
||||||
skip_break = is_active_window_skipped_wayland(True)
|
if utility.DESKTOP_ENVIRONMENT == 'gnome':
|
||||||
|
skip_break = is_idle_inhibited_gnome()
|
||||||
|
else:
|
||||||
|
skip_break = is_active_window_skipped_wayland(True)
|
||||||
else:
|
else:
|
||||||
skip_break = is_active_window_skipped_xorg(True)
|
skip_break = is_active_window_skipped_xorg(True)
|
||||||
if dnd_while_on_battery and not skip_break:
|
if dnd_while_on_battery and not skip_break:
|
||||||
|
|
Loading…
Reference in New Issue