]> Dogcows Code - chaz/openbox/blobdiff - src/Window.cc
don't click-to-place windows when they specify a position
[chaz/openbox] / src / Window.cc
index 7ce182dcb409e8a04b1da86916d66ddbadb4516f..cff95ec64e005e72ec7e68480e6edf0370d2a255 100644 (file)
@@ -216,7 +216,7 @@ OpenboxWindow::OpenboxWindow(Openbox &o, Window w, BScreen *s) : openbox(o) {
   }
   upsize();
 
-  Bool place_window = True;
+  place_window = true;
   if (openbox.isStartup() || flags.transient ||
       client.normal_hint_flags & (PPosition|USPosition)) {
     setGravityOffsets();
@@ -226,7 +226,7 @@ OpenboxWindow::OpenboxWindow(Openbox &o, Window w, BScreen *s) : openbox(o) {
         (signed) (frame.y + frame.y_border) >= 0 &&
         frame.x <= (signed) screen->size().w() &&
         frame.y <= (signed) screen->size().h()))
-      place_window = False;
+      place_window = false;
   }
 
   frame.window = createToplevelWindow(frame.x, frame.y, frame.width,
@@ -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 (screen->placementPolicy() == BScreen::ClickMousePlacement &&
+      place_window && !(flags.iconic || reassoc)) {
+    // 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();
+
 }
 
 
This page took 0.022487 seconds and 4 git commands to generate.