]> Dogcows Code - chaz/openbox/blobdiff - openbox/screen.c
when un-showing the desktop if a window is getting shown, iconify the others so just...
[chaz/openbox] / openbox / screen.c
index a5906d25235e3aac31095a331f9b1599c8e0c9e5..3819a3b1415cf70ff8becbaabe2ed45bb4eef9d2 100644 (file)
@@ -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 / 2,
-                                         screen_desktop_layout.rows/
-                                         screen_desktop_layout.columns / 2);
+                                         (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
This page took 0.0225610000000001 seconds and 4 git commands to generate.