From c2c0109398b017e0b15cd942504b855c5b93aa95 Mon Sep 17 00:00:00 2001 From: Felipe Borges Date: Tue, 4 Mar 2025 12:38:02 +0100 Subject: [PATCH] keyboard: Add "Activities Overview Shortcut" toggle Per mockups in https://issues.redhat.com/secure/attachment/13192825/13192825_super-key-setting.png Often users will want to disable the "Super_L" shortcut which triggers the overview. By design we don't want to expose a setting to replace the overview shortcut with another shortcut because the Super key is treated differently by Mutter. Unlike typical shortcuts which combine a regular key (e.g., 'x', '2', 'Esc') with optional modifiers (e.g., 'super', 'control'), the overview shortcut uses the Super key as if it were a regular key rather than a modifier. This was explained to me by fmuellner. Fixes #1873 --- panels/keyboard/cc-keyboard-shortcut-dialog.c | 35 +++++++++++++++++++ .../keyboard/cc-keyboard-shortcut-dialog.ui | 11 ++++++ 2 files changed, 46 insertions(+) diff --git a/panels/keyboard/cc-keyboard-shortcut-dialog.c b/panels/keyboard/cc-keyboard-shortcut-dialog.c index 4c72b2426..950c41dc5 100644 --- a/panels/keyboard/cc-keyboard-shortcut-dialog.c +++ b/panels/keyboard/cc-keyboard-shortcut-dialog.c @@ -40,12 +40,15 @@ #include "cc-util.h" #include "keyboard-shortcuts.h" +#define DEFAULT_ACTIVITIES_OVERVIEW_SHORTCUT "Super_L" + struct _CcKeyboardShortcutDialog { AdwWindow parent_instance; AdwNavigationView *navigation_view; AdwNavigationPage *main_page; + AdwSwitchRow *overview_shortcut_row; AdwButtonRow *reset_all_button_row; AdwDialog *reset_all_dialog; GtkSearchEntry *search_entry; @@ -357,6 +360,8 @@ on_reset_all_dialog_response_cb (CcKeyboardShortcutDialog *self) cc_keyboard_manager_reset_shortcut (self->manager, item); } } + + adw_switch_row_set_active (self->overview_shortcut_row, TRUE); } static void @@ -453,6 +458,27 @@ shortcut_section_row_activated_cb (CcKeyboardShortcutDialog *self, shortcut_custom_items_changed (self); } +static gboolean +get_overview_shortcut_setting (GValue *value, + GVariant *variant, + gpointer user_data) +{ + gboolean enabled = g_strcmp0 (g_variant_get_string (variant, NULL), DEFAULT_ACTIVITIES_OVERVIEW_SHORTCUT) == 0; + g_value_set_boolean (value, enabled); + + return TRUE; +} + +static GVariant * +set_overview_shortcut_setting (const GValue *value, + const GVariantType *variant, + gpointer user_data) +{ + gboolean enabled = g_value_get_boolean (value); + + return g_variant_new_string (enabled ? DEFAULT_ACTIVITIES_OVERVIEW_SHORTCUT : ""); +} + static void cc_keyboard_shortcut_dialog_constructed (GObject *object) { @@ -500,6 +526,7 @@ cc_keyboard_shortcut_dialog_class_init (CcKeyboardShortcutDialogClass *klass) gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutDialog, navigation_view); gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutDialog, main_page); + gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutDialog, overview_shortcut_row); gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutDialog, reset_all_button_row); gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutDialog, reset_all_dialog); gtk_widget_class_bind_template_child (widget_class, CcKeyboardShortcutDialog, search_entry); @@ -527,6 +554,7 @@ static void cc_keyboard_shortcut_dialog_init (CcKeyboardShortcutDialog *self) { GtkWindow *toplevel; + g_autoptr(GSettings) mutter_settings = g_settings_new ("org.gnome.mutter"); gtk_widget_init_template (GTK_WIDGET (self)); shortcut_dialog_visible_page_changed_cb (self); @@ -558,6 +586,13 @@ cc_keyboard_shortcut_dialog_init (CcKeyboardShortcutDialog *self) G_LIST_MODEL (self->sections), shortcut_dialog_row_new, self, NULL); + + g_settings_bind_with_mapping (mutter_settings, "overlay-key", + self->overview_shortcut_row, "active", + G_SETTINGS_BIND_DEFAULT, + get_overview_shortcut_setting, + set_overview_shortcut_setting, + NULL, NULL); } GtkWidget* diff --git a/panels/keyboard/cc-keyboard-shortcut-dialog.ui b/panels/keyboard/cc-keyboard-shortcut-dialog.ui index 35e0e45f2..152791ca9 100644 --- a/panels/keyboard/cc-keyboard-shortcut-dialog.ui +++ b/panels/keyboard/cc-keyboard-shortcut-dialog.ui @@ -67,6 +67,17 @@ + + + + + Activities _Overview Shortcut + True + Use the Super key to open the overview + + + + -- 2.49.0