summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJinYong Park <j4939.park@samsung.com>2017-12-18 14:08:08 +0900
committerJaehyun Cho <jae_hyun.cho@samsung.com>2017-12-18 14:08:09 +0900
commite8735068aca1717b19b3379d58ab592d8e34dd0e (patch)
treef474b104b1dfcdcf8d6691cd99c609587f9f6a76
parent845d6d1b57b207f09b351a923b02c5330907a5d4 (diff)
downloadefl-e8735068aca1717b19b3379d58ab592d8e34dd0e.tar.gz
Efl.Ui.Popup.Anchor: remove event callback when popup is deleted
Summary: When popup is deleted, popup didn't remove event callback which its parent and anchor object. So before popup destruction, detach anchor. Test Plan: elementary_test -to efl.ui.popup.anchor Reviewers: Jaehyun_Cho, herb, woohyun, jpeg, cedric Reviewed By: Jaehyun_Cho Differential Revision: https://phab.enlightenment.org/D5667
-rw-r--r--src/lib/elementary/efl_ui_popup_anchor.c46
-rw-r--r--src/lib/elementary/efl_ui_popup_anchor.eo1
2 files changed, 15 insertions, 32 deletions
diff --git a/src/lib/elementary/efl_ui_popup_anchor.c b/src/lib/elementary/efl_ui_popup_anchor.c
index c1bf965b8b..9112a0cc5b 100644
--- a/src/lib/elementary/efl_ui_popup_anchor.c
+++ b/src/lib/elementary/efl_ui_popup_anchor.c
@@ -23,16 +23,9 @@ _anchor_calc(Eo *obj)
Eina_Position2D pos = {0, 0};
- Eo *parent = efl_provider_find(obj, EFL_UI_WIN_CLASS);
- if (!parent)
- {
- ERR("Cannot find window parent");
- return;
- }
-
Eina_Rect a_geom = efl_gfx_geometry_get(pd->anchor);
Eina_Rect o_geom = efl_gfx_geometry_get(obj);
- Eina_Rect p_geom = efl_gfx_geometry_get(parent);
+ Eina_Rect p_geom = efl_gfx_geometry_get(ppd->win_parent);
pd->used_align = EFL_UI_POPUP_ALIGN_NONE;
@@ -214,14 +207,7 @@ _anchor_del_cb(void *data, const Efl_Event *ev EINA_UNUSED)
EFL_UI_POPUP_DATA_GET_OR_RETURN(data, ppd);
EFL_UI_POPUP_ANCHOR_DATA_GET(data, pd);
- Eo *parent = efl_provider_find(data, EFL_UI_WIN_CLASS);
- if (!parent)
- {
- ERR("Cannot find window parent");
- return;
- }
-
- efl_event_callback_del(parent, EFL_GFX_EVENT_RESIZE, _anchor_geom_cb, data);
+ efl_event_callback_del(ppd->win_parent, EFL_GFX_EVENT_RESIZE, _anchor_geom_cb, data);
pd->anchor = NULL;
//Add align calc only
@@ -233,18 +219,12 @@ _anchor_del_cb(void *data, const Efl_Event *ev EINA_UNUSED)
static void
_anchor_detach(Eo *obj)
{
+ EFL_UI_POPUP_DATA_GET_OR_RETURN(obj, ppd);
EFL_UI_POPUP_ANCHOR_DATA_GET(obj, pd);
if (!pd->anchor) return;
- Eo *parent = efl_provider_find(obj, EFL_UI_WIN_CLASS);
- if (!parent)
- {
- ERR("Cannot find window parent");
- return;
- }
-
- efl_event_callback_del(parent, EFL_GFX_EVENT_RESIZE, _anchor_geom_cb, obj);
+ efl_event_callback_del(ppd->win_parent, EFL_GFX_EVENT_RESIZE, _anchor_geom_cb, obj);
efl_event_callback_del(pd->anchor, EFL_GFX_EVENT_RESIZE, _anchor_geom_cb, obj);
efl_event_callback_del(pd->anchor, EFL_GFX_EVENT_MOVE, _anchor_geom_cb, obj);
efl_event_callback_del(pd->anchor, EFL_EVENT_DEL, _anchor_del_cb, obj);
@@ -260,14 +240,7 @@ _efl_ui_popup_anchor_anchor_set(Eo *obj, Efl_Ui_Popup_Anchor_Data *pd, Eo *ancho
if (anchor)
{
- Eo *parent = efl_provider_find(obj, EFL_UI_WIN_CLASS);
- if (!parent)
- {
- ERR("Cannot find window parent");
- return;
- }
-
- efl_event_callback_add(parent, EFL_GFX_EVENT_RESIZE, _anchor_geom_cb, obj);
+ efl_event_callback_add(ppd->win_parent, EFL_GFX_EVENT_RESIZE, _anchor_geom_cb, obj);
efl_event_callback_add(anchor, EFL_GFX_EVENT_RESIZE, _anchor_geom_cb, obj);
efl_event_callback_add(anchor, EFL_GFX_EVENT_MOVE, _anchor_geom_cb, obj);
efl_event_callback_add(anchor, EFL_EVENT_DEL, _anchor_del_cb, obj);
@@ -369,4 +342,13 @@ _efl_ui_popup_anchor_efl_object_constructor(Eo *obj,
return obj;
}
+EOLIAN static void
+_efl_ui_popup_anchor_efl_object_destructor(Eo *obj,
+ Efl_Ui_Popup_Anchor_Data *pd EINA_UNUSED)
+{
+ _anchor_detach(obj);
+
+ efl_destructor(efl_super(obj, MY_CLASS));
+}
+
#include "efl_ui_popup_anchor.eo.c"
diff --git a/src/lib/elementary/efl_ui_popup_anchor.eo b/src/lib/elementary/efl_ui_popup_anchor.eo
index 1bdd8684e6..9490e491ce 100644
--- a/src/lib/elementary/efl_ui_popup_anchor.eo
+++ b/src/lib/elementary/efl_ui_popup_anchor.eo
@@ -35,6 +35,7 @@ class Efl.Ui.Popup_Anchor(Efl.Ui.Popup)
}
implements {
Efl.Object.constructor;
+ Efl.Object.destructor;
Efl.Canvas.Group.group_calculate;
Efl.Gfx.position { set; }
}