[Xfce4-commits] <tumbler:master> Added dbus_message_set_destination to the DBus signal emits
Jannis Pohlmann
noreply at xfce.org
Wed Oct 14 23:48:01 CEST 2009
Updating branch refs/heads/master
to 37ef4b1b78fbc31b2aa1239a8b1987be261951dd (commit)
from f4dc40407eeca29ef5a533e2a0a8e060aa588a66 (commit)
commit 37ef4b1b78fbc31b2aa1239a8b1987be261951dd
Author: Philip Van Hoof <philip at codeminded.be>
Date: Wed Oct 14 18:34:34 2009 +0200
Added dbus_message_set_destination to the DBus signal emits
Signed-off-by: Jannis Pohlmann <jannis at xfce.org>
tumbler/tumbler-marshal.list | 5 +-
tumblerd/tumbler-group-scheduler.c | 15 +++--
tumblerd/tumbler-lifo-scheduler.c | 13 +++--
tumblerd/tumbler-scheduler.c | 32 ++++++----
tumblerd/tumbler-scheduler.h | 4 +-
tumblerd/tumbler-service.c | 119 +++++++++++++++++++++++++++++++++---
6 files changed, 153 insertions(+), 35 deletions(-)
diff --git a/tumbler/tumbler-marshal.list b/tumbler/tumbler-marshal.list
index f5f6213..7037f40 100644
--- a/tumbler/tumbler-marshal.list
+++ b/tumbler/tumbler-marshal.list
@@ -1,3 +1,6 @@
VOID:STRING,INT,STRING
-VOID:UINT,POINTER,INT,STRING
+VOID:UINT,POINTER,INT,STRING,STRING
VOID:STRING,INT,STRING
+VOID:POINTER,STRING
+VOID:UINT,STRING
+VOID:UINT,POINTER,INT,STRING
diff --git a/tumblerd/tumbler-group-scheduler.c b/tumblerd/tumbler-group-scheduler.c
index 9477519..7c4cdf0 100644
--- a/tumblerd/tumbler-group-scheduler.c
+++ b/tumblerd/tumbler-group-scheduler.c
@@ -288,8 +288,8 @@ tumbler_group_scheduler_finish_request (TumblerGroupScheduler *scheduler,
g_return_if_fail (TUMBLER_IS_GROUP_SCHEDULER (scheduler));
g_return_if_fail (request != NULL);
- /* emit a finished signal */
- g_signal_emit_by_name (scheduler, "finished", request->handle);
+ /* emit a signal */
+ g_signal_emit_by_name (scheduler, "finished", request->handle, request->origin);
/* remove the request from the request list */
scheduler->requests = g_list_remove (scheduler->requests, request);
@@ -388,7 +388,8 @@ tumbler_group_scheduler_thread (gpointer data,
}
/* notify others that we're starting to process this request */
- g_signal_emit_by_name (request->scheduler, "started", request->handle);
+ g_signal_emit_by_name (request->scheduler, "started", request->handle,
+ request->origin);
/* finish the request if it was unqueued */
g_mutex_lock (scheduler->mutex);
@@ -490,7 +491,7 @@ tumbler_group_scheduler_thread (gpointer data,
uris[n] = NULL;
/* notify others that the cached thumbnails are ready */
- g_signal_emit_by_name (scheduler, "ready", uris);
+ g_signal_emit_by_name (scheduler, "ready", uris, request->origin);
/* free string array and cached list */
g_list_free (cached_uris);
@@ -579,7 +580,8 @@ tumbler_group_scheduler_thread (gpointer data,
/* forward the error signal */
g_signal_emit_by_name (request->scheduler, "error", request->handle,
- failed_uris, error_code, message->str);
+ failed_uris, error_code, message->str,
+ request->origin);
/* free the failed URIs array. Its contents are owned by the URI errors */
g_free (failed_uris);
@@ -606,7 +608,8 @@ tumbler_group_scheduler_thread (gpointer data,
success_uris[n] = NULL;
/* emit a grouped ready signal */
- g_signal_emit_by_name (request->scheduler, "ready", success_uris);
+ g_signal_emit_by_name (request->scheduler, "ready", success_uris,
+ request->origin);
/* free the success URI array. Its contents are owned by the ready URI list */
g_free (success_uris);
diff --git a/tumblerd/tumbler-lifo-scheduler.c b/tumblerd/tumbler-lifo-scheduler.c
index c9c01e4..2c25517 100644
--- a/tumblerd/tumbler-lifo-scheduler.c
+++ b/tumblerd/tumbler-lifo-scheduler.c
@@ -265,7 +265,8 @@ tumbler_lifo_scheduler_finish_request (TumblerLifoScheduler *scheduler,
g_return_if_fail (request != NULL);
/* emit a finished signal for this request */
- g_signal_emit_by_name (scheduler, "finished", request->handle);
+ g_signal_emit_by_name (scheduler, "finished", request->handle,
+ request->origin);
/* remove the request from the list */
scheduler->requests = g_list_remove (scheduler->requests, request);
@@ -321,7 +322,8 @@ tumbler_lifo_scheduler_thread (gpointer data,
g_return_if_fail (request != NULL);
/* notify others that we're starting to process this request */
- g_signal_emit_by_name (request->scheduler, "started", request->handle);
+ g_signal_emit_by_name (request->scheduler, "started", request->handle,
+ request->origin);
/* finish the request if it was already unqueued */
g_mutex_lock (scheduler->mutex);
@@ -423,7 +425,7 @@ tumbler_lifo_scheduler_thread (gpointer data,
uris[n] = NULL;
/* notify others that the cached thumbnails are ready */
- g_signal_emit_by_name (scheduler, "ready", uris);
+ g_signal_emit_by_name (scheduler, "ready", uris, request->origin);
/* free string array and cached list */
g_list_free (cached_uris);
@@ -496,7 +498,7 @@ tumbler_lifo_scheduler_thumbnailer_error (TumblerThumbnailer *thumbnailer,
/* forward the error signal */
g_signal_emit_by_name (request->scheduler, "error", request->handle, failed_uris,
- error_code, message);
+ error_code, message, request->origin, request->origin);
}
@@ -513,8 +515,9 @@ tumbler_lifo_scheduler_thumbnailer_ready (TumblerThumbnailer *thumbnailer,
g_return_if_fail (request != NULL);
g_return_if_fail (TUMBLER_IS_LIFO_SCHEDULER (request->scheduler));
+
/* forward the ready signal */
- g_signal_emit_by_name (request->scheduler, "ready", uris);
+ g_signal_emit_by_name (request->scheduler, "ready", uris, request->origin);
}
diff --git a/tumblerd/tumbler-scheduler.c b/tumblerd/tumbler-scheduler.c
index 4de245b..055619c 100644
--- a/tumblerd/tumbler-scheduler.c
+++ b/tumblerd/tumbler-scheduler.c
@@ -122,12 +122,13 @@ tumbler_scheduler_class_init (TumblerSchedulerIface *klass)
G_STRUCT_OFFSET (TumblerSchedulerIface, error),
NULL,
NULL,
- tumbler_marshal_VOID__UINT_POINTER_INT_STRING,
+ tumbler_marshal_VOID__UINT_POINTER_INT_STRING_STRING,
G_TYPE_NONE,
- 4,
+ 5,
G_TYPE_UINT,
G_TYPE_STRV,
G_TYPE_INT,
+ G_TYPE_STRING,
G_TYPE_STRING);
tumbler_scheduler_signals[SIGNAL_FINISHED] =
@@ -137,10 +138,11 @@ tumbler_scheduler_class_init (TumblerSchedulerIface *klass)
G_STRUCT_OFFSET (TumblerSchedulerIface, finished),
NULL,
NULL,
- g_cclosure_marshal_VOID__UINT,
+ tumbler_marshal_VOID__UINT_STRING,
G_TYPE_NONE,
- 1,
- G_TYPE_UINT);
+ 2,
+ G_TYPE_UINT,
+ G_TYPE_STRING);
tumbler_scheduler_signals[SIGNAL_READY] =
g_signal_new ("ready",
@@ -149,10 +151,11 @@ tumbler_scheduler_class_init (TumblerSchedulerIface *klass)
G_STRUCT_OFFSET (TumblerSchedulerIface, ready),
NULL,
NULL,
- g_cclosure_marshal_VOID__POINTER,
+ tumbler_marshal_VOID__POINTER_STRING,
G_TYPE_NONE,
- 1,
- G_TYPE_STRV);
+ 2,
+ G_TYPE_STRV,
+ G_TYPE_STRING);
tumbler_scheduler_signals[SIGNAL_STARTED] =
g_signal_new ("started",
@@ -161,10 +164,11 @@ tumbler_scheduler_class_init (TumblerSchedulerIface *klass)
G_STRUCT_OFFSET (TumblerSchedulerIface, started),
NULL,
NULL,
- g_cclosure_marshal_VOID__UINT,
+ tumbler_marshal_VOID__UINT_STRING,
G_TYPE_NONE,
- 1,
- G_TYPE_UINT);
+ 2,
+ G_TYPE_UINT,
+ G_TYPE_STRING);
}
@@ -240,7 +244,8 @@ TumblerSchedulerRequest *
tumbler_scheduler_request_new (const GStrv uris,
const GStrv mime_hints,
TumblerThumbnailer **thumbnailers,
- gint length)
+ gint length,
+ const gchar *origin)
{
TumblerSchedulerRequest *request = NULL;
static gint handle = 0;
@@ -251,6 +256,8 @@ tumbler_scheduler_request_new (const GStrv uris,
g_return_val_if_fail (thumbnailers != NULL, NULL);
request = g_new0 (TumblerSchedulerRequest, 1);
+ if (origin)
+ request->origin = g_strdup (origin);
request->unqueued = FALSE;
request->scheduler = NULL;
request->handle = handle++;
@@ -288,6 +295,7 @@ tumbler_scheduler_request_free (TumblerSchedulerRequest *request)
g_object_unref (request->cancellables[n]);
g_free (request->cancellables);
+ g_free (request->origin);
g_free (request);
}
diff --git a/tumblerd/tumbler-scheduler.h b/tumblerd/tumbler-scheduler.h
index 5662b7d..3eaacac 100644
--- a/tumblerd/tumbler-scheduler.h
+++ b/tumblerd/tumbler-scheduler.h
@@ -76,7 +76,8 @@ void tumbler_scheduler_emit_uri_error (TumblerSchedul
TumblerSchedulerRequest *tumbler_scheduler_request_new (const GStrv uris,
const GStrv mime_hints,
TumblerThumbnailer **thumbnailers,
- gint length);
+ gint length,
+ const gchar *origin);
void tumbler_scheduler_request_free (TumblerSchedulerRequest *request);
gint tumbler_scheduler_request_compare (gconstpointer a,
gconstpointer b,
@@ -94,6 +95,7 @@ struct _TumblerSchedulerRequest
guint handle;
gint length;
GCancellable **cancellables;
+ gchar *origin;
};
G_END_DECLS
diff --git a/tumblerd/tumbler-service.c b/tumblerd/tumbler-service.c
index 3f1bb54..c965b23 100644
--- a/tumblerd/tumbler-service.c
+++ b/tumblerd/tumbler-service.c
@@ -39,7 +39,9 @@
#include <tumblerd/tumbler-group-scheduler.h>
#include <tumblerd/tumbler-utils.h>
-
+#define THUMBNAILER_PATH "/org/freedesktop/thumbnails/Thumbnailer1"
+#define THUMBNAILER_SERVICE "org.freedesktop.thumbnails.Thumbnailer1"
+#define THUMBNAILER_IFACE "org.freedesktop.thumbnails.Thumbnailer1"
/* signal identifiers */
enum
@@ -76,15 +78,19 @@ static void tumbler_service_scheduler_error (TumblerScheduler *scheduler,
const GStrv failed_uris,
gint error_code,
const gchar *message,
+ const gchar *origin,
TumblerService *service);
static void tumbler_service_scheduler_finished (TumblerScheduler *scheduler,
guint handle,
+ const gchar *origin,
TumblerService *service);
static void tumbler_service_scheduler_ready (TumblerScheduler *scheduler,
const GStrv uris,
+ const gchar *origin,
TumblerService *service);
static void tumbler_service_scheduler_started (TumblerScheduler *scheduler,
guint handle,
+ const gchar *origin,
TumblerService *service);
@@ -320,11 +326,39 @@ tumbler_service_scheduler_error (TumblerScheduler *scheduler,
guint handle,
const GStrv failed_uris,
gint error_code,
- const gchar *message,
+ const gchar *message_s,
+ const gchar *origin,
TumblerService *service)
{
- g_signal_emit (service, tumbler_service_signals[SIGNAL_ERROR], 0,
- handle, failed_uris, error_code, message);
+ DBusMessage *message;
+ DBusMessageIter iter, strv_iter;
+ guint n;
+
+ message = dbus_message_new_signal (THUMBNAILER_PATH,
+ THUMBNAILER_IFACE,
+ "Error");
+
+ if (origin)
+ dbus_message_set_destination (message, origin);
+
+ dbus_message_iter_init_append (message, &iter);
+ dbus_message_iter_append_basic (&iter, DBUS_TYPE_UINT32, &handle);
+
+ dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY,
+ DBUS_TYPE_STRING_AS_STRING, &strv_iter);
+
+ for (n = 0; failed_uris[n] != NULL; n++)
+ dbus_message_iter_append_basic (&strv_iter, DBUS_TYPE_STRING, &failed_uris[n]);
+
+ dbus_message_iter_close_container (&iter, &strv_iter);
+
+ dbus_message_iter_append_basic (&iter, DBUS_TYPE_UINT32, &error_code);
+ dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &message_s);
+
+ dbus_connection_send (dbus_g_connection_get_connection (service->connection),
+ message, NULL);
+
+ dbus_message_unref (message);
}
@@ -332,9 +366,26 @@ tumbler_service_scheduler_error (TumblerScheduler *scheduler,
static void
tumbler_service_scheduler_finished (TumblerScheduler *scheduler,
guint handle,
+ const gchar *origin,
TumblerService *service)
{
- g_signal_emit (service, tumbler_service_signals[SIGNAL_FINISHED], 0, handle);
+ DBusMessage *message;
+ DBusMessageIter iter;
+
+ message = dbus_message_new_signal (THUMBNAILER_PATH,
+ THUMBNAILER_IFACE,
+ "Finished");
+
+ if (origin)
+ dbus_message_set_destination (message, origin);
+
+ dbus_message_iter_init_append (message, &iter);
+ dbus_message_iter_append_basic (&iter, DBUS_TYPE_UINT32, &handle);
+
+ dbus_connection_send (dbus_g_connection_get_connection (service->connection),
+ message, NULL);
+
+ dbus_message_unref (message);
}
@@ -342,9 +393,35 @@ tumbler_service_scheduler_finished (TumblerScheduler *scheduler,
static void
tumbler_service_scheduler_ready (TumblerScheduler *scheduler,
const GStrv uris,
+ const gchar *origin,
TumblerService *service)
{
- g_signal_emit (service, tumbler_service_signals[SIGNAL_READY], 0, uris);
+ DBusMessage *message;
+ DBusMessageIter iter, strv_iter;
+ guint n;
+
+ message = dbus_message_new_signal (THUMBNAILER_PATH,
+ THUMBNAILER_IFACE,
+ "Ready");
+
+ if (origin)
+ dbus_message_set_destination (message, origin);
+
+ dbus_message_iter_init_append (message, &iter);
+
+ dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY,
+ DBUS_TYPE_STRING_AS_STRING, &strv_iter);
+
+ for (n = 0; uris[n] != NULL; n++)
+ dbus_message_iter_append_basic (&strv_iter, DBUS_TYPE_STRING, &uris[n]);
+
+ dbus_message_iter_close_container (&iter, &strv_iter);
+
+ dbus_connection_send (dbus_g_connection_get_connection (service->connection),
+ message, NULL);
+
+ dbus_message_unref (message);
+
}
@@ -352,9 +429,26 @@ tumbler_service_scheduler_ready (TumblerScheduler *scheduler,
static void
tumbler_service_scheduler_started (TumblerScheduler *scheduler,
guint handle,
+ const gchar *origin,
TumblerService *service)
{
- g_signal_emit (service, tumbler_service_signals[SIGNAL_STARTED], 0, handle);
+ DBusMessage *message;
+ DBusMessageIter iter;
+
+ message = dbus_message_new_signal (THUMBNAILER_PATH,
+ THUMBNAILER_IFACE,
+ "Started");
+
+ if (origin)
+ dbus_message_set_destination (message, origin);
+
+ dbus_message_iter_init_append (message, &iter);
+ dbus_message_iter_append_basic (&iter, DBUS_TYPE_UINT32, &handle);
+
+ dbus_connection_send (dbus_g_connection_get_connection (service->connection),
+ message, NULL);
+
+ dbus_message_unref (message);
}
@@ -388,7 +482,7 @@ tumbler_service_start (TumblerService *service,
connection = dbus_g_connection_get_connection (service->connection);
/* request ownership for the generic thumbnailer interface */
- result = dbus_bus_request_name (connection, "org.freedesktop.thumbnails.Thumbnailer1",
+ result = dbus_bus_request_name (connection, THUMBNAILER_SERVICE,
DBUS_NAME_FLAG_DO_NOT_QUEUE, &dbus_error);
/* check if that failed */
@@ -419,7 +513,7 @@ tumbler_service_start (TumblerService *service,
/* register the service instance as a handler of this interface */
dbus_g_connection_register_g_object (service->connection,
- "/org/freedesktop/thumbnails/Thumbnailer1",
+ THUMBNAILER_PATH,
G_OBJECT (service));
g_mutex_unlock (service->mutex);
@@ -442,6 +536,7 @@ tumbler_service_queue (TumblerService *service,
TumblerThumbnailer **thumbnailers;
GList *iter;
gchar *name;
+ gchar *origin;
guint handle;
gint num_thumbnailers;
@@ -460,9 +555,13 @@ tumbler_service_queue (TumblerService *service,
uris, mime_hints,
&num_thumbnailers);
+ origin = dbus_g_method_get_sender (context);
+
/* allocate a scheduler request */
scheduler_request = tumbler_scheduler_request_new (uris, mime_hints, thumbnailers,
- num_thumbnailers);
+ num_thumbnailers, origin);
+
+ g_free (origin);
/* get the request handle */
handle = scheduler_request->handle;
More information about the Xfce4-commits
mailing list