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:
parent
7cfaae8da9
commit
0cd6f4e43c
3 changed files with 17 additions and 30 deletions
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue