diff options
| author | Přemysl Eric Janouch <p@janouch.name> | 2025-11-07 22:44:22 +0100 |
|---|---|---|
| committer | Přemysl Eric Janouch <p@janouch.name> | 2025-11-07 22:45:32 +0100 |
| commit | a7ff9f220db0785e88a6013d286b5f6b92f71693 (patch) | |
| tree | f806798aade2081974fc0061b4d84ea94c213d35 | |
| parent | 2234fd008d294ebfa425e48844961c254cb4f11b (diff) | |
| download | fiv-origin/master.tar.gz fiv-origin/master.tar.xz fiv-origin/master.zip | |
Make Cmd/Ctrl/Shift+click/Enter open new windowsorigin/masterorigin/HEAD
| -rw-r--r-- | fiv-browser.c | 29 |
1 files 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 @@ -1308,6 +1308,15 @@ fiv_browser_button_press_event(GtkWidget *widget, GdkEventButton *event) } 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) { FivBrowser *self = FIV_BROWSER(widget); @@ -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); } |
