}
upsize();
- Bool place_window = True;
+ place_window = true;
if (openbox.isStartup() || flags.transient ||
client.normal_hint_flags & (PPosition|USPosition)) {
setGravityOffsets();
(signed) (frame.y + frame.y_border) >= 0 &&
frame.x <= (signed) screen->size().w() &&
frame.y <= (signed) screen->size().h()))
- place_window = False;
+ place_window = false;
}
frame.window = createToplevelWindow(frame.x, frame.y, frame.width,
XMapSubwindows(display, frame.window);
XMapWindow(display, frame.window);
+ // if we're using the click to place placement type, then immediately
+ // after the window is mapped, we need to start interactively moving it
+ if (screen->placementPolicy() == BScreen::ClickMousePlacement &&
+ place_window && !(flags.iconic || reassoc)) {
+ // if the last window wasn't placed yet, or we're just moving a window
+ // already, finish off that move cleanly
+ OpenboxWindow *w = openbox.getFocusedWindow();
+ if (w != (OpenboxWindow *) 0 && w->flags.moving)
+ w->endMove();
+
+ int x, y, rx, ry;
+ Window c, r;
+ unsigned int m;
+ XQueryPointer(openbox.getXDisplay(), screen->getRootWindow(),
+ &r, &c, &rx, &ry, &x, &y, &m);
+ startMove(rx, ry);
+ }
+
if (flags.iconic && screen->focusNew()) setInputFocus();
flags.visible = True;
void OpenboxWindow::withdraw(void) {
+ if (flags.moving)
+ endMove();
+
flags.visible = False;
flags.iconic = False;
if (screen->sloppyFocus() && screen->autoRaise() && timer->isTiming())
timer->stop();
+
}
void OpenboxWindow::startMove(int x, int y) {
ASSERT(!flags.moving);
- XGrabPointer(display, frame.window, False, Button1MotionMask |
+ XGrabPointer(display, frame.window, False, PointerMotionMask |
ButtonReleaseMask, GrabModeAsync, GrabModeAsync,
None, openbox.getMoveCursor(), CurrentTime);
void OpenboxWindow::motionNotifyEvent(XMotionEvent *me) {
- if (!flags.resizing && (me->state & Button1Mask) && functions.move &&
- (frame.title == me->window || frame.label == me->window ||
- frame.handle == me->window || frame.window == me->window)) {
- if (!flags.moving)
- startMove(me->x_root, me->y_root);
- else
+ if (flags.moving)
doMove(me->x_root, me->y_root);
- } else if (functions.resize &&
+ else if (!flags.resizing && (me->state & Button1Mask) && functions.move &&
+ (frame.title == me->window || frame.label == me->window ||
+ frame.handle == me->window || frame.window == me->window))
+ startMove(me->x_root, me->y_root);
+ else if (functions.resize &&
(((me->state & Button1Mask) && (me->window == frame.right_grip ||
me->window == frame.left_grip)) ||
(me->state & (Mod1Mask | Button3Mask) &&