From 649a067929656183ca6d194536b5927bf84daf82 Mon Sep 17 00:00:00 2001 From: Peter Hofmann Date: Tue, 28 Apr 2020 21:30:13 +0200 Subject: Scroll tabs using mouse wheel Not ideal, because it doesn't work when the mouse hovers over empty areas. If we connect that signal to the notebook itself, it will also trigger when scrolling the web page -- if the web_view doesn't handle the scroll. The event then propagates upwards in the hierarchy and ends up in the notebook. Means we would have to wrap the web_view in a dummy evbox that catches all scroll events. Nah. --- browser.c | 56 +++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 39 insertions(+), 17 deletions(-) diff --git a/browser.c b/browser.c index 2862028..3c68dd3 100644 --- a/browser.c +++ b/browser.c @@ -14,7 +14,6 @@ #include -gboolean button_tablabel(GtkWidget *, GdkEvent *, gpointer); void client_destroy(GtkWidget *, gpointer); WebKitWebView *client_new(const gchar *, WebKitWebView *, gboolean, gboolean); @@ -43,6 +42,7 @@ void icon_location(GtkEntry *, GtkEntryIconPosition, GdkEvent *, gpointer); gboolean key_common(GtkWidget *, GdkEvent *, gpointer); gboolean key_downloadmanager(GtkWidget *, GdkEvent *, gpointer); gboolean key_location(GtkWidget *, GdkEvent *, gpointer); +gboolean key_tablabel(GtkWidget *, GdkEvent *, gpointer); gboolean key_web_view(GtkWidget *, GdkEvent *, gpointer); void mainwindow_setup(void); gboolean menu_web_view(WebKitWebView *, WebKitContextMenu *, GdkEvent *, @@ -100,21 +100,6 @@ gint tab_width_chars = 20; gchar *user_agent = NULL; -gboolean -button_tablabel(GtkWidget *widget, GdkEvent *event, gpointer data) -{ - if (event->type == GDK_BUTTON_RELEASE) - { - switch (((GdkEventButton *)event)->button) - { - case 2: - client_destroy(NULL, data); - return TRUE; - } - } - return FALSE; -} - void client_destroy(GtkWidget *widget, gpointer data) { @@ -256,7 +241,11 @@ client_new(const gchar *uri, WebKitWebView *related_wv, gboolean show, evbox = gtk_event_box_new(); gtk_container_add(GTK_CONTAINER(evbox), tabbox); g_signal_connect(G_OBJECT(evbox), "button-release-event", - G_CALLBACK(button_tablabel), c); + G_CALLBACK(key_tablabel), c); + + gtk_widget_add_events(evbox, GDK_SCROLL_MASK); + g_signal_connect(G_OBJECT(evbox), "scroll-event", + G_CALLBACK(key_tablabel), c); /* This only shows the event box and the label inside, nothing else. * Needed because the evbox/label is "internal" to the notebook and @@ -1029,6 +1018,39 @@ key_location(GtkWidget *widget, GdkEvent *event, gpointer data) return FALSE; } +gboolean +key_tablabel(GtkWidget *widget, GdkEvent *event, gpointer data) +{ + GdkScrollDirection direction; + + if (event->type == GDK_BUTTON_RELEASE) + { + switch (((GdkEventButton *)event)->button) + { + case 2: + client_destroy(NULL, data); + return TRUE; + } + } + else if (event->type == GDK_SCROLL) + { + gdk_event_get_scroll_direction(event, &direction); + switch (direction) + { + case GDK_SCROLL_UP: + gtk_notebook_prev_page(GTK_NOTEBOOK(mw.notebook)); + break; + case GDK_SCROLL_DOWN: + gtk_notebook_next_page(GTK_NOTEBOOK(mw.notebook)); + break; + default: + break; + } + return TRUE; + } + return FALSE; +} + gboolean key_web_view(GtkWidget *widget, GdkEvent *event, gpointer data) { -- cgit v1.2.3