From 2e0bef83d8f4212d82c05845a250cc32057b5353 Mon Sep 17 00:00:00 2001 From: cedric Date: Thu, 1 Dec 2011 15:37:56 +0000 Subject: [PATCH] elementary: use new Ethumb facility. git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/elementary@65782 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- src/lib/elm_icon.c | 85 +++++++++----------------------------- src/lib/elm_thumb.c | 115 ++++++++++++++-------------------------------------- 2 files changed, 50 insertions(+), 150 deletions(-) diff --git a/src/lib/elm_icon.c b/src/lib/elm_icon.c index d6318ef..6fda6de 100644 --- a/src/lib/elm_icon.c +++ b/src/lib/elm_icon.c @@ -17,19 +17,17 @@ struct _Widget_Data #ifdef HAVE_ELEMENTARY_ETHUMB struct { - int id; - struct { const char *path; const char *key; } file, thumb; - Ethumb_Exists *exists; - Ecore_Event_Handler *eeh; Ethumb_Thumb_Format format; + Ethumb_Client_Async *request; + Eina_Bool retry : 1; } thumb; #endif @@ -59,8 +57,6 @@ struct _Widget_Data #ifdef HAVE_ELEMENTARY_ETHUMB static Eina_List *_elm_icon_retry = NULL; static int _icon_pending_request = 0; - -static void _icon_thumb_exists(Ethumb_Client *client __UNUSED__, Ethumb_Exists *thread, Eina_Bool exists, void *data); #endif static const char *widtype = NULL; @@ -108,17 +104,10 @@ _icon_size_min_get(Evas_Object *icon) static void _icon_thumb_stop(Widget_Data *wd, void *ethumbd) { - if (wd->thumb.id >= 0) + if (wd->thumb.request) { - ethumb_client_generate_cancel(ethumbd, wd->thumb.id, NULL, NULL, NULL); - wd->thumb.id = -1; - _icon_pending_request--; - } - - if (wd->thumb.exists) - { - ethumb_client_thumb_exists_cancel(wd->thumb.exists); - wd->thumb.exists = NULL; + ethumb_client_thumb_async_cancel(ethumbd, wd->thumb.request); + wd->thumb.request = NULL; _icon_pending_request--; } @@ -225,68 +214,34 @@ _icon_thumb_finish(Widget_Data *wd, Ethumb_Client *ethumbd) } static void -_icon_thumb_cb(void *data, - Ethumb_Client *ethumbd, - int id, - const char *file __UNUSED__, - const char *key __UNUSED__, - const char *thumb_path, - const char *thumb_key, - Eina_Bool success) +_icon_thumb_done(Ethumb_Client *client, const char *thumb_path, const char *thumb_key, void *data) { Widget_Data *wd = data; - EINA_SAFETY_ON_FALSE_RETURN(wd->thumb.id == id); - wd->thumb.id = -1; + assert(wd->thumb.request); _icon_pending_request--; + wd->thumb.request = NULL; - if (success) - { - eina_stringshare_replace(&wd->thumb.thumb.path, thumb_path); - eina_stringshare_replace(&wd->thumb.thumb.key, thumb_key); - wd->thumb.format = ethumb_client_format_get(ethumbd); + eina_stringshare_replace(&wd->thumb.thumb.path, thumb_path); + eina_stringshare_replace(&wd->thumb.thumb.key, thumb_key); + wd->thumb.format = ethumb_client_format_get(client); - _icon_thumb_finish(wd, ethumbd); - } - else - { - ERR("could not generate thumbnail for %s (key: %s)", file, key); - _icon_thumb_cleanup(ethumbd); - } + _icon_thumb_finish(wd, client); } static void -_icon_thumb_exists(Ethumb_Client *client __UNUSED__, Ethumb_Exists *thread, Eina_Bool exists, void *data) +_icon_thumb_error(Ethumb_Client *client, void *data) { Widget_Data *wd = data; - Ethumb_Client *ethumbd; - - if (ethumb_client_thumb_exists_check(thread)) - return ; - - wd->thumb.exists = NULL; - ethumbd = elm_thumb_ethumb_client_get(); - - if (exists) - { - const char *thumb_path, *thumb_key; + assert(wd->thumb.request); - _icon_pending_request--; - ethumb_client_thumb_path_get(ethumbd, &thumb_path, &thumb_key); - eina_stringshare_replace(&wd->thumb.thumb.path, thumb_path); - eina_stringshare_replace(&wd->thumb.thumb.key, thumb_key); - wd->thumb.format = ethumb_client_format_get(ethumbd); + _icon_pending_request--; + wd->thumb.request = NULL; - _icon_thumb_finish(wd, ethumbd); - } - else if ((wd->thumb.id = ethumb_client_generate(ethumbd, _icon_thumb_cb, wd, NULL)) == -1) - { - ERR("Generate was unable to start !"); - /* Failed to generate thumbnail */ - _icon_pending_request--; - } + ERR("could not generate thumbnail for %s (key: %s)", wd->thumb.file.path, wd->thumb.file.key); + _icon_thumb_cleanup(client); } static void @@ -303,7 +258,7 @@ _icon_thumb_apply(Widget_Data *wd) _icon_pending_request++; if (!ethumb_client_file_set(ethumbd, wd->thumb.file.path, wd->thumb.file.key)) return ; ethumb_client_size_set(ethumbd, _icon_size_min_get(wd->img), _icon_size_min_get(wd->img)); - wd->thumb.exists = ethumb_client_thumb_exists(ethumbd, _icon_thumb_exists, wd); + wd->thumb.request = ethumb_client_thumb_async_get(ethumbd, _icon_thumb_done, _icon_thumb_error, wd); } static Eina_Bool @@ -663,7 +618,7 @@ elm_icon_add(Evas_Object *parent) evas_object_smart_callbacks_descriptions_set(obj, _signals); #ifdef HAVE_ELEMENTARY_ETHUMB - wd->thumb.id = -1; + wd->thumb.request = NULL; #endif wd->smooth = EINA_TRUE; diff --git a/src/lib/elm_thumb.c b/src/lib/elm_thumb.c index 62c1760..01e497e 100644 --- a/src/lib/elm_thumb.c +++ b/src/lib/elm_thumb.c @@ -12,13 +12,12 @@ struct _Widget_Data const char *key; struct { - int id; const char *file; const char *key; #ifdef HAVE_ELEMENTARY_ETHUMB const char *thumb_path; const char *thumb_key; - Ethumb_Exists *exists; + Ethumb_Client_Async *request; Ethumb_Thumb_Format format; @@ -67,10 +66,6 @@ Eina_Bool _elm_ethumb_connected = EINA_FALSE; #ifdef HAVE_ELEMENTARY_ETHUMB static Eina_List *retry = NULL; static int pending_request = 0; - -static void _thumb_exists(Ethumb_Client *client __UNUSED__, Ethumb_Exists *thread, - Eina_Bool exists, void *data); - #endif EAPI int ELM_ECORE_EVENT_ETHUMB_CONNECT = 0; @@ -81,16 +76,10 @@ _del_hook(Evas_Object *obj) Widget_Data *wd = elm_widget_data_get(obj); #ifdef HAVE_ELEMENTARY_ETHUMB - if (wd->thumb.id >= 0) + if (wd->thumb.request) { - ethumb_client_generate_cancel(_elm_ethumb_client, wd->thumb.id, - NULL, NULL, NULL); - wd->thumb.id = -1; - } - if (wd->thumb.exists) - { - ethumb_client_thumb_exists_cancel(wd->thumb.exists); - wd->thumb.exists = NULL; + ethumb_client_thumb_async_cancel(_elm_ethumb_client, wd->thumb.request); + wd->thumb.request = NULL; } if (wd->thumb.retry) { @@ -350,85 +339,44 @@ err: } static void -_finished_thumb_cb(void *data, Ethumb_Client *c __UNUSED__, int id, const char *file, const char *key, const char *thumb_path, const char *thumb_key, Eina_Bool success) +_elm_thumb_done(Ethumb_Client *client __UNUSED__, const char *thumb_path, const char *thumb_key, void *data) { Widget_Data *wd = data; - EINA_SAFETY_ON_FALSE_RETURN(wd->thumb.id == id); - wd->thumb.id = -1; + assert(wd->thumb.request); pending_request--; + wd->thumb.request = NULL; edje_object_signal_emit(wd->frame, EDJE_SIGNAL_PULSE_STOP, "elm"); - if (success) - { - _finished_thumb(wd, thumb_path, thumb_key); - return; - } - - ERR("could not generate thumbnail for %s (key: %s)", file, key ? key : ""); - edje_object_signal_emit(wd->frame, EDJE_SIGNAL_GENERATE_ERROR, "elm"); - evas_object_smart_callback_call(wd->self, SIG_GENERATE_ERROR, NULL); + _finished_thumb(wd, thumb_path, thumb_key); } static void -_thumb_exists(Ethumb_Client *client __UNUSED__, Ethumb_Exists *thread, - Eina_Bool exists, void *data) +_elm_thumb_error(Ethumb_Client *client __UNUSED__, void *data) { Widget_Data *wd = data; - if (ethumb_client_thumb_exists_check(thread)) - return ; - - wd->thumb.exists = NULL; - - if (exists) - { - const char *thumb_path, *thumb_key; - - pending_request--; + assert(wd->thumb.request); - wd->thumb.id = -1; - ethumb_client_thumb_path_get(_elm_ethumb_client, &thumb_path, - &thumb_key); - _finished_thumb(wd, thumb_path, thumb_key); - return; - } - else if ((wd->thumb.id = ethumb_client_generate - (_elm_ethumb_client, _finished_thumb_cb, wd, NULL)) != -1) - { - edje_object_signal_emit(wd->frame, EDJE_SIGNAL_PULSE_START, "elm"); - edje_object_signal_emit(wd->frame, EDJE_SIGNAL_GENERATE_START, "elm"); - evas_object_smart_callback_call(wd->self, SIG_GENERATE_START, NULL); - } - else - { - pending_request--; + pending_request--; + wd->thumb.request = NULL; - wd->thumb.id = -1; - edje_object_signal_emit(wd->frame, EDJE_SIGNAL_GENERATE_ERROR, "elm"); - evas_object_smart_callback_call(wd->self, SIG_GENERATE_ERROR, NULL); - } + ERR("could not generate thumbnail for %s (key: %s)", wd->thumb.file, wd->thumb.key ? wd->thumb.key : ""); + edje_object_signal_emit(wd->frame, EDJE_SIGNAL_GENERATE_ERROR, "elm"); + evas_object_smart_callback_call(wd->self, SIG_GENERATE_ERROR, NULL); } static void _thumb_apply(Widget_Data *wd) { - if (wd->thumb.id > 0) + if (wd->thumb.request) { - ethumb_client_generate_cancel - (_elm_ethumb_client, wd->thumb.id, NULL, NULL, NULL); - wd->thumb.id = -1; + ethumb_client_thumb_async_cancel(_elm_ethumb_client, wd->thumb.request); + wd->thumb.request = NULL; } - - if (wd->thumb.exists) - { - ethumb_client_thumb_exists_cancel(wd->thumb.exists); - wd->thumb.exists = NULL; - } - if (wd->thumb.retry) { retry = eina_list_remove(retry, wd); @@ -437,11 +385,16 @@ _thumb_apply(Widget_Data *wd) if (!wd->file) return; + edje_object_signal_emit(wd->frame, EDJE_SIGNAL_PULSE_START, "elm"); + edje_object_signal_emit(wd->frame, EDJE_SIGNAL_GENERATE_START, "elm"); + evas_object_smart_callback_call(wd->self, SIG_GENERATE_START, NULL); + pending_request++; ethumb_client_file_set(_elm_ethumb_client, wd->file, wd->key); - wd->thumb.exists = ethumb_client_thumb_exists(_elm_ethumb_client, - _thumb_exists, - wd); + wd->thumb.request = ethumb_client_thumb_async_get(_elm_ethumb_client, + _elm_thumb_done, + _elm_thumb_error, + wd); } static Eina_Bool @@ -480,22 +433,15 @@ _thumb_hide_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void evas_object_hide(wd->frame); - if (wd->thumb.id >= 0) + if (wd->thumb.request) { - ethumb_client_generate_cancel - (_elm_ethumb_client, wd->thumb.id, NULL, NULL, NULL); - wd->thumb.id = -1; + ethumb_client_thumb_async_cancel(_elm_ethumb_client, wd->thumb.request); + wd->thumb.request = NULL; edje_object_signal_emit(wd->frame, EDJE_SIGNAL_GENERATE_STOP, "elm"); evas_object_smart_callback_call(wd->self, SIG_GENERATE_STOP, NULL); } - if (wd->thumb.exists) - { - ethumb_client_thumb_exists_cancel(wd->thumb.exists); - wd->thumb.exists = NULL; - } - if (wd->thumb.retry) { retry = eina_list_remove(retry, wd); @@ -604,7 +550,6 @@ elm_thumb_add(Evas_Object *parent) wd->file = NULL; wd->key = NULL; wd->eeh = NULL; - wd->thumb.id = -1; wd->on_hold = EINA_FALSE; wd->is_video = EINA_FALSE; wd->was_video = EINA_FALSE; @@ -612,7 +557,7 @@ elm_thumb_add(Evas_Object *parent) #ifdef HAVE_ELEMENTARY_ETHUMB wd->thumb.thumb_path = NULL; wd->thumb.thumb_key = NULL; - wd->thumb.exists = NULL; + wd->thumb.request = NULL; evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, wd); evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_UP, -- 2.7.4