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
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
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;
}
}