X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2FWindow.cc;h=90224fe5bb73f39dcfe945a94bf5d8bb0060a7b8;hb=daaac0dfe24d92bea54cd5ddee46861a1fe733bd;hp=07b9975805c350b6e6d0d435785c31de4133c916;hpb=c6a826bf663d3cb286025642f5e2a725b5d1c660;p=chaz%2Fopenbox diff --git a/src/Window.cc b/src/Window.cc index 07b99758..90224fe5 100644 --- a/src/Window.cc +++ b/src/Window.cc @@ -204,11 +204,14 @@ BlackboxWindow::BlackboxWindow(Blackbox *b, Window w, BScreen *s) { return; case Type_Dock: - // docks (such as kicker) cannot be moved, and appear on all workspaces + case Type_Menu: + // docks (such as kicker) and menus (as used by kde for the 'desktop menu' + // which mimics apple, cannot be moved, and appear on all workspaces + // also, these have no decorations functions &= ~(Func_Move); + decorations &= ~Decor_Titlebar; flags.stuck = True; case Type_Toolbar: - case Type_Menu: case Type_Utility: // these windows have minimal decorations, only a titlebar, and cannot // be resized or iconified @@ -1576,12 +1579,18 @@ bool BlackboxWindow::setInputFocus(void) { return True; } #endif - if (! frame.rect.intersects(screen->getRect())) { - // client is outside the screen, move it to the center - configure((screen->getWidth() - frame.rect.width()) / 2, - (screen->getHeight() - frame.rect.height()) / 2, - frame.rect.width(), frame.rect.height()); - } + /* + We only do this check for normal windows and dialogs because other windows + do this on purpose, such as kde's kicker, and we don't want to go moving + it. + */ + if (window_type == Type_Normal || window_type == Type_Dialog) + if (! frame.rect.intersects(screen->getRect())) { + // client is outside the screen, move it to the center + configure((screen->getWidth() - frame.rect.width()) / 2, + (screen->getHeight() - frame.rect.height()) / 2, + frame.rect.width(), frame.rect.height()); + } if (client.transientList.size() > 0) { // transfer focus to any modal transients @@ -2533,6 +2542,12 @@ void BlackboxWindow::mapRequestEvent(const XMapRequestEvent *re) { XSync(blackbox->getXDisplay(), False); // make sure the frame is mapped.. setInputFocus(); } + int x, y, rx, ry; + Window c, r; + unsigned int m; + XQueryPointer(screen->getBlackbox()->getXDisplay(), screen->getRootWindow(), + &r, &c, &rx, &ry, &x, &y, &m); + beginMove(rx, ry); break; } }