using std::string;
+// change this to change what modifier keys openbox uses for mouse bindings
+// for example: Mod1Mask | ControlMask
+// or: ControlMask| ShiftMask
+const unsigned int ModMask = Mod1Mask;
+
/*
* Initializes the class with default values/the window's set initial values.
*/
screen->allowScrollLock());
if (functions & Func_Move)
- blackbox->grabButton(Button1, Mod1Mask, frame.window, True,
+ blackbox->grabButton(Button1, ModMask, frame.window, True,
ButtonReleaseMask | ButtonMotionMask, GrabModeAsync,
GrabModeAsync, frame.window, None,
screen->allowScrollLock());
if (functions & Func_Resize)
- blackbox->grabButton(Button3, Mod1Mask, frame.window, True,
+ blackbox->grabButton(Button3, ModMask, frame.window, True,
ButtonReleaseMask | ButtonMotionMask, GrabModeAsync,
GrabModeAsync, frame.window, None,
screen->allowScrollLock());
// alt+middle lowers the window
- blackbox->grabButton(Button2, Mod1Mask, frame.window, True,
+ blackbox->grabButton(Button2, ModMask, frame.window, True,
ButtonReleaseMask, GrabModeAsync, GrabModeAsync,
frame.window, None,
screen->allowScrollLock());
if ((! screen->isSloppyFocus()) || screen->doClickRaise())
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, ModMask, frame.window);
+ blackbox->ungrabButton(Button2, ModMask, frame.window);
+ blackbox->ungrabButton(Button3, ModMask, frame.window);
}
frame.changing = *it;
} else
-#endif
+#endif // XINERAMA
frame.changing = screen->availableArea();
switch(button) {
if (frame.maximize_button == be->window && be->button <= 3) {
redrawMaximizeButton(True);
- } else if (be->button == 1 || (be->button == 3 && be->state == Mod1Mask)) {
+ } else if (be->button == 1 || (be->button == 3 && be->state == ModMask)) {
if (! flags.focused)
setInputFocus();
} else if (flags.resizing) {
endResize();
} else if (re->window == frame.window) {
- if (re->button == 2 && re->state == Mod1Mask)
+ if (re->button == 2 && re->state == ModMask)
XUngrabPointer(blackbox->getXDisplay(), CurrentTime);
}
}
dx -= frame.border_w;
dy -= frame.border_w;
+ if (screen->doWorkspaceWarping()) {
+ // workspace warping
+ bool warp = False;
+ unsigned int dest = screen->getCurrentWorkspaceID();
+ if (x_root <= 0) {
+ warp = True;
+
+ if (dest > 0) dest--;
+ else dest = screen->getNumberOfWorkspaces() - 1;
+
+ } else if (x_root >= screen->getRect().right()) {
+ warp = True;
+
+ if (dest < screen->getNumberOfWorkspaces() - 1) dest++;
+ else dest = 0;
+ }
+ if (warp) {
+ endMove();
+ bool focus = flags.focused; // had focus while moving?
+ if (! flags.stuck)
+ screen->reassociateWindow(this, dest, False);
+ screen->changeWorkspaceID(dest);
+ if (focus)
+ setInputFocus();
+
+ /*
+ If the XWarpPointer is done after the configure, we can end up
+ grabbing another window, so made sure you do it first.
+ */
+ int dest_x;
+ if (x_root <= 0) {
+ dest_x = screen->getRect().right() - 1;
+ XWarpPointer(blackbox->getXDisplay(), None,
+ screen->getRootWindow(), 0, 0, 0, 0,
+ dest_x, y_root);
+
+ configure(dx + (screen->getRect().width() - 1), dy,
+ frame.rect.width(), frame.rect.height());
+ } else {
+ dest_x = 0;
+ XWarpPointer(blackbox->getXDisplay(), None,
+ screen->getRootWindow(), 0, 0, 0, 0,
+ dest_x, y_root);
+
+ configure(dx - (screen->getRect().width() - 1), dy,
+ frame.rect.width(), frame.rect.height());
+ }
+
+ beginMove(dest_x, y_root);
+ return;
+ }
+ }
+
const int snap_distance = screen->getEdgeSnapThreshold();
if (snap_distance) {
// snap to the strut (and screen boundaries for xinerama)
#ifdef XINERAMA
- if (screen->isXineramaActive() && blackbox->doXineramaSnapping())
+ if (screen->isXineramaActive() && blackbox->doXineramaSnapping()) {
+ if (! screen->doFullMax())
+ snaplist.insert(snaplist.begin(),
+ screen->allAvailableAreas().begin(),
+ screen->allAvailableAreas().end());
+
+ // always snap to the screen edges
snaplist.insert(snaplist.begin(),
- screen->allAvailableAreas().begin(),
- screen->allAvailableAreas().end());
- else
+ screen->getXineramaAreas().begin(),
+ screen->getXineramaAreas().end());
+ } else
#endif // XINERAMA
+ {
if (! screen->doFullMax())
snaplist.push_back(screen->availableArea());
-
- // always snap to the screen edges
- snaplist.push_back(screen->getRect());
+
+ // always snap to the screen edges
+ snaplist.push_back(screen->getRect());
+ }
RectList::const_iterator it, end = snaplist.end();
for (it = snaplist.begin(); it != end; ++it) {
} else if ((functions & Func_Resize) &&
(me->state & Button1Mask && (me->window == frame.right_grip ||
me->window == frame.left_grip)) ||
- (me->state & Button3Mask && me->state & Mod1Mask &&
+ (me->state & Button3Mask && me->state & ModMask &&
me->window == frame.window)) {
unsigned int zones = screen->getResizeZones();
Corner corner;