X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=openbox%2Fscreen.c;h=f9b1eb6c643da0489eb01ff139b8e794db1335ca;hb=4669203fd8f7dc2ac4aef40ba1a2ce4be404b00b;hp=d092ec288934bcd072b2b87ebf4364e4362859d8;hpb=84b8cf165ab47a5cfc3e431be1b73d1613b12524;p=chaz%2Fopenbox diff --git a/openbox/screen.c b/openbox/screen.c index d092ec28..f9b1eb6c 100644 --- a/openbox/screen.c +++ b/openbox/screen.c @@ -496,7 +496,7 @@ void screen_set_num_desktops(guint num) { guint old; gulong *viewport; - GList *it; + GList *it, *stacking_copy; g_assert(num > 0); @@ -516,11 +516,21 @@ void screen_set_num_desktops(guint num) /* the number of rows/columns will differ */ screen_update_layout(); - /* move windows on desktops that will no longer exist! */ - for (it = client_list; it; it = g_list_next(it)) { - ObClient *c = it->data; - if (c->desktop >= num && c->desktop != DESKTOP_ALL) - client_set_desktop(c, num - 1, FALSE, TRUE); + /* move windows on desktops that will no longer exist! + make a copy of the list cuz we're changing it */ + stacking_copy = g_list_copy(stacking_list); + for (it = g_list_last(stacking_copy); it; it = g_list_previous(it)) { + if (WINDOW_IS_CLIENT(it->data)) { + ObClient *c = it->data; + if (c->desktop != DESKTOP_ALL && c->desktop >= num) + client_set_desktop(c, num - 1, FALSE, TRUE); + /* raise all the windows that are on the current desktop which + is being merged */ + else if (screen_desktop == num - 1 && + (c->desktop == DESKTOP_ALL || + c->desktop == screen_desktop)) + stacking_raise(WINDOW_AS_CLIENT(c)); + } } /* change our struts/area to match (after moving windows) */