- for (it = g_list_last(stacking_list); it; it = it->prev)
- for (sit = c->transients; sit; sit = sit->next)
- if (it->data == sit->data) /* found a transient */
- return it;
- return NULL;
+ win = g_new(Window, g_list_length(wins) + 1);
+
+ if (before == stacking_list)
+ win[0] = screen_support_win;
+ else if (!before)
+ win[0] = window_top(g_list_last(stacking_list)->data);
+ else
+ win[0] = window_top(g_list_previous(before)->data);
+
+ for (i = 1, it = wins; it; ++i, it = g_list_next(it)) {
+ win[i] = window_top(it->data);
+ g_assert(win[i] != None); /* better not call stacking shit before
+ setting your top level window value */
+ stacking_list = g_list_insert_before(stacking_list, before, it->data);
+ }
+
+#ifdef DEBUG
+ /* some debug checking of the stacking list's order */
+ for (it = stacking_list; ; it = next) {
+ next = g_list_next(it);
+ if (!next) break;
+ g_assert(window_layer(it->data) >= window_layer(next->data));
+ }
+#endif
+
+ XRestackWindows(ob_display, win, i);
+ g_free(win);
+
+ stacking_set_list();