Track the extension enabled state from the shell
This commit is contained in:
parent
638222815e
commit
f980832087
|
|
@ -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()):
|
||||
|
|
|
|||
|
|
@ -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
|
||||
Loading…
Reference in New Issue