]> Dogcows Code - chaz/openbox/blobdiff - openbox/client.c
add partial struts tho they arent useful eyt
[chaz/openbox] / openbox / client.c
index 08a80a486246e5a4b3f0dfff016926e4f2535057..c57c66e84571ec5e4ec90813ffb6e3a150722924 100644 (file)
@@ -233,8 +233,10 @@ void client_manage(Window window)
     self = g_new(ObClient, 1);
     self->obwin.type = Window_Client;
     self->window = window;
+
     client_get_all(self);
     client_restore_session_state(self);
+
     client_change_state(self);
 
     /* remove the client's border (and adjust re gravity) */
@@ -467,10 +469,13 @@ static void client_restore_session_state(ObClient *self)
     if (!(s)) return;
 
     RECT_SET(self->area, s->x, s->y, s->w, s->h);
-    XResizeWindow(ob_display, self->window, s->w, s->h);
     self->positioned = TRUE;
+    XResizeWindow(ob_display, self->window, s->w, s->h);
+
     self->desktop = s->desktop == DESKTOP_ALL ? s->desktop :
         MIN(screen_num_desktops - 1, s->desktop);
+    PROP_SET32(self->window, net_wm_desktop, cardinal, self->desktop);
+
     self->shaded = s->shaded;
     self->iconic = s->iconic;
     self->skip_pager = s->skip_pager;
@@ -698,7 +703,6 @@ static void client_get_desktop(ObClient *self)
        if (!trdesk)
            /* defaults to the current desktop */
            self->desktop = screen_desktop;
-
     }
     if (self->desktop != d) {
         /* set the desktop hint, to make sure that it always exists */
@@ -953,10 +957,7 @@ void client_update_normal_hints(ObClient *self)
 
     /* get the hints from the window */
     if (XGetWMNormalHints(ob_display, self->window, &size, &ret)) {
-        /* don't let apps tell me where to put transient windows, but only if
-           they have a valid parent */
-        self->positioned = !!(size.flags & (PPosition|USPosition)) &&
-            !self->transient_for;
+        self->positioned = !!(size.flags & (PPosition|USPosition));
 
        if (size.flags & PWinGravity) {
            self->gravity = size.win_gravity;
@@ -1241,9 +1242,6 @@ void client_update_wmhints(ObClient *self)
                 }
             }
 
-            /* the WM_HINTS can contain an icon */
-            client_update_icons(self);
-
             /* because the self->transient flag wont change from this call,
                we don't need to update the window's type and such, only its
                transient_for, and the transients lists of other windows in
@@ -1251,6 +1249,9 @@ void client_update_wmhints(ObClient *self)
             client_update_transient_for(self);
         }
 
+        /* the WM_HINTS can contain an icon */
+        client_update_icons(self);
+
        XFree(hints);
     }
 
@@ -1373,17 +1374,35 @@ void client_update_strut(ObClient *self)
 {
     guint num;
     guint32 *data;
+    gboolean got = FALSE;
+
+    if (PROP_GETA32(self->window, net_wm_strut_partial, cardinal,
+                    &data, &num)) {
+        if (num == 12) {
+            got = TRUE;
+            STRUT_PARTIAL_SET(self->strut,
+                              data[0], data[2], data[1], data[3],
+                              data[4], data[5], data[8], data[9],
+                              data[6], data[7], data[10], data[11]);
+        }
+        g_free(data);
+    }
 
-    if (!PROP_GETA32(self->window, net_wm_strut, cardinal, &data, &num)) {
-       STRUT_SET(self->strut, 0, 0, 0, 0);
-    } else {
-        if (num == 4)
-            STRUT_SET(self->strut, data[0], data[2], data[1], data[3]);
-        else
-            STRUT_SET(self->strut, 0, 0, 0, 0);
-       g_free(data);
+    if (!got &&
+        PROP_GETA32(self->window, net_wm_strut, cardinal, &data, &num)) {
+        if (num == 4) {
+            got = TRUE;
+            STRUT_PARTIAL_SET(self->strut,
+                              data[0], data[2], data[1], data[3],
+                              0, 0, 0, 0, 0, 0, 0, 0);
+        }
+        g_free(data);
     }
 
+    if (!got)
+        STRUT_PARTIAL_SET(self->strut, 0, 0, 0, 0,
+                          0, 0, 0, 0, 0, 0, 0, 0);
+
     /* updating here is pointless while we're being mapped cuz we're not in
        the client list yet */
     if (self->frame)
This page took 0.023366 seconds and 4 git commands to generate.