Changed event-created signal emission.
GcalManager::event-created signal emission changed. The new code isn't reentrant so eventually has to be fixed.
This commit is contained in:
committed by
Rene A. Viant Moran
parent
8e0de96520
commit
4d31236ea7
+22
-19
@@ -107,6 +107,10 @@ struct _GcalManagerPrivate
|
|||||||
|
|
||||||
/* timezone */
|
/* timezone */
|
||||||
icaltimezone *system_timezone;
|
icaltimezone *system_timezone;
|
||||||
|
|
||||||
|
/* uid of pending create event actions */
|
||||||
|
gchar *pending_event_uid;
|
||||||
|
gchar *pending_event_source;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Signal IDs */
|
/* Signal IDs */
|
||||||
@@ -700,6 +704,17 @@ gcal_manager_on_view_objects_added (ECalClientView *view,
|
|||||||
g_hash_table_insert (unit->events,
|
g_hash_table_insert (unit->events,
|
||||||
g_strdup (icalcomponent_get_uid (l->data)),
|
g_strdup (icalcomponent_get_uid (l->data)),
|
||||||
component);
|
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)
|
if (unit->enabled)
|
||||||
{
|
{
|
||||||
@@ -1011,32 +1026,15 @@ gcal_manager_on_event_created (GObject *source_object,
|
|||||||
gchar *new_uid;
|
gchar *new_uid;
|
||||||
GError *error;
|
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);
|
client = E_CAL_CLIENT (source_object);
|
||||||
error = NULL;
|
error = NULL;
|
||||||
if (e_cal_client_create_object_finish (client, result, &new_uid, &error))
|
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
|
|
||||||
{
|
{
|
||||||
/* Some error */
|
/* Some error */
|
||||||
g_warning ("Error creating object: %s", error->message);
|
g_warning ("Error creating object: %s", error->message);
|
||||||
g_error_free (error);
|
g_error_free (error);
|
||||||
}
|
}
|
||||||
|
g_free (new_uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -1701,6 +1699,11 @@ gcal_manager_create_event (GcalManager *manager,
|
|||||||
e_cal_component_commit_sequence (event);
|
e_cal_component_commit_sequence (event);
|
||||||
|
|
||||||
new_event_icalcomp = e_cal_component_get_icalcomponent (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,
|
e_cal_client_create_object (unit->client,
|
||||||
new_event_icalcomp,
|
new_event_icalcomp,
|
||||||
priv->async_ops,
|
priv->async_ops,
|
||||||
|
|||||||
Reference in New Issue
Block a user