+ bool focus = flags.focused; // had focus while moving?
+
+ int dest_x = x_root;
+ if (x_root <= 0) {
+ dest_x += screen->getRect().width() - 1;
+ dx += screen->getRect().width() - 1;
+ } else {
+ dest_x -= screen->getRect().width() - 1;
+ dx -= screen->getRect().width() - 1;
+ }
+
+ if (! flags.stuck)
+ screen->reassociateWindow(this, dest, False);
+ screen->changeWorkspaceID(dest);
+
+ if (screen->doOpaqueMove())
+ XGrabServer(blackbox->getXDisplay());
+
+ XUngrabPointer(blackbox->getXDisplay(), CurrentTime);
+ XWarpPointer(blackbox->getXDisplay(), None,
+ screen->getRootWindow(), 0, 0, 0, 0,
+ dest_x, y_root);
+ XGrabPointer(blackbox->getXDisplay(), frame.window, False,
+ PointerMotionMask | ButtonReleaseMask,
+ GrabModeAsync, GrabModeAsync,
+ None, blackbox->getMoveCursor(), CurrentTime);
+
+ if (screen->doOpaqueMove())
+ XUngrabServer(blackbox->getXDisplay());
+
+ if (focus)
+ setInputFocus();
+
+}
+
+
+void BlackboxWindow::doWindowSnapping(int &dx, int &dy) {