X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=openbox%2Fscreen.c;h=7e02bff43accde12621ba2eb7438d99b0a24560d;hb=c62fefb0677aaf4dd5f13fc91a0261711507fab8;hp=d092ec288934bcd072b2b87ebf4364e4362859d8;hpb=84b8cf165ab47a5cfc3e431be1b73d1613b12524;p=chaz%2Fopenbox diff --git a/openbox/screen.c b/openbox/screen.c index d092ec28..7e02bff4 100644 --- a/openbox/screen.c +++ b/openbox/screen.c @@ -27,6 +27,7 @@ #include "moveresize.h" #include "config.h" #include "screen.h" +#include "composite.h" #include "client.h" #include "session.h" #include "frame.h" @@ -490,13 +491,16 @@ void screen_resize() for (it = client_list; it; it = g_list_next(it)) client_move_onscreen(it->data, FALSE); + + /* this needs to be setup whenever the root window's size changes */ + composite_setup_root_window(); } void screen_set_num_desktops(guint num) { guint old; gulong *viewport; - GList *it; + GList *it, *stacking_copy; g_assert(num > 0); @@ -516,11 +520,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(CLIENT_AS_WINDOW(c)); + } } /* change our struts/area to match (after moving windows) */