X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fscreen.c;h=0f42b81c9c0d776fa20d642d9aa8a26e8983675c;hb=07cabeb9467eff55132153a4b4715fcb45ba5e96;hp=d092ec288934bcd072b2b87ebf4364e4362859d8;hpb=84b8cf165ab47a5cfc3e431be1b73d1613b12524;p=chaz%2Fopenbox diff --git a/openbox/screen.c b/openbox/screen.c index d092ec28..0f42b81c 100644 --- a/openbox/screen.c +++ b/openbox/screen.c @@ -364,6 +364,15 @@ void screen_startup(gboolean reconfig) return; } +#ifdef USE_XCOMPOSITE + if (extensions_comp) { + /* Redirect window contents to offscreen pixmaps */ + XCompositeRedirectSubwindows(ob_display, + RootWindow(ob_display, ob_screen), + CompositeRedirectAutomatic); + } +#endif + /* get the initial size */ screen_resize(); @@ -496,7 +505,7 @@ void screen_set_num_desktops(guint num) { guint old; gulong *viewport; - GList *it; + GList *it, *stacking_copy; g_assert(num > 0); @@ -516,11 +525,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) */