Add a hook to unset the client in the open menu frame instead of closing it

Also nukes menu_frame_hide_all_client() as it is now unused.
This commit is contained in:
Mikael Magnusson 2010-01-18 16:48:00 +01:00 committed by Dana Jansens
parent 7cfaae8da9
commit 0cd6f4e43c
3 changed files with 17 additions and 30 deletions

View file

@ -118,7 +118,8 @@ static void client_menu_execute(ObMenuEntry *e, ObMenuFrame *f,
gint x, y;
gulong ignore_start;
g_assert(c);
if (!c)
return;
if (!config_focus_under_mouse)
ignore_start = event_start_ignore_all_enters();

View file

@ -58,13 +58,6 @@ static gunichar parse_shortcut(const gchar *label, gboolean allow_shortcut,
gchar **strippedlabel, guint *position,
gboolean *always_show);
static void client_dest(ObClient *client, gpointer data)
{
/* menus can be associated with a client, so close any that are since
we are disappearing now */
menu_frame_hide_all_client(client);
}
void menu_startup(gboolean reconfig)
{
gboolean loaded = FALSE;
@ -114,16 +107,10 @@ void menu_startup(gboolean reconfig)
}
g_assert(menu_parse_state.parent == NULL);
if (!reconfig)
client_add_destroy_notify(client_dest, NULL);
}
void menu_shutdown(gboolean reconfig)
{
if (!reconfig)
client_remove_destroy_notify(client_dest);
obt_xml_instance_unref(menu_parse_inst);
menu_parse_inst = NULL;

View file

@ -61,6 +61,19 @@ static Window createWindow(Window parent, gulong mask,
RrVisual(ob_rr_inst), mask, attrib);
}
static void client_dest(ObClient *client, gpointer data)
{
GList *it;
/* menus can be associated with a client, so null those refs since
we are disappearing now */
for (it = menu_frame_visible; it; it = g_list_next(it)) {
ObMenuFrame *f = it->data;
if (f->client == client)
f->client = NULL;
}
}
void menu_frame_startup(gboolean reconfig)
{
gint i;
@ -75,6 +88,7 @@ void menu_frame_startup(gboolean reconfig)
if (reconfig) return;
client_add_destroy_notify(client_dest, NULL);
menu_frame_map = g_hash_table_new(g_int_hash, g_int_equal);
}
@ -84,6 +98,7 @@ void menu_frame_shutdown(gboolean reconfig)
if (reconfig) return;
client_remove_destroy_notify(client_dest);
g_hash_table_destroy(menu_frame_map);
}
@ -1090,22 +1105,6 @@ void menu_frame_hide_all(void)
menu_frame_hide(it->data);
}
void menu_frame_hide_all_client(ObClient *client)
{
GList *it = g_list_last(menu_frame_visible);
if (it) {
ObMenuFrame *f = it->data;
if (f->client == client) {
if (config_submenu_show_delay) {
/* remove any submenu open requests */
obt_main_loop_timeout_remove(ob_main_loop,
submenu_show_timeout);
}
menu_frame_hide(f);
}
}
}
ObMenuFrame* menu_frame_under(gint x, gint y)
{
ObMenuFrame *ret = NULL;