From 239e019a5c885ed5e8171b8476b3ec805aa23a2b Mon Sep 17 00:00:00 2001
From: David Maciejak <david.maciejak@gmail.com>
Date: Wed, 27 Aug 2014 16:19:45 +0700
Subject: [PATCH 2/2] WPrefs: add new mouse buttons configuration support

This patch is updating the mouse button configuration panel
to be able to set action to the new mouse buttons supported.
---
 WPrefs.app/MouseSettings.c | 164 ++++++++++++++++++++++++++++++++++-----------
 1 file changed, 124 insertions(+), 40 deletions(-)

diff --git a/WPrefs.app/MouseSettings.c b/WPrefs.app/MouseSettings.c
index 741bf97..749feee 100644
--- a/WPrefs.app/MouseSettings.c
+++ b/WPrefs.app/MouseSettings.c
@@ -60,11 +60,17 @@ typedef struct _Panel {
 	WMLabel *button1L;
 	WMLabel *button2L;
 	WMLabel *button3L;
+	WMLabel *button8L;
+	WMLabel *button9L;
 	WMLabel *wheelL;
+	WMLabel *wheelTiltL;
 	WMPopUpButton *button1P;
 	WMPopUpButton *button2P;
 	WMPopUpButton *button3P;
+	WMPopUpButton *button8P;
+	WMPopUpButton *button9P;
 	WMPopUpButton *wheelP;
+	WMPopUpButton *wheelTiltP;
 
 	WMButton *disaB;
 
@@ -259,6 +265,30 @@ static void showData(_Panel * panel)
 	}
 	WMSetPopUpButtonSelectedItem(panel->button3P, c);
 
+	str = GetStringForKey("MouseBackwardButtonAction");
+	i = getButtonAction(str);
+	if (i < 0) {
+		b = 0;
+		if (i == -1) {
+			wwarning(_("bad value %s for option %s"), str, "MouseBackwardButtonAction");
+		}
+	} else {
+		b = i;
+	}
+	WMSetPopUpButtonSelectedItem(panel->button8P, b);
+
+	str = GetStringForKey("MouseForwardButtonAction");
+	i = getButtonAction(str);
+	if (i < 0) {
+		b = 0;
+		if (i == -1) {
+			wwarning(_("bad value %s for option %s"), str, "MouseForwardButtonAction");
+		}
+	} else {
+		b = i;
+	}
+	WMSetPopUpButtonSelectedItem(panel->button9P, b);
+
 	str = GetStringForKey("MouseWheelAction");
 	i = getWheelAction(str);
 	if (i < 0) {
@@ -271,6 +301,18 @@ static void showData(_Panel * panel)
 	}
 	WMSetPopUpButtonSelectedItem(panel->wheelP, w);
 
+	str = GetStringForKey("MouseWheelTiltAction");
+	i = getWheelAction(str);
+	if (i < 0) {
+		w = 0;
+		if (i == -1) {
+			wwarning(_("bad value %s for option %s"), str, "MouseWheelTiltAction");
+		}
+	} else {
+		w = i;
+	}
+	WMSetPopUpButtonSelectedItem(panel->wheelTiltP, w);
+
 	WMSetButtonSelected(panel->disaB, GetBoolForKey("DisableWSMouseActions"));
 
 	 /**/ getMouseParameters(dpy, &accel, &a);
@@ -436,7 +478,7 @@ static void createPanel(Panel * p)
 
     /**************** Mouse Speed ****************/
 	panel->speedF = WMCreateFrame(panel->box);
-	WMResizeWidget(panel->speedF, 225, 100);
+	WMResizeWidget(panel->speedF, 225, 90);
 	WMMoveWidget(panel->speedF, 15, 5);
 	WMSetFrameTitle(panel->speedF, _("Mouse Speed"));
 
@@ -466,33 +508,50 @@ static void createPanel(Panel * p)
 
 	panel->acceL = WMCreateLabel(panel->speedF);
 	WMResizeWidget(panel->acceL, 50, 16);
-	WMMoveWidget(panel->acceL, 10, 67);
+	WMMoveWidget(panel->acceL, 10, 65);
 	WMSetLabelTextAlignment(panel->acceL, WARight);
 	WMSetLabelText(panel->acceL, _("Accel.:"));
 
 	panel->acceT = WMCreateTextField(panel->speedF);
 	WMResizeWidget(panel->acceT, 40, 20);
