diff --git a/src/bin/e_popup.c b/src/bin/e_popup.c index cc4781056..2c624099c 100644 --- a/src/bin/e_popup.c +++ b/src/bin/e_popup.c @@ -15,8 +15,12 @@ _e_popup_autoclose_cleanup(void) { e_grabinput_release(0, e_comp_get(autoclose_popup)->ee_win); autoclose_popup->autoclose = 0; + if (autoclose_popup->del_cb) + autoclose_popup->del_cb(autoclose_popup->cb_data, autoclose_popup); + else + E_FREE_FUNC(autoclose_popup, e_object_del); } - E_FREE_FUNC(autoclose_popup, e_object_del); + autoclose_popup = NULL; E_FREE_FUNC(event_rect, evas_object_del); E_FREE_FUNC(key_handler, ecore_event_handler_del); } @@ -42,7 +46,7 @@ _e_popup_autoclose_key_down_cb(void *data EINA_UNUSED, int type EINA_UNUSED, voi Eina_Bool del = EINA_TRUE; if (autoclose_popup->key_cb) - del = !autoclose_popup->key_cb(autoclose_popup->key_data, ev); + del = !autoclose_popup->key_cb(autoclose_popup->cb_data, ev); if (del) _e_popup_autoclose_cleanup(); return ECORE_CALLBACK_RENEW; } @@ -271,13 +275,14 @@ e_popup_object_remove(E_Popup *pop, Evas_Object *obj) } EAPI void -e_popup_autoclose(E_Popup *pop, E_Popup_Key_Cb cb, const void *data) +e_popup_autoclose(E_Popup *pop, Ecore_End_Cb del_cb, E_Popup_Key_Cb cb, const void *data) { E_OBJECT_CHECK(pop); E_OBJECT_TYPE_CHECK(pop, E_POPUP_TYPE); pop->autoclose = 1; + pop->del_cb = del_cb; pop->key_cb = cb; - pop->key_data = (void*)data; + pop->cb_data = (void*)data; if (pop->visible) _e_popup_autoclose_setup(pop); } diff --git a/src/bin/e_popup.h b/src/bin/e_popup.h index 479d8e1d5..86107b3a2 100644 --- a/src/bin/e_popup.h +++ b/src/bin/e_popup.h @@ -26,7 +26,8 @@ struct _E_Popup Eina_List *objects; Eina_Stringshare *name; E_Popup_Key_Cb key_cb; - void *key_data; + Ecore_End_Cb del_cb; + void *cb_data; Eina_Bool visible : 1; Eina_Bool ignore_events : 1; @@ -48,6 +49,6 @@ EAPI void e_popup_layer_set(E_Popup *pop, E_Comp_Canvas_Layer comp_layer, EAPI void e_popup_name_set(E_Popup *pop, const char *name); EAPI void e_popup_object_add(E_Popup *pop, Evas_Object *obj); EAPI void e_popup_object_remove(E_Popup *pop, Evas_Object *obj); -EAPI void e_popup_autoclose(E_Popup *pop, E_Popup_Key_Cb cb, const void *data); +EAPI void e_popup_autoclose(E_Popup *pop, Ecore_End_Cb del_cb, E_Popup_Key_Cb cb, const void *data); #endif #endif diff --git a/src/modules/backlight/e_mod_main.c b/src/modules/backlight/e_mod_main.c index 3c192c84a..f7c579509 100644 --- a/src/modules/backlight/e_mod_main.c +++ b/src/modules/backlight/e_mod_main.c @@ -206,7 +206,7 @@ _backlight_popup_new(Instance *inst) 0, 1, 1, 1, 0, 0, 0, 0, 0.5, 1.0); e_gadcon_popup_content_set(inst->popup, inst->o_table); - e_popup_autoclose(inst->popup->win, _backlight_win_key_down_cb, inst); + e_popup_autoclose(inst->popup->win, NULL, _backlight_win_key_down_cb, inst); e_gadcon_popup_show(inst->popup); e_object_data_set(E_OBJECT(inst->popup), inst); E_OBJECT_DEL_SET(inst->popup, _backlight_popup_del_cb); diff --git a/src/modules/connman/e_mod_main.c b/src/modules/connman/e_mod_main.c index be9d0a854..54aaaa353 100644 --- a/src/modules/connman/e_mod_main.c +++ b/src/modules/connman/e_mod_main.c @@ -285,7 +285,7 @@ _econnman_popup_new(E_Connman_Instance *inst) /* 30,40 % -- min vga, max uvga */ _e_connman_widget_size_set(inst, list, 30, 40, 192, 192, 384, 384); e_gadcon_popup_content_set(inst->popup, list); - e_popup_autoclose(inst->popup->win, NULL, NULL); + e_popup_autoclose(inst->popup->win, NULL, NULL, NULL); e_gadcon_popup_show(inst->popup); e_object_data_set(E_OBJECT(inst->popup), inst); E_OBJECT_DEL_SET(inst->popup, _econnman_popup_del_cb); diff --git a/src/modules/mixer/e_mod_main.c b/src/modules/mixer/e_mod_main.c index 3e4859e73..ee4c2b54b 100644 --- a/src/modules/mixer/e_mod_main.c +++ b/src/modules/mixer/e_mod_main.c @@ -586,7 +586,7 @@ _mixer_popup_new(E_Mixer_Instance *inst) e_widget_size_min_set(inst->ui.table, mw, mh); e_gadcon_popup_content_set(inst->popup, inst->ui.table); - e_popup_autoclose(inst->popup->win, _mixer_popup_key_down_cb, inst); + e_popup_autoclose(inst->popup->win, NULL, _mixer_popup_key_down_cb, inst); e_gadcon_popup_show(inst->popup); e_object_data_set(E_OBJECT(inst->popup), inst); E_OBJECT_DEL_SET(inst->popup, _mixer_popup_del_cb); diff --git a/src/modules/music-control/ui.c b/src/modules/music-control/ui.c index 60901eabb..06d89b99b 100644 --- a/src/modules/music-control/ui.c +++ b/src/modules/music-control/ui.c @@ -79,7 +79,7 @@ _popup_new(E_Music_Control_Instance *inst) _player_name_update(inst); _play_state_update(inst, EINA_TRUE); - e_popup_autoclose(inst->popup->win, NULL, NULL); + e_popup_autoclose(inst->popup->win, NULL, NULL, NULL); e_gadcon_popup_show(inst->popup); e_object_data_set(E_OBJECT(inst->popup), inst); E_OBJECT_DEL_SET(inst->popup, _popup_del_cb); diff --git a/src/modules/syscon/e_syscon.c b/src/modules/syscon/e_syscon.c index dd34d774d..a87f758c8 100644 --- a/src/modules/syscon/e_syscon.c +++ b/src/modules/syscon/e_syscon.c @@ -88,7 +88,7 @@ e_syscon_show(E_Zone *zone, const char *defact) input_window = 0; return 0; } - e_popup_autoclose(popup, _cb_key_down, NULL); + e_popup_autoclose(popup, NULL, _cb_key_down, NULL); evas_event_freeze(popup->evas); o = edje_object_add(popup->evas);