]> Dogcows Code - chaz/openbox/blobdiff - openbox/client.c
warp desktops when you hit the edge of the screen while moving a window
[chaz/openbox] / openbox / client.c
index e3a602d5abf7394dd32359a0286bad190ceb9262..e58cc753733078743560748dcc0c7399e545aa73 100644 (file)
@@ -2613,11 +2613,18 @@ static void client_apply_startup_state(ObClient *self,
     else if (max_horz)
         client_maximize(self, TRUE, 1);
 
-    /* if the window hasn't been configured yet, then do so now */
-    if (!fullscreen && !max_vert && !max_horz) {
-        self->area = oldarea;
-        client_configure(self, x, y, w, h, FALSE, TRUE, FALSE);
-    }
+    /* if the window hasn't been configured yet, then do so now, in fact the
+       x,y,w,h may _not_ be the same as the area rect, which can end up
+       meaning that the client isn't properly moved/resized by the fullscreen
+       function
+       pho can cause this because it maps at size of the screen but not 0,0
+       so openbox moves it on screen to 0,0 (thus x,y=0,0 and area.x,y don't).
+       then fullscreen'ing makes it go to 0,0 which it thinks it already is at
+       cuz thats where the pre-fullscreen will be. however the actual area is
+       not, so this needs to be called even if we have fullscreened/maxed
+    */
+    self->area = oldarea;
+    client_configure(self, x, y, w, h, FALSE, TRUE, FALSE);
 
     /* set the desktop hint, to make sure that it always exists */
     PROP_SET32(self->window, net_wm_desktop, cardinal, self->desktop);
@@ -3029,6 +3036,9 @@ void client_fullscreen(ObClient *self, gboolean fs)
         RECT_SET(self->pre_fullscreen_area, 0, 0, 0, 0);
     }
 
+    ob_debug("Window %s going fullscreen (%d)\n",
+             self->title, self->fullscreen);
+
     client_setup_decor_and_functions(self, FALSE);
     client_move_resize(self, x, y, w, h);
 
This page took 0.025665 seconds and 4 git commands to generate.