clean up comp object autoclosing when overwriting existing autoclose object
This commit is contained in:
parent
e23019825e
commit
6b246c7c8a
|
@ -3289,15 +3289,14 @@ e_comp_object_effect_stop(Evas_Object *obj, Edje_Signal_Cb end_cb EINA_UNUSED)
|
||||||
////////////////////////////////////
|
////////////////////////////////////
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_comp_object_autoclose_cleanup(E_Comp *c)
|
_e_comp_object_autoclose_cleanup(E_Comp *c, Eina_Bool already_del)
|
||||||
{
|
{
|
||||||
if (c->autoclose.obj)
|
if (c->autoclose.obj)
|
||||||
{
|
{
|
||||||
c = e_comp_util_evas_object_comp_get(c->autoclose.obj);
|
|
||||||
e_comp_ungrab_input(c, 0, 1);
|
e_comp_ungrab_input(c, 0, 1);
|
||||||
if (c->autoclose.del_cb)
|
if (c->autoclose.del_cb)
|
||||||
c->autoclose.del_cb(c->autoclose.data, c->autoclose.obj);
|
c->autoclose.del_cb(c->autoclose.data, c->autoclose.obj);
|
||||||
else
|
else if (!already_del)
|
||||||
{
|
{
|
||||||
evas_object_hide(c->autoclose.obj);
|
evas_object_hide(c->autoclose.obj);
|
||||||
E_FREE_FUNC(c->autoclose.obj, evas_object_del);
|
E_FREE_FUNC(c->autoclose.obj, evas_object_del);
|
||||||
|
@ -3321,14 +3320,14 @@ _e_comp_object_autoclose_key_down_cb(void *data, int type EINA_UNUSED, void *eve
|
||||||
|
|
||||||
if (c->autoclose.key_cb)
|
if (c->autoclose.key_cb)
|
||||||
del = !c->autoclose.key_cb(c->autoclose.data, ev);
|
del = !c->autoclose.key_cb(c->autoclose.data, ev);
|
||||||
if (del) _e_comp_object_autoclose_cleanup(data);
|
if (del) _e_comp_object_autoclose_cleanup(data, 0);
|
||||||
return ECORE_CALLBACK_RENEW;
|
return ECORE_CALLBACK_RENEW;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_comp_object_autoclose_mouse_up_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
_e_comp_object_autoclose_mouse_up_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||||
{
|
{
|
||||||
_e_comp_object_autoclose_cleanup(data);
|
_e_comp_object_autoclose_cleanup(data, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -3339,17 +3338,18 @@ _e_comp_object_autoclose_setup(Evas_Object *obj)
|
||||||
if (!c->autoclose.rect)
|
if (!c->autoclose.rect)
|
||||||
{
|
{
|
||||||
c->autoclose.rect = evas_object_rectangle_add(c->evas);
|
c->autoclose.rect = evas_object_rectangle_add(c->evas);
|
||||||
|
evas_object_move(c->autoclose.rect, 0, 0);
|
||||||
|
evas_object_resize(c->autoclose.rect, c->man->w, c->man->h);
|
||||||
|
evas_object_show(c->autoclose.rect);
|
||||||
evas_object_name_set(c->autoclose.rect, "c->autoclose.rect");
|
evas_object_name_set(c->autoclose.rect, "c->autoclose.rect");
|
||||||
evas_object_color_set(c->autoclose.rect, 0, 0, 0, 0);
|
evas_object_color_set(c->autoclose.rect, 0, 0, 0, 0);
|
||||||
evas_object_event_callback_add(c->autoclose.rect, EVAS_CALLBACK_MOUSE_UP, _e_comp_object_autoclose_mouse_up_cb, c);
|
evas_object_event_callback_add(c->autoclose.rect, EVAS_CALLBACK_MOUSE_UP, _e_comp_object_autoclose_mouse_up_cb, c);
|
||||||
|
e_comp_grab_input(c, 0, 1);
|
||||||
}
|
}
|
||||||
evas_object_move(c->autoclose.rect, 0, 0);
|
|
||||||
evas_object_resize(c->autoclose.rect, c->man->w, c->man->h);
|
|
||||||
evas_object_layer_set(c->autoclose.rect, evas_object_layer_get(obj) - 1);
|
evas_object_layer_set(c->autoclose.rect, evas_object_layer_get(obj) - 1);
|
||||||
evas_object_show(c->autoclose.rect);
|
|
||||||
e_comp_shape_queue(c);
|
e_comp_shape_queue(c);
|
||||||
c->autoclose.key_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _e_comp_object_autoclose_key_down_cb, c);
|
if (!c->autoclose.key_handler)
|
||||||
e_comp_grab_input(c, 0, 1);
|
c->autoclose.key_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _e_comp_object_autoclose_key_down_cb, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -3363,7 +3363,7 @@ static void
|
||||||
_e_comp_object_autoclose_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
|
_e_comp_object_autoclose_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
|
||||||
{
|
{
|
||||||
evas_object_event_callback_del(obj, EVAS_CALLBACK_SHOW, _e_comp_object_autoclose_show);
|
evas_object_event_callback_del(obj, EVAS_CALLBACK_SHOW, _e_comp_object_autoclose_show);
|
||||||
_e_comp_object_autoclose_cleanup(data);
|
_e_comp_object_autoclose_cleanup(data, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI void
|
EAPI void
|
||||||
|
@ -3377,11 +3377,17 @@ e_comp_object_util_autoclose(Evas_Object *obj, E_Comp_Object_Autoclose_Cb del_cb
|
||||||
EINA_SAFETY_ON_NULL_RETURN(c);
|
EINA_SAFETY_ON_NULL_RETURN(c);
|
||||||
if (c->autoclose.obj)
|
if (c->autoclose.obj)
|
||||||
{
|
{
|
||||||
/* block overwrite of current autoclose object */
|
if (c->autoclose.obj == obj) return;
|
||||||
if (c->autoclose.obj != obj) return;
|
evas_object_event_callback_del_full(c->autoclose.obj, EVAS_CALLBACK_DEL, _e_comp_object_autoclose_del, c);
|
||||||
|
c->autoclose.obj = obj;
|
||||||
c->autoclose.del_cb = del_cb;
|
c->autoclose.del_cb = del_cb;
|
||||||
c->autoclose.key_cb = cb;
|
c->autoclose.key_cb = cb;
|
||||||
c->autoclose.data = (void*)data;
|
c->autoclose.data = (void*)data;
|
||||||
|
if (evas_object_visible_get(obj))
|
||||||
|
_e_comp_object_autoclose_setup(obj);
|
||||||
|
else
|
||||||
|
evas_object_event_callback_add(obj, EVAS_CALLBACK_SHOW, _e_comp_object_autoclose_show, c);
|
||||||
|
evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _e_comp_object_autoclose_del, c);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
c->autoclose.obj = obj;
|
c->autoclose.obj = obj;
|
||||||
|
|
Loading…
Reference in New Issue