[gnome-calendar] Changed event-created signal emission.
- From: Erick PÃrez Castellanos <erickpc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-calendar] Changed event-created signal emission.
- Date: Sat, 1 Dec 2012 20:35:10 +0000 (UTC)
commit 4d31236ea79a5e435627e7058f7853e6002c664b
Author: Erick PÃrez Castellanos <erick red gmail com>
Date: Sun Nov 25 19:54:08 2012 -0500
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 files changed, 22 insertions(+), 19 deletions(-)
---
diff --git a/src/gcal-manager.c b/src/gcal-manager.c
index cc4ba52..9ea362c 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,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]