enum {
CLOSED,
+ SHUTDOWN,
LAST_SIGNAL
};
}
static void
+cal_backend_shutdown (ECalBackend *backend)
+{
+ ESource *source;
+
+ source = e_backend_get_source (E_BACKEND (backend));
+
+ g_print (
+ "The %s instance for \"%s\" is shutting down.\n",
+ G_OBJECT_TYPE_NAME (backend),
+ e_source_get_display_name (source));
+}
+
+static void
cal_backend_add_cached_timezone (ETimezoneCache *cache,
icaltimezone *zone)
{
backend_class->authenticate_sync = cal_backend_authenticate_sync;
class->get_backend_property = cal_backend_get_backend_property;
+ class->shutdown = cal_backend_shutdown;
g_object_class_install_property (
object_class,
NULL, NULL, NULL,
G_TYPE_NONE, 1,
G_TYPE_STRING);
+
+ /**
+ * ECalBackend::shutdown:
+ * @backend: the #ECalBackend which emitted the signal
+ *
+ * Emitted when the last client destroys its #ECalClient for
+ * @backend. This signals the @backend to begin final cleanup
+ * tasks such as synchronizing data to permanent storage.
+ *
+ * Since: 3.10
+ **/
+ signals[SHUTDOWN] = g_signal_new (
+ "shutdown",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (ECalBackendClass, shutdown),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 0);
}
static void
/* Signals */
void (*closed) (ECalBackend *backend,
const gchar *sender);
+ void (*shutdown) (ECalBackend *backend);
};
GType e_cal_backend_get_type (void) G_GNUC_CONST;
}
static void
+data_cal_factory_toggle_notify_cb (gpointer data,
+ GObject *backend,
+ gboolean is_last_ref)
+{
+ if (is_last_ref) {
+ /* Take a strong reference before removing the
+ * toggle reference, to keep the backend alive. */
+ g_object_ref (backend);
+
+ g_object_remove_toggle_ref (
+ backend, data_cal_factory_toggle_notify_cb, data);
+
+ g_signal_emit_by_name (backend, "shutdown");
+
+ g_object_unref (backend);
+ }
+}
+
+static void
data_cal_factory_connections_add (EDataCalFactory *factory,
const gchar *name,
ECalBackend *backend)
connection, object_path, error);
if (data_cal != NULL) {
+ /* Install a toggle reference on the backend
+ * so we can signal it to shut down once all
+ * client connections are closed. */
+ g_object_add_toggle_ref (
+ G_OBJECT (backend),
+ data_cal_factory_toggle_notify_cb,
+ NULL);
+
g_signal_connect_object (
backend, "closed",
G_CALLBACK (data_cal_factory_closed_cb),
LIBECAL_REVISION=0
LIBECAL_AGE=0
-LIBEDATACAL_CURRENT=22
+LIBEDATACAL_CURRENT=23
LIBEDATACAL_REVISION=0
LIBEDATACAL_AGE=0