X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fscreen.c;h=3c83baa4d0f1a0a2218efca6cc727aac855467a2;hb=216a04bdd057c03a719a0908cd003503b4f73fdb;hp=d077c495e74b1f7c79b67f96ec028de4cc4ea228;hpb=432ac0983e058133e03885171f266dc4ba07f488;p=chaz%2Fopenbox diff --git a/openbox/screen.c b/openbox/screen.c index d077c495..3c83baa4 100644 --- a/openbox/screen.c +++ b/openbox/screen.c @@ -2,6 +2,8 @@ #include "prop.h" #include "screen.h" #include "client.h" +#include "frame.h" +#include "engine.h" #include "focus.h" #include @@ -251,8 +253,19 @@ void screen_set_desktop(guint num) if (old == num) return; - for (it = stacking_list; it != NULL; it = it->next) - client_showhide(it->data, FALSE); + /* hide windows from bottom to top */ + for (it = g_list_last(stacking_list); it != NULL; it = it->prev) { + Client *c = it->data; + if (c->frame->visible && !client_should_show(c)) + engine_frame_hide(c->frame); + } + + /* show windows from top to bottom */ + for (it = stacking_list; it != NULL; it = it->next) { + Client *c = it->data; + if (!c->frame->visible && client_should_show(c)) + engine_frame_show(c->frame); + } /* force the callbacks to fire */ if (focus_client == NULL) @@ -356,15 +369,15 @@ void screen_show_desktop(gboolean show) Client *client = it->data; if (client->type == Type_Desktop) client_focus(client); - else - client_showhide(client, FALSE); + else if (client->frame->visible && !client_should_show(client)) + engine_frame_hide(client->frame); } } else { /* top to bottom */ for (it = stacking_list; it != NULL; it = it->next) { Client *client = it->data; - if (client->type != Type_Desktop) - client_showhide(client, FALSE); + if (!client->frame->visible && client_should_show(client)) + engine_frame_show(client->frame); } }