discomfitor pushed a commit to branch master.

commit c34a28707f9d1c395c15b41c36d6c9b5c075ea7f
Author: discomfitor <[email protected]>
Date:   Sat May 18 15:14:14 2013 +0100

    e_popup_autoclose() now also allows a delete function to replace normal 
popup deletion
---
 src/bin/e_popup.c                  | 13 +++++++++----
 src/bin/e_popup.h                  |  5 +++--
 src/modules/backlight/e_mod_main.c |  2 +-
 src/modules/connman/e_mod_main.c   |  2 +-
 src/modules/mixer/e_mod_main.c     |  2 +-
 src/modules/music-control/ui.c     |  2 +-
 src/modules/syscon/e_syscon.c      |  2 +-
 7 files changed, 17 insertions(+), 11 deletions(-)

diff --git a/src/bin/e_popup.c b/src/bin/e_popup.c
index cc47810..2c62409 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 479d8e1..86107b3 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 3c192c8..f7c5795 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 be9d0a8..54aaaa3 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 3e4859e..ee4c2b5 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 60901ea..06d89b9 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 dd34d77..a87f758 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);

-- 

------------------------------------------------------------------------------
AlienVault Unified Security Management (USM) platform delivers complete
security visibility with the essential security capabilities. Easily and
efficiently configure, manage, and operate all of your security controls
from a single console and one unified framework. Download a free trial.
http://p.sf.net/sfu/alienvault_d2d

Reply via email to