From b0588f4fb23f449e4331e1fa7531521cbad2d4f5 Mon Sep 17 00:00:00 2001 From: Jiyoun Park Date: Wed, 12 Sep 2012 16:03:03 +0000 Subject: [PATCH] Add image deleted signal into plug. it help user notice socket service ail and they can retry service connection. and add test code deal with this signal. SVN revision: 76539 --- ChangeLog | 5 +++++ NEWS | 1 + src/bin/test_win_plug.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++ src/lib/elm_plug.c | 30 ++++++++++++++++++++++++- 4 files changed, 93 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index d90e426..b853cdb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -472,3 +472,8 @@ * Fix ctxpopup direction if -1 is uses as priority. +2012-09-15 Jiyoun Park (jypark) + + * Add image deleted signal into plug. it help user notice socket service + fail and they can retry service connection. + * Add test code deal with this signal. diff --git a/NEWS b/NEWS index 7a0eda2..b663cfe 100644 --- a/NEWS +++ b/NEWS @@ -16,6 +16,7 @@ Improvements: * Panel widget is now an elm layout. * Improve elm map module loading/searching efficiency. * Diskselector handles dyanmic show/hide of icons now like buttons. + * Plug widget handles image object deletion Fixes: diff --git a/src/bin/test_win_plug.c b/src/bin/test_win_plug.c index cad7993..219e9f0 100644 --- a/src/bin/test_win_plug.c +++ b/src/bin/test_win_plug.c @@ -4,6 +4,61 @@ #include #ifndef ELM_LIB_QUICKLAUNCH +#define MAX_TRY 40 + +static int try_num = 0; + +static void +_timer_del(void *data __UNUSED__, + Evas *e __UNUSED__, + Evas_Object *obj, + void *event_info __UNUSED__) +{ + Ecore_Timer *timer = evas_object_data_del(obj, "test-timer"); + if (!timer) return; + ecore_timer_del(timer); +} + +static Eina_Bool +cb_plug_connect(void *data) +{ + Evas_Object *obj = data; + Ecore_Timer *timer; + + if (!obj) return ECORE_CALLBACK_CANCEL; + + try_num++; + if (try_num > MAX_TRY) return ECORE_CALLBACK_CANCEL; + + timer= evas_object_data_get(obj, "test-timer"); + if (!timer) return ECORE_CALLBACK_CANCEL; + + if (elm_plug_connect(obj, "ello", 0, EINA_FALSE)) + { + printf("plug connect to server[ello]\n"); + return ECORE_CALLBACK_CANCEL; + } + + ecore_timer_interval_set(timer, 1); + return ECORE_CALLBACK_RENEW; +} + +static void +cb_plug_disconnected(void *data __UNUSED__, + Evas_Object *obj, + void *event_info __UNUSED__) +{ + Ecore_Timer *timer = evas_object_data_get(obj, "test-timer"); + if (timer) + { + ecore_timer_del(timer); + evas_object_data_del(obj, "test-timer"); + return; + } + + timer = ecore_timer_add(1, cb_plug_connect, obj); + evas_object_data_set(obj, "test-timer", timer); +} static void cb_mouse_down(void *data __UNUSED__, Evas *evas __UNUSED__, Evas_Object *obj, void *event_info) @@ -99,12 +154,15 @@ test_win_plug(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_in plug = elm_plug_add(win); evas_object_event_callback_add(elm_plug_image_object_get(plug), EVAS_CALLBACK_MOUSE_DOWN, cb_mouse_down, NULL); + evas_object_event_callback_add(plug, EVAS_CALLBACK_DEL, _timer_del, NULL); if (!elm_plug_connect(plug, "ello", 0, EINA_FALSE)) { printf("Cannot connect plug\n"); return; } + evas_object_smart_callback_add(plug, "image.deleted", cb_plug_disconnected, NULL); + evas_object_resize(plug, 380, 500); evas_object_move(plug, 10, 10); evas_object_show(plug); diff --git a/src/lib/elm_plug.c b/src/lib/elm_plug.c index a12f48b..80ae709 100644 --- a/src/lib/elm_plug.c +++ b/src/lib/elm_plug.c @@ -4,9 +4,13 @@ EAPI const char ELM_PLUG_SMART_NAME[] = "elm_plug"; +static const char PLUG_KEY[] = "__Plug_Ecore_Evas"; + static const char SIG_CLICKED[] = "clicked"; +static const char SIG_IMAGE_DELETED[] = "image.deleted"; static const Evas_Smart_Cb_Description _smart_callbacks[] = { {SIG_CLICKED, ""}, + {SIG_IMAGE_DELETED, ""}, {NULL, NULL} }; @@ -24,6 +28,17 @@ _sizing_eval(Evas_Object *obj) evas_object_size_hint_max_set(obj, maxw, maxh); } +static void +_elm_plug_disconnected(Ecore_Evas *ee) +{ + Evas_Object *plug = NULL; + + if (!ee) return; + plug = ecore_evas_data_get(ee, PLUG_KEY); + if (!plug) return; + evas_object_smart_callback_call(plug, SIG_IMAGE_DELETED, NULL); +} + static Eina_Bool _elm_plug_smart_theme(Evas_Object *obj) { @@ -129,8 +144,21 @@ elm_plug_connect(Evas_Object *obj, { Evas_Object *plug_img = NULL; + ELM_PLUG_CHECK(obj) EINA_FALSE; + plug_img = elm_plug_image_object_get(obj); if (!plug_img) return EINA_FALSE; - return ecore_evas_extn_plug_connect(plug_img, svcname, svcnum, svcsys); + if (ecore_evas_extn_plug_connect(plug_img, svcname, svcnum, svcsys)) + { + Ecore_Evas *ee = NULL; + ee = ecore_evas_object_ecore_evas_get(plug_img); + if (!ee) return EINA_FALSE; + + ecore_evas_data_set(ee, PLUG_KEY, obj); + ecore_evas_callback_delete_request_set(ee, _elm_plug_disconnected); + return EINA_TRUE; + } + else + return EINA_FALSE; } -- 2.7.4