aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPřemysl Eric Janouch <p@janouch.name>2021-11-20 12:45:05 +0100
committerPřemysl Eric Janouch <p@janouch.name>2021-11-20 12:45:33 +0100
commit75994cd85aa6d207d8867f03ec3759de0b435b23 (patch)
treecd2499833e81f034e46070848359620a9bdce18b
parent3e9a388537642592736b004a8acc9d826885d922 (diff)
downloadfiv-75994cd85aa6d207d8867f03ec3759de0b435b23.tar.gz
fiv-75994cd85aa6d207d8867f03ec3759de0b435b23.tar.xz
fiv-75994cd85aa6d207d8867f03ec3759de0b435b23.zip
Make a middle click open items in a new instance
-rw-r--r--fastiv-browser.c23
-rw-r--r--fastiv.c17
2 files changed, 26 insertions, 14 deletions
diff --git a/fastiv-browser.c b/fastiv-browser.c
index 74499c3..95119dc 100644
--- a/fastiv-browser.c
+++ b/fastiv-browser.c
@@ -413,16 +413,25 @@ static gboolean
fastiv_browser_button_press_event(GtkWidget *widget, GdkEventButton *event)
{
FastivBrowser *self = FASTIV_BROWSER(widget);
- if (event->type != GDK_BUTTON_PRESS || event->button != 1 ||
- event->state != 0)
+ if (event->type != GDK_BUTTON_PRESS || event->state != 0)
return FALSE;
const Entry *entry = entry_at(self, event->x, event->y);
if (!entry)
return FALSE;
- g_signal_emit(widget, browser_signals[ITEM_ACTIVATED], 0, entry->filename);
- return TRUE;
+ switch (event->button) {
+ case 1:
+ g_signal_emit(widget, browser_signals[ITEM_ACTIVATED], 0,
+ entry->filename, GTK_PLACES_OPEN_NORMAL);
+ return TRUE;
+ case 2:
+ g_signal_emit(widget, browser_signals[ITEM_ACTIVATED], 0,
+ entry->filename, GTK_PLACES_OPEN_NEW_WINDOW);
+ return TRUE;
+ default:
+ return FALSE;
+ }
}
gboolean
@@ -516,9 +525,9 @@ fastiv_browser_class_init(FastivBrowserClass *klass)
widget_class->motion_notify_event = fastiv_browser_motion_notify_event;
widget_class->style_updated = fastiv_browser_style_updated;
- browser_signals[ITEM_ACTIVATED] =
- g_signal_new("item-activated", G_TYPE_FROM_CLASS(klass), 0, 0,
- NULL, NULL, NULL, G_TYPE_NONE, 1, G_TYPE_STRING);
+ browser_signals[ITEM_ACTIVATED] = g_signal_new("item-activated",
+ G_TYPE_FROM_CLASS(klass), 0, 0, NULL, NULL, NULL,
+ G_TYPE_NONE, 2, G_TYPE_STRING, GTK_TYPE_PLACES_OPEN_FLAGS);
// TODO(p): Later override "screen_changed", recreate Pango layouts there,
// if we get to have any, or otherwise reflect DPI changes.
diff --git a/fastiv.c b/fastiv.c
index a8206ff..f37e9f8 100644
--- a/fastiv.c
+++ b/fastiv.c
@@ -266,13 +266,6 @@ on_next(void)
}
static void
-on_item_activated(G_GNUC_UNUSED FastivBrowser *browser, const char *path,
- G_GNUC_UNUSED gpointer data)
-{
- open(path);
-}
-
-static void
spawn_path(const char *path)
{
char *argv[] = {PROJECT_NAME, (char *) path, NULL};
@@ -282,6 +275,16 @@ spawn_path(const char *path)
g_clear_error(&error);
}
+static void
+on_item_activated(G_GNUC_UNUSED FastivBrowser *browser, const char *path,
+ GtkPlacesOpenFlags flags, G_GNUC_UNUSED gpointer data)
+{
+ if (flags == GTK_PLACES_OPEN_NEW_WINDOW)
+ spawn_path(path);
+ else
+ open(path);
+}
+
static gboolean
open_any_path(const char *path)
{