From: Christophe CURIS <christophe.cu...@free.fr>

Having all these information spread in different places makes it error
prone when wanting to add/remove/change something in the list are there are
many unrelated places to keep in sync.

Signed-off-by: Christophe CURIS <christophe.cu...@free.fr>
---
 WPrefs.app/MouseSettings.c | 343 +++++++++++++--------------------------------
 1 file changed, 101 insertions(+), 242 deletions(-)

diff --git a/WPrefs.app/MouseSettings.c b/WPrefs.app/MouseSettings.c
index f790e85..bbcf510 100644
--- a/WPrefs.app/MouseSettings.c
+++ b/WPrefs.app/MouseSettings.c
@@ -31,6 +31,45 @@
 
 #define XSET   "xset"
 
+
+static const struct {
+       const char *db_key;
+       int default_action;
+       enum { T_BUTTON, T_WHEEL } type;
+       const char *display_label;
+} button_list[] = {
+       { "MouseLeftButtonAction",     3, T_BUTTON, N_("Left Button") },
+       { "MouseMiddleButtonAction",   2, T_BUTTON, N_("Middle Button") },
+       { "MouseRightButtonAction",    1, T_BUTTON, N_("Right Button") },
+       { "MouseBackwardButtonAction", 0, T_BUTTON, N_("Back Button") },
+       { "MouseForwardButtonAction",  0, T_BUTTON, N_("Forward Button") },
+       { "MouseWheelAction",          0, T_WHEEL,  N_("Mouse Wheel") },
+       { "MouseWheelTiltAction",      0, T_WHEEL,  N_("Mouse Wheel Tilt") }
+};
+
+static const struct {
+       const char *db_value;
+       const char *label;
+} button_actions[] = {
+       { "None",                  N_("None") },
+       { "OpenApplicationsMenu",  N_("Applications Menu") },
+       { "OpenWindowListMenu",    N_("Window List Menu") },
+       { "SelectWindows",         N_("Select Windows") },
+       { "MoveToPrevWorkspace",   N_("Previous Workspace") },
+       { "MoveToNextWorkspace",   N_("Next Workspace") },
+       { "MoveToPrevWindow",      N_("Previous Window") },
+       { "MoveToNextWindow",      N_("Next Window") }
+};
+
+static const struct {
+       const char *db_value;
+       const char *label;
+} wheel_actions[] = {
+       { "None",              N_("None") },
+       { "SwitchWorkspaces",  N_("Switch Workspaces") },
+       { "SwitchWindows",     N_("Switch Windows") }
+};
+
 typedef struct _Panel {
        WMBox *box;
 
@@ -57,20 +96,10 @@ typedef struct _Panel {
        DoubleTest *tester;
 
        WMFrame *menuF;
-       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;
+       struct {
+               WMLabel *label;
+               WMPopUpButton *popup;
+       } mouse_action[wlengthof_nocheck(button_list)];
 
        WMButton *disaB;
 
@@ -93,10 +122,6 @@ typedef struct _Panel {
 
 static char *modifierNames[8];
 
-static char *buttonActions[8];
-
-static char *wheelActions[3];
-
 #define DELAY(i)               ((i)*75+170)
 
 
@@ -181,44 +206,32 @@ static void doubleClick(WMWidget * w, void *data)
 
 static int getButtonAction(const char *str)
 {
+       int i;
+
        if (!str)
                return -2;
 
-       if (strcasecmp(str, "None") == 0)
-               return 0;
-       else if (strcasecmp(str, "OpenApplicationsMenu") == 0)
-               return 1;
-       else if (strcasecmp(str, "OpenWindowListMenu") == 0)
-               return 2;
-       else if (strcasecmp(str, "SelectWindows") == 0)
-               return 3;
-       else if (strcasecmp(str, "MoveToPrevWorkspace") == 0)
-               return 4;
-       else if (strcasecmp(str, "MoveToNextWorkspace") == 0)
-               return 5;
-       else if (strcasecmp(str, "MoveToPrevWindow") == 0)
-               return 6;
-       else if (strcasecmp(str, "MoveToNextWindow") == 0)
-               return 7;
-       else
-               return -1;
+       for (i = 0; i < wlengthof(button_actions); i++) {
+               if (strcasecmp(str, button_actions[i].db_value) == 0)
+                       return i;
+       }
 
+       return -1;
 }
 
 static int getWheelAction(const char *str)
 {
+       int i;
+
        if (!str)
                return -2;
 
-       if (strcasecmp(str, "None") == 0)
-               return 0;
-       else if (strcasecmp(str, "SwitchWorkspaces") == 0)
-               return 1;
-       else if (strcasecmp(str, "SwitchWindows") == 0)
-               return 2;
-       else
-               return -1;
+       for (i = 0; i < wlengthof(wheel_actions); i++) {
+               if (strcasecmp(str, wheel_actions[i].db_value) == 0)
+                       return i;
+       }
 
+       return -1;
 }
 
 static void getMouseParameters(Display * dpy, float *accel, int *thre)
@@ -234,94 +247,27 @@ static void showData(_Panel * panel)
 {
        char *str;
        int i;
-       int a = -1, b = -1, c = -1, w = -1;
+       int a = -1, b = -1;
        float accel;
        char buffer[32];
        Display *dpy = WMScreenDisplay(WMWidgetScreen(panel->parent));
 
-       str = GetStringForKey("MouseLeftButtonAction");
-       i = getButtonAction(str);
-       if (i < 0) {
-               a = 3;
-               if (i == -1) {
-                       wwarning(_("bad value %s for option %s"), str, 
"MouseLeftButtonAction");
-               }
-       } else {
-               a = i;
-       }
-       WMSetPopUpButtonSelectedItem(panel->button1P, a);
-
-       str = GetStringForKey("MouseMiddleButtonAction");
-       i = getButtonAction(str);
-       if (i < 0) {
-               b = 2;
-               if (i == -1) {
-                       wwarning(_("bad value %s for option %s"), str, 
"MouseMiddleButtonAction");
-               }
-       } else {
-               b = i;
-       }
-       WMSetPopUpButtonSelectedItem(panel->button2P, b);
-
-       str = GetStringForKey("MouseRightButtonAction");
-       i = getButtonAction(str);
-       if (i < 0) {
-               c = 1;
-               if (i == -1) {
-                       wwarning(_("bad value %s for option %s"), str, 
"MouseRightButtonAction");
-               }
-       } else {
-               c = i;
-       }
-       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) {
-               w = 0;
-               if (i == -1) {
-                       wwarning(_("bad value %s for option %s"), str, 
"MouseWheelAction");
-               }
-       } else {
-               w = i;
-       }
-       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");
+       for (i = 0; i < wlengthof(button_list); i++) {
+               int action;
+
+               str = GetStringForKey(button_list[i].db_key);
+               if (button_list[i].type == T_BUTTON)
+                       action = getButtonAction(str);
+               else
+                       action = getWheelAction(str);
+
+               if (action < 0) {
+                       if (action == -1)
+                               wwarning(_("bad value %s for option %s"), str, 
button_list[i].db_key);
+                       action = button_list[i].default_action;
                }
-       } else {
-               w = i;
+               WMSetPopUpButtonSelectedItem(panel->mouse_action[i].popup, 
action);
        }
-       WMSetPopUpButtonSelectedItem(panel->wheelTiltP, w);
 
        WMSetButtonSelected(panel->disaB, 
GetBoolForKey("DisableWSMouseActions"));
 
@@ -643,89 +589,27 @@ static void createPanel(Panel * p)
        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, 40);
-       WMSetLabelTextAlignment(panel->button1L, WARight);
-       WMSetLabelText(panel->button1L, _("Left Button"));
-
-       panel->button1P = WMCreatePopUpButton(panel->menuF);
-       WMResizeWidget(panel->button1P, 135, 20);
-       WMMoveWidget(panel->button1P, 115, 40);
-
-       panel->button2L = WMCreateLabel(panel->menuF);
-       WMResizeWidget(panel->button2L, 107, 20);
-       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, 65);
-
-       panel->button3L = WMCreateLabel(panel->menuF);
-       WMResizeWidget(panel->button3L, 107, 20);
-       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, 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, 165);
-       WMSetLabelTextAlignment(panel->wheelL, WARight);
-       WMSetLabelText(panel->wheelL, _("Mouse Wheel"));
-
-       panel->wheelP = WMCreatePopUpButton(panel->menuF);
-       WMResizeWidget(panel->wheelP, 135, 20);
-       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(button_list); i++) {
+               int j;
 
-       for (i = 0; i < wlengthof(wheelActions); i++) {
-               WMAddPopUpButtonItem(panel->wheelP, wheelActions[i]);
-               WMAddPopUpButtonItem(panel->wheelTiltP, wheelActions[i]);
-       }
+               panel->mouse_action[i].label = WMCreateLabel(panel->menuF);
+               WMResizeWidget(panel->mouse_action[i].label, 107, 20);
+               WMMoveWidget(panel->mouse_action[i].label, 5, 40 + 25 * i);
+               WMSetLabelTextAlignment(panel->mouse_action[i].label, WARight);
+               WMSetLabelText(panel->mouse_action[i].label, 
_(button_list[i].display_label));
 
+               panel->mouse_action[i].popup = 
WMCreatePopUpButton(panel->menuF);
+               WMResizeWidget(panel->mouse_action[i].popup, 135, 20);
+               WMMoveWidget(panel->mouse_action[i].popup, 115, 40 + 25 * i);
+
+               if (button_list[i].type == T_BUTTON) {
+                       for (j = 0; j < wlengthof(button_actions); j++)
+                               
WMAddPopUpButtonItem(panel->mouse_action[i].popup, _(button_actions[j].label));
+               } else {
+                       for (j = 0; j < wlengthof(wheel_actions); j++)
+                               
WMAddPopUpButtonItem(panel->mouse_action[i].popup, _(wheel_actions[j].label));
+               }
+       }
        WMMapSubwidgets(panel->menuF);
 
        WMRealizeWidget(panel->box);
