////////////////////////////////////
-static void
-_e_comp_object_autoclose_cleanup(Eina_Bool already_del)
-{
- E_Comp *comp = e_comp_get();
-
- if (comp->autoclose.obj)
- {
- e_comp_ungrab_input(0, 1);
- if (comp->autoclose.del_cb)
- comp->autoclose.del_cb(comp->autoclose.data, comp->autoclose.obj);
- else if (!already_del)
- {
- evas_object_hide(comp->autoclose.obj);
- E_FREE_FUNC(comp->autoclose.obj, evas_object_del);
- }
- E_FREE_FUNC(comp->autoclose.rect, evas_object_del);
- }
- comp->autoclose.obj = NULL;
- comp->autoclose.data = NULL;
- comp->autoclose.del_cb = NULL;
- comp->autoclose.key_cb = NULL;
- E_FREE_FUNC(comp->autoclose.key_handler, ecore_event_handler_del);
-}
-
-static void
-_e_comp_object_autoclose_mouse_up_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
-{
- Evas_Event_Mouse_Up *ev = event_info;
- if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
- _e_comp_object_autoclose_cleanup(0);
-}
-
-static void
-_e_comp_object_autoclose_setup(Evas_Object *obj)
-{
- E_Comp *comp = e_comp_get();
-
- if (!comp->autoclose.rect)
- {
- /* create rect just below autoclose object to catch mouse events */
- comp->autoclose.rect = evas_object_rectangle_add(comp->evas);
- evas_object_move(comp->autoclose.rect, 0, 0);
- evas_object_resize(comp->autoclose.rect, comp->w, comp->h);
- evas_object_show(comp->autoclose.rect);
- evas_object_name_set(comp->autoclose.rect, "e_comp->autoclose.rect");
- evas_object_color_set(comp->autoclose.rect, 0, 0, 0, 0);
- evas_object_event_callback_add(comp->autoclose.rect, EVAS_CALLBACK_MOUSE_UP, _e_comp_object_autoclose_mouse_up_cb, comp);
- e_comp_grab_input(0, 1);
- }
- evas_object_layer_set(comp->autoclose.rect, evas_object_layer_get(obj) - 1);
- evas_object_focus_set(obj, 1);
-}
-
-static void
-_e_comp_object_autoclose_show(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
-{
- _e_comp_object_autoclose_setup(obj);
- evas_object_event_callback_del(obj, EVAS_CALLBACK_SHOW, _e_comp_object_autoclose_show);
-}
-
-static void
-_e_comp_object_autoclose_del(void *data EINA_UNUSED, 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);
- _e_comp_object_autoclose_cleanup(1);
- if (e_client_focused_get()) return;
-
- E_Zone *zone = e_zone_current_get();
- if (!zone) return;
-
- E_Policy_Zone *policy_zone = e_comp_screen_policy_zone_get(zone);
- e_policy_zone_focus_reset(policy_zone);
-}
-
-EINTERN void
-e_comp_object_util_autoclose(Evas_Object *obj, E_Comp_Object_Autoclose_Cb del_cb, E_Comp_Object_Key_Cb cb, const void *data)
-{
- E_Comp *comp;
- SOFT_ENTRY();
-
- comp = e_comp_get();
- if (comp->autoclose.obj)
- {
- if (comp->autoclose.obj == obj) return;
- evas_object_event_callback_del_full(comp->autoclose.obj, EVAS_CALLBACK_DEL, _e_comp_object_autoclose_del, comp);
- comp->autoclose.obj = obj;
- comp->autoclose.del_cb = del_cb;
- comp->autoclose.key_cb = cb;
- comp->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, comp);
- evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _e_comp_object_autoclose_del, comp);
- return;
- }
- comp->autoclose.obj = obj;
- comp->autoclose.del_cb = del_cb;
- comp->autoclose.key_cb = cb;
- comp->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, comp);
- evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _e_comp_object_autoclose_del, comp);
-}
-
E_API unsigned int
e_comp_object_is_animating(Evas_Object *obj)
{