Improve browser open handling

This commit is contained in:
Přemysl Eric Janouch 2021-11-23 00:37:38 +01:00
parent 1e6689aed4
commit 7ab1a6d246
Signed by: p
GPG Key ID: A0420B94F92B9493

View File

@ -616,6 +616,14 @@ fastiv_browser_draw(GtkWidget *widget, cairo_t *cr)
return TRUE;
}
static gboolean
open_entry(GtkWidget *self, const Entry *entry, gboolean new_window)
{
g_signal_emit(self, browser_signals[ITEM_ACTIVATED], 0, entry->filename,
new_window ? GTK_PLACES_OPEN_NEW_WINDOW : GTK_PLACES_OPEN_NORMAL);
return TRUE;
}
static gboolean
fastiv_browser_button_press_event(GtkWidget *widget, GdkEventButton *event)
{
@ -623,9 +631,11 @@ fastiv_browser_button_press_event(GtkWidget *widget, GdkEventButton *event)
->button_press_event(widget, event);
FastivBrowser *self = FASTIV_BROWSER(widget);
if (event->type != GDK_BUTTON_PRESS || event->state != 0)
if (event->type != GDK_BUTTON_PRESS)
return FALSE;
if (event->button == GDK_BUTTON_PRIMARY &&
guint state = event->state & gtk_accelerator_get_default_mod_mask();
if (event->button == GDK_BUTTON_PRIMARY && state == 0 &&
gtk_widget_get_focus_on_click(widget))
gtk_widget_grab_focus(widget);
@ -635,13 +645,18 @@ fastiv_browser_button_press_event(GtkWidget *widget, GdkEventButton *event)
switch (event->button) {
case GDK_BUTTON_PRIMARY:
g_signal_emit(widget, browser_signals[ITEM_ACTIVATED], 0,
entry->filename, GTK_PLACES_OPEN_NORMAL);
return TRUE;
if (state == 0)
return open_entry(widget, entry, FALSE);
if (state == GDK_CONTROL_MASK)
return open_entry(widget, entry, TRUE);
return FALSE;
case GDK_BUTTON_MIDDLE:
g_signal_emit(widget, browser_signals[ITEM_ACTIVATED], 0,
entry->filename, GTK_PLACES_OPEN_NEW_WINDOW);
return TRUE;
if (state == 0)
return open_entry(widget, entry, TRUE);
return FALSE;
case GDK_BUTTON_SECONDARY:
// TODO(p): Context menu.
return FALSE;
default:
return FALSE;
}