Use shortcut widget for nicer display of shortcuts
This commit is contained in:
parent
554e0a607c
commit
4a64639fdf
|
|
@ -12,7 +12,7 @@
|
|||
</key>
|
||||
<key name="recenter-display-shortcut" type="as">
|
||||
<default>
|
||||
<![CDATA[['<Control><Super>space', 'Ctrl+Super+Space']]]>
|
||||
<![CDATA[['<Control><Super>space']]]>
|
||||
</default>
|
||||
<summary>Re-center display</summary>
|
||||
<description>
|
||||
|
|
@ -21,7 +21,7 @@
|
|||
</key>
|
||||
<key name="toggle-display-distance-shortcut" type="as">
|
||||
<default>
|
||||
<![CDATA[['<Control><Super>Return', 'Ctrl+Super+Return']]]>
|
||||
<![CDATA[['<Control><Super>Return']]]>
|
||||
</default>
|
||||
<summary>Trigger change to display distance</summary>
|
||||
<description>
|
||||
|
|
|
|||
|
|
@ -5,6 +5,5 @@
|
|||
<file preprocess="xml-stripblanks">gtk/no-device.ui</file>
|
||||
<file preprocess="xml-stripblanks">gtk/shortcut-dialog.ui</file>
|
||||
<file preprocess="xml-stripblanks">gtk/window.ui</file>
|
||||
<file preprocess="xml-stripblanks">gtk/help-overlay.ui</file>
|
||||
</gresource>
|
||||
</gresources>
|
||||
|
|
|
|||
|
|
@ -12,7 +12,9 @@ class ConnectedDevice(Gtk.Box):
|
|||
set_toggle_display_distance_start_button = Gtk.Template.Child()
|
||||
set_toggle_display_distance_end_button = Gtk.Template.Child()
|
||||
reassign_recenter_display_shortcut_button = Gtk.Template.Child()
|
||||
recenter_display_shortcut_label = Gtk.Template.Child()
|
||||
reassign_toggle_display_distance_shortcut_button = Gtk.Template.Child()
|
||||
toggle_display_distance_shortcut_label = Gtk.Template.Child()
|
||||
|
||||
def __init__(self):
|
||||
super(Gtk.Box, self).__init__()
|
||||
|
|
@ -23,8 +25,8 @@ class ConnectedDevice(Gtk.Box):
|
|||
self.settings.bind('effect-enable', self.effect_enable_switch, 'active', Gio.SettingsBindFlags.DEFAULT)
|
||||
|
||||
bind_shortcut_settings(self.get_parent(), [
|
||||
self.reassign_recenter_display_shortcut_button,
|
||||
self.reassign_toggle_display_distance_shortcut_button
|
||||
[self.reassign_recenter_display_shortcut_button, self.recenter_display_shortcut_label],
|
||||
[self.reassign_toggle_display_distance_shortcut_button, self.toggle_display_distance_shortcut_label]
|
||||
])
|
||||
|
||||
self.bind_set_distance_toggle([
|
||||
|
|
|
|||
|
|
@ -69,20 +69,33 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="AdwPreferencesGroup">
|
||||
<property name="title" translatable="true">Keyboard Shortcuts</property>
|
||||
<property name="title" translatable="true">Shortcuts</property>
|
||||
<property name="description" translatable="true">Modify keyboard shortcuts and how they work</property>
|
||||
<child>
|
||||
<object class="AdwActionRow">
|
||||
<property name="title" translatable="true">Re-center display shortcut</property>
|
||||
<property name="subtitle" translatable="true">Pin the virtual display to the current position</property>
|
||||
<property name="valign">2</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="reassign_recenter_display_shortcut_button">
|
||||
<style>
|
||||
<class name="row-button"/>
|
||||
</style>
|
||||
<property name="name">recenter-display-shortcut</property>
|
||||
<property name="valign">3</property>
|
||||
<property name="label"></property>
|
||||
<object class="GtkBox">
|
||||
<property name="spacing">30</property>
|
||||
<property name="margin-start">30</property>
|
||||
<child>
|
||||
<object class="GtkShortcutLabel" id="recenter_display_shortcut_label">
|
||||
<property name="valign">3</property>
|
||||
<property name="accelerator"></property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="reassign_recenter_display_shortcut_button">
|
||||
<style>
|
||||
<class name="row-button"/>
|
||||
</style>
|
||||
<property name="name">recenter-display-shortcut</property>
|
||||
<property name="valign">3</property>
|
||||
<property name="label" translatable="true">Change</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
|
|
@ -91,14 +104,27 @@
|
|||
<object class="AdwActionRow">
|
||||
<property name="title" translatable="true">Display distance shortcut</property>
|
||||
<property name="subtitle" translatable="true">Quickly toggle between two predefined distances</property>
|
||||
<property name="valign">2</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="reassign_toggle_display_distance_shortcut_button">
|
||||
<style>
|
||||
<class name="row-button"/>
|
||||
</style>
|
||||
<property name="name">toggle-display-distance-shortcut</property>
|
||||
<property name="valign">3</property>
|
||||
<property name="label"></property>
|
||||
<object class="GtkBox">
|
||||
<property name="spacing">30</property>
|
||||
<property name="margin-start">30</property>
|
||||
<child>
|
||||
<object class="GtkShortcutLabel" id="toggle_display_distance_shortcut_label">
|
||||
<property name="valign">3</property>
|
||||
<property name="accelerator"></property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="reassign_toggle_display_distance_shortcut_button">
|
||||
<style>
|
||||
<class name="row-button"/>
|
||||
</style>
|
||||
<property name="name">toggle-display-distance-shortcut</property>
|
||||
<property name="valign">3</property>
|
||||
<property name="label" translatable="true">Change</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
|
|
|
|||
|
|
@ -2,8 +2,7 @@
|
|||
<interface>
|
||||
<requires lib="gtk" version="4.0"/>
|
||||
<template class="BreezydesktopWindow" parent="GtkApplicationWindow">
|
||||
<property name="default-width">600</property>
|
||||
<property name="default-height">300</property>
|
||||
<property name="default-width">800</property>
|
||||
<property name="titlebar">
|
||||
<object class="GtkHeaderBar" id="header_bar">
|
||||
<property name="title-widget">
|
||||
|
|
@ -27,23 +26,9 @@
|
|||
</child>
|
||||
</object>
|
||||
</property>
|
||||
<property name="child">
|
||||
<object class="GtkGrid">
|
||||
<child>
|
||||
<object class="ConnectedDevice" id="connected_device" />
|
||||
</child>
|
||||
<child>
|
||||
<object class="NoDevice" id="no_device" />
|
||||
</child>
|
||||
</object>
|
||||
</property>
|
||||
</template>
|
||||
<menu id="primary_menu">
|
||||
<section>
|
||||
<item>
|
||||
<attribute name="label" translatable="yes">_Keyboard Shortcuts</attribute>
|
||||
<attribute name="action">win.show-help-overlay</attribute>
|
||||
</item>
|
||||
<item>
|
||||
<attribute name="label" translatable="yes">_About BreezyDesktop</attribute>
|
||||
<attribute name="action">app.about</attribute>
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ class ShortcutDialog(Gtk.Dialog):
|
|||
label = Gtk.accelerator_get_label(keyval, state)
|
||||
|
||||
# hacky way to store the label, causes warnings from the WM
|
||||
SettingsManager.get_instance().settings.set_strv(self.settings_key, [binding, label])
|
||||
SettingsManager.get_instance().settings.set_strv(self.settings_key, [binding])
|
||||
|
||||
self.close()
|
||||
else:
|
||||
|
|
@ -85,23 +85,25 @@ def is_keyval_forbidden(keyval):
|
|||
def is_accel_valid(mask, keyval):
|
||||
return Gtk.accelerator_valid(keyval, mask) or (keyval == Gdk.KEY_Tab and mask != 0)
|
||||
|
||||
def bind_shortcut_settings(window, widgets):
|
||||
for widget in widgets:
|
||||
def bind_shortcut_settings(window, widget_tuples):
|
||||
for widget_tuple in widget_tuples:
|
||||
widget, label = widget_tuple
|
||||
SettingsManager.get_instance().settings.connect('changed::' + widget.get_name(),
|
||||
lambda *args, widget=widget: reload_shortcut_widget(widget))
|
||||
lambda *args, widget=widget, label=label: reload_shortcut_widget(widget, label))
|
||||
widget.connect('clicked', lambda *args, widget=widget: on_assign_shortcut(window, widget))
|
||||
|
||||
reload_shortcut_widgets(widgets)
|
||||
reload_shortcut_widgets(widget_tuples)
|
||||
|
||||
def on_assign_shortcut(window, widget):
|
||||
dialog = ShortcutDialog(widget.get_name())
|
||||
dialog.set_transient_for(widget.get_ancestor(Gtk.Window))
|
||||
dialog.present()
|
||||
|
||||
def reload_shortcut_widget(widget):
|
||||
def reload_shortcut_widget(widget, label):
|
||||
shortcut = SettingsManager.get_instance().settings.get_strv(widget.get_name())
|
||||
widget.set_label(shortcut[1] if len(shortcut) > 1 else 'Disabled')
|
||||
label.set_accelerator(shortcut[0] if len(shortcut) > 0 else 'Disabled')
|
||||
|
||||
def reload_shortcut_widgets(widgets):
|
||||
for widget in widgets:
|
||||
reload_shortcut_widget(widget)
|
||||
def reload_shortcut_widgets(widget_tuples):
|
||||
for widget_tuple in widget_tuples:
|
||||
widget, label = widget_tuple
|
||||
reload_shortcut_widget(widget, label)
|
||||
|
|
@ -26,23 +26,20 @@ from .nodevice import NoDevice
|
|||
class BreezydesktopWindow(Gtk.ApplicationWindow):
|
||||
__gtype_name__ = 'BreezydesktopWindow'
|
||||
|
||||
connected_device = Gtk.Template.Child()
|
||||
no_device = Gtk.Template.Child()
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
self.init_template()
|
||||
|
||||
state_manager = StateManager.get_instance()
|
||||
state_manager.connect('device_update', self._handle_device_update)
|
||||
|
||||
self.connected_device = ConnectedDevice()
|
||||
self.no_device = NoDevice()
|
||||
|
||||
self._handle_device_update(state_manager, StateManager.device_name(state_manager.state))
|
||||
|
||||
def _handle_device_update(self, state_manager, connected_device_name):
|
||||
if connected_device_name:
|
||||
self.connected_device.set_visible(True)
|
||||
self.no_device.set_visible(False)
|
||||
self.set_child(self.connected_device)
|
||||
self.connected_device.set_device_name(connected_device_name)
|
||||
else:
|
||||
self.connected_device.set_visible(False)
|
||||
self.no_device.set_visible(True)
|
||||
self.set_child(self.no_device)
|
||||
Loading…
Reference in New Issue