summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hofmann <scm@uninformativ.de>2020-04-28 21:30:13 +0200
committerPeter Hofmann <scm@uninformativ.de>2020-04-29 17:59:15 +0200
commit649a067929656183ca6d194536b5927bf84daf82 (patch)
tree20b22e759c842d5d4cd797191cf6ae93db947344
parenta5c296a74c83a23331009e55f323e89f679166c3 (diff)
downloadlariza-649a067929656183ca6d194536b5927bf84daf82.tar.gz
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.
-rw-r--r--browser.c56
1 files 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 <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
@@ -1030,6 +1019,39 @@ key_location(GtkWidget *widget, GdkEvent *event, gpointer data)
}
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)
{
struct Client *c = (struct Client *)data;