Introduce e_gdbus_templates_init_main_thread()
authorMilan Crha <mcrha@redhat.com>
Mon, 7 Nov 2011 09:23:07 +0000 (10:23 +0100)
committerMilan Crha <mcrha@redhat.com>
Mon, 7 Nov 2011 09:23:07 +0000 (10:23 +0100)
This is required to properly distinguish between EGDbusTemplates'
sync calls from the main thread and from a dedicated thread, because
the check with g_main_context_is_owner (g_main_context_default ())
doesn't work when there is no main loop running. The call to
e_gdbus_templates_init_main_thread() is good to do, but it is not
mandatory.

libedataserver/Makefile.am
libedataserver/e-gdbus-templates.c
libedataserver/e-gdbus-templates.h
tests/libebook/client/client-test-utils.c
tests/libecal/client/client-test-utils.c
tests/libedataserverui/test-client-examine-auth.c

index bcb60c0..0233115 100644 (file)
@@ -26,7 +26,6 @@ libedataserver_1_2_la_SOURCES =               \
        e-client-private.h              \
        e-credentials.c                 \
        e-flag.c                        \
-       e-gdbus-templates.h             \
        e-gdbus-templates.c             \
        e-iterator.c                    \
        e-list.c                        \
@@ -67,6 +66,8 @@ libedataserverinclude_HEADERS =               \
        e-client.h                      \
        e-credentials.h                 \
        e-flag.h                        \
+       e-gdbus-marshallers.h           \
+       e-gdbus-templates.h             \
        e-iterator.h                    \
        e-list.h                        \
        e-list-iterator.h               \
index 973fa8c..39d30a3 100644 (file)
 #include "e-flag.h"
 #include "e-gdbus-templates.h"
 
