#include "plugin.h"
static GHashTable *menu_hash = NULL;
-GHashTable *menu_map = NULL;
#define FRAME_EVENTMASK (ButtonPressMask |ButtonMotionMask | EnterWindowMask | \
LeaveWindowMask)
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);
appearance_free(self->a_title);
XDestroyWindow(ob_display, self->title);
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);
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);
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));
menu_add_entry(s, menu_entry_new("exit", a));
menu_add_entry(m, menu_entry_new_submenu("long", s));
-
- m = menu_new("client menu", "client", NULL);
+
+ m = menu_new(NULL, "client", NULL);
a = action_from_string("iconify");
menu_add_entry(m, menu_entry_new("iconify", a));
a = action_from_string("toggleshade");
void menu_shutdown()
{
g_hash_table_destroy(menu_hash);
- g_hash_table_destroy(menu_map);
}
static Window createWindow(Window parent, unsigned long mask,
Menu *self;
self = g_new0(Menu, 1);
+ self->obwin.type = Window_Menu;
self->label = g_strdup(label);
self->name = g_strdup(name);
self->parent = 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(MENU_AS_WINDOW(self));
+ stacking_raise(MENU_AS_WINDOW(self));
+
return self;
}
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)
menu_entry_free(entry);
}
self->entries = NULL;
+ self->invalid = TRUE;
}
MIN(y, screen_physical_size.height - self->size.height));
if (!self->shown) {
- stacking_raise_internal(self->frame);
XMapWindow(ob_display, self->frame);
+ stacking_raise(MENU_AS_WINDOW(self));
self->shown = TRUE;
} else if (self->shown && self->open_submenu) {
menu_hide(self->open_submenu);