forked from enlightenment/efl
Added support to free_data callbacks.
Some functions that require callbacks and data passed to them now can receive a free_data callback as argument too. SVN revision: 41285
This commit is contained in:
parent
8f9dc79021
commit
5dc0fa41ef
|
@ -234,7 +234,7 @@ main(int argc, char *argv[])
|
||||||
r = 1;
|
r = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
r = ethumb_generate(e, _finished_thumb, NULL);
|
r = ethumb_generate(e, _finished_thumb, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (r && !quit_option)
|
if (r && !quit_option)
|
||||||
|
|
|
@ -268,7 +268,7 @@ _ec_op_generate(struct _Ethumbd_Child *ec)
|
||||||
ethumb_file_set(ec->ethumbt[index], path, key);
|
ethumb_file_set(ec->ethumbt[index], path, key);
|
||||||
ethumb_thumb_path_set(ec->ethumbt[index], thumb_path, thumb_key);
|
ethumb_thumb_path_set(ec->ethumbt[index], thumb_path, thumb_key);
|
||||||
ethumb_generate(ec->ethumbt[index], _ec_op_generated_cb,
|
ethumb_generate(ec->ethumbt[index], _ec_op_generated_cb,
|
||||||
ec);
|
ec, NULL);
|
||||||
|
|
||||||
free(path);
|
free(path);
|
||||||
free(key);
|
free(key);
|
||||||
|
|
|
@ -966,9 +966,12 @@ _ethumb_finished_idler_cb(void *data)
|
||||||
Ethumb *e = data;
|
Ethumb *e = data;
|
||||||
|
|
||||||
e->finished_cb(e, e->cb_result, e->cb_data);
|
e->finished_cb(e, e->cb_result, e->cb_data);
|
||||||
|
if (e->cb_data_free)
|
||||||
|
e->cb_data_free(e->cb_data);
|
||||||
e->finished_idler = NULL;
|
e->finished_idler = NULL;
|
||||||
e->finished_cb = NULL;
|
e->finished_cb = NULL;
|
||||||
e->cb_data = NULL;
|
e->cb_data = NULL;
|
||||||
|
e->cb_data_free = NULL;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -985,7 +988,7 @@ ethumb_finished_callback_call(Ethumb *e, int result)
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI Eina_Bool
|
EAPI Eina_Bool
|
||||||
ethumb_generate(Ethumb *e, ethumb_generate_callback_t finished_cb, void *data)
|
ethumb_generate(Ethumb *e, ethumb_generate_callback_t finished_cb, void *data, void (*free_data)(void *))
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -1000,6 +1003,7 @@ ethumb_generate(Ethumb *e, ethumb_generate_callback_t finished_cb, void *data)
|
||||||
}
|
}
|
||||||
e->finished_cb = finished_cb;
|
e->finished_cb = finished_cb;
|
||||||
e->cb_data = data;
|
e->cb_data = data;
|
||||||
|
e->cb_data_free = free_data;
|
||||||
|
|
||||||
if (!e->src_path)
|
if (!e->src_path)
|
||||||
{
|
{
|
||||||
|
|
|
@ -109,7 +109,7 @@ EAPI void ethumb_file_get(const Ethumb *e, const char **path, const char **key)
|
||||||
EAPI void ethumb_file_free(Ethumb *e) EINA_ARG_NONNULL(1);
|
EAPI void ethumb_file_free(Ethumb *e) EINA_ARG_NONNULL(1);
|
||||||
EAPI void ethumb_thumb_path_set(Ethumb *e, const char *path, const char *key) EINA_ARG_NONNULL(1);
|
EAPI void ethumb_thumb_path_set(Ethumb *e, const char *path, const char *key) EINA_ARG_NONNULL(1);
|
||||||
EAPI void ethumb_thumb_path_get(Ethumb *e, const char **path, const char **key) EINA_ARG_NONNULL(1);
|
EAPI void ethumb_thumb_path_get(Ethumb *e, const char **path, const char **key) EINA_ARG_NONNULL(1);
|
||||||
EAPI Eina_Bool ethumb_generate(Ethumb *e, ethumb_generate_callback_t finished_cb, void *data) EINA_ARG_NONNULL(1, 2);
|
EAPI Eina_Bool ethumb_generate(Ethumb *e, ethumb_generate_callback_t finished_cb, void *data, void (*free_data)(void *)) EINA_ARG_NONNULL(1, 2);
|
||||||
EAPI Eina_Bool ethumb_exists(Ethumb *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
|
EAPI Eina_Bool ethumb_exists(Ethumb *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -63,6 +63,7 @@ struct _Ethumb_Client
|
||||||
DBusPendingCall *pending_new;
|
DBusPendingCall *pending_new;
|
||||||
ec_connect_callback_t connect_cb;
|
ec_connect_callback_t connect_cb;
|
||||||
void *connect_cb_data;
|
void *connect_cb_data;
|
||||||
|
void (*connect_cb_free_data)(void *);
|
||||||
Eina_List *pending_add;
|
Eina_List *pending_add;
|
||||||
Eina_List *pending_remove;
|
Eina_List *pending_remove;
|
||||||
Eina_List *pending_gen;
|
Eina_List *pending_gen;
|
||||||
|
@ -86,6 +87,7 @@ struct _ethumb_pending_add
|
||||||
const char *thumb_key;
|
const char *thumb_key;
|
||||||
generated_callback_t generated_cb;
|
generated_callback_t generated_cb;
|
||||||
void *data;
|
void *data;
|
||||||
|
void (*free_data)(void *);
|
||||||
DBusPendingCall *pending_call;
|
DBusPendingCall *pending_call;
|
||||||
Ethumb_Client *client;
|
Ethumb_Client *client;
|
||||||
};
|
};
|
||||||
|
@ -108,6 +110,7 @@ struct _ethumb_pending_gen
|
||||||
const char *thumb_key;
|
const char *thumb_key;
|
||||||
generated_callback_t generated_cb;
|
generated_callback_t generated_cb;
|
||||||
void *data;
|
void *data;
|
||||||
|
void (*free_data)(void *);
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char _ethumb_dbus_bus_name[] = "org.enlightenment.Ethumb";
|
static const char _ethumb_dbus_bus_name[] = "org.enlightenment.Ethumb";
|
||||||
|
@ -248,11 +251,14 @@ _ethumb_client_new_cb(void *data, DBusMessage *msg, DBusError *error)
|
||||||
_ethumb_client_generated_cb, client);
|
_ethumb_client_generated_cb, client);
|
||||||
|
|
||||||
client->connect_cb(client, 1, client->connect_cb_data);
|
client->connect_cb(client, 1, client->connect_cb_data);
|
||||||
|
if (client->connect_cb_free_data)
|
||||||
|
client->connect_cb_free_data(client->connect_cb_data);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
end_error:
|
end_error:
|
||||||
client->connect_cb(client, 0, client->connect_cb_data);
|
client->connect_cb(client, 0, client->connect_cb_data);
|
||||||
return;
|
if (client->connect_cb_free_data)
|
||||||
|
client->connect_cb_free_data(client->connect_cb_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -317,6 +323,8 @@ _ethumb_client_start_server_cb(void *data, DBusMessage *msg, DBusError *err)
|
||||||
error:
|
error:
|
||||||
ERR("failed to start Ethumbd DBus service by its name.\n");
|
ERR("failed to start Ethumbd DBus service by its name.\n");
|
||||||
client->connect_cb(client, 0, client->connect_cb_data);
|
client->connect_cb(client, 0, client->connect_cb_data);
|
||||||
|
if (client->connect_cb_free_data)
|
||||||
|
client->connect_cb_free_data(client->connect_cb_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -336,6 +344,8 @@ _ethumb_client_start_server(Ethumb_Client *client)
|
||||||
{
|
{
|
||||||
ERR("could not start service by name!\n");
|
ERR("could not start service by name!\n");
|
||||||
client->connect_cb(client, 0, client->connect_cb_data);
|
client->connect_cb(client, 0, client->connect_cb_data);
|
||||||
|
if (client->connect_cb_free_data)
|
||||||
|
client->connect_cb_free_data(client->connect_cb_data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -379,6 +389,8 @@ _ethumb_client_get_name_owner(void *data, DBusMessage *msg, DBusError *err)
|
||||||
|
|
||||||
error:
|
error:
|
||||||
client->connect_cb(client, 0, client->connect_cb_data);
|
client->connect_cb(client, 0, client->connect_cb_data);
|
||||||
|
if (client->connect_cb_free_data)
|
||||||
|
client->connect_cb_free_data(client->connect_cb_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI int
|
EAPI int
|
||||||
|
@ -406,7 +418,7 @@ ethumb_client_shutdown(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI Ethumb_Client *
|
EAPI Ethumb_Client *
|
||||||
ethumb_client_connect(ec_connect_callback_t connect_cb, void *data)
|
ethumb_client_connect(ec_connect_callback_t connect_cb, void *data, void (*free_data)(void *))
|
||||||
{
|
{
|
||||||
Ethumb_Client *eclient;
|
Ethumb_Client *eclient;
|
||||||
|
|
||||||
|
@ -421,6 +433,7 @@ ethumb_client_connect(ec_connect_callback_t connect_cb, void *data)
|
||||||
|
|
||||||
eclient->connect_cb = connect_cb;
|
eclient->connect_cb = connect_cb;
|
||||||
eclient->connect_cb_data = data;
|
eclient->connect_cb_data = data;
|
||||||
|
eclient->connect_cb_free_data = free_data;
|
||||||
|
|
||||||
eclient->ethumb = ethumb_new();
|
eclient->ethumb = ethumb_new();
|
||||||
if (!eclient->ethumb)
|
if (!eclient->ethumb)
|
||||||
|
@ -739,6 +752,8 @@ _ethumb_client_generated_cb(void *data, DBusMessage *msg)
|
||||||
pending->generated_cb(id, pending->file, pending->key,
|
pending->generated_cb(id, pending->file, pending->key,
|
||||||
pending->thumb, pending->thumb_key,
|
pending->thumb, pending->thumb_key,
|
||||||
success, pending->data);
|
success, pending->data);
|
||||||
|
if (pending->free_data)
|
||||||
|
pending->free_data(pending->data);
|
||||||
eina_stringshare_del(pending->file);
|
eina_stringshare_del(pending->file);
|
||||||
eina_stringshare_del(pending->key);
|
eina_stringshare_del(pending->key);
|
||||||
eina_stringshare_del(pending->thumb);
|
eina_stringshare_del(pending->thumb);
|
||||||
|
@ -780,6 +795,7 @@ _ethumb_client_queue_add_cb(void *data, DBusMessage *msg, DBusError *error)
|
||||||
generating->thumb_key = pending->thumb_key;
|
generating->thumb_key = pending->thumb_key;
|
||||||
generating->generated_cb = pending->generated_cb;
|
generating->generated_cb = pending->generated_cb;
|
||||||
generating->data = pending->data;
|
generating->data = pending->data;
|
||||||
|
generating->free_data = pending->free_data;
|
||||||
client->pending_gen = eina_list_append(client->pending_gen, generating);
|
client->pending_gen = eina_list_append(client->pending_gen, generating);
|
||||||
|
|
||||||
end:
|
end:
|
||||||
|
@ -787,7 +803,7 @@ end:
|
||||||
}
|
}
|
||||||
|
|
||||||
static long
|
static long
|
||||||
_ethumb_client_queue_add(Ethumb_Client *client, const char *file, const char *key, const char *thumb, const char *thumb_key, generated_callback_t generated_cb, void *data)
|
_ethumb_client_queue_add(Ethumb_Client *client, const char *file, const char *key, const char *thumb, const char *thumb_key, generated_callback_t generated_cb, void *data, void (*free_data)(void *))
|
||||||
{
|
{
|
||||||
DBusMessage *msg;
|
DBusMessage *msg;
|
||||||
DBusMessageIter iter;
|
DBusMessageIter iter;
|
||||||
|
@ -801,6 +817,7 @@ _ethumb_client_queue_add(Ethumb_Client *client, const char *file, const char *ke
|
||||||
pending->thumb_key = eina_stringshare_add(thumb_key);
|
pending->thumb_key = eina_stringshare_add(thumb_key);
|
||||||
pending->generated_cb = generated_cb;
|
pending->generated_cb = generated_cb;
|
||||||
pending->data = data;
|
pending->data = data;
|
||||||
|
pending->free_data = free_data;
|
||||||
pending->client = client;
|
pending->client = client;
|
||||||
|
|
||||||
client->id_count = (client->id_count + 1) % MAX_ID;
|
client->id_count = (client->id_count + 1) % MAX_ID;
|
||||||
|
@ -1141,7 +1158,7 @@ ethumb_client_thumb_exists(Ethumb_Client *client)
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI long
|
EAPI long
|
||||||
ethumb_client_generate(Ethumb_Client *client, generated_callback_t generated_cb, void *data)
|
ethumb_client_generate(Ethumb_Client *client, generated_callback_t generated_cb, void *data, void (*free_data)(void *))
|
||||||
{
|
{
|
||||||
const char *file, *key, *thumb, *thumb_key;
|
const char *file, *key, *thumb, *thumb_key;
|
||||||
long id;
|
long id;
|
||||||
|
@ -1159,7 +1176,7 @@ ethumb_client_generate(Ethumb_Client *client, generated_callback_t generated_cb,
|
||||||
if (client->ethumb_dirty)
|
if (client->ethumb_dirty)
|
||||||
ethumb_client_ethumb_setup(client);
|
ethumb_client_ethumb_setup(client);
|
||||||
id = _ethumb_client_queue_add(client, file, key, thumb, thumb_key,
|
id = _ethumb_client_queue_add(client, file, key, thumb, thumb_key,
|
||||||
generated_cb, data);
|
generated_cb, data, free_data);
|
||||||
|
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,7 +46,7 @@ typedef void (*generated_callback_t)(long id, const char *file, const char *key,
|
||||||
EAPI int ethumb_client_init(void);
|
EAPI int ethumb_client_init(void);
|
||||||
EAPI int ethumb_client_shutdown(void);
|
EAPI int ethumb_client_shutdown(void);
|
||||||
|
|
||||||
EAPI Ethumb_Client * ethumb_client_connect(ec_connect_callback_t connect_cb, void *data);
|
EAPI Ethumb_Client * ethumb_client_connect(ec_connect_callback_t connect_cb, void *data, void (*free_data)(void *));
|
||||||
EAPI void ethumb_client_disconnect(Ethumb_Client *client);
|
EAPI void ethumb_client_disconnect(Ethumb_Client *client);
|
||||||
EAPI void ethumb_client_on_server_die_callback_set(Ethumb_Client *client, void (*on_server_die_cb)(Ethumb_Client *client, void *data), void *data);
|
EAPI void ethumb_client_on_server_die_callback_set(Ethumb_Client *client, void (*on_server_die_cb)(Ethumb_Client *client, void *data), void *data);
|
||||||
|
|
||||||
|
@ -79,7 +79,7 @@ EAPI void ethumb_client_file_free(Ethumb_Client *client);
|
||||||
EAPI void ethumb_client_thumb_path_set(Ethumb_Client *client, const char *path, const char *key);
|
EAPI void ethumb_client_thumb_path_set(Ethumb_Client *client, const char *path, const char *key);
|
||||||
EAPI void ethumb_client_thumb_path_get(Ethumb_Client *client, const char **path, const char **key);
|
EAPI void ethumb_client_thumb_path_get(Ethumb_Client *client, const char **path, const char **key);
|
||||||
EAPI Eina_Bool ethumb_client_thumb_exists(Ethumb_Client *client);
|
EAPI Eina_Bool ethumb_client_thumb_exists(Ethumb_Client *client);
|
||||||
EAPI long ethumb_client_generate(Ethumb_Client *client, generated_callback_t generated_cb, void *data);
|
EAPI long ethumb_client_generate(Ethumb_Client *client, generated_callback_t generated_cb, void *data, void (*free_data)(void *));
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,6 +39,7 @@ struct _Ethumb
|
||||||
Ecore_Idler *finished_idler;
|
Ecore_Idler *finished_idler;
|
||||||
ethumb_generate_callback_t finished_cb;
|
ethumb_generate_callback_t finished_cb;
|
||||||
void *cb_data;
|
void *cb_data;
|
||||||
|
void (*cb_data_free)(void *);
|
||||||
int cb_result;
|
int cb_result;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -57,7 +57,6 @@ _request_thumbnails(Ethumb_Client *client, void *data)
|
||||||
DIR *dir;
|
DIR *dir;
|
||||||
struct dirent *de;
|
struct dirent *de;
|
||||||
char buf[PATH_MAX];
|
char buf[PATH_MAX];
|
||||||
int i;
|
|
||||||
|
|
||||||
dir = opendir(path);
|
dir = opendir(path);
|
||||||
if (!dir)
|
if (!dir)
|
||||||
|
@ -78,12 +77,7 @@ _request_thumbnails(Ethumb_Client *client, void *data)
|
||||||
continue;
|
continue;
|
||||||
snprintf(buf, sizeof(buf), "%s/%s", path, de->d_name);
|
snprintf(buf, sizeof(buf), "%s/%s", path, de->d_name);
|
||||||
ethumb_client_file_set(client, buf, NULL);
|
ethumb_client_file_set(client, buf, NULL);
|
||||||
ethumb_client_generate(client, _queue_add_cb, NULL);
|
ethumb_client_generate(client, _queue_add_cb, NULL, NULL);
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 100; i < 200; i++)
|
|
||||||
{
|
|
||||||
ethumb_client_queue_remove(client, i, NULL, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
closedir(dir);
|
closedir(dir);
|
||||||
|
@ -115,7 +109,7 @@ main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
|
|
||||||
ethumb_client_init();
|
ethumb_client_init();
|
||||||
client = ethumb_client_connect(_connect_cb, argv[1]);
|
client = ethumb_client_connect(_connect_cb, argv[1], NULL);
|
||||||
if (!client)
|
if (!client)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "ERROR: couldn't connect to server.\n");
|
fprintf(stderr, "ERROR: couldn't connect to server.\n");
|
||||||
|
|
Loading…
Reference in New Issue