]> Dogcows Code - chaz/openbox/blobdiff - openbox/menu.c
add (optional) support for showing a busy cursor via startup notification
[chaz/openbox] / openbox / menu.c
index 611a53bc897d1fddb0aadd0929a96b59122e1d87..3373616fef026758c2789ffe8bbe6872eefcc9e8 100644 (file)
@@ -8,7 +8,6 @@
 #include "plugin.h"
 
 static GHashTable *menu_hash = NULL;
-GHashTable *menu_map = NULL;
 
 #define FRAME_EVENTMASK (ButtonPressMask |ButtonMotionMask | EnterWindowMask | \
                         LeaveWindowMask)
@@ -34,9 +33,9 @@ void menu_destroy_hash_value(Menu *self)
     g_free(self->label);
     g_free(self->name);
 
-    g_hash_table_remove(menu_map, &self->title);
-    g_hash_table_remove(menu_map, &self->frame);
-    g_hash_table_remove(menu_map, &self->items);
+    g_hash_table_remove(window_map, &self->title);
+    g_hash_table_remove(window_map, &self->frame);
+    g_hash_table_remove(window_map, &self->items);
 
     stacking_remove(self);
 
@@ -53,7 +52,7 @@ void menu_entry_free(MenuEntry *self)
     g_free(self->label);
     action_free(self->action);
 
-    g_hash_table_remove(menu_map, &self->item);
+    g_hash_table_remove(window_map, &self->item);
 
     appearance_free(self->a_item);
     appearance_free(self->a_disabled);
@@ -73,7 +72,6 @@ void menu_startup()
     menu_hash = g_hash_table_new_full(g_str_hash, g_str_equal,
                                       menu_destroy_hash_key,
                                       (GDestroyNotify)menu_destroy_hash_value);
-    menu_map = g_hash_table_new(g_int_hash, g_int_equal);
 
     m = menu_new(NULL, "root", NULL);
  
@@ -92,13 +90,13 @@ void menu_startup()
 
     menu_add_entry(m, menu_entry_new_submenu("subz", s));
 
-    /*
     t = (Menu *)plugin_create("timed_menu");
-    a = action_from_string("execute");
-    a->data.execute.path = g_strdup("xeyes");
-    menu_add_entry(t, menu_entry_new("xeyes", a));
-    menu_add_entry(m, menu_entry_new_submenu("timed", t));
-    */
+    if (t) {
+        a = action_from_string("execute");
+        a->data.execute.path = g_strdup("xeyes");
+        menu_add_entry(t, menu_entry_new("xeyes", a));
+        menu_add_entry(m, menu_entry_new_submenu("timed", t));
+    }
     
     s = menu_new("empty", "chub", m);
     menu_add_entry(m, menu_entry_new_submenu("empty", s));
@@ -121,7 +119,7 @@ void menu_startup()
     menu_add_entry(s, menu_entry_new("exit", a));
 
     menu_add_entry(m, menu_entry_new_submenu("long", s));
-
+    
     m = menu_new(NULL, "client", NULL);
     a = action_from_string("iconify");
     menu_add_entry(m, menu_entry_new("iconify", a));
@@ -137,7 +135,6 @@ void menu_startup()
 void menu_shutdown()
 {
     g_hash_table_destroy(menu_hash);
-    g_hash_table_destroy(menu_map);
 }
 
 static Window createWindow(Window parent, unsigned long mask,
@@ -195,12 +192,13 @@ Menu *menu_new_full(char *label, char *name, Menu *parent,
     self->a_title = appearance_copy(theme_a_menu_title);
     self->a_items = appearance_copy(theme_a_menu);
 
-    g_hash_table_insert(menu_map, &self->frame, self);
-    g_hash_table_insert(menu_map, &self->title, self);
-    g_hash_table_insert(menu_map, &self->items, self);
+    g_hash_table_insert(window_map, &self->frame, self);
+    g_hash_table_insert(window_map, &self->title, self);
+    g_hash_table_insert(window_map, &self->items, self);
     g_hash_table_insert(menu_hash, g_strdup(name), self);
 
-    stacking_add(self);
+    stacking_add(MENU_AS_WINDOW(self));
+    stacking_raise(MENU_AS_WINDOW(self));
 
     return self;
 }
@@ -258,7 +256,7 @@ void menu_add_entry(Menu *menu, MenuEntry *entry)
 
     menu->invalid = TRUE;
 
-    g_hash_table_insert(menu_map, &entry->item, menu);
+    g_hash_table_insert(window_map, &entry->item, menu);
 }
 
 void menu_show(char *name, int x, int y, Client *client)
@@ -311,6 +309,7 @@ void menu_clear(Menu *self) {
        menu_entry_free(entry);
     }
     self->entries = NULL;
+    self->invalid = TRUE;
 }
 
 
@@ -356,9 +355,6 @@ void menu_control_show(Menu *self, int x, int y, Client *client) {
              MIN(y, screen_physical_size.height - self->size.height));
 
     if (!self->shown) {
-        /* XXX gotta add to the stacking list first!
-           stacking_raise(MENU_AS_WINDOW(self));
-        */
        XMapWindow(ob_display, self->frame);
         stacking_raise(MENU_AS_WINDOW(self));
        self->shown = TRUE;
This page took 0.027916 seconds and 4 git commands to generate.