@@ -815,9 +699,6 @@ static void storeData(_Panel * panel)
        char buffer[64];
        int i;
        char *tmp, *p;
-       static char *button[8] = { "None", "OpenApplicationsMenu", 
"OpenWindowListMenu", "SelectWindows",
-                                               "MoveToPrevWorkspace", 
"MoveToNextWorkspace", "MoveToPrevWindow", "MoveToNextWindow" };
-       static char *wheel[3] = { "None", "SwitchWorkspaces", "SwitchWindows" };
        WMUserDefaults *udb = WMGetStandardUserDefaults();
 
        if (!WMGetUDBoolForKey(udb, "NoXSetStuff")) {
@@ -840,26 +721,17 @@ static void storeData(_Panel * panel)
 
        SetBoolForKey(WMGetButtonSelected(panel->disaB), 
"DisableWSMouseActions");
 
-       i = WMGetPopUpButtonSelectedItem(panel->button1P);
-       SetStringForKey(button[i], "MouseLeftButtonAction");
-
-       i = WMGetPopUpButtonSelectedItem(panel->button2P);
-       SetStringForKey(button[i], "MouseMiddleButtonAction");
-
-       i = WMGetPopUpButtonSelectedItem(panel->button3P);
-       SetStringForKey(button[i], "MouseRightButtonAction");
+       for (i = 0; i < wlengthof(button_list); i++) {
+               const char *db_value;
+               int action;
 
-       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");
+               action = 
WMGetPopUpButtonSelectedItem(panel->mouse_action[i].popup);
+               if (button_list[i].type == T_BUTTON)
+                       db_value = button_actions[action].db_value;
+               else
+                       db_value = wheel_actions[action].db_value;
+               SetStringForKey(db_value, button_list[i].db_key);
+       }
 
        tmp = WMGetPopUpButtonItem(panel->grabP, 
WMGetPopUpButtonSelectedItem(panel->grabP));
        tmp = wstrdup(tmp);
@@ -885,19 +757,6 @@ Panel *InitMouseSettings(WMWidget *parent)
        modifierNames[6] = wstrdup(_("Mod4"));
        modifierNames[7] = wstrdup(_("Mod5"));
 
-       buttonActions[0] = wstrdup(_("None"));
-       buttonActions[1] = wstrdup(_("Applications Menu"));
-       buttonActions[2] = wstrdup(_("Window List Menu"));
-       buttonActions[3] = wstrdup(_("Select Windows"));
-       buttonActions[4] = wstrdup(_("Previous Workspace"));
-       buttonActions[5] = wstrdup(_("Next Workspace"));
-       buttonActions[6] = wstrdup(_("Previous Window"));
-       buttonActions[7] = wstrdup(_("Next Window"));
-
-       wheelActions[0] = wstrdup(_("None"));
-       wheelActions[1] = wstrdup(_("Switch Workspaces"));
-       wheelActions[2] = wstrdup(_("Switch Windows"));
-
        panel = wmalloc(sizeof(_Panel));
 
        panel->sectionName = _("Mouse Preferences");
-- 
2.1.1


-- 
To unsubscribe, send mail to wmaker-dev-unsubscr...@lists.windowmaker.org.

Reply via email to