all repos — openbox @ 0cd6f4e43c355ef6b568c769a4ecb2983d5f3fa6

openbox fork - make it a bit more like ryudo

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.
Mikael Magnusson mikachu@gmail.com
commit

0cd6f4e43c355ef6b568c769a4ecb2983d5f3fa6

parent

7cfaae8da9271a7bad4c73886c894a14cbf456e7

3 files changed, 17 insertions(+), 30 deletions(-)

jump to
M openbox/client_menu.copenbox/client_menu.c

@@ -118,7 +118,8 @@ {

gint x, y; gulong ignore_start; - g_assert(c); + if (!c) + return; if (!config_focus_under_mouse) ignore_start = event_start_ignore_all_enters();
M openbox/menu.copenbox/menu.c

@@ -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 @@ "menu.xml");

} 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;
M openbox/menuframe.copenbox/menuframe.c

@@ -61,6 +61,19 @@ RrDepth(ob_rr_inst), InputOutput,

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 @@ }

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 @@ RrAppearanceFree(a_sep);

if (reconfig) return; + client_remove_destroy_notify(client_dest); g_hash_table_destroy(menu_frame_map); }

@@ -1088,22 +1103,6 @@ obt_main_loop_timeout_remove(ob_main_loop, submenu_show_timeout);

} if ((it = g_list_last(menu_frame_visible))) 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)