properly handle placing a window while another window is still placing.

This commit is contained in:
Dana Jansens 2002-04-28 19:09:25 +00:00
parent 1789f16af9
commit 4852193a57
2 changed files with 21 additions and 12 deletions

View file

@ -1465,6 +1465,24 @@ void OpenboxWindow::deiconify(Bool reassoc, Bool raise) {
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 (!(flags.iconic || reassoc) &&
screen->placementPolicy() == BScreen::ClickMousePlacement) {
// 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;
@ -1725,6 +1743,7 @@ void OpenboxWindow::setFocusFlag(Bool focus) {
if (screen->sloppyFocus() && screen->autoRaise() && timer->isTiming())
timer->stop();
}

View file

@ -479,19 +479,9 @@ void Openbox::process_event(XEvent *e) {
if (! win)
win = new OpenboxWindow(*this, e->xmaprequest.window);
if ((win = searchWindow(e->xmaprequest.window))) {
if ((win = searchWindow(e->xmaprequest.window)))
win->mapRequestEvent(&e->xmaprequest);
// 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 (win->getScreen()->placementPolicy() == BScreen::ClickMousePlacement) {
int x, y, rx, ry;
Window c, r;
unsigned int m;
XQueryPointer(getXDisplay(), win->getScreen()->getRootWindow(),
&r, &c, &rx, &ry, &x, &y, &m);
win->startMove(rx, ry);
}
}
break;
}