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;
|
||||
}
|
||||
else
|
||||
r = ethumb_generate(e, _finished_thumb, NULL);
|
||||
r = ethumb_generate(e, _finished_thumb, NULL, NULL);
|
||||
}
|
||||
|
||||
if (r && !quit_option)
|
||||
|
|
|
@ -268,7 +268,7 @@ _ec_op_generate(struct _Ethumbd_Child *ec)
|
|||
ethumb_file_set(ec->ethumbt[index], path, key);
|
||||
ethumb_thumb_path_set(ec->ethumbt[index], thumb_path, thumb_key);
|
||||
ethumb_generate(ec->ethumbt[index], _ec_op_generated_cb,
|
||||
ec);
|
||||
ec, NULL);
|
||||
|
||||
free(path);
|
||||
free(key);
|
||||
|
|
|
@ -966,9 +966,12 @@ _ethumb_finished_idler_cb(void *data)
|
|||
Ethumb *e = 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_cb = NULL;
|
||||
e->cb_data = NULL;
|
||||
e->cb_data_free = NULL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -985,7 +988,7 @@ ethumb_finished_callback_call(Ethumb *e, int result)
|
|||
}
|
||||
|
||||
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;
|
||||
|
||||
|
@ -1000,6 +1003,7 @@ ethumb_generate(Ethumb *e, ethumb_generate_callback_t finished_cb, void *data)
|
|||
}
|
||||
e->finished_cb = finished_cb;
|
||||
e->cb_data = data;
|
||||
e->cb_data_free = free_data;
|
||||
|
||||
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_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 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;
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -63,6 +63,7 @@ struct _Ethumb_Client
|
|||
DBusPendingCall *pending_new;
|
||||
ec_connect_callback_t connect_cb;
|
||||
void *connect_cb_data;
|
||||
void (*connect_cb_free_data)(void *);
|
||||
Eina_List *pending_add;
|
||||
Eina_List *pending_remove;
|
||||
Eina_List *pending_gen;
|
||||
|
@ -86,6 +87,7 @@ struct _ethumb_pending_add
|
|||
const char *thumb_key;
|
||||
generated_callback_t generated_cb;
|
||||
void *data;
|
||||
void (*free_data)(void *);
|
||||
DBusPendingCall *pending_call;
|
||||
Ethumb_Client *client;
|
||||
};
|
||||
|
@ -108,6 +110,7 @@ struct _ethumb_pending_gen
|
|||
const char *thumb_key;
|
||||
generated_callback_t generated_cb;
|
||||
void *data;
|
||||
void (*free_data)(void *);
|
||||
};
|
||||
|
||||
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);
|
||||
|
||||
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;
|
||||
|
||||
end_error:
|
||||
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
|
||||
|
@ -317,6 +323,8 @@ _ethumb_client_start_server_cb(void *data, DBusMessage *msg, DBusError *err)
|
|||
error:
|
||||
ERR("failed to start Ethumbd DBus service by its name.\n");
|
||||
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
|
||||
|
@ -336,6 +344,8 @@ _ethumb_client_start_server(Ethumb_Client *client)
|
|||
{
|
||||
ERR("could not start service by name!\n");
|
||||
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:
|
||||
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
|
||||
|
@ -406,7 +418,7 @@ ethumb_client_shutdown(void)
|
|||
}
|
||||
|
||||
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;
|
||||
|
||||
|
@ -421,6 +433,7 @@ ethumb_client_connect(ec_connect_callback_t connect_cb, void *data)
|
|||
|
||||
eclient->connect_cb = connect_cb;
|
||||
eclient->connect_cb_data = data;
|
||||
eclient->connect_cb_free_data = free_data;
|
||||
|
||||
eclient->ethumb = ethumb_new();
|
||||
if (!eclient->ethumb)
|
||||
|
@ -739,6 +752,8 @@ _ethumb_client_generated_cb(void *data, DBusMessage *msg)
|
|||
pending->generated_cb(id, pending->file, pending->key,
|
||||
pending->thumb, pending->thumb_key,
|
||||
success, pending->data);
|
||||
if (pending->free_data)
|
||||
pending->free_data(pending->data);
|
||||
eina_stringshare_del(pending->file);
|
||||
eina_stringshare_del(pending->key);
|
||||
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->generated_cb = pending->generated_cb;
|
||||
generating->data = pending->data;
|
||||
generating->free_data = pending->free_data;
|
||||
client->pending_gen = eina_list_append(client->pending_gen, generating);
|
||||
|
||||
end:
|
||||
|
@ -787,7 +803,7 @@ end:
|
|||
}
|
||||
|
||||
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;
|
||||
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->generated_cb = generated_cb;
|
||||
pending->data = data;
|
||||
pending->free_data = free_data;
|
||||
pending->client = client;
|
||||
|
||||
client->id_count = (client->id_count + 1) % MAX_ID;
|
||||
|
@ -1141,7 +1158,7 @@ ethumb_client_thumb_exists(Ethumb_Client *client)
|
|||
}
|
||||
|
||||
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;
|
||||
long id;
|
||||
|
@ -1159,7 +1176,7 @@ ethumb_client_generate(Ethumb_Client *client, generated_callback_t generated_cb,
|
|||
if (client->ethumb_dirty)
|
||||
ethumb_client_ethumb_setup(client);
|
||||
id = _ethumb_client_queue_add(client, file, key, thumb, thumb_key,
|
||||
generated_cb, data);
|
||||
generated_cb, data, free_data);
|
||||
|
||||
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_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_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_get(Ethumb_Client *client, const char **path, const char **key);
|
||||
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
|
||||
}
|
||||
|
|
|
@ -39,6 +39,7 @@ struct _Ethumb
|
|||
Ecore_Idler *finished_idler;
|
||||
ethumb_generate_callback_t finished_cb;
|
||||
void *cb_data;
|
||||
void (*cb_data_free)(void *);
|
||||
int cb_result;
|
||||
};
|
||||
|
||||
|
|
|
@ -57,7 +57,6 @@ _request_thumbnails(Ethumb_Client *client, void *data)
|
|||
DIR *dir;
|
||||
struct dirent *de;
|
||||
char buf[PATH_MAX];
|
||||
int i;
|
||||
|
||||
dir = opendir(path);
|
||||
if (!dir)
|
||||
|
@ -78,12 +77,7 @@ _request_thumbnails(Ethumb_Client *client, void *data)
|
|||
continue;
|
||||
snprintf(buf, sizeof(buf), "%s/%s", path, de->d_name);
|
||||
ethumb_client_file_set(client, buf, NULL);
|
||||
ethumb_client_generate(client, _queue_add_cb, NULL);
|
||||
}
|
||||
|
||||
for (i = 100; i < 200; i++)
|
||||
{
|
||||
ethumb_client_queue_remove(client, i, NULL, NULL);
|
||||
ethumb_client_generate(client, _queue_add_cb, NULL, NULL);
|
||||
}
|
||||
|
||||
closedir(dir);
|
||||
|
@ -115,7 +109,7 @@ main(int argc, char *argv[])
|
|||
}
|
||||
|
||||
ethumb_client_init();
|
||||
client = ethumb_client_connect(_connect_cb, argv[1]);
|
||||
client = ethumb_client_connect(_connect_cb, argv[1], NULL);
|
||||
if (!client)
|
||||
{
|
||||
fprintf(stderr, "ERROR: couldn't connect to server.\n");
|
||||
|
|
Loading…
Reference in New Issue