fix systray gadget segv if menu up when tray item goes away
the systray gadget code didnt deal with this case of menu up but item vanishes. quite bad. now the menu is freed and hiddtne/popped down when the item is removed. fixes T8842 @fix
This commit is contained in:
parent
13a5e58e79
commit
029df828ea
|
@ -32,6 +32,13 @@ systray_notifier_item_free(Notifier_Item *item)
|
|||
}
|
||||
if (!ii)
|
||||
continue;
|
||||
if (ii->menu)
|
||||
{
|
||||
e_menu_post_deactivate_callback_set(ii->menu, NULL, NULL);
|
||||
e_object_del(E_OBJECT(ii->menu));
|
||||
ii->menu = NULL;
|
||||
e_menu_hide_all();
|
||||
}
|
||||
host_inst->ii_list = eina_inlist_remove(host_inst->ii_list,
|
||||
EINA_INLIST_GET(ii));
|
||||
evas_object_del(ii->icon);
|
||||
|
@ -156,6 +163,7 @@ _menu_post_deactivate(void *data, E_Menu *m)
|
|||
E_Menu_Item *mi;
|
||||
E_Gadcon *gadcon = data;
|
||||
E_DBusMenu_Item *item;
|
||||
Instance_Notifier_Host *host_inst;
|
||||
|
||||
item = e_object_data_get(E_OBJECT(m));
|
||||
if (item)
|
||||
|
@ -175,6 +183,18 @@ _menu_post_deactivate(void *data, E_Menu *m)
|
|||
}
|
||||
if (mi->submenu) e_menu_deactivate(mi->submenu);
|
||||
}
|
||||
EINA_INLIST_FOREACH(ctx->instances, host_inst)
|
||||
{
|
||||
Notifier_Item_Icon *ii;
|
||||
EINA_INLIST_FOREACH(host_inst->ii_list, ii)
|
||||
{
|
||||
if (ii->menu == m)
|
||||
{
|
||||
ii->menu = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
e_object_del(E_OBJECT(m));
|
||||
}
|
||||
|
||||
|
@ -235,8 +255,13 @@ _clicked_item_cb(void *data, Evas *evas, Evas_Object *obj EINA_UNUSED, void *eve
|
|||
if (!ii->item->dbus_item) return;
|
||||
root_item = ii->item->dbus_item;
|
||||
EINA_SAFETY_ON_FALSE_RETURN(root_item->is_submenu);
|
||||
|
||||
m = _item_submenu_new(root_item, NULL);
|
||||
if (ii->menu)
|
||||
{
|
||||
e_menu_post_deactivate_callback_set(ii->menu, NULL, NULL);
|
||||
e_object_del(E_OBJECT(ii->menu));
|
||||
ii->menu = NULL;
|
||||
}
|
||||
m = ii->menu = _item_submenu_new(root_item, NULL);
|
||||
e_gadcon_locked_set(gadcon, 1);
|
||||
e_menu_post_deactivate_callback_set(m, _menu_post_deactivate, gadcon);
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@ typedef struct _Notifier_Data
|
|||
EINA_INLIST;
|
||||
Notifier_Item *item;
|
||||
Evas_Object *icon;
|
||||
E_Menu *menu;
|
||||
} Notifier_Item_Icon;
|
||||
|
||||
struct _Instance_Notifier_Host
|
||||
|
|
Loading…
Reference in New Issue