-	WMMoveWidget(panel->acceT, 60, 65);
+	WMMoveWidget(panel->acceT, 60, 63);
 	WMAddNotificationObserver(returnPressed, panel, WMTextDidEndEditingNotification, panel->acceT);
 
 	panel->threL = WMCreateLabel(panel->speedF);
 	WMResizeWidget(panel->threL, 80, 16);
-	WMMoveWidget(panel->threL, 100, 67);
+	WMMoveWidget(panel->threL, 100, 65);
 	WMSetLabelTextAlignment(panel->threL, WARight);
 	WMSetLabelText(panel->threL, _("Threshold:"));
 
 	panel->threT = WMCreateTextField(panel->speedF);
 	WMResizeWidget(panel->threT, 30, 20);
-	WMMoveWidget(panel->threT, 180, 65);
+	WMMoveWidget(panel->threT, 180, 63);
 	WMAddNotificationObserver(returnPressed, panel, WMTextDidEndEditingNotification, panel->threT);
 
 	WMMapSubwidgets(panel->speedF);
 
-    /***************** Doubleclick Delay ****************/
+	/* ************** Grab Modifier **************** */
+	panel->grabF = WMCreateFrame(panel->box);
+	WMResizeWidget(panel->grabF, 225, 45);
+	WMMoveWidget(panel->grabF, 15, 95);
+	WMSetFrameTitle(panel->grabF, _("Mouse Grab Modifier"));
+
+	WMSetBalloonTextForView(_("Keyboard modifier to use for actions that\n"
+				  "involve dragging windows with the mouse,\n"
+				  "clicking inside the window."), WMWidgetView(panel->grabF));
+
+	panel->grabP = WMCreatePopUpButton(panel->grabF);
+	WMResizeWidget(panel->grabP, 160, 20);
+	WMMoveWidget(panel->grabP, 50, 18);
+
+	fillModifierPopUp(panel->grabP);
+	WMMapSubwidgets(panel->grabF);
+
+	/***************** Doubleclick Delay ****************/
 
 	panel->ddelaF = WMCreateFrame(panel->box);
-	WMResizeWidget(panel->ddelaF, 225, 105);
-	WMMoveWidget(panel->ddelaF, 15, 115);
+	WMResizeWidget(panel->ddelaF, 225, 87);
+	WMMoveWidget(panel->ddelaF, 15, 140);
 	WMSetFrameTitle(panel->ddelaF, _("Double-Click Delay"));
 
 	buf1 = wmalloc(strlen(DELAY_ICON) + 2);
