]> git.armaanb.net Git - chorizo.git/commitdiff
Scroll tabs using mouse wheel
authorPeter Hofmann <scm@uninformativ.de>
Tue, 28 Apr 2020 19:30:13 +0000 (21:30 +0200)
committerPeter Hofmann <scm@uninformativ.de>
Wed, 29 Apr 2020 15:59:15 +0000 (17:59 +0200)
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

index 28620284260b1111bcfa0112c228bf5728cae286..3c68dd3776e96f4aba7fb55761487bc94cb28262 100644 (file)
--- a/browser.c
+++ b/browser.c
@@ -14,7 +14,6 @@
 #include <JavaScriptCore/JavaScript.h>
 
 
-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)
 {