]> Dogcows Code - chaz/openbox/blobdiff - openbox/stacking.c
dont die if a non-visible window is raised/lowered
[chaz/openbox] / openbox / stacking.c
index be6d07d6daaa0d0a590da95eb97c5ebb18d0615b..f38d4a0b5561218ef12d7eb88b42b73b1bc8b512 100644 (file)
@@ -13,12 +13,18 @@ void stacking_set_list()
     GList *it;
     guint size = g_list_length(stacking_list);
 
+    /* on shutdown, don't update the properties, so that we can read it back
+       in on startup and re-stack the windows as they were before we shut down
+    */
+    if (ob_state == State_Exiting) return;
+
     /* create an array of the window ids (from bottom to top,
        reverse order!) */
     if (size > 0) {
        windows = g_new(Window, size);
        win_it = windows;
-       for (it = g_list_last(stacking_list); it != NULL; it = it->prev, ++win_it)
+       for (it = g_list_last(stacking_list); it != NULL;
+             it = it->prev, ++win_it)
            *win_it = ((Client*)it->data)->window;
     } else
        windows = NULL;
@@ -67,7 +73,8 @@ void stacking_raise(Client *client)
 
     stacking_list = g_list_insert_before(stacking_list, it, client);
 
-    XRestackWindows(ob_display, wins, 2);
+    if (client->frame.visible)
+        XRestackWindows(ob_display, wins, 2);
 
     stacking_set_list();
 }
@@ -96,7 +103,7 @@ void stacking_lower(Client *client)
     } else {
        while (it != stacking_list) {
            Client *c = it->data;
-           if (client->layer >= c->layer)
+           if (client->layer <= c->layer)
                break;
            it = it->prev;
        }
@@ -110,7 +117,8 @@ void stacking_lower(Client *client)
                                             it->next, client);
     }
 
-    XRestackWindows(ob_display, wins, 2);
+    if (client->frame.visible)
+        XRestackWindows(ob_display, wins, 2);
     stacking_set_list();
 }
 
This page took 0.020701 seconds and 4 git commands to generate.