]> 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 208b31c1addbc5e42006dfeec82ab5b577fccb84..77cfc1933121a0e31ce744a3434cc09274b715d4 100644 (file)
@@ -38,14 +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 icons = FALSE;
     gboolean empty = TRUE;
+    gboolean onlyiconic = TRUE;
 
     menu_clear_entries(menu);
 
@@ -61,11 +61,6 @@ static void desk_menu_update(ObMenuFrame *frame, gpointer data)
 
             empty = FALSE;
 
-            if (!icons && c->iconic) {
-                icons = TRUE;
-                menu_add_separator(menu, -1, NULL);
-            }
-
             act = action_from_string("Activate",
                                      OB_USER_ACTION_MENU_SELECTION);
             act->data.activate.any.c = c;
@@ -74,9 +69,15 @@ static void desk_menu_update(ObMenuFrame *frame, gpointer data)
                                      OB_USER_ACTION_MENU_SELECTION);
             act->data.desktop.desk = d->desktop;
             acts = g_slist_append(acts, act);
-            e = menu_add_normal(menu, i,
-                                (c->iconic ? c->icon_title : c->title),
-                                acts, FALSE);
+
+            if (c->iconic) {
+                gchar *title = g_strdup_printf("(%s)", c->icon_title);
+                e = menu_add_normal(menu, i, title, acts, FALSE);
+                g_free(title);
+            } 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))) {
@@ -87,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;
@@ -101,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;
@@ -125,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;
@@ -158,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)
@@ -186,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);
@@ -195,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.02241 seconds and 4 git commands to generate.