X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=openbox%2Fscreen.c;h=3819a3b1415cf70ff8becbaabe2ed45bb4eef9d2;hb=65d50861ada11f5409680de285f461f16e78c090;hp=190468aa93dda8478313b52fc0e48bf7e3a9170b;hpb=7f262bc2a0733a77ae5a30752aecdcf4ba35f223;p=chaz%2Fopenbox diff --git a/openbox/screen.c b/openbox/screen.c index 190468aa..3819a3b1 100644 --- a/openbox/screen.c +++ b/openbox/screen.c @@ -276,6 +276,7 @@ gboolean screen_annex(const gchar *program_name) supported[i++] = prop_atoms.net_wm_user_time_window; supported[i++] = prop_atoms.net_frame_extents; supported[i++] = prop_atoms.net_request_frame_extents; + supported[i++] = prop_atoms.net_restack_window; supported[i++] = prop_atoms.net_startup_id; #ifdef SYNC supported[i++] = prop_atoms.net_wm_sync_request; @@ -640,6 +641,11 @@ void screen_desktop_popup(guint d, gboolean show) a = screen_physical_area_monitor(0); 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) / 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); @@ -649,9 +655,12 @@ void screen_desktop_popup(guint d, gboolean show) guint screen_cycle_desktop(ObDirection dir, gboolean wrap, gboolean linear, gboolean dialog, gboolean done, gboolean cancel) { - guint d, r, c; + guint r, c; + static guint d = (guint)-1; + guint ret; - d = screen_desktop; + if (d == (guint)-1) + d = screen_desktop; if ((cancel || done) && dialog) goto show_cycle_dialog; @@ -771,7 +780,12 @@ show_cycle_dialog: screen_desktop_popup(d, TRUE); } else screen_desktop_popup(0, FALSE); - return d; + ret = d; + + if (!dialog || cancel || done) + d = (guint)-1; + + return ret; } void screen_update_layout() @@ -892,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; @@ -901,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); + } } } } @@ -927,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