]> Dogcows Code - chaz/openbox/blobdiff - openbox/client_list_menu.c
set a OB_ICONIFY_ALPHA define in misc.h for the 3 places to all use
[chaz/openbox] / openbox / client_list_menu.c
index 86a70af45c6f40dc9bb94b25e8f0567c70f2300e..258646843a9a68d46c56175ec3780eca8f597986 100644 (file)
@@ -38,7 +38,7 @@ 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;
@@ -84,6 +84,7 @@ static void desk_menu_update(ObMenuFrame *frame, gpointer data)
                 e->data.normal.icon_width = icon->width;
                 e->data.normal.icon_height = icon->height;
                 e->data.normal.icon_data = icon->data;
+                e->data.normal.icon_alpha = c->iconic ? OB_ICONIC_ALPHA : 0xff;
             }
         }
     }
@@ -105,11 +106,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;
@@ -129,39 +132,37 @@ 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;
-    GSList *it, *next;
+
+    menu_clear_entries(menu);
+
+    while (desktop_menus) {
+        menu_free(desktop_menus->data);
+        desktop_menus = g_slist_delete_link(desktop_menus, desktop_menus);
+    }
     
-    it = desktop_menus;
     for (i = 0; i < screen_num_desktops; ++i) {
-        if (!it) {
-            ObMenu *submenu;
-            gchar *name = g_strdup_printf("%s-%u", MENU_NAME, i);
-            DesktopData *data = g_new(DesktopData, 1);
+        ObMenu *submenu;
+        gchar *name = g_strdup_printf("%s-%u", MENU_NAME, i);
+        DesktopData *data = g_new(DesktopData, 1);
 
-            data->desktop = i;
-            submenu = menu_new(name, screen_desktop_names[i], FALSE, data);
-            menu_set_update_func(submenu, desk_menu_update);
-            menu_set_execute_func(submenu, desk_menu_execute);
-            menu_set_destroy_func(submenu, desk_menu_destroy);
+        data->desktop = i;
+        submenu = menu_new(name, screen_desktop_names[i], FALSE, data);
+        menu_set_update_func(submenu, desk_menu_update);
+        menu_set_execute_func(submenu, desk_menu_execute);
+        menu_set_destroy_func(submenu, desk_menu_destroy);
 
-            menu_add_submenu(menu, i, name);
+        menu_add_submenu(menu, i, name);
 
-            g_free(name);
+        g_free(name);
 
-            desktop_menus = g_slist_append(desktop_menus, submenu);
-        } else
-            it = g_slist_next(it);
-    }
-    for (; it; it = next, ++i) {
-        next = g_slist_next(it);
-        menu_free(it->data);
-        desktop_menus = g_slist_delete_link(desktop_menus, it);
-        menu_entry_remove(menu_find_entry_id(menu, i));
+        desktop_menus = g_slist_append(desktop_menus, submenu);
     }
+
+    return TRUE; /* always show */
 }
 
 static void client_dest(ObClient *client, gpointer data)
@@ -190,7 +191,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);
@@ -199,5 +200,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.025985 seconds and 4 git commands to generate.