]> Dogcows Code - chaz/openbox/blobdiff - openbox/client_list_menu.c
use the right list in client_add_hide_notify, rename destructor to destroy_notify...
[chaz/openbox] / openbox / client_list_menu.c
index 6dc7881ee5ddadf86acf329f6a03da4fa4a660e6..77cfc1933121a0e31ce744a3434cc09274b715d4 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,11 +105,13 @@ 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
    when we make the actions! */
-static void desk_menu_execute(ObMenuEntry *self, guint state, gpointer data,
+static void desk_menu_execute(ObMenuEntry *self, ObMenuFrame *f,
+                              ObClient *c, guint state, gpointer data,
                               Time time)
 {
     ObAction *a;
@@ -123,7 +131,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 +164,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)
@@ -184,7 +194,7 @@ void client_list_menu_startup(gboolean reconfig)
     ObMenu *menu;
 
     if (!reconfig)
-        client_add_destructor(client_dest, NULL);
+        client_add_destroy_notify(client_dest, NULL);
 
     menu = menu_new(MENU_NAME, _("Desktops"), TRUE, NULL);
     menu_set_update_func(menu, self_update);
@@ -193,5 +203,5 @@ void client_list_menu_startup(gboolean reconfig)
 void client_list_menu_shutdown(gboolean reconfig)
 {
     if (!reconfig)
-        client_remove_destructor(client_dest);
+        client_remove_destroy_notify(client_dest);
 }
This page took 0.022513 seconds and 4 git commands to generate.