From da00d032e26bcb32a56ec7593574d11d470694f8 Mon Sep 17 00:00:00 2001 From: wheaney <42350981+wheaney@users.noreply.github.com> Date: Thu, 1 Aug 2024 10:29:18 -0700 Subject: [PATCH] Update controls to suppport case where the driver doesn't support SBS for the connected device --- ui/src/connecteddevice.py | 24 ++++++++++++++++-------- ui/src/gtk/connected-device.ui | 3 +-- ui/src/statemanager.py | 8 +++++++- 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/ui/src/connecteddevice.py b/ui/src/connecteddevice.py index 133d2c2..46fb773 100644 --- a/ui/src/connecteddevice.py +++ b/ui/src/connecteddevice.py @@ -5,6 +5,9 @@ from .settingsmanager import SettingsManager from .shortcutdialog import bind_shortcut_settings from .statemanager import StateManager from .xrdriveripc import XRDriverIPC +import gettext + +_ = gettext.gettext @Gtk.Template(resource_path='/com/xronlinux/BreezyDesktop/gtk/connected-device.ui') class ConnectedDevice(Gtk.Box): @@ -20,6 +23,7 @@ class ConnectedDevice(Gtk.Box): follow_threshold_adjustment = Gtk.Template.Child() follow_mode_switch = Gtk.Template.Child() widescreen_mode_switch = Gtk.Template.Child() + widescreen_mode_row = Gtk.Template.Child() curved_display_switch = Gtk.Template.Child() set_toggle_display_distance_start_button = Gtk.Template.Child() set_toggle_display_distance_end_button = Gtk.Template.Child() @@ -45,20 +49,15 @@ class ConnectedDevice(Gtk.Box): self.display_size_scale, self.follow_mode_switch, self.follow_threshold_scale, - self.widescreen_mode_switch, self.curved_display_switch, self.set_toggle_display_distance_start_button, self.set_toggle_display_distance_end_button, - self.reassign_recenter_display_shortcut_button, - self.reassign_toggle_display_distance_shortcut_button, - self.reassign_toggle_follow_shortcut_button, - self.headset_as_primary_switch, - self.use_optimal_monitor_config_switch, - self.use_highest_refresh_rate_switch, - self.fast_sbs_mode_switch, self.movement_look_ahead_scale ] + self.widescreen_mode_subtitle = _("Switches your glasses into side-by-side mode and doubles the width of the display.") + self.widescreen_mode_not_supported_subtitle = _("This feature is not currently supported for your device.") + self.settings = SettingsManager.get_instance().settings self.ipc = XRDriverIPC.get_instance() self.extensions_manager = ExtensionsManager.get_instance() @@ -88,6 +87,7 @@ class ConnectedDevice(Gtk.Box): self.state_manager = StateManager.get_instance() self.state_manager.bind_property('follow-mode', self.follow_mode_switch, 'active', GObject.BindingFlags.DEFAULT) self.state_manager.connect('notify::enabled-features-list', self._handle_enabled_features) + self.state_manager.connect('notify::device-supports-sbs', self._handle_device_supports_sbs) self.follow_mode_switch.set_active(self.state_manager.follow_mode) self.follow_mode_switch.connect('notify::active', self._refresh_follow_mode) @@ -98,6 +98,7 @@ class ConnectedDevice(Gtk.Box): self.use_optimal_monitor_config_switch.connect('notify::active', self._refresh_use_optimal_monitor_config) self._handle_enabled_features(self.state_manager, None) + self._handle_device_supports_sbs(self.state_manager, None) self._refresh_inputs_for_enabled_state(self.effect_enable_switch, None) self._refresh_use_optimal_monitor_config(self.use_optimal_monitor_config_switch, None) self.extensions_manager.bind_property('breezy-enabled', self.effect_enable_switch, 'active', GObject.BindingFlags.BIDIRECTIONAL) @@ -111,6 +112,13 @@ class ConnectedDevice(Gtk.Box): self.effect_enable_switch.set_active(False) self.effect_enable_switch.set_sensitive(breezy_features_granted) + def _handle_device_supports_sbs(self, state_manager, val): + if not state_manager.get_property('device-supports-sbs'): + self.settings.set_boolean('widescreen-mode', False) + self.widescreen_mode_switch.set_sensitive(state_manager.get_property('device-supports-sbs')) + subtitle = self.widescreen_mode_subtitle if state_manager.get_property('device-supports-sbs') else self.widescreen_mode_not_supported_subtitle + self.widescreen_mode_row.set_subtitle(subtitle) + def _is_config_enabled(self, config): return config.get('disabled') == False and 'breezy_desktop' in config.get('external_mode', []) diff --git a/ui/src/gtk/connected-device.ui b/ui/src/gtk/connected-device.ui index b5953c3..bb0a279 100644 --- a/ui/src/gtk/connected-device.ui +++ b/ui/src/gtk/connected-device.ui @@ -51,9 +51,8 @@ - + Widescreen mode - Switches your glasses into side-by-side mode and doubles the width of the display. 2 diff --git a/ui/src/statemanager.py b/ui/src/statemanager.py index 28ac4bd..5db03fb 100644 --- a/ui/src/statemanager.py +++ b/ui/src/statemanager.py @@ -27,6 +27,7 @@ class StateManager(GObject.GObject): 'license-action-needed': (bool, 'License Action Needed', 'Whether the license needs attention', False, GObject.ParamFlags.READWRITE), 'license-present': (bool, 'License Present', 'Whether a license is present', False, GObject.ParamFlags.READWRITE), 'enabled-features-list': (object, 'Enabled Features List', 'A list of the enabled features', GObject.ParamFlags.READWRITE), + 'device-supports-sbs': (bool, 'Device Supports SBS', 'Whether the connected device supports SBS', False, GObject.ParamFlags.READWRITE), } _instance = None @@ -99,6 +100,7 @@ class StateManager(GObject.GObject): self.set_property('license-present', False) self.set_property('follow-mode', self.state.get('breezy_desktop_smooth_follow_enabled', False)) + self.set_property('device-supports-sbs', self.state.get('sbs_mode_supported', False)) self.set_property('widescreen-mode', self.state.get('sbs_mode_enabled', False)) if self.running: threading.Timer(1.0, self._refresh_state).start() @@ -116,6 +118,8 @@ class StateManager(GObject.GObject): self.license_present = value if prop.name == 'enabled-features-list': self.enabled_features = value + if prop.name == 'device-supports-sbs': + self.device_supports_sbs = value def do_get_property(self, prop): if prop.name == 'driver-running': @@ -129,4 +133,6 @@ class StateManager(GObject.GObject): if prop.name == 'license-present': return self.license_present if prop.name == 'enabled-features-list': - return self.enabled_features \ No newline at end of file + return self.enabled_features + if prop.name == 'device-supports-sbs': + return self.device_supports_sbs \ No newline at end of file