]> code.delx.au - spectrwm/commitdiff
Fix segfault when a ConfigureRequest is sent to a window in a hidden ws.
authorReginald Kennedy <rk@rejii.com>
Sat, 4 Aug 2012 08:08:12 +0000 (16:08 +0800)
committerReginald Kennedy <rk@rejii.com>
Sat, 4 Aug 2012 08:08:16 +0000 (16:08 +0800)
spectrwm.c

index 83b22ea08bdceb417b473de5e3964ba4933f1f72..e8ffe1105e4edf8373af6a112c1bc997717118ac 100644 (file)
@@ -7179,16 +7179,25 @@ configurerequest(xcb_configure_request_event_t *e)
                DPRINTF(", Sent: %s\n", YESNO((mask != 0)));
        } else if ((!win->manual || win->quirks & SWM_Q_ANYWHERE) &&
            !(win->ewmh_flags & EWMH_F_FULLSCREEN)) {
-               win->g_float.x = e->x - X(win->ws->r);
-               win->g_float.y = e->y - Y(win->ws->r);
+               win->g_float.x = e->x;
+               win->g_float.y = e->y;
+               if (win->ws->r) {
+                       win->g_float.x -= X(win->ws->r);
+                       win->g_float.y -= Y(win->ws->r);
+               } else if (win->ws->old_r) {
+                       win->g_float.x -= X(win->ws->old_r);
+                       win->g_float.y -= Y(win->ws->old_r);
+               }
+
                win->g_float.w = e->width;
                win->g_float.h = e->height;
                win->g_floatvalid = 1;
 
                if (win->floating) {
-                       win->g = win->g_float;
-                       win->g.x += X(win->ws->r);
-                       win->g.y += Y(win->ws->r);
+                       win->g.x = e->x;
+                       win->g.y = e->y;
+                       win->g.w = e->width;
+                       win->g.h = e->height;
                        update_window(win);
                } else {
                        config_win(win, e);