Update controls to suppport case where the driver doesn't support SBS for the connected device
This commit is contained in:
parent
fe1e2bcd56
commit
da00d032e2
|
|
@ -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', [])
|
||||
|
||||
|
|
|
|||
|
|
@ -51,9 +51,8 @@
|
|||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="AdwActionRow">
|
||||
<object class="AdwActionRow" id="widescreen_mode_row">
|
||||
<property name="title" translatable="true">Widescreen mode</property>
|
||||
<property name="subtitle" translatable="true">Switches your glasses into side-by-side mode and doubles the width of the display.</property>
|
||||
<property name="valign">2</property>
|
||||
<child>
|
||||
<object class="GtkSwitch" id="widescreen_mode_switch">
|
||||
|
|
|
|||
|
|
@ -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
|
||||
return self.enabled_features
|
||||
if prop.name == 'device-supports-sbs':
|
||||
return self.device_supports_sbs
|
||||
Loading…
Reference in New Issue