]> Dogcows Code - chaz/openbox/blobdiff - openbox/client_list_menu.c
um... hide the client menu when the window changes desktops. its not visible anymore...
[chaz/openbox] / openbox / client_list_menu.c
index 6dc7881ee5ddadf86acf329f6a03da4fa4a660e6..12c16815a432fd8899a6139d8a8ab54072dfa371 100644 (file)
@@ -38,13 +38,14 @@ typedef struct
     guint desktop;
 } DesktopData;
 
-static void desk_menu_update(ObMenuFrame *frame, gpointer data)
+static gboolean desk_menu_update(ObMenuFrame *frame, gpointer data)
 {
     ObMenu *menu = frame->menu;
     DesktopData *d = data;
     GList *it;
     gint i;
     gboolean empty = TRUE;
+    gboolean onlyiconic = TRUE;
 
     menu_clear_entries(menu);
 
@@ -73,8 +74,10 @@ static void desk_menu_update(ObMenuFrame *frame, gpointer data)
                 gchar *title = g_strdup_printf("(%s)", c->icon_title);
                 e = menu_add_normal(menu, i, title, acts, FALSE);
                 g_free(title);
-            } else
+            } else {
+                onlyiconic = FALSE;
                 e = menu_add_normal(menu, i, c->title, acts, FALSE);
+            }
 
             if (config_menu_client_list_icons
                 && (icon = client_icon(c, 32, 32))) {
@@ -85,8 +88,11 @@ static void desk_menu_update(ObMenuFrame *frame, gpointer data)
         }
     }
 
-    if (empty) {
-        /* no entries */
+    if (empty || onlyiconic) {
+        /* no entries or only iconified windows, so add a
+         * way to go to this desktop without uniconifying a window */
+        if (!empty)
+            menu_add_separator(menu, -1, NULL);
 
         GSList *acts = NULL;
         ObAction* act;
@@ -99,6 +105,7 @@ static void desk_menu_update(ObMenuFrame *frame, gpointer data)
         if (d->desktop == screen_desktop)
             e->data.normal.enabled = FALSE;
     }
+    return TRUE; /* always show */
 }
 
 /* executes it using the client in the actions, since we set that
@@ -123,7 +130,7 @@ static void desk_menu_destroy(ObMenu *menu, gpointer data)
     desktop_menus = g_slist_remove(desktop_menus, menu);
 }
 
-static void self_update(ObMenuFrame *frame, gpointer data)
+static gboolean self_update(ObMenuFrame *frame, gpointer data)
 {
     ObMenu *menu = frame->menu;
     guint i;
@@ -156,6 +163,8 @@ static void self_update(ObMenuFrame *frame, gpointer data)
         desktop_menus = g_slist_delete_link(desktop_menus, it);
         menu_entry_remove(menu_find_entry_id(menu, i));
     }
+
+    return TRUE; /* always show */
 }
 
 static void client_dest(ObClient *client, gpointer data)
This page took 0.021498 seconds and 4 git commands to generate.