Skip to content

Instantly share code, notes, and snippets.

@dctucker
Created August 13, 2025 19:19
Show Gist options
  • Save dctucker/f439df8fa2f396e4f4159045a4434b4f to your computer and use it in GitHub Desktop.
Save dctucker/f439df8fa2f396e4f4159045a4434b4f to your computer and use it in GitHub Desktop.
Patch for GNOME Files to use <Super> instead of <Control> for accelerators
diff --git a/src/gtk/nautilusgtkplacessidebar.c b/src/gtk/nautilusgtkplacessidebar.c
index d1649e5c7..c93d6779f 100644
--- a/src/gtk/nautilusgtkplacessidebar.c
+++ b/src/gtk/nautilusgtkplacessidebar.c
@@ -2620,7 +2620,7 @@ on_key_pressed (GtkEventControllerKey *controller,
if ((state & modifiers) == GDK_SHIFT_MASK)
open_flags = NAUTILUS_OPEN_FLAG_NEW_TAB;
- else if ((state & modifiers) == GDK_CONTROL_MASK)
+ else if ((state & modifiers) == GDK_SUPER_MASK)
open_flags = NAUTILUS_OPEN_FLAG_NEW_WINDOW;
open_row (NAUTILUS_GTK_SIDEBAR_ROW (row), open_flags);
@@ -3117,7 +3117,7 @@ on_row_released (GtkGestureClick *gesture,
{
NautilusOpenFlags open_flags = NAUTILUS_OPEN_FLAG_NORMAL;
- open_flags = (state & GDK_CONTROL_MASK) ?
+ open_flags = (state & GDK_SUPER_MASK) ?
NAUTILUS_OPEN_FLAG_NEW_WINDOW :
NAUTILUS_OPEN_FLAG_NEW_TAB;
diff --git a/src/nautilus-application.c b/src/nautilus-application.c
index 71b90253b..cc238c51f 100644
--- a/src/nautilus-application.c
+++ b/src/nautilus-application.c
@@ -811,13 +811,13 @@ nautilus_init_application_actions (NautilusApplication *app)
nautilus_application_set_accelerator (G_APPLICATION (app),
- "app.clone-window", "<Primary>n");
+ "app.clone-window", "<super>n");
nautilus_application_set_accelerator (G_APPLICATION (app),
"app.help", "F1");
nautilus_application_set_accelerator (G_APPLICATION (app),
- "app.quit", "<Primary>q");
+ "app.quit", "<super>q");
nautilus_application_set_accelerator (G_APPLICATION (app),
- "app.preferences", "<Primary>comma");
+ "app.preferences", "<super>comma");
}
static void
diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c
index 10a29a20e..4bb7f7804 100644
--- a/src/nautilus-files-view.c
+++ b/src/nautilus-files-view.c
@@ -9791,26 +9791,28 @@ nautilus_files_view_class_init (NautilusFilesViewClass *klass)
gtk_widget_class_add_binding_action (widget_class, GDK_KEY_Delete, 0, "view.delete-permanently-menu-item", NULL);
gtk_widget_class_add_binding_action (widget_class, GDK_KEY_F2, 0, "view.rename", NULL);
+ gtk_widget_class_add_binding_action (widget_class, GDK_KEY_E, GDK_SUPER_MASK, "view.rename", NULL);
gtk_widget_class_add_binding_action (widget_class, GDK_KEY_Menu, 0, "view.popup-menu", NULL);
gtk_widget_class_add_binding_action (widget_class, GDK_KEY_F10, GDK_SHIFT_MASK, "view.popup-menu", NULL);
- gtk_widget_class_add_binding_action (widget_class, GDK_KEY_o, GDK_CONTROL_MASK, "view.open-with-default-application", NULL);
+ gtk_widget_class_add_binding_action (widget_class, GDK_KEY_o, GDK_SUPER_MASK, "view.open-with-default-application", NULL);
/* This is not necessary per-se, because it's the default activation
* keybinding. But in order for it to appear in the context menu as a
* keyboard shortcut, we need to bind it to the menu item action here. */
gtk_widget_class_add_binding_action (widget_class, GDK_KEY_Return, 0, "view.open-with-default-application", NULL);
- gtk_widget_class_add_binding_action (widget_class, GDK_KEY_i, GDK_CONTROL_MASK, "view.properties", NULL);
+ gtk_widget_class_add_binding_action (widget_class, GDK_KEY_i, GDK_SUPER_MASK, "view.properties", NULL);
gtk_widget_class_add_binding_action (widget_class, GDK_KEY_Return, GDK_ALT_MASK, "view.properties", NULL);
- gtk_widget_class_add_binding_action (widget_class, GDK_KEY_a, GDK_CONTROL_MASK, "view.select-all", NULL);
- gtk_widget_class_add_binding_action (widget_class, GDK_KEY_i, GDK_CONTROL_MASK | GDK_SHIFT_MASK, "view.invert-selection", NULL);
- gtk_widget_class_add_binding_action (widget_class, GDK_KEY_m, GDK_CONTROL_MASK, "view.create-link", NULL);
- gtk_widget_class_add_binding_action (widget_class, GDK_KEY_m, GDK_CONTROL_MASK, "view.create-link-shortcut", NULL);
- gtk_widget_class_add_binding_action (widget_class, GDK_KEY_m, GDK_CONTROL_MASK | GDK_SHIFT_MASK, "view.create-link-in-place", NULL);
- gtk_widget_class_add_binding_action (widget_class, GDK_KEY_m, GDK_CONTROL_MASK | GDK_SHIFT_MASK, "view.create-link-in-place-shortcut", NULL);
- gtk_widget_class_add_binding_action (widget_class, GDK_KEY_Return, GDK_CONTROL_MASK, "view.open-item-new-tab", NULL);
+ gtk_widget_class_add_binding_action (widget_class, GDK_KEY_a, GDK_SUPER_MASK, "view.select-all", NULL);
+ gtk_widget_class_add_binding_action (widget_class, GDK_KEY_i, GDK_SUPER_MASK | GDK_SHIFT_MASK, "view.invert-selection", NULL);
+ gtk_widget_class_add_binding_action (widget_class, GDK_KEY_m, GDK_SUPER_MASK, "view.create-link", NULL);
+ gtk_widget_class_add_binding_action (widget_class, GDK_KEY_m, GDK_SUPER_MASK, "view.create-link-shortcut", NULL);
+ gtk_widget_class_add_binding_action (widget_class, GDK_KEY_m, GDK_SUPER_MASK | GDK_SHIFT_MASK, "view.create-link-in-place", NULL);
+ gtk_widget_class_add_binding_action (widget_class, GDK_KEY_m, GDK_SUPER_MASK | GDK_SHIFT_MASK, "view.create-link-in-place-shortcut", NULL);
+ gtk_widget_class_add_binding_action (widget_class, GDK_KEY_Return, GDK_SUPER_MASK, "view.open-item-new-tab", NULL);
gtk_widget_class_add_binding_action (widget_class, GDK_KEY_Return, GDK_SHIFT_MASK, "view.open-item-new-window", NULL);
- gtk_widget_class_add_binding_action (widget_class, GDK_KEY_o, GDK_CONTROL_MASK | GDK_ALT_MASK, "view.open-item-location", NULL);
- gtk_widget_class_add_binding_action (widget_class, GDK_KEY_c, GDK_CONTROL_MASK, "view.copy", NULL);
- gtk_widget_class_add_binding_action (widget_class, GDK_KEY_x, GDK_CONTROL_MASK, "view.cut", NULL);
+ gtk_widget_class_add_binding_action (widget_class, GDK_KEY_o, GDK_SUPER_MASK | GDK_ALT_MASK, "view.open-item-location", NULL);
+ gtk_widget_class_add_binding_action (widget_class, GDK_KEY_c, GDK_SUPER_MASK, "view.copy", NULL);
+ gtk_widget_class_add_binding_action (widget_class, GDK_KEY_x, GDK_SUPER_MASK, "view.cut", NULL);
+ gtk_widget_class_add_binding_action (widget_class, GDK_KEY_v, GDK_SUPER_MASK, "view.paste", NULL);
}
static void
@@ -9945,18 +9947,18 @@ nautilus_files_view_init (NautilusFilesView *view)
gtk_shortcut_controller_set_scope (priv->shortcuts, GTK_SHORTCUT_SCOPE_MANAGED);
gtk_widget_add_controller (GTK_WIDGET (view), GTK_EVENT_CONTROLLER (priv->shortcuts));
- ADD_SHORTCUT_FOR_ACTION (priv->shortcuts, "view.zoom-in", "<control>equal|<control>plus|<control>KP_Add|ZoomIn");
- ADD_SHORTCUT_FOR_ACTION (priv->shortcuts, "view.zoom-out", "<control>minus|<control>KP_Subtract|ZoomOut");
- ADD_SHORTCUT_FOR_ACTION (priv->shortcuts, "view.show-hidden-files", "<control>h");
+ ADD_SHORTCUT_FOR_ACTION (priv->shortcuts, "view.zoom-in", "<super>equal|<super>plus|<super>KP_Add|ZoomIn");
+ ADD_SHORTCUT_FOR_ACTION (priv->shortcuts, "view.zoom-out", "<super>minus|<super>KP_Subtract|ZoomOut");
+ ADD_SHORTCUT_FOR_ACTION (priv->shortcuts, "view.show-hidden-files", "<super>h");
/* Despite putting copy/cut at the widget scope instead of the global one,
* we're putting paste "managed" so that it's easy to switch between apps
* with e.g. Alt+Tab and paste directly the copied file without having to
* make sure the focus is on the files view.
*/
- ADD_SHORTCUT_FOR_ACTION (priv->shortcuts, "view.paste_accel", "<control>v");
- ADD_SHORTCUT_FOR_ACTION (priv->shortcuts, "view.new-folder", "<control><shift>n");
- ADD_SHORTCUT_FOR_ACTION (priv->shortcuts, "view.select-pattern", "<control>s");
- ADD_SHORTCUT_FOR_ACTION (priv->shortcuts, "view.zoom-standard", "<control>0|<control>KP_0");
+ ADD_SHORTCUT_FOR_ACTION (priv->shortcuts, "view.paste_accel", "<super>v");
+ ADD_SHORTCUT_FOR_ACTION (priv->shortcuts, "view.new-folder", "<super><shift>n");
+ ADD_SHORTCUT_FOR_ACTION (priv->shortcuts, "view.select-pattern", "<super>s");
+ ADD_SHORTCUT_FOR_ACTION (priv->shortcuts, "view.zoom-standard", "<super>0|<super>KP_0");
#undef ADD_SHORTCUT_FOR_ACTION
/* This one should have been a keybinding, because it should trigger only
diff --git a/src/nautilus-list-base.c b/src/nautilus-list-base.c
index ebcf78b9b..d657e0f8e 100644
--- a/src/nautilus-list-base.c
+++ b/src/nautilus-list-base.c
@@ -252,7 +252,7 @@ on_item_click_pressed (GtkGestureClick *gesture,
button = gtk_gesture_single_get_current_button (GTK_GESTURE_SINGLE (gesture));
modifiers = gtk_event_controller_get_current_event_state (GTK_EVENT_CONTROLLER (gesture));
- selection_mode = (modifiers & (GDK_CONTROL_MASK | GDK_SHIFT_MASK));
+ selection_mode = (modifiers & (GDK_SUPER_MASK | GDK_SHIFT_MASK));
/* Before anything else, store event state to be read by other handlers. */
priv->deny_background_click = TRUE;
@@ -365,7 +365,7 @@ on_view_click_pressed (GtkGestureClick *gesture,
/* Don't interfere with GtkListBase default selection handling when
* holding Ctrl and Shift. */
modifiers = gtk_event_controller_get_current_event_state (GTK_EVENT_CONTROLLER (gesture));
- selection_mode = (modifiers & (GDK_CONTROL_MASK | GDK_SHIFT_MASK));
+ selection_mode = (modifiers & (GDK_SUPER_MASK | GDK_SHIFT_MASK));
if (!selection_mode)
{
gtk_selection_model_unselect_all (GTK_SELECTION_MODEL (priv->model));
diff --git a/src/nautilus-pathbar.c b/src/nautilus-pathbar.c
index f7e9a2c72..c205afbc7 100644
--- a/src/nautilus-pathbar.c
+++ b/src/nautilus-pathbar.c
@@ -721,7 +721,7 @@ on_click_gesture_pressed (GtkGestureClick *gesture,
case GDK_BUTTON_PRIMARY:
{
- if ((state & GDK_CONTROL_MASK) != 0)
+ if ((state & GDK_SUPER_MASK) != 0)
{
g_signal_emit (button_data->path_bar, path_bar_signals[OPEN_LOCATION], 0,
button_data->path,
diff --git a/src/nautilus-query-editor.c b/src/nautilus-query-editor.c
index 5748ed35c..2d5e8c36c 100644
--- a/src/nautilus-query-editor.c
+++ b/src/nautilus-query-editor.c
@@ -920,7 +920,7 @@ nautilus_gtk_search_entry_is_keynav_event (guint keyval,
keyval == GDK_KEY_End || keyval == GDK_KEY_KP_End ||
keyval == GDK_KEY_Page_Up || keyval == GDK_KEY_KP_Page_Up ||
keyval == GDK_KEY_Page_Down || keyval == GDK_KEY_KP_Page_Down ||
- ((state & (GDK_CONTROL_MASK | GDK_ALT_MASK)) != 0))
+ ((state & (GDK_SUPER_MASK | GDK_CONTROL_MASK | GDK_ALT_MASK)) != 0))
{
return TRUE;
}
diff --git a/src/nautilus-rename-file-popover.c b/src/nautilus-rename-file-popover.c
index ec98fe1ba..330db7e9f 100644
--- a/src/nautilus-rename-file-popover.c
+++ b/src/nautilus-rename-file-popover.c
@@ -131,7 +131,7 @@ on_event_controller_key_key_pressed (GtkEventControllerKey *controller,
{
return name_entry_on_f2_pressed (widget, self);
}
- else if (keyval == GDK_KEY_z && (state & GDK_CONTROL_MASK) != 0)
+ else if (keyval == GDK_KEY_z && (state & GDK_SUPER_MASK) != 0)
{
return name_entry_on_undo (widget, self);
}
diff --git a/src/nautilus-toolbar.c b/src/nautilus-toolbar.c
index 2f63ca804..7e4e37ba8 100644
--- a/src/nautilus-toolbar.c
+++ b/src/nautilus-toolbar.c
@@ -270,7 +270,7 @@ nautilus_toolbar_init (NautilusToolbar *self)
gtk_shortcut_new (gtk_shortcut_trigger_parse_string ((trigger)), \
gtk_named_action_new ((action)))))
- ADD_SHORTCUT_FOR_ACTION (shortcuts, "toolbar.edit-location", "<control>l|Go|OpenURL");
+ ADD_SHORTCUT_FOR_ACTION (shortcuts, "toolbar.edit-location", "<super>l|Go|OpenURL");
ADD_SHORTCUT_FOR_ACTION (shortcuts, "toolbar.prompt-root-location", "slash|KP_Divide");
/* Support keyboard layouts which have a dead tilde key but not a tilde key. */
ADD_SHORTCUT_FOR_ACTION (shortcuts, "toolbar.prompt-home-location", "asciitilde|dead_tilde");
diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c
index 27fbd13fc..866fc9d57 100644
--- a/src/nautilus-window-slot.c
+++ b/src/nautilus-window-slot.c
@@ -600,7 +600,8 @@ nautilus_window_slot_handle_event (NautilusWindowSlot *self,
"search-visible");
if (keyval == GDK_KEY_Escape ||
- keyval == GDK_KEY_BackSpace)
+ keyval == GDK_KEY_BackSpace ||
+ keyval == GDK_KEY_minus)
{
g_autoptr (GVariant) action_state = NULL;
@@ -1284,8 +1285,8 @@ set_back_forward_accelerators (NautilusWindowSlot *self)
gtk_shortcut_new (gtk_shortcut_trigger_parse_string ((trigger)), \
gtk_named_action_new ((action)))))
- ADD_SHORTCUT_FOR_ACTION (self->shortcuts, "slot.back", ltr ? "<alt>Left|Back" : "<alt>Right|Back");
- ADD_SHORTCUT_FOR_ACTION (self->shortcuts, "slot.forward", ltr ? "<alt>Right|Forward" : "<alt>Left|Forward");
+ ADD_SHORTCUT_FOR_ACTION (self->shortcuts, "slot.back", ltr ? "<super>bracketleft|<super>Left|<alt>Left|Back" : "<alt>Right|<super>Right|Back");
+ ADD_SHORTCUT_FOR_ACTION (self->shortcuts, "slot.forward", ltr ? "<super>bracketright|<super>Right|<alt>Right|Forward" : "<alt>Left|<super>Left|Forward");
#undef ADD_SHORTCUT_FOR_ACTION
}
@@ -1373,24 +1374,24 @@ nautilus_window_slot_init (NautilusWindowSlot *self)
__VA_ARGS__)))
ADD_SHORTCUT_FOR_ACTION_WITH_ARGS (self->shortcuts,
- "slot.files-view-mode", "<control>1",
+ "slot.files-view-mode", "<super>1",
"u", NAUTILUS_VIEW_LIST_ID);
ADD_SHORTCUT_FOR_ACTION_WITH_ARGS (self->shortcuts,
- "slot.files-view-mode", "<control>2",
+ "slot.files-view-mode", "<super>2",
"u", NAUTILUS_VIEW_GRID_ID);
ADD_SHORTCUT_FOR_ACTION_WITH_ARGS (self->shortcuts,
- "slot.open-location", "<alt>Home|HomePage|Start",
+ "slot.open-location", "<super>Home|HomePage|Start",
"s", home_uri);
ADD_SHORTCUT_FOR_ACTION_WITH_ARGS (self->shortcuts,
"slot.open-location", "Favorites",
"s", SCHEME_STARRED ":///");
- ADD_SHORTCUT_FOR_ACTION (self->shortcuts, "slot.focus-search", "<control>f|Search");
- ADD_SHORTCUT_FOR_ACTION (self->shortcuts, "slot.search-global", "<control><shift>f");
- ADD_SHORTCUT_FOR_ACTION (self->shortcuts, "slot.reload", "F5|<ctrl>r|Refresh|Reload");
- ADD_SHORTCUT_FOR_ACTION (self->shortcuts, "slot.stop", "Stop");
- ADD_SHORTCUT_FOR_ACTION (self->shortcuts, "slot.up", "<alt>Up");
- ADD_SHORTCUT_FOR_ACTION (self->shortcuts, "slot.down", "<alt>Down");
- ADD_SHORTCUT_FOR_ACTION (self->shortcuts, "slot.bookmark-current-directory", "<control>d|AddFavorite");
+ ADD_SHORTCUT_FOR_ACTION (self->shortcuts, "slot.focus-search", "<super>f|Search");
+ ADD_SHORTCUT_FOR_ACTION (self->shortcuts, "slot.search-global", "<super><shift>f");
+ ADD_SHORTCUT_FOR_ACTION (self->shortcuts, "slot.reload", "F5|<super>r|Refresh|Reload");
+ ADD_SHORTCUT_FOR_ACTION (self->shortcuts, "slot.stop", "Stop|<super>period");
+ ADD_SHORTCUT_FOR_ACTION (self->shortcuts, "slot.up", "<super>Up|minus");
+ ADD_SHORTCUT_FOR_ACTION (self->shortcuts, "slot.down", "<super>Down");
+ ADD_SHORTCUT_FOR_ACTION (self->shortcuts, "slot.bookmark-current-directory", "<super>d|AddFavorite");
#undef ADD_SHORTCUT_FOR_ACTION
#undef ADD_SHORTCUT_FOR_ACTION_WITH_ARGS
diff --git a/src/nautilus-window.c b/src/nautilus-window.c
index 5797763ce..e6146f35e 100644
--- a/src/nautilus-window.c
+++ b/src/nautilus-window.c
@@ -1123,16 +1123,16 @@ nautilus_window_initialize_actions (NautilusWindow *window)
#define ACCELS(...) ((const char *[]) { __VA_ARGS__, NULL })
app = g_application_get_default ();
- nautilus_application_set_accelerator (app, "win.new-tab", "<control>t");
- nautilus_application_set_accelerator (app, "win.close-current-view", "<control>w");
+ nautilus_application_set_accelerator (app, "win.new-tab", "<super>t");
+ nautilus_application_set_accelerator (app, "win.close-current-view", "<super>w");
- nautilus_application_set_accelerator (app, "win.undo", "<control>z");
- nautilus_application_set_accelerator (app, "win.redo", "<shift><control>z");
+ nautilus_application_set_accelerator (app, "win.undo", "<super>z");
+ nautilus_application_set_accelerator (app, "win.redo", "<shift><super>z");
/* Only accessible by shorcuts */
- nautilus_application_set_accelerator (app, "win.tab-move-left", "<shift><control>Page_Up");
- nautilus_application_set_accelerator (app, "win.tab-move-right", "<shift><control>Page_Down");
+ nautilus_application_set_accelerator (app, "win.tab-move-left", "<control>Page_Up");
+ nautilus_application_set_accelerator (app, "win.tab-move-right", "<control>Page_Down");
nautilus_application_set_accelerator (app, "win.current-location-menu", "F10");
- nautilus_application_set_accelerator (app, "win.restore-tab", "<shift><control>t");
+ nautilus_application_set_accelerator (app, "win.restore-tab", "<shift><super>t");
nautilus_application_set_accelerator (app, "win.toggle-sidebar", "F9");
/* Alt+N for the first 9 tabs */
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment