[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