From 4d31236ea79a5e435627e7058f7853e6002c664b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erick=20P=C3=A9rez=20Castellanos?= Date: Sun, 25 Nov 2012 19:54:08 -0500 Subject: [PATCH] Changed event-created signal emission. GcalManager::event-created signal emission changed. The new code isn't reentrant so eventually has to be fixed. --- src/gcal-manager.c | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/src/gcal-manager.c b/src/gcal-manager.c index cc4ba527..9ea362cb 100644 --- a/src/gcal-manager.c +++ b/src/gcal-manager.c @@ -107,6 +107,10 @@ struct _GcalManagerPrivate /* timezone */ icaltimezone *system_timezone; + + /* uid of pending create event actions */ + gchar *pending_event_uid; + gchar *pending_event_source; }; /* Signal IDs */ @@ -700,6 +704,17 @@ gcal_manager_on_view_objects_added (ECalClientView *view, g_hash_table_insert (unit->events, g_strdup (icalcomponent_get_uid (l->data)), component); + + if (g_strcmp0 (source_uid, priv->pending_event_source) == 0 && + g_strcmp0 (icalcomponent_get_uid (l->data), priv->pending_event_uid) == 0) + { + g_signal_emit (GCAL_MANAGER (user_data), + signals[EVENT_CREATED], + 0, + source_uid, icalcomponent_get_uid (l->data)); + g_free (priv->pending_event_source); + g_free (priv->pending_event_uid); + } } if (unit->enabled) { @@ -1011,32 +1026,15 @@ gcal_manager_on_event_created (GObject *source_object, gchar *new_uid; GError *error; - /* If the view catch a signal of the newly created object then - * almost sure I have nothing to do here. */ - client = E_CAL_CLIENT (source_object); error = NULL; - if (e_cal_client_create_object_finish (client, result, &new_uid, &error)) - { - ESource *source; - const gchar *uid; - - source = e_client_get_source (E_CLIENT (client)); - uid = e_source_get_uid (source); - - g_signal_emit (GCAL_MANAGER (user_data), - signals[EVENT_CREATED], - 0, - uid, new_uid); - - g_free (new_uid); - } - else + if (! e_cal_client_create_object_finish (client, result, &new_uid, &error)) { /* Some error */ g_warning ("Error creating object: %s", error->message); g_error_free (error); } + g_free (new_uid); } static void @@ -1701,6 +1699,11 @@ gcal_manager_create_event (GcalManager *manager, e_cal_component_commit_sequence (event); new_event_icalcomp = e_cal_component_get_icalcomponent (event); + + priv->pending_event_source = g_strdup (source_uid); + priv->pending_event_uid = + g_strdup (icalcomponent_get_uid (new_event_icalcomp)); + e_cal_client_create_object (unit->client, new_event_icalcomp, priv->async_ops,