forked from enlightenment/enlightenment
fix segv where menus are not actually popped down on deletion of gcc.
SVN revision: 79669
This commit is contained in:
parent
108b985e87
commit
7277ce21b1
|
@ -1590,6 +1590,7 @@ _e_gadcon_client_unpopulate(E_Gadcon_Client *gcc)
|
|||
{
|
||||
if (gcc->gadcon->shelf && (gcc->menu == gcc->gadcon->shelf->menu)) gcc->gadcon->shelf->menu = NULL;
|
||||
e_menu_post_deactivate_callback_set(gcc->menu, NULL, NULL);
|
||||
e_menu_deactivate(gcc->menu);
|
||||
e_object_del(E_OBJECT(gcc->menu));
|
||||
gcc->menu = NULL;
|
||||
}
|
||||
|
@ -1645,8 +1646,10 @@ _e_gadcon_gadget_move_to_pre_cb(void *data, E_Menu *m)
|
|||
E_Gadcon_Client *gcc;
|
||||
int n = 0;
|
||||
|
||||
e_menu_pre_activate_callback_set(m, NULL, NULL);
|
||||
gcc = data;
|
||||
printf("gcc = %p, magic = %x\n", gcc, gcc->e_obj_inherit.magic);
|
||||
e_menu_pre_activate_callback_set(m, NULL, NULL);
|
||||
printf("gcc = %p, magic = %x\n", gcc, gcc->e_obj_inherit.magic);
|
||||
|
||||
if (!gcc->client_class->func.is_site || gcc->client_class->func.is_site(E_GADCON_SITE_SHELF))
|
||||
_e_gadcon_add_locations_menu_for_site(m, gcc, E_GADCON_SITE_SHELF, &n);
|
||||
|
@ -1659,6 +1662,8 @@ _e_gadcon_gadget_move_to_pre_cb(void *data, E_Menu *m)
|
|||
_e_gadcon_add_locations_menu_for_site(m, gcc, E_GADCON_SITE_UNKNOWN, &n);
|
||||
}
|
||||
|
||||
extern void *eobj_watch;
|
||||
|
||||
EAPI void
|
||||
e_gadcon_client_add_location_menu(E_Gadcon_Client *gcc, E_Menu *menu)
|
||||
{
|
||||
|
@ -1675,8 +1680,11 @@ e_gadcon_client_add_location_menu(E_Gadcon_Client *gcc, E_Menu *menu)
|
|||
e_menu_item_label_set(mi, _("Move to"));
|
||||
e_util_menu_item_theme_icon_set(mi, "preferences-look");
|
||||
e_menu_item_submenu_set(mi, mn);
|
||||
e_object_unref(E_OBJECT(mn));
|
||||
printf("add menu gcc = %p, magic = %x\n", gcc, gcc->e_obj_inherit.magic);
|
||||
eobj_watch = gcc;
|
||||
e_menu_pre_activate_callback_set(mn, _e_gadcon_gadget_move_to_pre_cb, gcc);
|
||||
e_object_unref(E_OBJECT(mn));
|
||||
printf("add menu gcc = %p, magic = %x\n", gcc, gcc->e_obj_inherit.magic);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1715,6 +1723,7 @@ e_gadcon_client_util_menu_items_append(E_Gadcon_Client *gcc, E_Menu *menu_gadget
|
|||
e_menu_post_deactivate_callback_set(menu_main, _e_gadcon_client_cb_menu_post, gcc);
|
||||
gcc->menu = menu_main;
|
||||
|
||||
printf("new menu = %p\n", gcc->menu);
|
||||
if ((gcc->gadcon->shelf) || (gcc->gadcon->toolbar))
|
||||
{
|
||||
if (e_menu_item_nth(menu_gadget, 0))
|
||||
|
@ -2059,6 +2068,7 @@ _e_gadcon_client_delfn(void *d __UNUSED__, void *o)
|
|||
{
|
||||
if (gcc->gadcon->shelf && (gcc->menu == gcc->gadcon->shelf->menu)) gcc->gadcon->shelf->menu = NULL;
|
||||
e_menu_post_deactivate_callback_set(gcc->menu, NULL, NULL);
|
||||
e_menu_deactivate(gcc->menu);
|
||||
e_object_del(E_OBJECT(gcc->menu));
|
||||
gcc->menu = NULL;
|
||||
}
|
||||
|
@ -2083,6 +2093,12 @@ _e_gadcon_client_free(E_Gadcon_Client *gcc)
|
|||
if (gcc->o_frame) evas_object_del(gcc->o_frame);
|
||||
eina_stringshare_del(gcc->name);
|
||||
eina_stringshare_del(gcc->style);
|
||||
if (gcc->menu)
|
||||
{
|
||||
printf("free active menu %p\n", gcc->menu);
|
||||
e_menu_deactivate(gcc->menu);
|
||||
e_object_del(E_OBJECT(gcc->menu));
|
||||
}
|
||||
free(gcc);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue