From a7ff9f220db0785e88a6013d286b5f6b92f71693 Mon Sep 17 00:00:00 2001 From: Přemysl Eric Janouch Date: Fri, 7 Nov 2025 22:44:22 +0100 Subject: Make Cmd/Ctrl/Shift+click/Enter open new windows --- fiv-browser.c | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/fiv-browser.c b/fiv-browser.c index 89a94b6..e1c9dfe 100644 --- a/fiv-browser.c +++ b/fiv-browser.c @@ -1307,6 +1307,15 @@ fiv_browser_button_press_event(GtkWidget *widget, GdkEventButton *event) return GDK_EVENT_PROPAGATE; } +static gboolean +modifier_state_opens_new_window(GtkWidget *widget, guint state) +{ + GdkModifierType primary = gdk_keymap_get_modifier_mask( + gdk_keymap_get_for_display(gtk_widget_get_display(widget)), + GDK_MODIFIER_INTENT_PRIMARY_ACCELERATOR); + return state == primary || state == GDK_SHIFT_MASK; +} + static gboolean fiv_browser_button_release_event(GtkWidget *widget, GdkEventButton *event) { @@ -1323,15 +1332,13 @@ fiv_browser_button_release_event(GtkWidget *widget, GdkEventButton *event) if (!entry || entry != entry_at(self, event->x, event->y)) return GDK_EVENT_PROPAGATE; - GdkModifierType primary = gdk_keymap_get_modifier_mask( - gdk_keymap_get_for_display(gtk_widget_get_display(widget)), - GDK_MODIFIER_INTENT_PRIMARY_ACCELERATOR); guint state = event->state & gtk_accelerator_get_default_mod_mask(); if ((event->button == GDK_BUTTON_PRIMARY && state == 0)) return open_entry(widget, entry, FALSE); - if ((event->button == GDK_BUTTON_PRIMARY && state == primary) || - (event->button == GDK_BUTTON_MIDDLE && state == 0)) + if ((event->button == GDK_BUTTON_MIDDLE && state == 0) || + (event->button == GDK_BUTTON_PRIMARY && + modifier_state_opens_new_window(widget, state))) return open_entry(widget, entry, TRUE); return GDK_EVENT_PROPAGATE; } @@ -1582,7 +1589,8 @@ static gboolean fiv_browser_key_press_event(GtkWidget *widget, GdkEventKey *event) { FivBrowser *self = FIV_BROWSER(widget); - switch ((event->state & gtk_accelerator_get_default_mod_mask())) { + guint state = event->state & gtk_accelerator_get_default_mod_mask(); + switch (state) { case 0: switch (event->keyval) { case GDK_KEY_Delete: @@ -1639,6 +1647,15 @@ fiv_browser_key_press_event(GtkWidget *widget, GdkEventKey *event) } } + if (modifier_state_opens_new_window(widget, state)) { + switch (event->keyval) { + case GDK_KEY_Return: + if (self->selected) + return open_entry(widget, self->selected, TRUE); + return GDK_EVENT_STOP; + } + } + return GTK_WIDGET_CLASS(fiv_browser_parent_class) ->key_press_event(widget, event); } -- cgit v1.2.3-70-g09d2