#include <Elementary.h>
#include "elm_priv.h"
+#include <assert.h>
typedef struct _Widget_Data 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;
#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;
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, _thumb_exists, wd);
- wd->thumb.exists = NULL;
+ ethumb_client_thumb_async_cancel(_elm_ethumb_client, wd->thumb.request);
+ wd->thumb.request = NULL;
}
if (wd->thumb.retry)
{
evas_object_size_hint_min_set(wd->self, mw, mh);
eina_stringshare_replace(&(wd->thumb.file), thumb_path);
eina_stringshare_replace(&(wd->thumb.key), thumb_key);
+ edje_object_signal_emit(wd->frame, EDJE_SIGNAL_PULSE_STOP, "elm");
edje_object_signal_emit(wd->frame, EDJE_SIGNAL_GENERATE_STOP, "elm");
evas_object_smart_callback_call(wd->self, SIG_GENERATE_STOP, NULL);
}
}
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;
+ assert(wd->thumb.request);
- if (exists)
- {
- const char *thumb_path, *thumb_key;
-
- pending_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, _thumb_exists, wd);
- wd->thumb.exists = NULL;
- }
-
if (wd->thumb.retry)
{
retry = eina_list_remove(retry, 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
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, _thumb_exists, wd);
- wd->thumb.exists = NULL;
- }
-
if (wd->thumb.retry)
{
retry = eina_list_remove(retry, wd);
return EINA_TRUE;
}
-/**
- * This must be called before any other function that handle with
- * elm_thumb objects or ethumb_client instances.
- *
- * @ingroup Thumb
- */
EAPI Eina_Bool
elm_need_ethumb(void)
{
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;
#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,
#ifdef HAVE_ELEMENTARY_ETHUMB
if (((file_replaced) || (key_replaced)) && (evas_object_visible_get(obj)))
_thumb_show(wd);
+#else
+ (void)key_replaced;
#endif
}