Track the extension enabled state from the shell

This commit is contained in:
wheaney 2024-05-11 22:43:31 -07:00
parent 638222815e
commit f980832087
2 changed files with 30 additions and 19 deletions

View File

@ -28,7 +28,6 @@ class ConnectedDevice(Gtk.Box):
self.settings = SettingsManager.get_instance().settings
self.ipc = XRDriverIPC.get_instance()
self.effect_enable_switch.connect('notify::active', self._change_extension_enabled)
self.settings.bind('display-distance', self.display_distance_scale, 'value', Gio.SettingsBindFlags.DEFAULT)
bind_shortcut_settings(self.get_parent(), [
@ -47,12 +46,9 @@ class ConnectedDevice(Gtk.Box):
self.follow_mode_switch.set_active(self.state_manager.follow_mode)
self.follow_mode_switch.connect('notify::active', self._request_follow_mode)
def _change_extension_enabled(self, switch, param):
if (switch.get_active()):
ExtensionsManager.get_instance().enable()
else:
ExtensionsManager.get_instance().disable()
self.effect_enable_switch.set_active(ExtensionsManager.get_instance().is_enabled())
ExtensionsManager.get_instance().bind_property('breezy-enabled', self.effect_enable_switch, 'active', GObject.BindingFlags.BIDIRECTIONAL)
def _request_follow_mode(self, switch, param):
if (self.state_manager.follow_mode == switch.get_active()):

View File

@ -1,9 +1,14 @@
import pydbus
from gi.repository import GObject
BREEZY_DESKTOP_UUID = "breezydesktop@xronlinux.com"
EXTENSION_STATE_ENABLED = 1
class ExtensionsManager:
class ExtensionsManager(GObject.GObject):
__gproperties__ = {
'breezy-enabled': (bool, 'Breezy Enabled', 'Whether the Breezy Desktop GNOME extension is enabled', False, GObject.ParamFlags.READWRITE)
}
_instance = None
@staticmethod
@ -13,21 +18,18 @@ class ExtensionsManager:
return ExtensionsManager._instance
def __init__(self):
GObject.GObject.__init__(self)
self.bus = pydbus.SessionBus()
self.gnome_shell_extensions = self.bus.get("org.gnome.Shell.Extensions")
self.enabled_state_change_handler = None
self.gnome_shell_extensions.ExtensionStateChanged.connect(self._handle_extension_state_change)
def on_enabled_state_change(self, enabled_state_change_handler):
self.enabled_state_change_handler = enabled_state_change_handler
self.gnome_shell_extensions.onExtensionStateChanged = self._handle_extension_state_change
self.remote_extension_state = None
def _handle_extension_state_change(self, extension_uuid, state):
print(f"Extension {extension_uuid} state changed to {state}")
if extension_uuid == BREEZY_DESKTOP_UUID and self.enabled_state_change_handler is not None:
for key, value in state:
if key == "state":
self.enabled_state_change_handler(value == EXTENSION_STATE_ENABLED)
break
if extension_uuid == BREEZY_DESKTOP_UUID:
self.remote_extension_state = state.get('state') == EXTENSION_STATE_ENABLED
self.set_property('breezy-enabled', self.remote_extension_state)
def is_installed(self):
return self._is_installed(BREEZY_DESKTOP_UUID)
@ -38,8 +40,10 @@ class ExtensionsManager:
def disable(self):
self._disable_extension(BREEZY_DESKTOP_UUID)
def is_enabled(self):
return self._is_enabled(BREEZY_DESKTOP_UUID)
def _is_installed(self, extension_uuid):
# type a{sa{sv}}
extensions_result = self.gnome_shell_extensions.ListExtensions()
for extension in extensions_result:
if extension == extension_uuid:
@ -52,3 +56,14 @@ class ExtensionsManager:
def _disable_extension(self, extension_uuid):
self.gnome_shell_extensions.DisableExtension(extension_uuid)
def _is_enabled(self, extension_uuid):
return self.gnome_shell_extensions.GetExtensionInfo(extension_uuid).get('state') == EXTENSION_STATE_ENABLED
def do_set_property(self, prop, value):
if prop.name == 'breezy-enabled' and value != self.remote_extension_state:
self.enable() if value == True else self.disable()
def do_get_property(self, prop):
if prop.name == 'breezy-enabled':
return self.remote_extension_state