X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=openbox%2Fscreen.c;h=3819a3b1415cf70ff8becbaabe2ed45bb4eef9d2;hb=b23476ed5855bf92d6e0038bdcecf0141849ddea;hp=9ac0ea98723dca674edf99de6ca9fb49723f309a;hpb=9a3f05a780f8cbfeb68626552d25c48ab0245ca3;p=chaz%2Fopenbox diff --git a/openbox/screen.c b/openbox/screen.c index 9ac0ea98..3819a3b1 100644 --- a/openbox/screen.c +++ b/openbox/screen.c @@ -642,10 +642,10 @@ void screen_desktop_popup(guint d, gboolean show) pager_popup_position(desktop_cycle_popup, CenterGravity, a->x + a->width / 2, a->y + a->height / 2); pager_popup_icon_size_multiplier(desktop_cycle_popup, - screen_desktop_layout.columns / - screen_desktop_layout.rows, - screen_desktop_layout.rows/ - screen_desktop_layout.columns); + (screen_desktop_layout.columns / + screen_desktop_layout.rows) / 2, + (screen_desktop_layout.rows/ + screen_desktop_layout.columns) / 2); pager_popup_max_width(desktop_cycle_popup, MAX(a->width/3, POPUP_WIDTH)); pager_popup_show(desktop_cycle_popup, screen_desktop_names[d], d); @@ -659,11 +659,12 @@ guint screen_cycle_desktop(ObDirection dir, gboolean wrap, gboolean linear, static guint d = (guint)-1; guint ret; + if (d == (guint)-1) + d = screen_desktop; + if ((cancel || done) && dialog) goto show_cycle_dialog; - if (d == (guint)-1) - d = screen_desktop; get_row_col(d, &r, &c); if (linear) { @@ -905,7 +906,7 @@ void screen_update_desktop_names() screen_num_desktops); } -void screen_show_desktop(gboolean show, gboolean restore_focus) +void screen_show_desktop(gboolean show, ObClient *show_only) { GList *it; @@ -914,19 +915,25 @@ void screen_show_desktop(gboolean show, gboolean restore_focus) screen_showing_desktop = show; if (show) { - /* bottom to top */ + /* hide windows bottom to top */ for (it = g_list_last(stacking_list); it; it = g_list_previous(it)) { if (WINDOW_IS_CLIENT(it->data)) { ObClient *client = it->data; client_showhide(client); } } - } else { - /* top to bottom */ + } + else { + /* restore windows top to bottom */ for (it = stacking_list; it; it = g_list_next(it)) { if (WINDOW_IS_CLIENT(it->data)) { ObClient *client = it->data; - client_showhide(client); + if (client_should_show(client)) { + if (!show_only || client == show_only) + client_show(client); + else + client_iconify(client, TRUE, FALSE, TRUE); + } } } } @@ -940,7 +947,8 @@ void screen_show_desktop(gboolean show, gboolean restore_focus) client_focus(it->data)) break; } - } else if (restore_focus) { + } + else if (!show_only) { ObClient *c; /* use NULL for the "old" argument because the desktop was focused