@@ -501,7 +560,7 @@ static void createPanel(Panel * p)
 	for (i = 0; i < 5; i++) {
 		panel->ddelaB[i] = WMCreateCustomButton(panel->ddelaF, WBBStateChangeMask);
 		WMResizeWidget(panel->ddelaB[i], 25, 25);
-		WMMoveWidget(panel->ddelaB[i], 20 + (40 * i), 25);
+		WMMoveWidget(panel->ddelaB[i], 20 + (40 * i), 20);
 		WMSetButtonBordered(panel->ddelaB[i], False);
 		WMSetButtonImagePosition(panel->ddelaB[i], WIPImageOnly);
 		WMSetButtonAction(panel->ddelaB[i], doubleClick, panel);
@@ -538,15 +597,15 @@ static void createPanel(Panel * p)
 
 	panel->tester = CreateDoubleTest(panel->ddelaF, _("Test"));
 	WMResizeWidget(panel->tester, 84, 29);
-	WMMoveWidget(panel->tester, 25, 60);
+	WMMoveWidget(panel->tester, 25, 52);
 
 	panel->ddelaT = WMCreateTextField(panel->ddelaF);
 	WMResizeWidget(panel->ddelaT, 40, 20);
-	WMMoveWidget(panel->ddelaT, 130, 65);
+	WMMoveWidget(panel->ddelaT, 130, 57);
 
 	panel->ddelaL = WMCreateLabel(panel->ddelaF);
 	WMResizeWidget(panel->ddelaL, 40, 16);
-	WMMoveWidget(panel->ddelaL, 175, 70);
+	WMMoveWidget(panel->ddelaL, 175, 63);
 	{
 		WMFont *font;
 		WMColor *color;
@@ -563,86 +622,102 @@ static void createPanel(Panel * p)
 	WMMapSubwidgets(panel->ddelaF);
 
 	/* ************** Workspace Action Buttons **************** */
+
 	panel->menuF = WMCreateFrame(panel->box);
-	WMResizeWidget(panel->menuF, 260, 160);
+	WMResizeWidget(panel->menuF, 260, 222);
 	WMMoveWidget(panel->menuF, 250, 5);
 	WMSetFrameTitle(panel->menuF, _("Workspace Mouse Actions"));
 
 	panel->disaB = WMCreateSwitchButton(panel->menuF);
 	WMResizeWidget(panel->disaB, 205, 18);
-	WMMoveWidget(panel->disaB, 10, 18);
+	WMMoveWidget(panel->disaB, 10, 15);
 	WMSetButtonText(panel->disaB, _("Disable mouse actions"));
 
 	panel->button1L = WMCreateLabel(panel->menuF);
 	WMResizeWidget(panel->button1L, 107, 20);
-	WMMoveWidget(panel->button1L, 5, 45);
+	WMMoveWidget(panel->button1L, 5, 40);
 	WMSetLabelTextAlignment(panel->button1L, WARight);
 	WMSetLabelText(panel->button1L, _("Left Button"));
 
 	panel->button1P = WMCreatePopUpButton(panel->menuF);
 	WMResizeWidget(panel->button1P, 135, 20);
-	WMMoveWidget(panel->button1P, 115, 45);
+	WMMoveWidget(panel->button1P, 115, 40);
 
 	panel->button2L = WMCreateLabel(panel->menuF);
 	WMResizeWidget(panel->button2L, 107, 20);
-	WMMoveWidget(panel->button2L, 5, 73);
+	WMMoveWidget(panel->button2L, 5, 65);
 	WMSetLabelTextAlignment(panel->button2L, WARight);
 	WMSetLabelText(panel->button2L, _("Middle Button"));
 
 	panel->button2P = WMCreatePopUpButton(panel->menuF);
 	WMResizeWidget(panel->button2P, 135, 20);
-	WMMoveWidget(panel->button2P, 115, 73);
+	WMMoveWidget(panel->button2P, 115, 65);
 
 	panel->button3L = WMCreateLabel(panel->menuF);
 	WMResizeWidget(panel->button3L, 107, 20);
-	WMMoveWidget(panel->button3L, 5, 101);
+	WMMoveWidget(panel->button3L, 5, 90);
 	WMSetLabelTextAlignment(panel->button3L, WARight);
 	WMSetLabelText(panel->button3L, _("Right Button"));
 
 	panel->button3P = WMCreatePopUpButton(panel->menuF);
 	WMResizeWidget(panel->button3P, 135, 20);
-	WMMoveWidget(panel->button3P, 115, 101);
+	WMMoveWidget(panel->button3P, 115, 90);
+
+	panel->button8L = WMCreateLabel(panel->menuF);
+	WMResizeWidget(panel->button8L, 107, 20);
+	WMMoveWidget(panel->button8L, 5, 115);
+	WMSetLabelTextAlignment(panel->button8L, WARight);
+	WMSetLabelText(panel->button8L, _("Back Button"));
+
+	panel->button8P = WMCreatePopUpButton(panel->menuF);
+	WMResizeWidget(panel->button8P, 135, 20);
+	WMMoveWidget(panel->button8P, 115, 115);
+
+	panel->button9L = WMCreateLabel(panel->menuF);
+	WMResizeWidget(panel->button9L, 107, 20);
+	WMMoveWidget(panel->button9L, 5, 140);
+	WMSetLabelTextAlignment(panel->button9L, WARight);
+	WMSetLabelText(panel->button9L, _("Forward Button"));
+
+	panel->button9P = WMCreatePopUpButton(panel->menuF);
+	WMResizeWidget(panel->button9P, 135, 20);
+	WMMoveWidget(panel->button9P, 115, 140);
 
 	panel->wheelL = WMCreateLabel(panel->menuF);
 	WMResizeWidget(panel->wheelL, 107, 20);
-	WMMoveWidget(panel->wheelL, 5, 129);
+	WMMoveWidget(panel->wheelL, 5, 165);
 	WMSetLabelTextAlignment(panel->wheelL, WARight);
 	WMSetLabelText(panel->wheelL, _("Mouse Wheel"));
 
 	panel->wheelP = WMCreatePopUpButton(panel->menuF);
 	WMResizeWidget(panel->wheelP, 135, 20);
-	WMMoveWidget(panel->wheelP, 115, 129);
+	WMMoveWidget(panel->wheelP, 115, 165);
+
+	panel->wheelTiltL = WMCreateLabel(panel->menuF);
+	WMResizeWidget(panel->wheelTiltL, 107, 20);
+	WMMoveWidget(panel->wheelTiltL, 5, 190);
+	WMSetLabelTextAlignment(panel->wheelTiltL, WARight);
+	WMSetLabelText(panel->wheelTiltL, _("Mouse Wheel Tilt"));
+
+	panel->wheelTiltP = WMCreatePopUpButton(panel->menuF);
+	WMResizeWidget(panel->wheelTiltP, 135, 20);
+	WMMoveWidget(panel->wheelTiltP, 115, 190);
 
 	for (i = 0; i < wlengthof(buttonActions); i++) {
 		WMAddPopUpButtonItem(panel->button1P, buttonActions[i]);
 		WMAddPopUpButtonItem(panel->button2P, buttonActions[i]);
 		WMAddPopUpButtonItem(panel->button3P, buttonActions[i]);
+		WMAddPopUpButtonItem(panel->button8P, buttonActions[i]);
+		WMAddPopUpButtonItem(panel->button9P, buttonActions[i]);
 	}
 
 	for (i = 0; i < wlengthof(wheelActions); i++) {
 		WMAddPopUpButtonItem(panel->wheelP, wheelActions[i]);
+		WMAddPopUpButtonItem(panel->wheelTiltP, wheelActions[i]);
 	}
 
 	WMMapSubwidgets(panel->menuF);
 
-	/* ************** Grab Modifier **************** */
-	panel->grabF = WMCreateFrame(panel->box);
-	WMResizeWidget(panel->grabF, 260, 50);
-	WMMoveWidget(panel->grabF, 250, 170);
-	WMSetFrameTitle(panel->grabF, _("Mouse Grab Modifier"));
-
-	WMSetBalloonTextForView(_("Keyboard modifier to use for actions that\n"
-				  "involve dragging windows with the mouse,\n"
-				  "clicking inside the window."), WMWidgetView(panel->grabF));
-
-	panel->grabP = WMCreatePopUpButton(panel->grabF);
-	WMResizeWidget(panel->grabP, 160, 20);
-	WMMoveWidget(panel->grabP, 50, 20);
-
-	fillModifierPopUp(panel->grabP);
-
-	WMMapSubwidgets(panel->grabF);
-
 	WMRealizeWidget(panel->box);
 	WMMapSubwidgets(panel->box);
 
@@ -763,9 +838,18 @@ static void storeData(_Panel * panel)
 	i = WMGetPopUpButtonSelectedItem(panel->button3P);
 	SetStringForKey(button[i], "MouseRightButtonAction");
 
+	i = WMGetPopUpButtonSelectedItem(panel->button8P);
+	SetStringForKey(button[i], "MouseBackwardButtonAction");
+
+	i = WMGetPopUpButtonSelectedItem(panel->button9P);
+	SetStringForKey(button[i], "MouseForwardButtonAction");
+
 	i = WMGetPopUpButtonSelectedItem(panel->wheelP);
 	SetStringForKey(wheel[i], "MouseWheelAction");
 
+	i = WMGetPopUpButtonSelectedItem(panel->wheelTiltP);
+	SetStringForKey(wheel[i], "MouseWheelTiltAction");
+
 	tmp = WMGetPopUpButtonItem(panel->grabP, WMGetPopUpButtonSelectedItem(panel->grabP));
 	tmp = wstrdup(tmp);
 	p = strchr(tmp, ' ');
-- 
1.8.3.2

