aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPřemysl Eric Janouch <p@janouch.name>2025-11-07 22:44:22 +0100
committerPřemysl Eric Janouch <p@janouch.name>2025-11-07 22:45:32 +0100
commita7ff9f220db0785e88a6013d286b5f6b92f71693 (patch)
treef806798aade2081974fc0061b4d84ea94c213d35
parent2234fd008d294ebfa425e48844961c254cb4f11b (diff)
downloadfiv-a7ff9f220db0785e88a6013d286b5f6b92f71693.tar.gz
fiv-a7ff9f220db0785e88a6013d286b5f6b92f71693.tar.xz
fiv-a7ff9f220db0785e88a6013d286b5f6b92f71693.zip
Make Cmd/Ctrl/Shift+click/Enter open new windowsorigin/masterorigin/HEAD
-rw-r--r--fiv-browser.c29
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);
}