e_popup_autoclose() now also allows a delete function to replace normal popup deletion

This commit is contained in:
discomfitor 2013-05-18 15:14:14 +01:00
parent 34399c80db
commit c34a28707f
7 changed files with 17 additions and 11 deletions

View File

@ -15,8 +15,12 @@ _e_popup_autoclose_cleanup(void)
{ {
e_grabinput_release(0, e_comp_get(autoclose_popup)->ee_win); e_grabinput_release(0, e_comp_get(autoclose_popup)->ee_win);
autoclose_popup->autoclose = 0; 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(event_rect, evas_object_del);
E_FREE_FUNC(key_handler, ecore_event_handler_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; Eina_Bool del = EINA_TRUE;
if (autoclose_popup->key_cb) 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(); if (del) _e_popup_autoclose_cleanup();
return ECORE_CALLBACK_RENEW; return ECORE_CALLBACK_RENEW;
} }
@ -271,13 +275,14 @@ e_popup_object_remove(E_Popup *pop, Evas_Object *obj)
} }
EAPI void 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_CHECK(pop);
E_OBJECT_TYPE_CHECK(pop, E_POPUP_TYPE); E_OBJECT_TYPE_CHECK(pop, E_POPUP_TYPE);
pop->autoclose = 1; pop->autoclose = 1;
pop->del_cb = del_cb;
pop->key_cb = cb; pop->key_cb = cb;
pop->key_data = (void*)data; pop->cb_data = (void*)data;
if (pop->visible) _e_popup_autoclose_setup(pop); if (pop->visible) _e_popup_autoclose_setup(pop);
} }

View File

@ -26,7 +26,8 @@ struct _E_Popup
Eina_List *objects; Eina_List *objects;
Eina_Stringshare *name; Eina_Stringshare *name;
E_Popup_Key_Cb key_cb; E_Popup_Key_Cb key_cb;
void *key_data; Ecore_End_Cb del_cb;
void *cb_data;
Eina_Bool visible : 1; Eina_Bool visible : 1;
Eina_Bool ignore_events : 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_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_add(E_Popup *pop, Evas_Object *obj);
EAPI void e_popup_object_remove(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
#endif #endif

View File

@ -206,7 +206,7 @@ _backlight_popup_new(Instance *inst)
0, 1, 1, 1, 0, 0, 0, 0, 0.5, 1.0); 0, 1, 1, 1, 0, 0, 0, 0, 0.5, 1.0);
e_gadcon_popup_content_set(inst->popup, inst->o_table); 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_gadcon_popup_show(inst->popup);
e_object_data_set(E_OBJECT(inst->popup), inst); e_object_data_set(E_OBJECT(inst->popup), inst);
E_OBJECT_DEL_SET(inst->popup, _backlight_popup_del_cb); E_OBJECT_DEL_SET(inst->popup, _backlight_popup_del_cb);

View File

@ -285,7 +285,7 @@ _econnman_popup_new(E_Connman_Instance *inst)
/* 30,40 % -- min vga, max uvga */ /* 30,40 % -- min vga, max uvga */
_e_connman_widget_size_set(inst, list, 30, 40, 192, 192, 384, 384); _e_connman_widget_size_set(inst, list, 30, 40, 192, 192, 384, 384);
e_gadcon_popup_content_set(inst->popup, list); 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_gadcon_popup_show(inst->popup);
e_object_data_set(E_OBJECT(inst->popup), inst); e_object_data_set(E_OBJECT(inst->popup), inst);
E_OBJECT_DEL_SET(inst->popup, _econnman_popup_del_cb); E_OBJECT_DEL_SET(inst->popup, _econnman_popup_del_cb);

View File

@ -586,7 +586,7 @@ _mixer_popup_new(E_Mixer_Instance *inst)
e_widget_size_min_set(inst->ui.table, mw, mh); e_widget_size_min_set(inst->ui.table, mw, mh);
e_gadcon_popup_content_set(inst->popup, inst->ui.table); 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_gadcon_popup_show(inst->popup);
e_object_data_set(E_OBJECT(inst->popup), inst); e_object_data_set(E_OBJECT(inst->popup), inst);
E_OBJECT_DEL_SET(inst->popup, _mixer_popup_del_cb); E_OBJECT_DEL_SET(inst->popup, _mixer_popup_del_cb);

View File

@ -79,7 +79,7 @@ _popup_new(E_Music_Control_Instance *inst)
_player_name_update(inst); _player_name_update(inst);
_play_state_update(inst, EINA_TRUE); _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_gadcon_popup_show(inst->popup);
e_object_data_set(E_OBJECT(inst->popup), inst); e_object_data_set(E_OBJECT(inst->popup), inst);
E_OBJECT_DEL_SET(inst->popup, _popup_del_cb); E_OBJECT_DEL_SET(inst->popup, _popup_del_cb);

View File

@ -88,7 +88,7 @@ e_syscon_show(E_Zone *zone, const char *defact)
input_window = 0; input_window = 0;
return 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); evas_event_freeze(popup->evas);
o = edje_object_add(popup->evas); o = edje_object_add(popup->evas);