fix invalid read of notification popup after delete
This commit is contained in:
parent
288fea3b3e
commit
046aecdf06
|
@ -178,6 +178,14 @@ _notification_popup_place_coords_get(int zw, int zh, int ow, int oh, int pos, in
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_notification_popup_del_cb(void *obj)
|
||||||
|
{
|
||||||
|
Popup_Data *popup = e_object_data_get(obj);
|
||||||
|
|
||||||
|
popup->win = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static Popup_Data *
|
static Popup_Data *
|
||||||
_notification_popup_new(E_Notification_Notify *n, unsigned id)
|
_notification_popup_new(E_Notification_Notify *n, unsigned id)
|
||||||
{
|
{
|
||||||
|
@ -219,6 +227,8 @@ _notification_popup_new(E_Notification_Notify *n, unsigned id)
|
||||||
popup->id = id;
|
popup->id = id;
|
||||||
/* Create the popup window */
|
/* Create the popup window */
|
||||||
popup->win = e_popup_new(zone, 0, 0, 0, 0);
|
popup->win = e_popup_new(zone, 0, 0, 0, 0);
|
||||||
|
E_OBJECT_DEL_SET(popup->win, _notification_popup_del_cb);
|
||||||
|
e_object_data_set(E_OBJECT(popup->win), popup);
|
||||||
e_popup_name_set(popup->win, "_e_popup_notification");
|
e_popup_name_set(popup->win, "_e_popup_notification");
|
||||||
popup->e = popup->win->evas;
|
popup->e = popup->win->evas;
|
||||||
|
|
||||||
|
@ -283,6 +293,7 @@ _notification_popup_place(Popup_Data *popup,
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
Evas_Object *o;
|
Evas_Object *o;
|
||||||
|
|
||||||
|
if (!popup->win) return pos;
|
||||||
_notification_popup_place_coords_get(popup->win->zone->w, popup->win->zone->h, popup->win->w, popup->win->h, pos, &x, &y);
|
_notification_popup_place_coords_get(popup->win->zone->w, popup->win->zone->h, popup->win->w, popup->win->h, pos, &x, &y);
|
||||||
e_popup_move(popup->win, x, y);
|
e_popup_move(popup->win, x, y);
|
||||||
EINA_LIST_FOREACH(popup->mirrors, l, o)
|
EINA_LIST_FOREACH(popup->mirrors, l, o)
|
||||||
|
@ -494,7 +505,7 @@ _notification_popdown(Popup_Data *popup,
|
||||||
{
|
{
|
||||||
E_FREE_FUNC(popup->timer, ecore_timer_del);
|
E_FREE_FUNC(popup->timer, ecore_timer_del);
|
||||||
popup->mirrors = eina_list_free(popup->mirrors);
|
popup->mirrors = eina_list_free(popup->mirrors);
|
||||||
e_object_del(E_OBJECT(popup->win));
|
if (popup->win) e_object_del(E_OBJECT(popup->win));
|
||||||
if (popup->notif)
|
if (popup->notif)
|
||||||
{
|
{
|
||||||
e_notification_notify_close(popup->notif, reason);
|
e_notification_notify_close(popup->notif, reason);
|
||||||
|
|
Loading…
Reference in New Issue