From 4852193a578ea3c33f8685fd87322503c28e5544 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sun, 28 Apr 2002 19:09:25 +0000 Subject: [PATCH] properly handle placing a window while another window is still placing. --- src/Window.cc | 19 +++++++++++++++++++ src/openbox.cc | 14 ++------------ 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/Window.cc b/src/Window.cc index 7ce182dc..8df9ddfe 100644 --- a/src/Window.cc +++ b/src/Window.cc @@ -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(); + } diff --git a/src/openbox.cc b/src/openbox.cc index 99d623e5..cfdb6e9b 100644 --- a/src/openbox.cc +++ b/src/openbox.cc @@ -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; } -- 2.39.2