};
struct _SignalClosure {
- ECalClientView *client_view;
+ GWeakRef client_view;
GSList *component_list;
GSList *component_id_list;
gchar *message;
static void
signal_closure_free (SignalClosure *signal_closure)
{
- g_object_unref (signal_closure->client_view);
+ g_weak_ref_set (&signal_closure->client_view, NULL);
g_slist_free_full (
signal_closure->component_list,
cal_client_view_emit_objects_added_idle_cb (gpointer user_data)
{
SignalClosure *signal_closure = user_data;
+ ECalClientView *client_view;
- g_signal_emit (
- signal_closure->client_view,
- signals[OBJECTS_ADDED], 0,
- signal_closure->component_list);
+ client_view = g_weak_ref_get (&signal_closure->client_view);
+
+ if (client_view != NULL) {
+ g_signal_emit (
+ client_view,
+ signals[OBJECTS_ADDED], 0,
+ signal_closure->component_list);
+ g_object_unref (client_view);
+ }
return FALSE;
}
cal_client_view_emit_objects_modified_idle_cb (gpointer user_data)
{
SignalClosure *signal_closure = user_data;
+ ECalClientView *client_view;
+
+ client_view = g_weak_ref_get (&signal_closure->client_view);
- g_signal_emit (
- signal_closure->client_view,
- signals[OBJECTS_MODIFIED], 0,
- signal_closure->component_list);
+ if (client_view != NULL) {
+ g_signal_emit (
+ client_view,
+ signals[OBJECTS_MODIFIED], 0,
+ signal_closure->component_list);
+ g_object_unref (client_view);
+ }
return FALSE;
}
cal_client_view_emit_objects_removed_idle_cb (gpointer user_data)
{
SignalClosure *signal_closure = user_data;
+ ECalClientView *client_view;
- g_signal_emit (
- signal_closure->client_view,
- signals[OBJECTS_REMOVED], 0,
- signal_closure->component_id_list);
+ client_view = g_weak_ref_get (&signal_closure->client_view);
+
+ if (client_view != NULL) {
+ g_signal_emit (
+ client_view,
+ signals[OBJECTS_REMOVED], 0,
+ signal_closure->component_id_list);
+ g_object_unref (client_view);
+ }
return FALSE;
}
cal_client_view_emit_progress_idle_cb (gpointer user_data)
{
SignalClosure *signal_closure = user_data;
+ ECalClientView *client_view;
+
+ client_view = g_weak_ref_get (&signal_closure->client_view);
- g_signal_emit (
- signal_closure->client_view,
- signals[PROGRESS], 0,
- signal_closure->percent,
- signal_closure->message);
+ if (client_view != NULL) {
+ g_signal_emit (
+ client_view,
+ signals[PROGRESS], 0,
+ signal_closure->percent,
+ signal_closure->message);
+ g_object_unref (client_view);
+ }
return FALSE;
}
cal_client_view_emit_complete_idle_cb (gpointer user_data)
{
SignalClosure *signal_closure = user_data;
+ ECalClientView *client_view;
- g_signal_emit (
- signal_closure->client_view,
- signals[COMPLETE], 0,
- signal_closure->error);
+ client_view = g_weak_ref_get (&signal_closure->client_view);
+
+ if (client_view != NULL) {
+ g_signal_emit (
+ client_view,
+ signals[COMPLETE], 0,
+ signal_closure->error);
+ g_object_unref (client_view);
+ }
return FALSE;
}
return;
signal_closure = g_slice_new0 (SignalClosure);
- signal_closure->client_view = g_object_ref (client_view);
+ g_weak_ref_set (&signal_closure->client_view, client_view);
signal_closure->component_list = build_object_list (objects);
client = e_cal_client_view_get_client (client_view);
return;
signal_closure = g_slice_new0 (SignalClosure);
- signal_closure->client_view = g_object_ref (client_view);
+ g_weak_ref_set (&signal_closure->client_view, client_view);
signal_closure->component_list = build_object_list (objects);
client = e_cal_client_view_get_client (client_view);
return;
signal_closure = g_slice_new0 (SignalClosure);
- signal_closure->client_view = g_object_ref (client_view);
+ g_weak_ref_set (&signal_closure->client_view, client_view);
signal_closure->component_id_list = build_id_list (uids);
client = e_cal_client_view_get_client (client_view);
return;
signal_closure = g_slice_new0 (SignalClosure);
- signal_closure->client_view = g_object_ref (client_view);
+ g_weak_ref_set (&signal_closure->client_view, client_view);
signal_closure->message = g_strdup (message);
signal_closure->percent = percent;
return;
signal_closure = g_slice_new0 (SignalClosure);
- signal_closure->client_view = g_object_ref (client_view);
+ g_weak_ref_set (&signal_closure->client_view, client_view);
e_gdbus_templates_decode_error (arg_error, &signal_closure->error);
client = e_cal_client_view_get_client (client_view);