all repos — openbox @ 9d40660bce8e594b6065db961b770d69c46ae53b

openbox fork - make it a bit more like ryudo

warping works!
Dana Jansens danakj@orodu.net
commit

9d40660bce8e594b6065db961b770d69c46ae53b

parent

a9bfdcaa06b42e9c0de06042f79d1920361aaa25

2 files changed, 16 insertions(+), 14 deletions(-)

jump to
M src/Window.ccsrc/Window.cc

@@ -3065,6 +3065,7 @@ void BlackboxWindow::doMove(int x_root, int y_root) {

assert(flags.moving); assert(blackbox->getChangingWindow() == this); + bool warp = False; int dx = x_root - frame.grab_x, dy = y_root - frame.grab_y; dx -= frame.border_w; dy -= frame.border_w;

@@ -3072,6 +3073,9 @@

doWindowSnapping(dx, dy); if (screen->doOpaqueMove()) { + if (screen->doWorkspaceWarping()) + warp = doWorkspaceWarping(x_root, y_root, dx, dy); + configure(dx, dy, frame.rect.width(), frame.rect.height()); } else { XDrawRectangle(blackbox->getXDisplay(), screen->getRootWindow(),

@@ -3080,6 +3084,9 @@ frame.changing.x(),

frame.changing.y(), frame.changing.width() - 1, frame.changing.height() - 1); + + if (screen->doWorkspaceWarping()) + warp = doWorkspaceWarping(x_root, y_root, dx, dy); frame.changing.setPos(dx, dy);

@@ -3091,14 +3098,11 @@ frame.changing.width() - 1,

frame.changing.height() - 1); } - if (screen->doWorkspaceWarping()) - doWorkspaceWarping(x_root, y_root, dx, dy); - screen->showPosition(dx, dy); } -void BlackboxWindow::doWorkspaceWarping(int x_root, int y_root, +bool BlackboxWindow::doWorkspaceWarping(int x_root, int y_root, int &dx, int dy) { // workspace warping bool warp = False;

@@ -3116,9 +3120,7 @@ if (dest < screen->getNumberOfWorkspaces() - 1) dest++;

else dest = 0; } if (! warp) - return; - - endMove(); + return False; bool focus = flags.focused; // had focus while moving?

@@ -3135,24 +3137,24 @@ /*

We grab the X server here so that we dont end up magically grabbing a different window dring the warp. */ - XGrabServer(blackbox->getXDisplay()); if (! flags.stuck) screen->reassociateWindow(this, dest, False); screen->changeWorkspaceID(dest); - configure(dx, dy, frame.rect.width(), frame.rect.height()); - + XUngrabPointer(blackbox->getXDisplay(), CurrentTime); XWarpPointer(blackbox->getXDisplay(), None, screen->getRootWindow(), 0, 0, 0, 0, dest_x, y_root); - - XUngrabServer(blackbox->getXDisplay()); + XGrabPointer(blackbox->getXDisplay(), frame.window, False, + PointerMotionMask | ButtonReleaseMask, + GrabModeAsync, GrabModeAsync, + None, blackbox->getMoveCursor(), CurrentTime); if (focus) setInputFocus(); - beginMove(dest_x, y_root); + return True; }
M src/Window.hhsrc/Window.hh

@@ -296,7 +296,7 @@ void setAllowedActions(void);

void setState(unsigned long new_state); void upsize(void); void doMove(int x_root, int y_root); - void doWorkspaceWarping(int x_root, int y_root, int &dx, int dy); + bool doWorkspaceWarping(int x_root, int y_root, int &dx, int dy); void doWindowSnapping(int &dx, int &dy); void endMove(void); void doResize(int x_root, int y_root);