/* Callback used when a client is destroyed */ static void client_destroy_cb (gpointer data, GObject *object) { if (E_CAL (object) == client1) client1 = NULL; else if (E_CAL (object) == client2) client2 = NULL; if (!client1 && !client2) g_main_loop_quit (loop); }
static void e_cal_view_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { ECalView *view; ECalViewPrivate *priv; view = E_CAL_VIEW (object); priv = E_CAL_VIEW_GET_PRIVATE (view); switch (property_id) { case PROP_VIEW: /* gdbus_calview can be set only once */ g_return_if_fail (priv->gdbus_calview == NULL); priv->gdbus_calview = g_object_ref (g_value_get_pointer (value)); g_signal_connect (priv->gdbus_calview, "objects-added", G_CALLBACK (objects_added_cb), view); g_signal_connect (priv->gdbus_calview, "objects-modified", G_CALLBACK (objects_modified_cb), view); g_signal_connect (priv->gdbus_calview, "objects-removed", G_CALLBACK (objects_removed_cb), view); g_signal_connect (priv->gdbus_calview, "progress", G_CALLBACK (progress_cb), view); g_signal_connect (priv->gdbus_calview, "done", G_CALLBACK (done_cb), view); break; case PROP_CLIENT: priv->client = E_CAL (g_value_dup_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }
static void e_cal_view_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { ECalView *view; ECalViewPrivate *priv; view = E_CAL_VIEW (object); priv = view->priv; switch (property_id) { case PROP_VIEW: if (priv->view != CORBA_OBJECT_NIL) bonobo_object_release_unref (priv->view, NULL); priv->view = bonobo_object_dup_ref (g_value_get_pointer (value), NULL); break; case PROP_LISTENER: if (priv->listener) { g_signal_handlers_disconnect_matched (priv->listener, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, view); bonobo_object_unref (BONOBO_OBJECT (priv->listener)); } priv->listener = bonobo_object_ref (g_value_get_pointer (value)); g_signal_connect (G_OBJECT (priv->listener), "objects_added", G_CALLBACK (objects_added_cb), view); g_signal_connect (G_OBJECT (priv->listener), "objects_modified", G_CALLBACK (objects_modified_cb), view); g_signal_connect (G_OBJECT (priv->listener), "objects_removed", G_CALLBACK (objects_removed_cb), view); g_signal_connect (G_OBJECT (priv->listener), "view_progress", G_CALLBACK (view_progress_cb), view); g_signal_connect (G_OBJECT (priv->listener), "view_done", G_CALLBACK (view_done_cb), view); break; case PROP_CLIENT: priv->client = E_CAL (g_value_dup_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }
/* The clients are just created here but not loaded */ static ECal * get_ecal_from_source (ESource *esource, ECalSourceType source_type, GSList *existing_clients) { ECal *retval; if (existing_clients) { GSList *l; for (l = existing_clients; l; l = l->next) { ECal *client = E_CAL (l->data); if (e_source_equal (esource, e_cal_get_source (client))) { dprintf (" load_esource: found existing source ... returning that\n"); return g_object_ref (client); } } } retval = e_cal_new (esource, source_type); if (!retval) { g_warning ("Could not load source '%s' from '%s'\n", e_source_peek_name (esource), e_source_peek_relative_uri (esource)); return NULL; } e_cal_set_auth_func (retval, auth_func_cb, NULL); return retval; }
/* The following function taken from gnome clock-applet * (gnome-panel/applets/clock/calendar-sources.c) */ ECal * dates_load_esource (ESource *esource, ECalSourceType source_type, GSList *existing_clients, DatesData *d) { ECal *retval; GError *error; if (existing_clients) { GSList *l; for (l = existing_clients; l; l = l->next) { ECal *client = E_CAL (l->data); if (e_source_equal (esource, e_cal_get_source (client))) { #ifdef DEBUG if (d->debug & DATES_DEBUG_CALENDAR) g_debug ("load_esource: found existing source, returning that"); #endif return g_object_ref (client); } } } retval = e_cal_new (esource, source_type); if (!retval) { g_warning ("Could not load source '%s' from '%s'\n", e_source_peek_name (esource), e_source_get_uri (esource)); return NULL; } error = NULL; if (!e_cal_open (retval, FALSE, &error)) { g_assert (error != NULL); g_warning ("Cannot open calendar from uri '%s': %s\n", e_cal_get_uri (retval), error->message); g_error_free (error); g_object_unref (retval); return NULL; } #ifdef DEBUG if (d->debug & DATES_DEBUG_CALENDAR) g_debug ("Loaded calendar from uri '%s'", e_cal_get_uri (retval)); #endif /* * Set the calendar mode to CAL_MODE_REMOTE. This is necessary to get the * remote (webcal) calendars to work. It doesn't seem to have any effect * on the file backend. */ e_cal_set_mode (retval, CAL_MODE_REMOTE); return retval; }