summaryrefslogtreecommitdiff
path: root/addressbook/libebook/e-book-client.c
diff options
context:
space:
mode:
Diffstat (limited to 'addressbook/libebook/e-book-client.c')
-rw-r--r--addressbook/libebook/e-book-client.c87
1 files changed, 32 insertions, 55 deletions
diff --git a/addressbook/libebook/e-book-client.c b/addressbook/libebook/e-book-client.c
index 7c66828f0..00d52e515 100644
--- a/addressbook/libebook/e-book-client.c
+++ b/addressbook/libebook/e-book-client.c
@@ -1025,67 +1025,15 @@ static void book_client_open (EClient *client,
gpointer user_data);
static void
-direct_book_async_opened (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- PropagateReadyData *data = (PropagateReadyData *)user_data;
- GError *error = NULL;
-
- if (e_data_book_open_finish (E_DATA_BOOK (source_object), res, &error)) {
-
- /* Open direct book succeeded, now proceed to open the real book over D-Bus */
- e_client_proxy_call_boolean (E_CLIENT (data->client), data->only_if_exists,
- data->cancellable, data->callback, data->user_data, book_client_open,
- e_gdbus_book_call_open, e_gdbus_book_call_open_finish,
- NULL, NULL, NULL, NULL);
- } else {
- /* Open failed, report error right away */
- GSimpleAsyncResult *result;
-
- result = g_simple_async_result_new_take_error (G_OBJECT (data->client),
- data->callback,
- data->user_data,
- error);
- g_simple_async_result_complete (result);
- g_object_unref (result);
- }
-
- propagate_ready_data_free (data);
-}
-
-static void
book_client_open (EClient *client,
gboolean only_if_exists,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data)
{
- EBookClient *book_client;
- PropagateReadyData *data;
-
- g_return_if_fail (E_IS_BOOK_CLIENT (client));
-
- book_client = E_BOOK_CLIENT (client);
-
- if (book_client->priv->direct_book) {
- data = propagate_ready_data_new (book_client,
- callback,
- user_data,
- book_client_open,
- cancellable);
- data->only_if_exists = only_if_exists;
-
- e_data_book_open (book_client->priv->direct_book,
- only_if_exists,
- cancellable,
- direct_book_async_opened,
- data);
- } else {
- e_client_proxy_call_boolean (client, only_if_exists, cancellable, callback, user_data, book_client_open,
+ e_client_proxy_call_boolean (client, only_if_exists, cancellable, callback, user_data, book_client_open,
e_gdbus_book_call_open,
e_gdbus_book_call_open_finish, NULL, NULL, NULL, NULL);
- }
}
static gboolean
@@ -1093,7 +1041,33 @@ book_client_open_finish (EClient *client,
GAsyncResult *result,
GError **error)
{
- return e_client_proxy_call_finish_void (client, result, error, book_client_open);
+ EBookClient *book_client;
+
+ g_return_val_if_fail (E_IS_BOOK_CLIENT (client), FALSE);
+
+ book_client = E_BOOK_CLIENT (client);
+
+ if (!e_client_proxy_call_finish_void (client, result, error, book_client_open))
+ return FALSE;
+
+ /**
+ * This is cheating, for two reasons:
+ * - We should avoid the synchronous call here and instead
+ * hook into the asynchronous processing of the opening.
+ * - only_if_exists is assumed to always be FALSE (as safe bet,
+ * because setting the parameter to TRUE does not make sense,
+ * as discussed on #evolution a while back).
+ * - This operation cannot be cancelled.
+ *
+ * This is a quick fix for openismus-work. A better solution must
+ * land in master.
+ */
+ if (book_client->priv->direct_book &&
+ !e_data_book_open_sync (book_client->priv->direct_book,
+ FALSE /* only_if_exists */, NULL /* cancellable */, error))
+ return FALSE;
+
+ return TRUE;
}
static gboolean
@@ -1113,12 +1087,15 @@ book_client_open_sync (EClient *client,
return FALSE;
}
+ if (!e_client_proxy_call_sync_boolean__void (client, only_if_exists, cancellable, error, e_gdbus_book_call_open_sync))
+ return FALSE;
+
if (book_client->priv->direct_book &&
!e_data_book_open_sync (book_client->priv->direct_book,
only_if_exists, cancellable, error))
return FALSE;
- return e_client_proxy_call_sync_boolean__void (client, only_if_exists, cancellable, error, e_gdbus_book_call_open_sync);
+ return TRUE;
}
static void