--- ./doc/blackbox.1.in.orig Thu Mar 10 19:04:08 2005 +++ ./doc/blackbox.1.in Thu Mar 10 19:04:13 2005 @@ -1059,6 +1059,12 @@ .EX .B Default is 200 Kilobytes .EE +.TP 3 +.BI "session.modifierMask" " [Mod1-Mod5]" +The modifier mask used for mouse bindings in Blackbox. +.EX +.B Default is Mod1 (Alt) +.EE .\" .\" * * * * * ENVIRONMENT * * * * * --- ./src/BlackboxResource.cc.orig Mon Feb 7 02:13:35 2005 +++ ./src/BlackboxResource.cc Thu Mar 10 19:05:23 2005 @@ -206,6 +206,21 @@ res.read("session.screen0.edgeSnapThreshold", "Session.Screen0.EdgeSnapThreshold", 0)); + str = res.read("session.modifierMask", + "Session.ModifierMask", + "Mod1"); + if (strcasecmp("Mod1", str.c_str()) == 0) + modifier_mask = Mod1Mask; + else if (strcasecmp("Mod2", str.c_str()) == 0) + modifier_mask = Mod2Mask; + else if (strcasecmp("Mod3", str.c_str()) == 0) + modifier_mask = Mod3Mask; + else if (strcasecmp("Mod4", str.c_str()) == 0) + modifier_mask = Mod4Mask; + else if (strcasecmp("Mod5", str.c_str()) == 0) + modifier_mask = Mod5Mask; + else + modifier_mask = Mod1Mask; for (unsigned int i = 0; i < blackbox.screenCount(); ++i) screen_resources[i].load(res, i); @@ -295,6 +310,28 @@ change_workspace_with_mouse_wheel); res.write("session.disableBindingsWithScrollLock", allow_scroll_lock); res.write("session.edgeSnapThreshold", edge_snap_threshold); + + switch (modifier_mask) { + case Mod1Mask: + str = "Mod1"; + break; + case Mod2Mask: + str = "Mod2"; + break; + case Mod3Mask: + str = "Mod3"; + break; + case Mod4Mask: + str = "Mod4"; + break; + case Mod5Mask: + str = "Mod5"; + break; + default: + str = "Mod1"; + break; + } + res.write("session.modifierMask", str); for (unsigned int i = 0; i < blackbox.screenCount(); ++i) screen_resources[i].save(res, blackbox.screenNumber(i)); --- ./src/BlackboxResource.hh.orig Sat Feb 5 11:49:07 2005 +++ ./src/BlackboxResource.hh Thu Mar 10 18:09:30 2005 @@ -80,6 +80,7 @@ bool allow_scroll_lock; bool change_workspace_with_mouse_wheel; unsigned int edge_snap_threshold; + unsigned int modifier_mask; public: BlackboxResource(const std::string& rc); @@ -186,6 +187,11 @@ { return edge_snap_threshold; } inline void setEdgeSnapThreshold(unsigned int t) { edge_snap_threshold = t; } + + inline unsigned int modifierMask(void) const + { return modifier_mask; } + inline void setModifierMask(unsigned int m) + { modifier_mask = m; } }; #endif --- ./src/Window.cc.orig Tue Feb 22 23:01:15 2005 +++ ./src/Window.cc Thu Mar 10 18:09:30 2005 @@ -1743,6 +1743,7 @@ void BlackboxWindow::grabButtons(void) { + unsigned int modifier_mask = blackbox->resource().modifierMask(); if (blackbox->resource().focusModel() == ClickToFocusModel || blackbox->resource().clickRaise()) // grab button 1 for changing focus/raising @@ -1751,18 +1752,18 @@ blackbox->resource().allowScrollLock()); if (hasWindowFunction(WindowFunctionMove)) - blackbox->grabButton(Button1, Mod1Mask, frame.window, True, + blackbox->grabButton(Button1, modifier_mask, frame.window, True, ButtonReleaseMask | ButtonMotionMask, GrabModeAsync, GrabModeAsync, frame.window, blackbox->resource().cursors().move, blackbox->resource().allowScrollLock()); if (hasWindowFunction(WindowFunctionResize)) - blackbox->grabButton(Button3, Mod1Mask, frame.window, True, + blackbox->grabButton(Button3, modifier_mask, frame.window, True, ButtonReleaseMask | ButtonMotionMask, GrabModeAsync, GrabModeAsync, frame.window, None, blackbox->resource().allowScrollLock()); // alt+middle lowers the window - blackbox->grabButton(Button2, Mod1Mask, frame.window, True, + blackbox->grabButton(Button2, modifier_mask, frame.window, True, ButtonReleaseMask, GrabModeAsync, GrabModeAsync, frame.window, None, blackbox->resource().allowScrollLock()); @@ -1770,10 +1771,11 @@ void BlackboxWindow::ungrabButtons(void) { + unsigned int modifier_mask = blackbox->resource().modifierMask(); blackbox->ungrabButton(Button1, 0, frame.plate); - blackbox->ungrabButton(Button1, Mod1Mask, frame.window); - blackbox->ungrabButton(Button2, Mod1Mask, frame.window); - blackbox->ungrabButton(Button3, Mod1Mask, frame.window); + blackbox->ungrabButton(Button1, modifier_mask, frame.window); + blackbox->ungrabButton(Button2, modifier_mask, frame.window); + blackbox->ungrabButton(Button3, modifier_mask, frame.window); } @@ -3367,7 +3369,7 @@ redrawCloseButton(true); } else { if (event->button == 1 - || (event->button == 3 && event->state == Mod1Mask)) { + || (event->button == 3 && event->state == blackbox->resource().modifierMask())) { frame.grab_x = event->x_root - frame.rect.x(); frame.grab_y = event->y_root - frame.rect.y(); @@ -3445,7 +3447,7 @@ } else if (client.state.resizing) { finishResize(); } else if (event->window == frame.window) { - if (event->button == 2 && event->state == Mod1Mask) + if (event->button == 2 && event->state == blackbox->resource().modifierMask()) XUngrabPointer(blackbox->XDisplay(), blackbox->XTime()); } } @@ -3471,7 +3473,7 @@ && (event->window == frame.right_grip || event->window == frame.left_grip)) || (event->state & Button3Mask - && event->state & Mod1Mask + && event->state & blackbox->resource().modifierMask() && event->window == frame.window)) { if (!client.state.resizing) startResize(event->window);