]> Dogcows Code - chaz/openbox/blobdiff - src/Window.cc
Click Mouse Placement is BACK!#!#
[chaz/openbox] / src / Window.cc
index c32acbdfc738208a890185f1c2b6dcb888f853a8..90224fe5bb73f39dcfe945a94bf5d8bb0060a7b8 100644 (file)
@@ -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
@@ -1094,9 +1097,12 @@ void BlackboxWindow::getWMHints(void) {
 
     // add window to the appropriate group
     BWindowGroup *group = blackbox->searchGroup(client.window_group);
-    if (! group) // no group found, create it!
-      group = new BWindowGroup(blackbox, client.window_group);
-    group->addWindow(this);
+    if (! group) { // no group found, create it!
+      new BWindowGroup(blackbox, client.window_group);
+      group = blackbox->searchGroup(client.window_group);
+    }
+    if (group)
+      group->addWindow(this);
   }
 
   client.wm_hint_flags = wmhint->flags;
@@ -1573,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
@@ -2530,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;
   }
 }
This page took 0.022745 seconds and 4 git commands to generate.