+static GThread *main_thread = NULL;
+
+void
+e_gdbus_templates_init_main_thread (void)
+{
+       if (!main_thread) {
+               main_thread = g_thread_self ();
+       } else if (main_thread != g_thread_self ()) {
+               g_warning ("%s: Called in different main thread, stored: %p would use: %p", G_STRFUNC, main_thread, g_thread_self ());
+       }
+}
+
 gboolean
 e_gdbus_signal_emission_hook_void (GSignalInvocationHint *ihint,
                                    guint n_param_values,
@@ -897,8 +909,8 @@ async_op_complete (AsyncOpData *op_data,
 }
 
 static void
-gdbus_op_cancelled_cb (GCancellable *cancellable,
-                       AsyncOpData *op_data)
+e_gdbus_op_cancelled_cb (GCancellable *cancellable,
+                        AsyncOpData *op_data)
 {
        GError *call_error = NULL;
 
@@ -921,9 +933,9 @@ gdbus_op_cancelled_cb (GCancellable *cancellable,
 }
 
 static void
-gdbus_async_call_opid_ready_cb (GObject *source_proxy,
-                                GAsyncResult *result,
-                                gpointer user_data)
+e_gdbus_async_call_opid_ready_cb (GObject *source_proxy,
+                                 GAsyncResult *result,
+                                  gpointer user_data)
 {
        GVariant *_result;
        GError *error = NULL;
@@ -945,7 +957,7 @@ gdbus_async_call_opid_ready_cb (GObject *source_proxy,
                g_variant_unref (_result);
 
                if (op_data->cancellable && !g_cancellable_set_error_if_cancelled (op_data->cancellable, &error))
-                       op_data->cancel_id = g_cancellable_connect (op_data->cancellable, G_CALLBACK (gdbus_op_cancelled_cb), op_data, NULL);
+                       op_data->cancel_id = g_cancellable_connect (op_data->cancellable, G_CALLBACK (e_gdbus_op_cancelled_cb), op_data, NULL);
                else
                        add_pending = op_data->cancellable == NULL;
 
@@ -981,11 +993,11 @@ copy_strv (const gchar * const *strv)
 }
 
 static void
-gdbus_proxy_async_method_done (guint e_gdbus_type,
-                               gconstpointer out_value,
-                               EGdbusAsyncOpKeeper *object,
-                               guint arg_opid,
-                               const GError *error)
+e_gdbus_proxy_async_method_done (guint e_gdbus_type,
+                                gconstpointer out_value,
+                                EGdbusAsyncOpKeeper *object,
+                                guint arg_opid,
+                                const GError *error)
 {
        AsyncOpData *op_data;
        GHashTable *pending_ops;
@@ -1035,7 +1047,7 @@ e_gdbus_proxy_async_method_done_void (EGdbusAsyncOpKeeper *proxy,
                                       guint arg_opid,
                                       const GError *error)
 {
-       gdbus_proxy_async_method_done (E_GDBUS_TYPE_VOID, NULL, proxy, arg_opid, error);
+       e_gdbus_proxy_async_method_done (E_GDBUS_TYPE_VOID, NULL, proxy, arg_opid, error);
 }
 
 void
@@ -1044,7 +1056,7 @@ e_gdbus_proxy_async_method_done_boolean (EGdbusAsyncOpKeeper *proxy,
                                          const GError *error,
                                          gboolean out_boolean)
 {
-       gdbus_proxy_async_method_done (E_GDBUS_TYPE_BOOLEAN, &out_boolean, proxy, arg_opid, error);
+       e_gdbus_proxy_async_method_done (E_GDBUS_TYPE_BOOLEAN, &out_boolean, proxy, arg_opid, error);
 }
 
 /* takes ownership of the out parameter */
@@ -1054,7 +1066,7 @@ e_gdbus_proxy_async_method_done_string (EGdbusAsyncOpKeeper *proxy,
                                         const GError *error,
                                         const gchar *out_string)
 {
-       gdbus_proxy_async_method_done (E_GDBUS_TYPE_STRING, out_string, proxy, arg_opid, error);
+       e_gdbus_proxy_async_method_done (E_GDBUS_TYPE_STRING, out_string, proxy, arg_opid, error);
 }
 
 /* takes ownership of the out parameter */
@@ -1064,7 +1076,7 @@ e_gdbus_proxy_async_method_done_strv (EGdbusAsyncOpKeeper *proxy,
                                       const GError *error,
                                       const gchar * const *out_strv)
 {
-       gdbus_proxy_async_method_done (E_GDBUS_TYPE_STRV, out_strv, proxy, arg_opid, error);
+       e_gdbus_proxy_async_method_done (E_GDBUS_TYPE_STRV, out_strv, proxy, arg_opid, error);
 }
 
 void
@@ -1073,18 +1085,18 @@ e_gdbus_proxy_async_method_done_uint (EGdbusAsyncOpKeeper *proxy,
                                       const GError *error,
                                       guint out_uint)
 {
-       gdbus_proxy_async_method_done (E_GDBUS_TYPE_UINT, &out_uint, proxy, arg_opid, error);
+       e_gdbus_proxy_async_method_done (E_GDBUS_TYPE_UINT, &out_uint, proxy, arg_opid, error);
 }
 
 /* takes ownership of _params */
 static void
-gdbus_proxy_call_with_params (GVariant *_params,
-                              const gchar *method_name,
-                              gpointer source_tag,
-                              EGdbusAsyncOpKeeper *proxy,
-                              GCancellable *cancellable,
-                              GAsyncReadyCallback callback,
-                              gpointer user_data)
+e_gdbus_proxy_call_with_params (GVariant *_params,
+                               const gchar *method_name,
+                               gpointer source_tag,
+                               EGdbusAsyncOpKeeper *proxy,
+                               GCancellable *cancellable,
+                               GAsyncReadyCallback callback,
+                               gpointer user_data)
 {
        AsyncOpData *op_data;
 
@@ -1098,7 +1110,7 @@ gdbus_proxy_call_with_params (GVariant *_params,
        if (op_data->cancellable)
                g_object_ref (op_data->cancellable);
 
-       g_dbus_proxy_call (G_DBUS_PROXY (proxy), method_name, _params, G_DBUS_CALL_FLAGS_NONE, e_data_server_util_get_dbus_call_timeout (), cancellable, gdbus_async_call_opid_ready_cb, op_data);
+       g_dbus_proxy_call (G_DBUS_PROXY (proxy), method_name, _params, G_DBUS_CALL_FLAGS_NONE, e_data_server_util_get_dbus_call_timeout (), cancellable, e_gdbus_async_call_opid_ready_cb, op_data);
 }
 
 void
@@ -1109,7 +1121,7 @@ e_gdbus_proxy_call_void (const gchar *method_name,
                          GAsyncReadyCallback callback,
                          gpointer user_data)
 {
-       gdbus_proxy_call_with_params (NULL, method_name, source_tag, proxy, cancellable, callback, user_data);
+       e_gdbus_proxy_call_with_params (NULL, method_name, source_tag, proxy, cancellable, callback, user_data);
 }
 
 void
@@ -1125,7 +1137,7 @@ e_gdbus_proxy_call_boolean (const gchar *method_name,
 
        _params = g_variant_new ("(b)", in_boolean);
 
-       gdbus_proxy_call_with_params (_params, method_name, source_tag, proxy, cancellable, callback, user_data);
+       e_gdbus_proxy_call_with_params (_params, method_name, source_tag, proxy, cancellable, callback, user_data);
 }
 
 void
@@ -1141,7 +1153,7 @@ e_gdbus_proxy_call_string (const gchar *method_name,
 
        _params = g_variant_new ("(s)", in_string);
 
-       gdbus_proxy_call_with_params (_params, method_name, source_tag, proxy, cancellable, callback, user_data);
+       e_gdbus_proxy_call_with_params (_params, method_name, source_tag, proxy, cancellable, callback, user_data);
 }
 
 void
@@ -1157,7 +1169,7 @@ e_gdbus_proxy_call_strv (const gchar *method_name,
 
        _params = g_variant_new ("(^as)", in_strv);
 
-       gdbus_proxy_call_with_params (_params, method_name, source_tag, proxy, cancellable, callback, user_data);
+       e_gdbus_proxy_call_with_params (_params, method_name, source_tag, proxy, cancellable, callback, user_data);
 }
 
 void
@@ -1173,7 +1185,7 @@ e_gdbus_proxy_call_uint (const gchar *method_name,
 
        _params = g_variant_new ("(u)", in_uint);
 
-       gdbus_proxy_call_with_params (_params, method_name, source_tag, proxy, cancellable, callback, user_data);
+       e_gdbus_proxy_call_with_params (_params, method_name, source_tag, proxy, cancellable, callback, user_data);
 }
 
 gboolean
@@ -1317,9 +1329,9 @@ typedef struct _SyncOpData
 } SyncOpData;
 
 static void
-gdbus_proxy_sync_ready_cb (GObject *proxy,
-                           GAsyncResult *result,
-                           gpointer user_data)
+e_gdbus_proxy_sync_ready_cb (GObject *proxy,
+                            GAsyncResult *result,
+                             gpointer user_data)
 {
        SyncOpData *sync_data = user_data;
 
@@ -1356,15 +1368,15 @@ gdbus_proxy_sync_ready_cb (GObject *proxy,
 }
 
 static gboolean
-gdbus_proxy_call_sync (GDBusProxy *proxy,
-                       GCancellable *cancellable,
-                       GError **error,
-                       gpointer start_func,
-                       gpointer finish_func,
-                       guint in_type,
-                       gconstpointer in_value,
-                       guint out_type,
-                       gpointer out_value)
+e_gdbus_proxy_call_sync (GDBusProxy *proxy,
+                        GCancellable *cancellable,
+                        GError **error,
+                        gpointer start_func,
+                        gpointer finish_func,
+                        guint in_type,
+                        gconstpointer in_value,
+                        guint out_type,
+                        gpointer out_value)
 {
        SyncOpData sync_data = { 0 };
 
@@ -1404,23 +1416,23 @@ gdbus_proxy_call_sync (GDBusProxy *proxy,
        switch (in_type) {
        case E_GDBUS_TYPE_VOID: {
                EGdbusCallStartVoid start = start_func;
-               start (proxy, cancellable, gdbus_proxy_sync_ready_cb, &sync_data);
+               start (proxy, cancellable, e_gdbus_proxy_sync_ready_cb, &sync_data);
        } break;
        case E_GDBUS_TYPE_BOOLEAN: {
                EGdbusCallStartBoolean start = start_func;
-               start (proxy, * ((gboolean *) in_value), cancellable, gdbus_proxy_sync_ready_cb, &sync_data);
+               start (proxy, * ((gboolean *) in_value), cancellable, e_gdbus_proxy_sync_ready_cb, &sync_data);
        } break;
        case E_GDBUS_TYPE_STRING: {
                EGdbusCallStartString start = start_func;
-               start (proxy, (const gchar *) in_value, cancellable, gdbus_proxy_sync_ready_cb, &sync_data);
+               start (proxy, (const gchar *) in_value, cancellable, e_gdbus_proxy_sync_ready_cb, &sync_data);
        } break;
        case E_GDBUS_TYPE_STRV: {
                EGdbusCallStartStrv start = start_func;
-               start (proxy, (const gchar * const *) in_value, cancellable, gdbus_proxy_sync_ready_cb, &sync_data);
+               start (proxy, (const gchar * const *) in_value, cancellable, e_gdbus_proxy_sync_ready_cb, &sync_data);
        } break;
        case E_GDBUS_TYPE_UINT: {
                EGdbusCallStartUint start = start_func;
-               start (proxy, * ((guint *) in_value), cancellable, gdbus_proxy_sync_ready_cb, &sync_data);
+               start (proxy, * ((guint *) in_value), cancellable, e_gdbus_proxy_sync_ready_cb, &sync_data);
        } break;
        default:
                g_warning ("%s: Unknown 'in' E_GDBUS_TYPE %x", G_STRFUNC, in_type);
@@ -1429,9 +1441,17 @@ gdbus_proxy_call_sync (GDBusProxy *proxy,
        }
 
        /* check if called from the main thread */
-       if (g_main_context_is_owner (g_main_context_default ())
+       if ((main_thread && main_thread == g_thread_self ()) ||
+           (!main_thread && (g_main_context_is_owner (g_main_context_default ())
            || g_main_context_default () == g_main_context_get_thread_default ()
-           || !g_main_context_get_thread_default ()) {
+           || !g_main_context_get_thread_default ()))) {
+               /* the call to e_gdbus_templates_init_main_thread() wasn't done, but no problem,
+                  check if the call was done in the main thread with main loop running,
+                  and if so, then remember it
+               */
+               if (!main_thread && g_main_context_is_owner (g_main_context_default ()))
+                       e_gdbus_templates_init_main_thread ();
+
                /* Might not be the best thing here, but as the async operation
                 * is divided into two-step process, invoking the method and
                 * waiting for its "done" signal, then if the sync method is called
@@ -1461,7 +1481,7 @@ e_gdbus_proxy_call_sync_void__void (GDBusProxy *proxy,
        g_return_val_if_fail (start_func != NULL, FALSE);
        g_return_val_if_fail (finish_func != NULL, FALSE);
 
-       return gdbus_proxy_call_sync (proxy, cancellable, error, start_func, finish_func, E_GDBUS_TYPE_VOID, NULL, E_GDBUS_TYPE_VOID, NULL);
+       return e_gdbus_proxy_call_sync (proxy, cancellable, error, start_func, finish_func, E_GDBUS_TYPE_VOID, NULL, E_GDBUS_TYPE_VOID, NULL);
 }
 
 gboolean
@@ -1477,7 +1497,7 @@ e_gdbus_proxy_call_sync_void__boolean (GDBusProxy *proxy,
        g_return_val_if_fail (finish_func != NULL, FALSE);
        g_return_val_if_fail (out_boolean != NULL, FALSE);
 
-       return gdbus_proxy_call_sync (proxy, cancellable, error, start_func, finish_func, E_GDBUS_TYPE_VOID, NULL, E_GDBUS_TYPE_BOOLEAN, out_boolean);
+       return e_gdbus_proxy_call_sync (proxy, cancellable, error, start_func, finish_func, E_GDBUS_TYPE_VOID, NULL, E_GDBUS_TYPE_BOOLEAN, out_boolean);
 }
 
 gboolean
@@ -1493,7 +1513,7 @@ e_gdbus_proxy_call_sync_void__string (GDBusProxy *proxy,
        g_return_val_if_fail (finish_func != NULL, FALSE);
        g_return_val_if_fail (out_string != NULL, FALSE);
 
-       return gdbus_proxy_call_sync (proxy, cancellable, error, start_func, finish_func, E_GDBUS_TYPE_VOID, NULL, E_GDBUS_TYPE_STRING, out_string);
+       return e_gdbus_proxy_call_sync (proxy, cancellable, error, start_func, finish_func, E_GDBUS_TYPE_VOID, NULL, E_GDBUS_TYPE_STRING, out_string);
 }
 
 gboolean
@@ -1509,7 +1529,7 @@ e_gdbus_proxy_call_sync_void__strv (GDBusProxy *proxy,
        g_return_val_if_fail (finish_func != NULL, FALSE);
        g_return_val_if_fail (out_strv != NULL, FALSE);
 
-       return gdbus_proxy_call_sync (proxy, cancellable, error, start_func, finish_func, E_GDBUS_TYPE_VOID, NULL, E_GDBUS_TYPE_STRV, out_strv);
+       return e_gdbus_proxy_call_sync (proxy, cancellable, error, start_func, finish_func, E_GDBUS_TYPE_VOID, NULL, E_GDBUS_TYPE_STRV, out_strv);
 }
 
 gboolean
@@ -1525,7 +1545,7 @@ e_gdbus_proxy_call_sync_void__uint (GDBusProxy *proxy,
        g_return_val_if_fail (finish_func != NULL, FALSE);
        g_return_val_if_fail (out_uint != NULL, FALSE);
 
-       return gdbus_proxy_call_sync (proxy, cancellable, error, start_func, finish_func, E_GDBUS_TYPE_VOID, NULL, E_GDBUS_TYPE_UINT, out_uint);
+       return e_gdbus_proxy_call_sync (proxy, cancellable, error, start_func, finish_func, E_GDBUS_TYPE_VOID, NULL, E_GDBUS_TYPE_UINT, out_uint);
 }
 
 gboolean
@@ -1540,7 +1560,7 @@ e_gdbus_proxy_call_sync_boolean__void (GDBusProxy *proxy,
        g_return_val_if_fail (start_func != NULL, FALSE);
        g_return_val_if_fail (finish_func != NULL, FALSE);
 
-       return gdbus_proxy_call_sync (proxy, cancellable, error, start_func, finish_func, E_GDBUS_TYPE_BOOLEAN, &in_boolean, E_GDBUS_TYPE_VOID, NULL);
+       return e_gdbus_proxy_call_sync (proxy, cancellable, error, start_func, finish_func, E_GDBUS_TYPE_BOOLEAN, &in_boolean, E_GDBUS_TYPE_VOID, NULL);
 }
 
 gboolean
@@ -1556,7 +1576,7 @@ e_gdbus_proxy_call_sync_string__void (GDBusProxy *proxy,
        g_return_val_if_fail (finish_func != NULL, FALSE);
        g_return_val_if_fail (in_string != NULL, FALSE);
 
-       return gdbus_proxy_call_sync (proxy, cancellable, error, start_func, finish_func, E_GDBUS_TYPE_STRING, in_string, E_GDBUS_TYPE_VOID, NULL);
+       return e_gdbus_proxy_call_sync (proxy, cancellable, error, start_func, finish_func, E_GDBUS_TYPE_STRING, in_string, E_GDBUS_TYPE_VOID, NULL);
 }
 
 gboolean
@@ -1572,7 +1592,7 @@ e_gdbus_proxy_call_sync_strv__void (GDBusProxy *proxy,
        g_return_val_if_fail (finish_func != NULL, FALSE);
        g_return_val_if_fail (in_strv != NULL, FALSE);
 
-       return gdbus_proxy_call_sync (proxy, cancellable, error, start_func, finish_func, E_GDBUS_TYPE_STRV, in_strv, E_GDBUS_TYPE_VOID, NULL);
+       return e_gdbus_proxy_call_sync (proxy, cancellable, error, start_func, finish_func, E_GDBUS_TYPE_STRV, in_strv, E_GDBUS_TYPE_VOID, NULL);
 }
 
 gboolean
@@ -1587,7 +1607,7 @@ e_gdbus_proxy_call_sync_uint__void (GDBusProxy *proxy,
        g_return_val_if_fail (start_func != NULL, FALSE);
        g_return_val_if_fail (finish_func != NULL, FALSE);
 
-       return gdbus_proxy_call_sync (proxy, cancellable, error, start_func, finish_func, E_GDBUS_TYPE_UINT, &in_uint, E_GDBUS_TYPE_VOID, NULL);
+       return e_gdbus_proxy_call_sync (proxy, cancellable, error, start_func, finish_func, E_GDBUS_TYPE_UINT, &in_uint, E_GDBUS_TYPE_VOID, NULL);
 }
 
 gboolean
@@ -1605,7 +1625,7 @@ e_gdbus_proxy_call_sync_string__string (GDBusProxy *proxy,
        g_return_val_if_fail (in_string != NULL, FALSE);
        g_return_val_if_fail (out_string != NULL, FALSE);
 
-       return gdbus_proxy_call_sync (proxy, cancellable, error, start_func, finish_func, E_GDBUS_TYPE_STRING, in_string, E_GDBUS_TYPE_STRING, out_string);
+       return e_gdbus_proxy_call_sync (proxy, cancellable, error, start_func, finish_func, E_GDBUS_TYPE_STRING, in_string, E_GDBUS_TYPE_STRING, out_string);
 }
 
 gboolean
@@ -1623,7 +1643,7 @@ e_gdbus_proxy_call_sync_string__strv (GDBusProxy *proxy,
        g_return_val_if_fail (in_string != NULL, FALSE);
        g_return_val_if_fail (out_strv != NULL, FALSE);
 
-       return gdbus_proxy_call_sync (proxy, cancellable, error, start_func, finish_func, E_GDBUS_TYPE_STRING, in_string, E_GDBUS_TYPE_STRV, out_strv);
+       return e_gdbus_proxy_call_sync (proxy, cancellable, error, start_func, finish_func, E_GDBUS_TYPE_STRING, in_string, E_GDBUS_TYPE_STRV, out_strv);
 }
 
 gboolean
@@ -1641,7 +1661,7 @@ e_gdbus_proxy_call_sync_strv__string (GDBusProxy *proxy,
        g_return_val_if_fail (in_strv != NULL, FALSE);
        g_return_val_if_fail (out_string != NULL, FALSE);
 
-       return gdbus_proxy_call_sync (proxy, cancellable, error, start_func, finish_func, E_GDBUS_TYPE_STRV, in_strv, E_GDBUS_TYPE_STRING, out_string);
+       return e_gdbus_proxy_call_sync (proxy, cancellable, error, start_func, finish_func, E_GDBUS_TYPE_STRV, in_strv, E_GDBUS_TYPE_STRING, out_string);
 }
 
 gboolean
@@ -1659,7 +1679,7 @@ e_gdbus_proxy_call_sync_strv__strv (GDBusProxy *proxy,
        g_return_val_if_fail (in_strv != NULL, FALSE);
        g_return_val_if_fail (out_strv != NULL, FALSE);
 
-       return gdbus_proxy_call_sync (proxy, cancellable, error, start_func, finish_func, E_GDBUS_TYPE_STRV, in_strv, E_GDBUS_TYPE_STRV, out_strv);
+       return e_gdbus_proxy_call_sync (proxy, cancellable, error, start_func, finish_func, E_GDBUS_TYPE_STRV, in_strv, E_GDBUS_TYPE_STRV, out_strv);
 }
 
 static void
index 87e30a1..a42be84 100644 (file)
@@ -27,6 +27,8 @@
 
 G_BEGIN_DECLS
 
+void           e_gdbus_templates_init_main_thread              (void);
+
 #define E_TYPE_GDBUS_ASYNC_OP_KEEPER           (e_gdbus_async_op_keeper_get_type ())
 #define E_GDBUS_ASYNC_OP_KEEPER(o)             (G_TYPE_CHECK_INSTANCE_CAST ((o), E_TYPE_GDBUS_ASYNC_OP_KEEPER, EGdbusAsyncOpKeeper))
 #define E_IS_GDBUS_ASYNC_OP_KEEPER(o)          (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_TYPE_GDBUS_ASYNC_OP_KEEPER))
index 376c039..760217b 100644 (file)
@@ -2,6 +2,8 @@
 
 #include <stdio.h>
 
+#include <libedataserver/e-gdbus-templates.h>
+
 #include "client-test-utils.h"
 
 void
@@ -67,6 +69,7 @@ main_initialize (void)
                return;
 
        g_type_init ();
+       e_gdbus_templates_init_main_thread ();
 
        initialized = TRUE;
 }
index 1642ca0..322120d 100644 (file)
@@ -2,6 +2,8 @@
 
 #include <stdio.h>
 
+#include <libedataserver/e-gdbus-templates.h>
+
 #include "client-test-utils.h"
 
 void
@@ -63,6 +65,7 @@ main_initialize (void)
                return;
 
        g_type_init ();
+       e_gdbus_templates_init_main_thread ();
 
        initialized = TRUE;
 }
index 74ba5d8..3efee31 100644 (file)
@@ -1,6 +1,7 @@
 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
 
 #include <libedataserver/e-source-group.h>
+#include <libedataserver/e-gdbus-templates.h>
 #include <libedataserverui/e-client-utils.h>
 #include <libedataserverui/e-passwords.h>
 
@@ -415,6 +416,7 @@ main (gint argc,
        gtk_init (&argc, &argv);
 
        e_passwords_init ();
+       e_gdbus_templates_init_main_thread ();
 
        g_idle_add (in_main_thread_idle_cb, NULL);