From 25c21e5fefc554c1941aa1a99b5b7a6c6ca67589 Mon Sep 17 00:00:00 2001
From: Vincent Sanders <vince@kyllikki.org>
Date: Sat, 2 Jan 2021 09:49:25 +0000
Subject: add back/forward mouse button processing to GTK frontend

---
 frontends/gtk/corewindow.c |  1 +
 frontends/gtk/window.c     | 17 +++++++++++++++--
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/frontends/gtk/corewindow.c b/frontends/gtk/corewindow.c
index b3568c602..baa4cf155 100644
--- a/frontends/gtk/corewindow.c
+++ b/frontends/gtk/corewindow.c
@@ -87,6 +87,7 @@ static browser_mouse_state nsgtk_cw_gdkbutton_to_nsstate(GdkEventButton *event)
 	}
 
 	if (event->state & GDK_MOD1_MASK) {
+		/* usually alt */
 		ms |= BROWSER_MOUSE_MOD_3;
 	}
 
diff --git a/frontends/gtk/window.c b/frontends/gtk/window.c
index f0a53a66f..f5c87ef87 100644
--- a/frontends/gtk/window.c
+++ b/frontends/gtk/window.c
@@ -391,12 +391,25 @@ nsgtk_window_button_release_event(GtkWidget *widget,
 	bool shift = event->state & GDK_SHIFT_MASK;
 	bool ctrl = event->state & GDK_CONTROL_MASK;
 
+	switch (event->button) {
+	case 8:
+		nsgtk_toolbar_item_activate(g->toolbar, BACK_BUTTON);
+		break;
+	case 9:
+		nsgtk_toolbar_item_activate(g->toolbar, FORWARD_BUTTON);
+		break;
+	default:
+		NSLOG(netsurf, DEBUG, "event button %d", event->button);
+		break;
+	}
+
 	/* If the mouse state is PRESS then we are waiting for a release to emit
 	 * a click event, otherwise just reset the state to nothing */
-	if (g->mouse.state & BROWSER_MOUSE_PRESS_1)
+	if (g->mouse.state & BROWSER_MOUSE_PRESS_1) {
 		g->mouse.state ^= (BROWSER_MOUSE_PRESS_1 | BROWSER_MOUSE_CLICK_1);
-	else if (g->mouse.state & BROWSER_MOUSE_PRESS_2)
+	} else if (g->mouse.state & BROWSER_MOUSE_PRESS_2) {
 		g->mouse.state ^= (BROWSER_MOUSE_PRESS_2 | BROWSER_MOUSE_CLICK_2);
+	}
 
 	/* Handle modifiers being removed */
 	if (g->mouse.state & BROWSER_MOUSE_MOD_1 && !shift)
-- 
cgit v1.2.3

