summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/Alteration.c2918
-rw-r--r--src/core/ContainerSourceCollection.c2124
-rw-r--r--src/core/Core.c41
-rw-r--r--src/core/DataCollection.c3944
-rw-r--r--src/core/DataObject.c639
-rw-r--r--src/core/DataSet.c1163
-rw-r--r--src/core/DataSource.c4864
-rw-r--r--src/core/DataSourceTypes.c1127
-rw-r--r--src/core/DataView.c681
-rw-r--r--src/core/DataViewTypes.c546
-rw-r--r--src/core/DatabaseSourceCollection.c914
-rw-r--r--src/core/SourceCollection.c1694
-rw-r--r--src/core/SourceHoldingTank.c1729
-rw-r--r--src/core/SourceInterfaces.c328
-rw-r--r--src/core/Tracker.c2025
-rw-r--r--src/core/ViewCollection.c9140
-rw-r--r--src/core/mk/core.mk43
-rw-r--r--src/core/util.c1791
18 files changed, 35668 insertions, 43 deletions
diff --git a/src/core/Alteration.c b/src/core/Alteration.c
new file mode 100644
index 0000000..2bb624a
--- /dev/null
+++ b/src/core/Alteration.c
@@ -0,0 +1,2918 @@
+/* Alteration.c generated by valac 0.32.1, the Vala compiler
+ * generated from Alteration.vala, do not modify */
+
+/* Copyright 2016 Software Freedom Conservancy Inc.
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later). See the COPYING file in this distribution.
+ */
+/**/
+/* Alteration represents a description of what has changed in the DataObject (reported via the*/
+/* "altered" signal). Since the descriptions can vary wildly depending on the semantics of each*/
+/* DataObject, no assumptions or requirements are placed on Alteration other than it must have*/
+/* one or more "subjects", each with a "detail". Subscribers to the "altered" signal can query*/
+/* the Alteration object to determine if the change is important to them.*/
+/**/
+/* Alteration is an immutable type. This means it's possible to store const Alterations of oft-used*/
+/* values for reuse.*/
+/**/
+/* Alterations may be compressed, merging their subjects and details into a new aggregated*/
+/* Alteration. Generally this is handled automatically by DataObject and DataCollection, when*/
+/* necessary.*/
+/**/
+/* NOTE: subjects and details should be ASCII labels (as in, plain-old ASCII, no code pages).*/
+/* They are treated as case-sensitive strings.*/
+/**/
+/* Recommended subjects include: image, thumbnail, metadata.*/
+/**/
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gee.h>
+#include <gobject/gvaluecollector.h>
+
+
+#define TYPE_ALTERATION (alteration_get_type ())
+#define ALTERATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ALTERATION, Alteration))
+#define ALTERATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ALTERATION, AlterationClass))
+#define IS_ALTERATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ALTERATION))
+#define IS_ALTERATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ALTERATION))
+#define ALTERATION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ALTERATION, AlterationClass))
+
+typedef struct _Alteration Alteration;
+typedef struct _AlterationClass AlterationClass;
+typedef struct _AlterationPrivate AlterationPrivate;
+#define _g_free0(var) (var = (g_free (var), NULL))
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+typedef struct _ParamSpecAlteration ParamSpecAlteration;
+#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
+#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
+#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+
+struct _Alteration {
+ GTypeInstance parent_instance;
+ volatile int ref_count;
+ AlterationPrivate * priv;
+};
+
+struct _AlterationClass {
+ GTypeClass parent_class;
+ void (*finalize) (Alteration *self);
+};
+
+struct _AlterationPrivate {
+ gchar* subject;
+ gchar* detail;
+ GeeMultiMap* map;
+};
+
+struct _ParamSpecAlteration {
+ GParamSpec parent_instance;
+};
+
+
+static gpointer alteration_parent_class = NULL;
+
+gpointer alteration_ref (gpointer instance);
+void alteration_unref (gpointer instance);
+GParamSpec* param_spec_alteration (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_alteration (GValue* value, gpointer v_object);
+void value_take_alteration (GValue* value, gpointer v_object);
+gpointer value_get_alteration (const GValue* value);
+GType alteration_get_type (void) G_GNUC_CONST;
+#define ALTERATION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_ALTERATION, AlterationPrivate))
+enum {
+ ALTERATION_DUMMY_PROPERTY
+};
+Alteration* alteration_new (const gchar* subject, const gchar* detail);
+Alteration* alteration_construct (GType object_type, const gchar* subject, const gchar* detail);
+static void alteration_add_detail (Alteration* self, const gchar* sub, const gchar* det);
+Alteration* alteration_new_from_list (const gchar* list);
+Alteration* alteration_construct_from_list (GType object_type, const gchar* list);
+Alteration* alteration_new_from_array (gchar** array, int array_length1);
+Alteration* alteration_construct_from_array (GType object_type, gchar** array, int array_length1);
+static Alteration* alteration_new_from_map (GeeMultiMap* map);
+static Alteration* alteration_construct_from_map (GType object_type, GeeMultiMap* map);
+static GeeMultiMap* alteration_create_map (Alteration* self);
+static guint alteration_case_hash (const gchar* a);
+static guint _alteration_case_hash_gee_hash_data_func (gconstpointer v, gpointer self);
+static gboolean alteration_case_equal (const gchar* a, const gchar* b);
+static gboolean _alteration_case_equal_gee_equal_data_func (gconstpointer a, gconstpointer b, gpointer self);
+static inline gboolean alteration_equal_values (const gchar* str1, const gchar* str2);
+static inline guint alteration_hash_value (const gchar* str);
+gboolean alteration_has_subject (Alteration* self, const gchar* subject);
+gboolean alteration_has_detail (Alteration* self, const gchar* subject, const gchar* detail);
+GeeCollection* alteration_get_details (Alteration* self, const gchar* subject);
+gchar* alteration_to_string (Alteration* self);
+gboolean alteration_contains_any (Alteration* self, Alteration* other);
+gboolean alteration_equals (Alteration* self, Alteration* other);
+static void alteration_multimap_add_all (GeeMultiMap* dest, GeeMultiMap* src);
+Alteration* alteration_compress (Alteration* self, Alteration* other);
+static void alteration_finalize (Alteration* obj);
+static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func);
+static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func);
+static gint _vala_array_length (gpointer array);
+
+
+Alteration* alteration_construct (GType object_type, const gchar* subject, const gchar* detail) {
+ Alteration* self = NULL;
+ const gchar* _tmp0_ = NULL;
+ const gchar* _tmp1_ = NULL;
+#line 32 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_val_if_fail (subject != NULL, NULL);
+#line 32 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_val_if_fail (detail != NULL, NULL);
+#line 32 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ self = (Alteration*) g_type_create_instance (object_type);
+#line 33 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp0_ = subject;
+#line 33 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp1_ = detail;
+#line 33 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ alteration_add_detail (self, _tmp0_, _tmp1_);
+#line 32 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return self;
+#line 139 "Alteration.c"
+}
+
+
+Alteration* alteration_new (const gchar* subject, const gchar* detail) {
+#line 32 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return alteration_construct (TYPE_ALTERATION, subject, detail);
+#line 146 "Alteration.c"
+}
+
+
+Alteration* alteration_construct_from_list (GType object_type, const gchar* list) {
+ Alteration* self = NULL;
+ const gchar* _tmp0_ = NULL;
+ gint _tmp1_ = 0;
+ gint _tmp2_ = 0;
+ gchar** pairs = NULL;
+ const gchar* _tmp3_ = NULL;
+ gchar** _tmp4_ = NULL;
+ gchar** _tmp5_ = NULL;
+ gint pairs_length1 = 0;
+ gint _pairs_size_ = 0;
+ gchar** _tmp6_ = NULL;
+ gint _tmp6__length1 = 0;
+ gchar** _tmp7_ = NULL;
+ gint _tmp7__length1 = 0;
+#line 38 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_val_if_fail (list != NULL, NULL);
+#line 38 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ self = (Alteration*) g_type_create_instance (object_type);
+#line 38 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp0_ = list;
+#line 38 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp1_ = strlen (_tmp0_);
+#line 38 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp2_ = _tmp1_;
+#line 38 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _vala_return_val_if_fail (_tmp2_ > 0, "list.length > 0", NULL);
+#line 39 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp3_ = list;
+#line 39 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp5_ = _tmp4_ = g_strsplit (_tmp3_, ",", 0);
+#line 39 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ pairs = _tmp5_;
+#line 39 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ pairs_length1 = _vala_array_length (_tmp4_);
+#line 39 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _pairs_size_ = pairs_length1;
+#line 40 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp6_ = pairs;
+#line 40 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp6__length1 = pairs_length1;
+#line 40 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _vala_assert (_tmp6__length1 >= 1, "pairs.length >= 1");
+#line 42 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp7_ = pairs;
+#line 42 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp7__length1 = pairs_length1;
+#line 197 "Alteration.c"
+ {
+ gchar** pair_collection = NULL;
+ gint pair_collection_length1 = 0;
+ gint _pair_collection_size_ = 0;
+ gint pair_it = 0;
+#line 42 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ pair_collection = _tmp7_;
+#line 42 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ pair_collection_length1 = _tmp7__length1;
+#line 42 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ for (pair_it = 0; pair_it < _tmp7__length1; pair_it = pair_it + 1) {
+#line 209 "Alteration.c"
+ gchar* _tmp8_ = NULL;
+ gchar* pair = NULL;
+#line 42 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp8_ = g_strdup (pair_collection[pair_it]);
+#line 42 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ pair = _tmp8_;
+#line 216 "Alteration.c"
+ {
+ gchar** subject_detail = NULL;
+ const gchar* _tmp9_ = NULL;
+ gchar** _tmp10_ = NULL;
+ gchar** _tmp11_ = NULL;
+ gint subject_detail_length1 = 0;
+ gint _subject_detail_size_ = 0;
+ gchar** _tmp12_ = NULL;
+ gint _tmp12__length1 = 0;
+ gchar** _tmp13_ = NULL;
+ gint _tmp13__length1 = 0;
+ const gchar* _tmp14_ = NULL;
+ gchar** _tmp15_ = NULL;
+ gint _tmp15__length1 = 0;
+ const gchar* _tmp16_ = NULL;
+#line 43 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp9_ = pair;
+#line 43 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp11_ = _tmp10_ = g_strsplit (_tmp9_, ":", 2);
+#line 43 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ subject_detail = _tmp11_;
+#line 43 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ subject_detail_length1 = _vala_array_length (_tmp10_);
+#line 43 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _subject_detail_size_ = subject_detail_length1;
+#line 44 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp12_ = subject_detail;
+#line 44 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp12__length1 = subject_detail_length1;
+#line 44 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _vala_assert (_tmp12__length1 == 2, "subject_detail.length == 2");
+#line 46 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp13_ = subject_detail;
+#line 46 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp13__length1 = subject_detail_length1;
+#line 46 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp14_ = _tmp13_[0];
+#line 46 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp15_ = subject_detail;
+#line 46 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp15__length1 = subject_detail_length1;
+#line 46 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp16_ = _tmp15_[1];
+#line 46 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ alteration_add_detail (self, _tmp14_, _tmp16_);
+#line 42 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ subject_detail = (_vala_array_free (subject_detail, subject_detail_length1, (GDestroyNotify) g_free), NULL);
+#line 42 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (pair);
+#line 266 "Alteration.c"
+ }
+ }
+ }
+#line 38 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ pairs = (_vala_array_free (pairs, pairs_length1, (GDestroyNotify) g_free), NULL);
+#line 38 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return self;
+#line 274 "Alteration.c"
+}
+
+
+Alteration* alteration_new_from_list (const gchar* list) {
+#line 38 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return alteration_construct_from_list (TYPE_ALTERATION, list);
+#line 281 "Alteration.c"
+}
+
+
+Alteration* alteration_construct_from_array (GType object_type, gchar** array, int array_length1) {
+ Alteration* self = NULL;
+ gchar** _tmp0_ = NULL;
+ gint _tmp0__length1 = 0;
+ gchar** _tmp1_ = NULL;
+ gint _tmp1__length1 = 0;
+#line 52 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ self = (Alteration*) g_type_create_instance (object_type);
+#line 52 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp0_ = array;
+#line 52 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp0__length1 = array_length1;
+#line 52 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _vala_return_val_if_fail (_tmp0__length1 > 0, "array.length > 0", NULL);
+#line 53 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp1_ = array;
+#line 53 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp1__length1 = array_length1;
+#line 303 "Alteration.c"
+ {
+ gchar** pair_collection = NULL;
+ gint pair_collection_length1 = 0;
+ gint _pair_collection_size_ = 0;
+ gint pair_it = 0;
+#line 53 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ pair_collection = _tmp1_;
+#line 53 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ pair_collection_length1 = _tmp1__length1;
+#line 53 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ for (pair_it = 0; pair_it < _tmp1__length1; pair_it = pair_it + 1) {
+#line 315 "Alteration.c"
+ gchar* _tmp2_ = NULL;
+ gchar* pair = NULL;
+#line 53 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp2_ = g_strdup (pair_collection[pair_it]);
+#line 53 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ pair = _tmp2_;
+#line 322 "Alteration.c"
+ {
+ gchar** subject_detail = NULL;
+ const gchar* _tmp3_ = NULL;
+ gchar** _tmp4_ = NULL;
+ gchar** _tmp5_ = NULL;
+ gint subject_detail_length1 = 0;
+ gint _subject_detail_size_ = 0;
+ gchar** _tmp6_ = NULL;
+ gint _tmp6__length1 = 0;
+ gchar** _tmp7_ = NULL;
+ gint _tmp7__length1 = 0;
+ const gchar* _tmp8_ = NULL;
+ gchar** _tmp9_ = NULL;
+ gint _tmp9__length1 = 0;
+ const gchar* _tmp10_ = NULL;
+#line 54 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp3_ = pair;
+#line 54 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp5_ = _tmp4_ = g_strsplit (_tmp3_, ":", 2);
+#line 54 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ subject_detail = _tmp5_;
+#line 54 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ subject_detail_length1 = _vala_array_length (_tmp4_);
+#line 54 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _subject_detail_size_ = subject_detail_length1;
+#line 55 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp6_ = subject_detail;
+#line 55 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp6__length1 = subject_detail_length1;
+#line 55 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _vala_assert (_tmp6__length1 == 2, "subject_detail.length == 2");
+#line 57 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp7_ = subject_detail;
+#line 57 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp7__length1 = subject_detail_length1;
+#line 57 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp8_ = _tmp7_[0];
+#line 57 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp9_ = subject_detail;
+#line 57 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp9__length1 = subject_detail_length1;
+#line 57 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp10_ = _tmp9_[1];
+#line 57 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ alteration_add_detail (self, _tmp8_, _tmp10_);
+#line 53 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ subject_detail = (_vala_array_free (subject_detail, subject_detail_length1, (GDestroyNotify) g_free), NULL);
+#line 53 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (pair);
+#line 372 "Alteration.c"
+ }
+ }
+ }
+#line 52 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return self;
+#line 378 "Alteration.c"
+}
+
+
+Alteration* alteration_new_from_array (gchar** array, int array_length1) {
+#line 52 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return alteration_construct_from_array (TYPE_ALTERATION, array, array_length1);
+#line 385 "Alteration.c"
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+#line 63 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return self ? g_object_ref (self) : NULL;
+#line 392 "Alteration.c"
+}
+
+
+static Alteration* alteration_construct_from_map (GType object_type, GeeMultiMap* map) {
+ Alteration* self = NULL;
+ GeeMultiMap* _tmp0_ = NULL;
+ GeeMultiMap* _tmp1_ = NULL;
+#line 62 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_val_if_fail (GEE_IS_MULTI_MAP (map), NULL);
+#line 62 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ self = (Alteration*) g_type_create_instance (object_type);
+#line 63 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp0_ = map;
+#line 63 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp1_ = _g_object_ref0 (_tmp0_);
+#line 63 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (self->priv->map);
+#line 63 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ self->priv->map = _tmp1_;
+#line 62 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return self;
+#line 414 "Alteration.c"
+}
+
+
+static Alteration* alteration_new_from_map (GeeMultiMap* map) {
+#line 62 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return alteration_construct_from_map (TYPE_ALTERATION, map);
+#line 421 "Alteration.c"
+}
+
+
+static gchar* string_strip (const gchar* self) {
+ gchar* result = NULL;
+ gchar* _result_ = NULL;
+ gchar* _tmp0_ = NULL;
+ const gchar* _tmp1_ = NULL;
+#line 1207 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ g_return_val_if_fail (self != NULL, NULL);
+#line 1208 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp0_ = g_strdup (self);
+#line 1208 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _result_ = _tmp0_;
+#line 1209 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp1_ = _result_;
+#line 1209 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ g_strstrip (_tmp1_);
+#line 1210 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ result = _result_;
+#line 1210 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ return result;
+#line 444 "Alteration.c"
+}
+
+
+static void alteration_add_detail (Alteration* self, const gchar* sub, const gchar* det) {
+ gchar* subject = NULL;
+ const gchar* _tmp0_ = NULL;
+ gchar* _tmp1_ = NULL;
+ const gchar* _tmp2_ = NULL;
+ gint _tmp3_ = 0;
+ gint _tmp4_ = 0;
+ gchar* detail = NULL;
+ const gchar* _tmp5_ = NULL;
+ gchar* _tmp6_ = NULL;
+ const gchar* _tmp7_ = NULL;
+ gint _tmp8_ = 0;
+ gint _tmp9_ = 0;
+ gboolean _tmp10_ = FALSE;
+ const gchar* _tmp11_ = NULL;
+ GeeMultiMap* _tmp18_ = NULL;
+ const gchar* _tmp20_ = NULL;
+ GeeMultiMap* _tmp25_ = NULL;
+ const gchar* _tmp26_ = NULL;
+ const gchar* _tmp27_ = NULL;
+#line 66 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_if_fail (IS_ALTERATION (self));
+#line 66 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_if_fail (sub != NULL);
+#line 66 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_if_fail (det != NULL);
+#line 68 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp0_ = sub;
+#line 68 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp1_ = string_strip (_tmp0_);
+#line 68 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ subject = _tmp1_;
+#line 69 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp2_ = subject;
+#line 69 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp3_ = strlen (_tmp2_);
+#line 69 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp4_ = _tmp3_;
+#line 69 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _vala_assert (_tmp4_ > 0, "subject.length > 0");
+#line 71 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp5_ = det;
+#line 71 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp6_ = string_strip (_tmp5_);
+#line 71 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ detail = _tmp6_;
+#line 72 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp7_ = detail;
+#line 72 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp8_ = strlen (_tmp7_);
+#line 72 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp9_ = _tmp8_;
+#line 72 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _vala_assert (_tmp9_ > 0, "detail.length > 0");
+#line 75 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp11_ = self->priv->subject;
+#line 75 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp11_ == NULL) {
+#line 506 "Alteration.c"
+ GeeMultiMap* _tmp12_ = NULL;
+#line 75 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp12_ = self->priv->map;
+#line 75 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp10_ = _tmp12_ == NULL;
+#line 512 "Alteration.c"
+ } else {
+#line 75 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp10_ = FALSE;
+#line 516 "Alteration.c"
+ }
+#line 75 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp10_) {
+#line 520 "Alteration.c"
+ const gchar* _tmp13_ = NULL;
+ const gchar* _tmp14_ = NULL;
+ gchar* _tmp15_ = NULL;
+ const gchar* _tmp16_ = NULL;
+ gchar* _tmp17_ = NULL;
+#line 76 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp13_ = self->priv->detail;
+#line 76 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _vala_assert (_tmp13_ == NULL, "this.detail == null");
+#line 78 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp14_ = subject;
+#line 78 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp15_ = g_strdup (_tmp14_);
+#line 78 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (self->priv->subject);
+#line 78 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ self->priv->subject = _tmp15_;
+#line 79 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp16_ = detail;
+#line 79 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp17_ = g_strdup (_tmp16_);
+#line 79 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (self->priv->detail);
+#line 79 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ self->priv->detail = _tmp17_;
+#line 81 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (detail);
+#line 81 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (subject);
+#line 81 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return;
+#line 552 "Alteration.c"
+ }
+#line 85 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp18_ = self->priv->map;
+#line 85 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp18_ == NULL) {
+#line 558 "Alteration.c"
+ GeeMultiMap* _tmp19_ = NULL;
+#line 86 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp19_ = alteration_create_map (self);
+#line 86 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (self->priv->map);
+#line 86 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ self->priv->map = _tmp19_;
+#line 566 "Alteration.c"
+ }
+#line 89 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp20_ = self->priv->subject;
+#line 89 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp20_ != NULL) {
+#line 572 "Alteration.c"
+ const gchar* _tmp21_ = NULL;
+ GeeMultiMap* _tmp22_ = NULL;
+ const gchar* _tmp23_ = NULL;
+ const gchar* _tmp24_ = NULL;
+#line 90 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp21_ = self->priv->detail;
+#line 90 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _vala_assert (_tmp21_ != NULL, "this.detail != null");
+#line 92 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp22_ = self->priv->map;
+#line 92 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp23_ = self->priv->subject;
+#line 92 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp24_ = self->priv->detail;
+#line 92 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ gee_multi_map_set (_tmp22_, _tmp23_, _tmp24_);
+#line 93 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (self->priv->subject);
+#line 93 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ self->priv->subject = NULL;
+#line 94 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (self->priv->detail);
+#line 94 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ self->priv->detail = NULL;
+#line 597 "Alteration.c"
+ }
+#line 98 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp25_ = self->priv->map;
+#line 98 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp26_ = subject;
+#line 98 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp27_ = detail;
+#line 98 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ gee_multi_map_set (_tmp25_, _tmp26_, _tmp27_);
+#line 66 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (detail);
+#line 66 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (subject);
+#line 611 "Alteration.c"
+}
+
+
+static guint _alteration_case_hash_gee_hash_data_func (gconstpointer v, gpointer self) {
+ guint result;
+ result = alteration_case_hash ((const gchar*) v);
+#line 102 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 620 "Alteration.c"
+}
+
+
+static gboolean _alteration_case_equal_gee_equal_data_func (gconstpointer a, gconstpointer b, gpointer self) {
+ gboolean result;
+ result = alteration_case_equal ((const gchar*) a, (const gchar*) b);
+#line 102 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 629 "Alteration.c"
+}
+
+
+static GeeMultiMap* alteration_create_map (Alteration* self) {
+ GeeMultiMap* result = NULL;
+ GeeHashMultiMap* _tmp0_ = NULL;
+#line 101 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_val_if_fail (IS_ALTERATION (self), NULL);
+#line 102 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp0_ = gee_hash_multi_map_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, _alteration_case_hash_gee_hash_data_func, NULL, NULL, _alteration_case_equal_gee_equal_data_func, NULL, NULL, _alteration_case_hash_gee_hash_data_func, NULL, NULL, _alteration_case_equal_gee_equal_data_func, NULL, NULL);
+#line 102 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_MULTI_MAP, GeeMultiMap);
+#line 102 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 644 "Alteration.c"
+}
+
+
+static gboolean alteration_case_equal (const gchar* a, const gchar* b) {
+ gboolean result = FALSE;
+ const gchar* _tmp0_ = NULL;
+ const gchar* _tmp1_ = NULL;
+ gboolean _tmp2_ = FALSE;
+#line 106 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp0_ = a;
+#line 106 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp1_ = b;
+#line 106 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp2_ = alteration_equal_values (_tmp0_, _tmp1_);
+#line 106 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = _tmp2_;
+#line 106 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 663 "Alteration.c"
+}
+
+
+static guint alteration_case_hash (const gchar* a) {
+ guint result = 0U;
+ const gchar* _tmp0_ = NULL;
+ guint _tmp1_ = 0U;
+#line 110 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp0_ = a;
+#line 110 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp1_ = alteration_hash_value (_tmp0_);
+#line 110 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = _tmp1_;
+#line 110 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 679 "Alteration.c"
+}
+
+
+static inline gboolean alteration_equal_values (const gchar* str1, const gchar* str2) {
+ gboolean result = FALSE;
+ const gchar* _tmp0_ = NULL;
+ const gchar* _tmp1_ = NULL;
+ gint _tmp2_ = 0;
+#line 113 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_val_if_fail (str1 != NULL, FALSE);
+#line 113 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_val_if_fail (str2 != NULL, FALSE);
+#line 114 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp0_ = str1;
+#line 114 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp1_ = str2;
+#line 114 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp2_ = g_ascii_strcasecmp (_tmp0_, _tmp1_);
+#line 114 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = _tmp2_ == 0;
+#line 114 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 702 "Alteration.c"
+}
+
+
+static inline guint alteration_hash_value (const gchar* str) {
+ guint result = 0U;
+ GHashFunc _tmp0_ = NULL;
+ const gchar* _tmp1_ = NULL;
+ guint _tmp2_ = 0U;
+#line 117 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_val_if_fail (str != NULL, 0U);
+#line 118 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp0_ = g_str_hash;
+#line 118 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp1_ = str;
+#line 118 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp2_ = _tmp0_ (_tmp1_);
+#line 118 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = _tmp2_;
+#line 118 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 723 "Alteration.c"
+}
+
+
+gboolean alteration_has_subject (Alteration* self, const gchar* subject) {
+ gboolean result = FALSE;
+ const gchar* _tmp0_ = NULL;
+ GeeMultiMap* _tmp4_ = NULL;
+ GeeSet* keys = NULL;
+ GeeMultiMap* _tmp5_ = NULL;
+ GeeSet* _tmp6_ = NULL;
+ GeeSet* _tmp7_ = NULL;
+#line 121 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_val_if_fail (IS_ALTERATION (self), FALSE);
+#line 121 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_val_if_fail (subject != NULL, FALSE);
+#line 122 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp0_ = self->priv->subject;
+#line 122 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp0_ != NULL) {
+#line 743 "Alteration.c"
+ const gchar* _tmp1_ = NULL;
+ const gchar* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+#line 123 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp1_ = self->priv->subject;
+#line 123 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp2_ = subject;
+#line 123 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp3_ = alteration_equal_values (_tmp1_, _tmp2_);
+#line 123 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = _tmp3_;
+#line 123 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 757 "Alteration.c"
+ }
+#line 125 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp4_ = self->priv->map;
+#line 125 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _vala_assert (_tmp4_ != NULL, "map != null");
+#line 126 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp5_ = self->priv->map;
+#line 126 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp6_ = gee_multi_map_get_keys (_tmp5_);
+#line 126 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ keys = _tmp6_;
+#line 127 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp7_ = keys;
+#line 127 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp7_ != NULL) {
+#line 773 "Alteration.c"
+ {
+ GeeIterator* _key_it = NULL;
+ GeeSet* _tmp8_ = NULL;
+ GeeIterator* _tmp9_ = NULL;
+#line 128 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp8_ = keys;
+#line 128 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp9_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 128 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _key_it = _tmp9_;
+#line 128 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ while (TRUE) {
+#line 786 "Alteration.c"
+ GeeIterator* _tmp10_ = NULL;
+ gboolean _tmp11_ = FALSE;
+ gchar* key = NULL;
+ GeeIterator* _tmp12_ = NULL;
+ gpointer _tmp13_ = NULL;
+ const gchar* _tmp14_ = NULL;
+ const gchar* _tmp15_ = NULL;
+ gboolean _tmp16_ = FALSE;
+#line 128 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp10_ = _key_it;
+#line 128 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp11_ = gee_iterator_next (_tmp10_);
+#line 128 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (!_tmp11_) {
+#line 128 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ break;
+#line 803 "Alteration.c"
+ }
+#line 128 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp12_ = _key_it;
+#line 128 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp13_ = gee_iterator_get (_tmp12_);
+#line 128 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ key = (gchar*) _tmp13_;
+#line 129 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp14_ = key;
+#line 129 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp15_ = subject;
+#line 129 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp16_ = alteration_equal_values (_tmp14_, _tmp15_);
+#line 129 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp16_) {
+#line 130 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = TRUE;
+#line 130 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (key);
+#line 130 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (_key_it);
+#line 130 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (keys);
+#line 130 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 829 "Alteration.c"
+ }
+#line 128 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (key);
+#line 833 "Alteration.c"
+ }
+#line 128 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (_key_it);
+#line 837 "Alteration.c"
+ }
+ }
+#line 134 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = FALSE;
+#line 134 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (keys);
+#line 134 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 846 "Alteration.c"
+}
+
+
+gboolean alteration_has_detail (Alteration* self, const gchar* subject, const gchar* detail) {
+ gboolean result = FALSE;
+ gboolean _tmp0_ = FALSE;
+ const gchar* _tmp1_ = NULL;
+ GeeMultiMap* _tmp10_ = NULL;
+ GeeCollection* values = NULL;
+ GeeMultiMap* _tmp11_ = NULL;
+ const gchar* _tmp12_ = NULL;
+ GeeCollection* _tmp13_ = NULL;
+ GeeCollection* _tmp14_ = NULL;
+#line 137 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_val_if_fail (IS_ALTERATION (self), FALSE);
+#line 137 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_val_if_fail (subject != NULL, FALSE);
+#line 137 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_val_if_fail (detail != NULL, FALSE);
+#line 138 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp1_ = self->priv->subject;
+#line 138 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp1_ != NULL) {
+#line 870 "Alteration.c"
+ const gchar* _tmp2_ = NULL;
+#line 138 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp2_ = self->priv->detail;
+#line 138 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp0_ = _tmp2_ != NULL;
+#line 876 "Alteration.c"
+ } else {
+#line 138 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp0_ = FALSE;
+#line 880 "Alteration.c"
+ }
+#line 138 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp0_) {
+#line 884 "Alteration.c"
+ gboolean _tmp3_ = FALSE;
+ const gchar* _tmp4_ = NULL;
+ const gchar* _tmp5_ = NULL;
+ gboolean _tmp6_ = FALSE;
+#line 139 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp4_ = self->priv->subject;
+#line 139 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp5_ = subject;
+#line 139 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp6_ = alteration_equal_values (_tmp4_, _tmp5_);
+#line 139 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp6_) {
+#line 897 "Alteration.c"
+ const gchar* _tmp7_ = NULL;
+ const gchar* _tmp8_ = NULL;
+ gboolean _tmp9_ = FALSE;
+#line 139 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp7_ = self->priv->detail;
+#line 139 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp8_ = detail;
+#line 139 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp9_ = alteration_equal_values (_tmp7_, _tmp8_);
+#line 139 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp3_ = _tmp9_;
+#line 909 "Alteration.c"
+ } else {
+#line 139 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp3_ = FALSE;
+#line 913 "Alteration.c"
+ }
+#line 139 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = _tmp3_;
+#line 139 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 919 "Alteration.c"
+ }
+#line 141 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp10_ = self->priv->map;
+#line 141 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _vala_assert (_tmp10_ != NULL, "map != null");
+#line 142 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp11_ = self->priv->map;
+#line 142 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp12_ = subject;
+#line 142 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp13_ = gee_multi_map_get (_tmp11_, _tmp12_);
+#line 142 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ values = _tmp13_;
+#line 143 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp14_ = values;
+#line 143 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp14_ != NULL) {
+#line 937 "Alteration.c"
+ {
+ GeeIterator* _value_it = NULL;
+ GeeCollection* _tmp15_ = NULL;
+ GeeIterator* _tmp16_ = NULL;
+#line 144 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp15_ = values;
+#line 144 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp16_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp15_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 144 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _value_it = _tmp16_;
+#line 144 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ while (TRUE) {
+#line 950 "Alteration.c"
+ GeeIterator* _tmp17_ = NULL;
+ gboolean _tmp18_ = FALSE;
+ gchar* value = NULL;
+ GeeIterator* _tmp19_ = NULL;
+ gpointer _tmp20_ = NULL;
+ const gchar* _tmp21_ = NULL;
+ const gchar* _tmp22_ = NULL;
+ gboolean _tmp23_ = FALSE;
+#line 144 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp17_ = _value_it;
+#line 144 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp18_ = gee_iterator_next (_tmp17_);
+#line 144 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (!_tmp18_) {
+#line 144 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ break;
+#line 967 "Alteration.c"
+ }
+#line 144 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp19_ = _value_it;
+#line 144 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp20_ = gee_iterator_get (_tmp19_);
+#line 144 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ value = (gchar*) _tmp20_;
+#line 145 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp21_ = value;
+#line 145 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp22_ = detail;
+#line 145 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp23_ = alteration_equal_values (_tmp21_, _tmp22_);
+#line 145 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp23_) {
+#line 146 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = TRUE;
+#line 146 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (value);
+#line 146 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (_value_it);
+#line 146 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (values);
+#line 146 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 993 "Alteration.c"
+ }
+#line 144 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (value);
+#line 997 "Alteration.c"
+ }
+#line 144 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (_value_it);
+#line 1001 "Alteration.c"
+ }
+ }
+#line 150 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = FALSE;
+#line 150 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (values);
+#line 150 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 1010 "Alteration.c"
+}
+
+
+GeeCollection* alteration_get_details (Alteration* self, const gchar* subject) {
+ GeeCollection* result = NULL;
+ gboolean _tmp0_ = FALSE;
+ gboolean _tmp1_ = FALSE;
+ const gchar* _tmp2_ = NULL;
+ GeeCollection* _tmp10_ = NULL;
+ GeeMultiMap* _tmp11_ = NULL;
+#line 153 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_val_if_fail (IS_ALTERATION (self), NULL);
+#line 153 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_val_if_fail (subject != NULL, NULL);
+#line 154 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp2_ = self->priv->subject;
+#line 154 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp2_ != NULL) {
+#line 1029 "Alteration.c"
+ const gchar* _tmp3_ = NULL;
+#line 154 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp3_ = self->priv->detail;
+#line 154 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp1_ = _tmp3_ != NULL;
+#line 1035 "Alteration.c"
+ } else {
+#line 154 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp1_ = FALSE;
+#line 1039 "Alteration.c"
+ }
+#line 154 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp1_) {
+#line 1043 "Alteration.c"
+ const gchar* _tmp4_ = NULL;
+ const gchar* _tmp5_ = NULL;
+ gboolean _tmp6_ = FALSE;
+#line 154 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp4_ = self->priv->subject;
+#line 154 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp5_ = subject;
+#line 154 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp6_ = alteration_equal_values (_tmp4_, _tmp5_);
+#line 154 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp0_ = _tmp6_;
+#line 1055 "Alteration.c"
+ } else {
+#line 154 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp0_ = FALSE;
+#line 1059 "Alteration.c"
+ }
+#line 154 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp0_) {
+#line 1063 "Alteration.c"
+ GeeArrayList* details = NULL;
+ GeeArrayList* _tmp7_ = NULL;
+ GeeArrayList* _tmp8_ = NULL;
+ const gchar* _tmp9_ = NULL;
+#line 155 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp7_ = gee_array_list_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, NULL, NULL, NULL);
+#line 155 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ details = _tmp7_;
+#line 156 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp8_ = details;
+#line 156 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp9_ = self->priv->detail;
+#line 156 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp9_);
+#line 158 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (details, GEE_TYPE_COLLECTION, GeeCollection);
+#line 158 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 1082 "Alteration.c"
+ }
+#line 161 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp11_ = self->priv->map;
+#line 161 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp11_ != NULL) {
+#line 1088 "Alteration.c"
+ GeeMultiMap* _tmp12_ = NULL;
+ const gchar* _tmp13_ = NULL;
+ GeeCollection* _tmp14_ = NULL;
+#line 161 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp12_ = self->priv->map;
+#line 161 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp13_ = subject;
+#line 161 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp14_ = gee_multi_map_get (_tmp12_, _tmp13_);
+#line 161 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (_tmp10_);
+#line 161 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp10_ = _tmp14_;
+#line 1102 "Alteration.c"
+ } else {
+#line 161 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (_tmp10_);
+#line 161 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp10_ = NULL;
+#line 1108 "Alteration.c"
+ }
+#line 161 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = _tmp10_;
+#line 161 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 1114 "Alteration.c"
+}
+
+
+gchar* alteration_to_string (Alteration* self) {
+ gchar* result = NULL;
+ const gchar* _tmp0_ = NULL;
+ GeeMultiMap* _tmp5_ = NULL;
+ gchar* str = NULL;
+ gchar* _tmp6_ = NULL;
+#line 164 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_val_if_fail (IS_ALTERATION (self), NULL);
+#line 165 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp0_ = self->priv->subject;
+#line 165 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp0_ != NULL) {
+#line 1130 "Alteration.c"
+ const gchar* _tmp1_ = NULL;
+ const gchar* _tmp2_ = NULL;
+ const gchar* _tmp3_ = NULL;
+ gchar* _tmp4_ = NULL;
+#line 166 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp1_ = self->priv->detail;
+#line 166 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _vala_assert (_tmp1_ != NULL, "detail != null");
+#line 168 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp2_ = self->priv->subject;
+#line 168 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp3_ = self->priv->detail;
+#line 168 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp4_ = g_strdup_printf ("%s:%s", _tmp2_, _tmp3_);
+#line 168 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = _tmp4_;
+#line 168 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 1149 "Alteration.c"
+ }
+#line 171 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp5_ = self->priv->map;
+#line 171 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _vala_assert (_tmp5_ != NULL, "map != null");
+#line 173 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp6_ = g_strdup ("");
+#line 173 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ str = _tmp6_;
+#line 1159 "Alteration.c"
+ {
+ GeeIterator* _key_it = NULL;
+ GeeMultiMap* _tmp7_ = NULL;
+ GeeSet* _tmp8_ = NULL;
+ GeeSet* _tmp9_ = NULL;
+ GeeIterator* _tmp10_ = NULL;
+ GeeIterator* _tmp11_ = NULL;
+#line 174 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp7_ = self->priv->map;
+#line 174 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp8_ = gee_multi_map_get_keys (_tmp7_);
+#line 174 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp9_ = _tmp8_;
+#line 174 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp10_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 174 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp11_ = _tmp10_;
+#line 174 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (_tmp9_);
+#line 174 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _key_it = _tmp11_;
+#line 174 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ while (TRUE) {
+#line 1183 "Alteration.c"
+ GeeIterator* _tmp12_ = NULL;
+ gboolean _tmp13_ = FALSE;
+ gchar* key = NULL;
+ GeeIterator* _tmp14_ = NULL;
+ gpointer _tmp15_ = NULL;
+#line 174 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp12_ = _key_it;
+#line 174 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp13_ = gee_iterator_next (_tmp12_);
+#line 174 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (!_tmp13_) {
+#line 174 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ break;
+#line 1197 "Alteration.c"
+ }
+#line 174 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp14_ = _key_it;
+#line 174 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp15_ = gee_iterator_get (_tmp14_);
+#line 174 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ key = (gchar*) _tmp15_;
+#line 1205 "Alteration.c"
+ {
+ GeeIterator* _value_it = NULL;
+ GeeMultiMap* _tmp16_ = NULL;
+ const gchar* _tmp17_ = NULL;
+ GeeCollection* _tmp18_ = NULL;
+ GeeCollection* _tmp19_ = NULL;
+ GeeIterator* _tmp20_ = NULL;
+ GeeIterator* _tmp21_ = NULL;
+#line 175 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp16_ = self->priv->map;
+#line 175 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp17_ = key;
+#line 175 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp18_ = gee_multi_map_get (_tmp16_, _tmp17_);
+#line 175 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp19_ = _tmp18_;
+#line 175 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp20_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp19_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 175 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp21_ = _tmp20_;
+#line 175 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (_tmp19_);
+#line 175 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _value_it = _tmp21_;
+#line 175 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ while (TRUE) {
+#line 1232 "Alteration.c"
+ GeeIterator* _tmp22_ = NULL;
+ gboolean _tmp23_ = FALSE;
+ gchar* value = NULL;
+ GeeIterator* _tmp24_ = NULL;
+ gpointer _tmp25_ = NULL;
+ const gchar* _tmp26_ = NULL;
+ gint _tmp27_ = 0;
+ gint _tmp28_ = 0;
+ const gchar* _tmp31_ = NULL;
+ const gchar* _tmp32_ = NULL;
+ const gchar* _tmp33_ = NULL;
+ gchar* _tmp34_ = NULL;
+ gchar* _tmp35_ = NULL;
+ gchar* _tmp36_ = NULL;
+#line 175 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp22_ = _value_it;
+#line 175 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp23_ = gee_iterator_next (_tmp22_);
+#line 175 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (!_tmp23_) {
+#line 175 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ break;
+#line 1255 "Alteration.c"
+ }
+#line 175 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp24_ = _value_it;
+#line 175 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp25_ = gee_iterator_get (_tmp24_);
+#line 175 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ value = (gchar*) _tmp25_;
+#line 176 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp26_ = str;
+#line 176 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp27_ = strlen (_tmp26_);
+#line 176 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp28_ = _tmp27_;
+#line 176 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp28_ != 0) {
+#line 1271 "Alteration.c"
+ const gchar* _tmp29_ = NULL;
+ gchar* _tmp30_ = NULL;
+#line 177 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp29_ = str;
+#line 177 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp30_ = g_strconcat (_tmp29_, ", ", NULL);
+#line 177 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (str);
+#line 177 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ str = _tmp30_;
+#line 1282 "Alteration.c"
+ }
+#line 179 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp31_ = str;
+#line 179 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp32_ = key;
+#line 179 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp33_ = value;
+#line 179 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp34_ = g_strdup_printf ("%s:%s", _tmp32_, _tmp33_);
+#line 179 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp35_ = _tmp34_;
+#line 179 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp36_ = g_strconcat (_tmp31_, _tmp35_, NULL);
+#line 179 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (str);
+#line 179 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ str = _tmp36_;
+#line 179 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (_tmp35_);
+#line 175 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (value);
+#line 1304 "Alteration.c"
+ }
+#line 175 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (_value_it);
+#line 1308 "Alteration.c"
+ }
+#line 174 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (key);
+#line 1312 "Alteration.c"
+ }
+#line 174 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (_key_it);
+#line 1316 "Alteration.c"
+ }
+#line 183 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = str;
+#line 183 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 1322 "Alteration.c"
+}
+
+
+gboolean alteration_contains_any (Alteration* self, Alteration* other) {
+ gboolean result = FALSE;
+ Alteration* _tmp0_ = NULL;
+ gboolean _tmp1_ = FALSE;
+ gboolean _tmp2_ = FALSE;
+ gboolean _tmp3_ = FALSE;
+ const gchar* _tmp4_ = NULL;
+ gboolean _tmp19_ = FALSE;
+ gboolean _tmp20_ = FALSE;
+ GeeMultiMap* _tmp21_ = NULL;
+ gboolean _tmp56_ = FALSE;
+ GeeMultiMap* _tmp57_ = NULL;
+#line 187 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_val_if_fail (IS_ALTERATION (self), FALSE);
+#line 187 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_val_if_fail (IS_ALTERATION (other), FALSE);
+#line 189 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp0_ = other;
+#line 189 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (self == _tmp0_) {
+#line 190 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = TRUE;
+#line 190 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 1350 "Alteration.c"
+ }
+#line 193 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp4_ = self->priv->subject;
+#line 193 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp4_ != NULL) {
+#line 1356 "Alteration.c"
+ Alteration* _tmp5_ = NULL;
+ const gchar* _tmp6_ = NULL;
+#line 193 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp5_ = other;
+#line 193 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp6_ = _tmp5_->priv->subject;
+#line 193 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp3_ = _tmp6_ != NULL;
+#line 1365 "Alteration.c"
+ } else {
+#line 193 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp3_ = FALSE;
+#line 1369 "Alteration.c"
+ }
+#line 193 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp3_) {
+#line 1373 "Alteration.c"
+ const gchar* _tmp7_ = NULL;
+#line 193 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp7_ = self->priv->detail;
+#line 193 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp2_ = _tmp7_ != NULL;
+#line 1379 "Alteration.c"
+ } else {
+#line 193 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp2_ = FALSE;
+#line 1383 "Alteration.c"
+ }
+#line 193 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp2_) {
+#line 1387 "Alteration.c"
+ Alteration* _tmp8_ = NULL;
+ const gchar* _tmp9_ = NULL;
+#line 193 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp8_ = other;
+#line 193 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp9_ = _tmp8_->priv->detail;
+#line 193 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp1_ = _tmp9_ != NULL;
+#line 1396 "Alteration.c"
+ } else {
+#line 193 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp1_ = FALSE;
+#line 1400 "Alteration.c"
+ }
+#line 193 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp1_) {
+#line 1404 "Alteration.c"
+ gboolean _tmp10_ = FALSE;
+ const gchar* _tmp11_ = NULL;
+ Alteration* _tmp12_ = NULL;
+ const gchar* _tmp13_ = NULL;
+ gboolean _tmp14_ = FALSE;
+#line 194 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp11_ = self->priv->subject;
+#line 194 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp12_ = other;
+#line 194 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp13_ = _tmp12_->priv->subject;
+#line 194 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp14_ = alteration_equal_values (_tmp11_, _tmp13_);
+#line 194 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp14_) {
+#line 1420 "Alteration.c"
+ const gchar* _tmp15_ = NULL;
+ Alteration* _tmp16_ = NULL;
+ const gchar* _tmp17_ = NULL;
+ gboolean _tmp18_ = FALSE;
+#line 194 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp15_ = self->priv->detail;
+#line 194 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp16_ = other;
+#line 194 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp17_ = _tmp16_->priv->detail;
+#line 194 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp18_ = alteration_equal_values (_tmp15_, _tmp17_);
+#line 194 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp10_ = _tmp18_;
+#line 1435 "Alteration.c"
+ } else {
+#line 194 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp10_ = FALSE;
+#line 1439 "Alteration.c"
+ }
+#line 194 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = _tmp10_;
+#line 194 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 1445 "Alteration.c"
+ }
+#line 197 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp21_ = self->priv->map;
+#line 197 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp21_ != NULL) {
+#line 1451 "Alteration.c"
+ Alteration* _tmp22_ = NULL;
+ GeeMultiMap* _tmp23_ = NULL;
+#line 197 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp22_ = other;
+#line 197 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp23_ = _tmp22_->priv->map;
+#line 197 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp20_ = _tmp23_ == NULL;
+#line 1460 "Alteration.c"
+ } else {
+#line 197 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp20_ = FALSE;
+#line 1464 "Alteration.c"
+ }
+#line 197 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp20_) {
+#line 197 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp19_ = TRUE;
+#line 1470 "Alteration.c"
+ } else {
+ gboolean _tmp24_ = FALSE;
+ GeeMultiMap* _tmp25_ = NULL;
+#line 197 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp25_ = self->priv->map;
+#line 197 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp25_ == NULL) {
+#line 1478 "Alteration.c"
+ Alteration* _tmp26_ = NULL;
+ GeeMultiMap* _tmp27_ = NULL;
+#line 197 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp26_ = other;
+#line 197 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp27_ = _tmp26_->priv->map;
+#line 197 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp24_ = _tmp27_ != NULL;
+#line 1487 "Alteration.c"
+ } else {
+#line 197 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp24_ = FALSE;
+#line 1491 "Alteration.c"
+ }
+#line 197 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp19_ = _tmp24_;
+#line 1495 "Alteration.c"
+ }
+#line 197 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp19_) {
+#line 1499 "Alteration.c"
+ const gchar* _tmp28_ = NULL;
+ const gchar* _tmp29_ = NULL;
+ gchar* single_subject = NULL;
+ gchar* _tmp33_ = NULL;
+ const gchar* _tmp34_ = NULL;
+ const gchar* _tmp35_ = NULL;
+ gchar* single_detail = NULL;
+ gchar* _tmp39_ = NULL;
+ GeeMultiMap* _tmp40_ = NULL;
+ GeeMultiMap* _tmp41_ = NULL;
+ GeeMultiMap* multimap = NULL;
+ GeeMultiMap* _tmp45_ = NULL;
+ gboolean _tmp46_ = FALSE;
+ GeeMultiMap* _tmp47_ = NULL;
+ const gchar* _tmp48_ = NULL;
+ gboolean _tmp49_ = FALSE;
+#line 198 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp29_ = self->priv->subject;
+#line 198 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp29_ != NULL) {
+#line 1520 "Alteration.c"
+ const gchar* _tmp30_ = NULL;
+#line 198 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp30_ = self->priv->subject;
+#line 198 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp28_ = _tmp30_;
+#line 1526 "Alteration.c"
+ } else {
+ Alteration* _tmp31_ = NULL;
+ const gchar* _tmp32_ = NULL;
+#line 198 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp31_ = other;
+#line 198 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp32_ = _tmp31_->priv->subject;
+#line 198 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp28_ = _tmp32_;
+#line 1536 "Alteration.c"
+ }
+#line 198 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp33_ = g_strdup (_tmp28_);
+#line 198 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ single_subject = _tmp33_;
+#line 199 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp35_ = self->priv->detail;
+#line 199 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp35_ != NULL) {
+#line 1546 "Alteration.c"
+ const gchar* _tmp36_ = NULL;
+#line 199 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp36_ = self->priv->detail;
+#line 199 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp34_ = _tmp36_;
+#line 1552 "Alteration.c"
+ } else {
+ Alteration* _tmp37_ = NULL;
+ const gchar* _tmp38_ = NULL;
+#line 199 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp37_ = other;
+#line 199 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp38_ = _tmp37_->priv->detail;
+#line 199 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp34_ = _tmp38_;
+#line 1562 "Alteration.c"
+ }
+#line 199 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp39_ = g_strdup (_tmp34_);
+#line 199 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ single_detail = _tmp39_;
+#line 200 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp41_ = self->priv->map;
+#line 200 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp41_ != NULL) {
+#line 1572 "Alteration.c"
+ GeeMultiMap* _tmp42_ = NULL;
+#line 200 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp42_ = self->priv->map;
+#line 200 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp40_ = _tmp42_;
+#line 1578 "Alteration.c"
+ } else {
+ Alteration* _tmp43_ = NULL;
+ GeeMultiMap* _tmp44_ = NULL;
+#line 200 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp43_ = other;
+#line 200 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp44_ = _tmp43_->priv->map;
+#line 200 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp40_ = _tmp44_;
+#line 1588 "Alteration.c"
+ }
+#line 200 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp45_ = _g_object_ref0 (_tmp40_);
+#line 200 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ multimap = _tmp45_;
+#line 202 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp47_ = multimap;
+#line 202 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp48_ = single_subject;
+#line 202 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp49_ = gee_multi_map_contains (_tmp47_, _tmp48_);
+#line 202 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp49_) {
+#line 1602 "Alteration.c"
+ GeeMultiMap* _tmp50_ = NULL;
+ const gchar* _tmp51_ = NULL;
+ GeeCollection* _tmp52_ = NULL;
+ GeeCollection* _tmp53_ = NULL;
+ const gchar* _tmp54_ = NULL;
+ gboolean _tmp55_ = FALSE;
+#line 202 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp50_ = self->priv->map;
+#line 202 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp51_ = single_subject;
+#line 202 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp52_ = gee_multi_map_get (_tmp50_, _tmp51_);
+#line 202 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp53_ = _tmp52_;
+#line 202 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp54_ = single_detail;
+#line 202 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp55_ = gee_collection_contains (_tmp53_, _tmp54_);
+#line 202 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp46_ = _tmp55_;
+#line 202 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (_tmp53_);
+#line 1625 "Alteration.c"
+ } else {
+#line 202 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp46_ = FALSE;
+#line 1629 "Alteration.c"
+ }
+#line 202 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = _tmp46_;
+#line 202 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (multimap);
+#line 202 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (single_detail);
+#line 202 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (single_subject);
+#line 202 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 1641 "Alteration.c"
+ }
+#line 206 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp57_ = self->priv->map;
+#line 206 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp57_ != NULL) {
+#line 1647 "Alteration.c"
+ Alteration* _tmp58_ = NULL;
+ GeeMultiMap* _tmp59_ = NULL;
+#line 206 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp58_ = other;
+#line 206 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp59_ = _tmp58_->priv->map;
+#line 206 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp56_ = _tmp59_ != NULL;
+#line 1656 "Alteration.c"
+ } else {
+#line 206 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp56_ = FALSE;
+#line 1660 "Alteration.c"
+ }
+#line 206 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp56_) {
+#line 1664 "Alteration.c"
+ GeeSet* keys = NULL;
+ GeeMultiMap* _tmp60_ = NULL;
+ GeeSet* _tmp61_ = NULL;
+ GeeSet* _tmp62_ = NULL;
+ GeeSet* other_keys = NULL;
+ Alteration* _tmp63_ = NULL;
+ GeeMultiMap* _tmp64_ = NULL;
+ GeeSet* _tmp65_ = NULL;
+ GeeSet* _tmp66_ = NULL;
+#line 207 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp60_ = self->priv->map;
+#line 207 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp61_ = gee_multi_map_get_keys (_tmp60_);
+#line 207 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ keys = _tmp61_;
+#line 208 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp62_ = keys;
+#line 208 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _vala_assert (_tmp62_ != NULL, "keys != null");
+#line 209 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp63_ = other;
+#line 209 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp64_ = _tmp63_->priv->map;
+#line 209 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp65_ = gee_multi_map_get_keys (_tmp64_);
+#line 209 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ other_keys = _tmp65_;
+#line 210 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp66_ = other_keys;
+#line 210 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _vala_assert (_tmp66_ != NULL, "other_keys != null");
+#line 1696 "Alteration.c"
+ {
+ GeeIterator* _subject_it = NULL;
+ GeeSet* _tmp67_ = NULL;
+ GeeIterator* _tmp68_ = NULL;
+#line 212 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp67_ = other_keys;
+#line 212 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp68_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp67_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 212 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _subject_it = _tmp68_;
+#line 212 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ while (TRUE) {
+#line 1709 "Alteration.c"
+ GeeIterator* _tmp69_ = NULL;
+ gboolean _tmp70_ = FALSE;
+ gchar* subject = NULL;
+ GeeIterator* _tmp71_ = NULL;
+ gpointer _tmp72_ = NULL;
+ GeeSet* _tmp73_ = NULL;
+ const gchar* _tmp74_ = NULL;
+ gboolean _tmp75_ = FALSE;
+ GeeCollection* details = NULL;
+ GeeMultiMap* _tmp76_ = NULL;
+ const gchar* _tmp77_ = NULL;
+ GeeCollection* _tmp78_ = NULL;
+ GeeCollection* other_details = NULL;
+ Alteration* _tmp79_ = NULL;
+ GeeMultiMap* _tmp80_ = NULL;
+ const gchar* _tmp81_ = NULL;
+ GeeCollection* _tmp82_ = NULL;
+ gboolean _tmp83_ = FALSE;
+ GeeCollection* _tmp84_ = NULL;
+#line 212 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp69_ = _subject_it;
+#line 212 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp70_ = gee_iterator_next (_tmp69_);
+#line 212 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (!_tmp70_) {
+#line 212 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ break;
+#line 1737 "Alteration.c"
+ }
+#line 212 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp71_ = _subject_it;
+#line 212 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp72_ = gee_iterator_get (_tmp71_);
+#line 212 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ subject = (gchar*) _tmp72_;
+#line 213 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp73_ = keys;
+#line 213 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp74_ = subject;
+#line 213 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp75_ = gee_collection_contains (G_TYPE_CHECK_INSTANCE_CAST (_tmp73_, GEE_TYPE_COLLECTION, GeeCollection), _tmp74_);
+#line 213 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (!_tmp75_) {
+#line 214 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (subject);
+#line 214 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ continue;
+#line 1757 "Alteration.c"
+ }
+#line 216 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp76_ = self->priv->map;
+#line 216 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp77_ = subject;
+#line 216 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp78_ = gee_multi_map_get (_tmp76_, _tmp77_);
+#line 216 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ details = _tmp78_;
+#line 217 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp79_ = other;
+#line 217 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp80_ = _tmp79_->priv->map;
+#line 217 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp81_ = subject;
+#line 217 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp82_ = gee_multi_map_get (_tmp80_, _tmp81_);
+#line 217 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ other_details = _tmp82_;
+#line 219 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp84_ = details;
+#line 219 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp84_ != NULL) {
+#line 1781 "Alteration.c"
+ GeeCollection* _tmp85_ = NULL;
+#line 219 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp85_ = other_details;
+#line 219 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp83_ = _tmp85_ != NULL;
+#line 1787 "Alteration.c"
+ } else {
+#line 219 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp83_ = FALSE;
+#line 1791 "Alteration.c"
+ }
+#line 219 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp83_) {
+#line 1795 "Alteration.c"
+ {
+ GeeIterator* _detail_it = NULL;
+ GeeCollection* _tmp86_ = NULL;
+ GeeIterator* _tmp87_ = NULL;
+#line 220 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp86_ = other_details;
+#line 220 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp87_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp86_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 220 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _detail_it = _tmp87_;
+#line 220 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ while (TRUE) {
+#line 1808 "Alteration.c"
+ GeeIterator* _tmp88_ = NULL;
+ gboolean _tmp89_ = FALSE;
+ gchar* detail = NULL;
+ GeeIterator* _tmp90_ = NULL;
+ gpointer _tmp91_ = NULL;
+ GeeCollection* _tmp92_ = NULL;
+ const gchar* _tmp93_ = NULL;
+ gboolean _tmp94_ = FALSE;
+#line 220 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp88_ = _detail_it;
+#line 220 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp89_ = gee_iterator_next (_tmp88_);
+#line 220 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (!_tmp89_) {
+#line 220 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ break;
+#line 1825 "Alteration.c"
+ }
+#line 220 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp90_ = _detail_it;
+#line 220 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp91_ = gee_iterator_get (_tmp90_);
+#line 220 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ detail = (gchar*) _tmp91_;
+#line 221 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp92_ = details;
+#line 221 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp93_ = detail;
+#line 221 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp94_ = gee_collection_contains (_tmp92_, _tmp93_);
+#line 221 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp94_) {
+#line 222 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = TRUE;
+#line 222 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (detail);
+#line 222 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (_detail_it);
+#line 222 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (other_details);
+#line 222 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (details);
+#line 222 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (subject);
+#line 222 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (_subject_it);
+#line 222 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (other_keys);
+#line 222 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (keys);
+#line 222 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 1861 "Alteration.c"
+ }
+#line 220 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (detail);
+#line 1865 "Alteration.c"
+ }
+#line 220 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (_detail_it);
+#line 1869 "Alteration.c"
+ }
+ }
+#line 212 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (other_details);
+#line 212 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (details);
+#line 212 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (subject);
+#line 1878 "Alteration.c"
+ }
+#line 212 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (_subject_it);
+#line 1882 "Alteration.c"
+ }
+#line 206 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (other_keys);
+#line 206 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (keys);
+#line 1888 "Alteration.c"
+ }
+#line 228 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = FALSE;
+#line 228 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 1894 "Alteration.c"
+}
+
+
+gboolean alteration_equals (Alteration* self, Alteration* other) {
+ gboolean result = FALSE;
+ Alteration* _tmp0_ = NULL;
+ gboolean _tmp1_ = FALSE;
+ gboolean _tmp2_ = FALSE;
+ gboolean _tmp3_ = FALSE;
+ const gchar* _tmp4_ = NULL;
+ gboolean _tmp19_ = FALSE;
+ GeeMultiMap* _tmp20_ = NULL;
+#line 231 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_val_if_fail (IS_ALTERATION (self), FALSE);
+#line 231 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_val_if_fail (IS_ALTERATION (other), FALSE);
+#line 233 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp0_ = other;
+#line 233 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (self == _tmp0_) {
+#line 234 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = TRUE;
+#line 234 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 1919 "Alteration.c"
+ }
+#line 237 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp4_ = self->priv->subject;
+#line 237 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp4_ != NULL) {
+#line 1925 "Alteration.c"
+ Alteration* _tmp5_ = NULL;
+ const gchar* _tmp6_ = NULL;
+#line 237 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp5_ = other;
+#line 237 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp6_ = _tmp5_->priv->subject;
+#line 237 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp3_ = _tmp6_ != NULL;
+#line 1934 "Alteration.c"
+ } else {
+#line 237 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp3_ = FALSE;
+#line 1938 "Alteration.c"
+ }
+#line 237 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp3_) {
+#line 1942 "Alteration.c"
+ const gchar* _tmp7_ = NULL;
+#line 237 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp7_ = self->priv->detail;
+#line 237 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp2_ = _tmp7_ != NULL;
+#line 1948 "Alteration.c"
+ } else {
+#line 237 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp2_ = FALSE;
+#line 1952 "Alteration.c"
+ }
+#line 237 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp2_) {
+#line 1956 "Alteration.c"
+ Alteration* _tmp8_ = NULL;
+ const gchar* _tmp9_ = NULL;
+#line 237 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp8_ = other;
+#line 237 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp9_ = _tmp8_->priv->detail;
+#line 237 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp1_ = _tmp9_ != NULL;
+#line 1965 "Alteration.c"
+ } else {
+#line 237 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp1_ = FALSE;
+#line 1969 "Alteration.c"
+ }
+#line 237 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp1_) {
+#line 1973 "Alteration.c"
+ gboolean _tmp10_ = FALSE;
+ const gchar* _tmp11_ = NULL;
+ Alteration* _tmp12_ = NULL;
+ const gchar* _tmp13_ = NULL;
+ gboolean _tmp14_ = FALSE;
+#line 238 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp11_ = self->priv->subject;
+#line 238 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp12_ = other;
+#line 238 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp13_ = _tmp12_->priv->subject;
+#line 238 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp14_ = alteration_equal_values (_tmp11_, _tmp13_);
+#line 238 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp14_) {
+#line 1989 "Alteration.c"
+ const gchar* _tmp15_ = NULL;
+ Alteration* _tmp16_ = NULL;
+ const gchar* _tmp17_ = NULL;
+ gboolean _tmp18_ = FALSE;
+#line 238 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp15_ = self->priv->detail;
+#line 238 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp16_ = other;
+#line 238 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp17_ = _tmp16_->priv->detail;
+#line 238 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp18_ = alteration_equal_values (_tmp15_, _tmp17_);
+#line 238 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp10_ = _tmp18_;
+#line 2004 "Alteration.c"
+ } else {
+#line 238 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp10_ = FALSE;
+#line 2008 "Alteration.c"
+ }
+#line 238 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = _tmp10_;
+#line 238 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 2014 "Alteration.c"
+ }
+#line 241 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp20_ = self->priv->map;
+#line 241 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp20_ != NULL) {
+#line 2020 "Alteration.c"
+ Alteration* _tmp21_ = NULL;
+ GeeMultiMap* _tmp22_ = NULL;
+#line 241 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp21_ = other;
+#line 241 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp22_ = _tmp21_->priv->map;
+#line 241 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp19_ = _tmp22_ != NULL;
+#line 2029 "Alteration.c"
+ } else {
+#line 241 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp19_ = FALSE;
+#line 2033 "Alteration.c"
+ }
+#line 241 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp19_) {
+#line 2037 "Alteration.c"
+ GeeSet* keys = NULL;
+ GeeMultiMap* _tmp23_ = NULL;
+ GeeSet* _tmp24_ = NULL;
+ GeeSet* _tmp25_ = NULL;
+ GeeSet* other_keys = NULL;
+ Alteration* _tmp26_ = NULL;
+ GeeMultiMap* _tmp27_ = NULL;
+ GeeSet* _tmp28_ = NULL;
+ GeeSet* _tmp29_ = NULL;
+ GeeSet* _tmp30_ = NULL;
+ gint _tmp31_ = 0;
+ gint _tmp32_ = 0;
+ GeeSet* _tmp33_ = NULL;
+ gint _tmp34_ = 0;
+ gint _tmp35_ = 0;
+ GeeSet* _tmp36_ = NULL;
+ GeeSet* _tmp37_ = NULL;
+ gboolean _tmp38_ = FALSE;
+ GeeSet* _tmp39_ = NULL;
+ GeeSet* _tmp40_ = NULL;
+ gboolean _tmp41_ = FALSE;
+#line 243 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp23_ = self->priv->map;
+#line 243 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp24_ = gee_multi_map_get_keys (_tmp23_);
+#line 243 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ keys = _tmp24_;
+#line 244 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp25_ = keys;
+#line 244 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _vala_assert (_tmp25_ != NULL, "keys != null");
+#line 245 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp26_ = other;
+#line 245 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp27_ = _tmp26_->priv->map;
+#line 245 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp28_ = gee_multi_map_get_keys (_tmp27_);
+#line 245 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ other_keys = _tmp28_;
+#line 246 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp29_ = other_keys;
+#line 246 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _vala_assert (_tmp29_ != NULL, "other_keys != null");
+#line 248 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp30_ = keys;
+#line 248 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp31_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp30_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 248 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp32_ = _tmp31_;
+#line 248 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp33_ = other_keys;
+#line 248 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp34_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp33_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 248 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp35_ = _tmp34_;
+#line 248 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp32_ != _tmp35_) {
+#line 249 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = FALSE;
+#line 249 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (other_keys);
+#line 249 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (keys);
+#line 249 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 2103 "Alteration.c"
+ }
+#line 251 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp36_ = keys;
+#line 251 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp37_ = other_keys;
+#line 251 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp38_ = gee_collection_contains_all (G_TYPE_CHECK_INSTANCE_CAST (_tmp36_, GEE_TYPE_COLLECTION, GeeCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp37_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 251 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (!_tmp38_) {
+#line 252 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = FALSE;
+#line 252 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (other_keys);
+#line 252 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (keys);
+#line 252 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 2121 "Alteration.c"
+ }
+#line 254 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp39_ = other_keys;
+#line 254 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp40_ = keys;
+#line 254 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp41_ = gee_collection_contains_all (G_TYPE_CHECK_INSTANCE_CAST (_tmp39_, GEE_TYPE_COLLECTION, GeeCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp40_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 254 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (!_tmp41_) {
+#line 255 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = FALSE;
+#line 255 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (other_keys);
+#line 255 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (keys);
+#line 255 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 2139 "Alteration.c"
+ }
+ {
+ GeeIterator* _key_it = NULL;
+ GeeSet* _tmp42_ = NULL;
+ GeeIterator* _tmp43_ = NULL;
+#line 257 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp42_ = keys;
+#line 257 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp43_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp42_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 257 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _key_it = _tmp43_;
+#line 257 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ while (TRUE) {
+#line 2153 "Alteration.c"
+ GeeIterator* _tmp44_ = NULL;
+ gboolean _tmp45_ = FALSE;
+ gchar* key = NULL;
+ GeeIterator* _tmp46_ = NULL;
+ gpointer _tmp47_ = NULL;
+ GeeCollection* values = NULL;
+ GeeMultiMap* _tmp48_ = NULL;
+ const gchar* _tmp49_ = NULL;
+ GeeCollection* _tmp50_ = NULL;
+ GeeCollection* other_values = NULL;
+ Alteration* _tmp51_ = NULL;
+ GeeMultiMap* _tmp52_ = NULL;
+ const gchar* _tmp53_ = NULL;
+ GeeCollection* _tmp54_ = NULL;
+ GeeCollection* _tmp55_ = NULL;
+ gint _tmp56_ = 0;
+ gint _tmp57_ = 0;
+ GeeCollection* _tmp58_ = NULL;
+ gint _tmp59_ = 0;
+ gint _tmp60_ = 0;
+ GeeCollection* _tmp61_ = NULL;
+ GeeCollection* _tmp62_ = NULL;
+ gboolean _tmp63_ = FALSE;
+ GeeCollection* _tmp64_ = NULL;
+ GeeCollection* _tmp65_ = NULL;
+ gboolean _tmp66_ = FALSE;
+#line 257 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp44_ = _key_it;
+#line 257 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp45_ = gee_iterator_next (_tmp44_);
+#line 257 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (!_tmp45_) {
+#line 257 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ break;
+#line 2188 "Alteration.c"
+ }
+#line 257 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp46_ = _key_it;
+#line 257 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp47_ = gee_iterator_get (_tmp46_);
+#line 257 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ key = (gchar*) _tmp47_;
+#line 258 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp48_ = self->priv->map;
+#line 258 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp49_ = key;
+#line 258 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp50_ = gee_multi_map_get (_tmp48_, _tmp49_);
+#line 258 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ values = _tmp50_;
+#line 259 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp51_ = other;
+#line 259 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp52_ = _tmp51_->priv->map;
+#line 259 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp53_ = key;
+#line 259 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp54_ = gee_multi_map_get (_tmp52_, _tmp53_);
+#line 259 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ other_values = _tmp54_;
+#line 261 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp55_ = values;
+#line 261 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp56_ = gee_collection_get_size (_tmp55_);
+#line 261 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp57_ = _tmp56_;
+#line 261 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp58_ = other_values;
+#line 261 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp59_ = gee_collection_get_size (_tmp58_);
+#line 261 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp60_ = _tmp59_;
+#line 261 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp57_ != _tmp60_) {
+#line 262 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = FALSE;
+#line 262 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (other_values);
+#line 262 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (values);
+#line 262 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (key);
+#line 262 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (_key_it);
+#line 262 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (other_keys);
+#line 262 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (keys);
+#line 262 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 2244 "Alteration.c"
+ }
+#line 264 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp61_ = values;
+#line 264 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp62_ = other_values;
+#line 264 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp63_ = gee_collection_contains_all (_tmp61_, _tmp62_);
+#line 264 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (!_tmp63_) {
+#line 265 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = FALSE;
+#line 265 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (other_values);
+#line 265 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (values);
+#line 265 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (key);
+#line 265 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (_key_it);
+#line 265 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (other_keys);
+#line 265 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (keys);
+#line 265 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 2270 "Alteration.c"
+ }
+#line 267 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp64_ = other_values;
+#line 267 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp65_ = values;
+#line 267 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp66_ = gee_collection_contains_all (_tmp64_, _tmp65_);
+#line 267 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (!_tmp66_) {
+#line 268 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = FALSE;
+#line 268 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (other_values);
+#line 268 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (values);
+#line 268 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (key);
+#line 268 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (_key_it);
+#line 268 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (other_keys);
+#line 268 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (keys);
+#line 268 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 2296 "Alteration.c"
+ }
+#line 257 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (other_values);
+#line 257 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (values);
+#line 257 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (key);
+#line 2304 "Alteration.c"
+ }
+#line 257 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (_key_it);
+#line 2308 "Alteration.c"
+ }
+#line 272 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = TRUE;
+#line 272 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (other_keys);
+#line 272 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (keys);
+#line 272 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 2318 "Alteration.c"
+ }
+#line 276 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = FALSE;
+#line 276 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 2324 "Alteration.c"
+}
+
+
+static void alteration_multimap_add_all (GeeMultiMap* dest, GeeMultiMap* src) {
+ GeeSet* keys = NULL;
+ GeeMultiMap* _tmp0_ = NULL;
+ GeeSet* _tmp1_ = NULL;
+#line 279 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_if_fail (GEE_IS_MULTI_MAP (dest));
+#line 279 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_if_fail (GEE_IS_MULTI_MAP (src));
+#line 281 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp0_ = src;
+#line 281 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp1_ = gee_multi_map_get_keys (_tmp0_);
+#line 281 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ keys = _tmp1_;
+#line 2342 "Alteration.c"
+ {
+ GeeIterator* _key_it = NULL;
+ GeeSet* _tmp2_ = NULL;
+ GeeIterator* _tmp3_ = NULL;
+#line 282 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp2_ = keys;
+#line 282 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp3_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 282 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _key_it = _tmp3_;
+#line 282 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ while (TRUE) {
+#line 2355 "Alteration.c"
+ GeeIterator* _tmp4_ = NULL;
+ gboolean _tmp5_ = FALSE;
+ gchar* key = NULL;
+ GeeIterator* _tmp6_ = NULL;
+ gpointer _tmp7_ = NULL;
+ GeeCollection* values = NULL;
+ GeeMultiMap* _tmp8_ = NULL;
+ const gchar* _tmp9_ = NULL;
+ GeeCollection* _tmp10_ = NULL;
+#line 282 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp4_ = _key_it;
+#line 282 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp5_ = gee_iterator_next (_tmp4_);
+#line 282 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (!_tmp5_) {
+#line 282 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ break;
+#line 2373 "Alteration.c"
+ }
+#line 282 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp6_ = _key_it;
+#line 282 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp7_ = gee_iterator_get (_tmp6_);
+#line 282 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ key = (gchar*) _tmp7_;
+#line 283 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp8_ = src;
+#line 283 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp9_ = key;
+#line 283 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp10_ = gee_multi_map_get (_tmp8_, _tmp9_);
+#line 283 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ values = _tmp10_;
+#line 2389 "Alteration.c"
+ {
+ GeeIterator* _value_it = NULL;
+ GeeCollection* _tmp11_ = NULL;
+ GeeIterator* _tmp12_ = NULL;
+#line 284 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp11_ = values;
+#line 284 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp12_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp11_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 284 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _value_it = _tmp12_;
+#line 284 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ while (TRUE) {
+#line 2402 "Alteration.c"
+ GeeIterator* _tmp13_ = NULL;
+ gboolean _tmp14_ = FALSE;
+ gchar* value = NULL;
+ GeeIterator* _tmp15_ = NULL;
+ gpointer _tmp16_ = NULL;
+ GeeMultiMap* _tmp17_ = NULL;
+ const gchar* _tmp18_ = NULL;
+ const gchar* _tmp19_ = NULL;
+#line 284 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp13_ = _value_it;
+#line 284 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp14_ = gee_iterator_next (_tmp13_);
+#line 284 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (!_tmp14_) {
+#line 284 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ break;
+#line 2419 "Alteration.c"
+ }
+#line 284 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp15_ = _value_it;
+#line 284 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp16_ = gee_iterator_get (_tmp15_);
+#line 284 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ value = (gchar*) _tmp16_;
+#line 285 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp17_ = dest;
+#line 285 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp18_ = key;
+#line 285 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp19_ = value;
+#line 285 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ gee_multi_map_set (_tmp17_, _tmp18_, _tmp19_);
+#line 284 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (value);
+#line 2437 "Alteration.c"
+ }
+#line 284 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (_value_it);
+#line 2441 "Alteration.c"
+ }
+#line 282 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (values);
+#line 282 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (key);
+#line 2447 "Alteration.c"
+ }
+#line 282 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (_key_it);
+#line 2451 "Alteration.c"
+ }
+#line 279 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (keys);
+#line 2455 "Alteration.c"
+}
+
+
+static gpointer _alteration_ref0 (gpointer self) {
+#line 293 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return self ? alteration_ref (self) : NULL;
+#line 2462 "Alteration.c"
+}
+
+
+Alteration* alteration_compress (Alteration* self, Alteration* other) {
+ Alteration* result = NULL;
+ Alteration* _tmp0_ = NULL;
+ gboolean _tmp1_ = FALSE;
+ GeeMultiMap* compressed = NULL;
+ GeeMultiMap* _tmp3_ = NULL;
+ gboolean _tmp4_ = FALSE;
+ const gchar* _tmp5_ = NULL;
+ gboolean _tmp13_ = FALSE;
+ Alteration* _tmp14_ = NULL;
+ const gchar* _tmp15_ = NULL;
+ GeeMultiMap* _tmp28_ = NULL;
+ Alteration* _tmp29_ = NULL;
+#line 291 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_val_if_fail (IS_ALTERATION (self), NULL);
+#line 291 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_val_if_fail (IS_ALTERATION (other), NULL);
+#line 292 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp0_ = other;
+#line 292 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp1_ = alteration_equals (self, _tmp0_);
+#line 292 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp1_) {
+#line 2489 "Alteration.c"
+ Alteration* _tmp2_ = NULL;
+#line 293 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp2_ = _alteration_ref0 (self);
+#line 293 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = _tmp2_;
+#line 293 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 2497 "Alteration.c"
+ }
+#line 297 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp3_ = alteration_create_map (self);
+#line 297 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ compressed = _tmp3_;
+#line 299 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp5_ = self->priv->subject;
+#line 299 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp5_ != NULL) {
+#line 2507 "Alteration.c"
+ const gchar* _tmp6_ = NULL;
+#line 299 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp6_ = self->priv->detail;
+#line 299 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp4_ = _tmp6_ != NULL;
+#line 2513 "Alteration.c"
+ } else {
+#line 299 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp4_ = FALSE;
+#line 2517 "Alteration.c"
+ }
+#line 299 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp4_) {
+#line 2521 "Alteration.c"
+ GeeMultiMap* _tmp7_ = NULL;
+ const gchar* _tmp8_ = NULL;
+ const gchar* _tmp9_ = NULL;
+#line 300 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp7_ = compressed;
+#line 300 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp8_ = self->priv->subject;
+#line 300 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp9_ = self->priv->detail;
+#line 300 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ gee_multi_map_set (_tmp7_, _tmp8_, _tmp9_);
+#line 2533 "Alteration.c"
+ } else {
+ GeeMultiMap* _tmp10_ = NULL;
+ GeeMultiMap* _tmp11_ = NULL;
+ GeeMultiMap* _tmp12_ = NULL;
+#line 302 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp10_ = self->priv->map;
+#line 302 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _vala_assert (_tmp10_ != NULL, "map != null");
+#line 303 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp11_ = compressed;
+#line 303 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp12_ = self->priv->map;
+#line 303 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ alteration_multimap_add_all (_tmp11_, _tmp12_);
+#line 2548 "Alteration.c"
+ }
+#line 306 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp14_ = other;
+#line 306 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp15_ = _tmp14_->priv->subject;
+#line 306 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp15_ != NULL) {
+#line 2556 "Alteration.c"
+ Alteration* _tmp16_ = NULL;
+ const gchar* _tmp17_ = NULL;
+#line 306 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp16_ = other;
+#line 306 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp17_ = _tmp16_->priv->detail;
+#line 306 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp13_ = _tmp17_ != NULL;
+#line 2565 "Alteration.c"
+ } else {
+#line 306 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp13_ = FALSE;
+#line 2569 "Alteration.c"
+ }
+#line 306 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (_tmp13_) {
+#line 2573 "Alteration.c"
+ GeeMultiMap* _tmp18_ = NULL;
+ Alteration* _tmp19_ = NULL;
+ const gchar* _tmp20_ = NULL;
+ Alteration* _tmp21_ = NULL;
+ const gchar* _tmp22_ = NULL;
+#line 307 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp18_ = compressed;
+#line 307 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp19_ = other;
+#line 307 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp20_ = _tmp19_->priv->subject;
+#line 307 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp21_ = other;
+#line 307 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp22_ = _tmp21_->priv->detail;
+#line 307 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ gee_multi_map_set (_tmp18_, _tmp20_, _tmp22_);
+#line 2591 "Alteration.c"
+ } else {
+ Alteration* _tmp23_ = NULL;
+ GeeMultiMap* _tmp24_ = NULL;
+ GeeMultiMap* _tmp25_ = NULL;
+ Alteration* _tmp26_ = NULL;
+ GeeMultiMap* _tmp27_ = NULL;
+#line 309 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp23_ = other;
+#line 309 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp24_ = _tmp23_->priv->map;
+#line 309 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _vala_assert (_tmp24_ != NULL, "other.map != null");
+#line 310 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp25_ = compressed;
+#line 310 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp26_ = other;
+#line 310 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp27_ = _tmp26_->priv->map;
+#line 310 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ alteration_multimap_add_all (_tmp25_, _tmp27_);
+#line 2612 "Alteration.c"
+ }
+#line 313 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp28_ = compressed;
+#line 313 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _tmp29_ = alteration_new_from_map (_tmp28_);
+#line 313 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ result = _tmp29_;
+#line 313 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (compressed);
+#line 313 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return result;
+#line 2624 "Alteration.c"
+}
+
+
+static void value_alteration_init (GValue* value) {
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ value->data[0].v_pointer = NULL;
+#line 2631 "Alteration.c"
+}
+
+
+static void value_alteration_free_value (GValue* value) {
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (value->data[0].v_pointer) {
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ alteration_unref (value->data[0].v_pointer);
+#line 2640 "Alteration.c"
+ }
+}
+
+
+static void value_alteration_copy_value (const GValue* src_value, GValue* dest_value) {
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (src_value->data[0].v_pointer) {
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ dest_value->data[0].v_pointer = alteration_ref (src_value->data[0].v_pointer);
+#line 2650 "Alteration.c"
+ } else {
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ dest_value->data[0].v_pointer = NULL;
+#line 2654 "Alteration.c"
+ }
+}
+
+
+static gpointer value_alteration_peek_pointer (const GValue* value) {
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return value->data[0].v_pointer;
+#line 2662 "Alteration.c"
+}
+
+
+static gchar* value_alteration_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (collect_values[0].v_pointer) {
+#line 2669 "Alteration.c"
+ Alteration* object;
+ object = collect_values[0].v_pointer;
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (object->parent_instance.g_class == NULL) {
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+#line 2676 "Alteration.c"
+ } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+#line 2680 "Alteration.c"
+ }
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ value->data[0].v_pointer = alteration_ref (object);
+#line 2684 "Alteration.c"
+ } else {
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ value->data[0].v_pointer = NULL;
+#line 2688 "Alteration.c"
+ }
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return NULL;
+#line 2692 "Alteration.c"
+}
+
+
+static gchar* value_alteration_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+ Alteration** object_p;
+ object_p = collect_values[0].v_pointer;
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (!object_p) {
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+#line 2703 "Alteration.c"
+ }
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (!value->data[0].v_pointer) {
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ *object_p = NULL;
+#line 2709 "Alteration.c"
+ } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ *object_p = value->data[0].v_pointer;
+#line 2713 "Alteration.c"
+ } else {
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ *object_p = alteration_ref (value->data[0].v_pointer);
+#line 2717 "Alteration.c"
+ }
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return NULL;
+#line 2721 "Alteration.c"
+}
+
+
+GParamSpec* param_spec_alteration (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
+ ParamSpecAlteration* spec;
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_val_if_fail (g_type_is_a (object_type, TYPE_ALTERATION), NULL);
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ G_PARAM_SPEC (spec)->value_type = object_type;
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return G_PARAM_SPEC (spec);
+#line 2735 "Alteration.c"
+}
+
+
+gpointer value_get_alteration (const GValue* value) {
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_ALTERATION), NULL);
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return value->data[0].v_pointer;
+#line 2744 "Alteration.c"
+}
+
+
+void value_set_alteration (GValue* value, gpointer v_object) {
+ Alteration* old;
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_ALTERATION));
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ old = value->data[0].v_pointer;
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (v_object) {
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_ALTERATION));
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ value->data[0].v_pointer = v_object;
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ alteration_ref (value->data[0].v_pointer);
+#line 2764 "Alteration.c"
+ } else {
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ value->data[0].v_pointer = NULL;
+#line 2768 "Alteration.c"
+ }
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (old) {
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ alteration_unref (old);
+#line 2774 "Alteration.c"
+ }
+}
+
+
+void value_take_alteration (GValue* value, gpointer v_object) {
+ Alteration* old;
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_ALTERATION));
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ old = value->data[0].v_pointer;
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (v_object) {
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_ALTERATION));
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ value->data[0].v_pointer = v_object;
+#line 2793 "Alteration.c"
+ } else {
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ value->data[0].v_pointer = NULL;
+#line 2797 "Alteration.c"
+ }
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (old) {
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ alteration_unref (old);
+#line 2803 "Alteration.c"
+ }
+}
+
+
+static void alteration_class_init (AlterationClass * klass) {
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ alteration_parent_class = g_type_class_peek_parent (klass);
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ ((AlterationClass *) klass)->finalize = alteration_finalize;
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_type_class_add_private (klass, sizeof (AlterationPrivate));
+#line 2815 "Alteration.c"
+}
+
+
+static void alteration_instance_init (Alteration * self) {
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ self->priv = ALTERATION_GET_PRIVATE (self);
+#line 28 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ self->priv->subject = NULL;
+#line 29 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ self->priv->detail = NULL;
+#line 30 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ self->priv->map = NULL;
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ self->ref_count = 1;
+#line 2830 "Alteration.c"
+}
+
+
+static void alteration_finalize (Alteration* obj) {
+ Alteration * self;
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_ALTERATION, Alteration);
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_signal_handlers_destroy (self);
+#line 28 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (self->priv->subject);
+#line 29 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_free0 (self->priv->detail);
+#line 30 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ _g_object_unref0 (self->priv->map);
+#line 2846 "Alteration.c"
+}
+
+
+GType alteration_get_type (void) {
+ static volatile gsize alteration_type_id__volatile = 0;
+ if (g_once_init_enter (&alteration_type_id__volatile)) {
+ static const GTypeValueTable g_define_type_value_table = { value_alteration_init, value_alteration_free_value, value_alteration_copy_value, value_alteration_peek_pointer, "p", value_alteration_collect_value, "p", value_alteration_lcopy_value };
+ static const GTypeInfo g_define_type_info = { sizeof (AlterationClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) alteration_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (Alteration), 0, (GInstanceInitFunc) alteration_instance_init, &g_define_type_value_table };
+ static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
+ GType alteration_type_id;
+ alteration_type_id = g_type_register_fundamental (g_type_fundamental_next (), "Alteration", &g_define_type_info, &g_define_type_fundamental_info, 0);
+ g_once_init_leave (&alteration_type_id__volatile, alteration_type_id);
+ }
+ return alteration_type_id__volatile;
+}
+
+
+gpointer alteration_ref (gpointer instance) {
+ Alteration* self;
+ self = instance;
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_atomic_int_inc (&self->ref_count);
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ return instance;
+#line 2871 "Alteration.c"
+}
+
+
+void alteration_unref (gpointer instance) {
+ Alteration* self;
+ self = instance;
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ if (g_atomic_int_dec_and_test (&self->ref_count)) {
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ ALTERATION_GET_CLASS (self)->finalize (self);
+#line 27 "/home/jens/Source/shotwell/src/core/Alteration.vala"
+ g_type_free_instance ((GTypeInstance *) self);
+#line 2884 "Alteration.c"
+ }
+}
+
+
+static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func) {
+ if ((array != NULL) && (destroy_func != NULL)) {
+ int i;
+ for (i = 0; i < array_length; i = i + 1) {
+ if (((gpointer*) array)[i] != NULL) {
+ destroy_func (((gpointer*) array)[i]);
+ }
+ }
+ }
+}
+
+
+static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func) {
+ _vala_array_destroy (array, array_length, destroy_func);
+ g_free (array);
+}
+
+
+static gint _vala_array_length (gpointer array) {
+ int length;
+ length = 0;
+ if (array) {
+ while (((gpointer*) array)[length]) {
+ length++;
+ }
+ }
+ return length;
+}
+
+
+
diff --git a/src/core/ContainerSourceCollection.c b/src/core/ContainerSourceCollection.c
new file mode 100644
index 0000000..2e98ee8
--- /dev/null
+++ b/src/core/ContainerSourceCollection.c
@@ -0,0 +1,2124 @@
+/* ContainerSourceCollection.c generated by valac 0.32.1, the Vala compiler
+ * generated from ContainerSourceCollection.vala, do not modify */
+
+/* Copyright 2016 Software Freedom Conservancy Inc.
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later). See the COPYING file in this distribution.
+ */
+/* A ContainerSourceCollection is for DataSources which maintain links to one or more other*/
+/* DataSources, assumed to be of a different type. ContainerSourceCollection automates the task*/
+/* of handling unlinking and relinking and maintaining backlinks. Unlinked DataSources are*/
+/* held in a holding tank, until they are either relinked or destroyed.*/
+/**/
+/* If the ContainerSourceCollection's DataSources are types that "evaporate" (i.e. they disappear*/
+/* when they hold no items), they should use the evaporate() method, which will either destroy*/
+/* the DataSource or hold it in the tank (if backlinks are outstanding).*/
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gee.h>
+
+
+#define TYPE_DATA_COLLECTION (data_collection_get_type ())
+#define DATA_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_COLLECTION, DataCollection))
+#define DATA_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_COLLECTION, DataCollectionClass))
+#define IS_DATA_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_COLLECTION))
+#define IS_DATA_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_COLLECTION))
+#define DATA_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_COLLECTION, DataCollectionClass))
+
+typedef struct _DataCollection DataCollection;
+typedef struct _DataCollectionClass DataCollectionClass;
+typedef struct _DataCollectionPrivate DataCollectionPrivate;
+
+#define TYPE_DATA_OBJECT (data_object_get_type ())
+#define DATA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_OBJECT, DataObject))
+#define DATA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_OBJECT, DataObjectClass))
+#define IS_DATA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_OBJECT))
+#define IS_DATA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_OBJECT))
+#define DATA_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_OBJECT, DataObjectClass))
+
+typedef struct _DataObject DataObject;
+typedef struct _DataObjectClass DataObjectClass;
+
+#define TYPE_ALTERATION (alteration_get_type ())
+#define ALTERATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ALTERATION, Alteration))
+#define ALTERATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ALTERATION, AlterationClass))
+#define IS_ALTERATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ALTERATION))
+#define IS_ALTERATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ALTERATION))
+#define ALTERATION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ALTERATION, AlterationClass))
+
+typedef struct _Alteration Alteration;
+typedef struct _AlterationClass AlterationClass;
+
+#define TYPE_MARKER (marker_get_type ())
+#define MARKER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_MARKER, Marker))
+#define IS_MARKER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_MARKER))
+#define MARKER_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TYPE_MARKER, MarkerIface))
+
+typedef struct _Marker Marker;
+typedef struct _MarkerIface MarkerIface;
+
+#define TYPE_SOURCE_COLLECTION (source_collection_get_type ())
+#define SOURCE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SOURCE_COLLECTION, SourceCollection))
+#define SOURCE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SOURCE_COLLECTION, SourceCollectionClass))
+#define IS_SOURCE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SOURCE_COLLECTION))
+#define IS_SOURCE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SOURCE_COLLECTION))
+#define SOURCE_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SOURCE_COLLECTION, SourceCollectionClass))
+
+typedef struct _SourceCollection SourceCollection;
+typedef struct _SourceCollectionClass SourceCollectionClass;
+typedef struct _SourceCollectionPrivate SourceCollectionPrivate;
+
+#define TYPE_DATA_SOURCE (data_source_get_type ())
+#define DATA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_SOURCE, DataSource))
+#define DATA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_SOURCE, DataSourceClass))
+#define IS_DATA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_SOURCE))
+#define IS_DATA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_SOURCE))
+#define DATA_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_SOURCE, DataSourceClass))
+
+typedef struct _DataSource DataSource;
+typedef struct _DataSourceClass DataSourceClass;
+
+#define TYPE_SOURCE_BACKLINK (source_backlink_get_type ())
+#define SOURCE_BACKLINK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SOURCE_BACKLINK, SourceBacklink))
+#define SOURCE_BACKLINK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SOURCE_BACKLINK, SourceBacklinkClass))
+#define IS_SOURCE_BACKLINK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SOURCE_BACKLINK))
+#define IS_SOURCE_BACKLINK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SOURCE_BACKLINK))
+#define SOURCE_BACKLINK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SOURCE_BACKLINK, SourceBacklinkClass))
+
+typedef struct _SourceBacklink SourceBacklink;
+typedef struct _SourceBacklinkClass SourceBacklinkClass;
+
+#define TYPE_DATABASE_SOURCE_COLLECTION (database_source_collection_get_type ())
+#define DATABASE_SOURCE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATABASE_SOURCE_COLLECTION, DatabaseSourceCollection))
+#define DATABASE_SOURCE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATABASE_SOURCE_COLLECTION, DatabaseSourceCollectionClass))
+#define IS_DATABASE_SOURCE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATABASE_SOURCE_COLLECTION))
+#define IS_DATABASE_SOURCE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATABASE_SOURCE_COLLECTION))
+#define DATABASE_SOURCE_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATABASE_SOURCE_COLLECTION, DatabaseSourceCollectionClass))
+
+typedef struct _DatabaseSourceCollection DatabaseSourceCollection;
+typedef struct _DatabaseSourceCollectionClass DatabaseSourceCollectionClass;
+typedef struct _DatabaseSourceCollectionPrivate DatabaseSourceCollectionPrivate;
+
+#define TYPE_CONTAINER_SOURCE_COLLECTION (container_source_collection_get_type ())
+#define CONTAINER_SOURCE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_CONTAINER_SOURCE_COLLECTION, ContainerSourceCollection))
+#define CONTAINER_SOURCE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_CONTAINER_SOURCE_COLLECTION, ContainerSourceCollectionClass))
+#define IS_CONTAINER_SOURCE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_CONTAINER_SOURCE_COLLECTION))
+#define IS_CONTAINER_SOURCE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_CONTAINER_SOURCE_COLLECTION))
+#define CONTAINER_SOURCE_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_CONTAINER_SOURCE_COLLECTION, ContainerSourceCollectionClass))
+
+typedef struct _ContainerSourceCollection ContainerSourceCollection;
+typedef struct _ContainerSourceCollectionClass ContainerSourceCollectionClass;
+typedef struct _ContainerSourceCollectionPrivate ContainerSourceCollectionPrivate;
+
+#define TYPE_CONTAINER_SOURCE (container_source_get_type ())
+#define CONTAINER_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_CONTAINER_SOURCE, ContainerSource))
+#define IS_CONTAINER_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_CONTAINER_SOURCE))
+#define CONTAINER_SOURCE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TYPE_CONTAINER_SOURCE, ContainerSourceIface))
+
+typedef struct _ContainerSource ContainerSource;
+typedef struct _ContainerSourceIface ContainerSourceIface;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _g_free0(var) (var = (g_free (var), NULL))
+#define _data_collection_unref0(var) ((var == NULL) ? NULL : (var = (data_collection_unref (var), NULL)))
+#define _source_backlink_unref0(var) ((var == NULL) ? NULL : (var = (source_backlink_unref (var), NULL)))
+
+#define TYPE_TAG (tag_get_type ())
+#define TAG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_TAG, Tag))
+#define TAG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_TAG, TagClass))
+#define IS_TAG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_TAG))
+#define IS_TAG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_TAG))
+#define TAG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_TAG, TagClass))
+
+typedef struct _Tag Tag;
+typedef struct _TagClass TagClass;
+
+#define TYPE_THUMBNAIL_SOURCE (thumbnail_source_get_type ())
+#define THUMBNAIL_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_THUMBNAIL_SOURCE, ThumbnailSource))
+#define THUMBNAIL_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_THUMBNAIL_SOURCE, ThumbnailSourceClass))
+#define IS_THUMBNAIL_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_THUMBNAIL_SOURCE))
+#define IS_THUMBNAIL_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_THUMBNAIL_SOURCE))
+#define THUMBNAIL_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_THUMBNAIL_SOURCE, ThumbnailSourceClass))
+
+typedef struct _ThumbnailSource ThumbnailSource;
+typedef struct _ThumbnailSourceClass ThumbnailSourceClass;
+
+#define TYPE_MEDIA_SOURCE (media_source_get_type ())
+#define MEDIA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_MEDIA_SOURCE, MediaSource))
+#define MEDIA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_MEDIA_SOURCE, MediaSourceClass))
+#define IS_MEDIA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_MEDIA_SOURCE))
+#define IS_MEDIA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_MEDIA_SOURCE))
+#define MEDIA_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_MEDIA_SOURCE, MediaSourceClass))
+
+typedef struct _MediaSource MediaSource;
+typedef struct _MediaSourceClass MediaSourceClass;
+#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
+#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
+#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+
+typedef gint64 (*Comparator) (void* a, void* b, void* user_data);
+typedef gboolean (*ComparatorPredicate) (DataObject* object, Alteration* alteration, void* user_data);
+typedef gboolean (*ProgressMonitor) (guint64 current, guint64 total, gboolean do_event_loop, void* user_data);
+struct _MarkerIface {
+ GTypeInterface parent_iface;
+ void (*mark) (Marker* self, DataObject* object);
+ void (*unmark) (Marker* self, DataObject* object);
+ gboolean (*toggle) (Marker* self, DataObject* object);
+ void (*mark_many) (Marker* self, GeeCollection* list);
+ void (*unmark_many) (Marker* self, GeeCollection* list);
+ void (*mark_all) (Marker* self);
+ gint (*get_count) (Marker* self);
+ GeeCollection* (*get_all) (Marker* self);
+};
+
+struct _DataCollection {
+ GTypeInstance parent_instance;
+ volatile int ref_count;
+ DataCollectionPrivate * priv;
+};
+
+struct _DataCollectionClass {
+ GTypeClass parent_class;
+ void (*finalize) (DataCollection *self);
+ gchar* (*to_string) (DataCollection* self);
+ void (*notify_items_added) (DataCollection* self, GeeIterable* added);
+ void (*notify_items_removed) (DataCollection* self, GeeIterable* removed);
+ void (*notify_contents_altered) (DataCollection* self, GeeIterable* added, GeeIterable* removed);
+ void (*notify_items_altered) (DataCollection* self, GeeMap* items);
+ void (*notify_ordering_changed) (DataCollection* self);
+ void (*notify_property_set) (DataCollection* self, const gchar* name, GValue* old, GValue* val);
+ void (*notify_property_cleared) (DataCollection* self, const gchar* name);
+ gboolean (*valid_type) (DataCollection* self, DataObject* object);
+ void (*set_comparator) (DataCollection* self, Comparator comparator, void* comparator_target, ComparatorPredicate predicate, void* predicate_target);
+ void (*reset_comparator) (DataCollection* self);
+ GeeCollection* (*get_all) (DataCollection* self);
+ gint (*get_count) (DataCollection* self);
+ DataObject* (*get_at) (DataCollection* self, gint index);
+ gint (*index_of) (DataCollection* self, DataObject* object);
+ gboolean (*contains) (DataCollection* self, DataObject* object);
+ gboolean (*add) (DataCollection* self, DataObject* object);
+ GeeCollection* (*add_many) (DataCollection* self, GeeCollection* objects, ProgressMonitor monitor, void* monitor_target);
+ void (*remove_marked) (DataCollection* self, Marker* m);
+ void (*clear) (DataCollection* self);
+ void (*close) (DataCollection* self);
+ void (*notify_frozen) (DataCollection* self);
+ void (*notify_thawed) (DataCollection* self);
+ void (*items_added) (DataCollection* self, GeeIterable* added);
+ void (*items_removed) (DataCollection* self, GeeIterable* removed);
+ void (*contents_altered) (DataCollection* self, GeeIterable* added, GeeIterable* removed);
+ void (*items_altered) (DataCollection* self, GeeMap* items);
+ void (*ordering_changed) (DataCollection* self);
+ void (*property_set) (DataCollection* self, const gchar* name, GValue* old, GValue* val);
+ void (*property_cleared) (DataCollection* self, const gchar* name);
+ void (*frozen) (DataCollection* self);
+ void (*thawed) (DataCollection* self);
+};
+
+struct _SourceCollection {
+ DataCollection parent_instance;
+ SourceCollectionPrivate * priv;
+};
+
+struct _SourceCollectionClass {
+ DataCollectionClass parent_class;
+ gboolean (*holds_type_of_source) (SourceCollection* self, DataSource* source);
+ void (*notify_items_unlinking) (SourceCollection* self, GeeCollection* unlinking);
+ void (*notify_items_relinked) (SourceCollection* self, GeeCollection* relinked);
+ void (*notify_item_destroyed) (SourceCollection* self, DataSource* source);
+ void (*notify_items_destroyed) (SourceCollection* self, GeeCollection* destroyed);
+ void (*notify_unlinked_destroyed) (SourceCollection* self, DataSource* unlinked);
+ void (*notify_backlink_removed) (SourceCollection* self, SourceBacklink* backlink, GeeCollection* sources);
+ gboolean (*has_backlink) (SourceCollection* self, SourceBacklink* backlink);
+ void (*remove_backlink) (SourceCollection* self, SourceBacklink* backlink);
+ void (*items_unlinking) (SourceCollection* self, GeeCollection* unlinking);
+ void (*items_relinked) (SourceCollection* self, GeeCollection* relinked);
+ void (*item_destroyed) (SourceCollection* self, DataSource* source);
+ void (*items_destroyed) (SourceCollection* self, GeeCollection* destroyed);
+ void (*unlinked_destroyed) (SourceCollection* self, DataSource* source);
+ void (*backlink_removed) (SourceCollection* self, SourceBacklink* backlink, GeeCollection* sources);
+};
+
+struct _DatabaseSourceCollection {
+ SourceCollection parent_instance;
+ DatabaseSourceCollectionPrivate * priv;
+};
+
+struct _DatabaseSourceCollectionClass {
+ SourceCollectionClass parent_class;
+};
+
+struct _ContainerSourceIface {
+ GTypeInterface parent_iface;
+ gboolean (*has_links) (ContainerSource* self);
+ SourceBacklink* (*get_backlink) (ContainerSource* self);
+ void (*break_link) (ContainerSource* self, DataSource* source);
+ void (*break_link_many) (ContainerSource* self, GeeCollection* sources);
+ void (*establish_link) (ContainerSource* self, DataSource* source);
+ void (*establish_link_many) (ContainerSource* self, GeeCollection* sources);
+};
+
+struct _ContainerSourceCollection {
+ DatabaseSourceCollection parent_instance;
+ ContainerSourceCollectionPrivate * priv;
+};
+
+struct _ContainerSourceCollectionClass {
+ DatabaseSourceCollectionClass parent_class;
+ void (*notify_container_contents_added) (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* added, gboolean relinked);
+ void (*notify_container_contents_removed) (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* removed, gboolean unlinked);
+ void (*notify_container_contents_altered) (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* added, gboolean relinked, GeeCollection* removed, gboolean unlinked);
+ void (*notify_backlink_to_container_removed) (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* sources);
+ GeeCollection* (*get_containers_holding_source) (ContainerSourceCollection* self, DataSource* source);
+ ContainerSource* (*convert_backlink_to_container) (ContainerSourceCollection* self, SourceBacklink* backlink);
+ void (*container_contents_added) (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* added, gboolean relinked);
+ void (*container_contents_removed) (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* removed, gboolean unlinked);
+ void (*container_contents_altered) (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* added, gboolean relinked, GeeCollection* removed, gboolean unlinked);
+ void (*backlink_to_container_removed) (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* sources);
+};
+
+struct _ContainerSourceCollectionPrivate {
+ GeeHashSet* attached_collections;
+ gchar* backlink_name;
+ GeeHashSet* holding_tank;
+};
+
+typedef gint64 (*GetSourceDatabaseKey) (DataSource* source, void* user_data);
+
+static gpointer container_source_collection_parent_class = NULL;
+
+gpointer data_collection_ref (gpointer instance);
+void data_collection_unref (gpointer instance);
+GParamSpec* param_spec_data_collection (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_data_collection (GValue* value, gpointer v_object);
+void value_take_data_collection (GValue* value, gpointer v_object);
+gpointer value_get_data_collection (const GValue* value);
+GType data_collection_get_type (void) G_GNUC_CONST;
+GType data_object_get_type (void) G_GNUC_CONST;
+gpointer alteration_ref (gpointer instance);
+void alteration_unref (gpointer instance);
+GParamSpec* param_spec_alteration (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_alteration (GValue* value, gpointer v_object);
+void value_take_alteration (GValue* value, gpointer v_object);
+gpointer value_get_alteration (const GValue* value);
+GType alteration_get_type (void) G_GNUC_CONST;
+GType marker_get_type (void) G_GNUC_CONST;
+GType source_collection_get_type (void) G_GNUC_CONST;
+GType data_source_get_type (void) G_GNUC_CONST;
+gpointer source_backlink_ref (gpointer instance);
+void source_backlink_unref (gpointer instance);
+GParamSpec* param_spec_source_backlink (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_source_backlink (GValue* value, gpointer v_object);
+void value_take_source_backlink (GValue* value, gpointer v_object);
+gpointer value_get_source_backlink (const GValue* value);
+GType source_backlink_get_type (void) G_GNUC_CONST;
+GType database_source_collection_get_type (void) G_GNUC_CONST;
+GType container_source_collection_get_type (void) G_GNUC_CONST;
+GType container_source_get_type (void) G_GNUC_CONST;
+#define CONTAINER_SOURCE_COLLECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_CONTAINER_SOURCE_COLLECTION, ContainerSourceCollectionPrivate))
+enum {
+ CONTAINER_SOURCE_COLLECTION_DUMMY_PROPERTY
+};
+void container_source_collection_detach_all_collections (ContainerSourceCollection* self);
+ContainerSourceCollection* container_source_collection_construct (GType object_type, const gchar* backlink_name, const gchar* name, GetSourceDatabaseKey source_key_func, void* source_key_func_target);
+DatabaseSourceCollection* database_source_collection_construct (GType object_type, const gchar* name, GetSourceDatabaseKey source_key_func, void* source_key_func_target);
+static void container_source_collection_real_notify_backlink_removed (SourceCollection* base, SourceBacklink* backlink, GeeCollection* sources);
+void source_collection_notify_backlink_removed (SourceCollection* self, SourceBacklink* backlink, GeeCollection* sources);
+ContainerSource* container_source_collection_convert_backlink_to_container (ContainerSourceCollection* self, SourceBacklink* backlink);
+void container_source_collection_notify_backlink_to_container_removed (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* sources);
+void container_source_collection_notify_container_contents_added (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* added, gboolean relinked);
+static void container_source_collection_real_notify_container_contents_added (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* added, gboolean relinked);
+void source_collection_relink (SourceCollection* self, DataSource* source);
+void container_source_collection_notify_container_contents_removed (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* removed, gboolean unlinked);
+static void container_source_collection_real_notify_container_contents_removed (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* removed, gboolean unlinked);
+void container_source_collection_notify_container_contents_altered (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* added, gboolean relinked, GeeCollection* removed, gboolean unlinked);
+static void container_source_collection_real_notify_container_contents_altered (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* added, gboolean relinked, GeeCollection* removed, gboolean unlinked);
+static void container_source_collection_real_notify_backlink_to_container_removed (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* sources);
+GeeCollection* container_source_collection_get_containers_holding_source (ContainerSourceCollection* self, DataSource* source);
+static GeeCollection* container_source_collection_real_get_containers_holding_source (ContainerSourceCollection* self, DataSource* source);
+static ContainerSource* container_source_collection_real_convert_backlink_to_container (ContainerSourceCollection* self, SourceBacklink* backlink);
+void container_source_collection_freeze_attached_notifications (ContainerSourceCollection* self);
+void data_collection_freeze_notifications (DataCollection* self);
+void container_source_collection_thaw_attached_notifications (ContainerSourceCollection* self);
+void data_collection_thaw_notifications (DataCollection* self);
+GeeCollection* container_source_collection_get_holding_tank (ContainerSourceCollection* self);
+void container_source_collection_init_add_unlinked (ContainerSourceCollection* self, ContainerSource* unlinked);
+void container_source_collection_init_add_many_unlinked (ContainerSourceCollection* self, GeeCollection* unlinked);
+gboolean container_source_collection_relink_from_holding_tank (ContainerSourceCollection* self, ContainerSource* source);
+static void container_source_collection_on_contained_sources_unlinking (ContainerSourceCollection* self, GeeCollection* unlinking);
+void data_source_set_backlink (DataSource* self, SourceBacklink* backlink);
+SourceBacklink* container_source_get_backlink (ContainerSource* self);
+void container_source_break_link_many (ContainerSource* self, GeeCollection* sources);
+static void container_source_collection_on_contained_sources_relinked (ContainerSourceCollection* self, GeeCollection* relinked);
+GeeList* data_source_get_backlinks (DataSource* self, const gchar* name);
+gchar* data_object_to_string (DataObject* self);
+gchar* source_backlink_to_string (SourceBacklink* self);
+void container_source_establish_link_many (ContainerSource* self, GeeCollection* sources);
+static void container_source_collection_on_contained_source_destroyed (ContainerSourceCollection* self, DataSource* source);
+gboolean container_source_has_links (ContainerSource* self);
+GType tag_get_type (void) G_GNUC_CONST;
+gboolean data_source_destroy_orphan (DataSource* self, gboolean delete_backing);
+static void container_source_collection_real_notify_item_destroyed (SourceCollection* base, DataSource* source);
+void source_collection_remove_backlink (SourceCollection* self, SourceBacklink* backlink);
+void source_collection_notify_item_destroyed (SourceCollection* self, DataSource* source);
+void container_source_collection_evaporate (ContainerSourceCollection* self, ContainerSource* container);
+gboolean source_collection_has_backlink (SourceCollection* self, SourceBacklink* backlink);
+GeeCollection* source_collection_unlink_marked (SourceCollection* self, Marker* marker, ProgressMonitor monitor, void* monitor_target);
+Marker* data_collection_mark (DataCollection* self, DataObject* object);
+GType thumbnail_source_get_type (void) G_GNUC_CONST;
+GType media_source_get_type (void) G_GNUC_CONST;
+gint source_collection_destroy_marked (SourceCollection* self, Marker* marker, gboolean delete_backing, ProgressMonitor monitor, void* monitor_target, GeeList* not_removed);
+void container_source_collection_attach_collection (ContainerSourceCollection* self, SourceCollection* collection);
+gchar* data_collection_to_string (DataCollection* self);
+static void _container_source_collection_on_contained_sources_unlinking_source_collection_items_unlinking (SourceCollection* _sender, GeeCollection* unlinking, gpointer self);
+static void _container_source_collection_on_contained_sources_relinked_source_collection_items_relinked (SourceCollection* _sender, GeeCollection* relinked, gpointer self);
+static void _container_source_collection_on_contained_source_destroyed_source_collection_item_destroyed (SourceCollection* _sender, DataSource* source, gpointer self);
+static void _container_source_collection_on_contained_source_destroyed_source_collection_unlinked_destroyed (SourceCollection* _sender, DataSource* source, gpointer self);
+static void container_source_collection_real_container_contents_added (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* added, gboolean relinked);
+static void g_cclosure_user_marshal_VOID__OBJECT_OBJECT_BOOLEAN (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data);
+static void container_source_collection_real_container_contents_removed (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* removed, gboolean unlinked);
+static void container_source_collection_real_container_contents_altered (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* added, gboolean relinked, GeeCollection* removed, gboolean unlinked);
+static void g_cclosure_user_marshal_VOID__OBJECT_OBJECT_BOOLEAN_OBJECT_BOOLEAN (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data);
+static void container_source_collection_real_backlink_to_container_removed (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* sources);
+static void g_cclosure_user_marshal_VOID__OBJECT_OBJECT (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data);
+static void container_source_collection_finalize (DataCollection* obj);
+
+
+ContainerSourceCollection* container_source_collection_construct (GType object_type, const gchar* backlink_name, const gchar* name, GetSourceDatabaseKey source_key_func, void* source_key_func_target) {
+ ContainerSourceCollection* self = NULL;
+ const gchar* _tmp0_ = NULL;
+ GetSourceDatabaseKey _tmp1_ = NULL;
+ void* _tmp1__target = NULL;
+ const gchar* _tmp2_ = NULL;
+ gchar* _tmp3_ = NULL;
+#line 37 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_val_if_fail (backlink_name != NULL, NULL);
+#line 37 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_val_if_fail (name != NULL, NULL);
+#line 39 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp0_ = name;
+#line 39 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp1_ = source_key_func;
+#line 39 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp1__target = source_key_func_target;
+#line 39 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ self = (ContainerSourceCollection*) database_source_collection_construct (object_type, _tmp0_, _tmp1_, _tmp1__target);
+#line 41 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp2_ = backlink_name;
+#line 41 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp3_ = g_strdup (_tmp2_);
+#line 41 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_free0 (self->priv->backlink_name);
+#line 41 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ self->priv->backlink_name = _tmp3_;
+#line 37 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ return self;
+#line 420 "ContainerSourceCollection.c"
+}
+
+
+static void container_source_collection_real_notify_backlink_removed (SourceCollection* base, SourceBacklink* backlink, GeeCollection* sources) {
+ ContainerSourceCollection * self;
+ SourceBacklink* _tmp0_ = NULL;
+ GeeCollection* _tmp1_ = NULL;
+ ContainerSource* container = NULL;
+ SourceBacklink* _tmp2_ = NULL;
+ ContainerSource* _tmp3_ = NULL;
+ ContainerSource* _tmp4_ = NULL;
+#line 48 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_CONTAINER_SOURCE_COLLECTION, ContainerSourceCollection);
+#line 48 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (IS_SOURCE_BACKLINK (backlink));
+#line 48 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (sources));
+#line 50 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp0_ = backlink;
+#line 50 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp1_ = sources;
+#line 50 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ SOURCE_COLLECTION_CLASS (container_source_collection_parent_class)->notify_backlink_removed (G_TYPE_CHECK_INSTANCE_CAST (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATABASE_SOURCE_COLLECTION, DatabaseSourceCollection), TYPE_SOURCE_COLLECTION, SourceCollection), _tmp0_, _tmp1_);
+#line 52 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp2_ = backlink;
+#line 52 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp3_ = container_source_collection_convert_backlink_to_container (self, _tmp2_);
+#line 52 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ container = _tmp3_;
+#line 53 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp4_ = container;
+#line 53 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ if (_tmp4_ != NULL) {
+#line 454 "ContainerSourceCollection.c"
+ ContainerSource* _tmp5_ = NULL;
+ GeeCollection* _tmp6_ = NULL;
+#line 54 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp5_ = container;
+#line 54 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp6_ = sources;
+#line 54 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ container_source_collection_notify_backlink_to_container_removed (self, _tmp5_, _tmp6_);
+#line 463 "ContainerSourceCollection.c"
+ }
+#line 48 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (container);
+#line 467 "ContainerSourceCollection.c"
+}
+
+
+static void container_source_collection_real_notify_container_contents_added (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* added, gboolean relinked) {
+ GeeHashSet* _tmp0_ = NULL;
+ ContainerSource* _tmp1_ = NULL;
+ gboolean _tmp2_ = FALSE;
+ ContainerSource* _tmp8_ = NULL;
+ GeeCollection* _tmp9_ = NULL;
+ gboolean _tmp10_ = FALSE;
+#line 57 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (IS_CONTAINER_SOURCE (container));
+#line 57 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (added));
+#line 60 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp0_ = self->priv->holding_tank;
+#line 60 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp1_ = container;
+#line 60 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp2_ = gee_abstract_collection_contains (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp1_);
+#line 60 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ if (_tmp2_) {
+#line 490 "ContainerSourceCollection.c"
+ gboolean removed = FALSE;
+ GeeHashSet* _tmp3_ = NULL;
+ ContainerSource* _tmp4_ = NULL;
+ gboolean _tmp5_ = FALSE;
+ gboolean _tmp6_ = FALSE;
+ ContainerSource* _tmp7_ = NULL;
+#line 61 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp3_ = self->priv->holding_tank;
+#line 61 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp4_ = container;
+#line 61 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp5_ = gee_abstract_collection_remove (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp4_);
+#line 61 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ removed = _tmp5_;
+#line 62 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp6_ = removed;
+#line 62 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _vala_assert (_tmp6_, "removed");
+#line 64 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp7_ = container;
+#line 64 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ source_collection_relink (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_SOURCE_COLLECTION, SourceCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, TYPE_DATA_SOURCE, DataSource));
+#line 513 "ContainerSourceCollection.c"
+ }
+#line 67 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp8_ = container;
+#line 67 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp9_ = added;
+#line 67 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp10_ = relinked;
+#line 67 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_signal_emit_by_name (self, "container-contents-added", _tmp8_, _tmp9_, _tmp10_);
+#line 523 "ContainerSourceCollection.c"
+}
+
+
+void container_source_collection_notify_container_contents_added (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* added, gboolean relinked) {
+#line 57 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (IS_CONTAINER_SOURCE_COLLECTION (self));
+#line 57 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ CONTAINER_SOURCE_COLLECTION_GET_CLASS (self)->notify_container_contents_added (self, container, added, relinked);
+#line 532 "ContainerSourceCollection.c"
+}
+
+
+static void container_source_collection_real_notify_container_contents_removed (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* removed, gboolean unlinked) {
+ ContainerSource* _tmp0_ = NULL;
+ GeeCollection* _tmp1_ = NULL;
+ gboolean _tmp2_ = FALSE;
+#line 70 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (IS_CONTAINER_SOURCE (container));
+#line 70 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (removed));
+#line 72 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp0_ = container;
+#line 72 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp1_ = removed;
+#line 72 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp2_ = unlinked;
+#line 72 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_signal_emit_by_name (self, "container-contents-removed", _tmp0_, _tmp1_, _tmp2_);
+#line 552 "ContainerSourceCollection.c"
+}
+
+
+void container_source_collection_notify_container_contents_removed (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* removed, gboolean unlinked) {
+#line 70 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (IS_CONTAINER_SOURCE_COLLECTION (self));
+#line 70 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ CONTAINER_SOURCE_COLLECTION_GET_CLASS (self)->notify_container_contents_removed (self, container, removed, unlinked);
+#line 561 "ContainerSourceCollection.c"
+}
+
+
+static void container_source_collection_real_notify_container_contents_altered (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* added, gboolean relinked, GeeCollection* removed, gboolean unlinked) {
+ ContainerSource* _tmp0_ = NULL;
+ GeeCollection* _tmp1_ = NULL;
+ gboolean _tmp2_ = FALSE;
+ GeeCollection* _tmp3_ = NULL;
+ gboolean _tmp4_ = FALSE;
+#line 75 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (IS_CONTAINER_SOURCE (container));
+#line 75 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail ((added == NULL) || GEE_IS_COLLECTION (added));
+#line 75 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail ((removed == NULL) || GEE_IS_COLLECTION (removed));
+#line 78 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp0_ = container;
+#line 78 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp1_ = added;
+#line 78 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp2_ = relinked;
+#line 78 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp3_ = removed;
+#line 78 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp4_ = unlinked;
+#line 78 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_signal_emit_by_name (self, "container-contents-altered", _tmp0_, _tmp1_, _tmp2_, _tmp3_, _tmp4_);
+#line 589 "ContainerSourceCollection.c"
+}
+
+
+void container_source_collection_notify_container_contents_altered (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* added, gboolean relinked, GeeCollection* removed, gboolean unlinked) {
+#line 75 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (IS_CONTAINER_SOURCE_COLLECTION (self));
+#line 75 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ CONTAINER_SOURCE_COLLECTION_GET_CLASS (self)->notify_container_contents_altered (self, container, added, relinked, removed, unlinked);
+#line 598 "ContainerSourceCollection.c"
+}
+
+
+static void container_source_collection_real_notify_backlink_to_container_removed (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* sources) {
+ ContainerSource* _tmp0_ = NULL;
+ GeeCollection* _tmp1_ = NULL;
+#line 81 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (IS_CONTAINER_SOURCE (container));
+#line 81 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (sources));
+#line 83 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp0_ = container;
+#line 83 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp1_ = sources;
+#line 83 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_signal_emit_by_name (self, "backlink-to-container-removed", _tmp0_, _tmp1_);
+#line 615 "ContainerSourceCollection.c"
+}
+
+
+void container_source_collection_notify_backlink_to_container_removed (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* sources) {
+#line 81 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (IS_CONTAINER_SOURCE_COLLECTION (self));
+#line 81 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ CONTAINER_SOURCE_COLLECTION_GET_CLASS (self)->notify_backlink_to_container_removed (self, container, sources);
+#line 624 "ContainerSourceCollection.c"
+}
+
+
+static GeeCollection* container_source_collection_real_get_containers_holding_source (ContainerSourceCollection* self, DataSource* source) {
+#line 86 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_critical ("Type `%s' does not implement abstract method `container_source_collection_get_containers_holding_source'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+#line 86 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ return NULL;
+#line 633 "ContainerSourceCollection.c"
+}
+
+
+GeeCollection* container_source_collection_get_containers_holding_source (ContainerSourceCollection* self, DataSource* source) {
+#line 86 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_val_if_fail (IS_CONTAINER_SOURCE_COLLECTION (self), NULL);
+#line 86 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ return CONTAINER_SOURCE_COLLECTION_GET_CLASS (self)->get_containers_holding_source (self, source);
+#line 642 "ContainerSourceCollection.c"
+}
+
+
+static ContainerSource* container_source_collection_real_convert_backlink_to_container (ContainerSourceCollection* self, SourceBacklink* backlink) {
+#line 89 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_critical ("Type `%s' does not implement abstract method `container_source_collection_convert_backlink_to_container'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+#line 89 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ return NULL;
+#line 651 "ContainerSourceCollection.c"
+}
+
+
+ContainerSource* container_source_collection_convert_backlink_to_container (ContainerSourceCollection* self, SourceBacklink* backlink) {
+#line 89 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_val_if_fail (IS_CONTAINER_SOURCE_COLLECTION (self), NULL);
+#line 89 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ return CONTAINER_SOURCE_COLLECTION_GET_CLASS (self)->convert_backlink_to_container (self, backlink);
+#line 660 "ContainerSourceCollection.c"
+}
+
+
+void container_source_collection_freeze_attached_notifications (ContainerSourceCollection* self) {
+#line 91 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (IS_CONTAINER_SOURCE_COLLECTION (self));
+#line 667 "ContainerSourceCollection.c"
+ {
+ GeeIterator* _collection_it = NULL;
+ GeeHashSet* _tmp0_ = NULL;
+ GeeIterator* _tmp1_ = NULL;
+#line 92 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp0_ = self->priv->attached_collections;
+#line 92 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp1_ = gee_abstract_collection_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection));
+#line 92 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _collection_it = _tmp1_;
+#line 92 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ while (TRUE) {
+#line 680 "ContainerSourceCollection.c"
+ GeeIterator* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+ SourceCollection* collection = NULL;
+ GeeIterator* _tmp4_ = NULL;
+ gpointer _tmp5_ = NULL;
+ SourceCollection* _tmp6_ = NULL;
+#line 92 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp2_ = _collection_it;
+#line 92 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp3_ = gee_iterator_next (_tmp2_);
+#line 92 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ if (!_tmp3_) {
+#line 92 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ break;
+#line 695 "ContainerSourceCollection.c"
+ }
+#line 92 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp4_ = _collection_it;
+#line 92 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp5_ = gee_iterator_get (_tmp4_);
+#line 92 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ collection = (SourceCollection*) _tmp5_;
+#line 93 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp6_ = collection;
+#line 93 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ data_collection_freeze_notifications (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, TYPE_DATA_COLLECTION, DataCollection));
+#line 92 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _data_collection_unref0 (collection);
+#line 709 "ContainerSourceCollection.c"
+ }
+#line 92 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (_collection_it);
+#line 713 "ContainerSourceCollection.c"
+ }
+}
+
+
+void container_source_collection_thaw_attached_notifications (ContainerSourceCollection* self) {
+#line 96 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (IS_CONTAINER_SOURCE_COLLECTION (self));
+#line 721 "ContainerSourceCollection.c"
+ {
+ GeeIterator* _collection_it = NULL;
+ GeeHashSet* _tmp0_ = NULL;
+ GeeIterator* _tmp1_ = NULL;
+#line 97 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp0_ = self->priv->attached_collections;
+#line 97 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp1_ = gee_abstract_collection_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection));
+#line 97 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _collection_it = _tmp1_;
+#line 97 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ while (TRUE) {
+#line 734 "ContainerSourceCollection.c"
+ GeeIterator* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+ SourceCollection* collection = NULL;
+ GeeIterator* _tmp4_ = NULL;
+ gpointer _tmp5_ = NULL;
+ SourceCollection* _tmp6_ = NULL;
+#line 97 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp2_ = _collection_it;
+#line 97 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp3_ = gee_iterator_next (_tmp2_);
+#line 97 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ if (!_tmp3_) {
+#line 97 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ break;
+#line 749 "ContainerSourceCollection.c"
+ }
+#line 97 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp4_ = _collection_it;
+#line 97 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp5_ = gee_iterator_get (_tmp4_);
+#line 97 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ collection = (SourceCollection*) _tmp5_;
+#line 98 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp6_ = collection;
+#line 98 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ data_collection_thaw_notifications (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, TYPE_DATA_COLLECTION, DataCollection));
+#line 97 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _data_collection_unref0 (collection);
+#line 763 "ContainerSourceCollection.c"
+ }
+#line 97 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (_collection_it);
+#line 767 "ContainerSourceCollection.c"
+ }
+}
+
+
+GeeCollection* container_source_collection_get_holding_tank (ContainerSourceCollection* self) {
+ GeeCollection* result = NULL;
+ GeeHashSet* _tmp0_ = NULL;
+ GeeSet* _tmp1_ = NULL;
+ GeeSet* _tmp2_ = NULL;
+#line 101 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_val_if_fail (IS_CONTAINER_SOURCE_COLLECTION (self), NULL);
+#line 102 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp0_ = self->priv->holding_tank;
+#line 102 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp1_ = gee_abstract_set_get_read_only_view (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_ABSTRACT_SET, GeeAbstractSet));
+#line 102 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp2_ = _tmp1_;
+#line 102 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, GEE_TYPE_COLLECTION, GeeCollection);
+#line 102 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ return result;
+#line 789 "ContainerSourceCollection.c"
+}
+
+
+void container_source_collection_init_add_unlinked (ContainerSourceCollection* self, ContainerSource* unlinked) {
+ GeeHashSet* _tmp0_ = NULL;
+ ContainerSource* _tmp1_ = NULL;
+#line 105 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (IS_CONTAINER_SOURCE_COLLECTION (self));
+#line 105 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (IS_CONTAINER_SOURCE (unlinked));
+#line 106 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp0_ = self->priv->holding_tank;
+#line 106 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp1_ = unlinked;
+#line 106 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp1_);
+#line 806 "ContainerSourceCollection.c"
+}
+
+
+void container_source_collection_init_add_many_unlinked (ContainerSourceCollection* self, GeeCollection* unlinked) {
+ GeeHashSet* _tmp0_ = NULL;
+ GeeCollection* _tmp1_ = NULL;
+#line 109 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (IS_CONTAINER_SOURCE_COLLECTION (self));
+#line 109 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (unlinked));
+#line 110 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp0_ = self->priv->holding_tank;
+#line 110 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp1_ = unlinked;
+#line 110 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ gee_collection_add_all (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_COLLECTION, GeeCollection), _tmp1_);
+#line 823 "ContainerSourceCollection.c"
+}
+
+
+gboolean container_source_collection_relink_from_holding_tank (ContainerSourceCollection* self, ContainerSource* source) {
+ gboolean result = FALSE;
+ GeeHashSet* _tmp0_ = NULL;
+ ContainerSource* _tmp1_ = NULL;
+ gboolean _tmp2_ = FALSE;
+ ContainerSource* _tmp3_ = NULL;
+#line 113 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_val_if_fail (IS_CONTAINER_SOURCE_COLLECTION (self), FALSE);
+#line 113 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_val_if_fail (IS_CONTAINER_SOURCE (source), FALSE);
+#line 114 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp0_ = self->priv->holding_tank;
+#line 114 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp1_ = source;
+#line 114 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp2_ = gee_abstract_collection_remove (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp1_);
+#line 114 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ if (!_tmp2_) {
+#line 115 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ result = FALSE;
+#line 115 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ return result;
+#line 849 "ContainerSourceCollection.c"
+ }
+#line 117 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp3_ = source;
+#line 117 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ source_collection_relink (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_SOURCE_COLLECTION, SourceCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, TYPE_DATA_SOURCE, DataSource));
+#line 119 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ result = TRUE;
+#line 119 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ return result;
+#line 859 "ContainerSourceCollection.c"
+}
+
+
+static void container_source_collection_on_contained_sources_unlinking (ContainerSourceCollection* self, GeeCollection* unlinking) {
+ GeeHashMultiMap* map = NULL;
+ GeeHashMultiMap* _tmp0_ = NULL;
+#line 122 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (IS_CONTAINER_SOURCE_COLLECTION (self));
+#line 122 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (unlinking));
+#line 123 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ container_source_collection_freeze_attached_notifications (self);
+#line 125 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp0_ = gee_hash_multi_map_new (TYPE_CONTAINER_SOURCE, (GBoxedCopyFunc) g_object_ref, g_object_unref, TYPE_DATA_SOURCE, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 125 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ map = _tmp0_;
+#line 876 "ContainerSourceCollection.c"
+ {
+ GeeIterator* _source_it = NULL;
+ GeeCollection* _tmp1_ = NULL;
+ GeeIterator* _tmp2_ = NULL;
+#line 128 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp1_ = unlinking;
+#line 128 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp2_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 128 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _source_it = _tmp2_;
+#line 128 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ while (TRUE) {
+#line 889 "ContainerSourceCollection.c"
+ GeeIterator* _tmp3_ = NULL;
+ gboolean _tmp4_ = FALSE;
+ DataSource* source = NULL;
+ GeeIterator* _tmp5_ = NULL;
+ gpointer _tmp6_ = NULL;
+ GeeCollection* containers = NULL;
+ DataSource* _tmp7_ = NULL;
+ GeeCollection* _tmp8_ = NULL;
+ gboolean _tmp9_ = FALSE;
+ GeeCollection* _tmp10_ = NULL;
+#line 128 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp3_ = _source_it;
+#line 128 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp4_ = gee_iterator_next (_tmp3_);
+#line 128 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ if (!_tmp4_) {
+#line 128 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ break;
+#line 908 "ContainerSourceCollection.c"
+ }
+#line 128 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp5_ = _source_it;
+#line 128 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp6_ = gee_iterator_get (_tmp5_);
+#line 128 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ source = (DataSource*) _tmp6_;
+#line 129 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp7_ = source;
+#line 129 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp8_ = container_source_collection_get_containers_holding_source (self, _tmp7_);
+#line 129 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ containers = _tmp8_;
+#line 130 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp10_ = containers;
+#line 130 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ if (_tmp10_ == NULL) {
+#line 130 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp9_ = TRUE;
+#line 928 "ContainerSourceCollection.c"
+ } else {
+ GeeCollection* _tmp11_ = NULL;
+ gint _tmp12_ = 0;
+ gint _tmp13_ = 0;
+#line 130 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp11_ = containers;
+#line 130 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp12_ = gee_collection_get_size (_tmp11_);
+#line 130 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp13_ = _tmp12_;
+#line 130 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp9_ = _tmp13_ == 0;
+#line 941 "ContainerSourceCollection.c"
+ }
+#line 130 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ if (_tmp9_) {
+#line 131 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (containers);
+#line 131 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (source);
+#line 131 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ continue;
+#line 951 "ContainerSourceCollection.c"
+ }
+ {
+ GeeIterator* _container_it = NULL;
+ GeeCollection* _tmp14_ = NULL;
+ GeeIterator* _tmp15_ = NULL;
+#line 133 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp14_ = containers;
+#line 133 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp15_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 133 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _container_it = _tmp15_;
+#line 133 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ while (TRUE) {
+#line 965 "ContainerSourceCollection.c"
+ GeeIterator* _tmp16_ = NULL;
+ gboolean _tmp17_ = FALSE;
+ ContainerSource* container = NULL;
+ GeeIterator* _tmp18_ = NULL;
+ gpointer _tmp19_ = NULL;
+ GeeHashMultiMap* _tmp20_ = NULL;
+ ContainerSource* _tmp21_ = NULL;
+ DataSource* _tmp22_ = NULL;
+ DataSource* _tmp23_ = NULL;
+ ContainerSource* _tmp24_ = NULL;
+ SourceBacklink* _tmp25_ = NULL;
+ SourceBacklink* _tmp26_ = NULL;
+#line 133 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp16_ = _container_it;
+#line 133 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp17_ = gee_iterator_next (_tmp16_);
+#line 133 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ if (!_tmp17_) {
+#line 133 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ break;
+#line 986 "ContainerSourceCollection.c"
+ }
+#line 133 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp18_ = _container_it;
+#line 133 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp19_ = gee_iterator_get (_tmp18_);
+#line 133 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ container = (ContainerSource*) _tmp19_;
+#line 134 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp20_ = map;
+#line 134 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp21_ = container;
+#line 134 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp22_ = source;
+#line 134 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ gee_multi_map_set (G_TYPE_CHECK_INSTANCE_CAST (_tmp20_, GEE_TYPE_MULTI_MAP, GeeMultiMap), _tmp21_, _tmp22_);
+#line 135 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp23_ = source;
+#line 135 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp24_ = container;
+#line 135 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp25_ = container_source_get_backlink (_tmp24_);
+#line 135 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp26_ = _tmp25_;
+#line 135 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ data_source_set_backlink (_tmp23_, _tmp26_);
+#line 135 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _source_backlink_unref0 (_tmp26_);
+#line 133 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (container);
+#line 1016 "ContainerSourceCollection.c"
+ }
+#line 133 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (_container_it);
+#line 1020 "ContainerSourceCollection.c"
+ }
+#line 128 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (containers);
+#line 128 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (source);
+#line 1026 "ContainerSourceCollection.c"
+ }
+#line 128 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (_source_it);
+#line 1030 "ContainerSourceCollection.c"
+ }
+ {
+ GeeIterator* _container_it = NULL;
+ GeeHashMultiMap* _tmp27_ = NULL;
+ GeeSet* _tmp28_ = NULL;
+ GeeSet* _tmp29_ = NULL;
+ GeeIterator* _tmp30_ = NULL;
+ GeeIterator* _tmp31_ = NULL;
+#line 139 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp27_ = map;
+#line 139 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp28_ = gee_multi_map_get_keys (G_TYPE_CHECK_INSTANCE_CAST (_tmp27_, GEE_TYPE_MULTI_MAP, GeeMultiMap));
+#line 139 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp29_ = _tmp28_;
+#line 139 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp30_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp29_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 139 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp31_ = _tmp30_;
+#line 139 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (_tmp29_);
+#line 139 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _container_it = _tmp31_;
+#line 139 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ while (TRUE) {
+#line 1055 "ContainerSourceCollection.c"
+ GeeIterator* _tmp32_ = NULL;
+ gboolean _tmp33_ = FALSE;
+ ContainerSource* container = NULL;
+ GeeIterator* _tmp34_ = NULL;
+ gpointer _tmp35_ = NULL;
+ ContainerSource* _tmp36_ = NULL;
+ GeeHashMultiMap* _tmp37_ = NULL;
+ ContainerSource* _tmp38_ = NULL;
+ GeeCollection* _tmp39_ = NULL;
+ GeeCollection* _tmp40_ = NULL;
+#line 139 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp32_ = _container_it;
+#line 139 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp33_ = gee_iterator_next (_tmp32_);
+#line 139 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ if (!_tmp33_) {
+#line 139 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ break;
+#line 1074 "ContainerSourceCollection.c"
+ }
+#line 139 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp34_ = _container_it;
+#line 139 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp35_ = gee_iterator_get (_tmp34_);
+#line 139 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ container = (ContainerSource*) _tmp35_;
+#line 140 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp36_ = container;
+#line 140 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp37_ = map;
+#line 140 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp38_ = container;
+#line 140 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp39_ = gee_multi_map_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp37_, GEE_TYPE_MULTI_MAP, GeeMultiMap), _tmp38_);
+#line 140 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp40_ = _tmp39_;
+#line 140 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ container_source_break_link_many (_tmp36_, _tmp40_);
+#line 140 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (_tmp40_);
+#line 139 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (container);
+#line 1098 "ContainerSourceCollection.c"
+ }
+#line 139 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (_container_it);
+#line 1102 "ContainerSourceCollection.c"
+ }
+#line 142 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ container_source_collection_thaw_attached_notifications (self);
+#line 122 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (map);
+#line 1108 "ContainerSourceCollection.c"
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+#line 156 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ return self ? g_object_ref (self) : NULL;
+#line 1115 "ContainerSourceCollection.c"
+}
+
+
+static void container_source_collection_on_contained_sources_relinked (ContainerSourceCollection* self, GeeCollection* relinked) {
+ GeeHashMultiMap* map = NULL;
+ GeeHashMultiMap* _tmp0_ = NULL;
+#line 145 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (IS_CONTAINER_SOURCE_COLLECTION (self));
+#line 145 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (relinked));
+#line 146 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ container_source_collection_freeze_attached_notifications (self);
+#line 148 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp0_ = gee_hash_multi_map_new (TYPE_CONTAINER_SOURCE, (GBoxedCopyFunc) g_object_ref, g_object_unref, TYPE_DATA_SOURCE, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 148 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ map = _tmp0_;
+#line 1132 "ContainerSourceCollection.c"
+ {
+ GeeIterator* _source_it = NULL;
+ GeeCollection* _tmp1_ = NULL;
+ GeeIterator* _tmp2_ = NULL;
+#line 151 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp1_ = relinked;
+#line 151 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp2_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 151 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _source_it = _tmp2_;
+#line 151 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ while (TRUE) {
+#line 1145 "ContainerSourceCollection.c"
+ GeeIterator* _tmp3_ = NULL;
+ gboolean _tmp4_ = FALSE;
+ DataSource* source = NULL;
+ GeeIterator* _tmp5_ = NULL;
+ gpointer _tmp6_ = NULL;
+ GeeList* backlinks = NULL;
+ DataSource* _tmp7_ = NULL;
+ const gchar* _tmp8_ = NULL;
+ GeeList* _tmp9_ = NULL;
+ gboolean _tmp10_ = FALSE;
+ GeeList* _tmp11_ = NULL;
+#line 151 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp3_ = _source_it;
+#line 151 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp4_ = gee_iterator_next (_tmp3_);
+#line 151 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ if (!_tmp4_) {
+#line 151 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ break;
+#line 1165 "ContainerSourceCollection.c"
+ }
+#line 151 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp5_ = _source_it;
+#line 151 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp6_ = gee_iterator_get (_tmp5_);
+#line 151 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ source = (DataSource*) _tmp6_;
+#line 152 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp7_ = source;
+#line 152 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp8_ = self->priv->backlink_name;
+#line 152 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp9_ = data_source_get_backlinks (_tmp7_, _tmp8_);
+#line 152 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ backlinks = _tmp9_;
+#line 153 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp11_ = backlinks;
+#line 153 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ if (_tmp11_ == NULL) {
+#line 153 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp10_ = TRUE;
+#line 1187 "ContainerSourceCollection.c"
+ } else {
+ GeeList* _tmp12_ = NULL;
+ gint _tmp13_ = 0;
+ gint _tmp14_ = 0;
+#line 153 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp12_ = backlinks;
+#line 153 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp13_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 153 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp14_ = _tmp13_;
+#line 153 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp10_ = _tmp14_ == 0;
+#line 1200 "ContainerSourceCollection.c"
+ }
+#line 153 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ if (_tmp10_) {
+#line 154 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (backlinks);
+#line 154 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (source);
+#line 154 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ continue;
+#line 1210 "ContainerSourceCollection.c"
+ }
+ {
+ GeeList* _backlink_list = NULL;
+ GeeList* _tmp15_ = NULL;
+ GeeList* _tmp16_ = NULL;
+ gint _backlink_size = 0;
+ GeeList* _tmp17_ = NULL;
+ gint _tmp18_ = 0;
+ gint _tmp19_ = 0;
+ gint _backlink_index = 0;
+#line 156 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp15_ = backlinks;
+#line 156 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp16_ = _g_object_ref0 (_tmp15_);
+#line 156 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _backlink_list = _tmp16_;
+#line 156 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp17_ = _backlink_list;
+#line 156 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp18_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp17_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 156 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp19_ = _tmp18_;
+#line 156 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _backlink_size = _tmp19_;
+#line 156 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _backlink_index = -1;
+#line 156 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ while (TRUE) {
+#line 1239 "ContainerSourceCollection.c"
+ gint _tmp20_ = 0;
+ gint _tmp21_ = 0;
+ gint _tmp22_ = 0;
+ SourceBacklink* backlink = NULL;
+ GeeList* _tmp23_ = NULL;
+ gint _tmp24_ = 0;
+ gpointer _tmp25_ = NULL;
+ ContainerSource* container = NULL;
+ SourceBacklink* _tmp26_ = NULL;
+ ContainerSource* _tmp27_ = NULL;
+ ContainerSource* _tmp28_ = NULL;
+#line 156 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp20_ = _backlink_index;
+#line 156 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _backlink_index = _tmp20_ + 1;
+#line 156 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp21_ = _backlink_index;
+#line 156 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp22_ = _backlink_size;
+#line 156 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ if (!(_tmp21_ < _tmp22_)) {
+#line 156 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ break;
+#line 1263 "ContainerSourceCollection.c"
+ }
+#line 156 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp23_ = _backlink_list;
+#line 156 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp24_ = _backlink_index;
+#line 156 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp25_ = gee_list_get (_tmp23_, _tmp24_);
+#line 156 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ backlink = (SourceBacklink*) _tmp25_;
+#line 157 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp26_ = backlink;
+#line 157 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp27_ = container_source_collection_convert_backlink_to_container (self, _tmp26_);
+#line 157 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ container = _tmp27_;
+#line 158 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp28_ = container;
+#line 158 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ if (_tmp28_ != NULL) {
+#line 1283 "ContainerSourceCollection.c"
+ GeeHashMultiMap* _tmp29_ = NULL;
+ ContainerSource* _tmp30_ = NULL;
+ DataSource* _tmp31_ = NULL;
+#line 159 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp29_ = map;
+#line 159 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp30_ = container;
+#line 159 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp31_ = source;
+#line 159 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ gee_multi_map_set (G_TYPE_CHECK_INSTANCE_CAST (_tmp29_, GEE_TYPE_MULTI_MAP, GeeMultiMap), _tmp30_, _tmp31_);
+#line 1295 "ContainerSourceCollection.c"
+ } else {
+ DataSource* _tmp32_ = NULL;
+ gchar* _tmp33_ = NULL;
+ gchar* _tmp34_ = NULL;
+ SourceBacklink* _tmp35_ = NULL;
+ gchar* _tmp36_ = NULL;
+ gchar* _tmp37_ = NULL;
+#line 161 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp32_ = source;
+#line 161 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp33_ = data_object_to_string (G_TYPE_CHECK_INSTANCE_CAST (_tmp32_, TYPE_DATA_OBJECT, DataObject));
+#line 161 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp34_ = _tmp33_;
+#line 161 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp35_ = backlink;
+#line 161 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp36_ = source_backlink_to_string (_tmp35_);
+#line 161 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp37_ = _tmp36_;
+#line 161 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_warning ("ContainerSourceCollection.vala:161: Unable to relink %s to container b" \
+"acklink %s", _tmp34_, _tmp37_);
+#line 161 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_free0 (_tmp37_);
+#line 161 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_free0 (_tmp34_);
+#line 1321 "ContainerSourceCollection.c"
+ }
+#line 156 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (container);
+#line 156 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _source_backlink_unref0 (backlink);
+#line 1327 "ContainerSourceCollection.c"
+ }
+#line 156 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (_backlink_list);
+#line 1331 "ContainerSourceCollection.c"
+ }
+#line 151 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (backlinks);
+#line 151 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (source);
+#line 1337 "ContainerSourceCollection.c"
+ }
+#line 151 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (_source_it);
+#line 1341 "ContainerSourceCollection.c"
+ }
+ {
+ GeeIterator* _container_it = NULL;
+ GeeHashMultiMap* _tmp38_ = NULL;
+ GeeSet* _tmp39_ = NULL;
+ GeeSet* _tmp40_ = NULL;
+ GeeIterator* _tmp41_ = NULL;
+ GeeIterator* _tmp42_ = NULL;
+#line 167 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp38_ = map;
+#line 167 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp39_ = gee_multi_map_get_keys (G_TYPE_CHECK_INSTANCE_CAST (_tmp38_, GEE_TYPE_MULTI_MAP, GeeMultiMap));
+#line 167 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp40_ = _tmp39_;
+#line 167 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp41_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp40_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 167 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp42_ = _tmp41_;
+#line 167 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (_tmp40_);
+#line 167 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _container_it = _tmp42_;
+#line 167 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ while (TRUE) {
+#line 1366 "ContainerSourceCollection.c"
+ GeeIterator* _tmp43_ = NULL;
+ gboolean _tmp44_ = FALSE;
+ ContainerSource* container = NULL;
+ GeeIterator* _tmp45_ = NULL;
+ gpointer _tmp46_ = NULL;
+ ContainerSource* _tmp47_ = NULL;
+ GeeHashMultiMap* _tmp48_ = NULL;
+ ContainerSource* _tmp49_ = NULL;
+ GeeCollection* _tmp50_ = NULL;
+ GeeCollection* _tmp51_ = NULL;
+#line 167 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp43_ = _container_it;
+#line 167 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp44_ = gee_iterator_next (_tmp43_);
+#line 167 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ if (!_tmp44_) {
+#line 167 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ break;
+#line 1385 "ContainerSourceCollection.c"
+ }
+#line 167 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp45_ = _container_it;
+#line 167 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp46_ = gee_iterator_get (_tmp45_);
+#line 167 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ container = (ContainerSource*) _tmp46_;
+#line 168 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp47_ = container;
+#line 168 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp48_ = map;
+#line 168 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp49_ = container;
+#line 168 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp50_ = gee_multi_map_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp48_, GEE_TYPE_MULTI_MAP, GeeMultiMap), _tmp49_);
+#line 168 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp51_ = _tmp50_;
+#line 168 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ container_source_establish_link_many (_tmp47_, _tmp51_);
+#line 168 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (_tmp51_);
+#line 167 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (container);
+#line 1409 "ContainerSourceCollection.c"
+ }
+#line 167 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (_container_it);
+#line 1413 "ContainerSourceCollection.c"
+ }
+#line 170 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ container_source_collection_thaw_attached_notifications (self);
+#line 145 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (map);
+#line 1419 "ContainerSourceCollection.c"
+}
+
+
+static void container_source_collection_on_contained_source_destroyed (ContainerSourceCollection* self, DataSource* source) {
+ GeeIterator* iter = NULL;
+ GeeHashSet* _tmp0_ = NULL;
+ GeeIterator* _tmp1_ = NULL;
+#line 173 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (IS_CONTAINER_SOURCE_COLLECTION (self));
+#line 173 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (IS_DATA_SOURCE (source));
+#line 174 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp0_ = self->priv->holding_tank;
+#line 174 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp1_ = gee_abstract_collection_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection));
+#line 174 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ iter = _tmp1_;
+#line 175 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ while (TRUE) {
+#line 1439 "ContainerSourceCollection.c"
+ GeeIterator* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+ ContainerSource* container = NULL;
+ GeeIterator* _tmp4_ = NULL;
+ gpointer _tmp5_ = NULL;
+ gboolean _tmp6_ = FALSE;
+ ContainerSource* _tmp7_ = NULL;
+ gboolean _tmp8_ = FALSE;
+#line 175 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp2_ = iter;
+#line 175 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp3_ = gee_iterator_next (_tmp2_);
+#line 175 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ if (!_tmp3_) {
+#line 175 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ break;
+#line 1456 "ContainerSourceCollection.c"
+ }
+#line 176 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp4_ = iter;
+#line 176 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp5_ = gee_iterator_get (_tmp4_);
+#line 176 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ container = (ContainerSource*) _tmp5_;
+#line 180 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp7_ = container;
+#line 180 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp8_ = container_source_has_links (_tmp7_);
+#line 180 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ if (!_tmp8_) {
+#line 1470 "ContainerSourceCollection.c"
+ ContainerSource* _tmp9_ = NULL;
+#line 180 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp9_ = container;
+#line 180 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp6_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp9_, TYPE_TAG);
+#line 1476 "ContainerSourceCollection.c"
+ } else {
+#line 180 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp6_ = FALSE;
+#line 1480 "ContainerSourceCollection.c"
+ }
+#line 180 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ if (_tmp6_) {
+#line 1484 "ContainerSourceCollection.c"
+ GeeIterator* _tmp10_ = NULL;
+ ContainerSource* _tmp11_ = NULL;
+#line 181 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp10_ = iter;
+#line 181 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ gee_iterator_remove (_tmp10_);
+#line 182 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp11_ = container;
+#line 182 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ data_source_destroy_orphan (G_TYPE_CHECK_INSTANCE_CAST (_tmp11_, TYPE_DATA_SOURCE, DataSource), TRUE);
+#line 1495 "ContainerSourceCollection.c"
+ }
+#line 175 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (container);
+#line 1499 "ContainerSourceCollection.c"
+ }
+#line 173 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (iter);
+#line 1503 "ContainerSourceCollection.c"
+}
+
+
+static void container_source_collection_real_notify_item_destroyed (SourceCollection* base, DataSource* source) {
+ ContainerSourceCollection * self;
+ DataSource* _tmp10_ = NULL;
+#line 187 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_CONTAINER_SOURCE_COLLECTION, ContainerSourceCollection);
+#line 187 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (IS_DATA_SOURCE (source));
+#line 1514 "ContainerSourceCollection.c"
+ {
+ GeeIterator* _collection_it = NULL;
+ GeeHashSet* _tmp0_ = NULL;
+ GeeIterator* _tmp1_ = NULL;
+#line 188 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp0_ = self->priv->attached_collections;
+#line 188 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp1_ = gee_abstract_collection_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection));
+#line 188 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _collection_it = _tmp1_;
+#line 188 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ while (TRUE) {
+#line 1527 "ContainerSourceCollection.c"
+ GeeIterator* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+ SourceCollection* collection = NULL;
+ GeeIterator* _tmp4_ = NULL;
+ gpointer _tmp5_ = NULL;
+ SourceCollection* _tmp6_ = NULL;
+ DataSource* _tmp7_ = NULL;
+ SourceBacklink* _tmp8_ = NULL;
+ SourceBacklink* _tmp9_ = NULL;
+#line 188 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp2_ = _collection_it;
+#line 188 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp3_ = gee_iterator_next (_tmp2_);
+#line 188 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ if (!_tmp3_) {
+#line 188 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ break;
+#line 1545 "ContainerSourceCollection.c"
+ }
+#line 188 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp4_ = _collection_it;
+#line 188 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp5_ = gee_iterator_get (_tmp4_);
+#line 188 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ collection = (SourceCollection*) _tmp5_;
+#line 189 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp6_ = collection;
+#line 189 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp7_ = source;
+#line 189 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp8_ = container_source_get_backlink (G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, TYPE_CONTAINER_SOURCE, ContainerSource));
+#line 189 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp9_ = _tmp8_;
+#line 189 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ source_collection_remove_backlink (_tmp6_, _tmp9_);
+#line 189 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _source_backlink_unref0 (_tmp9_);
+#line 188 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _data_collection_unref0 (collection);
+#line 1567 "ContainerSourceCollection.c"
+ }
+#line 188 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (_collection_it);
+#line 1571 "ContainerSourceCollection.c"
+ }
+#line 192 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp10_ = source;
+#line 192 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ SOURCE_COLLECTION_CLASS (container_source_collection_parent_class)->notify_item_destroyed (G_TYPE_CHECK_INSTANCE_CAST (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATABASE_SOURCE_COLLECTION, DatabaseSourceCollection), TYPE_SOURCE_COLLECTION, SourceCollection), _tmp10_);
+#line 1577 "ContainerSourceCollection.c"
+}
+
+
+void container_source_collection_evaporate (ContainerSourceCollection* self, ContainerSource* container) {
+ ContainerSource* _tmp21_ = NULL;
+ Marker* _tmp22_ = NULL;
+ Marker* _tmp23_ = NULL;
+#line 199 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (IS_CONTAINER_SOURCE_COLLECTION (self));
+#line 199 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (IS_CONTAINER_SOURCE (container));
+#line 1589 "ContainerSourceCollection.c"
+ {
+ GeeIterator* _collection_it = NULL;
+ GeeHashSet* _tmp0_ = NULL;
+ GeeIterator* _tmp1_ = NULL;
+#line 200 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp0_ = self->priv->attached_collections;
+#line 200 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp1_ = gee_abstract_collection_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection));
+#line 200 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _collection_it = _tmp1_;
+#line 200 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ while (TRUE) {
+#line 1602 "ContainerSourceCollection.c"
+ GeeIterator* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+ SourceCollection* collection = NULL;
+ GeeIterator* _tmp4_ = NULL;
+ gpointer _tmp5_ = NULL;
+ SourceCollection* _tmp6_ = NULL;
+ ContainerSource* _tmp7_ = NULL;
+ SourceBacklink* _tmp8_ = NULL;
+ SourceBacklink* _tmp9_ = NULL;
+ gboolean _tmp10_ = FALSE;
+ gboolean _tmp11_ = FALSE;
+#line 200 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp2_ = _collection_it;
+#line 200 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp3_ = gee_iterator_next (_tmp2_);
+#line 200 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ if (!_tmp3_) {
+#line 200 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ break;
+#line 1622 "ContainerSourceCollection.c"
+ }
+#line 200 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp4_ = _collection_it;
+#line 200 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp5_ = gee_iterator_get (_tmp4_);
+#line 200 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ collection = (SourceCollection*) _tmp5_;
+#line 201 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp6_ = collection;
+#line 201 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp7_ = container;
+#line 201 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp8_ = container_source_get_backlink (_tmp7_);
+#line 201 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp9_ = _tmp8_;
+#line 201 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp10_ = source_collection_has_backlink (_tmp6_, _tmp9_);
+#line 201 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp11_ = _tmp10_;
+#line 201 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _source_backlink_unref0 (_tmp9_);
+#line 201 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ if (_tmp11_) {
+#line 1646 "ContainerSourceCollection.c"
+ ContainerSource* _tmp12_ = NULL;
+ Marker* _tmp13_ = NULL;
+ Marker* _tmp14_ = NULL;
+ GeeCollection* _tmp15_ = NULL;
+ GeeCollection* _tmp16_ = NULL;
+ gboolean added = FALSE;
+ GeeHashSet* _tmp17_ = NULL;
+ ContainerSource* _tmp18_ = NULL;
+ gboolean _tmp19_ = FALSE;
+ gboolean _tmp20_ = FALSE;
+#line 202 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp12_ = container;
+#line 202 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp13_ = data_collection_mark (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, TYPE_DATA_OBJECT, DataObject));
+#line 202 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp14_ = _tmp13_;
+#line 202 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp15_ = source_collection_unlink_marked (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_SOURCE_COLLECTION, SourceCollection), _tmp14_, NULL, NULL);
+#line 202 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp16_ = _tmp15_;
+#line 202 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (_tmp16_);
+#line 202 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (_tmp14_);
+#line 203 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp17_ = self->priv->holding_tank;
+#line 203 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp18_ = container;
+#line 203 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp19_ = gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp17_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp18_);
+#line 203 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ added = _tmp19_;
+#line 204 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp20_ = added;
+#line 204 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _vala_assert (_tmp20_, "added");
+#line 205 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _data_collection_unref0 (collection);
+#line 205 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (_collection_it);
+#line 205 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ return;
+#line 1689 "ContainerSourceCollection.c"
+ }
+#line 200 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _data_collection_unref0 (collection);
+#line 1693 "ContainerSourceCollection.c"
+ }
+#line 200 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (_collection_it);
+#line 1697 "ContainerSourceCollection.c"
+ }
+#line 209 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp21_ = container;
+#line 209 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp22_ = data_collection_mark (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp21_, TYPE_DATA_OBJECT, DataObject));
+#line 209 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp23_ = _tmp22_;
+#line 209 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ source_collection_destroy_marked (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_SOURCE_COLLECTION, SourceCollection), _tmp23_, TRUE, NULL, NULL, NULL);
+#line 209 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (_tmp23_);
+#line 1709 "ContainerSourceCollection.c"
+}
+
+
+static void _container_source_collection_on_contained_sources_unlinking_source_collection_items_unlinking (SourceCollection* _sender, GeeCollection* unlinking, gpointer self) {
+#line 220 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ container_source_collection_on_contained_sources_unlinking ((ContainerSourceCollection*) self, unlinking);
+#line 1716 "ContainerSourceCollection.c"
+}
+
+
+static void _container_source_collection_on_contained_sources_relinked_source_collection_items_relinked (SourceCollection* _sender, GeeCollection* relinked, gpointer self) {
+#line 221 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ container_source_collection_on_contained_sources_relinked ((ContainerSourceCollection*) self, relinked);
+#line 1723 "ContainerSourceCollection.c"
+}
+
+
+static void _container_source_collection_on_contained_source_destroyed_source_collection_item_destroyed (SourceCollection* _sender, DataSource* source, gpointer self) {
+#line 222 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ container_source_collection_on_contained_source_destroyed ((ContainerSourceCollection*) self, source);
+#line 1730 "ContainerSourceCollection.c"
+}
+
+
+static void _container_source_collection_on_contained_source_destroyed_source_collection_unlinked_destroyed (SourceCollection* _sender, DataSource* source, gpointer self) {
+#line 223 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ container_source_collection_on_contained_source_destroyed ((ContainerSourceCollection*) self, source);
+#line 1737 "ContainerSourceCollection.c"
+}
+
+
+void container_source_collection_attach_collection (ContainerSourceCollection* self, SourceCollection* collection) {
+ GeeHashSet* _tmp0_ = NULL;
+ SourceCollection* _tmp1_ = NULL;
+ gboolean _tmp2_ = FALSE;
+ GeeHashSet* _tmp8_ = NULL;
+ SourceCollection* _tmp9_ = NULL;
+ SourceCollection* _tmp10_ = NULL;
+ SourceCollection* _tmp11_ = NULL;
+ SourceCollection* _tmp12_ = NULL;
+ SourceCollection* _tmp13_ = NULL;
+#line 212 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (IS_CONTAINER_SOURCE_COLLECTION (self));
+#line 212 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (IS_SOURCE_COLLECTION (collection));
+#line 213 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp0_ = self->priv->attached_collections;
+#line 213 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp1_ = collection;
+#line 213 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp2_ = gee_abstract_collection_contains (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp1_);
+#line 213 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ if (_tmp2_) {
+#line 1763 "ContainerSourceCollection.c"
+ SourceCollection* _tmp3_ = NULL;
+ gchar* _tmp4_ = NULL;
+ gchar* _tmp5_ = NULL;
+ gchar* _tmp6_ = NULL;
+ gchar* _tmp7_ = NULL;
+#line 214 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp3_ = collection;
+#line 214 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp4_ = data_collection_to_string (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, TYPE_DATA_COLLECTION, DataCollection));
+#line 214 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp5_ = _tmp4_;
+#line 214 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp6_ = data_collection_to_string (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 214 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp7_ = _tmp6_;
+#line 214 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_warning ("ContainerSourceCollection.vala:214: attempted to multiple-attach '%s' " \
+"to '%s'", _tmp5_, _tmp7_);
+#line 214 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_free0 (_tmp7_);
+#line 214 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_free0 (_tmp5_);
+#line 215 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ return;
+#line 1787 "ContainerSourceCollection.c"
+ }
+#line 218 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp8_ = self->priv->attached_collections;
+#line 218 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp9_ = collection;
+#line 218 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp9_);
+#line 220 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp10_ = collection;
+#line 220 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_signal_connect (_tmp10_, "items-unlinking", (GCallback) _container_source_collection_on_contained_sources_unlinking_source_collection_items_unlinking, self);
+#line 221 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp11_ = collection;
+#line 221 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_signal_connect (_tmp11_, "items-relinked", (GCallback) _container_source_collection_on_contained_sources_relinked_source_collection_items_relinked, self);
+#line 222 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp12_ = collection;
+#line 222 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_signal_connect (_tmp12_, "item-destroyed", (GCallback) _container_source_collection_on_contained_source_destroyed_source_collection_item_destroyed, self);
+#line 223 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp13_ = collection;
+#line 223 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_signal_connect (_tmp13_, "unlinked-destroyed", (GCallback) _container_source_collection_on_contained_source_destroyed_source_collection_unlinked_destroyed, self);
+#line 1811 "ContainerSourceCollection.c"
+}
+
+
+void container_source_collection_detach_all_collections (ContainerSourceCollection* self) {
+ GeeHashSet* _tmp14_ = NULL;
+#line 226 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (IS_CONTAINER_SOURCE_COLLECTION (self));
+#line 1819 "ContainerSourceCollection.c"
+ {
+ GeeIterator* _collection_it = NULL;
+ GeeHashSet* _tmp0_ = NULL;
+ GeeIterator* _tmp1_ = NULL;
+#line 227 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp0_ = self->priv->attached_collections;
+#line 227 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp1_ = gee_abstract_collection_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection));
+#line 227 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _collection_it = _tmp1_;
+#line 227 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ while (TRUE) {
+#line 1832 "ContainerSourceCollection.c"
+ GeeIterator* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+ SourceCollection* collection = NULL;
+ GeeIterator* _tmp4_ = NULL;
+ gpointer _tmp5_ = NULL;
+ SourceCollection* _tmp6_ = NULL;
+ guint _tmp7_ = 0U;
+ SourceCollection* _tmp8_ = NULL;
+ guint _tmp9_ = 0U;
+ SourceCollection* _tmp10_ = NULL;
+ guint _tmp11_ = 0U;
+ SourceCollection* _tmp12_ = NULL;
+ guint _tmp13_ = 0U;
+#line 227 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp2_ = _collection_it;
+#line 227 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp3_ = gee_iterator_next (_tmp2_);
+#line 227 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ if (!_tmp3_) {
+#line 227 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ break;
+#line 1854 "ContainerSourceCollection.c"
+ }
+#line 227 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp4_ = _collection_it;
+#line 227 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp5_ = gee_iterator_get (_tmp4_);
+#line 227 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ collection = (SourceCollection*) _tmp5_;
+#line 228 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp6_ = collection;
+#line 228 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_signal_parse_name ("items-unlinking", TYPE_SOURCE_COLLECTION, &_tmp7_, NULL, FALSE);
+#line 228 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_signal_handlers_disconnect_matched (_tmp6_, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp7_, 0, NULL, (GCallback) _container_source_collection_on_contained_sources_unlinking_source_collection_items_unlinking, self);
+#line 229 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp8_ = collection;
+#line 229 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_signal_parse_name ("items-relinked", TYPE_SOURCE_COLLECTION, &_tmp9_, NULL, FALSE);
+#line 229 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_signal_handlers_disconnect_matched (_tmp8_, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp9_, 0, NULL, (GCallback) _container_source_collection_on_contained_sources_relinked_source_collection_items_relinked, self);
+#line 230 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp10_ = collection;
+#line 230 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_signal_parse_name ("item-destroyed", TYPE_SOURCE_COLLECTION, &_tmp11_, NULL, FALSE);
+#line 230 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_signal_handlers_disconnect_matched (_tmp10_, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp11_, 0, NULL, (GCallback) _container_source_collection_on_contained_source_destroyed_source_collection_item_destroyed, self);
+#line 231 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp12_ = collection;
+#line 231 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_signal_parse_name ("unlinked-destroyed", TYPE_SOURCE_COLLECTION, &_tmp13_, NULL, FALSE);
+#line 231 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_signal_handlers_disconnect_matched (_tmp12_, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp13_, 0, NULL, (GCallback) _container_source_collection_on_contained_source_destroyed_source_collection_unlinked_destroyed, self);
+#line 227 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _data_collection_unref0 (collection);
+#line 1888 "ContainerSourceCollection.c"
+ }
+#line 227 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (_collection_it);
+#line 1892 "ContainerSourceCollection.c"
+ }
+#line 234 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp14_ = self->priv->attached_collections;
+#line 234 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ gee_abstract_collection_clear (G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection));
+#line 1898 "ContainerSourceCollection.c"
+}
+
+
+static void container_source_collection_real_container_contents_added (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* added, gboolean relinked) {
+#line 20 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (IS_CONTAINER_SOURCE (container));
+#line 20 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (added));
+#line 1907 "ContainerSourceCollection.c"
+}
+
+
+static void g_cclosure_user_marshal_VOID__OBJECT_OBJECT_BOOLEAN (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data) {
+ typedef void (*GMarshalFunc_VOID__OBJECT_OBJECT_BOOLEAN) (gpointer data1, gpointer arg_1, gpointer arg_2, gboolean arg_3, gpointer data2);
+ register GMarshalFunc_VOID__OBJECT_OBJECT_BOOLEAN callback;
+ register GCClosure * cc;
+ register gpointer data1;
+ register gpointer data2;
+ cc = (GCClosure *) closure;
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (n_param_values == 4);
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ if (G_CCLOSURE_SWAP_DATA (closure)) {
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ data1 = closure->data;
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ data2 = param_values->data[0].v_pointer;
+#line 1926 "ContainerSourceCollection.c"
+ } else {
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ data1 = param_values->data[0].v_pointer;
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ data2 = closure->data;
+#line 1932 "ContainerSourceCollection.c"
+ }
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ callback = (GMarshalFunc_VOID__OBJECT_OBJECT_BOOLEAN) (marshal_data ? marshal_data : cc->callback);
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ callback (data1, g_value_get_object (param_values + 1), g_value_get_object (param_values + 2), g_value_get_boolean (param_values + 3), data2);
+#line 1938 "ContainerSourceCollection.c"
+}
+
+
+static void container_source_collection_real_container_contents_removed (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* removed, gboolean unlinked) {
+#line 24 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (IS_CONTAINER_SOURCE (container));
+#line 24 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (removed));
+#line 1947 "ContainerSourceCollection.c"
+}
+
+
+static void container_source_collection_real_container_contents_altered (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* added, gboolean relinked, GeeCollection* removed, gboolean unlinked) {
+#line 28 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (IS_CONTAINER_SOURCE (container));
+#line 28 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail ((added == NULL) || GEE_IS_COLLECTION (added));
+#line 28 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail ((removed == NULL) || GEE_IS_COLLECTION (removed));
+#line 1958 "ContainerSourceCollection.c"
+}
+
+
+static void g_cclosure_user_marshal_VOID__OBJECT_OBJECT_BOOLEAN_OBJECT_BOOLEAN (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data) {
+ typedef void (*GMarshalFunc_VOID__OBJECT_OBJECT_BOOLEAN_OBJECT_BOOLEAN) (gpointer data1, gpointer arg_1, gpointer arg_2, gboolean arg_3, gpointer arg_4, gboolean arg_5, gpointer data2);
+ register GMarshalFunc_VOID__OBJECT_OBJECT_BOOLEAN_OBJECT_BOOLEAN callback;
+ register GCClosure * cc;
+ register gpointer data1;
+ register gpointer data2;
+ cc = (GCClosure *) closure;
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (n_param_values == 6);
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ if (G_CCLOSURE_SWAP_DATA (closure)) {
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ data1 = closure->data;
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ data2 = param_values->data[0].v_pointer;
+#line 1977 "ContainerSourceCollection.c"
+ } else {
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ data1 = param_values->data[0].v_pointer;
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ data2 = closure->data;
+#line 1983 "ContainerSourceCollection.c"
+ }
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ callback = (GMarshalFunc_VOID__OBJECT_OBJECT_BOOLEAN_OBJECT_BOOLEAN) (marshal_data ? marshal_data : cc->callback);
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ callback (data1, g_value_get_object (param_values + 1), g_value_get_object (param_values + 2), g_value_get_boolean (param_values + 3), g_value_get_object (param_values + 4), g_value_get_boolean (param_values + 5), data2);
+#line 1989 "ContainerSourceCollection.c"
+}
+
+
+static void container_source_collection_real_backlink_to_container_removed (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* sources) {
+#line 33 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (IS_CONTAINER_SOURCE (container));
+#line 33 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (sources));
+#line 1998 "ContainerSourceCollection.c"
+}
+
+
+static void g_cclosure_user_marshal_VOID__OBJECT_OBJECT (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data) {
+ typedef void (*GMarshalFunc_VOID__OBJECT_OBJECT) (gpointer data1, gpointer arg_1, gpointer arg_2, gpointer data2);
+ register GMarshalFunc_VOID__OBJECT_OBJECT callback;
+ register GCClosure * cc;
+ register gpointer data1;
+ register gpointer data2;
+ cc = (GCClosure *) closure;
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_return_if_fail (n_param_values == 3);
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ if (G_CCLOSURE_SWAP_DATA (closure)) {
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ data1 = closure->data;
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ data2 = param_values->data[0].v_pointer;
+#line 2017 "ContainerSourceCollection.c"
+ } else {
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ data1 = param_values->data[0].v_pointer;
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ data2 = closure->data;
+#line 2023 "ContainerSourceCollection.c"
+ }
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ callback = (GMarshalFunc_VOID__OBJECT_OBJECT) (marshal_data ? marshal_data : cc->callback);
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ callback (data1, g_value_get_object (param_values + 1), g_value_get_object (param_values + 2), data2);
+#line 2029 "ContainerSourceCollection.c"
+}
+
+
+static void container_source_collection_class_init (ContainerSourceCollectionClass * klass) {
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ container_source_collection_parent_class = g_type_class_peek_parent (klass);
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ ((DataCollectionClass *) klass)->finalize = container_source_collection_finalize;
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_type_class_add_private (klass, sizeof (ContainerSourceCollectionPrivate));
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ ((SourceCollectionClass *) klass)->notify_backlink_removed = container_source_collection_real_notify_backlink_removed;
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ ((ContainerSourceCollectionClass *) klass)->notify_container_contents_added = container_source_collection_real_notify_container_contents_added;
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ ((ContainerSourceCollectionClass *) klass)->notify_container_contents_removed = container_source_collection_real_notify_container_contents_removed;
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ ((ContainerSourceCollectionClass *) klass)->notify_container_contents_altered = container_source_collection_real_notify_container_contents_altered;
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ ((ContainerSourceCollectionClass *) klass)->notify_backlink_to_container_removed = container_source_collection_real_notify_backlink_to_container_removed;
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ ((ContainerSourceCollectionClass *) klass)->get_containers_holding_source = container_source_collection_real_get_containers_holding_source;
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ ((ContainerSourceCollectionClass *) klass)->convert_backlink_to_container = container_source_collection_real_convert_backlink_to_container;
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ ((SourceCollectionClass *) klass)->notify_item_destroyed = container_source_collection_real_notify_item_destroyed;
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ ((ContainerSourceCollectionClass *) klass)->container_contents_added = container_source_collection_real_container_contents_added;
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ ((ContainerSourceCollectionClass *) klass)->container_contents_removed = container_source_collection_real_container_contents_removed;
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ ((ContainerSourceCollectionClass *) klass)->container_contents_altered = container_source_collection_real_container_contents_altered;
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ ((ContainerSourceCollectionClass *) klass)->backlink_to_container_removed = container_source_collection_real_backlink_to_container_removed;
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_signal_new ("container_contents_added", TYPE_CONTAINER_SOURCE_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ContainerSourceCollectionClass, container_contents_added), NULL, NULL, g_cclosure_user_marshal_VOID__OBJECT_OBJECT_BOOLEAN, G_TYPE_NONE, 3, TYPE_CONTAINER_SOURCE, GEE_TYPE_COLLECTION, G_TYPE_BOOLEAN);
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_signal_new ("container_contents_removed", TYPE_CONTAINER_SOURCE_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ContainerSourceCollectionClass, container_contents_removed), NULL, NULL, g_cclosure_user_marshal_VOID__OBJECT_OBJECT_BOOLEAN, G_TYPE_NONE, 3, TYPE_CONTAINER_SOURCE, GEE_TYPE_COLLECTION, G_TYPE_BOOLEAN);
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_signal_new ("container_contents_altered", TYPE_CONTAINER_SOURCE_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ContainerSourceCollectionClass, container_contents_altered), NULL, NULL, g_cclosure_user_marshal_VOID__OBJECT_OBJECT_BOOLEAN_OBJECT_BOOLEAN, G_TYPE_NONE, 5, TYPE_CONTAINER_SOURCE, GEE_TYPE_COLLECTION, G_TYPE_BOOLEAN, GEE_TYPE_COLLECTION, G_TYPE_BOOLEAN);
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ g_signal_new ("backlink_to_container_removed", TYPE_CONTAINER_SOURCE_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ContainerSourceCollectionClass, backlink_to_container_removed), NULL, NULL, g_cclosure_user_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, TYPE_CONTAINER_SOURCE, GEE_TYPE_COLLECTION);
+#line 2072 "ContainerSourceCollection.c"
+}
+
+
+static void container_source_collection_instance_init (ContainerSourceCollection * self) {
+ GeeHashSet* _tmp0_ = NULL;
+ GeeHashSet* _tmp1_ = NULL;
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ self->priv = CONTAINER_SOURCE_COLLECTION_GET_PRIVATE (self);
+#line 16 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp0_ = gee_hash_set_new (TYPE_SOURCE_COLLECTION, (GBoxedCopyFunc) data_collection_ref, data_collection_unref, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 16 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ self->priv->attached_collections = _tmp0_;
+#line 18 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _tmp1_ = gee_hash_set_new (TYPE_CONTAINER_SOURCE, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 18 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ self->priv->holding_tank = _tmp1_;
+#line 2089 "ContainerSourceCollection.c"
+}
+
+
+static void container_source_collection_finalize (DataCollection* obj) {
+ ContainerSourceCollection * self;
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_CONTAINER_SOURCE_COLLECTION, ContainerSourceCollection);
+#line 45 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ container_source_collection_detach_all_collections (self);
+#line 16 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (self->priv->attached_collections);
+#line 17 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_free0 (self->priv->backlink_name);
+#line 18 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ _g_object_unref0 (self->priv->holding_tank);
+#line 15 "/home/jens/Source/shotwell/src/core/ContainerSourceCollection.vala"
+ DATA_COLLECTION_CLASS (container_source_collection_parent_class)->finalize (obj);
+#line 2107 "ContainerSourceCollection.c"
+}
+
+
+GType container_source_collection_get_type (void) {
+ static volatile gsize container_source_collection_type_id__volatile = 0;
+ if (g_once_init_enter (&container_source_collection_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (ContainerSourceCollectionClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) container_source_collection_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ContainerSourceCollection), 0, (GInstanceInitFunc) container_source_collection_instance_init, NULL };
+ GType container_source_collection_type_id;
+ container_source_collection_type_id = g_type_register_static (TYPE_DATABASE_SOURCE_COLLECTION, "ContainerSourceCollection", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
+ g_once_init_leave (&container_source_collection_type_id__volatile, container_source_collection_type_id);
+ }
+ return container_source_collection_type_id__volatile;
+}
+
+
+
diff --git a/src/core/Core.c b/src/core/Core.c
new file mode 100644
index 0000000..7fd60d2
--- /dev/null
+++ b/src/core/Core.c
@@ -0,0 +1,41 @@
+/* Core.c generated by valac 0.32.1, the Vala compiler
+ * generated from Core.vala, do not modify */
+
+/* Copyright 2016 Software Freedom Conservancy Inc.
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later). See the COPYING file in this distribution.
+ */
+/* This file is the master unit file for the Core unit. It should be edited to include
+ * whatever code is deemed necessary.
+ *
+ * The init() and terminate() methods are mandatory.
+ *
+ * If the unit needs to be configured prior to initialization, add the proper parameters to
+ * the preconfigure() method, implement it, and ensure in init() that it's been called.
+ */
+
+#include <glib.h>
+#include <glib-object.h>
+
+
+
+
+void core_preconfigure (void);
+void core_init (GError** error);
+void core_terminate (void);
+
+
+void core_preconfigure (void) {
+}
+
+
+void core_init (GError** error) {
+}
+
+
+void core_terminate (void) {
+}
+
+
+
diff --git a/src/core/DataCollection.c b/src/core/DataCollection.c
new file mode 100644
index 0000000..7040412
--- /dev/null
+++ b/src/core/DataCollection.c
@@ -0,0 +1,3944 @@
+/* DataCollection.c generated by valac 0.32.1, the Vala compiler
+ * generated from DataCollection.vala, do not modify */
+
+/* Copyright 2016 Software Freedom Conservancy Inc.
+ *
+ * This software is licensed under the GNU LGPL (version 2.1 or later).
+ * See the COPYING file in this distribution.
+ */
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gee.h>
+#include <gobject/gvaluecollector.h>
+
+
+#define TYPE_DATA_COLLECTION (data_collection_get_type ())
+#define DATA_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_COLLECTION, DataCollection))
+#define DATA_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_COLLECTION, DataCollectionClass))
+#define IS_DATA_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_COLLECTION))
+#define IS_DATA_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_COLLECTION))
+#define DATA_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_COLLECTION, DataCollectionClass))
+
+typedef struct _DataCollection DataCollection;
+typedef struct _DataCollectionClass DataCollectionClass;
+typedef struct _DataCollectionPrivate DataCollectionPrivate;
+
+#define TYPE_DATA_OBJECT (data_object_get_type ())
+#define DATA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_OBJECT, DataObject))
+#define DATA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_OBJECT, DataObjectClass))
+#define IS_DATA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_OBJECT))
+#define IS_DATA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_OBJECT))
+#define DATA_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_OBJECT, DataObjectClass))
+
+typedef struct _DataObject DataObject;
+typedef struct _DataObjectClass DataObjectClass;
+
+#define TYPE_ALTERATION (alteration_get_type ())
+#define ALTERATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ALTERATION, Alteration))
+#define ALTERATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ALTERATION, AlterationClass))
+#define IS_ALTERATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ALTERATION))
+#define IS_ALTERATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ALTERATION))
+#define ALTERATION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ALTERATION, AlterationClass))
+
+typedef struct _Alteration Alteration;
+typedef struct _AlterationClass AlterationClass;
+
+#define TYPE_MARKER (marker_get_type ())
+#define MARKER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_MARKER, Marker))
+#define IS_MARKER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_MARKER))
+#define MARKER_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TYPE_MARKER, MarkerIface))
+
+typedef struct _Marker Marker;
+typedef struct _MarkerIface MarkerIface;
+
+#define TYPE_DATA_SET (data_set_get_type ())
+#define DATA_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_SET, DataSet))
+#define DATA_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_SET, DataSetClass))
+#define IS_DATA_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_SET))
+#define IS_DATA_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_SET))
+#define DATA_SET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_SET, DataSetClass))
+
+typedef struct _DataSet DataSet;
+typedef struct _DataSetClass DataSetClass;
+#define _g_free0(var) (var = (g_free (var), NULL))
+#define _data_set_unref0(var) ((var == NULL) ? NULL : (var = (data_set_unref (var), NULL)))
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+
+#define TYPE_SINGLETON_COLLECTION (singleton_collection_get_type ())
+#define SINGLETON_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SINGLETON_COLLECTION, SingletonCollection))
+#define SINGLETON_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SINGLETON_COLLECTION, SingletonCollectionClass))
+#define IS_SINGLETON_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SINGLETON_COLLECTION))
+#define IS_SINGLETON_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SINGLETON_COLLECTION))
+#define SINGLETON_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SINGLETON_COLLECTION, SingletonCollectionClass))
+
+typedef struct _SingletonCollection SingletonCollection;
+typedef struct _SingletonCollectionClass SingletonCollectionClass;
+#define _data_collection_unref0(var) ((var == NULL) ? NULL : (var = (data_collection_unref (var), NULL)))
+
+#define DATA_COLLECTION_TYPE_MARKER_IMPL (data_collection_marker_impl_get_type ())
+#define DATA_COLLECTION_MARKER_IMPL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DATA_COLLECTION_TYPE_MARKER_IMPL, DataCollectionMarkerImpl))
+#define DATA_COLLECTION_MARKER_IMPL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), DATA_COLLECTION_TYPE_MARKER_IMPL, DataCollectionMarkerImplClass))
+#define DATA_COLLECTION_IS_MARKER_IMPL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), DATA_COLLECTION_TYPE_MARKER_IMPL))
+#define DATA_COLLECTION_IS_MARKER_IMPL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), DATA_COLLECTION_TYPE_MARKER_IMPL))
+#define DATA_COLLECTION_MARKER_IMPL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), DATA_COLLECTION_TYPE_MARKER_IMPL, DataCollectionMarkerImplClass))
+
+typedef struct _DataCollectionMarkerImpl DataCollectionMarkerImpl;
+typedef struct _DataCollectionMarkerImplClass DataCollectionMarkerImplClass;
+typedef struct _DataCollectionMarkerImplPrivate DataCollectionMarkerImplPrivate;
+#define _alteration_unref0(var) ((var == NULL) ? NULL : (var = (alteration_unref (var), NULL)))
+#define __vala_GValue_free0(var) ((var == NULL) ? NULL : (var = (_vala_GValue_free (var), NULL)))
+typedef struct _ParamSpecDataCollection ParamSpecDataCollection;
+#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
+#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
+#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+
+typedef gint64 (*Comparator) (void* a, void* b, void* user_data);
+typedef gboolean (*ComparatorPredicate) (DataObject* object, Alteration* alteration, void* user_data);
+typedef gboolean (*ProgressMonitor) (guint64 current, guint64 total, gboolean do_event_loop, void* user_data);
+struct _MarkerIface {
+ GTypeInterface parent_iface;
+ void (*mark) (Marker* self, DataObject* object);
+ void (*unmark) (Marker* self, DataObject* object);
+ gboolean (*toggle) (Marker* self, DataObject* object);
+ void (*mark_many) (Marker* self, GeeCollection* list);
+ void (*unmark_many) (Marker* self, GeeCollection* list);
+ void (*mark_all) (Marker* self);
+ gint (*get_count) (Marker* self);
+ GeeCollection* (*get_all) (Marker* self);
+};
+
+struct _DataCollection {
+ GTypeInstance parent_instance;
+ volatile int ref_count;
+ DataCollectionPrivate * priv;
+};
+
+struct _DataCollectionClass {
+ GTypeClass parent_class;
+ void (*finalize) (DataCollection *self);
+ gchar* (*to_string) (DataCollection* self);
+ void (*notify_items_added) (DataCollection* self, GeeIterable* added);
+ void (*notify_items_removed) (DataCollection* self, GeeIterable* removed);
+ void (*notify_contents_altered) (DataCollection* self, GeeIterable* added, GeeIterable* removed);
+ void (*notify_items_altered) (DataCollection* self, GeeMap* items);
+ void (*notify_ordering_changed) (DataCollection* self);
+ void (*notify_property_set) (DataCollection* self, const gchar* name, GValue* old, GValue* val);
+ void (*notify_property_cleared) (DataCollection* self, const gchar* name);
+ gboolean (*valid_type) (DataCollection* self, DataObject* object);
+ void (*set_comparator) (DataCollection* self, Comparator comparator, void* comparator_target, ComparatorPredicate predicate, void* predicate_target);
+ void (*reset_comparator) (DataCollection* self);
+ GeeCollection* (*get_all) (DataCollection* self);
+ gint (*get_count) (DataCollection* self);
+ DataObject* (*get_at) (DataCollection* self, gint index);
+ gint (*index_of) (DataCollection* self, DataObject* object);
+ gboolean (*contains) (DataCollection* self, DataObject* object);
+ gboolean (*add) (DataCollection* self, DataObject* object);
+ GeeCollection* (*add_many) (DataCollection* self, GeeCollection* objects, ProgressMonitor monitor, void* monitor_target);
+ void (*remove_marked) (DataCollection* self, Marker* m);
+ void (*clear) (DataCollection* self);
+ void (*close) (DataCollection* self);
+ void (*notify_frozen) (DataCollection* self);
+ void (*notify_thawed) (DataCollection* self);
+ void (*items_added) (DataCollection* self, GeeIterable* added);
+ void (*items_removed) (DataCollection* self, GeeIterable* removed);
+ void (*contents_altered) (DataCollection* self, GeeIterable* added, GeeIterable* removed);
+ void (*items_altered) (DataCollection* self, GeeMap* items);
+ void (*ordering_changed) (DataCollection* self);
+ void (*property_set) (DataCollection* self, const gchar* name, GValue* old, GValue* val);
+ void (*property_cleared) (DataCollection* self, const gchar* name);
+ void (*frozen) (DataCollection* self);
+ void (*thawed) (DataCollection* self);
+};
+
+struct _DataCollectionPrivate {
+ gchar* name;
+ DataSet* dataset;
+ GeeHashMap* properties;
+ gint64 object_ordinal_generator;
+ gint notifies_frozen;
+ GeeHashMap* frozen_items_altered;
+ gboolean fire_ordering_changed;
+};
+
+typedef gboolean (*MarkedAction) (DataObject* object, GObject* user, void* user_data);
+struct _DataCollectionMarkerImpl {
+ GObject parent_instance;
+ DataCollectionMarkerImplPrivate * priv;
+ DataCollection* owner;
+ GeeHashSet* marked;
+ gint freeze_count;
+};
+
+struct _DataCollectionMarkerImplClass {
+ GObjectClass parent_class;
+};
+
+typedef gboolean (*ValueEqualFunc) (GValue* a, GValue* b, void* user_data);
+struct _ParamSpecDataCollection {
+ GParamSpec parent_instance;
+};
+
+
+static gpointer data_collection_parent_class = NULL;
+static gpointer data_collection_marker_impl_parent_class = NULL;
+static MarkerIface* data_collection_marker_impl_marker_parent_iface = NULL;
+
+gpointer data_collection_ref (gpointer instance);
+void data_collection_unref (gpointer instance);
+GParamSpec* param_spec_data_collection (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_data_collection (GValue* value, gpointer v_object);
+void value_take_data_collection (GValue* value, gpointer v_object);
+gpointer value_get_data_collection (const GValue* value);
+GType data_collection_get_type (void) G_GNUC_CONST;
+GType data_object_get_type (void) G_GNUC_CONST;
+gpointer alteration_ref (gpointer instance);
+void alteration_unref (gpointer instance);
+GParamSpec* param_spec_alteration (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_alteration (GValue* value, gpointer v_object);
+void value_take_alteration (GValue* value, gpointer v_object);
+gpointer value_get_alteration (const GValue* value);
+GType alteration_get_type (void) G_GNUC_CONST;
+GType marker_get_type (void) G_GNUC_CONST;
+gpointer data_set_ref (gpointer instance);
+void data_set_unref (gpointer instance);
+GParamSpec* param_spec_data_set (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_data_set (GValue* value, gpointer v_object);
+void value_take_data_set (GValue* value, gpointer v_object);
+gpointer value_get_data_set (const GValue* value);
+GType data_set_get_type (void) G_GNUC_CONST;
+#define DATA_COLLECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_DATA_COLLECTION, DataCollectionPrivate))
+enum {
+ DATA_COLLECTION_DUMMY_PROPERTY
+};
+DataSet* data_set_new (void);
+DataSet* data_set_construct (GType object_type);
+static GValue* _g_value_dup (GValue* self);
+static void _vala_GValue_free (GValue* self);
+#define DATA_COLLECTION_INVALID_OBJECT_ORDINAL ((gint64) -1)
+DataCollection* data_collection_new (const gchar* name);
+DataCollection* data_collection_construct (GType object_type, const gchar* name);
+gchar* data_collection_to_string (DataCollection* self);
+static gchar* data_collection_real_to_string (DataCollection* self);
+gint data_collection_get_count (DataCollection* self);
+void data_collection_notify_items_added (DataCollection* self, GeeIterable* added);
+static void data_collection_real_notify_items_added (DataCollection* self, GeeIterable* added);
+void data_collection_notify_items_removed (DataCollection* self, GeeIterable* removed);
+static void data_collection_real_notify_items_removed (DataCollection* self, GeeIterable* removed);
+void data_collection_notify_contents_altered (DataCollection* self, GeeIterable* added, GeeIterable* removed);
+static void data_collection_real_notify_contents_altered (DataCollection* self, GeeIterable* added, GeeIterable* removed);
+void data_collection_notify_items_altered (DataCollection* self, GeeMap* items);
+static void data_collection_real_notify_items_altered (DataCollection* self, GeeMap* items);
+void data_collection_notify_ordering_changed (DataCollection* self);
+static void data_collection_real_notify_ordering_changed (DataCollection* self);
+void data_collection_notify_property_set (DataCollection* self, const gchar* name, GValue* old, GValue* val);
+static void data_collection_real_notify_property_set (DataCollection* self, const gchar* name, GValue* old, GValue* val);
+void data_collection_notify_property_cleared (DataCollection* self, const gchar* name);
+static void data_collection_real_notify_property_cleared (DataCollection* self, const gchar* name);
+GeeCollection* data_collection_get_singleton (DataObject* object);
+SingletonCollection* singleton_collection_new (GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, gconstpointer object);
+SingletonCollection* singleton_collection_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, gconstpointer object);
+GType singleton_collection_get_type (void) G_GNUC_CONST;
+GeeMap* data_collection_get_alteration_singleton (DataObject* object, Alteration* alteration);
+gboolean data_collection_valid_type (DataCollection* self, DataObject* object);
+static gboolean data_collection_real_valid_type (DataCollection* self, DataObject* object);
+Comparator data_collection_get_comparator (DataCollection* self, void** result_target);
+Comparator data_set_get_comparator (DataSet* self, void** result_target);
+ComparatorPredicate data_collection_get_comparator_predicate (DataCollection* self, void** result_target);
+ComparatorPredicate data_set_get_comparator_predicate (DataSet* self, void** result_target);
+void data_collection_set_comparator (DataCollection* self, Comparator comparator, void* comparator_target, ComparatorPredicate predicate, void* predicate_target);
+static void data_collection_real_set_comparator (DataCollection* self, Comparator comparator, void* comparator_target, ComparatorPredicate predicate, void* predicate_target);
+void data_set_set_comparator (DataSet* self, Comparator user_comparator, void* user_comparator_target, ComparatorPredicate comparator_predicate, void* comparator_predicate_target);
+void data_collection_reset_comparator (DataCollection* self);
+static void data_collection_real_reset_comparator (DataCollection* self);
+void data_set_reset_comparator (DataSet* self);
+GeeCollection* data_collection_get_all (DataCollection* self);
+static GeeCollection* data_collection_real_get_all (DataCollection* self);
+GeeList* data_set_get_all (DataSet* self);
+DataSet* data_collection_get_dataset_copy (DataCollection* self);
+DataSet* data_set_copy (DataSet* self);
+static gint data_collection_real_get_count (DataCollection* self);
+gint data_set_get_count (DataSet* self);
+DataObject* data_collection_get_at (DataCollection* self, gint index);
+static DataObject* data_collection_real_get_at (DataCollection* self, gint index);
+DataObject* data_set_get_at (DataSet* self, gint index);
+gint data_collection_index_of (DataCollection* self, DataObject* object);
+static gint data_collection_real_index_of (DataCollection* self, DataObject* object);
+gint data_set_index_of (DataSet* self, DataObject* object);
+gboolean data_collection_contains (DataCollection* self, DataObject* object);
+static gboolean data_collection_real_contains (DataCollection* self, DataObject* object);
+static gboolean data_collection_internal_contains (DataCollection* self, DataObject* object);
+gboolean data_set_contains (DataSet* self, DataObject* object);
+DataCollection* data_object_get_membership (DataObject* self);
+static void data_collection_internal_add (DataCollection* self, DataObject* object);
+void data_object_internal_set_membership (DataObject* self, DataCollection* collection, gint64 ordinal);
+gboolean data_set_add (DataSet* self, DataObject* object);
+static void data_collection_internal_add_many (DataCollection* self, GeeList* objects, ProgressMonitor monitor, void* monitor_target);
+gboolean data_set_add_many (DataSet* self, GeeCollection* objects);
+static void data_collection_internal_remove (DataCollection* self, DataObject* object);
+gboolean data_set_remove (DataSet* self, DataObject* object);
+void data_object_internal_clear_membership (DataObject* self);
+gboolean data_collection_add (DataCollection* self, DataObject* object);
+static gboolean data_collection_real_add (DataCollection* self, DataObject* object);
+gchar* data_object_to_string (DataObject* self);
+void data_object_notify_membership_changed (DataObject* self, DataCollection* collection);
+GeeCollection* data_collection_add_many (DataCollection* self, GeeCollection* objects, ProgressMonitor monitor, void* monitor_target);
+static GeeCollection* data_collection_real_add_many (DataCollection* self, GeeCollection* objects, ProgressMonitor monitor, void* monitor_target);
+Marker* data_collection_start_marking (DataCollection* self);
+static DataCollectionMarkerImpl* data_collection_marker_impl_new (DataCollection* owner);
+static DataCollectionMarkerImpl* data_collection_marker_impl_construct (GType object_type, DataCollection* owner);
+static GType data_collection_marker_impl_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
+Marker* data_collection_mark (DataCollection* self, DataObject* object);
+void marker_mark (Marker* self, DataObject* object);
+Marker* data_collection_mark_many (DataCollection* self, GeeCollection* objects);
+void marker_mark_many (Marker* self, GeeCollection* list);
+void data_collection_act_on_marked (DataCollection* self, Marker* m, MarkedAction action, void* action_target, ProgressMonitor monitor, void* monitor_target, GObject* user);
+static gboolean data_collection_marker_impl_is_valid (DataCollectionMarkerImpl* self, DataCollection* collection);
+static void data_collection_marker_impl_freeze (DataCollectionMarkerImpl* self);
+static void data_collection_marker_impl_finished (DataCollectionMarkerImpl* self);
+void data_collection_remove_marked (DataCollection* self, Marker* m);
+static void data_collection_real_remove_marked (DataCollection* self, Marker* m);
+void data_collection_clear (DataCollection* self);
+static void data_collection_real_clear (DataCollection* self);
+void data_collection_close (DataCollection* self);
+static void data_collection_real_close (DataCollection* self);
+void data_collection_internal_notify_altered (DataCollection* self, DataObject* object, Alteration* alteration);
+gboolean data_set_resort_object (DataSet* self, DataObject* object, Alteration* alteration);
+gboolean data_collection_are_notifications_frozen (DataCollection* self);
+Alteration* alteration_compress (Alteration* self, Alteration* other);
+GValue* data_collection_get_property (DataCollection* self, const gchar* name);
+void data_collection_set_property (DataCollection* self, const gchar* name, GValue* val, ValueEqualFunc value_equals, void* value_equals_target);
+gboolean bool_value_equals (GValue* a, GValue* b);
+static gboolean _bool_value_equals_value_equal_func (GValue* a, GValue* b, gpointer self);
+gboolean int_value_equals (GValue* a, GValue* b);
+static gboolean _int_value_equals_value_equal_func (GValue* a, GValue* b, gpointer self);
+void data_object_notify_collection_property_set (DataObject* self, const gchar* name, GValue* old, GValue* val);
+void data_collection_clear_property (DataCollection* self, const gchar* name);
+void data_object_notify_collection_property_cleared (DataObject* self, const gchar* name);
+void data_collection_freeze_notifications (DataCollection* self);
+void data_collection_notify_frozen (DataCollection* self);
+void data_collection_thaw_notifications (DataCollection* self);
+void data_collection_notify_thawed (DataCollection* self);
+static void data_collection_real_notify_frozen (DataCollection* self);
+static void data_collection_real_notify_thawed (DataCollection* self);
+static void data_collection_real_items_added (DataCollection* self, GeeIterable* added);
+static void data_collection_real_items_removed (DataCollection* self, GeeIterable* removed);
+static void data_collection_real_contents_altered (DataCollection* self, GeeIterable* added, GeeIterable* removed);
+static void g_cclosure_user_marshal_VOID__OBJECT_OBJECT (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data);
+static void data_collection_real_items_altered (DataCollection* self, GeeMap* items);
+static void data_collection_real_ordering_changed (DataCollection* self);
+static void data_collection_real_property_set (DataCollection* self, const gchar* name, GValue* old, GValue* val);
+static void g_cclosure_user_marshal_VOID__STRING_BOXED_BOXED (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data);
+static void data_collection_real_property_cleared (DataCollection* self, const gchar* name);
+static void data_collection_real_frozen (DataCollection* self);
+static void data_collection_real_thawed (DataCollection* self);
+enum {
+ DATA_COLLECTION_MARKER_IMPL_DUMMY_PROPERTY
+};
+static void data_collection_marker_impl_on_items_removed (DataCollectionMarkerImpl* self, GeeIterable* removed);
+static void _data_collection_marker_impl_on_items_removed_data_collection_items_removed (DataCollection* _sender, GeeIterable* removed, gpointer self);
+static void data_collection_marker_impl_real_mark (Marker* base, DataObject* object);
+static void data_collection_marker_impl_real_unmark (Marker* base, DataObject* object);
+static gboolean data_collection_marker_impl_real_toggle (Marker* base, DataObject* object);
+static void data_collection_marker_impl_real_mark_many (Marker* base, GeeCollection* list);
+static void data_collection_marker_impl_real_unmark_many (Marker* base, GeeCollection* list);
+static void data_collection_marker_impl_real_mark_all (Marker* base);
+static gint data_collection_marker_impl_real_get_count (Marker* base);
+static GeeCollection* data_collection_marker_impl_real_get_all (Marker* base);
+static void data_collection_marker_impl_finalize (GObject* obj);
+static void data_collection_finalize (DataCollection* obj);
+
+
+static GValue* _g_value_dup (GValue* self) {
+#line 109 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return g_boxed_copy (G_TYPE_VALUE, self);
+#line 359 "DataCollection.c"
+}
+
+
+static void _vala_GValue_free (GValue* self) {
+#line 109 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_value_unset (self);
+#line 109 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_free (self);
+#line 368 "DataCollection.c"
+}
+
+
+DataCollection* data_collection_construct (GType object_type, const gchar* name) {
+ DataCollection* self = NULL;
+ const gchar* _tmp0_ = NULL;
+ gchar* _tmp1_ = NULL;
+#line 157 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (name != NULL, NULL);
+#line 157 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self = (DataCollection*) g_type_create_instance (object_type);
+#line 158 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = name;
+#line 158 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = g_strdup (_tmp0_);
+#line 158 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_free0 (self->priv->name);
+#line 158 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self->priv->name = _tmp1_;
+#line 157 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return self;
+#line 390 "DataCollection.c"
+}
+
+
+DataCollection* data_collection_new (const gchar* name) {
+#line 157 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return data_collection_construct (TYPE_DATA_COLLECTION, name);
+#line 397 "DataCollection.c"
+}
+
+
+static gchar* data_collection_real_to_string (DataCollection* self) {
+ gchar* result = NULL;
+ const gchar* _tmp0_ = NULL;
+ gint _tmp1_ = 0;
+ gchar* _tmp2_ = NULL;
+#line 168 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = self->priv->name;
+#line 168 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = data_collection_get_count (self);
+#line 168 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = g_strdup_printf ("%s (%d)", _tmp0_, _tmp1_);
+#line 168 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ result = _tmp2_;
+#line 168 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return result;
+#line 416 "DataCollection.c"
+}
+
+
+gchar* data_collection_to_string (DataCollection* self) {
+#line 167 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (IS_DATA_COLLECTION (self), NULL);
+#line 167 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return DATA_COLLECTION_GET_CLASS (self)->to_string (self);
+#line 425 "DataCollection.c"
+}
+
+
+static void data_collection_real_notify_items_added (DataCollection* self, GeeIterable* added) {
+ GeeIterable* _tmp0_ = NULL;
+#line 172 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (GEE_IS_ITERABLE (added));
+#line 173 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = added;
+#line 173 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_signal_emit_by_name (self, "items-added", _tmp0_);
+#line 437 "DataCollection.c"
+}
+
+
+void data_collection_notify_items_added (DataCollection* self, GeeIterable* added) {
+#line 172 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_DATA_COLLECTION (self));
+#line 172 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ DATA_COLLECTION_GET_CLASS (self)->notify_items_added (self, added);
+#line 446 "DataCollection.c"
+}
+
+
+static void data_collection_real_notify_items_removed (DataCollection* self, GeeIterable* removed) {
+ GeeIterable* _tmp0_ = NULL;
+#line 176 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (GEE_IS_ITERABLE (removed));
+#line 177 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = removed;
+#line 177 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_signal_emit_by_name (self, "items-removed", _tmp0_);
+#line 458 "DataCollection.c"
+}
+
+
+void data_collection_notify_items_removed (DataCollection* self, GeeIterable* removed) {
+#line 176 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_DATA_COLLECTION (self));
+#line 176 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ DATA_COLLECTION_GET_CLASS (self)->notify_items_removed (self, removed);
+#line 467 "DataCollection.c"
+}
+
+
+static void data_collection_real_notify_contents_altered (DataCollection* self, GeeIterable* added, GeeIterable* removed) {
+ GeeIterable* _tmp0_ = NULL;
+ GeeIterable* _tmp1_ = NULL;
+#line 180 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail ((added == NULL) || GEE_IS_ITERABLE (added));
+#line 180 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail ((removed == NULL) || GEE_IS_ITERABLE (removed));
+#line 182 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = added;
+#line 182 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = removed;
+#line 182 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_signal_emit_by_name (self, "contents-altered", _tmp0_, _tmp1_);
+#line 484 "DataCollection.c"
+}
+
+
+void data_collection_notify_contents_altered (DataCollection* self, GeeIterable* added, GeeIterable* removed) {
+#line 180 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_DATA_COLLECTION (self));
+#line 180 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ DATA_COLLECTION_GET_CLASS (self)->notify_contents_altered (self, added, removed);
+#line 493 "DataCollection.c"
+}
+
+
+static void data_collection_real_notify_items_altered (DataCollection* self, GeeMap* items) {
+ GeeMap* _tmp0_ = NULL;
+#line 185 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (GEE_IS_MAP (items));
+#line 186 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = items;
+#line 186 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_signal_emit_by_name (self, "items-altered", _tmp0_);
+#line 505 "DataCollection.c"
+}
+
+
+void data_collection_notify_items_altered (DataCollection* self, GeeMap* items) {
+#line 185 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_DATA_COLLECTION (self));
+#line 185 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ DATA_COLLECTION_GET_CLASS (self)->notify_items_altered (self, items);
+#line 514 "DataCollection.c"
+}
+
+
+static void data_collection_real_notify_ordering_changed (DataCollection* self) {
+#line 190 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_signal_emit_by_name (self, "ordering-changed");
+#line 521 "DataCollection.c"
+}
+
+
+void data_collection_notify_ordering_changed (DataCollection* self) {
+#line 189 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_DATA_COLLECTION (self));
+#line 189 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ DATA_COLLECTION_GET_CLASS (self)->notify_ordering_changed (self);
+#line 530 "DataCollection.c"
+}
+
+
+static void data_collection_real_notify_property_set (DataCollection* self, const gchar* name, GValue* old, GValue* val) {
+ const gchar* _tmp0_ = NULL;
+ GValue* _tmp1_ = NULL;
+ GValue _tmp2_ = {0};
+#line 193 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (name != NULL);
+#line 193 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (val != NULL);
+#line 194 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = name;
+#line 194 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = old;
+#line 194 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = *val;
+#line 194 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_signal_emit_by_name (self, "property-set", _tmp0_, _tmp1_, &_tmp2_);
+#line 550 "DataCollection.c"
+}
+
+
+void data_collection_notify_property_set (DataCollection* self, const gchar* name, GValue* old, GValue* val) {
+#line 193 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_DATA_COLLECTION (self));
+#line 193 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ DATA_COLLECTION_GET_CLASS (self)->notify_property_set (self, name, old, val);
+#line 559 "DataCollection.c"
+}
+
+
+static void data_collection_real_notify_property_cleared (DataCollection* self, const gchar* name) {
+ const gchar* _tmp0_ = NULL;
+#line 197 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (name != NULL);
+#line 198 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = name;
+#line 198 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_signal_emit_by_name (self, "property-cleared", _tmp0_);
+#line 571 "DataCollection.c"
+}
+
+
+void data_collection_notify_property_cleared (DataCollection* self, const gchar* name) {
+#line 197 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_DATA_COLLECTION (self));
+#line 197 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ DATA_COLLECTION_GET_CLASS (self)->notify_property_cleared (self, name);
+#line 580 "DataCollection.c"
+}
+
+
+GeeCollection* data_collection_get_singleton (DataObject* object) {
+ GeeCollection* result = NULL;
+ DataObject* _tmp0_ = NULL;
+ SingletonCollection* _tmp1_ = NULL;
+#line 206 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (object), NULL);
+#line 207 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = object;
+#line 207 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = singleton_collection_new (TYPE_DATA_OBJECT, (GBoxedCopyFunc) g_object_ref, g_object_unref, _tmp0_);
+#line 207 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_COLLECTION, GeeCollection);
+#line 207 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return result;
+#line 598 "DataCollection.c"
+}
+
+
+GeeMap* data_collection_get_alteration_singleton (DataObject* object, Alteration* alteration) {
+ GeeMap* result = NULL;
+ GeeMap* map = NULL;
+ GeeHashMap* _tmp0_ = NULL;
+ DataObject* _tmp1_ = NULL;
+ Alteration* _tmp2_ = NULL;
+#line 210 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (object), NULL);
+#line 210 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (IS_ALTERATION (alteration), NULL);
+#line 212 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = gee_hash_map_new (TYPE_DATA_OBJECT, (GBoxedCopyFunc) g_object_ref, g_object_unref, TYPE_ALTERATION, (GBoxedCopyFunc) alteration_ref, alteration_unref, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 212 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ map = G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_MAP, GeeMap);
+#line 213 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = object;
+#line 213 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = alteration;
+#line 213 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ gee_map_set (map, _tmp1_, _tmp2_);
+#line 215 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ result = map;
+#line 215 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return result;
+#line 626 "DataCollection.c"
+}
+
+
+static gboolean data_collection_real_valid_type (DataCollection* self, DataObject* object) {
+ gboolean result = FALSE;
+#line 218 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (object), FALSE);
+#line 219 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ result = TRUE;
+#line 219 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return result;
+#line 638 "DataCollection.c"
+}
+
+
+gboolean data_collection_valid_type (DataCollection* self, DataObject* object) {
+#line 218 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (IS_DATA_COLLECTION (self), FALSE);
+#line 218 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return DATA_COLLECTION_GET_CLASS (self)->valid_type (self, object);
+#line 647 "DataCollection.c"
+}
+
+
+Comparator data_collection_get_comparator (DataCollection* self, void** result_target) {
+ Comparator result = NULL;
+ DataSet* _tmp0_ = NULL;
+ void* _tmp1_ = NULL;
+ Comparator _tmp2_ = NULL;
+ Comparator _tmp3_ = NULL;
+ void* _tmp3__target = NULL;
+#line 222 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (IS_DATA_COLLECTION (self), NULL);
+#line 223 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = self->priv->dataset;
+#line 223 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = data_set_get_comparator (_tmp0_, &_tmp1_);
+#line 223 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp3_ = _tmp2_;
+#line 223 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp3__target = _tmp1_;
+#line 223 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ *result_target = _tmp3__target;
+#line 223 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ result = _tmp3_;
+#line 223 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return result;
+#line 674 "DataCollection.c"
+}
+
+
+ComparatorPredicate data_collection_get_comparator_predicate (DataCollection* self, void** result_target) {
+ ComparatorPredicate result = NULL;
+ DataSet* _tmp0_ = NULL;
+ void* _tmp1_ = NULL;
+ ComparatorPredicate _tmp2_ = NULL;
+ ComparatorPredicate _tmp3_ = NULL;
+ void* _tmp3__target = NULL;
+#line 226 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (IS_DATA_COLLECTION (self), NULL);
+#line 227 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = self->priv->dataset;
+#line 227 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = data_set_get_comparator_predicate (_tmp0_, &_tmp1_);
+#line 227 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp3_ = _tmp2_;
+#line 227 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp3__target = _tmp1_;
+#line 227 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ *result_target = _tmp3__target;
+#line 227 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ result = _tmp3_;
+#line 227 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return result;
+#line 701 "DataCollection.c"
+}
+
+
+static void data_collection_real_set_comparator (DataCollection* self, Comparator comparator, void* comparator_target, ComparatorPredicate predicate, void* predicate_target) {
+ DataSet* _tmp0_ = NULL;
+ Comparator _tmp1_ = NULL;
+ void* _tmp1__target = NULL;
+ ComparatorPredicate _tmp2_ = NULL;
+ void* _tmp2__target = NULL;
+#line 231 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = self->priv->dataset;
+#line 231 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = comparator;
+#line 231 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1__target = comparator_target;
+#line 231 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = predicate;
+#line 231 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2__target = predicate_target;
+#line 231 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_set_set_comparator (_tmp0_, _tmp1_, _tmp1__target, _tmp2_, _tmp2__target);
+#line 232 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_notify_ordering_changed (self);
+#line 725 "DataCollection.c"
+}
+
+
+void data_collection_set_comparator (DataCollection* self, Comparator comparator, void* comparator_target, ComparatorPredicate predicate, void* predicate_target) {
+#line 230 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_DATA_COLLECTION (self));
+#line 230 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ DATA_COLLECTION_GET_CLASS (self)->set_comparator (self, comparator, comparator_target, predicate, predicate_target);
+#line 734 "DataCollection.c"
+}
+
+
+static void data_collection_real_reset_comparator (DataCollection* self) {
+ DataSet* _tmp0_ = NULL;
+#line 237 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = self->priv->dataset;
+#line 237 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_set_reset_comparator (_tmp0_);
+#line 238 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_notify_ordering_changed (self);
+#line 746 "DataCollection.c"
+}
+
+
+void data_collection_reset_comparator (DataCollection* self) {
+#line 236 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_DATA_COLLECTION (self));
+#line 236 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ DATA_COLLECTION_GET_CLASS (self)->reset_comparator (self);
+#line 755 "DataCollection.c"
+}
+
+
+static GeeCollection* data_collection_real_get_all (DataCollection* self) {
+ GeeCollection* result = NULL;
+ DataSet* _tmp0_ = NULL;
+ GeeList* _tmp1_ = NULL;
+#line 242 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = self->priv->dataset;
+#line 242 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = data_set_get_all (_tmp0_);
+#line 242 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_COLLECTION, GeeCollection);
+#line 242 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return result;
+#line 771 "DataCollection.c"
+}
+
+
+GeeCollection* data_collection_get_all (DataCollection* self) {
+#line 241 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (IS_DATA_COLLECTION (self), NULL);
+#line 241 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return DATA_COLLECTION_GET_CLASS (self)->get_all (self);
+#line 780 "DataCollection.c"
+}
+
+
+DataSet* data_collection_get_dataset_copy (DataCollection* self) {
+ DataSet* result = NULL;
+ DataSet* _tmp0_ = NULL;
+ DataSet* _tmp1_ = NULL;
+#line 245 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (IS_DATA_COLLECTION (self), NULL);
+#line 246 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = self->priv->dataset;
+#line 246 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = data_set_copy (_tmp0_);
+#line 246 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ result = _tmp1_;
+#line 246 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return result;
+#line 798 "DataCollection.c"
+}
+
+
+static gint data_collection_real_get_count (DataCollection* self) {
+ gint result = 0;
+ DataSet* _tmp0_ = NULL;
+ gint _tmp1_ = 0;
+#line 250 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = self->priv->dataset;
+#line 250 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = data_set_get_count (_tmp0_);
+#line 250 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ result = _tmp1_;
+#line 250 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return result;
+#line 814 "DataCollection.c"
+}
+
+
+gint data_collection_get_count (DataCollection* self) {
+#line 249 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (IS_DATA_COLLECTION (self), 0);
+#line 249 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return DATA_COLLECTION_GET_CLASS (self)->get_count (self);
+#line 823 "DataCollection.c"
+}
+
+
+static DataObject* data_collection_real_get_at (DataCollection* self, gint index) {
+ DataObject* result = NULL;
+ DataSet* _tmp0_ = NULL;
+ gint _tmp1_ = 0;
+ DataObject* _tmp2_ = NULL;
+#line 254 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = self->priv->dataset;
+#line 254 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = index;
+#line 254 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = data_set_get_at (_tmp0_, _tmp1_);
+#line 254 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ result = _tmp2_;
+#line 254 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return result;
+#line 842 "DataCollection.c"
+}
+
+
+DataObject* data_collection_get_at (DataCollection* self, gint index) {
+#line 253 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (IS_DATA_COLLECTION (self), NULL);
+#line 253 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return DATA_COLLECTION_GET_CLASS (self)->get_at (self, index);
+#line 851 "DataCollection.c"
+}
+
+
+static gint data_collection_real_index_of (DataCollection* self, DataObject* object) {
+ gint result = 0;
+ DataSet* _tmp0_ = NULL;
+ DataObject* _tmp1_ = NULL;
+ gint _tmp2_ = 0;
+#line 257 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (object), 0);
+#line 258 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = self->priv->dataset;
+#line 258 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = object;
+#line 258 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = data_set_index_of (_tmp0_, _tmp1_);
+#line 258 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ result = _tmp2_;
+#line 258 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return result;
+#line 872 "DataCollection.c"
+}
+
+
+gint data_collection_index_of (DataCollection* self, DataObject* object) {
+#line 257 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (IS_DATA_COLLECTION (self), 0);
+#line 257 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return DATA_COLLECTION_GET_CLASS (self)->index_of (self, object);
+#line 881 "DataCollection.c"
+}
+
+
+static gboolean data_collection_real_contains (DataCollection* self, DataObject* object) {
+ gboolean result = FALSE;
+ DataObject* _tmp0_ = NULL;
+ gboolean _tmp1_ = FALSE;
+#line 261 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (object), FALSE);
+#line 262 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = object;
+#line 262 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = data_collection_internal_contains (self, _tmp0_);
+#line 262 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ result = _tmp1_;
+#line 262 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return result;
+#line 899 "DataCollection.c"
+}
+
+
+gboolean data_collection_contains (DataCollection* self, DataObject* object) {
+#line 261 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (IS_DATA_COLLECTION (self), FALSE);
+#line 261 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return DATA_COLLECTION_GET_CLASS (self)->contains (self, object);
+#line 908 "DataCollection.c"
+}
+
+
+static gboolean data_collection_internal_contains (DataCollection* self, DataObject* object) {
+ gboolean result = FALSE;
+ DataSet* _tmp0_ = NULL;
+ DataObject* _tmp1_ = NULL;
+ gboolean _tmp2_ = FALSE;
+ DataObject* _tmp3_ = NULL;
+ DataCollection* _tmp4_ = NULL;
+ DataCollection* _tmp5_ = NULL;
+#line 267 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (IS_DATA_COLLECTION (self), FALSE);
+#line 267 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (object), FALSE);
+#line 268 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = self->priv->dataset;
+#line 268 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = object;
+#line 268 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = data_set_contains (_tmp0_, _tmp1_);
+#line 268 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (!_tmp2_) {
+#line 269 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ result = FALSE;
+#line 269 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return result;
+#line 936 "DataCollection.c"
+ }
+#line 271 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp3_ = object;
+#line 271 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp4_ = data_object_get_membership (_tmp3_);
+#line 271 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp5_ = _tmp4_;
+#line 271 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _vala_assert (_tmp5_ == self, "object.get_membership() == this");
+#line 271 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _data_collection_unref0 (_tmp5_);
+#line 273 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ result = TRUE;
+#line 273 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return result;
+#line 952 "DataCollection.c"
+}
+
+
+static void data_collection_internal_add (DataCollection* self, DataObject* object) {
+ DataObject* _tmp0_ = NULL;
+ gboolean _tmp1_ = FALSE;
+ DataObject* _tmp2_ = NULL;
+ gint64 _tmp3_ = 0LL;
+ gboolean added = FALSE;
+ DataSet* _tmp4_ = NULL;
+ DataObject* _tmp5_ = NULL;
+ gboolean _tmp6_ = FALSE;
+#line 276 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_DATA_COLLECTION (self));
+#line 276 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_DATA_OBJECT (object));
+#line 277 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = object;
+#line 277 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = data_collection_valid_type (self, _tmp0_);
+#line 277 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _vala_assert (_tmp1_, "valid_type(object)");
+#line 279 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = object;
+#line 279 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp3_ = self->priv->object_ordinal_generator;
+#line 279 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self->priv->object_ordinal_generator = _tmp3_ + 1;
+#line 279 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_object_internal_set_membership (_tmp2_, self, _tmp3_);
+#line 281 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp4_ = self->priv->dataset;
+#line 281 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp5_ = object;
+#line 281 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp6_ = data_set_add (_tmp4_, _tmp5_);
+#line 281 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ added = _tmp6_;
+#line 282 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _vala_assert (added, "added");
+#line 993 "DataCollection.c"
+}
+
+
+static void data_collection_internal_add_many (DataCollection* self, GeeList* objects, ProgressMonitor monitor, void* monitor_target) {
+ gint count = 0;
+ GeeList* _tmp0_ = NULL;
+ gint _tmp1_ = 0;
+ gint _tmp2_ = 0;
+ gboolean added = FALSE;
+ DataSet* _tmp18_ = NULL;
+ GeeList* _tmp19_ = NULL;
+ gboolean _tmp20_ = FALSE;
+#line 285 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_DATA_COLLECTION (self));
+#line 285 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (GEE_IS_LIST (objects));
+#line 286 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = objects;
+#line 286 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 286 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = _tmp1_;
+#line 286 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ count = _tmp2_;
+#line 1018 "DataCollection.c"
+ {
+ gint ctr = 0;
+#line 287 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ctr = 0;
+#line 1023 "DataCollection.c"
+ {
+ gboolean _tmp3_ = FALSE;
+#line 287 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp3_ = TRUE;
+#line 287 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ while (TRUE) {
+#line 1030 "DataCollection.c"
+ gint _tmp5_ = 0;
+ gint _tmp6_ = 0;
+ DataObject* object = NULL;
+ GeeList* _tmp7_ = NULL;
+ gint _tmp8_ = 0;
+ gpointer _tmp9_ = NULL;
+ DataObject* _tmp10_ = NULL;
+ gboolean _tmp11_ = FALSE;
+ DataObject* _tmp12_ = NULL;
+ gint64 _tmp13_ = 0LL;
+ ProgressMonitor _tmp14_ = NULL;
+ void* _tmp14__target = NULL;
+#line 287 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (!_tmp3_) {
+#line 1045 "DataCollection.c"
+ gint _tmp4_ = 0;
+#line 287 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp4_ = ctr;
+#line 287 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ctr = _tmp4_ + 1;
+#line 1051 "DataCollection.c"
+ }
+#line 287 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp3_ = FALSE;
+#line 287 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp5_ = ctr;
+#line 287 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp6_ = count;
+#line 287 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (!(_tmp5_ < _tmp6_)) {
+#line 287 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ break;
+#line 1063 "DataCollection.c"
+ }
+#line 288 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp7_ = objects;
+#line 288 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp8_ = ctr;
+#line 288 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp9_ = gee_list_get (_tmp7_, _tmp8_);
+#line 288 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ object = (DataObject*) _tmp9_;
+#line 289 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp10_ = object;
+#line 289 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp11_ = data_collection_valid_type (self, _tmp10_);
+#line 289 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _vala_assert (_tmp11_, "valid_type(object)");
+#line 291 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp12_ = object;
+#line 291 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp13_ = self->priv->object_ordinal_generator;
+#line 291 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self->priv->object_ordinal_generator = _tmp13_ + 1;
+#line 291 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_object_internal_set_membership (_tmp12_, self, _tmp13_);
+#line 293 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp14_ = monitor;
+#line 293 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp14__target = monitor_target;
+#line 293 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (_tmp14_ != NULL) {
+#line 1093 "DataCollection.c"
+ ProgressMonitor _tmp15_ = NULL;
+ void* _tmp15__target = NULL;
+ gint _tmp16_ = 0;
+ gint _tmp17_ = 0;
+#line 294 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp15_ = monitor;
+#line 294 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp15__target = monitor_target;
+#line 294 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp16_ = ctr;
+#line 294 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp17_ = count;
+#line 294 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp15_ ((guint64) _tmp16_, (guint64) _tmp17_, TRUE, _tmp15__target);
+#line 1108 "DataCollection.c"
+ }
+#line 287 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (object);
+#line 1112 "DataCollection.c"
+ }
+ }
+ }
+#line 297 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp18_ = self->priv->dataset;
+#line 297 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp19_ = objects;
+#line 297 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp20_ = data_set_add_many (_tmp18_, G_TYPE_CHECK_INSTANCE_CAST (_tmp19_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 297 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ added = _tmp20_;
+#line 298 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _vala_assert (added, "added");
+#line 1126 "DataCollection.c"
+}
+
+
+static void data_collection_internal_remove (DataCollection* self, DataObject* object) {
+ gboolean removed = FALSE;
+ DataSet* _tmp0_ = NULL;
+ DataObject* _tmp1_ = NULL;
+ gboolean _tmp2_ = FALSE;
+ DataObject* _tmp3_ = NULL;
+#line 301 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_DATA_COLLECTION (self));
+#line 301 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_DATA_OBJECT (object));
+#line 302 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = self->priv->dataset;
+#line 302 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = object;
+#line 302 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = data_set_remove (_tmp0_, _tmp1_);
+#line 302 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ removed = _tmp2_;
+#line 303 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _vala_assert (removed, "removed");
+#line 305 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp3_ = object;
+#line 305 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_object_internal_clear_membership (_tmp3_);
+#line 1154 "DataCollection.c"
+}
+
+
+static gboolean data_collection_real_add (DataCollection* self, DataObject* object) {
+ gboolean result = FALSE;
+ DataObject* _tmp0_ = NULL;
+ gboolean _tmp1_ = FALSE;
+ DataObject* _tmp7_ = NULL;
+ GeeCollection* added = NULL;
+ DataObject* _tmp8_ = NULL;
+ GeeCollection* _tmp9_ = NULL;
+ GeeCollection* _tmp10_ = NULL;
+ GeeCollection* _tmp11_ = NULL;
+ DataObject* _tmp12_ = NULL;
+#line 309 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (object), FALSE);
+#line 310 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = object;
+#line 310 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = data_collection_internal_contains (self, _tmp0_);
+#line 310 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (_tmp1_) {
+#line 1177 "DataCollection.c"
+ gchar* _tmp2_ = NULL;
+ gchar* _tmp3_ = NULL;
+ DataObject* _tmp4_ = NULL;
+ gchar* _tmp5_ = NULL;
+ gchar* _tmp6_ = NULL;
+#line 311 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = data_collection_to_string (self);
+#line 311 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp3_ = _tmp2_;
+#line 311 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp4_ = object;
+#line 311 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp5_ = data_object_to_string (_tmp4_);
+#line 311 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp6_ = _tmp5_;
+#line 311 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_debug ("DataCollection.vala:311: %s cannot add %s: already present", _tmp3_, _tmp6_);
+#line 311 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_free0 (_tmp6_);
+#line 311 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_free0 (_tmp3_);
+#line 313 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ result = FALSE;
+#line 313 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return result;
+#line 1203 "DataCollection.c"
+ }
+#line 316 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp7_ = object;
+#line 316 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_internal_add (self, _tmp7_);
+#line 319 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp8_ = object;
+#line 319 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp9_ = data_collection_get_singleton (_tmp8_);
+#line 319 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ added = _tmp9_;
+#line 320 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp10_ = added;
+#line 320 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_notify_items_added (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 321 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp11_ = added;
+#line 321 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_notify_contents_altered (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp11_, GEE_TYPE_ITERABLE, GeeIterable), NULL);
+#line 324 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp12_ = object;
+#line 324 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_object_notify_membership_changed (_tmp12_, self);
+#line 326 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ result = TRUE;
+#line 326 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (added);
+#line 326 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return result;
+#line 1233 "DataCollection.c"
+}
+
+
+gboolean data_collection_add (DataCollection* self, DataObject* object) {
+#line 309 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (IS_DATA_COLLECTION (self), FALSE);
+#line 309 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return DATA_COLLECTION_GET_CLASS (self)->add (self, object);
+#line 1242 "DataCollection.c"
+}
+
+
+static GeeCollection* data_collection_real_add_many (DataCollection* self, GeeCollection* objects, ProgressMonitor monitor, void* monitor_target) {
+ GeeCollection* result = NULL;
+ GeeArrayList* added = NULL;
+ GeeArrayList* _tmp0_ = NULL;
+ gint count = 0;
+ GeeArrayList* _tmp16_ = NULL;
+ gint _tmp17_ = 0;
+ gint _tmp18_ = 0;
+ gint _tmp19_ = 0;
+ GeeArrayList* _tmp20_ = NULL;
+ ProgressMonitor _tmp21_ = NULL;
+ void* _tmp21__target = NULL;
+ GeeArrayList* _tmp22_ = NULL;
+ GeeArrayList* _tmp23_ = NULL;
+#line 330 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (GEE_IS_COLLECTION (objects), NULL);
+#line 332 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = gee_array_list_new (TYPE_DATA_OBJECT, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 332 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ added = _tmp0_;
+#line 1266 "DataCollection.c"
+ {
+ GeeIterator* _object_it = NULL;
+ GeeCollection* _tmp1_ = NULL;
+ GeeIterator* _tmp2_ = NULL;
+#line 333 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = objects;
+#line 333 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 333 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _object_it = _tmp2_;
+#line 333 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ while (TRUE) {
+#line 1279 "DataCollection.c"
+ GeeIterator* _tmp3_ = NULL;
+ gboolean _tmp4_ = FALSE;
+ DataObject* object = NULL;
+ GeeIterator* _tmp5_ = NULL;
+ gpointer _tmp6_ = NULL;
+ DataObject* _tmp7_ = NULL;
+ gboolean _tmp8_ = FALSE;
+ GeeArrayList* _tmp14_ = NULL;
+ DataObject* _tmp15_ = NULL;
+#line 333 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp3_ = _object_it;
+#line 333 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp4_ = gee_iterator_next (_tmp3_);
+#line 333 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (!_tmp4_) {
+#line 333 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ break;
+#line 1297 "DataCollection.c"
+ }
+#line 333 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp5_ = _object_it;
+#line 333 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp6_ = gee_iterator_get (_tmp5_);
+#line 333 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ object = (DataObject*) _tmp6_;
+#line 334 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp7_ = object;
+#line 334 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp8_ = data_collection_internal_contains (self, _tmp7_);
+#line 334 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (_tmp8_) {
+#line 1311 "DataCollection.c"
+ gchar* _tmp9_ = NULL;
+ gchar* _tmp10_ = NULL;
+ DataObject* _tmp11_ = NULL;
+ gchar* _tmp12_ = NULL;
+ gchar* _tmp13_ = NULL;
+#line 335 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp9_ = data_collection_to_string (self);
+#line 335 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp10_ = _tmp9_;
+#line 335 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp11_ = object;
+#line 335 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp12_ = data_object_to_string (_tmp11_);
+#line 335 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp13_ = _tmp12_;
+#line 335 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_debug ("DataCollection.vala:335: %s cannot add %s: already present", _tmp10_, _tmp13_);
+#line 335 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_free0 (_tmp13_);
+#line 335 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_free0 (_tmp10_);
+#line 337 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (object);
+#line 337 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ continue;
+#line 1337 "DataCollection.c"
+ }
+#line 340 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp14_ = added;
+#line 340 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp15_ = object;
+#line 340 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp15_);
+#line 333 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (object);
+#line 1347 "DataCollection.c"
+ }
+#line 333 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (_object_it);
+#line 1351 "DataCollection.c"
+ }
+#line 343 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp16_ = added;
+#line 343 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp17_ = gee_abstract_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp16_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 343 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp18_ = _tmp17_;
+#line 343 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ count = _tmp18_;
+#line 344 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp19_ = count;
+#line 344 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (_tmp19_ == 0) {
+#line 345 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (added, GEE_TYPE_COLLECTION, GeeCollection);
+#line 345 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return result;
+#line 1369 "DataCollection.c"
+ }
+#line 347 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp20_ = added;
+#line 347 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp21_ = monitor;
+#line 347 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp21__target = monitor_target;
+#line 347 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_internal_add_many (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp20_, GEE_TYPE_LIST, GeeList), _tmp21_, _tmp21__target);
+#line 350 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp22_ = added;
+#line 350 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_notify_items_added (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp22_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 351 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp23_ = added;
+#line 351 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_notify_contents_altered (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp23_, GEE_TYPE_ITERABLE, GeeIterable), NULL);
+#line 1387 "DataCollection.c"
+ {
+ gint ctr = 0;
+#line 354 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ctr = 0;
+#line 1392 "DataCollection.c"
+ {
+ gboolean _tmp24_ = FALSE;
+#line 354 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp24_ = TRUE;
+#line 354 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ while (TRUE) {
+#line 1399 "DataCollection.c"
+ gint _tmp26_ = 0;
+ gint _tmp27_ = 0;
+ GeeArrayList* _tmp28_ = NULL;
+ gint _tmp29_ = 0;
+ gpointer _tmp30_ = NULL;
+ DataObject* _tmp31_ = NULL;
+#line 354 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (!_tmp24_) {
+#line 1408 "DataCollection.c"
+ gint _tmp25_ = 0;
+#line 354 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp25_ = ctr;
+#line 354 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ctr = _tmp25_ + 1;
+#line 1414 "DataCollection.c"
+ }
+#line 354 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp24_ = FALSE;
+#line 354 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp26_ = ctr;
+#line 354 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp27_ = count;
+#line 354 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (!(_tmp26_ < _tmp27_)) {
+#line 354 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ break;
+#line 1426 "DataCollection.c"
+ }
+#line 355 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp28_ = added;
+#line 355 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp29_ = ctr;
+#line 355 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp30_ = gee_abstract_list_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp28_, GEE_TYPE_ABSTRACT_LIST, GeeAbstractList), _tmp29_);
+#line 355 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp31_ = (DataObject*) _tmp30_;
+#line 355 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_object_notify_membership_changed (_tmp31_, self);
+#line 355 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (_tmp31_);
+#line 1440 "DataCollection.c"
+ }
+ }
+ }
+#line 357 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (added, GEE_TYPE_COLLECTION, GeeCollection);
+#line 357 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return result;
+#line 1448 "DataCollection.c"
+}
+
+
+GeeCollection* data_collection_add_many (DataCollection* self, GeeCollection* objects, ProgressMonitor monitor, void* monitor_target) {
+#line 330 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (IS_DATA_COLLECTION (self), NULL);
+#line 330 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return DATA_COLLECTION_GET_CLASS (self)->add_many (self, objects, monitor, monitor_target);
+#line 1457 "DataCollection.c"
+}
+
+
+Marker* data_collection_start_marking (DataCollection* self) {
+ Marker* result = NULL;
+ DataCollectionMarkerImpl* _tmp0_ = NULL;
+#line 361 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (IS_DATA_COLLECTION (self), NULL);
+#line 362 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = data_collection_marker_impl_new (self);
+#line 362 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_MARKER, Marker);
+#line 362 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return result;
+#line 1472 "DataCollection.c"
+}
+
+
+Marker* data_collection_mark (DataCollection* self, DataObject* object) {
+ Marker* result = NULL;
+ Marker* marker = NULL;
+ DataCollectionMarkerImpl* _tmp0_ = NULL;
+ DataObject* _tmp1_ = NULL;
+#line 366 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (IS_DATA_COLLECTION (self), NULL);
+#line 366 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (object), NULL);
+#line 367 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = data_collection_marker_impl_new (self);
+#line 367 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ marker = G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_MARKER, Marker);
+#line 368 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = object;
+#line 368 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ marker_mark (marker, _tmp1_);
+#line 370 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ result = marker;
+#line 370 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return result;
+#line 1497 "DataCollection.c"
+}
+
+
+Marker* data_collection_mark_many (DataCollection* self, GeeCollection* objects) {
+ Marker* result = NULL;
+ Marker* marker = NULL;
+ DataCollectionMarkerImpl* _tmp0_ = NULL;
+ GeeCollection* _tmp1_ = NULL;
+#line 374 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (IS_DATA_COLLECTION (self), NULL);
+#line 374 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (GEE_IS_COLLECTION (objects), NULL);
+#line 375 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = data_collection_marker_impl_new (self);
+#line 375 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ marker = G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_MARKER, Marker);
+#line 376 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = objects;
+#line 376 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ marker_mark_many (marker, _tmp1_);
+#line 378 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ result = marker;
+#line 378 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return result;
+#line 1522 "DataCollection.c"
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+#line 385 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return self ? g_object_ref (self) : NULL;
+#line 1529 "DataCollection.c"
+}
+
+
+void data_collection_act_on_marked (DataCollection* self, Marker* m, MarkedAction action, void* action_target, ProgressMonitor monitor, void* monitor_target, GObject* user) {
+ DataCollectionMarkerImpl* marker = NULL;
+ Marker* _tmp0_ = NULL;
+ DataCollectionMarkerImpl* _tmp1_ = NULL;
+ DataCollectionMarkerImpl* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+ DataCollectionMarkerImpl* _tmp4_ = NULL;
+ guint64 count = 0ULL;
+ guint64 total = 0ULL;
+ DataCollectionMarkerImpl* _tmp5_ = NULL;
+ GeeHashSet* _tmp6_ = NULL;
+ gint _tmp7_ = 0;
+ gint _tmp8_ = 0;
+ DataCollectionMarkerImpl* _tmp31_ = NULL;
+#line 383 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_DATA_COLLECTION (self));
+#line 383 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_MARKER (m));
+#line 383 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail ((user == NULL) || G_IS_OBJECT (user));
+#line 385 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = m;
+#line 385 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, DATA_COLLECTION_TYPE_MARKER_IMPL, DataCollectionMarkerImpl));
+#line 385 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ marker = _tmp1_;
+#line 387 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = marker;
+#line 387 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp3_ = data_collection_marker_impl_is_valid (_tmp2_, self);
+#line 387 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _vala_assert (_tmp3_, "marker.is_valid(this)");
+#line 390 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp4_ = marker;
+#line 390 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_marker_impl_freeze (_tmp4_);
+#line 392 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ count = (guint64) 0;
+#line 393 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp5_ = marker;
+#line 393 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp6_ = _tmp5_->marked;
+#line 393 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp7_ = gee_abstract_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 393 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp8_ = _tmp7_;
+#line 393 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ total = (guint64) _tmp8_;
+#line 1581 "DataCollection.c"
+ {
+ GeeIterator* _object_it = NULL;
+ DataCollectionMarkerImpl* _tmp9_ = NULL;
+ GeeHashSet* _tmp10_ = NULL;
+ GeeIterator* _tmp11_ = NULL;
+#line 396 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp9_ = marker;
+#line 396 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp10_ = _tmp9_->marked;
+#line 396 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp11_ = gee_abstract_collection_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection));
+#line 396 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _object_it = _tmp11_;
+#line 396 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ while (TRUE) {
+#line 1597 "DataCollection.c"
+ GeeIterator* _tmp12_ = NULL;
+ gboolean _tmp13_ = FALSE;
+ DataObject* object = NULL;
+ GeeIterator* _tmp14_ = NULL;
+ gpointer _tmp15_ = NULL;
+ DataObject* _tmp16_ = NULL;
+ gboolean _tmp17_ = FALSE;
+ MarkedAction _tmp21_ = NULL;
+ void* _tmp21__target = NULL;
+ DataObject* _tmp22_ = NULL;
+ GObject* _tmp23_ = NULL;
+ gboolean _tmp24_ = FALSE;
+ ProgressMonitor _tmp25_ = NULL;
+ void* _tmp25__target = NULL;
+#line 396 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp12_ = _object_it;
+#line 396 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp13_ = gee_iterator_next (_tmp12_);
+#line 396 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (!_tmp13_) {
+#line 396 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ break;
+#line 1620 "DataCollection.c"
+ }
+#line 396 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp14_ = _object_it;
+#line 396 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp15_ = gee_iterator_get (_tmp14_);
+#line 396 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ object = (DataObject*) _tmp15_;
+#line 398 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp16_ = object;
+#line 398 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp17_ = data_collection_internal_contains (self, _tmp16_);
+#line 398 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (!_tmp17_) {
+#line 1634 "DataCollection.c"
+ DataObject* _tmp18_ = NULL;
+ gchar* _tmp19_ = NULL;
+ gchar* _tmp20_ = NULL;
+#line 399 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp18_ = object;
+#line 399 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp19_ = data_object_to_string (_tmp18_);
+#line 399 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp20_ = _tmp19_;
+#line 399 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_warning ("DataCollection.vala:399: act_on_marked: marker holding ref to unknown " \
+"%s", _tmp20_);
+#line 399 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_free0 (_tmp20_);
+#line 401 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (object);
+#line 401 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ continue;
+#line 1652 "DataCollection.c"
+ }
+#line 404 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp21_ = action;
+#line 404 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp21__target = action_target;
+#line 404 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp22_ = object;
+#line 404 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp23_ = user;
+#line 404 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp24_ = _tmp21_ (_tmp22_, _tmp23_, _tmp21__target);
+#line 404 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (!_tmp24_) {
+#line 405 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (object);
+#line 405 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ break;
+#line 1670 "DataCollection.c"
+ }
+#line 407 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp25_ = monitor;
+#line 407 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp25__target = monitor_target;
+#line 407 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (_tmp25_ != NULL) {
+#line 1678 "DataCollection.c"
+ ProgressMonitor _tmp26_ = NULL;
+ void* _tmp26__target = NULL;
+ guint64 _tmp27_ = 0ULL;
+ guint64 _tmp28_ = 0ULL;
+ guint64 _tmp29_ = 0ULL;
+ gboolean _tmp30_ = FALSE;
+#line 408 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp26_ = monitor;
+#line 408 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp26__target = monitor_target;
+#line 408 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp27_ = count;
+#line 408 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ count = _tmp27_ + 1;
+#line 408 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp28_ = count;
+#line 408 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp29_ = total;
+#line 408 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp30_ = _tmp26_ (_tmp28_, _tmp29_, TRUE, _tmp26__target);
+#line 408 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (!_tmp30_) {
+#line 409 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (object);
+#line 409 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ break;
+#line 1705 "DataCollection.c"
+ }
+ }
+#line 396 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (object);
+#line 1710 "DataCollection.c"
+ }
+#line 396 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (_object_it);
+#line 1714 "DataCollection.c"
+ }
+#line 414 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp31_ = marker;
+#line 414 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_marker_impl_finished (_tmp31_);
+#line 383 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (marker);
+#line 1722 "DataCollection.c"
+}
+
+
+static void data_collection_real_remove_marked (DataCollection* self, Marker* m) {
+ DataCollectionMarkerImpl* marker = NULL;
+ Marker* _tmp0_ = NULL;
+ DataCollectionMarkerImpl* _tmp1_ = NULL;
+ DataCollectionMarkerImpl* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+ DataCollectionMarkerImpl* _tmp4_ = NULL;
+ GeeArrayList* skipped = NULL;
+ GeeArrayList* _tmp22_ = NULL;
+ DataCollectionMarkerImpl* _tmp26_ = NULL;
+ GeeHashSet* _tmp27_ = NULL;
+ gint _tmp28_ = 0;
+ gint _tmp29_ = 0;
+ DataCollectionMarkerImpl* _tmp42_ = NULL;
+#line 419 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_MARKER (m));
+#line 420 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = m;
+#line 420 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, DATA_COLLECTION_TYPE_MARKER_IMPL, DataCollectionMarkerImpl));
+#line 420 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ marker = _tmp1_;
+#line 422 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = marker;
+#line 422 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp3_ = data_collection_marker_impl_is_valid (_tmp2_, self);
+#line 422 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _vala_assert (_tmp3_, "marker.is_valid(this)");
+#line 425 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp4_ = marker;
+#line 425 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_marker_impl_freeze (_tmp4_);
+#line 428 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ skipped = NULL;
+#line 1760 "DataCollection.c"
+ {
+ GeeIterator* _object_it = NULL;
+ DataCollectionMarkerImpl* _tmp5_ = NULL;
+ GeeHashSet* _tmp6_ = NULL;
+ GeeIterator* _tmp7_ = NULL;
+#line 429 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp5_ = marker;
+#line 429 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp6_ = _tmp5_->marked;
+#line 429 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp7_ = gee_abstract_collection_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection));
+#line 429 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _object_it = _tmp7_;
+#line 429 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ while (TRUE) {
+#line 1776 "DataCollection.c"
+ GeeIterator* _tmp8_ = NULL;
+ gboolean _tmp9_ = FALSE;
+ DataObject* object = NULL;
+ GeeIterator* _tmp10_ = NULL;
+ gpointer _tmp11_ = NULL;
+ DataObject* _tmp12_ = NULL;
+ gboolean _tmp13_ = FALSE;
+ DataObject* _tmp21_ = NULL;
+#line 429 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp8_ = _object_it;
+#line 429 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp9_ = gee_iterator_next (_tmp8_);
+#line 429 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (!_tmp9_) {
+#line 429 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ break;
+#line 1793 "DataCollection.c"
+ }
+#line 429 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp10_ = _object_it;
+#line 429 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp11_ = gee_iterator_get (_tmp10_);
+#line 429 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ object = (DataObject*) _tmp11_;
+#line 431 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp12_ = object;
+#line 431 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp13_ = data_collection_internal_contains (self, _tmp12_);
+#line 431 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (!_tmp13_) {
+#line 1807 "DataCollection.c"
+ DataObject* _tmp14_ = NULL;
+ gchar* _tmp15_ = NULL;
+ gchar* _tmp16_ = NULL;
+ GeeArrayList* _tmp17_ = NULL;
+ GeeArrayList* _tmp19_ = NULL;
+ DataObject* _tmp20_ = NULL;
+#line 432 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp14_ = object;
+#line 432 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp15_ = data_object_to_string (_tmp14_);
+#line 432 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp16_ = _tmp15_;
+#line 432 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_warning ("DataCollection.vala:432: remove_marked: marker holding ref to unknown " \
+"%s", _tmp16_);
+#line 432 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_free0 (_tmp16_);
+#line 434 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp17_ = skipped;
+#line 434 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (_tmp17_ == NULL) {
+#line 1828 "DataCollection.c"
+ GeeArrayList* _tmp18_ = NULL;
+#line 435 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp18_ = gee_array_list_new (TYPE_DATA_OBJECT, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 435 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (skipped);
+#line 435 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ skipped = _tmp18_;
+#line 1836 "DataCollection.c"
+ }
+#line 437 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp19_ = skipped;
+#line 437 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp20_ = object;
+#line 437 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp19_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp20_);
+#line 439 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (object);
+#line 439 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ continue;
+#line 1848 "DataCollection.c"
+ }
+#line 442 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp21_ = object;
+#line 442 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_internal_remove (self, _tmp21_);
+#line 429 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (object);
+#line 1856 "DataCollection.c"
+ }
+#line 429 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (_object_it);
+#line 1860 "DataCollection.c"
+ }
+#line 445 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp22_ = skipped;
+#line 445 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (_tmp22_ != NULL) {
+#line 1866 "DataCollection.c"
+ DataCollectionMarkerImpl* _tmp23_ = NULL;
+ GeeHashSet* _tmp24_ = NULL;
+ GeeArrayList* _tmp25_ = NULL;
+#line 446 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp23_ = marker;
+#line 446 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp24_ = _tmp23_->marked;
+#line 446 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp25_ = skipped;
+#line 446 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ gee_collection_remove_all (G_TYPE_CHECK_INSTANCE_CAST (_tmp24_, GEE_TYPE_COLLECTION, GeeCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp25_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 1878 "DataCollection.c"
+ }
+#line 449 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp26_ = marker;
+#line 449 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp27_ = _tmp26_->marked;
+#line 449 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp28_ = gee_abstract_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp27_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 449 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp29_ = _tmp28_;
+#line 449 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (_tmp29_ > 0) {
+#line 1890 "DataCollection.c"
+ DataCollectionMarkerImpl* _tmp30_ = NULL;
+ GeeHashSet* _tmp31_ = NULL;
+ DataCollectionMarkerImpl* _tmp32_ = NULL;
+ GeeHashSet* _tmp33_ = NULL;
+#line 450 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp30_ = marker;
+#line 450 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp31_ = _tmp30_->marked;
+#line 450 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_notify_items_removed (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp31_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 451 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp32_ = marker;
+#line 451 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp33_ = _tmp32_->marked;
+#line 451 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_notify_contents_altered (self, NULL, G_TYPE_CHECK_INSTANCE_CAST (_tmp33_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 1907 "DataCollection.c"
+ {
+ GeeIterator* _object_it = NULL;
+ DataCollectionMarkerImpl* _tmp34_ = NULL;
+ GeeHashSet* _tmp35_ = NULL;
+ GeeIterator* _tmp36_ = NULL;
+#line 454 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp34_ = marker;
+#line 454 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp35_ = _tmp34_->marked;
+#line 454 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp36_ = gee_abstract_collection_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp35_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection));
+#line 454 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _object_it = _tmp36_;
+#line 454 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ while (TRUE) {
+#line 1923 "DataCollection.c"
+ GeeIterator* _tmp37_ = NULL;
+ gboolean _tmp38_ = FALSE;
+ DataObject* object = NULL;
+ GeeIterator* _tmp39_ = NULL;
+ gpointer _tmp40_ = NULL;
+ DataObject* _tmp41_ = NULL;
+#line 454 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp37_ = _object_it;
+#line 454 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp38_ = gee_iterator_next (_tmp37_);
+#line 454 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (!_tmp38_) {
+#line 454 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ break;
+#line 1938 "DataCollection.c"
+ }
+#line 454 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp39_ = _object_it;
+#line 454 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp40_ = gee_iterator_get (_tmp39_);
+#line 454 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ object = (DataObject*) _tmp40_;
+#line 455 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp41_ = object;
+#line 455 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_object_notify_membership_changed (_tmp41_, NULL);
+#line 454 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (object);
+#line 1952 "DataCollection.c"
+ }
+#line 454 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (_object_it);
+#line 1956 "DataCollection.c"
+ }
+ }
+#line 459 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp42_ = marker;
+#line 459 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_marker_impl_finished (_tmp42_);
+#line 419 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (skipped);
+#line 419 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (marker);
+#line 1967 "DataCollection.c"
+}
+
+
+void data_collection_remove_marked (DataCollection* self, Marker* m) {
+#line 419 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_DATA_COLLECTION (self));
+#line 419 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ DATA_COLLECTION_GET_CLASS (self)->remove_marked (self, m);
+#line 1976 "DataCollection.c"
+}
+
+
+static void data_collection_real_clear (DataCollection* self) {
+ DataSet* _tmp0_ = NULL;
+ gint _tmp1_ = 0;
+ GeeArrayList* removed = NULL;
+ GeeArrayList* _tmp2_ = NULL;
+ GeeArrayList* _tmp12_ = NULL;
+ GeeArrayList* _tmp13_ = NULL;
+#line 463 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = self->priv->dataset;
+#line 463 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = data_set_get_count (_tmp0_);
+#line 463 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (_tmp1_ == 0) {
+#line 464 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return;
+#line 1995 "DataCollection.c"
+ }
+#line 468 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = gee_array_list_new (TYPE_DATA_OBJECT, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 468 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ removed = _tmp2_;
+#line 2001 "DataCollection.c"
+ {
+ gboolean _tmp3_ = FALSE;
+#line 469 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp3_ = TRUE;
+#line 469 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ while (TRUE) {
+#line 2008 "DataCollection.c"
+ DataObject* object = NULL;
+ DataSet* _tmp6_ = NULL;
+ DataObject* _tmp7_ = NULL;
+ DataObject* _tmp8_ = NULL;
+ GeeArrayList* _tmp9_ = NULL;
+ DataObject* _tmp10_ = NULL;
+ DataObject* _tmp11_ = NULL;
+#line 469 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (!_tmp3_) {
+#line 2018 "DataCollection.c"
+ DataSet* _tmp4_ = NULL;
+ gint _tmp5_ = 0;
+#line 475 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp4_ = self->priv->dataset;
+#line 475 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp5_ = data_set_get_count (_tmp4_);
+#line 475 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (!(_tmp5_ > 0)) {
+#line 475 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ break;
+#line 2029 "DataCollection.c"
+ }
+ }
+#line 469 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp3_ = FALSE;
+#line 470 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp6_ = self->priv->dataset;
+#line 470 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp7_ = data_set_get_at (_tmp6_, 0);
+#line 470 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ object = _tmp7_;
+#line 471 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp8_ = object;
+#line 471 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _vala_assert (_tmp8_ != NULL, "object != null");
+#line 473 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp9_ = removed;
+#line 473 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp10_ = object;
+#line 473 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp10_);
+#line 474 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp11_ = object;
+#line 474 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_internal_remove (self, _tmp11_);
+#line 469 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (object);
+#line 2056 "DataCollection.c"
+ }
+ }
+#line 478 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp12_ = removed;
+#line 478 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_notify_items_removed (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 479 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp13_ = removed;
+#line 479 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_notify_contents_altered (self, NULL, G_TYPE_CHECK_INSTANCE_CAST (_tmp13_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 2067 "DataCollection.c"
+ {
+ GeeArrayList* _object_list = NULL;
+ GeeArrayList* _tmp14_ = NULL;
+ GeeArrayList* _tmp15_ = NULL;
+ gint _object_size = 0;
+ GeeArrayList* _tmp16_ = NULL;
+ gint _tmp17_ = 0;
+ gint _tmp18_ = 0;
+ gint _object_index = 0;
+#line 482 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp14_ = removed;
+#line 482 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp15_ = _g_object_ref0 (_tmp14_);
+#line 482 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _object_list = _tmp15_;
+#line 482 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp16_ = _object_list;
+#line 482 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp17_ = gee_abstract_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp16_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 482 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp18_ = _tmp17_;
+#line 482 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _object_size = _tmp18_;
+#line 482 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _object_index = -1;
+#line 482 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ while (TRUE) {
+#line 2095 "DataCollection.c"
+ gint _tmp19_ = 0;
+ gint _tmp20_ = 0;
+ gint _tmp21_ = 0;
+ DataObject* object = NULL;
+ GeeArrayList* _tmp22_ = NULL;
+ gint _tmp23_ = 0;
+ gpointer _tmp24_ = NULL;
+ DataObject* _tmp25_ = NULL;
+#line 482 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp19_ = _object_index;
+#line 482 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _object_index = _tmp19_ + 1;
+#line 482 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp20_ = _object_index;
+#line 482 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp21_ = _object_size;
+#line 482 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (!(_tmp20_ < _tmp21_)) {
+#line 482 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ break;
+#line 2116 "DataCollection.c"
+ }
+#line 482 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp22_ = _object_list;
+#line 482 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp23_ = _object_index;
+#line 482 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp24_ = gee_abstract_list_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp22_, GEE_TYPE_ABSTRACT_LIST, GeeAbstractList), _tmp23_);
+#line 482 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ object = (DataObject*) _tmp24_;
+#line 483 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp25_ = object;
+#line 483 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_object_notify_membership_changed (_tmp25_, NULL);
+#line 482 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (object);
+#line 2132 "DataCollection.c"
+ }
+#line 482 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (_object_list);
+#line 2136 "DataCollection.c"
+ }
+#line 462 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (removed);
+#line 2140 "DataCollection.c"
+}
+
+
+void data_collection_clear (DataCollection* self) {
+#line 462 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_DATA_COLLECTION (self));
+#line 462 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ DATA_COLLECTION_GET_CLASS (self)->clear (self);
+#line 2149 "DataCollection.c"
+}
+
+
+static void data_collection_real_close (DataCollection* self) {
+#line 493 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_clear (self);
+#line 2156 "DataCollection.c"
+}
+
+
+void data_collection_close (DataCollection* self) {
+#line 492 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_DATA_COLLECTION (self));
+#line 492 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ DATA_COLLECTION_GET_CLASS (self)->close (self);
+#line 2165 "DataCollection.c"
+}
+
+
+static gpointer _alteration_ref0 (gpointer self) {
+#line 513 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return self ? alteration_ref (self) : NULL;
+#line 2172 "DataCollection.c"
+}
+
+
+void data_collection_internal_notify_altered (DataCollection* self, DataObject* object, Alteration* alteration) {
+ DataObject* _tmp0_ = NULL;
+ gboolean _tmp1_ = FALSE;
+ gboolean resort_occurred = FALSE;
+ DataSet* _tmp2_ = NULL;
+ DataObject* _tmp3_ = NULL;
+ Alteration* _tmp4_ = NULL;
+ gboolean _tmp5_ = FALSE;
+ gboolean _tmp6_ = FALSE;
+ gboolean _tmp24_ = FALSE;
+ DataObject* _tmp25_ = NULL;
+ Alteration* _tmp26_ = NULL;
+ GeeMap* _tmp27_ = NULL;
+ GeeMap* _tmp28_ = NULL;
+#line 498 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_DATA_COLLECTION (self));
+#line 498 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_DATA_OBJECT (object));
+#line 498 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_ALTERATION (alteration));
+#line 499 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = object;
+#line 499 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = data_collection_internal_contains (self, _tmp0_);
+#line 499 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _vala_assert (_tmp1_, "internal_contains(object)");
+#line 501 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = self->priv->dataset;
+#line 501 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp3_ = object;
+#line 501 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp4_ = alteration;
+#line 501 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp5_ = data_set_resort_object (_tmp2_, _tmp3_, _tmp4_);
+#line 501 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ resort_occurred = _tmp5_;
+#line 503 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp6_ = data_collection_are_notifications_frozen (self);
+#line 503 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (_tmp6_) {
+#line 2216 "DataCollection.c"
+ GeeHashMap* _tmp7_ = NULL;
+ Alteration* current = NULL;
+ GeeHashMap* _tmp9_ = NULL;
+ DataObject* _tmp10_ = NULL;
+ gpointer _tmp11_ = NULL;
+ Alteration* _tmp12_ = NULL;
+ GeeHashMap* _tmp18_ = NULL;
+ DataObject* _tmp19_ = NULL;
+ Alteration* _tmp20_ = NULL;
+ gboolean _tmp21_ = FALSE;
+ gboolean _tmp22_ = FALSE;
+#line 504 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp7_ = self->priv->frozen_items_altered;
+#line 504 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (_tmp7_ == NULL) {
+#line 2232 "DataCollection.c"
+ GeeHashMap* _tmp8_ = NULL;
+#line 505 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp8_ = gee_hash_map_new (TYPE_DATA_OBJECT, (GBoxedCopyFunc) g_object_ref, g_object_unref, TYPE_ALTERATION, (GBoxedCopyFunc) alteration_ref, alteration_unref, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 505 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (self->priv->frozen_items_altered);
+#line 505 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self->priv->frozen_items_altered = _tmp8_;
+#line 2240 "DataCollection.c"
+ }
+#line 509 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp9_ = self->priv->frozen_items_altered;
+#line 509 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp10_ = object;
+#line 509 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp11_ = gee_abstract_map_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp10_);
+#line 509 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ current = (Alteration*) _tmp11_;
+#line 510 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp12_ = current;
+#line 510 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (_tmp12_ != NULL) {
+#line 2254 "DataCollection.c"
+ Alteration* _tmp13_ = NULL;
+ Alteration* _tmp14_ = NULL;
+ Alteration* _tmp15_ = NULL;
+#line 511 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp13_ = current;
+#line 511 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp14_ = alteration;
+#line 511 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp15_ = alteration_compress (_tmp13_, _tmp14_);
+#line 511 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _alteration_unref0 (current);
+#line 511 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ current = _tmp15_;
+#line 2268 "DataCollection.c"
+ } else {
+ Alteration* _tmp16_ = NULL;
+ Alteration* _tmp17_ = NULL;
+#line 513 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp16_ = alteration;
+#line 513 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp17_ = _alteration_ref0 (_tmp16_);
+#line 513 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _alteration_unref0 (current);
+#line 513 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ current = _tmp17_;
+#line 2280 "DataCollection.c"
+ }
+#line 515 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp18_ = self->priv->frozen_items_altered;
+#line 515 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp19_ = object;
+#line 515 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp20_ = current;
+#line 515 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ gee_abstract_map_set (G_TYPE_CHECK_INSTANCE_CAST (_tmp18_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp19_, _tmp20_);
+#line 517 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp22_ = self->priv->fire_ordering_changed;
+#line 517 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (_tmp22_) {
+#line 517 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp21_ = TRUE;
+#line 2296 "DataCollection.c"
+ } else {
+ gboolean _tmp23_ = FALSE;
+#line 517 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp23_ = resort_occurred;
+#line 517 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp21_ = _tmp23_;
+#line 2303 "DataCollection.c"
+ }
+#line 517 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self->priv->fire_ordering_changed = _tmp21_;
+#line 519 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _alteration_unref0 (current);
+#line 519 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return;
+#line 2311 "DataCollection.c"
+ }
+#line 522 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp24_ = resort_occurred;
+#line 522 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (_tmp24_) {
+#line 523 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_notify_ordering_changed (self);
+#line 2319 "DataCollection.c"
+ }
+#line 525 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp25_ = object;
+#line 525 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp26_ = alteration;
+#line 525 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp27_ = data_collection_get_alteration_singleton (_tmp25_, _tmp26_);
+#line 525 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp28_ = _tmp27_;
+#line 525 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_notify_items_altered (self, _tmp28_);
+#line 525 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (_tmp28_);
+#line 2333 "DataCollection.c"
+}
+
+
+GValue* data_collection_get_property (DataCollection* self, const gchar* name) {
+ GValue* result = NULL;
+ GeeHashMap* _tmp0_ = NULL;
+ const gchar* _tmp1_ = NULL;
+ gpointer _tmp2_ = NULL;
+#line 528 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (IS_DATA_COLLECTION (self), NULL);
+#line 528 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (name != NULL, NULL);
+#line 529 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = self->priv->properties;
+#line 529 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = name;
+#line 529 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = gee_abstract_map_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp1_);
+#line 529 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ result = (GValue*) _tmp2_;
+#line 529 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return result;
+#line 2356 "DataCollection.c"
+}
+
+
+static gboolean _bool_value_equals_value_equal_func (GValue* a, GValue* b, gpointer self) {
+ gboolean result;
+ result = bool_value_equals (a, b);
+#line 535 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return result;
+#line 2365 "DataCollection.c"
+}
+
+
+static gboolean _int_value_equals_value_equal_func (GValue* a, GValue* b, gpointer self) {
+ gboolean result;
+ result = int_value_equals (a, b);
+#line 537 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return result;
+#line 2374 "DataCollection.c"
+}
+
+
+void data_collection_set_property (DataCollection* self, const gchar* name, GValue* val, ValueEqualFunc value_equals, void* value_equals_target) {
+ ValueEqualFunc _tmp0_ = NULL;
+ void* _tmp0__target = NULL;
+ GValue* old = NULL;
+ GeeHashMap* _tmp3_ = NULL;
+ const gchar* _tmp4_ = NULL;
+ gpointer _tmp5_ = NULL;
+ GValue* _tmp6_ = NULL;
+ GeeHashMap* _tmp12_ = NULL;
+ const gchar* _tmp13_ = NULL;
+ GValue _tmp14_ = {0};
+ const gchar* _tmp15_ = NULL;
+ GValue* _tmp16_ = NULL;
+ GValue _tmp17_ = {0};
+ gint count = 0;
+ DataSet* _tmp18_ = NULL;
+ gint _tmp19_ = 0;
+#line 532 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_DATA_COLLECTION (self));
+#line 532 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (name != NULL);
+#line 532 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (val != NULL);
+#line 533 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = value_equals;
+#line 533 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0__target = value_equals_target;
+#line 533 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (_tmp0_ == NULL) {
+#line 2407 "DataCollection.c"
+ gboolean _tmp1_ = FALSE;
+#line 534 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = G_VALUE_HOLDS (val, G_TYPE_BOOLEAN);
+#line 534 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (_tmp1_) {
+#line 535 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ value_equals = _bool_value_equals_value_equal_func;
+#line 535 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ value_equals_target = NULL;
+#line 2417 "DataCollection.c"
+ } else {
+ gboolean _tmp2_ = FALSE;
+#line 536 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = G_VALUE_HOLDS (val, G_TYPE_INT);
+#line 536 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (_tmp2_) {
+#line 537 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ value_equals = _int_value_equals_value_equal_func;
+#line 537 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ value_equals_target = NULL;
+#line 2428 "DataCollection.c"
+ } else {
+#line 539 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_error ("DataCollection.vala:539: value_equals must be specified for this type");
+#line 2432 "DataCollection.c"
+ }
+ }
+ }
+#line 542 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp3_ = self->priv->properties;
+#line 542 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp4_ = name;
+#line 542 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp5_ = gee_abstract_map_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp4_);
+#line 542 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ old = (GValue*) _tmp5_;
+#line 543 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp6_ = old;
+#line 543 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (_tmp6_ != NULL) {
+#line 2448 "DataCollection.c"
+ ValueEqualFunc _tmp7_ = NULL;
+ void* _tmp7__target = NULL;
+ GValue* _tmp8_ = NULL;
+ GValue _tmp9_ = {0};
+ GValue _tmp10_ = {0};
+ gboolean _tmp11_ = FALSE;
+#line 544 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp7_ = value_equals;
+#line 544 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp7__target = value_equals_target;
+#line 544 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp8_ = old;
+#line 544 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp9_ = *val;
+#line 544 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp10_ = *_tmp8_;
+#line 544 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp11_ = _tmp7_ (&_tmp10_, &_tmp9_, _tmp7__target);
+#line 544 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (_tmp11_) {
+#line 545 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ __vala_GValue_free0 (old);
+#line 545 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return;
+#line 2473 "DataCollection.c"
+ }
+ }
+#line 548 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp12_ = self->priv->properties;
+#line 548 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp13_ = name;
+#line 548 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp14_ = *val;
+#line 548 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ gee_abstract_map_set (G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp13_, &_tmp14_);
+#line 550 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp15_ = name;
+#line 550 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp16_ = old;
+#line 550 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp17_ = *val;
+#line 550 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_notify_property_set (self, _tmp15_, _tmp16_, &_tmp17_);
+#line 553 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp18_ = self->priv->dataset;
+#line 553 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp19_ = data_set_get_count (_tmp18_);
+#line 553 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ count = _tmp19_;
+#line 2498 "DataCollection.c"
+ {
+ gint ctr = 0;
+#line 554 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ctr = 0;
+#line 2503 "DataCollection.c"
+ {
+ gboolean _tmp20_ = FALSE;
+#line 554 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp20_ = TRUE;
+#line 554 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ while (TRUE) {
+#line 2510 "DataCollection.c"
+ gint _tmp22_ = 0;
+ gint _tmp23_ = 0;
+ DataSet* _tmp24_ = NULL;
+ gint _tmp25_ = 0;
+ DataObject* _tmp26_ = NULL;
+ DataObject* _tmp27_ = NULL;
+ const gchar* _tmp28_ = NULL;
+ GValue* _tmp29_ = NULL;
+ GValue _tmp30_ = {0};
+#line 554 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (!_tmp20_) {
+#line 2522 "DataCollection.c"
+ gint _tmp21_ = 0;
+#line 554 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp21_ = ctr;
+#line 554 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ctr = _tmp21_ + 1;
+#line 2528 "DataCollection.c"
+ }
+#line 554 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp20_ = FALSE;
+#line 554 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp22_ = ctr;
+#line 554 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp23_ = count;
+#line 554 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (!(_tmp22_ < _tmp23_)) {
+#line 554 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ break;
+#line 2540 "DataCollection.c"
+ }
+#line 555 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp24_ = self->priv->dataset;
+#line 555 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp25_ = ctr;
+#line 555 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp26_ = data_set_get_at (_tmp24_, _tmp25_);
+#line 555 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp27_ = _tmp26_;
+#line 555 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp28_ = name;
+#line 555 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp29_ = old;
+#line 555 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp30_ = *val;
+#line 555 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_object_notify_collection_property_set (_tmp27_, _tmp28_, _tmp29_, &_tmp30_);
+#line 555 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (_tmp27_);
+#line 2560 "DataCollection.c"
+ }
+ }
+ }
+#line 532 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ __vala_GValue_free0 (old);
+#line 2566 "DataCollection.c"
+}
+
+
+void data_collection_clear_property (DataCollection* self, const gchar* name) {
+ GeeHashMap* _tmp0_ = NULL;
+ const gchar* _tmp1_ = NULL;
+ gboolean _tmp2_ = FALSE;
+ const gchar* _tmp3_ = NULL;
+ gint count = 0;
+ DataSet* _tmp4_ = NULL;
+ gint _tmp5_ = 0;
+#line 558 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_DATA_COLLECTION (self));
+#line 558 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (name != NULL);
+#line 559 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = self->priv->properties;
+#line 559 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = name;
+#line 559 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = gee_abstract_map_unset (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp1_, NULL);
+#line 559 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (!_tmp2_) {
+#line 560 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return;
+#line 2592 "DataCollection.c"
+ }
+#line 563 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp3_ = name;
+#line 563 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_notify_property_cleared (self, _tmp3_);
+#line 566 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp4_ = self->priv->dataset;
+#line 566 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp5_ = data_set_get_count (_tmp4_);
+#line 566 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ count = _tmp5_;
+#line 2604 "DataCollection.c"
+ {
+ gint ctr = 0;
+#line 567 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ctr = 0;
+#line 2609 "DataCollection.c"
+ {
+ gboolean _tmp6_ = FALSE;
+#line 567 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp6_ = TRUE;
+#line 567 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ while (TRUE) {
+#line 2616 "DataCollection.c"
+ gint _tmp8_ = 0;
+ gint _tmp9_ = 0;
+ DataSet* _tmp10_ = NULL;
+ gint _tmp11_ = 0;
+ DataObject* _tmp12_ = NULL;
+ DataObject* _tmp13_ = NULL;
+ const gchar* _tmp14_ = NULL;
+#line 567 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (!_tmp6_) {
+#line 2626 "DataCollection.c"
+ gint _tmp7_ = 0;
+#line 567 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp7_ = ctr;
+#line 567 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ctr = _tmp7_ + 1;
+#line 2632 "DataCollection.c"
+ }
+#line 567 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp6_ = FALSE;
+#line 567 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp8_ = ctr;
+#line 567 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp9_ = count;
+#line 567 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (!(_tmp8_ < _tmp9_)) {
+#line 567 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ break;
+#line 2644 "DataCollection.c"
+ }
+#line 568 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp10_ = self->priv->dataset;
+#line 568 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp11_ = ctr;
+#line 568 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp12_ = data_set_get_at (_tmp10_, _tmp11_);
+#line 568 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp13_ = _tmp12_;
+#line 568 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp14_ = name;
+#line 568 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_object_notify_collection_property_cleared (_tmp13_, _tmp14_);
+#line 568 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (_tmp13_);
+#line 2660 "DataCollection.c"
+ }
+ }
+ }
+}
+
+
+void data_collection_freeze_notifications (DataCollection* self) {
+ gint _tmp0_ = 0;
+#line 581 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_DATA_COLLECTION (self));
+#line 582 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = self->priv->notifies_frozen;
+#line 582 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self->priv->notifies_frozen = _tmp0_ + 1;
+#line 582 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (_tmp0_ == 0) {
+#line 583 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_notify_frozen (self);
+#line 2679 "DataCollection.c"
+ }
+}
+
+
+void data_collection_thaw_notifications (DataCollection* self) {
+ gint _tmp0_ = 0;
+ gint _tmp1_ = 0;
+ gint _tmp2_ = 0;
+#line 586 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_DATA_COLLECTION (self));
+#line 587 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = self->priv->notifies_frozen;
+#line 587 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (_tmp0_ == 0) {
+#line 588 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return;
+#line 2696 "DataCollection.c"
+ }
+#line 590 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = self->priv->notifies_frozen;
+#line 590 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self->priv->notifies_frozen = _tmp1_ - 1;
+#line 590 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = self->priv->notifies_frozen;
+#line 590 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (_tmp2_ == 0) {
+#line 591 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_notify_thawed (self);
+#line 2708 "DataCollection.c"
+ }
+}
+
+
+gboolean data_collection_are_notifications_frozen (DataCollection* self) {
+ gboolean result = FALSE;
+ gint _tmp0_ = 0;
+#line 594 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (IS_DATA_COLLECTION (self), FALSE);
+#line 595 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = self->priv->notifies_frozen;
+#line 595 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ result = _tmp0_ > 0;
+#line 595 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return result;
+#line 2724 "DataCollection.c"
+}
+
+
+static void data_collection_real_notify_frozen (DataCollection* self) {
+#line 601 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_signal_emit_by_name (self, "frozen");
+#line 2731 "DataCollection.c"
+}
+
+
+void data_collection_notify_frozen (DataCollection* self) {
+#line 600 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_DATA_COLLECTION (self));
+#line 600 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ DATA_COLLECTION_GET_CLASS (self)->notify_frozen (self);
+#line 2740 "DataCollection.c"
+}
+
+
+static void data_collection_real_notify_thawed (DataCollection* self) {
+ GeeHashMap* _tmp0_ = NULL;
+ gboolean _tmp4_ = FALSE;
+#line 607 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = self->priv->frozen_items_altered;
+#line 607 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (_tmp0_ != NULL) {
+#line 2751 "DataCollection.c"
+ GeeMap* copy = NULL;
+ GeeHashMap* _tmp1_ = NULL;
+ GeeMap* _tmp2_ = NULL;
+ GeeMap* _tmp3_ = NULL;
+#line 609 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = self->priv->frozen_items_altered;
+#line 609 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_MAP, GeeMap));
+#line 609 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ copy = _tmp2_;
+#line 610 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (self->priv->frozen_items_altered);
+#line 610 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self->priv->frozen_items_altered = NULL;
+#line 612 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp3_ = copy;
+#line 612 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_notify_items_altered (self, _tmp3_);
+#line 607 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (copy);
+#line 2772 "DataCollection.c"
+ }
+#line 615 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp4_ = self->priv->fire_ordering_changed;
+#line 615 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (_tmp4_) {
+#line 616 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self->priv->fire_ordering_changed = FALSE;
+#line 617 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_notify_ordering_changed (self);
+#line 2782 "DataCollection.c"
+ }
+#line 620 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_signal_emit_by_name (self, "thawed");
+#line 2786 "DataCollection.c"
+}
+
+
+void data_collection_notify_thawed (DataCollection* self) {
+#line 606 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_DATA_COLLECTION (self));
+#line 606 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ DATA_COLLECTION_GET_CLASS (self)->notify_thawed (self);
+#line 2795 "DataCollection.c"
+}
+
+
+static void data_collection_real_items_added (DataCollection* self, GeeIterable* added) {
+#line 116 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (GEE_IS_ITERABLE (added));
+#line 2802 "DataCollection.c"
+}
+
+
+static void data_collection_real_items_removed (DataCollection* self, GeeIterable* removed) {
+#line 120 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (GEE_IS_ITERABLE (removed));
+#line 2809 "DataCollection.c"
+}
+
+
+static void data_collection_real_contents_altered (DataCollection* self, GeeIterable* added, GeeIterable* removed) {
+#line 124 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail ((added == NULL) || GEE_IS_ITERABLE (added));
+#line 124 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail ((removed == NULL) || GEE_IS_ITERABLE (removed));
+#line 2818 "DataCollection.c"
+}
+
+
+static void g_cclosure_user_marshal_VOID__OBJECT_OBJECT (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data) {
+ typedef void (*GMarshalFunc_VOID__OBJECT_OBJECT) (gpointer data1, gpointer arg_1, gpointer arg_2, gpointer data2);
+ register GMarshalFunc_VOID__OBJECT_OBJECT callback;
+ register GCClosure * cc;
+ register gpointer data1;
+ register gpointer data2;
+ cc = (GCClosure *) closure;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (n_param_values == 3);
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (G_CCLOSURE_SWAP_DATA (closure)) {
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data1 = closure->data;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data2 = param_values->data[0].v_pointer;
+#line 2837 "DataCollection.c"
+ } else {
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data1 = param_values->data[0].v_pointer;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data2 = closure->data;
+#line 2843 "DataCollection.c"
+ }
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ callback = (GMarshalFunc_VOID__OBJECT_OBJECT) (marshal_data ? marshal_data : cc->callback);
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ callback (data1, g_value_get_object (param_values + 1), g_value_get_object (param_values + 2), data2);
+#line 2849 "DataCollection.c"
+}
+
+
+static void data_collection_real_items_altered (DataCollection* self, GeeMap* items) {
+#line 130 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (GEE_IS_MAP (items));
+#line 2856 "DataCollection.c"
+}
+
+
+static void data_collection_real_ordering_changed (DataCollection* self) {
+}
+
+
+static void data_collection_real_property_set (DataCollection* self, const gchar* name, GValue* old, GValue* val) {
+#line 140 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (name != NULL);
+#line 140 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (val != NULL);
+#line 2869 "DataCollection.c"
+}
+
+
+static void g_cclosure_user_marshal_VOID__STRING_BOXED_BOXED (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data) {
+ typedef void (*GMarshalFunc_VOID__STRING_BOXED_BOXED) (gpointer data1, const char* arg_1, gpointer arg_2, gpointer arg_3, gpointer data2);
+ register GMarshalFunc_VOID__STRING_BOXED_BOXED callback;
+ register GCClosure * cc;
+ register gpointer data1;
+ register gpointer data2;
+ cc = (GCClosure *) closure;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (n_param_values == 4);
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (G_CCLOSURE_SWAP_DATA (closure)) {
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data1 = closure->data;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data2 = param_values->data[0].v_pointer;
+#line 2888 "DataCollection.c"
+ } else {
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data1 = param_values->data[0].v_pointer;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data2 = closure->data;
+#line 2894 "DataCollection.c"
+ }
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ callback = (GMarshalFunc_VOID__STRING_BOXED_BOXED) (marshal_data ? marshal_data : cc->callback);
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ callback (data1, g_value_get_string (param_values + 1), g_value_get_boxed (param_values + 2), g_value_get_boxed (param_values + 3), data2);
+#line 2900 "DataCollection.c"
+}
+
+
+static void data_collection_real_property_cleared (DataCollection* self, const gchar* name) {
+#line 144 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (name != NULL);
+#line 2907 "DataCollection.c"
+}
+
+
+static void data_collection_real_frozen (DataCollection* self) {
+}
+
+
+static void data_collection_real_thawed (DataCollection* self) {
+}
+
+
+static void _data_collection_marker_impl_on_items_removed_data_collection_items_removed (DataCollection* _sender, GeeIterable* removed, gpointer self) {
+#line 24 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_marker_impl_on_items_removed ((DataCollectionMarkerImpl*) self, removed);
+#line 2922 "DataCollection.c"
+}
+
+
+static gpointer _data_collection_ref0 (gpointer self) {
+#line 16 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return self ? data_collection_ref (self) : NULL;
+#line 2929 "DataCollection.c"
+}
+
+
+static DataCollectionMarkerImpl* data_collection_marker_impl_construct (GType object_type, DataCollection* owner) {
+ DataCollectionMarkerImpl * self = NULL;
+ DataCollection* _tmp0_ = NULL;
+ DataCollection* _tmp1_ = NULL;
+ DataCollection* _tmp2_ = NULL;
+#line 15 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (IS_DATA_COLLECTION (owner), NULL);
+#line 15 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self = (DataCollectionMarkerImpl*) g_object_new (object_type, NULL);
+#line 16 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = owner;
+#line 16 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = _data_collection_ref0 (_tmp0_);
+#line 16 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _data_collection_unref0 (self->owner);
+#line 16 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self->owner = _tmp1_;
+#line 20 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = owner;
+#line 20 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_signal_connect_object (_tmp2_, "items-removed", (GCallback) _data_collection_marker_impl_on_items_removed_data_collection_items_removed, self, 0);
+#line 15 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return self;
+#line 2956 "DataCollection.c"
+}
+
+
+static DataCollectionMarkerImpl* data_collection_marker_impl_new (DataCollection* owner) {
+#line 15 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return data_collection_marker_impl_construct (DATA_COLLECTION_TYPE_MARKER_IMPL, owner);
+#line 2963 "DataCollection.c"
+}
+
+
+static void data_collection_marker_impl_real_mark (Marker* base, DataObject* object) {
+ DataCollectionMarkerImpl * self;
+ DataCollection* _tmp0_ = NULL;
+ DataObject* _tmp1_ = NULL;
+ gboolean _tmp2_ = FALSE;
+ GeeHashSet* _tmp3_ = NULL;
+ DataObject* _tmp4_ = NULL;
+#line 27 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, DATA_COLLECTION_TYPE_MARKER_IMPL, DataCollectionMarkerImpl);
+#line 27 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_DATA_OBJECT (object));
+#line 28 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = self->owner;
+#line 28 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = object;
+#line 28 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = data_collection_internal_contains (_tmp0_, _tmp1_);
+#line 28 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _vala_assert (_tmp2_, "owner.internal_contains(object)");
+#line 30 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp3_ = self->marked;
+#line 30 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp4_ = object;
+#line 30 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp4_);
+#line 2992 "DataCollection.c"
+}
+
+
+static void data_collection_marker_impl_real_unmark (Marker* base, DataObject* object) {
+ DataCollectionMarkerImpl * self;
+ DataCollection* _tmp0_ = NULL;
+ DataObject* _tmp1_ = NULL;
+ gboolean _tmp2_ = FALSE;
+ GeeHashSet* _tmp3_ = NULL;
+ DataObject* _tmp4_ = NULL;
+#line 33 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, DATA_COLLECTION_TYPE_MARKER_IMPL, DataCollectionMarkerImpl);
+#line 33 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (IS_DATA_OBJECT (object));
+#line 34 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = self->owner;
+#line 34 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = object;
+#line 34 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = data_collection_internal_contains (_tmp0_, _tmp1_);
+#line 34 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _vala_assert (_tmp2_, "owner.internal_contains(object)");
+#line 36 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp3_ = self->marked;
+#line 36 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp4_ = object;
+#line 36 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ gee_abstract_collection_remove (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp4_);
+#line 3021 "DataCollection.c"
+}
+
+
+static gboolean data_collection_marker_impl_real_toggle (Marker* base, DataObject* object) {
+ DataCollectionMarkerImpl * self;
+ gboolean result = FALSE;
+ DataCollection* _tmp0_ = NULL;
+ DataObject* _tmp1_ = NULL;
+ gboolean _tmp2_ = FALSE;
+ GeeHashSet* _tmp3_ = NULL;
+ DataObject* _tmp4_ = NULL;
+ gboolean _tmp5_ = FALSE;
+ GeeHashSet* _tmp10_ = NULL;
+ DataObject* _tmp11_ = NULL;
+ gboolean _tmp12_ = FALSE;
+#line 39 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, DATA_COLLECTION_TYPE_MARKER_IMPL, DataCollectionMarkerImpl);
+#line 39 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (object), FALSE);
+#line 40 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = self->owner;
+#line 40 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = object;
+#line 40 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = data_collection_internal_contains (_tmp0_, _tmp1_);
+#line 40 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _vala_assert (_tmp2_, "owner.internal_contains(object)");
+#line 42 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp3_ = self->marked;
+#line 42 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp4_ = object;
+#line 42 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp5_ = gee_abstract_collection_contains (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp4_);
+#line 42 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (_tmp5_) {
+#line 3057 "DataCollection.c"
+ GeeHashSet* _tmp6_ = NULL;
+ DataObject* _tmp7_ = NULL;
+#line 43 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp6_ = self->marked;
+#line 43 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp7_ = object;
+#line 43 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ gee_abstract_collection_remove (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp7_);
+#line 3066 "DataCollection.c"
+ } else {
+ GeeHashSet* _tmp8_ = NULL;
+ DataObject* _tmp9_ = NULL;
+#line 45 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp8_ = self->marked;
+#line 45 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp9_ = object;
+#line 45 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp9_);
+#line 3076 "DataCollection.c"
+ }
+#line 48 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp10_ = self->marked;
+#line 48 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp11_ = object;
+#line 48 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp12_ = gee_abstract_collection_contains (G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp11_);
+#line 48 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ result = _tmp12_;
+#line 48 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return result;
+#line 3088 "DataCollection.c"
+}
+
+
+static void data_collection_marker_impl_real_mark_many (Marker* base, GeeCollection* list) {
+ DataCollectionMarkerImpl * self;
+#line 51 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, DATA_COLLECTION_TYPE_MARKER_IMPL, DataCollectionMarkerImpl);
+#line 51 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (list));
+#line 3098 "DataCollection.c"
+ {
+ GeeIterator* _object_it = NULL;
+ GeeCollection* _tmp0_ = NULL;
+ GeeIterator* _tmp1_ = NULL;
+#line 52 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = list;
+#line 52 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 52 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _object_it = _tmp1_;
+#line 52 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ while (TRUE) {
+#line 3111 "DataCollection.c"
+ GeeIterator* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+ DataObject* object = NULL;
+ GeeIterator* _tmp4_ = NULL;
+ gpointer _tmp5_ = NULL;
+ DataCollection* _tmp6_ = NULL;
+ DataObject* _tmp7_ = NULL;
+ gboolean _tmp8_ = FALSE;
+ GeeHashSet* _tmp9_ = NULL;
+ DataObject* _tmp10_ = NULL;
+#line 52 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = _object_it;
+#line 52 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp3_ = gee_iterator_next (_tmp2_);
+#line 52 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (!_tmp3_) {
+#line 52 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ break;
+#line 3130 "DataCollection.c"
+ }
+#line 52 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp4_ = _object_it;
+#line 52 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp5_ = gee_iterator_get (_tmp4_);
+#line 52 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ object = (DataObject*) _tmp5_;
+#line 53 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp6_ = self->owner;
+#line 53 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp7_ = object;
+#line 53 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp8_ = data_collection_internal_contains (_tmp6_, _tmp7_);
+#line 53 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _vala_assert (_tmp8_, "owner.internal_contains(object)");
+#line 55 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp9_ = self->marked;
+#line 55 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp10_ = object;
+#line 55 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp10_);
+#line 52 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (object);
+#line 3154 "DataCollection.c"
+ }
+#line 52 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (_object_it);
+#line 3158 "DataCollection.c"
+ }
+}
+
+
+static void data_collection_marker_impl_real_unmark_many (Marker* base, GeeCollection* list) {
+ DataCollectionMarkerImpl * self;
+#line 59 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, DATA_COLLECTION_TYPE_MARKER_IMPL, DataCollectionMarkerImpl);
+#line 59 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (list));
+#line 3169 "DataCollection.c"
+ {
+ GeeIterator* _object_it = NULL;
+ GeeCollection* _tmp0_ = NULL;
+ GeeIterator* _tmp1_ = NULL;
+#line 60 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = list;
+#line 60 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 60 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _object_it = _tmp1_;
+#line 60 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ while (TRUE) {
+#line 3182 "DataCollection.c"
+ GeeIterator* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+ DataObject* object = NULL;
+ GeeIterator* _tmp4_ = NULL;
+ gpointer _tmp5_ = NULL;
+ DataCollection* _tmp6_ = NULL;
+ DataObject* _tmp7_ = NULL;
+ gboolean _tmp8_ = FALSE;
+ GeeHashSet* _tmp9_ = NULL;
+ DataObject* _tmp10_ = NULL;
+#line 60 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = _object_it;
+#line 60 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp3_ = gee_iterator_next (_tmp2_);
+#line 60 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (!_tmp3_) {
+#line 60 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ break;
+#line 3201 "DataCollection.c"
+ }
+#line 60 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp4_ = _object_it;
+#line 60 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp5_ = gee_iterator_get (_tmp4_);
+#line 60 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ object = (DataObject*) _tmp5_;
+#line 61 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp6_ = self->owner;
+#line 61 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp7_ = object;
+#line 61 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp8_ = data_collection_internal_contains (_tmp6_, _tmp7_);
+#line 61 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _vala_assert (_tmp8_, "owner.internal_contains(object)");
+#line 63 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp9_ = self->marked;
+#line 63 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp10_ = object;
+#line 63 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ gee_abstract_collection_remove (G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp10_);
+#line 60 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (object);
+#line 3225 "DataCollection.c"
+ }
+#line 60 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (_object_it);
+#line 3229 "DataCollection.c"
+ }
+}
+
+
+static void data_collection_marker_impl_real_mark_all (Marker* base) {
+ DataCollectionMarkerImpl * self;
+#line 67 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, DATA_COLLECTION_TYPE_MARKER_IMPL, DataCollectionMarkerImpl);
+#line 3238 "DataCollection.c"
+ {
+ GeeIterator* _object_it = NULL;
+ DataCollection* _tmp0_ = NULL;
+ GeeCollection* _tmp1_ = NULL;
+ GeeCollection* _tmp2_ = NULL;
+ GeeIterator* _tmp3_ = NULL;
+ GeeIterator* _tmp4_ = NULL;
+#line 68 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = self->owner;
+#line 68 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = data_collection_get_all (_tmp0_);
+#line 68 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = _tmp1_;
+#line 68 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp3_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 68 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp4_ = _tmp3_;
+#line 68 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (_tmp2_);
+#line 68 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _object_it = _tmp4_;
+#line 68 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ while (TRUE) {
+#line 3262 "DataCollection.c"
+ GeeIterator* _tmp5_ = NULL;
+ gboolean _tmp6_ = FALSE;
+ DataObject* object = NULL;
+ GeeIterator* _tmp7_ = NULL;
+ gpointer _tmp8_ = NULL;
+ GeeHashSet* _tmp9_ = NULL;
+ DataObject* _tmp10_ = NULL;
+#line 68 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp5_ = _object_it;
+#line 68 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp6_ = gee_iterator_next (_tmp5_);
+#line 68 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (!_tmp6_) {
+#line 68 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ break;
+#line 3278 "DataCollection.c"
+ }
+#line 68 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp7_ = _object_it;
+#line 68 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp8_ = gee_iterator_get (_tmp7_);
+#line 68 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ object = (DataObject*) _tmp8_;
+#line 69 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp9_ = self->marked;
+#line 69 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp10_ = object;
+#line 69 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp10_);
+#line 68 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (object);
+#line 3294 "DataCollection.c"
+ }
+#line 68 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (_object_it);
+#line 3298 "DataCollection.c"
+ }
+}
+
+
+static gint data_collection_marker_impl_real_get_count (Marker* base) {
+ DataCollectionMarkerImpl * self;
+ gint result = 0;
+ gint _tmp0_ = 0;
+ GeeHashSet* _tmp1_ = NULL;
+#line 72 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, DATA_COLLECTION_TYPE_MARKER_IMPL, DataCollectionMarkerImpl);
+#line 73 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = self->marked;
+#line 73 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (_tmp1_ != NULL) {
+#line 3314 "DataCollection.c"
+ GeeHashSet* _tmp2_ = NULL;
+ gint _tmp3_ = 0;
+ gint _tmp4_ = 0;
+#line 73 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = self->marked;
+#line 73 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp3_ = gee_abstract_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 73 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp4_ = _tmp3_;
+#line 73 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = _tmp4_;
+#line 3326 "DataCollection.c"
+ } else {
+ gint _tmp5_ = 0;
+#line 73 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp5_ = self->freeze_count;
+#line 73 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = _tmp5_;
+#line 3333 "DataCollection.c"
+ }
+#line 73 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ result = _tmp0_;
+#line 73 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return result;
+#line 3339 "DataCollection.c"
+}
+
+
+static GeeCollection* data_collection_marker_impl_real_get_all (Marker* base) {
+ DataCollectionMarkerImpl * self;
+ GeeCollection* result = NULL;
+ GeeArrayList* copy = NULL;
+ GeeArrayList* _tmp0_ = NULL;
+ GeeHashSet* _tmp1_ = NULL;
+#line 76 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, DATA_COLLECTION_TYPE_MARKER_IMPL, DataCollectionMarkerImpl);
+#line 77 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = gee_array_list_new (TYPE_DATA_OBJECT, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 77 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ copy = _tmp0_;
+#line 78 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = self->marked;
+#line 78 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ gee_array_list_add_all (copy, G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 80 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (copy, GEE_TYPE_COLLECTION, GeeCollection);
+#line 80 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return result;
+#line 3363 "DataCollection.c"
+}
+
+
+static void data_collection_marker_impl_on_items_removed (DataCollectionMarkerImpl* self, GeeIterable* removed) {
+#line 83 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (DATA_COLLECTION_IS_MARKER_IMPL (self));
+#line 83 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (GEE_IS_ITERABLE (removed));
+#line 3372 "DataCollection.c"
+ {
+ GeeIterator* _object_it = NULL;
+ GeeIterable* _tmp0_ = NULL;
+ GeeIterator* _tmp1_ = NULL;
+#line 84 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = removed;
+#line 84 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = gee_iterable_iterator (_tmp0_);
+#line 84 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _object_it = _tmp1_;
+#line 84 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ while (TRUE) {
+#line 3385 "DataCollection.c"
+ GeeIterator* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+ DataObject* object = NULL;
+ GeeIterator* _tmp4_ = NULL;
+ gpointer _tmp5_ = NULL;
+ GeeHashSet* _tmp6_ = NULL;
+ DataObject* _tmp7_ = NULL;
+#line 84 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = _object_it;
+#line 84 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp3_ = gee_iterator_next (_tmp2_);
+#line 84 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (!_tmp3_) {
+#line 84 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ break;
+#line 3401 "DataCollection.c"
+ }
+#line 84 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp4_ = _object_it;
+#line 84 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp5_ = gee_iterator_get (_tmp4_);
+#line 84 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ object = (DataObject*) _tmp5_;
+#line 85 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp6_ = self->marked;
+#line 85 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp7_ = object;
+#line 85 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ gee_abstract_collection_remove (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp7_);
+#line 84 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (object);
+#line 3417 "DataCollection.c"
+ }
+#line 84 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (_object_it);
+#line 3421 "DataCollection.c"
+ }
+}
+
+
+static void data_collection_marker_impl_freeze (DataCollectionMarkerImpl* self) {
+ DataCollection* _tmp0_ = NULL;
+ guint _tmp1_ = 0U;
+#line 91 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (DATA_COLLECTION_IS_MARKER_IMPL (self));
+#line 92 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = self->owner;
+#line 92 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_signal_parse_name ("items-removed", TYPE_DATA_COLLECTION, &_tmp1_, NULL, FALSE);
+#line 92 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_signal_handlers_disconnect_matched (_tmp0_, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp1_, 0, NULL, (GCallback) _data_collection_marker_impl_on_items_removed_data_collection_items_removed, self);
+#line 3437 "DataCollection.c"
+}
+
+
+static void data_collection_marker_impl_finished (DataCollectionMarkerImpl* self) {
+ GeeHashSet* _tmp0_ = NULL;
+#line 95 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (DATA_COLLECTION_IS_MARKER_IMPL (self));
+#line 96 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = self->marked;
+#line 96 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (_tmp0_ != NULL) {
+#line 3449 "DataCollection.c"
+ GeeHashSet* _tmp1_ = NULL;
+ gint _tmp2_ = 0;
+ gint _tmp3_ = 0;
+#line 97 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = self->marked;
+#line 97 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = gee_abstract_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 97 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp3_ = _tmp2_;
+#line 97 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self->freeze_count = _tmp3_;
+#line 3461 "DataCollection.c"
+ }
+#line 99 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (self->marked);
+#line 99 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self->marked = NULL;
+#line 3467 "DataCollection.c"
+}
+
+
+static gboolean data_collection_marker_impl_is_valid (DataCollectionMarkerImpl* self, DataCollection* collection) {
+ gboolean result = FALSE;
+ gboolean _tmp0_ = FALSE;
+ DataCollection* _tmp1_ = NULL;
+ DataCollection* _tmp2_ = NULL;
+#line 102 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (DATA_COLLECTION_IS_MARKER_IMPL (self), FALSE);
+#line 102 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (IS_DATA_COLLECTION (collection), FALSE);
+#line 103 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = collection;
+#line 103 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp2_ = self->owner;
+#line 103 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (_tmp1_ == _tmp2_) {
+#line 3486 "DataCollection.c"
+ GeeHashSet* _tmp3_ = NULL;
+#line 103 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp3_ = self->marked;
+#line 103 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = _tmp3_ != NULL;
+#line 3492 "DataCollection.c"
+ } else {
+#line 103 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = FALSE;
+#line 3496 "DataCollection.c"
+ }
+#line 103 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ result = _tmp0_;
+#line 103 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return result;
+#line 3502 "DataCollection.c"
+}
+
+
+static void data_collection_marker_impl_class_init (DataCollectionMarkerImplClass * klass) {
+#line 10 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_marker_impl_parent_class = g_type_class_peek_parent (klass);
+#line 10 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ G_OBJECT_CLASS (klass)->finalize = data_collection_marker_impl_finalize;
+#line 3511 "DataCollection.c"
+}
+
+
+static void data_collection_marker_impl_marker_interface_init (MarkerIface * iface) {
+#line 10 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_marker_impl_marker_parent_iface = g_type_interface_peek_parent (iface);
+#line 10 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ iface->mark = (void (*)(Marker*, DataObject*)) data_collection_marker_impl_real_mark;
+#line 10 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ iface->unmark = (void (*)(Marker*, DataObject*)) data_collection_marker_impl_real_unmark;
+#line 10 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ iface->toggle = (gboolean (*)(Marker*, DataObject*)) data_collection_marker_impl_real_toggle;
+#line 10 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ iface->mark_many = (void (*)(Marker*, GeeCollection*)) data_collection_marker_impl_real_mark_many;
+#line 10 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ iface->unmark_many = (void (*)(Marker*, GeeCollection*)) data_collection_marker_impl_real_unmark_many;
+#line 10 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ iface->mark_all = (void (*)(Marker*)) data_collection_marker_impl_real_mark_all;
+#line 10 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ iface->get_count = (gint (*)(Marker*)) data_collection_marker_impl_real_get_count;
+#line 10 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ iface->get_all = (GeeCollection* (*)(Marker*)) data_collection_marker_impl_real_get_all;
+#line 3534 "DataCollection.c"
+}
+
+
+static void data_collection_marker_impl_instance_init (DataCollectionMarkerImpl * self) {
+ GeeHashSet* _tmp0_ = NULL;
+#line 12 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = gee_hash_set_new (TYPE_DATA_OBJECT, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 12 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self->marked = _tmp0_;
+#line 13 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self->freeze_count = 0;
+#line 3546 "DataCollection.c"
+}
+
+
+static void data_collection_marker_impl_finalize (GObject* obj) {
+ DataCollectionMarkerImpl * self;
+ DataCollection* _tmp0_ = NULL;
+ guint _tmp1_ = 0U;
+#line 10 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, DATA_COLLECTION_TYPE_MARKER_IMPL, DataCollectionMarkerImpl);
+#line 24 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = self->owner;
+#line 24 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_signal_parse_name ("items-removed", TYPE_DATA_COLLECTION, &_tmp1_, NULL, FALSE);
+#line 24 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_signal_handlers_disconnect_matched (_tmp0_, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp1_, 0, NULL, (GCallback) _data_collection_marker_impl_on_items_removed_data_collection_items_removed, self);
+#line 11 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _data_collection_unref0 (self->owner);
+#line 12 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (self->marked);
+#line 10 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ G_OBJECT_CLASS (data_collection_marker_impl_parent_class)->finalize (obj);
+#line 3568 "DataCollection.c"
+}
+
+
+static GType data_collection_marker_impl_get_type (void) {
+ static volatile gsize data_collection_marker_impl_type_id__volatile = 0;
+ if (g_once_init_enter (&data_collection_marker_impl_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (DataCollectionMarkerImplClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) data_collection_marker_impl_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (DataCollectionMarkerImpl), 0, (GInstanceInitFunc) data_collection_marker_impl_instance_init, NULL };
+ static const GInterfaceInfo marker_info = { (GInterfaceInitFunc) data_collection_marker_impl_marker_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
+ GType data_collection_marker_impl_type_id;
+ data_collection_marker_impl_type_id = g_type_register_static (G_TYPE_OBJECT, "DataCollectionMarkerImpl", &g_define_type_info, 0);
+ g_type_add_interface_static (data_collection_marker_impl_type_id, TYPE_MARKER, &marker_info);
+ g_once_init_leave (&data_collection_marker_impl_type_id__volatile, data_collection_marker_impl_type_id);
+ }
+ return data_collection_marker_impl_type_id__volatile;
+}
+
+
+static void value_data_collection_init (GValue* value) {
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ value->data[0].v_pointer = NULL;
+#line 3589 "DataCollection.c"
+}
+
+
+static void value_data_collection_free_value (GValue* value) {
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (value->data[0].v_pointer) {
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_unref (value->data[0].v_pointer);
+#line 3598 "DataCollection.c"
+ }
+}
+
+
+static void value_data_collection_copy_value (const GValue* src_value, GValue* dest_value) {
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (src_value->data[0].v_pointer) {
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ dest_value->data[0].v_pointer = data_collection_ref (src_value->data[0].v_pointer);
+#line 3608 "DataCollection.c"
+ } else {
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ dest_value->data[0].v_pointer = NULL;
+#line 3612 "DataCollection.c"
+ }
+}
+
+
+static gpointer value_data_collection_peek_pointer (const GValue* value) {
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return value->data[0].v_pointer;
+#line 3620 "DataCollection.c"
+}
+
+
+static gchar* value_data_collection_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (collect_values[0].v_pointer) {
+#line 3627 "DataCollection.c"
+ DataCollection* object;
+ object = collect_values[0].v_pointer;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (object->parent_instance.g_class == NULL) {
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+#line 3634 "DataCollection.c"
+ } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+#line 3638 "DataCollection.c"
+ }
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ value->data[0].v_pointer = data_collection_ref (object);
+#line 3642 "DataCollection.c"
+ } else {
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ value->data[0].v_pointer = NULL;
+#line 3646 "DataCollection.c"
+ }
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return NULL;
+#line 3650 "DataCollection.c"
+}
+
+
+static gchar* value_data_collection_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+ DataCollection** object_p;
+ object_p = collect_values[0].v_pointer;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (!object_p) {
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+#line 3661 "DataCollection.c"
+ }
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (!value->data[0].v_pointer) {
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ *object_p = NULL;
+#line 3667 "DataCollection.c"
+ } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ *object_p = value->data[0].v_pointer;
+#line 3671 "DataCollection.c"
+ } else {
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ *object_p = data_collection_ref (value->data[0].v_pointer);
+#line 3675 "DataCollection.c"
+ }
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return NULL;
+#line 3679 "DataCollection.c"
+}
+
+
+GParamSpec* param_spec_data_collection (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
+ ParamSpecDataCollection* spec;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (g_type_is_a (object_type, TYPE_DATA_COLLECTION), NULL);
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ G_PARAM_SPEC (spec)->value_type = object_type;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return G_PARAM_SPEC (spec);
+#line 3693 "DataCollection.c"
+}
+
+
+gpointer value_get_data_collection (const GValue* value) {
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_DATA_COLLECTION), NULL);
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return value->data[0].v_pointer;
+#line 3702 "DataCollection.c"
+}
+
+
+void value_set_data_collection (GValue* value, gpointer v_object) {
+ DataCollection* old;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_DATA_COLLECTION));
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ old = value->data[0].v_pointer;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (v_object) {
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_DATA_COLLECTION));
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ value->data[0].v_pointer = v_object;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_ref (value->data[0].v_pointer);
+#line 3722 "DataCollection.c"
+ } else {
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ value->data[0].v_pointer = NULL;
+#line 3726 "DataCollection.c"
+ }
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (old) {
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_unref (old);
+#line 3732 "DataCollection.c"
+ }
+}
+
+
+void value_take_data_collection (GValue* value, gpointer v_object) {
+ DataCollection* old;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_DATA_COLLECTION));
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ old = value->data[0].v_pointer;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (v_object) {
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_DATA_COLLECTION));
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ value->data[0].v_pointer = v_object;
+#line 3751 "DataCollection.c"
+ } else {
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ value->data[0].v_pointer = NULL;
+#line 3755 "DataCollection.c"
+ }
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (old) {
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_unref (old);
+#line 3761 "DataCollection.c"
+ }
+}
+
+
+static void data_collection_class_init (DataCollectionClass * klass) {
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ data_collection_parent_class = g_type_class_peek_parent (klass);
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->finalize = data_collection_finalize;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_type_class_add_private (klass, sizeof (DataCollectionPrivate));
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->to_string = data_collection_real_to_string;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->notify_items_added = data_collection_real_notify_items_added;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->notify_items_removed = data_collection_real_notify_items_removed;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->notify_contents_altered = data_collection_real_notify_contents_altered;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->notify_items_altered = data_collection_real_notify_items_altered;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->notify_ordering_changed = data_collection_real_notify_ordering_changed;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->notify_property_set = data_collection_real_notify_property_set;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->notify_property_cleared = data_collection_real_notify_property_cleared;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->valid_type = data_collection_real_valid_type;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->set_comparator = data_collection_real_set_comparator;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->reset_comparator = data_collection_real_reset_comparator;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->get_all = data_collection_real_get_all;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->get_count = data_collection_real_get_count;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->get_at = data_collection_real_get_at;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->index_of = data_collection_real_index_of;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->contains = data_collection_real_contains;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->add = data_collection_real_add;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->add_many = data_collection_real_add_many;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->remove_marked = data_collection_real_remove_marked;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->clear = data_collection_real_clear;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->close = data_collection_real_close;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->notify_frozen = data_collection_real_notify_frozen;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->notify_thawed = data_collection_real_notify_thawed;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->items_added = data_collection_real_items_added;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->items_removed = data_collection_real_items_removed;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->contents_altered = data_collection_real_contents_altered;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->items_altered = data_collection_real_items_altered;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->ordering_changed = data_collection_real_ordering_changed;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->property_set = data_collection_real_property_set;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->property_cleared = data_collection_real_property_cleared;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->frozen = data_collection_real_frozen;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ ((DataCollectionClass *) klass)->thawed = data_collection_real_thawed;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_signal_new ("items_added", TYPE_DATA_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (DataCollectionClass, items_added), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, GEE_TYPE_ITERABLE);
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_signal_new ("items_removed", TYPE_DATA_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (DataCollectionClass, items_removed), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, GEE_TYPE_ITERABLE);
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_signal_new ("contents_altered", TYPE_DATA_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (DataCollectionClass, contents_altered), NULL, NULL, g_cclosure_user_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, GEE_TYPE_ITERABLE, GEE_TYPE_ITERABLE);
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_signal_new ("items_altered", TYPE_DATA_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (DataCollectionClass, items_altered), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, GEE_TYPE_MAP);
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_signal_new ("ordering_changed", TYPE_DATA_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (DataCollectionClass, ordering_changed), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_signal_new ("property_set", TYPE_DATA_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (DataCollectionClass, property_set), NULL, NULL, g_cclosure_user_marshal_VOID__STRING_BOXED_BOXED, G_TYPE_NONE, 3, G_TYPE_STRING, G_TYPE_VALUE, G_TYPE_VALUE);
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_signal_new ("property_cleared", TYPE_DATA_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (DataCollectionClass, property_cleared), NULL, NULL, g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING);
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_signal_new ("frozen", TYPE_DATA_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (DataCollectionClass, frozen), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_signal_new ("thawed", TYPE_DATA_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (DataCollectionClass, thawed), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+#line 3855 "DataCollection.c"
+}
+
+
+static void data_collection_instance_init (DataCollection * self) {
+ DataSet* _tmp0_ = NULL;
+ GeeHashMap* _tmp1_ = NULL;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self->priv = DATA_COLLECTION_GET_PRIVATE (self);
+#line 108 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp0_ = data_set_new ();
+#line 108 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self->priv->dataset = _tmp0_;
+#line 109 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _tmp1_ = gee_hash_map_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, G_TYPE_VALUE, (GBoxedCopyFunc) _g_value_dup, _vala_GValue_free, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 109 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self->priv->properties = _tmp1_;
+#line 110 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self->priv->object_ordinal_generator = (gint64) 0;
+#line 111 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self->priv->notifies_frozen = 0;
+#line 112 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self->priv->frozen_items_altered = NULL;
+#line 113 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self->priv->fire_ordering_changed = FALSE;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self->ref_count = 1;
+#line 3882 "DataCollection.c"
+}
+
+
+static void data_collection_finalize (DataCollection* obj) {
+ DataCollection * self;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_DATA_COLLECTION, DataCollection);
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_signal_handlers_destroy (self);
+#line 107 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_free0 (self->priv->name);
+#line 108 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _data_set_unref0 (self->priv->dataset);
+#line 109 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (self->priv->properties);
+#line 112 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ _g_object_unref0 (self->priv->frozen_items_altered);
+#line 3900 "DataCollection.c"
+}
+
+
+GType data_collection_get_type (void) {
+ static volatile gsize data_collection_type_id__volatile = 0;
+ if (g_once_init_enter (&data_collection_type_id__volatile)) {
+ static const GTypeValueTable g_define_type_value_table = { value_data_collection_init, value_data_collection_free_value, value_data_collection_copy_value, value_data_collection_peek_pointer, "p", value_data_collection_collect_value, "p", value_data_collection_lcopy_value };
+ static const GTypeInfo g_define_type_info = { sizeof (DataCollectionClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) data_collection_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (DataCollection), 0, (GInstanceInitFunc) data_collection_instance_init, &g_define_type_value_table };
+ static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
+ GType data_collection_type_id;
+ data_collection_type_id = g_type_register_fundamental (g_type_fundamental_next (), "DataCollection", &g_define_type_info, &g_define_type_fundamental_info, 0);
+ g_once_init_leave (&data_collection_type_id__volatile, data_collection_type_id);
+ }
+ return data_collection_type_id__volatile;
+}
+
+
+gpointer data_collection_ref (gpointer instance) {
+ DataCollection* self;
+ self = instance;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_atomic_int_inc (&self->ref_count);
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ return instance;
+#line 3925 "DataCollection.c"
+}
+
+
+void data_collection_unref (gpointer instance) {
+ DataCollection* self;
+ self = instance;
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ if (g_atomic_int_dec_and_test (&self->ref_count)) {
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ DATA_COLLECTION_GET_CLASS (self)->finalize (self);
+#line 7 "/home/jens/Source/shotwell/src/core/DataCollection.vala"
+ g_type_free_instance ((GTypeInstance *) self);
+#line 3938 "DataCollection.c"
+ }
+}
+
+
+
diff --git a/src/core/DataObject.c b/src/core/DataObject.c
new file mode 100644
index 0000000..88351fe
--- /dev/null
+++ b/src/core/DataObject.c
@@ -0,0 +1,639 @@
+/* DataObject.c generated by valac 0.32.1, the Vala compiler
+ * generated from DataObject.vala, do not modify */
+
+/* Copyright 2016 Software Freedom Conservancy Inc.
+ *
+ * This software is licensed under the GNU LGPL (version 2.1 or later).
+ * See the COPYING file in this distribution.
+ */
+/**/
+/* DataObject*/
+/**/
+/* Object IDs are incremented for each DataObject, and therefore may be used to compare*/
+/* creation order. This behavior may be relied upon elsewhere. Object IDs may be recycled when*/
+/* DataObjects are reconstituted by a proxy.*/
+/**/
+/* Ordinal IDs are supplied by DataCollections to record the ordering of the object being added*/
+/* to the collection. This value is primarily only used by DataCollection, but may be used*/
+/* elsewhere to resolve ordering questions (including stabilizing a sort).*/
+/**/
+/* Have to inherit from Object due to ContainerSource and this bug:*/
+/* https://bugzilla.gnome.org/show_bug.cgi?id=615904*/
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+#define TYPE_DATA_OBJECT (data_object_get_type ())
+#define DATA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_OBJECT, DataObject))
+#define DATA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_OBJECT, DataObjectClass))
+#define IS_DATA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_OBJECT))
+#define IS_DATA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_OBJECT))
+#define DATA_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_OBJECT, DataObjectClass))
+
+typedef struct _DataObject DataObject;
+typedef struct _DataObjectClass DataObjectClass;
+typedef struct _DataObjectPrivate DataObjectPrivate;
+
+#define TYPE_ALTERATION (alteration_get_type ())
+#define ALTERATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ALTERATION, Alteration))
+#define ALTERATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ALTERATION, AlterationClass))
+#define IS_ALTERATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ALTERATION))
+#define IS_ALTERATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ALTERATION))
+#define ALTERATION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ALTERATION, AlterationClass))
+
+typedef struct _Alteration Alteration;
+typedef struct _AlterationClass AlterationClass;
+
+#define TYPE_DATA_COLLECTION (data_collection_get_type ())
+#define DATA_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_COLLECTION, DataCollection))
+#define DATA_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_COLLECTION, DataCollectionClass))
+#define IS_DATA_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_COLLECTION))
+#define IS_DATA_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_COLLECTION))
+#define DATA_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_COLLECTION, DataCollectionClass))
+
+typedef struct _DataCollection DataCollection;
+typedef struct _DataCollectionClass DataCollectionClass;
+#define _data_collection_unref0(var) ((var == NULL) ? NULL : (var = (data_collection_unref (var), NULL)))
+#define __vala_GValue_free0(var) ((var == NULL) ? NULL : (var = (_vala_GValue_free (var), NULL)))
+#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
+#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
+#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+
+struct _DataObject {
+ GObject parent_instance;
+ DataObjectPrivate * priv;
+};
+
+struct _DataObjectClass {
+ GObjectClass parent_class;
+ void (*notify_altered) (DataObject* self, Alteration* alteration);
+ void (*notify_membership_changed) (DataObject* self, DataCollection* collection);
+ void (*notify_collection_property_set) (DataObject* self, const gchar* name, GValue* old, GValue* val);
+ void (*notify_collection_property_cleared) (DataObject* self, const gchar* name);
+ gchar* (*get_name) (DataObject* self);
+ gchar* (*to_string) (DataObject* self);
+};
+
+struct _DataObjectPrivate {
+ gint64 object_id;
+ DataCollection* member_of;
+ gint64 ordinal;
+};
+
+typedef gboolean (*ValueEqualFunc) (GValue* a, GValue* b, void* user_data);
+
+static gpointer data_object_parent_class = NULL;
+static gint64 data_object_object_id_generator;
+static gint64 data_object_object_id_generator = (gint64) 0;
+
+GType data_object_get_type (void) G_GNUC_CONST;
+gpointer alteration_ref (gpointer instance);
+void alteration_unref (gpointer instance);
+GParamSpec* param_spec_alteration (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_alteration (GValue* value, gpointer v_object);
+void value_take_alteration (GValue* value, gpointer v_object);
+gpointer value_get_alteration (const GValue* value);
+GType alteration_get_type (void) G_GNUC_CONST;
+gpointer data_collection_ref (gpointer instance);
+void data_collection_unref (gpointer instance);
+GParamSpec* param_spec_data_collection (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_data_collection (GValue* value, gpointer v_object);
+void value_take_data_collection (GValue* value, gpointer v_object);
+gpointer value_get_data_collection (const GValue* value);
+GType data_collection_get_type (void) G_GNUC_CONST;
+#define DATA_OBJECT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_DATA_OBJECT, DataObjectPrivate))
+enum {
+ DATA_OBJECT_DUMMY_PROPERTY
+};
+#define DATA_OBJECT_INVALID_OBJECT_ID ((gint64) -1)
+#define DATA_COLLECTION_INVALID_OBJECT_ORDINAL ((gint64) -1)
+DataObject* data_object_construct (GType object_type, gint64 object_id);
+void data_object_notify_altered (DataObject* self, Alteration* alteration);
+static void data_object_real_notify_altered (DataObject* self, Alteration* alteration);
+void data_collection_internal_notify_altered (DataCollection* self, DataObject* object, Alteration* alteration);
+void data_object_notify_membership_changed (DataObject* self, DataCollection* collection);
+static void data_object_real_notify_membership_changed (DataObject* self, DataCollection* collection);
+void data_object_notify_collection_property_set (DataObject* self, const gchar* name, GValue* old, GValue* val);
+static void data_object_real_notify_collection_property_set (DataObject* self, const gchar* name, GValue* old, GValue* val);
+void data_object_notify_collection_property_cleared (DataObject* self, const gchar* name);
+static void data_object_real_notify_collection_property_cleared (DataObject* self, const gchar* name);
+gchar* data_object_get_name (DataObject* self);
+static gchar* data_object_real_get_name (DataObject* self);
+gchar* data_object_to_string (DataObject* self);
+static gchar* data_object_real_to_string (DataObject* self);
+DataCollection* data_object_get_membership (DataObject* self);
+gboolean data_object_has_membership (DataObject* self);
+void data_object_internal_set_membership (DataObject* self, DataCollection* collection, gint64 ordinal);
+void data_object_internal_set_ordinal (DataObject* self, gint64 ordinal);
+void data_object_internal_clear_membership (DataObject* self);
+gint64 data_object_internal_get_ordinal (DataObject* self);
+gint64 data_object_get_object_id (DataObject* self);
+GValue* data_object_get_collection_property (DataObject* self, const gchar* name, GValue* def);
+static GValue* _g_value_dup (GValue* self);
+GValue* data_collection_get_property (DataCollection* self, const gchar* name);
+static void _vala_GValue_free (GValue* self);
+void data_object_set_collection_property (DataObject* self, const gchar* name, GValue* val, ValueEqualFunc value_equals, void* value_equals_target);
+void data_collection_set_property (DataCollection* self, const gchar* name, GValue* val, ValueEqualFunc value_equals, void* value_equals_target);
+void data_object_clear_collection_property (DataObject* self, const gchar* name);
+void data_collection_clear_property (DataCollection* self, const gchar* name);
+static void data_object_finalize (GObject* obj);
+
+
+DataObject* data_object_construct (GType object_type, gint64 object_id) {
+ DataObject * self = NULL;
+ gint64 _tmp0_ = 0LL;
+ gint64 _tmp1_ = 0LL;
+#line 38 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ self = (DataObject*) g_object_new (object_type, NULL);
+#line 39 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp1_ = object_id;
+#line 39 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ if (_tmp1_ == DATA_OBJECT_INVALID_OBJECT_ID) {
+#line 157 "DataObject.c"
+ gint64 _tmp2_ = 0LL;
+#line 39 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp2_ = data_object_object_id_generator;
+#line 39 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ data_object_object_id_generator = _tmp2_ + 1;
+#line 39 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp0_ = _tmp2_;
+#line 165 "DataObject.c"
+ } else {
+ gint64 _tmp3_ = 0LL;
+#line 39 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp3_ = object_id;
+#line 39 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp0_ = _tmp3_;
+#line 172 "DataObject.c"
+ }
+#line 39 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ self->priv->object_id = _tmp0_;
+#line 38 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ return self;
+#line 178 "DataObject.c"
+}
+
+
+static void data_object_real_notify_altered (DataObject* self, Alteration* alteration) {
+ DataCollection* _tmp0_ = NULL;
+#line 42 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_return_if_fail (IS_ALTERATION (alteration));
+#line 43 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp0_ = self->priv->member_of;
+#line 43 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ if (_tmp0_ != NULL) {
+#line 190 "DataObject.c"
+ DataCollection* _tmp1_ = NULL;
+ Alteration* _tmp2_ = NULL;
+#line 44 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp1_ = self->priv->member_of;
+#line 44 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp2_ = alteration;
+#line 44 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ data_collection_internal_notify_altered (_tmp1_, self, _tmp2_);
+#line 199 "DataObject.c"
+ }
+}
+
+
+void data_object_notify_altered (DataObject* self, Alteration* alteration) {
+#line 42 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_return_if_fail (IS_DATA_OBJECT (self));
+#line 42 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ DATA_OBJECT_GET_CLASS (self)->notify_altered (self, alteration);
+#line 209 "DataObject.c"
+}
+
+
+static void data_object_real_notify_membership_changed (DataObject* self, DataCollection* collection) {
+#line 56 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_return_if_fail ((collection == NULL) || IS_DATA_COLLECTION (collection));
+#line 216 "DataObject.c"
+}
+
+
+void data_object_notify_membership_changed (DataObject* self, DataCollection* collection) {
+#line 56 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_return_if_fail (IS_DATA_OBJECT (self));
+#line 56 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ DATA_OBJECT_GET_CLASS (self)->notify_membership_changed (self, collection);
+#line 225 "DataObject.c"
+}
+
+
+static void data_object_real_notify_collection_property_set (DataObject* self, const gchar* name, GValue* old, GValue* val) {
+#line 61 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_return_if_fail (name != NULL);
+#line 61 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_return_if_fail (val != NULL);
+#line 234 "DataObject.c"
+}
+
+
+void data_object_notify_collection_property_set (DataObject* self, const gchar* name, GValue* old, GValue* val) {
+#line 61 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_return_if_fail (IS_DATA_OBJECT (self));
+#line 61 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ DATA_OBJECT_GET_CLASS (self)->notify_collection_property_set (self, name, old, val);
+#line 243 "DataObject.c"
+}
+
+
+static void data_object_real_notify_collection_property_cleared (DataObject* self, const gchar* name) {
+#line 66 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_return_if_fail (name != NULL);
+#line 250 "DataObject.c"
+}
+
+
+void data_object_notify_collection_property_cleared (DataObject* self, const gchar* name) {
+#line 66 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_return_if_fail (IS_DATA_OBJECT (self));
+#line 66 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ DATA_OBJECT_GET_CLASS (self)->notify_collection_property_cleared (self, name);
+#line 259 "DataObject.c"
+}
+
+
+static gchar* data_object_real_get_name (DataObject* self) {
+#line 69 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_critical ("Type `%s' does not implement abstract method `data_object_get_name'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+#line 69 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ return NULL;
+#line 268 "DataObject.c"
+}
+
+
+gchar* data_object_get_name (DataObject* self) {
+#line 69 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (self), NULL);
+#line 69 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ return DATA_OBJECT_GET_CLASS (self)->get_name (self);
+#line 277 "DataObject.c"
+}
+
+
+static gchar* data_object_real_to_string (DataObject* self) {
+#line 71 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_critical ("Type `%s' does not implement abstract method `data_object_to_string'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+#line 71 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ return NULL;
+#line 286 "DataObject.c"
+}
+
+
+gchar* data_object_to_string (DataObject* self) {
+#line 71 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (self), NULL);
+#line 71 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ return DATA_OBJECT_GET_CLASS (self)->to_string (self);
+#line 295 "DataObject.c"
+}
+
+
+static gpointer _data_collection_ref0 (gpointer self) {
+#line 74 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ return self ? data_collection_ref (self) : NULL;
+#line 302 "DataObject.c"
+}
+
+
+DataCollection* data_object_get_membership (DataObject* self) {
+ DataCollection* result = NULL;
+ DataCollection* _tmp0_ = NULL;
+ DataCollection* _tmp1_ = NULL;
+#line 73 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (self), NULL);
+#line 74 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp0_ = self->priv->member_of;
+#line 74 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp1_ = _data_collection_ref0 (_tmp0_);
+#line 74 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ result = _tmp1_;
+#line 74 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ return result;
+#line 320 "DataObject.c"
+}
+
+
+gboolean data_object_has_membership (DataObject* self) {
+ gboolean result = FALSE;
+ DataCollection* _tmp0_ = NULL;
+#line 77 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (self), FALSE);
+#line 78 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp0_ = self->priv->member_of;
+#line 78 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ result = _tmp0_ != NULL;
+#line 78 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ return result;
+#line 335 "DataObject.c"
+}
+
+
+void data_object_internal_set_membership (DataObject* self, DataCollection* collection, gint64 ordinal) {
+ DataCollection* _tmp0_ = NULL;
+ DataCollection* _tmp1_ = NULL;
+ DataCollection* _tmp2_ = NULL;
+ gint64 _tmp3_ = 0LL;
+#line 83 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_return_if_fail (IS_DATA_OBJECT (self));
+#line 83 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_return_if_fail (IS_DATA_COLLECTION (collection));
+#line 84 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp0_ = self->priv->member_of;
+#line 84 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _vala_assert (_tmp0_ == NULL, "member_of == null");
+#line 86 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp1_ = collection;
+#line 86 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp2_ = _data_collection_ref0 (_tmp1_);
+#line 86 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _data_collection_unref0 (self->priv->member_of);
+#line 86 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ self->priv->member_of = _tmp2_;
+#line 87 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp3_ = ordinal;
+#line 87 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ self->priv->ordinal = _tmp3_;
+#line 364 "DataObject.c"
+}
+
+
+void data_object_internal_set_ordinal (DataObject* self, gint64 ordinal) {
+ DataCollection* _tmp0_ = NULL;
+ gint64 _tmp1_ = 0LL;
+#line 96 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_return_if_fail (IS_DATA_OBJECT (self));
+#line 97 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp0_ = self->priv->member_of;
+#line 97 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _vala_assert (_tmp0_ == NULL, "member_of == null");
+#line 99 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp1_ = ordinal;
+#line 99 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ self->priv->ordinal = _tmp1_;
+#line 381 "DataObject.c"
+}
+
+
+void data_object_internal_clear_membership (DataObject* self) {
+#line 104 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_return_if_fail (IS_DATA_OBJECT (self));
+#line 105 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _data_collection_unref0 (self->priv->member_of);
+#line 105 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ self->priv->member_of = NULL;
+#line 106 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ self->priv->ordinal = DATA_COLLECTION_INVALID_OBJECT_ORDINAL;
+#line 394 "DataObject.c"
+}
+
+
+inline gint64 data_object_internal_get_ordinal (DataObject* self) {
+ gint64 result = 0LL;
+ gint64 _tmp0_ = 0LL;
+#line 110 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (self), 0LL);
+#line 111 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp0_ = self->priv->ordinal;
+#line 111 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ result = _tmp0_;
+#line 111 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ return result;
+#line 409 "DataObject.c"
+}
+
+
+inline gint64 data_object_get_object_id (DataObject* self) {
+ gint64 result = 0LL;
+ gint64 _tmp0_ = 0LL;
+#line 114 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (self), 0LL);
+#line 115 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp0_ = self->priv->object_id;
+#line 115 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ result = _tmp0_;
+#line 115 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ return result;
+#line 424 "DataObject.c"
+}
+
+
+static GValue* _g_value_dup (GValue* self) {
+#line 120 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ return g_boxed_copy (G_TYPE_VALUE, self);
+#line 431 "DataObject.c"
+}
+
+
+static gpointer __g_value_dup0 (gpointer self) {
+#line 120 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ return self ? _g_value_dup (self) : NULL;
+#line 438 "DataObject.c"
+}
+
+
+static void _vala_GValue_free (GValue* self) {
+#line 124 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_value_unset (self);
+#line 124 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_free (self);
+#line 447 "DataObject.c"
+}
+
+
+GValue* data_object_get_collection_property (DataObject* self, const gchar* name, GValue* def) {
+ GValue* result = NULL;
+ DataCollection* _tmp0_ = NULL;
+ GValue* _result_ = NULL;
+ DataCollection* _tmp3_ = NULL;
+ const gchar* _tmp4_ = NULL;
+ GValue* _tmp5_ = NULL;
+ GValue* _tmp6_ = NULL;
+ GValue* _tmp7_ = NULL;
+ GValue* _tmp10_ = NULL;
+#line 118 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (self), NULL);
+#line 118 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_return_val_if_fail (name != NULL, NULL);
+#line 119 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp0_ = self->priv->member_of;
+#line 119 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ if (_tmp0_ == NULL) {
+#line 469 "DataObject.c"
+ GValue* _tmp1_ = NULL;
+ GValue* _tmp2_ = NULL;
+#line 120 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp1_ = def;
+#line 120 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp2_ = __g_value_dup0 (_tmp1_);
+#line 120 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ result = _tmp2_;
+#line 120 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ return result;
+#line 480 "DataObject.c"
+ }
+#line 122 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp3_ = self->priv->member_of;
+#line 122 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp4_ = name;
+#line 122 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp5_ = data_collection_get_property (_tmp3_, _tmp4_);
+#line 122 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _result_ = _tmp5_;
+#line 124 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp7_ = _result_;
+#line 124 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ if (_tmp7_ != NULL) {
+#line 494 "DataObject.c"
+ GValue* _tmp8_ = NULL;
+#line 124 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp8_ = _result_;
+#line 124 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp6_ = _tmp8_;
+#line 500 "DataObject.c"
+ } else {
+ GValue* _tmp9_ = NULL;
+#line 124 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp9_ = def;
+#line 124 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp6_ = _tmp9_;
+#line 507 "DataObject.c"
+ }
+#line 124 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp10_ = __g_value_dup0 (_tmp6_);
+#line 124 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ result = _tmp10_;
+#line 124 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ __vala_GValue_free0 (_result_);
+#line 124 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ return result;
+#line 517 "DataObject.c"
+}
+
+
+void data_object_set_collection_property (DataObject* self, const gchar* name, GValue* val, ValueEqualFunc value_equals, void* value_equals_target) {
+ DataCollection* _tmp0_ = NULL;
+#line 127 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_return_if_fail (IS_DATA_OBJECT (self));
+#line 127 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_return_if_fail (name != NULL);
+#line 127 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_return_if_fail (val != NULL);
+#line 128 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp0_ = self->priv->member_of;
+#line 128 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ if (_tmp0_ != NULL) {
+#line 533 "DataObject.c"
+ DataCollection* _tmp1_ = NULL;
+ const gchar* _tmp2_ = NULL;
+ GValue _tmp3_ = {0};
+ ValueEqualFunc _tmp4_ = NULL;
+ void* _tmp4__target = NULL;
+#line 129 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp1_ = self->priv->member_of;
+#line 129 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp2_ = name;
+#line 129 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp3_ = *val;
+#line 129 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp4_ = value_equals;
+#line 129 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp4__target = value_equals_target;
+#line 129 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ data_collection_set_property (_tmp1_, _tmp2_, &_tmp3_, _tmp4_, _tmp4__target);
+#line 551 "DataObject.c"
+ }
+}
+
+
+void data_object_clear_collection_property (DataObject* self, const gchar* name) {
+ DataCollection* _tmp0_ = NULL;
+#line 132 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_return_if_fail (IS_DATA_OBJECT (self));
+#line 132 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_return_if_fail (name != NULL);
+#line 133 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp0_ = self->priv->member_of;
+#line 133 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ if (_tmp0_ != NULL) {
+#line 566 "DataObject.c"
+ DataCollection* _tmp1_ = NULL;
+ const gchar* _tmp2_ = NULL;
+#line 134 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp1_ = self->priv->member_of;
+#line 134 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _tmp2_ = name;
+#line 134 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ data_collection_clear_property (_tmp1_, _tmp2_);
+#line 575 "DataObject.c"
+ }
+}
+
+
+static void data_object_class_init (DataObjectClass * klass) {
+#line 21 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ data_object_parent_class = g_type_class_peek_parent (klass);
+#line 21 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ g_type_class_add_private (klass, sizeof (DataObjectPrivate));
+#line 21 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ ((DataObjectClass *) klass)->notify_altered = data_object_real_notify_altered;
+#line 21 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ ((DataObjectClass *) klass)->notify_membership_changed = data_object_real_notify_membership_changed;
+#line 21 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ ((DataObjectClass *) klass)->notify_collection_property_set = data_object_real_notify_collection_property_set;
+#line 21 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ ((DataObjectClass *) klass)->notify_collection_property_cleared = data_object_real_notify_collection_property_cleared;
+#line 21 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ ((DataObjectClass *) klass)->get_name = data_object_real_get_name;
+#line 21 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ ((DataObjectClass *) klass)->to_string = data_object_real_to_string;
+#line 21 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ G_OBJECT_CLASS (klass)->finalize = data_object_finalize;
+#line 599 "DataObject.c"
+}
+
+
+static void data_object_instance_init (DataObject * self) {
+#line 21 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ self->priv = DATA_OBJECT_GET_PRIVATE (self);
+#line 32 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ self->priv->object_id = DATA_OBJECT_INVALID_OBJECT_ID;
+#line 33 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ self->priv->member_of = NULL;
+#line 34 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ self->priv->ordinal = DATA_COLLECTION_INVALID_OBJECT_ORDINAL;
+#line 612 "DataObject.c"
+}
+
+
+static void data_object_finalize (GObject* obj) {
+ DataObject * self;
+#line 21 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_DATA_OBJECT, DataObject);
+#line 33 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ _data_collection_unref0 (self->priv->member_of);
+#line 21 "/home/jens/Source/shotwell/src/core/DataObject.vala"
+ G_OBJECT_CLASS (data_object_parent_class)->finalize (obj);
+#line 624 "DataObject.c"
+}
+
+
+GType data_object_get_type (void) {
+ static volatile gsize data_object_type_id__volatile = 0;
+ if (g_once_init_enter (&data_object_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (DataObjectClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) data_object_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (DataObject), 0, (GInstanceInitFunc) data_object_instance_init, NULL };
+ GType data_object_type_id;
+ data_object_type_id = g_type_register_static (G_TYPE_OBJECT, "DataObject", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
+ g_once_init_leave (&data_object_type_id__volatile, data_object_type_id);
+ }
+ return data_object_type_id__volatile;
+}
+
+
+
diff --git a/src/core/DataSet.c b/src/core/DataSet.c
new file mode 100644
index 0000000..75c2ca2
--- /dev/null
+++ b/src/core/DataSet.c
@@ -0,0 +1,1163 @@
+/* DataSet.c generated by valac 0.32.1, the Vala compiler
+ * generated from DataSet.vala, do not modify */
+
+/* Copyright 2016 Software Freedom Conservancy Inc.
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later). See the COPYING file in this distribution.
+ */
+/**/
+/* DataSet*/
+/**/
+/* A DataSet is a collection class used for internal implementations of DataCollection*/
+/* and its children. It may be of use to other classes, however.*/
+/**/
+/* The general purpose of DataSet is to provide low-cost implementations of various collection*/
+/* operations at a cost of internally maintaining its objects in more than one simple collection.*/
+/* contains(), for example, can return a result with hash-table performance while notions of*/
+/* ordering are maintained by a SortedList. The cost is in adding and removing objects (in general,*/
+/* there are others).*/
+/**/
+/* Because this class has no signalling mechanisms and does not manipulate DataObjects in ways*/
+/* they expect to be manipulated (these features are performed by DataCollection), it's probably*/
+/* best not to use this class. Even in cases of building a list of DataObjects for some quick*/
+/* operation is probably best done by a Gee.ArrayList.*/
+/**/
+/* ComparatorPredicate is used to determine if a re-sort operation is necessary; it has no*/
+/* effect on adding a DataObject to a DataSet in sorted order.*/
+
+#include <glib.h>
+#include <glib-object.h>
+#include <gee.h>
+#include <gobject/gvaluecollector.h>
+
+
+#define TYPE_DATA_OBJECT (data_object_get_type ())
+#define DATA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_OBJECT, DataObject))
+#define DATA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_OBJECT, DataObjectClass))
+#define IS_DATA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_OBJECT))
+#define IS_DATA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_OBJECT))
+#define DATA_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_OBJECT, DataObjectClass))
+
+typedef struct _DataObject DataObject;
+typedef struct _DataObjectClass DataObjectClass;
+
+#define TYPE_ALTERATION (alteration_get_type ())
+#define ALTERATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ALTERATION, Alteration))
+#define ALTERATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ALTERATION, AlterationClass))
+#define IS_ALTERATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ALTERATION))
+#define IS_ALTERATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ALTERATION))
+#define ALTERATION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ALTERATION, AlterationClass))
+
+typedef struct _Alteration Alteration;
+typedef struct _AlterationClass AlterationClass;
+
+#define TYPE_DATA_SET (data_set_get_type ())
+#define DATA_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_SET, DataSet))
+#define DATA_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_SET, DataSetClass))
+#define IS_DATA_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_SET))
+#define IS_DATA_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_SET))
+#define DATA_SET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_SET, DataSetClass))
+
+typedef struct _DataSet DataSet;
+typedef struct _DataSetClass DataSetClass;
+typedef struct _DataSetPrivate DataSetPrivate;
+
+#define TYPE_SORTED_LIST (sorted_list_get_type ())
+#define SORTED_LIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SORTED_LIST, SortedList))
+#define SORTED_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SORTED_LIST, SortedListClass))
+#define IS_SORTED_LIST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SORTED_LIST))
+#define IS_SORTED_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SORTED_LIST))
+#define SORTED_LIST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SORTED_LIST, SortedListClass))
+
+typedef struct _SortedList SortedList;
+typedef struct _SortedListClass SortedListClass;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _data_set_unref0(var) ((var == NULL) ? NULL : (var = (data_set_unref (var), NULL)))
+typedef struct _ParamSpecDataSet ParamSpecDataSet;
+#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
+#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
+#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+
+typedef gboolean (*ComparatorPredicate) (DataObject* object, Alteration* alteration, void* user_data);
+struct _DataSet {
+ GTypeInstance parent_instance;
+ volatile int ref_count;
+ DataSetPrivate * priv;
+};
+
+struct _DataSetClass {
+ GTypeClass parent_class;
+ void (*finalize) (DataSet *self);
+};
+
+typedef gint64 (*Comparator) (void* a, void* b, void* user_data);
+struct _DataSetPrivate {
+ SortedList* list;
+ GeeHashSet* hash_set;
+ Comparator user_comparator;
+ gpointer user_comparator_target;
+ ComparatorPredicate comparator_predicate;
+ gpointer comparator_predicate_target;
+};
+
+struct _ParamSpecDataSet {
+ GParamSpec parent_instance;
+};
+
+
+static gpointer data_set_parent_class = NULL;
+
+GType data_object_get_type (void) G_GNUC_CONST;
+gpointer alteration_ref (gpointer instance);
+void alteration_unref (gpointer instance);
+GParamSpec* param_spec_alteration (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_alteration (GValue* value, gpointer v_object);
+void value_take_alteration (GValue* value, gpointer v_object);
+gpointer value_get_alteration (const GValue* value);
+GType alteration_get_type (void) G_GNUC_CONST;
+gpointer data_set_ref (gpointer instance);
+void data_set_unref (gpointer instance);
+GParamSpec* param_spec_data_set (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_data_set (GValue* value, gpointer v_object);
+void value_take_data_set (GValue* value, gpointer v_object);
+gpointer value_get_data_set (const GValue* value);
+GType data_set_get_type (void) G_GNUC_CONST;
+GType sorted_list_get_type (void) G_GNUC_CONST;
+#define DATA_SET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_DATA_SET, DataSetPrivate))
+enum {
+ DATA_SET_DUMMY_PROPERTY
+};
+SortedList* sorted_list_new (GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, Comparator cmp, void* cmp_target);
+SortedList* sorted_list_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, Comparator cmp, void* cmp_target);
+DataSet* data_set_new (void);
+DataSet* data_set_construct (GType object_type);
+void data_set_reset_comparator (DataSet* self);
+static gint64 data_set_order_added_comparator (DataSet* self, void* a, void* b);
+gint64 data_object_internal_get_ordinal (DataObject* self);
+static gboolean data_set_order_added_predicate (DataSet* self, DataObject* object, Alteration* alteration);
+static gint64 data_set_comparator_wrapper (DataSet* self, void* a, void* b);
+gboolean data_set_contains (DataSet* self, DataObject* object);
+gint data_set_get_count (DataSet* self);
+gint sorted_list_get_count (SortedList* self);
+static gboolean _data_set_order_added_predicate_comparator_predicate (DataObject* object, Alteration* alteration, gpointer self);
+void sorted_list_resort (SortedList* self, Comparator new_cmp, void* new_cmp_target);
+static gint64 _data_set_order_added_comparator_comparator (void* a, void* b, gpointer self);
+Comparator data_set_get_comparator (DataSet* self, void** result_target);
+ComparatorPredicate data_set_get_comparator_predicate (DataSet* self, void** result_target);
+void data_set_set_comparator (DataSet* self, Comparator user_comparator, void* user_comparator_target, ComparatorPredicate comparator_predicate, void* comparator_predicate_target);
+static gint64 _data_set_comparator_wrapper_comparator (void* a, void* b, gpointer self);
+GeeList* data_set_get_all (DataSet* self);
+GeeList* sorted_list_get_read_only_view_as_list (SortedList* self);
+DataSet* data_set_copy (DataSet* self);
+SortedList* sorted_list_copy (SortedList* self);
+DataObject* data_set_get_at (DataSet* self, gint index);
+gpointer sorted_list_get_at (SortedList* self, gint index);
+gint data_set_index_of (DataSet* self, DataObject* object);
+gint sorted_list_locate (SortedList* self, gconstpointer search, gboolean altered, GEqualFunc equal_func);
+gboolean data_set_add (DataSet* self, DataObject* object);
+gboolean data_set_add_many (DataSet* self, GeeCollection* objects);
+gboolean data_set_remove (DataSet* self, DataObject* object);
+gboolean data_set_remove_many (DataSet* self, GeeCollection* objects);
+gboolean data_set_resort_object (DataSet* self, DataObject* object, Alteration* alteration);
+gboolean sorted_list_resort_item (SortedList* self, gconstpointer item);
+static void data_set_finalize (DataSet* obj);
+
+
+DataSet* data_set_construct (GType object_type) {
+ DataSet* self = NULL;
+#line 35 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ self = (DataSet*) g_type_create_instance (object_type);
+#line 36 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ data_set_reset_comparator (self);
+#line 35 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return self;
+#line 177 "DataSet.c"
+}
+
+
+DataSet* data_set_new (void) {
+#line 35 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return data_set_construct (TYPE_DATA_SET);
+#line 184 "DataSet.c"
+}
+
+
+static gint64 data_set_order_added_comparator (DataSet* self, void* a, void* b) {
+ gint64 result = 0LL;
+ void* _tmp0_ = NULL;
+ gint64 _tmp1_ = 0LL;
+ void* _tmp2_ = NULL;
+ gint64 _tmp3_ = 0LL;
+#line 39 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_val_if_fail (IS_DATA_SET (self), 0LL);
+#line 40 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp0_ = a;
+#line 40 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp1_ = data_object_internal_get_ordinal (G_TYPE_CHECK_INSTANCE_CAST ((DataObject*) _tmp0_, TYPE_DATA_OBJECT, DataObject));
+#line 40 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp2_ = b;
+#line 40 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp3_ = data_object_internal_get_ordinal (G_TYPE_CHECK_INSTANCE_CAST ((DataObject*) _tmp2_, TYPE_DATA_OBJECT, DataObject));
+#line 40 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ result = _tmp1_ - _tmp3_;
+#line 40 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return result;
+#line 208 "DataSet.c"
+}
+
+
+static gboolean data_set_order_added_predicate (DataSet* self, DataObject* object, Alteration* alteration) {
+ gboolean result = FALSE;
+#line 43 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_val_if_fail (IS_DATA_SET (self), FALSE);
+#line 43 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (object), FALSE);
+#line 43 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_val_if_fail (IS_ALTERATION (alteration), FALSE);
+#line 45 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ result = FALSE;
+#line 45 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return result;
+#line 224 "DataSet.c"
+}
+
+
+static gint64 data_set_comparator_wrapper (DataSet* self, void* a, void* b) {
+ gint64 result = 0LL;
+ void* _tmp0_ = NULL;
+ void* _tmp1_ = NULL;
+ gint64 _result_ = 0LL;
+ Comparator _tmp2_ = NULL;
+ void* _tmp2__target = NULL;
+ gint64 _tmp7_ = 0LL;
+ gint64 _tmp11_ = 0LL;
+#line 48 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_val_if_fail (IS_DATA_SET (self), 0LL);
+#line 49 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp0_ = a;
+#line 49 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp1_ = b;
+#line 49 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ if (_tmp0_ == _tmp1_) {
+#line 50 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ result = (gint64) 0;
+#line 50 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return result;
+#line 249 "DataSet.c"
+ }
+#line 54 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _result_ = (gint64) 0;
+#line 56 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp2_ = self->priv->user_comparator;
+#line 56 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp2__target = self->priv->user_comparator_target;
+#line 56 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ if (_tmp2_ != NULL) {
+#line 259 "DataSet.c"
+ Comparator _tmp3_ = NULL;
+ void* _tmp3__target = NULL;
+ void* _tmp4_ = NULL;
+ void* _tmp5_ = NULL;
+ gint64 _tmp6_ = 0LL;
+#line 57 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp3_ = self->priv->user_comparator;
+#line 57 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp3__target = self->priv->user_comparator_target;
+#line 57 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp4_ = a;
+#line 57 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp5_ = b;
+#line 57 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp6_ = _tmp3_ (_tmp4_, _tmp5_, _tmp3__target);
+#line 57 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _result_ = _tmp6_;
+#line 277 "DataSet.c"
+ }
+#line 59 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp7_ = _result_;
+#line 59 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ if (_tmp7_ == ((gint64) 0)) {
+#line 283 "DataSet.c"
+ void* _tmp8_ = NULL;
+ void* _tmp9_ = NULL;
+ gint64 _tmp10_ = 0LL;
+#line 60 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp8_ = a;
+#line 60 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp9_ = b;
+#line 60 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp10_ = data_set_order_added_comparator (self, _tmp8_, _tmp9_);
+#line 60 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _result_ = _tmp10_;
+#line 295 "DataSet.c"
+ }
+#line 62 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp11_ = _result_;
+#line 62 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _vala_assert (_tmp11_ != ((gint64) 0), "result != 0");
+#line 64 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ result = _result_;
+#line 64 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return result;
+#line 305 "DataSet.c"
+}
+
+
+gboolean data_set_contains (DataSet* self, DataObject* object) {
+ gboolean result = FALSE;
+ GeeHashSet* _tmp0_ = NULL;
+ DataObject* _tmp1_ = NULL;
+ gboolean _tmp2_ = FALSE;
+#line 67 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_val_if_fail (IS_DATA_SET (self), FALSE);
+#line 67 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (object), FALSE);
+#line 68 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp0_ = self->priv->hash_set;
+#line 68 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp1_ = object;
+#line 68 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp2_ = gee_abstract_collection_contains (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp1_);
+#line 68 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ result = _tmp2_;
+#line 68 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return result;
+#line 328 "DataSet.c"
+}
+
+
+inline gint data_set_get_count (DataSet* self) {
+ gint result = 0;
+ SortedList* _tmp0_ = NULL;
+ gint _tmp1_ = 0;
+#line 71 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_val_if_fail (IS_DATA_SET (self), 0);
+#line 72 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp0_ = self->priv->list;
+#line 72 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp1_ = sorted_list_get_count (_tmp0_);
+#line 72 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ result = _tmp1_;
+#line 72 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return result;
+#line 346 "DataSet.c"
+}
+
+
+static gboolean _data_set_order_added_predicate_comparator_predicate (DataObject* object, Alteration* alteration, gpointer self) {
+ gboolean result;
+ result = data_set_order_added_predicate ((DataSet*) self, object, alteration);
+#line 77 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return result;
+#line 355 "DataSet.c"
+}
+
+
+static gint64 _data_set_order_added_comparator_comparator (void* a, void* b, gpointer self) {
+ gint64 result;
+ result = data_set_order_added_comparator ((DataSet*) self, a, b);
+#line 78 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return result;
+#line 364 "DataSet.c"
+}
+
+
+void data_set_reset_comparator (DataSet* self) {
+ SortedList* _tmp0_ = NULL;
+#line 75 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_if_fail (IS_DATA_SET (self));
+#line 76 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ self->priv->user_comparator = NULL;
+#line 76 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ self->priv->user_comparator_target = NULL;
+#line 77 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ self->priv->comparator_predicate = _data_set_order_added_predicate_comparator_predicate;
+#line 77 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ self->priv->comparator_predicate_target = self;
+#line 78 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp0_ = self->priv->list;
+#line 78 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ sorted_list_resort (_tmp0_, _data_set_order_added_comparator_comparator, self);
+#line 384 "DataSet.c"
+}
+
+
+Comparator data_set_get_comparator (DataSet* self, void** result_target) {
+ Comparator result = NULL;
+ Comparator _tmp0_ = NULL;
+ void* _tmp0__target = NULL;
+ Comparator _tmp1_ = NULL;
+ void* _tmp1__target = NULL;
+#line 81 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_val_if_fail (IS_DATA_SET (self), NULL);
+#line 82 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp0_ = self->priv->user_comparator;
+#line 82 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp0__target = self->priv->user_comparator_target;
+#line 82 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp1_ = _tmp0_;
+#line 82 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp1__target = _tmp0__target;
+#line 82 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ *result_target = _tmp1__target;
+#line 82 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ result = _tmp1_;
+#line 82 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return result;
+#line 410 "DataSet.c"
+}
+
+
+ComparatorPredicate data_set_get_comparator_predicate (DataSet* self, void** result_target) {
+ ComparatorPredicate result = NULL;
+ ComparatorPredicate _tmp0_ = NULL;
+ void* _tmp0__target = NULL;
+ ComparatorPredicate _tmp1_ = NULL;
+ void* _tmp1__target = NULL;
+#line 85 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_val_if_fail (IS_DATA_SET (self), NULL);
+#line 86 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp0_ = self->priv->comparator_predicate;
+#line 86 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp0__target = self->priv->comparator_predicate_target;
+#line 86 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp1_ = _tmp0_;
+#line 86 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp1__target = _tmp0__target;
+#line 86 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ *result_target = _tmp1__target;
+#line 86 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ result = _tmp1_;
+#line 86 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return result;
+#line 436 "DataSet.c"
+}
+
+
+static gint64 _data_set_comparator_wrapper_comparator (void* a, void* b, gpointer self) {
+ gint64 result;
+ result = data_set_comparator_wrapper ((DataSet*) self, a, b);
+#line 92 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return result;
+#line 445 "DataSet.c"
+}
+
+
+void data_set_set_comparator (DataSet* self, Comparator user_comparator, void* user_comparator_target, ComparatorPredicate comparator_predicate, void* comparator_predicate_target) {
+ Comparator _tmp0_ = NULL;
+ void* _tmp0__target = NULL;
+ ComparatorPredicate _tmp1_ = NULL;
+ void* _tmp1__target = NULL;
+ SortedList* _tmp2_ = NULL;
+#line 89 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_if_fail (IS_DATA_SET (self));
+#line 90 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp0_ = user_comparator;
+#line 90 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp0__target = user_comparator_target;
+#line 90 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ self->priv->user_comparator = _tmp0_;
+#line 90 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ self->priv->user_comparator_target = _tmp0__target;
+#line 91 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp1_ = comparator_predicate;
+#line 91 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp1__target = comparator_predicate_target;
+#line 91 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ self->priv->comparator_predicate = _tmp1_;
+#line 91 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ self->priv->comparator_predicate_target = _tmp1__target;
+#line 92 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp2_ = self->priv->list;
+#line 92 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ sorted_list_resort (_tmp2_, _data_set_comparator_wrapper_comparator, self);
+#line 477 "DataSet.c"
+}
+
+
+GeeList* data_set_get_all (DataSet* self) {
+ GeeList* result = NULL;
+ SortedList* _tmp0_ = NULL;
+ GeeList* _tmp1_ = NULL;
+ GeeList* _tmp2_ = NULL;
+#line 95 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_val_if_fail (IS_DATA_SET (self), NULL);
+#line 96 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp0_ = self->priv->list;
+#line 96 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp1_ = sorted_list_get_read_only_view_as_list (_tmp0_);
+#line 96 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp2_ = _tmp1_;
+#line 96 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ result = _tmp2_;
+#line 96 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return result;
+#line 498 "DataSet.c"
+}
+
+
+DataSet* data_set_copy (DataSet* self) {
+ DataSet* result = NULL;
+ DataSet* clone = NULL;
+ DataSet* _tmp0_ = NULL;
+ SortedList* _tmp1_ = NULL;
+ SortedList* _tmp2_ = NULL;
+ GeeHashSet* _tmp3_ = NULL;
+ GeeHashSet* _tmp4_ = NULL;
+#line 99 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_val_if_fail (IS_DATA_SET (self), NULL);
+#line 100 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp0_ = data_set_new ();
+#line 100 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ clone = _tmp0_;
+#line 101 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp1_ = self->priv->list;
+#line 101 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp2_ = sorted_list_copy (_tmp1_);
+#line 101 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _g_object_unref0 (clone->priv->list);
+#line 101 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ clone->priv->list = _tmp2_;
+#line 102 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp3_ = clone->priv->hash_set;
+#line 102 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp4_ = self->priv->hash_set;
+#line 102 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ gee_collection_add_all (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_COLLECTION, GeeCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 104 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ result = clone;
+#line 104 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return result;
+#line 534 "DataSet.c"
+}
+
+
+DataObject* data_set_get_at (DataSet* self, gint index) {
+ DataObject* result = NULL;
+ SortedList* _tmp0_ = NULL;
+ gint _tmp1_ = 0;
+ gpointer _tmp2_ = NULL;
+#line 107 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_val_if_fail (IS_DATA_SET (self), NULL);
+#line 108 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp0_ = self->priv->list;
+#line 108 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp1_ = index;
+#line 108 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp2_ = sorted_list_get_at (_tmp0_, _tmp1_);
+#line 108 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ result = (DataObject*) _tmp2_;
+#line 108 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return result;
+#line 555 "DataSet.c"
+}
+
+
+gint data_set_index_of (DataSet* self, DataObject* object) {
+ gint result = 0;
+ SortedList* _tmp0_ = NULL;
+ DataObject* _tmp1_ = NULL;
+ GEqualFunc _tmp2_ = NULL;
+ gint _tmp3_ = 0;
+#line 111 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_val_if_fail (IS_DATA_SET (self), 0);
+#line 111 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (object), 0);
+#line 112 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp0_ = self->priv->list;
+#line 112 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp1_ = object;
+#line 112 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp2_ = g_direct_equal;
+#line 112 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp3_ = sorted_list_locate (_tmp0_, _tmp1_, FALSE, _tmp2_);
+#line 112 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ result = _tmp3_;
+#line 112 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return result;
+#line 581 "DataSet.c"
+}
+
+
+gboolean data_set_add (DataSet* self, DataObject* object) {
+ gboolean result = FALSE;
+ SortedList* _tmp0_ = NULL;
+ DataObject* _tmp1_ = NULL;
+ gboolean _tmp2_ = FALSE;
+ GeeHashSet* _tmp3_ = NULL;
+ DataObject* _tmp4_ = NULL;
+ gboolean _tmp5_ = FALSE;
+#line 116 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_val_if_fail (IS_DATA_SET (self), FALSE);
+#line 116 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (object), FALSE);
+#line 117 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp0_ = self->priv->list;
+#line 117 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp1_ = object;
+#line 117 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp2_ = gee_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_COLLECTION, GeeCollection), _tmp1_);
+#line 117 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ if (!_tmp2_) {
+#line 118 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ result = FALSE;
+#line 118 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return result;
+#line 609 "DataSet.c"
+ }
+#line 120 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp3_ = self->priv->hash_set;
+#line 120 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp4_ = object;
+#line 120 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp5_ = gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp4_);
+#line 120 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ if (!_tmp5_) {
+#line 619 "DataSet.c"
+ SortedList* _tmp6_ = NULL;
+ DataObject* _tmp7_ = NULL;
+#line 122 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp6_ = self->priv->list;
+#line 122 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp7_ = object;
+#line 122 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ gee_collection_remove (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, GEE_TYPE_COLLECTION, GeeCollection), _tmp7_);
+#line 124 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ result = FALSE;
+#line 124 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return result;
+#line 632 "DataSet.c"
+ }
+#line 127 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ result = TRUE;
+#line 127 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return result;
+#line 638 "DataSet.c"
+}
+
+
+gboolean data_set_add_many (DataSet* self, GeeCollection* objects) {
+ gboolean result = FALSE;
+ gint count = 0;
+ GeeCollection* _tmp0_ = NULL;
+ gint _tmp1_ = 0;
+ gint _tmp2_ = 0;
+ gint _tmp3_ = 0;
+ SortedList* _tmp4_ = NULL;
+ GeeCollection* _tmp5_ = NULL;
+ gboolean _tmp6_ = FALSE;
+ GeeHashSet* _tmp7_ = NULL;
+ GeeCollection* _tmp8_ = NULL;
+ gboolean _tmp9_ = FALSE;
+#line 131 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_val_if_fail (IS_DATA_SET (self), FALSE);
+#line 131 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_val_if_fail (GEE_IS_COLLECTION (objects), FALSE);
+#line 132 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp0_ = objects;
+#line 132 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp1_ = gee_collection_get_size (_tmp0_);
+#line 132 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp2_ = _tmp1_;
+#line 132 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ count = _tmp2_;
+#line 133 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp3_ = count;
+#line 133 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ if (_tmp3_ == 0) {
+#line 134 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ result = TRUE;
+#line 134 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return result;
+#line 675 "DataSet.c"
+ }
+#line 136 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp4_ = self->priv->list;
+#line 136 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp5_ = objects;
+#line 136 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp6_ = gee_collection_add_all (G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, GEE_TYPE_COLLECTION, GeeCollection), _tmp5_);
+#line 136 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ if (!_tmp6_) {
+#line 137 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ result = FALSE;
+#line 137 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return result;
+#line 689 "DataSet.c"
+ }
+#line 139 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp7_ = self->priv->hash_set;
+#line 139 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp8_ = objects;
+#line 139 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp9_ = gee_collection_add_all (G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, GEE_TYPE_COLLECTION, GeeCollection), _tmp8_);
+#line 139 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ if (!_tmp9_) {
+#line 699 "DataSet.c"
+ SortedList* _tmp10_ = NULL;
+ GeeCollection* _tmp11_ = NULL;
+#line 141 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp10_ = self->priv->list;
+#line 141 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp11_ = objects;
+#line 141 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ gee_collection_remove_all (G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, GEE_TYPE_COLLECTION, GeeCollection), _tmp11_);
+#line 143 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ result = FALSE;
+#line 143 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return result;
+#line 712 "DataSet.c"
+ }
+#line 146 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ result = TRUE;
+#line 146 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return result;
+#line 718 "DataSet.c"
+}
+
+
+gboolean data_set_remove (DataSet* self, DataObject* object) {
+ gboolean result = FALSE;
+ gboolean success = FALSE;
+ SortedList* _tmp0_ = NULL;
+ DataObject* _tmp1_ = NULL;
+ gboolean _tmp2_ = FALSE;
+ GeeHashSet* _tmp3_ = NULL;
+ DataObject* _tmp4_ = NULL;
+ gboolean _tmp5_ = FALSE;
+#line 149 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_val_if_fail (IS_DATA_SET (self), FALSE);
+#line 149 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (object), FALSE);
+#line 150 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ success = TRUE;
+#line 152 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp0_ = self->priv->list;
+#line 152 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp1_ = object;
+#line 152 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp2_ = gee_collection_remove (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_COLLECTION, GeeCollection), _tmp1_);
+#line 152 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ if (!_tmp2_) {
+#line 153 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ success = FALSE;
+#line 747 "DataSet.c"
+ }
+#line 155 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp3_ = self->priv->hash_set;
+#line 155 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp4_ = object;
+#line 155 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp5_ = gee_abstract_collection_remove (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp4_);
+#line 155 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ if (!_tmp5_) {
+#line 156 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ success = FALSE;
+#line 759 "DataSet.c"
+ }
+#line 158 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ result = success;
+#line 158 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return result;
+#line 765 "DataSet.c"
+}
+
+
+gboolean data_set_remove_many (DataSet* self, GeeCollection* objects) {
+ gboolean result = FALSE;
+ gboolean success = FALSE;
+ SortedList* _tmp0_ = NULL;
+ GeeCollection* _tmp1_ = NULL;
+ gboolean _tmp2_ = FALSE;
+ GeeHashSet* _tmp3_ = NULL;
+ GeeCollection* _tmp4_ = NULL;
+ gboolean _tmp5_ = FALSE;
+#line 161 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_val_if_fail (IS_DATA_SET (self), FALSE);
+#line 161 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_val_if_fail (GEE_IS_COLLECTION (objects), FALSE);
+#line 162 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ success = TRUE;
+#line 164 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp0_ = self->priv->list;
+#line 164 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp1_ = objects;
+#line 164 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp2_ = gee_collection_remove_all (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_COLLECTION, GeeCollection), _tmp1_);
+#line 164 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ if (!_tmp2_) {
+#line 165 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ success = FALSE;
+#line 794 "DataSet.c"
+ }
+#line 167 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp3_ = self->priv->hash_set;
+#line 167 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp4_ = objects;
+#line 167 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp5_ = gee_collection_remove_all (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_COLLECTION, GeeCollection), _tmp4_);
+#line 167 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ if (!_tmp5_) {
+#line 168 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ success = FALSE;
+#line 806 "DataSet.c"
+ }
+#line 170 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ result = success;
+#line 170 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return result;
+#line 812 "DataSet.c"
+}
+
+
+gboolean data_set_resort_object (DataSet* self, DataObject* object, Alteration* alteration) {
+ gboolean result = FALSE;
+ gboolean _tmp0_ = FALSE;
+ gboolean _tmp1_ = FALSE;
+ ComparatorPredicate _tmp2_ = NULL;
+ void* _tmp2__target = NULL;
+ SortedList* _tmp8_ = NULL;
+ DataObject* _tmp9_ = NULL;
+ gboolean _tmp10_ = FALSE;
+#line 174 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_val_if_fail (IS_DATA_SET (self), FALSE);
+#line 174 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (object), FALSE);
+#line 174 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_val_if_fail ((alteration == NULL) || IS_ALTERATION (alteration), FALSE);
+#line 175 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp2_ = self->priv->comparator_predicate;
+#line 175 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp2__target = self->priv->comparator_predicate_target;
+#line 175 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ if (_tmp2_ != NULL) {
+#line 837 "DataSet.c"
+ Alteration* _tmp3_ = NULL;
+#line 175 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp3_ = alteration;
+#line 175 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp1_ = _tmp3_ != NULL;
+#line 843 "DataSet.c"
+ } else {
+#line 175 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp1_ = FALSE;
+#line 847 "DataSet.c"
+ }
+#line 175 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ if (_tmp1_) {
+#line 851 "DataSet.c"
+ ComparatorPredicate _tmp4_ = NULL;
+ void* _tmp4__target = NULL;
+ DataObject* _tmp5_ = NULL;
+ Alteration* _tmp6_ = NULL;
+ gboolean _tmp7_ = FALSE;
+#line 176 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp4_ = self->priv->comparator_predicate;
+#line 176 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp4__target = self->priv->comparator_predicate_target;
+#line 176 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp5_ = object;
+#line 176 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp6_ = alteration;
+#line 176 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp7_ = _tmp4_ (_tmp5_, _tmp6_, _tmp4__target);
+#line 176 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp0_ = !_tmp7_;
+#line 869 "DataSet.c"
+ } else {
+#line 175 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp0_ = FALSE;
+#line 873 "DataSet.c"
+ }
+#line 175 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ if (_tmp0_) {
+#line 177 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ result = FALSE;
+#line 177 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return result;
+#line 881 "DataSet.c"
+ }
+#line 180 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp8_ = self->priv->list;
+#line 180 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp9_ = object;
+#line 180 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp10_ = sorted_list_resort_item (_tmp8_, _tmp9_);
+#line 180 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ result = _tmp10_;
+#line 180 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return result;
+#line 893 "DataSet.c"
+}
+
+
+static void value_data_set_init (GValue* value) {
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ value->data[0].v_pointer = NULL;
+#line 900 "DataSet.c"
+}
+
+
+static void value_data_set_free_value (GValue* value) {
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ if (value->data[0].v_pointer) {
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ data_set_unref (value->data[0].v_pointer);
+#line 909 "DataSet.c"
+ }
+}
+
+
+static void value_data_set_copy_value (const GValue* src_value, GValue* dest_value) {
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ if (src_value->data[0].v_pointer) {
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ dest_value->data[0].v_pointer = data_set_ref (src_value->data[0].v_pointer);
+#line 919 "DataSet.c"
+ } else {
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ dest_value->data[0].v_pointer = NULL;
+#line 923 "DataSet.c"
+ }
+}
+
+
+static gpointer value_data_set_peek_pointer (const GValue* value) {
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return value->data[0].v_pointer;
+#line 931 "DataSet.c"
+}
+
+
+static gchar* value_data_set_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ if (collect_values[0].v_pointer) {
+#line 938 "DataSet.c"
+ DataSet* object;
+ object = collect_values[0].v_pointer;
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ if (object->parent_instance.g_class == NULL) {
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+#line 945 "DataSet.c"
+ } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+#line 949 "DataSet.c"
+ }
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ value->data[0].v_pointer = data_set_ref (object);
+#line 953 "DataSet.c"
+ } else {
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ value->data[0].v_pointer = NULL;
+#line 957 "DataSet.c"
+ }
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return NULL;
+#line 961 "DataSet.c"
+}
+
+
+static gchar* value_data_set_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+ DataSet** object_p;
+ object_p = collect_values[0].v_pointer;
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ if (!object_p) {
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+#line 972 "DataSet.c"
+ }
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ if (!value->data[0].v_pointer) {
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ *object_p = NULL;
+#line 978 "DataSet.c"
+ } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ *object_p = value->data[0].v_pointer;
+#line 982 "DataSet.c"
+ } else {
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ *object_p = data_set_ref (value->data[0].v_pointer);
+#line 986 "DataSet.c"
+ }
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return NULL;
+#line 990 "DataSet.c"
+}
+
+
+GParamSpec* param_spec_data_set (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
+ ParamSpecDataSet* spec;
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_val_if_fail (g_type_is_a (object_type, TYPE_DATA_SET), NULL);
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ G_PARAM_SPEC (spec)->value_type = object_type;
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return G_PARAM_SPEC (spec);
+#line 1004 "DataSet.c"
+}
+
+
+gpointer value_get_data_set (const GValue* value) {
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_DATA_SET), NULL);
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return value->data[0].v_pointer;
+#line 1013 "DataSet.c"
+}
+
+
+void value_set_data_set (GValue* value, gpointer v_object) {
+ DataSet* old;
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_DATA_SET));
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ old = value->data[0].v_pointer;
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ if (v_object) {
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_DATA_SET));
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ value->data[0].v_pointer = v_object;
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ data_set_ref (value->data[0].v_pointer);
+#line 1033 "DataSet.c"
+ } else {
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ value->data[0].v_pointer = NULL;
+#line 1037 "DataSet.c"
+ }
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ if (old) {
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ data_set_unref (old);
+#line 1043 "DataSet.c"
+ }
+}
+
+
+void value_take_data_set (GValue* value, gpointer v_object) {
+ DataSet* old;
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_DATA_SET));
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ old = value->data[0].v_pointer;
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ if (v_object) {
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_DATA_SET));
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ value->data[0].v_pointer = v_object;
+#line 1062 "DataSet.c"
+ } else {
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ value->data[0].v_pointer = NULL;
+#line 1066 "DataSet.c"
+ }
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ if (old) {
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ data_set_unref (old);
+#line 1072 "DataSet.c"
+ }
+}
+
+
+static void data_set_class_init (DataSetClass * klass) {
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ data_set_parent_class = g_type_class_peek_parent (klass);
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ ((DataSetClass *) klass)->finalize = data_set_finalize;
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_type_class_add_private (klass, sizeof (DataSetPrivate));
+#line 1084 "DataSet.c"
+}
+
+
+static void data_set_instance_init (DataSet * self) {
+ SortedList* _tmp0_ = NULL;
+ GeeHashSet* _tmp1_ = NULL;
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ self->priv = DATA_SET_GET_PRIVATE (self);
+#line 30 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp0_ = sorted_list_new (TYPE_DATA_OBJECT, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL);
+#line 30 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ self->priv->list = _tmp0_;
+#line 31 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _tmp1_ = gee_hash_set_new (TYPE_DATA_OBJECT, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 31 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ self->priv->hash_set = _tmp1_;
+#line 32 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ self->priv->user_comparator = NULL;
+#line 33 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ self->priv->comparator_predicate = NULL;
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ self->ref_count = 1;
+#line 1107 "DataSet.c"
+}
+
+
+static void data_set_finalize (DataSet* obj) {
+ DataSet * self;
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_DATA_SET, DataSet);
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_signal_handlers_destroy (self);
+#line 30 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _g_object_unref0 (self->priv->list);
+#line 31 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ _g_object_unref0 (self->priv->hash_set);
+#line 1121 "DataSet.c"
+}
+
+
+GType data_set_get_type (void) {
+ static volatile gsize data_set_type_id__volatile = 0;
+ if (g_once_init_enter (&data_set_type_id__volatile)) {
+ static const GTypeValueTable g_define_type_value_table = { value_data_set_init, value_data_set_free_value, value_data_set_copy_value, value_data_set_peek_pointer, "p", value_data_set_collect_value, "p", value_data_set_lcopy_value };
+ static const GTypeInfo g_define_type_info = { sizeof (DataSetClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) data_set_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (DataSet), 0, (GInstanceInitFunc) data_set_instance_init, &g_define_type_value_table };
+ static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
+ GType data_set_type_id;
+ data_set_type_id = g_type_register_fundamental (g_type_fundamental_next (), "DataSet", &g_define_type_info, &g_define_type_fundamental_info, 0);
+ g_once_init_leave (&data_set_type_id__volatile, data_set_type_id);
+ }
+ return data_set_type_id__volatile;
+}
+
+
+gpointer data_set_ref (gpointer instance) {
+ DataSet* self;
+ self = instance;
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_atomic_int_inc (&self->ref_count);
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ return instance;
+#line 1146 "DataSet.c"
+}
+
+
+void data_set_unref (gpointer instance) {
+ DataSet* self;
+ self = instance;
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ if (g_atomic_int_dec_and_test (&self->ref_count)) {
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ DATA_SET_GET_CLASS (self)->finalize (self);
+#line 29 "/home/jens/Source/shotwell/src/core/DataSet.vala"
+ g_type_free_instance ((GTypeInstance *) self);
+#line 1159 "DataSet.c"
+ }
+}
+
+
+
diff --git a/src/core/DataSource.c b/src/core/DataSource.c
new file mode 100644
index 0000000..2b48942
--- /dev/null
+++ b/src/core/DataSource.c
@@ -0,0 +1,4864 @@
+/* DataSource.c generated by valac 0.32.1, the Vala compiler
+ * generated from DataSource.vala, do not modify */
+
+/* Copyright 2016 Software Freedom Conservancy Inc.
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later). See the COPYING file in this distribution.
+ */
+/**/
+/* DataSource*/
+/* */
+/* A DataSource is an object that is unique throughout the system. DataSources*/
+/* commonly have external and/or persistent representations, hence they have a notion of being*/
+/* destroyed (versus removed or freed). Several DataViews may exist that reference a single*/
+/* DataSource. Note that DataSources MUST be destroyed (rather than simply removed) from their*/
+/* SourceCollection, and that they MUST be destroyed via their SourceCollection (rather than*/
+/* calling DataSource.destroy() directly.)*/
+/**/
+/* Destroying a DataSource indicates it should remove all secondary and tertiary structures (such*/
+/* as thumbnails) and any records pointing to its backing store. SourceCollection.destroy_marked()*/
+/* has a parameter indicating if the backing should be destroyed as well; that is when*/
+/* internal_delete_backing() is called.*/
+/**/
+/* There are no provisions (currently) for a DataSource to be removed from its SourceCollection*/
+/* without destroying its backing and/or secondary and tertiary structures. DataSources are intended*/
+/* to go to the grave with their SourceCollection otherwise. If a need arises for a DataSource to*/
+/* be peaceably removed from its SourceCollection, code will need to be written. SourceSnapshots*/
+/* may be one solution to this problem.*/
+/**/
+/* Some DataSources cannot be reconstituted (for example, if its backing file is deleted). In*/
+/* that case, dehydrate() should return null. When reconstituted, it is the responsibility of the*/
+/* implementation to ensure an exact clone is produced, minus any details that are not relevant or*/
+/* exposed (such as a database ID).*/
+/**/
+/* If other DataSources refer to this DataSource, their state will *not* be */
+/* saved/restored. This must be achieved via other means. However, implementations *should**/
+/* track when changes to external state would break the proxy and call notify_broken();*/
+/**/
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gee.h>
+#include <gobject/gvaluecollector.h>
+
+
+#define TYPE_DATA_OBJECT (data_object_get_type ())
+#define DATA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_OBJECT, DataObject))
+#define DATA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_OBJECT, DataObjectClass))
+#define IS_DATA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_OBJECT))
+#define IS_DATA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_OBJECT))
+#define DATA_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_OBJECT, DataObjectClass))
+
+typedef struct _DataObject DataObject;
+typedef struct _DataObjectClass DataObjectClass;
+typedef struct _DataObjectPrivate DataObjectPrivate;
+
+#define TYPE_ALTERATION (alteration_get_type ())
+#define ALTERATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ALTERATION, Alteration))
+#define ALTERATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ALTERATION, AlterationClass))
+#define IS_ALTERATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ALTERATION))
+#define IS_ALTERATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ALTERATION))
+#define ALTERATION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ALTERATION, AlterationClass))
+
+typedef struct _Alteration Alteration;
+typedef struct _AlterationClass AlterationClass;
+
+#define TYPE_DATA_COLLECTION (data_collection_get_type ())
+#define DATA_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_COLLECTION, DataCollection))
+#define DATA_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_COLLECTION, DataCollectionClass))
+#define IS_DATA_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_COLLECTION))
+#define IS_DATA_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_COLLECTION))
+#define DATA_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_COLLECTION, DataCollectionClass))
+
+typedef struct _DataCollection DataCollection;
+typedef struct _DataCollectionClass DataCollectionClass;
+
+#define TYPE_DATA_SOURCE (data_source_get_type ())
+#define DATA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_SOURCE, DataSource))
+#define DATA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_SOURCE, DataSourceClass))
+#define IS_DATA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_SOURCE))
+#define IS_DATA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_SOURCE))
+#define DATA_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_SOURCE, DataSourceClass))
+
+typedef struct _DataSource DataSource;
+typedef struct _DataSourceClass DataSourceClass;
+typedef struct _DataSourcePrivate DataSourcePrivate;
+
+#define TYPE_SOURCE_HOLDING_TANK (source_holding_tank_get_type ())
+#define SOURCE_HOLDING_TANK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SOURCE_HOLDING_TANK, SourceHoldingTank))
+#define SOURCE_HOLDING_TANK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SOURCE_HOLDING_TANK, SourceHoldingTankClass))
+#define IS_SOURCE_HOLDING_TANK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SOURCE_HOLDING_TANK))
+#define IS_SOURCE_HOLDING_TANK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SOURCE_HOLDING_TANK))
+#define SOURCE_HOLDING_TANK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SOURCE_HOLDING_TANK, SourceHoldingTankClass))
+
+typedef struct _SourceHoldingTank SourceHoldingTank;
+typedef struct _SourceHoldingTankClass SourceHoldingTankClass;
+
+#define TYPE_SOURCE_COLLECTION (source_collection_get_type ())
+#define SOURCE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SOURCE_COLLECTION, SourceCollection))
+#define SOURCE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SOURCE_COLLECTION, SourceCollectionClass))
+#define IS_SOURCE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SOURCE_COLLECTION))
+#define IS_SOURCE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SOURCE_COLLECTION))
+#define SOURCE_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SOURCE_COLLECTION, SourceCollectionClass))
+
+typedef struct _SourceCollection SourceCollection;
+typedef struct _SourceCollectionClass SourceCollectionClass;
+
+#define TYPE_SOURCE_SNAPSHOT (source_snapshot_get_type ())
+#define SOURCE_SNAPSHOT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SOURCE_SNAPSHOT, SourceSnapshot))
+#define SOURCE_SNAPSHOT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SOURCE_SNAPSHOT, SourceSnapshotClass))
+#define IS_SOURCE_SNAPSHOT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SOURCE_SNAPSHOT))
+#define IS_SOURCE_SNAPSHOT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SOURCE_SNAPSHOT))
+#define SOURCE_SNAPSHOT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SOURCE_SNAPSHOT, SourceSnapshotClass))
+
+typedef struct _SourceSnapshot SourceSnapshot;
+typedef struct _SourceSnapshotClass SourceSnapshotClass;
+
+#define TYPE_DATA_VIEW (data_view_get_type ())
+#define DATA_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_VIEW, DataView))
+#define DATA_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_VIEW, DataViewClass))
+#define IS_DATA_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_VIEW))
+#define IS_DATA_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_VIEW))
+#define DATA_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_VIEW, DataViewClass))
+
+typedef struct _DataView DataView;
+typedef struct _DataViewClass DataViewClass;
+#define _source_holding_tank_unref0(var) ((var == NULL) ? NULL : (var = (source_holding_tank_unref (var), NULL)))
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _data_collection_unref0(var) ((var == NULL) ? NULL : (var = (data_collection_unref (var), NULL)))
+#define _g_free0(var) (var = (g_free (var), NULL))
+
+#define TYPE_SOURCE_BACKLINK (source_backlink_get_type ())
+#define SOURCE_BACKLINK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SOURCE_BACKLINK, SourceBacklink))
+#define SOURCE_BACKLINK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SOURCE_BACKLINK, SourceBacklinkClass))
+#define IS_SOURCE_BACKLINK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SOURCE_BACKLINK))
+#define IS_SOURCE_BACKLINK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SOURCE_BACKLINK))
+#define SOURCE_BACKLINK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SOURCE_BACKLINK, SourceBacklinkClass))
+
+typedef struct _SourceBacklink SourceBacklink;
+typedef struct _SourceBacklinkClass SourceBacklinkClass;
+#define _source_backlink_unref0(var) ((var == NULL) ? NULL : (var = (source_backlink_unref (var), NULL)))
+#define _g_string_free0(var) ((var == NULL) ? NULL : (var = (g_string_free (var, TRUE), NULL)))
+#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
+typedef struct _SourceSnapshotPrivate SourceSnapshotPrivate;
+typedef struct _ParamSpecSourceSnapshot ParamSpecSourceSnapshot;
+typedef struct _SourceBacklinkPrivate SourceBacklinkPrivate;
+typedef struct _ParamSpecSourceBacklink ParamSpecSourceBacklink;
+
+#define TYPE_SOURCE_PROXY (source_proxy_get_type ())
+#define SOURCE_PROXY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SOURCE_PROXY, SourceProxy))
+#define SOURCE_PROXY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SOURCE_PROXY, SourceProxyClass))
+#define IS_SOURCE_PROXY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SOURCE_PROXY))
+#define IS_SOURCE_PROXY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SOURCE_PROXY))
+#define SOURCE_PROXY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SOURCE_PROXY, SourceProxyClass))
+
+typedef struct _SourceProxy SourceProxy;
+typedef struct _SourceProxyClass SourceProxyClass;
+typedef struct _SourceProxyPrivate SourceProxyPrivate;
+#define _source_snapshot_unref0(var) ((var == NULL) ? NULL : (var = (source_snapshot_unref (var), NULL)))
+typedef struct _ParamSpecSourceProxy ParamSpecSourceProxy;
+
+#define TYPE_PROXYABLE (proxyable_get_type ())
+#define PROXYABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_PROXYABLE, Proxyable))
+#define IS_PROXYABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_PROXYABLE))
+#define PROXYABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TYPE_PROXYABLE, ProxyableIface))
+
+typedef struct _Proxyable Proxyable;
+typedef struct _ProxyableIface ProxyableIface;
+#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
+#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
+#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+
+struct _DataObject {
+ GObject parent_instance;
+ DataObjectPrivate * priv;
+};
+
+struct _DataObjectClass {
+ GObjectClass parent_class;
+ void (*notify_altered) (DataObject* self, Alteration* alteration);
+ void (*notify_membership_changed) (DataObject* self, DataCollection* collection);
+ void (*notify_collection_property_set) (DataObject* self, const gchar* name, GValue* old, GValue* val);
+ void (*notify_collection_property_cleared) (DataObject* self, const gchar* name);
+ gchar* (*get_name) (DataObject* self);
+ gchar* (*to_string) (DataObject* self);
+};
+
+struct _DataSource {
+ DataObject parent_instance;
+ DataSourcePrivate * priv;
+};
+
+struct _DataSourceClass {
+ DataObjectClass parent_class;
+ void (*notify_held_in_tank) (DataSource* self, SourceHoldingTank* holding_tank);
+ void (*notify_unlinking) (DataSource* self, SourceCollection* collection);
+ void (*notify_unlinked) (DataSource* self);
+ void (*notify_relinking) (DataSource* self, SourceCollection* collection);
+ void (*notify_relinked) (DataSource* self);
+ gchar* (*get_typename) (DataSource* self);
+ gint64 (*get_instance_id) (DataSource* self);
+ gchar* (*get_source_id) (DataSource* self);
+ void (*commit_backlinks) (DataSource* self, SourceCollection* sources, const gchar* dehydrated);
+ SourceSnapshot* (*save_snapshot) (DataSource* self);
+ gboolean (*internal_delete_backing) (DataSource* self, GError** error);
+ gboolean (*equals) (DataSource* self, DataSource* source);
+ void (*destroy) (DataSource* self);
+ void (*unlinked) (DataSource* self, SourceCollection* sources);
+ void (*relinked) (DataSource* self, SourceCollection* sources);
+ void (*destroyed) (DataSource* self);
+};
+
+struct _DataSourcePrivate {
+ DataView** subscribers;
+ gint subscribers_length1;
+ gint _subscribers_size_;
+ SourceHoldingTank* holding_tank;
+ SourceCollection* unlinked_from_collection;
+ GeeHashMap* backlinks;
+ gboolean in_contact;
+ gboolean marked_for_destroy;
+ gboolean is_destroyed;
+};
+
+typedef void (*DataSourceContactSubscriber) (DataView* view, void* user_data);
+typedef void (*DataSourceContactSubscriberAlteration) (DataView* view, Alteration* alteration, void* user_data);
+struct _SourceSnapshot {
+ GTypeInstance parent_instance;
+ volatile int ref_count;
+ SourceSnapshotPrivate * priv;
+};
+
+struct _SourceSnapshotClass {
+ GTypeClass parent_class;
+ void (*finalize) (SourceSnapshot *self);
+ void (*notify_broken) (SourceSnapshot* self);
+ void (*broken) (SourceSnapshot* self);
+};
+
+struct _SourceSnapshotPrivate {
+ gboolean snapshot_broken;
+};
+
+struct _ParamSpecSourceSnapshot {
+ GParamSpec parent_instance;
+};
+
+struct _SourceBacklink {
+ GTypeInstance parent_instance;
+ volatile int ref_count;
+ SourceBacklinkPrivate * priv;
+};
+
+struct _SourceBacklinkClass {
+ GTypeClass parent_class;
+ void (*finalize) (SourceBacklink *self);
+};
+
+struct _SourceBacklinkPrivate {
+ gchar* _name;
+ gchar* _value;
+};
+
+struct _ParamSpecSourceBacklink {
+ GParamSpec parent_instance;
+};
+
+struct _SourceProxy {
+ GTypeInstance parent_instance;
+ volatile int ref_count;
+ SourceProxyPrivate * priv;
+};
+
+struct _SourceProxyClass {
+ GTypeClass parent_class;
+ void (*finalize) (SourceProxy *self);
+ DataSource* (*reconstitute) (SourceProxy* self, gint64 object_id, SourceSnapshot* snapshot);
+ void (*notify_reconstituted) (SourceProxy* self, DataSource* source);
+ void (*notify_dehydrated) (SourceProxy* self);
+ void (*notify_broken) (SourceProxy* self);
+ void (*reconstituted) (SourceProxy* self, DataSource* source);
+ void (*dehydrated) (SourceProxy* self);
+ void (*broken) (SourceProxy* self);
+};
+
+struct _SourceProxyPrivate {
+ gint64 object_id;
+ gchar* source_string;
+ DataSource* source;
+ SourceSnapshot* snapshot;
+ SourceCollection* membership;
+};
+
+struct _ParamSpecSourceProxy {
+ GParamSpec parent_instance;
+};
+
+struct _ProxyableIface {
+ GTypeInterface parent_iface;
+ SourceProxy* (*get_proxy) (Proxyable* self);
+};
+
+
+static gpointer data_source_parent_class = NULL;
+static gpointer source_snapshot_parent_class = NULL;
+static gpointer source_backlink_parent_class = NULL;
+static gpointer source_proxy_parent_class = NULL;
+
+GType data_object_get_type (void) G_GNUC_CONST;
+gpointer alteration_ref (gpointer instance);
+void alteration_unref (gpointer instance);
+GParamSpec* param_spec_alteration (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_alteration (GValue* value, gpointer v_object);
+void value_take_alteration (GValue* value, gpointer v_object);
+gpointer value_get_alteration (const GValue* value);
+GType alteration_get_type (void) G_GNUC_CONST;
+gpointer data_collection_ref (gpointer instance);
+void data_collection_unref (gpointer instance);
+GParamSpec* param_spec_data_collection (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_data_collection (GValue* value, gpointer v_object);
+void value_take_data_collection (GValue* value, gpointer v_object);
+gpointer value_get_data_collection (const GValue* value);
+GType data_collection_get_type (void) G_GNUC_CONST;
+GType data_source_get_type (void) G_GNUC_CONST;
+gpointer source_holding_tank_ref (gpointer instance);
+void source_holding_tank_unref (gpointer instance);
+GParamSpec* param_spec_source_holding_tank (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_source_holding_tank (GValue* value, gpointer v_object);
+void value_take_source_holding_tank (GValue* value, gpointer v_object);
+gpointer value_get_source_holding_tank (const GValue* value);
+GType source_holding_tank_get_type (void) G_GNUC_CONST;
+GType source_collection_get_type (void) G_GNUC_CONST;
+gpointer source_snapshot_ref (gpointer instance);
+void source_snapshot_unref (gpointer instance);
+GParamSpec* param_spec_source_snapshot (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_source_snapshot (GValue* value, gpointer v_object);
+void value_take_source_snapshot (GValue* value, gpointer v_object);
+gpointer value_get_source_snapshot (const GValue* value);
+GType source_snapshot_get_type (void) G_GNUC_CONST;
+GType data_view_get_type (void) G_GNUC_CONST;
+#define DATA_SOURCE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_DATA_SOURCE, DataSourcePrivate))
+enum {
+ DATA_SOURCE_DUMMY_PROPERTY
+};
+DataSource* data_source_construct (GType object_type, gint64 object_id);
+DataObject* data_object_construct (GType object_type, gint64 object_id);
+static void data_source_real_notify_membership_changed (DataObject* base, DataCollection* collection);
+void data_source_notify_unlinked (DataSource* self);
+void data_object_notify_membership_changed (DataObject* self, DataCollection* collection);
+void data_source_notify_held_in_tank (DataSource* self, SourceHoldingTank* holding_tank);
+static void data_source_real_notify_held_in_tank (DataSource* self, SourceHoldingTank* holding_tank);
+DataCollection* data_object_get_membership (DataObject* self);
+static void data_source_real_notify_altered (DataObject* base, Alteration* alteration);
+void source_holding_tank_internal_notify_altered (SourceHoldingTank* self, DataSource* source, Alteration* alteration);
+void data_source_contact_subscribers_alteration (DataSource* self, Alteration* alteration);
+void data_object_notify_altered (DataObject* self, Alteration* alteration);
+void data_source_notify_unlinking (DataSource* self, SourceCollection* collection);
+static void data_source_real_notify_unlinking (DataSource* self, SourceCollection* collection);
+static void data_source_real_notify_unlinked (DataSource* self);
+void data_source_commit_backlinks (DataSource* self, SourceCollection* sources, const gchar* dehydrated);
+static gchar* data_source_dehydrate_backlinks (DataSource* self);
+void data_source_notify_relinking (DataSource* self, SourceCollection* collection);
+static void data_source_real_notify_relinking (DataSource* self, SourceCollection* collection);
+void data_source_notify_relinked (DataSource* self);
+static void data_source_real_notify_relinked (DataSource* self);
+gchar* data_source_get_typename (DataSource* self);
+static gchar* data_source_real_get_typename (DataSource* self);
+gint64 data_source_get_instance_id (DataSource* self);
+static gint64 data_source_real_get_instance_id (DataSource* self);
+gchar* data_source_get_source_id (DataSource* self);
+static gchar* data_source_real_get_source_id (DataSource* self);
+gpointer source_backlink_ref (gpointer instance);
+void source_backlink_unref (gpointer instance);
+GParamSpec* param_spec_source_backlink (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_source_backlink (GValue* value, gpointer v_object);
+void value_take_source_backlink (GValue* value, gpointer v_object);
+gpointer value_get_source_backlink (const GValue* value);
+GType source_backlink_get_type (void) G_GNUC_CONST;
+gboolean data_source_has_backlink (DataSource* self, SourceBacklink* backlink);
+const gchar* source_backlink_get_name (SourceBacklink* self);
+const gchar* source_backlink_get_value (SourceBacklink* self);
+GeeList* data_source_get_backlinks (DataSource* self, const gchar* name);
+SourceBacklink* source_backlink_new (const gchar* name, const gchar* value);
+SourceBacklink* source_backlink_construct (GType object_type, const gchar* name, const gchar* value);
+void data_source_set_backlink (DataSource* self, SourceBacklink* backlink);
+void source_collection_internal_backlink_set (SourceCollection* self, DataSource* source, SourceBacklink* backlink);
+gboolean data_source_remove_backlink (DataSource* self, SourceBacklink* backlink);
+void source_collection_internal_backlink_removed (SourceCollection* self, DataSource* source, SourceBacklink* backlink);
+static void data_source_real_commit_backlinks (DataSource* self, SourceCollection* sources, const gchar* dehydrated);
+gchar* data_object_to_string (DataObject* self);
+gboolean is_string_empty (const gchar* s);
+void data_source_rehydrate_backlinks (DataSource* self, SourceCollection* unlinked_from, const gchar* dehydrated);
+SourceSnapshot* data_source_save_snapshot (DataSource* self);
+static SourceSnapshot* data_source_real_save_snapshot (DataSource* self);
+void data_source_internal_mark_for_destroy (DataSource* self);
+gboolean data_source_internal_delete_backing (DataSource* self, GError** error);
+static gboolean data_source_real_internal_delete_backing (DataSource* self, GError** error);
+gboolean data_source_equals (DataSource* self, DataSource* source);
+static gboolean data_source_real_equals (DataSource* self, DataSource* source);
+void data_source_destroy (DataSource* self);
+static void data_source_real_destroy (DataSource* self);
+void data_view_notify_unsubscribed (DataView* self, DataSource* source);
+gboolean data_source_destroy_orphan (DataSource* self, gboolean delete_backing);
+void source_collection_notify_unlinked_destroyed (SourceCollection* self, DataSource* unlinked);
+void data_source_internal_subscribe (DataSource* self, DataView* view);
+static void _vala_array_add122 (DataView*** array, int* length, int* size, DataView* value);
+void data_source_internal_unsubscribe (DataSource* self, DataView* view);
+void data_source_contact_subscribers (DataSource* self, DataSourceContactSubscriber contact_subscriber, void* contact_subscriber_target);
+static void data_source_real_unlinked (DataSource* self, SourceCollection* sources);
+static void g_cclosure_user_marshal_VOID__DATA_COLLECTION (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data);
+static void data_source_real_relinked (DataSource* self, SourceCollection* sources);
+static void data_source_real_destroyed (DataSource* self);
+static void data_source_finalize (GObject* obj);
+#define SOURCE_SNAPSHOT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_SOURCE_SNAPSHOT, SourceSnapshotPrivate))
+enum {
+ SOURCE_SNAPSHOT_DUMMY_PROPERTY
+};
+void source_snapshot_notify_broken (SourceSnapshot* self);
+static void source_snapshot_real_notify_broken (SourceSnapshot* self);
+gboolean source_snapshot_is_broken (SourceSnapshot* self);
+SourceSnapshot* source_snapshot_construct (GType object_type);
+static void source_snapshot_real_broken (SourceSnapshot* self);
+static void source_snapshot_finalize (SourceSnapshot* obj);
+#define SOURCE_BACKLINK_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_SOURCE_BACKLINK, SourceBacklinkPrivate))
+enum {
+ SOURCE_BACKLINK_DUMMY_PROPERTY
+};
+static gboolean source_backlink_validate_name_value (const gchar* name, const gchar* value);
+SourceBacklink* source_backlink_new_from_source (DataSource* source);
+SourceBacklink* source_backlink_construct_from_source (GType object_type, DataSource* source);
+gchar* source_backlink_to_string (SourceBacklink* self);
+guint source_backlink_hash_func (SourceBacklink* backlink);
+gboolean source_backlink_equal_func (SourceBacklink* alink, SourceBacklink* blink);
+const gchar* source_backlink_get_typename (SourceBacklink* self);
+gint64 source_backlink_get_instance_id (SourceBacklink* self);
+static void source_backlink_finalize (SourceBacklink* obj);
+gpointer source_proxy_ref (gpointer instance);
+void source_proxy_unref (gpointer instance);
+GParamSpec* param_spec_source_proxy (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_source_proxy (GValue* value, gpointer v_object);
+void value_take_source_proxy (GValue* value, gpointer v_object);
+gpointer value_get_source_proxy (const GValue* value);
+GType source_proxy_get_type (void) G_GNUC_CONST;
+#define SOURCE_PROXY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_SOURCE_PROXY, SourceProxyPrivate))
+enum {
+ SOURCE_PROXY_DUMMY_PROPERTY
+};
+static void source_proxy_drop_source (SourceProxy* self);
+static void source_proxy_on_source_added (SourceProxy* self, GeeIterable* added);
+static void _source_proxy_on_source_added_data_collection_items_added (DataCollection* _sender, GeeIterable* added, gpointer self);
+SourceProxy* source_proxy_construct (GType object_type, DataSource* source);
+gint64 data_object_get_object_id (DataObject* self);
+static void source_proxy_on_snapshot_broken (SourceProxy* self);
+static void _source_proxy_on_snapshot_broken_source_snapshot_broken (SourceSnapshot* _sender, gpointer self);
+static void source_proxy_set_source (SourceProxy* self, DataSource* source);
+DataSource* source_proxy_reconstitute (SourceProxy* self, gint64 object_id, SourceSnapshot* snapshot);
+static DataSource* source_proxy_real_reconstitute (SourceProxy* self, gint64 object_id, SourceSnapshot* snapshot);
+void source_proxy_notify_reconstituted (SourceProxy* self, DataSource* source);
+static void source_proxy_real_notify_reconstituted (SourceProxy* self, DataSource* source);
+void source_proxy_notify_dehydrated (SourceProxy* self);
+static void source_proxy_real_notify_dehydrated (SourceProxy* self);
+void source_proxy_notify_broken (SourceProxy* self);
+static void source_proxy_real_notify_broken (SourceProxy* self);
+static void source_proxy_on_destroyed (SourceProxy* self);
+static void _source_proxy_on_destroyed_data_source_destroyed (DataSource* _sender, gpointer self);
+DataSource* source_proxy_get_source (SourceProxy* self);
+gboolean data_collection_contains (DataCollection* self, DataObject* object);
+static void source_proxy_real_reconstituted (SourceProxy* self, DataSource* source);
+static void source_proxy_real_dehydrated (SourceProxy* self);
+static void source_proxy_real_broken (SourceProxy* self);
+static void source_proxy_finalize (SourceProxy* obj);
+GType proxyable_get_type (void) G_GNUC_CONST;
+SourceProxy* proxyable_get_proxy (Proxyable* self);
+static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func);
+static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func);
+static gint _vala_array_length (gpointer array);
+
+
+DataSource* data_source_construct (GType object_type, gint64 object_id) {
+ DataSource * self = NULL;
+ gint64 _tmp0_ = 0LL;
+#line 64 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = object_id;
+#line 64 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self = (DataSource*) data_object_construct (object_type, _tmp0_);
+#line 63 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return self;
+#line 492 "DataSource.c"
+}
+
+
+static void data_source_real_notify_membership_changed (DataObject* base, DataCollection* collection) {
+ DataSource * self;
+ DataCollection* _tmp0_ = NULL;
+ gboolean _tmp5_ = FALSE;
+ DataCollection* _tmp6_ = NULL;
+ DataCollection* _tmp8_ = NULL;
+#line 73 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_DATA_SOURCE, DataSource);
+#line 73 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail ((collection == NULL) || IS_DATA_COLLECTION (collection));
+#line 75 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = collection;
+#line 75 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp0_ == NULL) {
+#line 510 "DataSource.c"
+ gboolean _tmp1_ = FALSE;
+ gboolean _tmp2_ = FALSE;
+#line 76 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = self->priv->is_destroyed;
+#line 76 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp2_) {
+#line 76 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = TRUE;
+#line 519 "DataSource.c"
+ } else {
+ GeeHashMap* _tmp3_ = NULL;
+#line 76 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp3_ = self->priv->backlinks;
+#line 76 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = _tmp3_ != NULL;
+#line 526 "DataSource.c"
+ }
+#line 76 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _vala_assert (_tmp1_, "is_destroyed || backlinks != null");
+#line 530 "DataSource.c"
+ } else {
+ gboolean _tmp4_ = FALSE;
+#line 78 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4_ = self->priv->is_destroyed;
+#line 78 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _vala_assert (!_tmp4_, "!is_destroyed");
+#line 537 "DataSource.c"
+ }
+#line 82 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp6_ = collection;
+#line 82 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp6_ == NULL) {
+#line 543 "DataSource.c"
+ GeeHashMap* _tmp7_ = NULL;
+#line 82 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp7_ = self->priv->backlinks;
+#line 82 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp5_ = _tmp7_ != NULL;
+#line 549 "DataSource.c"
+ } else {
+#line 82 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp5_ = FALSE;
+#line 553 "DataSource.c"
+ }
+#line 82 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp5_) {
+#line 83 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ data_source_notify_unlinked (self);
+#line 559 "DataSource.c"
+ }
+#line 85 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp8_ = collection;
+#line 85 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ DATA_OBJECT_CLASS (data_source_parent_class)->notify_membership_changed (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_OBJECT, DataObject), _tmp8_);
+#line 565 "DataSource.c"
+}
+
+
+static gpointer _source_holding_tank_ref0 (gpointer self) {
+#line 100 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return self ? source_holding_tank_ref (self) : NULL;
+#line 572 "DataSource.c"
+}
+
+
+static void data_source_real_notify_held_in_tank (DataSource* self, SourceHoldingTank* holding_tank) {
+ DataCollection* _tmp0_ = NULL;
+ DataCollection* _tmp1_ = NULL;
+ SourceHoldingTank* _tmp2_ = NULL;
+ SourceHoldingTank* _tmp5_ = NULL;
+ SourceHoldingTank* _tmp6_ = NULL;
+#line 88 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail ((holding_tank == NULL) || IS_SOURCE_HOLDING_TANK (holding_tank));
+#line 90 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = data_object_get_membership (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_OBJECT, DataObject));
+#line 90 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = _tmp0_;
+#line 90 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _vala_assert (_tmp1_ == NULL, "get_membership() == null");
+#line 90 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _data_collection_unref0 (_tmp1_);
+#line 94 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = holding_tank;
+#line 94 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp2_ != NULL) {
+#line 596 "DataSource.c"
+ SourceHoldingTank* _tmp3_ = NULL;
+#line 95 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp3_ = self->priv->holding_tank;
+#line 95 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _vala_assert (_tmp3_ == NULL, "this.holding_tank == null");
+#line 602 "DataSource.c"
+ } else {
+ SourceHoldingTank* _tmp4_ = NULL;
+#line 97 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4_ = self->priv->holding_tank;
+#line 97 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _vala_assert (_tmp4_ != NULL, "this.holding_tank != null");
+#line 609 "DataSource.c"
+ }
+#line 100 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp5_ = holding_tank;
+#line 100 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp6_ = _source_holding_tank_ref0 (_tmp5_);
+#line 100 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _source_holding_tank_unref0 (self->priv->holding_tank);
+#line 100 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->holding_tank = _tmp6_;
+#line 619 "DataSource.c"
+}
+
+
+void data_source_notify_held_in_tank (DataSource* self, SourceHoldingTank* holding_tank) {
+#line 88 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_DATA_SOURCE (self));
+#line 88 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ DATA_SOURCE_GET_CLASS (self)->notify_held_in_tank (self, holding_tank);
+#line 628 "DataSource.c"
+}
+
+
+static void data_source_real_notify_altered (DataObject* base, Alteration* alteration) {
+ DataSource * self;
+ SourceHoldingTank* _tmp0_ = NULL;
+#line 103 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_DATA_SOURCE, DataSource);
+#line 103 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_ALTERATION (alteration));
+#line 105 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = self->priv->holding_tank;
+#line 105 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp0_ != NULL) {
+#line 643 "DataSource.c"
+ SourceHoldingTank* _tmp1_ = NULL;
+ Alteration* _tmp2_ = NULL;
+#line 106 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = self->priv->holding_tank;
+#line 106 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = alteration;
+#line 106 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_holding_tank_internal_notify_altered (_tmp1_, self, _tmp2_);
+#line 652 "DataSource.c"
+ } else {
+ Alteration* _tmp3_ = NULL;
+ Alteration* _tmp4_ = NULL;
+#line 108 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp3_ = alteration;
+#line 108 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ data_source_contact_subscribers_alteration (self, _tmp3_);
+#line 110 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4_ = alteration;
+#line 110 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ DATA_OBJECT_CLASS (data_source_parent_class)->notify_altered (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_OBJECT, DataObject), _tmp4_);
+#line 664 "DataSource.c"
+ }
+}
+
+
+static void data_source_real_notify_unlinking (DataSource* self, SourceCollection* collection) {
+ gboolean _tmp0_ = FALSE;
+ GeeHashMap* _tmp1_ = NULL;
+ SourceCollection* _tmp3_ = NULL;
+ GeeHashMap* _tmp4_ = NULL;
+#line 115 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_SOURCE_COLLECTION (collection));
+#line 116 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = self->priv->backlinks;
+#line 116 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp1_ == NULL) {
+#line 680 "DataSource.c"
+ SourceCollection* _tmp2_ = NULL;
+#line 116 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = self->priv->unlinked_from_collection;
+#line 116 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = _tmp2_ == NULL;
+#line 686 "DataSource.c"
+ } else {
+#line 116 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = FALSE;
+#line 690 "DataSource.c"
+ }
+#line 116 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _vala_assert (_tmp0_, "backlinks == null && unlinked_from_collection == null");
+#line 118 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp3_ = collection;
+#line 118 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->unlinked_from_collection = _tmp3_;
+#line 119 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4_ = gee_hash_map_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, GEE_TYPE_LIST, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 119 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (self->priv->backlinks);
+#line 119 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->backlinks = _tmp4_;
+#line 704 "DataSource.c"
+}
+
+
+void data_source_notify_unlinking (DataSource* self, SourceCollection* collection) {
+#line 115 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_DATA_SOURCE (self));
+#line 115 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ DATA_SOURCE_GET_CLASS (self)->notify_unlinking (self, collection);
+#line 713 "DataSource.c"
+}
+
+
+static void data_source_real_notify_unlinked (DataSource* self) {
+ gboolean _tmp0_ = FALSE;
+ SourceCollection* _tmp1_ = NULL;
+ SourceCollection* _tmp3_ = NULL;
+ GeeHashMap* _tmp4_ = NULL;
+ gint _tmp5_ = 0;
+ gint _tmp6_ = 0;
+#line 124 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = self->priv->unlinked_from_collection;
+#line 124 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp1_ != NULL) {
+#line 728 "DataSource.c"
+ GeeHashMap* _tmp2_ = NULL;
+#line 124 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = self->priv->backlinks;
+#line 124 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = _tmp2_ != NULL;
+#line 734 "DataSource.c"
+ } else {
+#line 124 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = FALSE;
+#line 738 "DataSource.c"
+ }
+#line 124 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _vala_assert (_tmp0_, "unlinked_from_collection != null && backlinks != null");
+#line 126 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp3_ = self->priv->unlinked_from_collection;
+#line 126 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_signal_emit_by_name (self, "unlinked", _tmp3_);
+#line 129 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4_ = self->priv->backlinks;
+#line 129 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp5_ = gee_abstract_map_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, GEE_TYPE_MAP, GeeMap));
+#line 129 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp6_ = _tmp5_;
+#line 129 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp6_ > 0) {
+#line 754 "DataSource.c"
+ SourceCollection* _tmp7_ = NULL;
+ gchar* _tmp8_ = NULL;
+ gchar* _tmp9_ = NULL;
+#line 130 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp7_ = self->priv->unlinked_from_collection;
+#line 130 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp8_ = data_source_dehydrate_backlinks (self);
+#line 130 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp9_ = _tmp8_;
+#line 130 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ data_source_commit_backlinks (self, _tmp7_, _tmp9_);
+#line 130 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_free0 (_tmp9_);
+#line 768 "DataSource.c"
+ }
+}
+
+
+void data_source_notify_unlinked (DataSource* self) {
+#line 123 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_DATA_SOURCE (self));
+#line 123 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ DATA_SOURCE_GET_CLASS (self)->notify_unlinked (self);
+#line 778 "DataSource.c"
+}
+
+
+static void data_source_real_notify_relinking (DataSource* self, SourceCollection* collection) {
+ gboolean _tmp0_ = FALSE;
+ GeeHashMap* _tmp1_ = NULL;
+#line 134 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_SOURCE_COLLECTION (collection));
+#line 135 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = self->priv->backlinks;
+#line 135 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp1_ != NULL) {
+#line 791 "DataSource.c"
+ SourceCollection* _tmp2_ = NULL;
+ SourceCollection* _tmp3_ = NULL;
+#line 135 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = self->priv->unlinked_from_collection;
+#line 135 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp3_ = collection;
+#line 135 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = _tmp2_ == _tmp3_;
+#line 800 "DataSource.c"
+ } else {
+#line 135 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = FALSE;
+#line 804 "DataSource.c"
+ }
+#line 135 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _vala_assert (_tmp0_, "(backlinks != null) && (unlinked_from_collection == collection)");
+#line 808 "DataSource.c"
+}
+
+
+void data_source_notify_relinking (DataSource* self, SourceCollection* collection) {
+#line 134 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_DATA_SOURCE (self));
+#line 134 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ DATA_SOURCE_GET_CLASS (self)->notify_relinking (self, collection);
+#line 817 "DataSource.c"
+}
+
+
+static gpointer _data_collection_ref0 (gpointer self) {
+#line 142 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return self ? data_collection_ref (self) : NULL;
+#line 824 "DataSource.c"
+}
+
+
+static void data_source_real_notify_relinked (DataSource* self) {
+ gboolean _tmp0_ = FALSE;
+ GeeHashMap* _tmp1_ = NULL;
+ SourceCollection* relinked_to = NULL;
+ SourceCollection* _tmp3_ = NULL;
+ SourceCollection* _tmp4_ = NULL;
+#line 140 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = self->priv->backlinks;
+#line 140 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp1_ != NULL) {
+#line 838 "DataSource.c"
+ SourceCollection* _tmp2_ = NULL;
+#line 140 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = self->priv->unlinked_from_collection;
+#line 140 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = _tmp2_ != NULL;
+#line 844 "DataSource.c"
+ } else {
+#line 140 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = FALSE;
+#line 848 "DataSource.c"
+ }
+#line 140 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _vala_assert (_tmp0_, "backlinks != null && unlinked_from_collection != null");
+#line 142 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp3_ = self->priv->unlinked_from_collection;
+#line 142 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4_ = _data_collection_ref0 (_tmp3_);
+#line 142 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ relinked_to = _tmp4_;
+#line 143 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (self->priv->backlinks);
+#line 143 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->backlinks = NULL;
+#line 144 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->unlinked_from_collection = NULL;
+#line 145 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_signal_emit_by_name (self, "relinked", relinked_to);
+#line 148 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ data_source_commit_backlinks (self, NULL, NULL);
+#line 139 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _data_collection_unref0 (relinked_to);
+#line 870 "DataSource.c"
+}
+
+
+void data_source_notify_relinked (DataSource* self) {
+#line 139 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_DATA_SOURCE (self));
+#line 139 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ DATA_SOURCE_GET_CLASS (self)->notify_relinked (self);
+#line 879 "DataSource.c"
+}
+
+
+static gchar* data_source_real_get_typename (DataSource* self) {
+#line 156 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_critical ("Type `%s' does not implement abstract method `data_source_get_typename'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+#line 156 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return NULL;
+#line 888 "DataSource.c"
+}
+
+
+gchar* data_source_get_typename (DataSource* self) {
+#line 156 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (IS_DATA_SOURCE (self), NULL);
+#line 156 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return DATA_SOURCE_GET_CLASS (self)->get_typename (self);
+#line 897 "DataSource.c"
+}
+
+
+static gint64 data_source_real_get_instance_id (DataSource* self) {
+#line 162 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_critical ("Type `%s' does not implement abstract method `data_source_get_instance_id'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+#line 162 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return 0LL;
+#line 906 "DataSource.c"
+}
+
+
+gint64 data_source_get_instance_id (DataSource* self) {
+#line 162 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (IS_DATA_SOURCE (self), 0LL);
+#line 162 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return DATA_SOURCE_GET_CLASS (self)->get_instance_id (self);
+#line 915 "DataSource.c"
+}
+
+
+static gchar* data_source_real_get_source_id (DataSource* self) {
+ gchar* result = NULL;
+ gchar* _tmp0_ = NULL;
+ gchar* _tmp1_ = NULL;
+ gint64 _tmp2_ = 0LL;
+ gchar* _tmp3_ = NULL;
+ gchar* _tmp4_ = NULL;
+#line 167 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = data_source_get_typename (self);
+#line 167 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = _tmp0_;
+#line 167 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = data_source_get_instance_id (self);
+#line 167 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp3_ = g_strdup_printf ("%s-%016" G_GINT64_MODIFIER "x", _tmp1_, _tmp2_);
+#line 167 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4_ = _tmp3_;
+#line 167 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_free0 (_tmp1_);
+#line 167 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ result = _tmp4_;
+#line 167 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return result;
+#line 942 "DataSource.c"
+}
+
+
+gchar* data_source_get_source_id (DataSource* self) {
+#line 166 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (IS_DATA_SOURCE (self), NULL);
+#line 166 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return DATA_SOURCE_GET_CLASS (self)->get_source_id (self);
+#line 951 "DataSource.c"
+}
+
+
+gboolean data_source_has_backlink (DataSource* self, SourceBacklink* backlink) {
+ gboolean result = FALSE;
+ GeeHashMap* _tmp0_ = NULL;
+ GeeList* values = NULL;
+ GeeHashMap* _tmp1_ = NULL;
+ SourceBacklink* _tmp2_ = NULL;
+ const gchar* _tmp3_ = NULL;
+ const gchar* _tmp4_ = NULL;
+ gpointer _tmp5_ = NULL;
+ gboolean _tmp6_ = FALSE;
+ GeeList* _tmp7_ = NULL;
+#line 170 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (IS_DATA_SOURCE (self), FALSE);
+#line 170 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (IS_SOURCE_BACKLINK (backlink), FALSE);
+#line 171 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = self->priv->backlinks;
+#line 171 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp0_ == NULL) {
+#line 172 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ result = FALSE;
+#line 172 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return result;
+#line 978 "DataSource.c"
+ }
+#line 174 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = self->priv->backlinks;
+#line 174 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = backlink;
+#line 174 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp3_ = source_backlink_get_name (_tmp2_);
+#line 174 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4_ = _tmp3_;
+#line 174 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp5_ = gee_abstract_map_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp4_);
+#line 174 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ values = (GeeList*) _tmp5_;
+#line 176 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp7_ = values;
+#line 176 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp7_ != NULL) {
+#line 996 "DataSource.c"
+ GeeList* _tmp8_ = NULL;
+ SourceBacklink* _tmp9_ = NULL;
+ const gchar* _tmp10_ = NULL;
+ const gchar* _tmp11_ = NULL;
+ gboolean _tmp12_ = FALSE;
+#line 176 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp8_ = values;
+#line 176 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp9_ = backlink;
+#line 176 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp10_ = source_backlink_get_value (_tmp9_);
+#line 176 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp11_ = _tmp10_;
+#line 176 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp12_ = gee_collection_contains (G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, GEE_TYPE_COLLECTION, GeeCollection), _tmp11_);
+#line 176 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp6_ = _tmp12_;
+#line 1014 "DataSource.c"
+ } else {
+#line 176 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp6_ = FALSE;
+#line 1018 "DataSource.c"
+ }
+#line 176 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ result = _tmp6_;
+#line 176 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (values);
+#line 176 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return result;
+#line 1026 "DataSource.c"
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+#line 188 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return self ? g_object_ref (self) : NULL;
+#line 1033 "DataSource.c"
+}
+
+
+GeeList* data_source_get_backlinks (DataSource* self, const gchar* name) {
+ GeeList* result = NULL;
+ GeeHashMap* _tmp0_ = NULL;
+ GeeList* values = NULL;
+ GeeHashMap* _tmp1_ = NULL;
+ const gchar* _tmp2_ = NULL;
+ gpointer _tmp3_ = NULL;
+ gboolean _tmp4_ = FALSE;
+ GeeList* _tmp5_ = NULL;
+ GeeList* backlinks = NULL;
+ GeeArrayList* _tmp9_ = NULL;
+#line 179 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (IS_DATA_SOURCE (self), NULL);
+#line 179 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (name != NULL, NULL);
+#line 180 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = self->priv->backlinks;
+#line 180 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp0_ == NULL) {
+#line 181 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ result = NULL;
+#line 181 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return result;
+#line 1060 "DataSource.c"
+ }
+#line 183 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = self->priv->backlinks;
+#line 183 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = name;
+#line 183 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp3_ = gee_abstract_map_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp2_);
+#line 183 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ values = (GeeList*) _tmp3_;
+#line 184 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp5_ = values;
+#line 184 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp5_ == NULL) {
+#line 184 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4_ = TRUE;
+#line 1076 "DataSource.c"
+ } else {
+ GeeList* _tmp6_ = NULL;
+ gint _tmp7_ = 0;
+ gint _tmp8_ = 0;
+#line 184 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp6_ = values;
+#line 184 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp7_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 184 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp8_ = _tmp7_;
+#line 184 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4_ = _tmp8_ == 0;
+#line 1089 "DataSource.c"
+ }
+#line 184 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp4_) {
+#line 185 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ result = NULL;
+#line 185 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (values);
+#line 185 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return result;
+#line 1099 "DataSource.c"
+ }
+#line 187 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp9_ = gee_array_list_new (TYPE_SOURCE_BACKLINK, (GBoxedCopyFunc) source_backlink_ref, source_backlink_unref, NULL, NULL, NULL);
+#line 187 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ backlinks = G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, GEE_TYPE_LIST, GeeList);
+#line 1105 "DataSource.c"
+ {
+ GeeList* _value_list = NULL;
+ GeeList* _tmp10_ = NULL;
+ GeeList* _tmp11_ = NULL;
+ gint _value_size = 0;
+ GeeList* _tmp12_ = NULL;
+ gint _tmp13_ = 0;
+ gint _tmp14_ = 0;
+ gint _value_index = 0;
+#line 188 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp10_ = values;
+#line 188 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp11_ = _g_object_ref0 (_tmp10_);
+#line 188 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _value_list = _tmp11_;
+#line 188 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp12_ = _value_list;
+#line 188 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp13_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 188 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp14_ = _tmp13_;
+#line 188 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _value_size = _tmp14_;
+#line 188 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _value_index = -1;
+#line 188 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ while (TRUE) {
+#line 1133 "DataSource.c"
+ gint _tmp15_ = 0;
+ gint _tmp16_ = 0;
+ gint _tmp17_ = 0;
+ gchar* value = NULL;
+ GeeList* _tmp18_ = NULL;
+ gint _tmp19_ = 0;
+ gpointer _tmp20_ = NULL;
+ GeeList* _tmp21_ = NULL;
+ const gchar* _tmp22_ = NULL;
+ const gchar* _tmp23_ = NULL;
+ SourceBacklink* _tmp24_ = NULL;
+ SourceBacklink* _tmp25_ = NULL;
+#line 188 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp15_ = _value_index;
+#line 188 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _value_index = _tmp15_ + 1;
+#line 188 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp16_ = _value_index;
+#line 188 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp17_ = _value_size;
+#line 188 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (!(_tmp16_ < _tmp17_)) {
+#line 188 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ break;
+#line 1158 "DataSource.c"
+ }
+#line 188 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp18_ = _value_list;
+#line 188 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp19_ = _value_index;
+#line 188 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp20_ = gee_list_get (_tmp18_, _tmp19_);
+#line 188 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ value = (gchar*) _tmp20_;
+#line 189 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp21_ = backlinks;
+#line 189 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp22_ = name;
+#line 189 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp23_ = value;
+#line 189 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp24_ = source_backlink_new (_tmp22_, _tmp23_);
+#line 189 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp25_ = _tmp24_;
+#line 189 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ gee_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp21_, GEE_TYPE_COLLECTION, GeeCollection), _tmp25_);
+#line 189 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _source_backlink_unref0 (_tmp25_);
+#line 188 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_free0 (value);
+#line 1184 "DataSource.c"
+ }
+#line 188 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (_value_list);
+#line 1188 "DataSource.c"
+ }
+#line 191 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ result = backlinks;
+#line 191 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (values);
+#line 191 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return result;
+#line 1196 "DataSource.c"
+}
+
+
+void data_source_set_backlink (DataSource* self, SourceBacklink* backlink) {
+ GeeHashMap* _tmp0_ = NULL;
+ GeeList* values = NULL;
+ GeeHashMap* _tmp1_ = NULL;
+ SourceBacklink* _tmp2_ = NULL;
+ const gchar* _tmp3_ = NULL;
+ const gchar* _tmp4_ = NULL;
+ gpointer _tmp5_ = NULL;
+ GeeList* _tmp6_ = NULL;
+ GeeList* _tmp13_ = NULL;
+ SourceBacklink* _tmp14_ = NULL;
+ const gchar* _tmp15_ = NULL;
+ const gchar* _tmp16_ = NULL;
+ SourceCollection* sources = NULL;
+ DataCollection* _tmp17_ = NULL;
+ SourceCollection* _tmp18_ = NULL;
+#line 194 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_DATA_SOURCE (self));
+#line 194 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_SOURCE_BACKLINK (backlink));
+#line 196 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = self->priv->backlinks;
+#line 196 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _vala_assert (_tmp0_ != NULL, "backlinks != null");
+#line 198 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = self->priv->backlinks;
+#line 198 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = backlink;
+#line 198 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp3_ = source_backlink_get_name (_tmp2_);
+#line 198 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4_ = _tmp3_;
+#line 198 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp5_ = gee_abstract_map_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp4_);
+#line 198 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ values = (GeeList*) _tmp5_;
+#line 199 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp6_ = values;
+#line 199 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp6_ == NULL) {
+#line 1240 "DataSource.c"
+ GeeArrayList* _tmp7_ = NULL;
+ GeeHashMap* _tmp8_ = NULL;
+ SourceBacklink* _tmp9_ = NULL;
+ const gchar* _tmp10_ = NULL;
+ const gchar* _tmp11_ = NULL;
+ GeeList* _tmp12_ = NULL;
+#line 200 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp7_ = gee_array_list_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, NULL, NULL, NULL);
+#line 200 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (values);
+#line 200 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ values = G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, GEE_TYPE_LIST, GeeList);
+#line 201 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp8_ = self->priv->backlinks;
+#line 201 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp9_ = backlink;
+#line 201 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp10_ = source_backlink_get_name (_tmp9_);
+#line 201 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp11_ = _tmp10_;
+#line 201 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp12_ = values;
+#line 201 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ gee_abstract_map_set (G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp11_, _tmp12_);
+#line 1265 "DataSource.c"
+ }
+#line 204 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp13_ = values;
+#line 204 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp14_ = backlink;
+#line 204 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp15_ = source_backlink_get_value (_tmp14_);
+#line 204 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp16_ = _tmp15_;
+#line 204 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ gee_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp13_, GEE_TYPE_COLLECTION, GeeCollection), _tmp16_);
+#line 206 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp17_ = data_object_get_membership (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_OBJECT, DataObject));
+#line 206 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ sources = G_TYPE_CHECK_INSTANCE_CAST (_tmp17_, TYPE_SOURCE_COLLECTION, SourceCollection);
+#line 207 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp18_ = sources;
+#line 207 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp18_ != NULL) {
+#line 1285 "DataSource.c"
+ SourceCollection* _tmp19_ = NULL;
+ SourceBacklink* _tmp20_ = NULL;
+#line 208 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp19_ = sources;
+#line 208 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp20_ = backlink;
+#line 208 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_collection_internal_backlink_set (_tmp19_, self, _tmp20_);
+#line 1294 "DataSource.c"
+ }
+#line 194 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _data_collection_unref0 (sources);
+#line 194 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (values);
+#line 1300 "DataSource.c"
+}
+
+
+gboolean data_source_remove_backlink (DataSource* self, SourceBacklink* backlink) {
+ gboolean result = FALSE;
+ GeeHashMap* _tmp0_ = NULL;
+ GeeList* values = NULL;
+ GeeHashMap* _tmp1_ = NULL;
+ SourceBacklink* _tmp2_ = NULL;
+ const gchar* _tmp3_ = NULL;
+ const gchar* _tmp4_ = NULL;
+ gpointer _tmp5_ = NULL;
+ GeeList* _tmp6_ = NULL;
+ gint original_size = 0;
+ GeeList* _tmp7_ = NULL;
+ gint _tmp8_ = 0;
+ gint _tmp9_ = 0;
+ gint _tmp10_ = 0;
+ GeeIterator* iter = NULL;
+ GeeList* _tmp11_ = NULL;
+ GeeIterator* _tmp12_ = NULL;
+ GeeList* _tmp23_ = NULL;
+ gint _tmp24_ = 0;
+ gint _tmp25_ = 0;
+ SourceCollection* _tmp30_ = NULL;
+ gchar* _tmp31_ = NULL;
+ gchar* _tmp32_ = NULL;
+ SourceCollection* sources = NULL;
+ DataCollection* _tmp33_ = NULL;
+ SourceCollection* _tmp34_ = NULL;
+ GeeList* _tmp37_ = NULL;
+ gint _tmp38_ = 0;
+ gint _tmp39_ = 0;
+ gint _tmp40_ = 0;
+#line 211 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (IS_DATA_SOURCE (self), FALSE);
+#line 211 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (IS_SOURCE_BACKLINK (backlink), FALSE);
+#line 212 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = self->priv->backlinks;
+#line 212 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp0_ == NULL) {
+#line 213 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ result = FALSE;
+#line 213 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return result;
+#line 1347 "DataSource.c"
+ }
+#line 215 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = self->priv->backlinks;
+#line 215 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = backlink;
+#line 215 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp3_ = source_backlink_get_name (_tmp2_);
+#line 215 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4_ = _tmp3_;
+#line 215 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp5_ = gee_abstract_map_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp4_);
+#line 215 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ values = (GeeList*) _tmp5_;
+#line 216 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp6_ = values;
+#line 216 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp6_ == NULL) {
+#line 217 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ result = FALSE;
+#line 217 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (values);
+#line 217 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return result;
+#line 1371 "DataSource.c"
+ }
+#line 219 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp7_ = values;
+#line 219 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp8_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 219 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp9_ = _tmp8_;
+#line 219 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ original_size = _tmp9_;
+#line 220 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp10_ = original_size;
+#line 220 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _vala_assert (_tmp10_ > 0, "original_size > 0");
+#line 222 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp11_ = values;
+#line 222 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp12_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp11_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 222 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ iter = _tmp12_;
+#line 223 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ while (TRUE) {
+#line 1393 "DataSource.c"
+ GeeIterator* _tmp13_ = NULL;
+ gboolean _tmp14_ = FALSE;
+ GeeIterator* _tmp15_ = NULL;
+ gpointer _tmp16_ = NULL;
+ gchar* _tmp17_ = NULL;
+ SourceBacklink* _tmp18_ = NULL;
+ const gchar* _tmp19_ = NULL;
+ const gchar* _tmp20_ = NULL;
+ gboolean _tmp21_ = FALSE;
+#line 223 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp13_ = iter;
+#line 223 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp14_ = gee_iterator_next (_tmp13_);
+#line 223 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (!_tmp14_) {
+#line 223 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ break;
+#line 1411 "DataSource.c"
+ }
+#line 224 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp15_ = iter;
+#line 224 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp16_ = gee_iterator_get (_tmp15_);
+#line 224 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp17_ = (gchar*) _tmp16_;
+#line 224 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp18_ = backlink;
+#line 224 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp19_ = source_backlink_get_value (_tmp18_);
+#line 224 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp20_ = _tmp19_;
+#line 224 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp21_ = g_strcmp0 (_tmp17_, _tmp20_) == 0;
+#line 224 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_free0 (_tmp17_);
+#line 224 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp21_) {
+#line 1431 "DataSource.c"
+ GeeIterator* _tmp22_ = NULL;
+#line 225 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp22_ = iter;
+#line 225 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ gee_iterator_remove (_tmp22_);
+#line 1437 "DataSource.c"
+ }
+ }
+#line 228 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp23_ = values;
+#line 228 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp24_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp23_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 228 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp25_ = _tmp24_;
+#line 228 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp25_ == 0) {
+#line 1448 "DataSource.c"
+ GeeHashMap* _tmp26_ = NULL;
+ SourceBacklink* _tmp27_ = NULL;
+ const gchar* _tmp28_ = NULL;
+ const gchar* _tmp29_ = NULL;
+#line 229 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp26_ = self->priv->backlinks;
+#line 229 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp27_ = backlink;
+#line 229 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp28_ = source_backlink_get_name (_tmp27_);
+#line 229 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp29_ = _tmp28_;
+#line 229 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ gee_abstract_map_unset (G_TYPE_CHECK_INSTANCE_CAST (_tmp26_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp29_, NULL);
+#line 1463 "DataSource.c"
+ }
+#line 233 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp30_ = self->priv->unlinked_from_collection;
+#line 233 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp31_ = data_source_dehydrate_backlinks (self);
+#line 233 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp32_ = _tmp31_;
+#line 233 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ data_source_commit_backlinks (self, _tmp30_, _tmp32_);
+#line 233 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_free0 (_tmp32_);
+#line 235 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp33_ = data_object_get_membership (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_OBJECT, DataObject));
+#line 235 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ sources = G_TYPE_CHECK_INSTANCE_CAST (_tmp33_, TYPE_SOURCE_COLLECTION, SourceCollection);
+#line 236 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp34_ = sources;
+#line 236 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp34_ != NULL) {
+#line 1483 "DataSource.c"
+ SourceCollection* _tmp35_ = NULL;
+ SourceBacklink* _tmp36_ = NULL;
+#line 237 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp35_ = sources;
+#line 237 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp36_ = backlink;
+#line 237 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_collection_internal_backlink_removed (_tmp35_, self, _tmp36_);
+#line 1492 "DataSource.c"
+ }
+#line 239 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp37_ = values;
+#line 239 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp38_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp37_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 239 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp39_ = _tmp38_;
+#line 239 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp40_ = original_size;
+#line 239 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ result = _tmp39_ != _tmp40_;
+#line 239 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _data_collection_unref0 (sources);
+#line 239 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (iter);
+#line 239 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (values);
+#line 239 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return result;
+#line 1512 "DataSource.c"
+}
+
+
+static void data_source_real_commit_backlinks (DataSource* self, SourceCollection* sources, const gchar* dehydrated) {
+ gboolean _tmp0_ = FALSE;
+ SourceCollection* _tmp1_ = NULL;
+#line 248 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail ((sources == NULL) || IS_SOURCE_COLLECTION (sources));
+#line 249 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = sources;
+#line 249 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp1_ != NULL) {
+#line 249 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = TRUE;
+#line 1527 "DataSource.c"
+ } else {
+ const gchar* _tmp2_ = NULL;
+#line 249 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = dehydrated;
+#line 249 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = _tmp2_ != NULL;
+#line 1534 "DataSource.c"
+ }
+#line 249 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp0_) {
+#line 1538 "DataSource.c"
+ gchar* _tmp3_ = NULL;
+ gchar* _tmp4_ = NULL;
+#line 250 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp3_ = data_object_to_string (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_OBJECT, DataObject));
+#line 250 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4_ = _tmp3_;
+#line 250 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_warning ("DataSource.vala:250: No implementation to commit link state for %s", _tmp4_);
+#line 250 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_free0 (_tmp4_);
+#line 1549 "DataSource.c"
+ }
+}
+
+
+void data_source_commit_backlinks (DataSource* self, SourceCollection* sources, const gchar* dehydrated) {
+#line 248 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_DATA_SOURCE (self));
+#line 248 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ DATA_SOURCE_GET_CLASS (self)->commit_backlinks (self, sources, dehydrated);
+#line 1559 "DataSource.c"
+}
+
+
+static gchar* data_source_dehydrate_backlinks (DataSource* self) {
+ gchar* result = NULL;
+ gboolean _tmp0_ = FALSE;
+ GeeHashMap* _tmp1_ = NULL;
+ GString* builder = NULL;
+ GString* _tmp5_ = NULL;
+ const gchar* _tmp51_ = NULL;
+ GString* _tmp52_ = NULL;
+ const gchar* _tmp53_ = NULL;
+ gint _tmp54_ = 0;
+ gint _tmp55_ = 0;
+ gchar* _tmp58_ = NULL;
+#line 253 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (IS_DATA_SOURCE (self), NULL);
+#line 254 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = self->priv->backlinks;
+#line 254 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp1_ == NULL) {
+#line 254 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = TRUE;
+#line 1583 "DataSource.c"
+ } else {
+ GeeHashMap* _tmp2_ = NULL;
+ gint _tmp3_ = 0;
+ gint _tmp4_ = 0;
+#line 254 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = self->priv->backlinks;
+#line 254 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp3_ = gee_abstract_map_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, GEE_TYPE_MAP, GeeMap));
+#line 254 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4_ = _tmp3_;
+#line 254 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = _tmp4_ == 0;
+#line 1596 "DataSource.c"
+ }
+#line 254 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp0_) {
+#line 255 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ result = NULL;
+#line 255 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return result;
+#line 1604 "DataSource.c"
+ }
+#line 257 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp5_ = g_string_new ("");
+#line 257 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ builder = _tmp5_;
+#line 1610 "DataSource.c"
+ {
+ GeeIterator* _name_it = NULL;
+ GeeHashMap* _tmp6_ = NULL;
+ GeeSet* _tmp7_ = NULL;
+ GeeSet* _tmp8_ = NULL;
+ GeeSet* _tmp9_ = NULL;
+ GeeIterator* _tmp10_ = NULL;
+ GeeIterator* _tmp11_ = NULL;
+#line 258 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp6_ = self->priv->backlinks;
+#line 258 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp7_ = gee_abstract_map_get_keys (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, GEE_TYPE_MAP, GeeMap));
+#line 258 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp8_ = _tmp7_;
+#line 258 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp9_ = _tmp8_;
+#line 258 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp10_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 258 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp11_ = _tmp10_;
+#line 258 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (_tmp9_);
+#line 258 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _name_it = _tmp11_;
+#line 258 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ while (TRUE) {
+#line 1637 "DataSource.c"
+ GeeIterator* _tmp12_ = NULL;
+ gboolean _tmp13_ = FALSE;
+ gchar* name = NULL;
+ GeeIterator* _tmp14_ = NULL;
+ gpointer _tmp15_ = NULL;
+ GeeList* values = NULL;
+ GeeHashMap* _tmp16_ = NULL;
+ const gchar* _tmp17_ = NULL;
+ gpointer _tmp18_ = NULL;
+ gboolean _tmp19_ = FALSE;
+ GeeList* _tmp20_ = NULL;
+ gchar* value_field = NULL;
+ gchar* _tmp24_ = NULL;
+ const gchar* _tmp43_ = NULL;
+ gint _tmp44_ = 0;
+ gint _tmp45_ = 0;
+#line 258 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp12_ = _name_it;
+#line 258 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp13_ = gee_iterator_next (_tmp12_);
+#line 258 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (!_tmp13_) {
+#line 258 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ break;
+#line 1662 "DataSource.c"
+ }
+#line 258 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp14_ = _name_it;
+#line 258 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp15_ = gee_iterator_get (_tmp14_);
+#line 258 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ name = (gchar*) _tmp15_;
+#line 259 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp16_ = self->priv->backlinks;
+#line 259 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp17_ = name;
+#line 259 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp18_ = gee_abstract_map_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp16_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp17_);
+#line 259 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ values = (GeeList*) _tmp18_;
+#line 260 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp20_ = values;
+#line 260 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp20_ == NULL) {
+#line 260 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp19_ = TRUE;
+#line 1684 "DataSource.c"
+ } else {
+ GeeList* _tmp21_ = NULL;
+ gint _tmp22_ = 0;
+ gint _tmp23_ = 0;
+#line 260 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp21_ = values;
+#line 260 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp22_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp21_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 260 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp23_ = _tmp22_;
+#line 260 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp19_ = _tmp23_ == 0;
+#line 1697 "DataSource.c"
+ }
+#line 260 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp19_) {
+#line 261 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (values);
+#line 261 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_free0 (name);
+#line 261 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ continue;
+#line 1707 "DataSource.c"
+ }
+#line 263 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp24_ = g_strdup ("");
+#line 263 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ value_field = _tmp24_;
+#line 1713 "DataSource.c"
+ {
+ GeeList* _value_list = NULL;
+ GeeList* _tmp25_ = NULL;
+ GeeList* _tmp26_ = NULL;
+ gint _value_size = 0;
+ GeeList* _tmp27_ = NULL;
+ gint _tmp28_ = 0;
+ gint _tmp29_ = 0;
+ gint _value_index = 0;
+#line 264 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp25_ = values;
+#line 264 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp26_ = _g_object_ref0 (_tmp25_);
+#line 264 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _value_list = _tmp26_;
+#line 264 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp27_ = _value_list;
+#line 264 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp28_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp27_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 264 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp29_ = _tmp28_;
+#line 264 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _value_size = _tmp29_;
+#line 264 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _value_index = -1;
+#line 264 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ while (TRUE) {
+#line 1741 "DataSource.c"
+ gint _tmp30_ = 0;
+ gint _tmp31_ = 0;
+ gint _tmp32_ = 0;
+ gchar* value = NULL;
+ GeeList* _tmp33_ = NULL;
+ gint _tmp34_ = 0;
+ gpointer _tmp35_ = NULL;
+ const gchar* _tmp36_ = NULL;
+ gboolean _tmp37_ = FALSE;
+#line 264 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp30_ = _value_index;
+#line 264 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _value_index = _tmp30_ + 1;
+#line 264 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp31_ = _value_index;
+#line 264 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp32_ = _value_size;
+#line 264 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (!(_tmp31_ < _tmp32_)) {
+#line 264 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ break;
+#line 1763 "DataSource.c"
+ }
+#line 264 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp33_ = _value_list;
+#line 264 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp34_ = _value_index;
+#line 264 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp35_ = gee_list_get (_tmp33_, _tmp34_);
+#line 264 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ value = (gchar*) _tmp35_;
+#line 265 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp36_ = value;
+#line 265 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp37_ = is_string_empty (_tmp36_);
+#line 265 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (!_tmp37_) {
+#line 1779 "DataSource.c"
+ const gchar* _tmp38_ = NULL;
+ const gchar* _tmp39_ = NULL;
+ gchar* _tmp40_ = NULL;
+ gchar* _tmp41_ = NULL;
+ gchar* _tmp42_ = NULL;
+#line 266 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp38_ = value_field;
+#line 266 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp39_ = value;
+#line 266 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp40_ = g_strconcat (_tmp39_, "|", NULL);
+#line 266 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp41_ = _tmp40_;
+#line 266 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp42_ = g_strconcat (_tmp38_, _tmp41_, NULL);
+#line 266 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_free0 (value_field);
+#line 266 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ value_field = _tmp42_;
+#line 266 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_free0 (_tmp41_);
+#line 1801 "DataSource.c"
+ }
+#line 264 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_free0 (value);
+#line 1805 "DataSource.c"
+ }
+#line 264 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (_value_list);
+#line 1809 "DataSource.c"
+ }
+#line 269 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp43_ = value_field;
+#line 269 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp44_ = strlen (_tmp43_);
+#line 269 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp45_ = _tmp44_;
+#line 269 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp45_ > 0) {
+#line 1819 "DataSource.c"
+ GString* _tmp46_ = NULL;
+ const gchar* _tmp47_ = NULL;
+ const gchar* _tmp48_ = NULL;
+ gchar* _tmp49_ = NULL;
+ gchar* _tmp50_ = NULL;
+#line 270 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp46_ = builder;
+#line 270 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp47_ = name;
+#line 270 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp48_ = value_field;
+#line 270 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp49_ = g_strdup_printf ("%s=%s\n", _tmp47_, _tmp48_);
+#line 270 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp50_ = _tmp49_;
+#line 270 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_string_append (_tmp46_, _tmp50_);
+#line 270 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_free0 (_tmp50_);
+#line 1839 "DataSource.c"
+ }
+#line 258 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_free0 (value_field);
+#line 258 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (values);
+#line 258 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_free0 (name);
+#line 1847 "DataSource.c"
+ }
+#line 258 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (_name_it);
+#line 1851 "DataSource.c"
+ }
+#line 273 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp52_ = builder;
+#line 273 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp53_ = _tmp52_->str;
+#line 273 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp54_ = strlen (_tmp53_);
+#line 273 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp55_ = _tmp54_;
+#line 273 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp55_ > 0) {
+#line 1863 "DataSource.c"
+ GString* _tmp56_ = NULL;
+ const gchar* _tmp57_ = NULL;
+#line 273 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp56_ = builder;
+#line 273 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp57_ = _tmp56_->str;
+#line 273 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp51_ = _tmp57_;
+#line 1872 "DataSource.c"
+ } else {
+#line 273 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp51_ = NULL;
+#line 1876 "DataSource.c"
+ }
+#line 273 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp58_ = g_strdup (_tmp51_);
+#line 273 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ result = _tmp58_;
+#line 273 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_string_free0 (builder);
+#line 273 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return result;
+#line 1886 "DataSource.c"
+}
+
+
+void data_source_rehydrate_backlinks (DataSource* self, SourceCollection* unlinked_from, const gchar* dehydrated) {
+ SourceCollection* _tmp0_ = NULL;
+ GeeHashMap* _tmp1_ = NULL;
+ const gchar* _tmp2_ = NULL;
+ gchar** lines = NULL;
+ const gchar* _tmp3_ = NULL;
+ gchar** _tmp4_ = NULL;
+ gchar** _tmp5_ = NULL;
+ gint lines_length1 = 0;
+ gint _lines_size_ = 0;
+ gchar** _tmp6_ = NULL;
+ gint _tmp6__length1 = 0;
+#line 278 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_DATA_SOURCE (self));
+#line 278 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_SOURCE_COLLECTION (unlinked_from));
+#line 279 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = unlinked_from;
+#line 279 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->unlinked_from_collection = _tmp0_;
+#line 280 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = gee_hash_map_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, GEE_TYPE_LIST, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 280 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (self->priv->backlinks);
+#line 280 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->backlinks = _tmp1_;
+#line 282 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = dehydrated;
+#line 282 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp2_ == NULL) {
+#line 283 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return;
+#line 1922 "DataSource.c"
+ }
+#line 285 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp3_ = dehydrated;
+#line 285 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp5_ = _tmp4_ = g_strsplit (_tmp3_, "\n", 0);
+#line 285 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ lines = _tmp5_;
+#line 285 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ lines_length1 = _vala_array_length (_tmp4_);
+#line 285 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _lines_size_ = lines_length1;
+#line 286 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp6_ = lines;
+#line 286 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp6__length1 = lines_length1;
+#line 1938 "DataSource.c"
+ {
+ gchar** line_collection = NULL;
+ gint line_collection_length1 = 0;
+ gint _line_collection_size_ = 0;
+ gint line_it = 0;
+#line 286 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ line_collection = _tmp6_;
+#line 286 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ line_collection_length1 = _tmp6__length1;
+#line 286 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ for (line_it = 0; line_it < _tmp6__length1; line_it = line_it + 1) {
+#line 1950 "DataSource.c"
+ gchar* _tmp7_ = NULL;
+ gchar* line = NULL;
+#line 286 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp7_ = g_strdup (line_collection[line_it]);
+#line 286 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ line = _tmp7_;
+#line 1957 "DataSource.c"
+ {
+ const gchar* _tmp8_ = NULL;
+ gint _tmp9_ = 0;
+ gint _tmp10_ = 0;
+ gchar** tokens = NULL;
+ const gchar* _tmp11_ = NULL;
+ gchar** _tmp12_ = NULL;
+ gchar** _tmp13_ = NULL;
+ gint tokens_length1 = 0;
+ gint _tokens_size_ = 0;
+ gchar** _tmp14_ = NULL;
+ gint _tmp14__length1 = 0;
+ gchar** decoded_values = NULL;
+ gchar** _tmp18_ = NULL;
+ gint _tmp18__length1 = 0;
+ const gchar* _tmp19_ = NULL;
+ gchar** _tmp20_ = NULL;
+ gchar** _tmp21_ = NULL;
+ gint decoded_values_length1 = 0;
+ gint _decoded_values_size_ = 0;
+ GeeList* values = NULL;
+ GeeArrayList* _tmp22_ = NULL;
+ gchar** _tmp23_ = NULL;
+ gint _tmp23__length1 = 0;
+ GeeList* _tmp32_ = NULL;
+ gint _tmp33_ = 0;
+ gint _tmp34_ = 0;
+#line 287 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp8_ = line;
+#line 287 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp9_ = strlen (_tmp8_);
+#line 287 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp10_ = _tmp9_;
+#line 287 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp10_ == 0) {
+#line 288 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_free0 (line);
+#line 288 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ continue;
+#line 1997 "DataSource.c"
+ }
+#line 290 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp11_ = line;
+#line 290 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp13_ = _tmp12_ = g_strsplit (_tmp11_, "=", 2);
+#line 290 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ tokens = _tmp13_;
+#line 290 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ tokens_length1 = _vala_array_length (_tmp12_);
+#line 290 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tokens_size_ = tokens_length1;
+#line 291 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp14_ = tokens;
+#line 291 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp14__length1 = tokens_length1;
+#line 291 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp14__length1 < 2) {
+#line 2015 "DataSource.c"
+ const gchar* _tmp15_ = NULL;
+ gchar* _tmp16_ = NULL;
+ gchar* _tmp17_ = NULL;
+#line 292 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp15_ = line;
+#line 292 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp16_ = data_object_to_string (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_OBJECT, DataObject));
+#line 292 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp17_ = _tmp16_;
+#line 292 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_warning ("DataSource.vala:292: Unable to rehydrate \"%s\" for %s: name and value" \
+" not present", _tmp15_, _tmp17_);
+#line 292 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_free0 (_tmp17_);
+#line 295 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ tokens = (_vala_array_free (tokens, tokens_length1, (GDestroyNotify) g_free), NULL);
+#line 295 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_free0 (line);
+#line 295 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ continue;
+#line 2035 "DataSource.c"
+ }
+#line 298 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp18_ = tokens;
+#line 298 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp18__length1 = tokens_length1;
+#line 298 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp19_ = _tmp18_[1];
+#line 298 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp21_ = _tmp20_ = g_strsplit (_tmp19_, "|", 0);
+#line 298 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ decoded_values = _tmp21_;
+#line 298 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ decoded_values_length1 = _vala_array_length (_tmp20_);
+#line 298 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _decoded_values_size_ = decoded_values_length1;
+#line 299 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp22_ = gee_array_list_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, NULL, NULL, NULL);
+#line 299 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ values = G_TYPE_CHECK_INSTANCE_CAST (_tmp22_, GEE_TYPE_LIST, GeeList);
+#line 300 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp23_ = decoded_values;
+#line 300 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp23__length1 = decoded_values_length1;
+#line 2059 "DataSource.c"
+ {
+ gchar** value_collection = NULL;
+ gint value_collection_length1 = 0;
+ gint _value_collection_size_ = 0;
+ gint value_it = 0;
+#line 300 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ value_collection = _tmp23_;
+#line 300 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ value_collection_length1 = _tmp23__length1;
+#line 300 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ for (value_it = 0; value_it < _tmp23__length1; value_it = value_it + 1) {
+#line 2071 "DataSource.c"
+ gchar* _tmp24_ = NULL;
+ gchar* value = NULL;
+#line 300 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp24_ = g_strdup (value_collection[value_it]);
+#line 300 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ value = _tmp24_;
+#line 2078 "DataSource.c"
+ {
+ gboolean _tmp25_ = FALSE;
+ const gchar* _tmp26_ = NULL;
+#line 301 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp26_ = value;
+#line 301 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp26_ != NULL) {
+#line 2086 "DataSource.c"
+ const gchar* _tmp27_ = NULL;
+ gint _tmp28_ = 0;
+ gint _tmp29_ = 0;
+#line 301 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp27_ = value;
+#line 301 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp28_ = strlen (_tmp27_);
+#line 301 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp29_ = _tmp28_;
+#line 301 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp25_ = _tmp29_ > 0;
+#line 2098 "DataSource.c"
+ } else {
+#line 301 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp25_ = FALSE;
+#line 2102 "DataSource.c"
+ }
+#line 301 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp25_) {
+#line 2106 "DataSource.c"
+ GeeList* _tmp30_ = NULL;
+ const gchar* _tmp31_ = NULL;
+#line 302 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp30_ = values;
+#line 302 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp31_ = value;
+#line 302 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ gee_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp30_, GEE_TYPE_COLLECTION, GeeCollection), _tmp31_);
+#line 2115 "DataSource.c"
+ }
+#line 300 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_free0 (value);
+#line 2119 "DataSource.c"
+ }
+ }
+ }
+#line 305 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp32_ = values;
+#line 305 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp33_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp32_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 305 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp34_ = _tmp33_;
+#line 305 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp34_ > 0) {
+#line 2131 "DataSource.c"
+ GeeHashMap* _tmp35_ = NULL;
+ gchar** _tmp36_ = NULL;
+ gint _tmp36__length1 = 0;
+ const gchar* _tmp37_ = NULL;
+ GeeList* _tmp38_ = NULL;
+#line 306 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp35_ = self->priv->backlinks;
+#line 306 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp36_ = tokens;
+#line 306 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp36__length1 = tokens_length1;
+#line 306 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp37_ = _tmp36_[0];
+#line 306 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp38_ = values;
+#line 306 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ gee_abstract_map_set (G_TYPE_CHECK_INSTANCE_CAST (_tmp35_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp37_, _tmp38_);
+#line 2149 "DataSource.c"
+ }
+#line 286 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (values);
+#line 286 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ decoded_values = (_vala_array_free (decoded_values, decoded_values_length1, (GDestroyNotify) g_free), NULL);
+#line 286 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ tokens = (_vala_array_free (tokens, tokens_length1, (GDestroyNotify) g_free), NULL);
+#line 286 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_free0 (line);
+#line 2159 "DataSource.c"
+ }
+ }
+ }
+#line 278 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ lines = (_vala_array_free (lines, lines_length1, (GDestroyNotify) g_free), NULL);
+#line 2165 "DataSource.c"
+}
+
+
+static SourceSnapshot* data_source_real_save_snapshot (DataSource* self) {
+ SourceSnapshot* result = NULL;
+#line 312 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ result = NULL;
+#line 312 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return result;
+#line 2175 "DataSource.c"
+}
+
+
+SourceSnapshot* data_source_save_snapshot (DataSource* self) {
+#line 311 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (IS_DATA_SOURCE (self), NULL);
+#line 311 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return DATA_SOURCE_GET_CLASS (self)->save_snapshot (self);
+#line 2184 "DataSource.c"
+}
+
+
+void data_source_internal_mark_for_destroy (DataSource* self) {
+#line 316 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_DATA_SOURCE (self));
+#line 317 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->marked_for_destroy = TRUE;
+#line 2193 "DataSource.c"
+}
+
+
+static gboolean data_source_real_internal_delete_backing (DataSource* self, GError** error) {
+ gboolean result = FALSE;
+#line 325 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ result = TRUE;
+#line 325 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return result;
+#line 2203 "DataSource.c"
+}
+
+
+gboolean data_source_internal_delete_backing (DataSource* self, GError** error) {
+#line 324 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (IS_DATA_SOURCE (self), FALSE);
+#line 324 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return DATA_SOURCE_GET_CLASS (self)->internal_delete_backing (self, error);
+#line 2212 "DataSource.c"
+}
+
+
+static gboolean data_source_real_equals (DataSource* self, DataSource* source) {
+ gboolean result = FALSE;
+ DataSource* _tmp0_ = NULL;
+#line 330 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail ((source == NULL) || IS_DATA_SOURCE (source), FALSE);
+#line 331 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = source;
+#line 331 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ result = self == _tmp0_;
+#line 331 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return result;
+#line 2227 "DataSource.c"
+}
+
+
+gboolean data_source_equals (DataSource* self, DataSource* source) {
+#line 330 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (IS_DATA_SOURCE (self), FALSE);
+#line 330 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return DATA_SOURCE_GET_CLASS (self)->equals (self, source);
+#line 2236 "DataSource.c"
+}
+
+
+static void data_source_real_destroy (DataSource* self) {
+ gboolean _tmp0_ = FALSE;
+#line 341 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = self->priv->marked_for_destroy;
+#line 341 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _vala_assert (_tmp0_, "marked_for_destroy");
+#line 344 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->is_destroyed = TRUE;
+#line 2248 "DataSource.c"
+ {
+ gint ctr = 0;
+#line 347 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ctr = 0;
+#line 2253 "DataSource.c"
+ {
+ gboolean _tmp1_ = FALSE;
+#line 347 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = TRUE;
+#line 347 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ while (TRUE) {
+#line 2260 "DataSource.c"
+ gint _tmp3_ = 0;
+ DataView** _tmp4_ = NULL;
+ gint _tmp4__length1 = 0;
+ DataView** _tmp5_ = NULL;
+ gint _tmp5__length1 = 0;
+ gint _tmp6_ = 0;
+ DataView* _tmp7_ = NULL;
+#line 347 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (!_tmp1_) {
+#line 2270 "DataSource.c"
+ gint _tmp2_ = 0;
+#line 347 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = ctr;
+#line 347 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ctr = _tmp2_ + 1;
+#line 2276 "DataSource.c"
+ }
+#line 347 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = FALSE;
+#line 347 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp3_ = ctr;
+#line 347 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4_ = self->priv->subscribers;
+#line 347 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4__length1 = self->priv->subscribers_length1;
+#line 347 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (!(_tmp3_ < _tmp4__length1)) {
+#line 347 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ break;
+#line 2290 "DataSource.c"
+ }
+#line 348 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp5_ = self->priv->subscribers;
+#line 348 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp5__length1 = self->priv->subscribers_length1;
+#line 348 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp6_ = ctr;
+#line 348 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp7_ = _tmp5_[_tmp6_];
+#line 348 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp7_ != NULL) {
+#line 2302 "DataSource.c"
+ DataView* view = NULL;
+ DataView** _tmp8_ = NULL;
+ gint _tmp8__length1 = 0;
+ gint _tmp9_ = 0;
+ DataView* _tmp10_ = NULL;
+ DataView* _tmp11_ = NULL;
+ DataView** _tmp12_ = NULL;
+ gint _tmp12__length1 = 0;
+ gint _tmp13_ = 0;
+ DataView* _tmp14_ = NULL;
+ DataView* _tmp15_ = NULL;
+#line 349 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp8_ = self->priv->subscribers;
+#line 349 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp8__length1 = self->priv->subscribers_length1;
+#line 349 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp9_ = ctr;
+#line 349 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp10_ = _tmp8_[_tmp9_];
+#line 349 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp11_ = _g_object_ref0 (_tmp10_);
+#line 349 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ view = _tmp11_;
+#line 350 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp12_ = self->priv->subscribers;
+#line 350 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp12__length1 = self->priv->subscribers_length1;
+#line 350 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp13_ = ctr;
+#line 350 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (_tmp12_[_tmp13_]);
+#line 350 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp12_[_tmp13_] = NULL;
+#line 350 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp14_ = _tmp12_[_tmp13_];
+#line 352 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp15_ = view;
+#line 352 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ data_view_notify_unsubscribed (_tmp15_, self);
+#line 348 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (view);
+#line 2344 "DataSource.c"
+ }
+ }
+ }
+ }
+#line 357 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_signal_emit_by_name (self, "destroyed");
+#line 2351 "DataSource.c"
+}
+
+
+void data_source_destroy (DataSource* self) {
+#line 340 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_DATA_SOURCE (self));
+#line 340 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ DATA_SOURCE_GET_CLASS (self)->destroy (self);
+#line 2360 "DataSource.c"
+}
+
+
+gboolean data_source_destroy_orphan (DataSource* self, gboolean delete_backing) {
+ gboolean result = FALSE;
+ gboolean ret = FALSE;
+ gboolean _tmp0_ = FALSE;
+ SourceCollection* _tmp10_ = NULL;
+ GError * _inner_error_ = NULL;
+#line 366 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (IS_DATA_SOURCE (self), FALSE);
+#line 367 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ret = TRUE;
+#line 368 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = delete_backing;
+#line 368 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp0_) {
+#line 2378 "DataSource.c"
+ {
+ gboolean _tmp1_ = FALSE;
+ gboolean _tmp2_ = FALSE;
+ gboolean _tmp3_ = FALSE;
+#line 370 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = data_source_internal_delete_backing (self, &_inner_error_);
+#line 370 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = _tmp2_;
+#line 370 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (G_UNLIKELY (_inner_error_ != NULL)) {
+#line 2389 "DataSource.c"
+ goto __catch47_g_error;
+ }
+#line 370 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ret = _tmp1_;
+#line 371 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp3_ = ret;
+#line 371 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (!_tmp3_) {
+#line 2398 "DataSource.c"
+ gchar* _tmp4_ = NULL;
+ gchar* _tmp5_ = NULL;
+#line 372 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4_ = data_object_to_string (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_OBJECT, DataObject));
+#line 372 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp5_ = _tmp4_;
+#line 372 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_warning ("DataSource.vala:372: Unable to delete backing for %s", _tmp5_);
+#line 372 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_free0 (_tmp5_);
+#line 2409 "DataSource.c"
+ }
+ }
+ goto __finally47;
+ __catch47_g_error:
+ {
+ GError* err = NULL;
+ gchar* _tmp6_ = NULL;
+ gchar* _tmp7_ = NULL;
+ GError* _tmp8_ = NULL;
+ const gchar* _tmp9_ = NULL;
+#line 369 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ err = _inner_error_;
+#line 369 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _inner_error_ = NULL;
+#line 375 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp6_ = data_object_to_string (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_OBJECT, DataObject));
+#line 375 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp7_ = _tmp6_;
+#line 375 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp8_ = err;
+#line 375 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp9_ = _tmp8_->message;
+#line 375 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_warning ("DataSource.vala:375: Unable to delete backing for %s: %s", _tmp7_, _tmp9_);
+#line 375 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_free0 (_tmp7_);
+#line 376 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ret = FALSE;
+#line 369 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_error_free0 (err);
+#line 2440 "DataSource.c"
+ }
+ __finally47:
+#line 369 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (G_UNLIKELY (_inner_error_ != NULL)) {
+#line 369 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+#line 369 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_clear_error (&_inner_error_);
+#line 369 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return FALSE;
+#line 2451 "DataSource.c"
+ }
+ }
+#line 380 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ data_source_internal_mark_for_destroy (self);
+#line 381 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ data_source_destroy (self);
+#line 383 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp10_ = self->priv->unlinked_from_collection;
+#line 383 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp10_ != NULL) {
+#line 2462 "DataSource.c"
+ SourceCollection* _tmp11_ = NULL;
+#line 384 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp11_ = self->priv->unlinked_from_collection;
+#line 384 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_collection_notify_unlinked_destroyed (_tmp11_, self);
+#line 2468 "DataSource.c"
+ }
+#line 386 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ result = ret;
+#line 386 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return result;
+#line 2474 "DataSource.c"
+}
+
+
+static void _vala_array_add122 (DataView*** array, int* length, int* size, DataView* value) {
+#line 406 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if ((*length) == (*size)) {
+#line 406 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ *size = (*size) ? (2 * (*size)) : 4;
+#line 406 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ *array = g_renew (DataView*, *array, (*size) + 1);
+#line 2485 "DataSource.c"
+ }
+#line 406 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ (*array)[(*length)++] = value;
+#line 406 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ (*array)[*length] = NULL;
+#line 2491 "DataSource.c"
+}
+
+
+void data_source_internal_subscribe (DataSource* self, DataView* view) {
+ gboolean _tmp0_ = FALSE;
+ DataView** _tmp13_ = NULL;
+ gint _tmp13__length1 = 0;
+ DataView* _tmp14_ = NULL;
+ DataView* _tmp15_ = NULL;
+#line 395 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_DATA_SOURCE (self));
+#line 395 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_DATA_VIEW (view));
+#line 396 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = self->priv->in_contact;
+#line 396 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _vala_assert (!_tmp0_, "!in_contact");
+#line 2509 "DataSource.c"
+ {
+ gint ctr = 0;
+#line 398 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ctr = 0;
+#line 2514 "DataSource.c"
+ {
+ gboolean _tmp1_ = FALSE;
+#line 398 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = TRUE;
+#line 398 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ while (TRUE) {
+#line 2521 "DataSource.c"
+ gint _tmp3_ = 0;
+ DataView** _tmp4_ = NULL;
+ gint _tmp4__length1 = 0;
+ DataView** _tmp5_ = NULL;
+ gint _tmp5__length1 = 0;
+ gint _tmp6_ = 0;
+ DataView* _tmp7_ = NULL;
+#line 398 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (!_tmp1_) {
+#line 2531 "DataSource.c"
+ gint _tmp2_ = 0;
+#line 398 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = ctr;
+#line 398 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ctr = _tmp2_ + 1;
+#line 2537 "DataSource.c"
+ }
+#line 398 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = FALSE;
+#line 398 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp3_ = ctr;
+#line 398 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4_ = self->priv->subscribers;
+#line 398 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4__length1 = self->priv->subscribers_length1;
+#line 398 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (!(_tmp3_ < _tmp4__length1)) {
+#line 398 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ break;
+#line 2551 "DataSource.c"
+ }
+#line 399 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp5_ = self->priv->subscribers;
+#line 399 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp5__length1 = self->priv->subscribers_length1;
+#line 399 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp6_ = ctr;
+#line 399 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp7_ = _tmp5_[_tmp6_];
+#line 399 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp7_ == NULL) {
+#line 2563 "DataSource.c"
+ DataView** _tmp8_ = NULL;
+ gint _tmp8__length1 = 0;
+ gint _tmp9_ = 0;
+ DataView* _tmp10_ = NULL;
+ DataView* _tmp11_ = NULL;
+ DataView* _tmp12_ = NULL;
+#line 400 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp8_ = self->priv->subscribers;
+#line 400 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp8__length1 = self->priv->subscribers_length1;
+#line 400 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp9_ = ctr;
+#line 400 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp10_ = view;
+#line 400 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp11_ = _g_object_ref0 (_tmp10_);
+#line 400 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (_tmp8_[_tmp9_]);
+#line 400 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp8_[_tmp9_] = _tmp11_;
+#line 400 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp12_ = _tmp8_[_tmp9_];
+#line 402 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return;
+#line 2588 "DataSource.c"
+ }
+ }
+ }
+ }
+#line 406 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp13_ = self->priv->subscribers;
+#line 406 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp13__length1 = self->priv->subscribers_length1;
+#line 406 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp14_ = view;
+#line 406 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp15_ = _g_object_ref0 (_tmp14_);
+#line 406 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _vala_array_add122 (&self->priv->subscribers, &self->priv->subscribers_length1, &self->priv->_subscribers_size_, _tmp15_);
+#line 2603 "DataSource.c"
+}
+
+
+void data_source_internal_unsubscribe (DataSource* self, DataView* view) {
+ gboolean _tmp0_ = FALSE;
+#line 411 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_DATA_SOURCE (self));
+#line 411 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_DATA_VIEW (view));
+#line 412 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = self->priv->in_contact;
+#line 412 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _vala_assert (!_tmp0_, "!in_contact");
+#line 2617 "DataSource.c"
+ {
+ gint ctr = 0;
+#line 414 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ctr = 0;
+#line 2622 "DataSource.c"
+ {
+ gboolean _tmp1_ = FALSE;
+#line 414 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = TRUE;
+#line 414 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ while (TRUE) {
+#line 2629 "DataSource.c"
+ gint _tmp3_ = 0;
+ DataView** _tmp4_ = NULL;
+ gint _tmp4__length1 = 0;
+ DataView** _tmp5_ = NULL;
+ gint _tmp5__length1 = 0;
+ gint _tmp6_ = 0;
+ DataView* _tmp7_ = NULL;
+ DataView* _tmp8_ = NULL;
+#line 414 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (!_tmp1_) {
+#line 2640 "DataSource.c"
+ gint _tmp2_ = 0;
+#line 414 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = ctr;
+#line 414 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ctr = _tmp2_ + 1;
+#line 2646 "DataSource.c"
+ }
+#line 414 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = FALSE;
+#line 414 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp3_ = ctr;
+#line 414 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4_ = self->priv->subscribers;
+#line 414 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4__length1 = self->priv->subscribers_length1;
+#line 414 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (!(_tmp3_ < _tmp4__length1)) {
+#line 414 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ break;
+#line 2660 "DataSource.c"
+ }
+#line 415 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp5_ = self->priv->subscribers;
+#line 415 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp5__length1 = self->priv->subscribers_length1;
+#line 415 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp6_ = ctr;
+#line 415 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp7_ = _tmp5_[_tmp6_];
+#line 415 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp8_ = view;
+#line 415 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp7_ == _tmp8_) {
+#line 2674 "DataSource.c"
+ DataView** _tmp9_ = NULL;
+ gint _tmp9__length1 = 0;
+ gint _tmp10_ = 0;
+ DataView* _tmp11_ = NULL;
+#line 416 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp9_ = self->priv->subscribers;
+#line 416 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp9__length1 = self->priv->subscribers_length1;
+#line 416 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp10_ = ctr;
+#line 416 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (_tmp9_[_tmp10_]);
+#line 416 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp9_[_tmp10_] = NULL;
+#line 416 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp11_ = _tmp9_[_tmp10_];
+#line 418 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return;
+#line 2693 "DataSource.c"
+ }
+ }
+ }
+ }
+}
+
+
+void data_source_contact_subscribers (DataSource* self, DataSourceContactSubscriber contact_subscriber, void* contact_subscriber_target) {
+ gboolean _tmp0_ = FALSE;
+#line 423 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_DATA_SOURCE (self));
+#line 424 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = self->priv->in_contact;
+#line 424 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _vala_assert (!_tmp0_, "!in_contact");
+#line 426 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->in_contact = TRUE;
+#line 2711 "DataSource.c"
+ {
+ gint ctr = 0;
+#line 427 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ctr = 0;
+#line 2716 "DataSource.c"
+ {
+ gboolean _tmp1_ = FALSE;
+#line 427 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = TRUE;
+#line 427 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ while (TRUE) {
+#line 2723 "DataSource.c"
+ gint _tmp3_ = 0;
+ DataView** _tmp4_ = NULL;
+ gint _tmp4__length1 = 0;
+ DataView** _tmp5_ = NULL;
+ gint _tmp5__length1 = 0;
+ gint _tmp6_ = 0;
+ DataView* _tmp7_ = NULL;
+#line 427 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (!_tmp1_) {
+#line 2733 "DataSource.c"
+ gint _tmp2_ = 0;
+#line 427 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = ctr;
+#line 427 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ctr = _tmp2_ + 1;
+#line 2739 "DataSource.c"
+ }
+#line 427 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = FALSE;
+#line 427 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp3_ = ctr;
+#line 427 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4_ = self->priv->subscribers;
+#line 427 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4__length1 = self->priv->subscribers_length1;
+#line 427 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (!(_tmp3_ < _tmp4__length1)) {
+#line 427 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ break;
+#line 2753 "DataSource.c"
+ }
+#line 428 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp5_ = self->priv->subscribers;
+#line 428 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp5__length1 = self->priv->subscribers_length1;
+#line 428 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp6_ = ctr;
+#line 428 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp7_ = _tmp5_[_tmp6_];
+#line 428 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp7_ != NULL) {
+#line 2765 "DataSource.c"
+ DataSourceContactSubscriber _tmp8_ = NULL;
+ void* _tmp8__target = NULL;
+ DataView** _tmp9_ = NULL;
+ gint _tmp9__length1 = 0;
+ gint _tmp10_ = 0;
+ DataView* _tmp11_ = NULL;
+#line 429 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp8_ = contact_subscriber;
+#line 429 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp8__target = contact_subscriber_target;
+#line 429 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp9_ = self->priv->subscribers;
+#line 429 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp9__length1 = self->priv->subscribers_length1;
+#line 429 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp10_ = ctr;
+#line 429 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp11_ = _tmp9_[_tmp10_];
+#line 429 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp8_ (_tmp11_, _tmp8__target);
+#line 2786 "DataSource.c"
+ }
+ }
+ }
+ }
+#line 431 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->in_contact = FALSE;
+#line 2793 "DataSource.c"
+}
+
+
+void data_source_contact_subscribers_alteration (DataSource* self, Alteration* alteration) {
+ gboolean _tmp0_ = FALSE;
+#line 434 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_DATA_SOURCE (self));
+#line 434 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_ALTERATION (alteration));
+#line 435 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = self->priv->in_contact;
+#line 435 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _vala_assert (!_tmp0_, "!in_contact");
+#line 437 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->in_contact = TRUE;
+#line 2809 "DataSource.c"
+ {
+ gint ctr = 0;
+#line 438 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ctr = 0;
+#line 2814 "DataSource.c"
+ {
+ gboolean _tmp1_ = FALSE;
+#line 438 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = TRUE;
+#line 438 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ while (TRUE) {
+#line 2821 "DataSource.c"
+ gint _tmp3_ = 0;
+ DataView** _tmp4_ = NULL;
+ gint _tmp4__length1 = 0;
+ DataView** _tmp5_ = NULL;
+ gint _tmp5__length1 = 0;
+ gint _tmp6_ = 0;
+ DataView* _tmp7_ = NULL;
+#line 438 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (!_tmp1_) {
+#line 2831 "DataSource.c"
+ gint _tmp2_ = 0;
+#line 438 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = ctr;
+#line 438 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ctr = _tmp2_ + 1;
+#line 2837 "DataSource.c"
+ }
+#line 438 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = FALSE;
+#line 438 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp3_ = ctr;
+#line 438 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4_ = self->priv->subscribers;
+#line 438 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4__length1 = self->priv->subscribers_length1;
+#line 438 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (!(_tmp3_ < _tmp4__length1)) {
+#line 438 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ break;
+#line 2851 "DataSource.c"
+ }
+#line 439 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp5_ = self->priv->subscribers;
+#line 439 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp5__length1 = self->priv->subscribers_length1;
+#line 439 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp6_ = ctr;
+#line 439 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp7_ = _tmp5_[_tmp6_];
+#line 439 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp7_ != NULL) {
+#line 2863 "DataSource.c"
+ DataView** _tmp8_ = NULL;
+ gint _tmp8__length1 = 0;
+ gint _tmp9_ = 0;
+ DataView* _tmp10_ = NULL;
+ Alteration* _tmp11_ = NULL;
+#line 440 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp8_ = self->priv->subscribers;
+#line 440 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp8__length1 = self->priv->subscribers_length1;
+#line 440 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp9_ = ctr;
+#line 440 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp10_ = _tmp8_[_tmp9_];
+#line 440 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp11_ = alteration;
+#line 440 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ data_object_notify_altered (G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, TYPE_DATA_OBJECT, DataObject), _tmp11_);
+#line 2881 "DataSource.c"
+ }
+ }
+ }
+ }
+#line 442 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->in_contact = FALSE;
+#line 2888 "DataSource.c"
+}
+
+
+static void data_source_real_unlinked (DataSource* self, SourceCollection* sources) {
+#line 51 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_SOURCE_COLLECTION (sources));
+#line 2895 "DataSource.c"
+}
+
+
+static void g_cclosure_user_marshal_VOID__DATA_COLLECTION (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data) {
+ typedef void (*GMarshalFunc_VOID__DATA_COLLECTION) (gpointer data1, gpointer arg_1, gpointer data2);
+ register GMarshalFunc_VOID__DATA_COLLECTION callback;
+ register GCClosure * cc;
+ register gpointer data1;
+ register gpointer data2;
+ cc = (GCClosure *) closure;
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (n_param_values == 2);
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (G_CCLOSURE_SWAP_DATA (closure)) {
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ data1 = closure->data;
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ data2 = param_values->data[0].v_pointer;
+#line 2914 "DataSource.c"
+ } else {
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ data1 = param_values->data[0].v_pointer;
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ data2 = closure->data;
+#line 2920 "DataSource.c"
+ }
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ callback = (GMarshalFunc_VOID__DATA_COLLECTION) (marshal_data ? marshal_data : cc->callback);
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ callback (data1, value_get_data_collection (param_values + 1), data2);
+#line 2926 "DataSource.c"
+}
+
+
+static void data_source_real_relinked (DataSource* self, SourceCollection* sources) {
+#line 55 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_SOURCE_COLLECTION (sources));
+#line 2933 "DataSource.c"
+}
+
+
+static void data_source_real_destroyed (DataSource* self) {
+}
+
+
+static void data_source_class_init (DataSourceClass * klass) {
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ data_source_parent_class = g_type_class_peek_parent (klass);
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_type_class_add_private (klass, sizeof (DataSourcePrivate));
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ((DataObjectClass *) klass)->notify_membership_changed = data_source_real_notify_membership_changed;
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ((DataSourceClass *) klass)->notify_held_in_tank = data_source_real_notify_held_in_tank;
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ((DataObjectClass *) klass)->notify_altered = data_source_real_notify_altered;
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ((DataSourceClass *) klass)->notify_unlinking = data_source_real_notify_unlinking;
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ((DataSourceClass *) klass)->notify_unlinked = data_source_real_notify_unlinked;
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ((DataSourceClass *) klass)->notify_relinking = data_source_real_notify_relinking;
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ((DataSourceClass *) klass)->notify_relinked = data_source_real_notify_relinked;
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ((DataSourceClass *) klass)->get_typename = data_source_real_get_typename;
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ((DataSourceClass *) klass)->get_instance_id = data_source_real_get_instance_id;
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ((DataSourceClass *) klass)->get_source_id = data_source_real_get_source_id;
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ((DataSourceClass *) klass)->commit_backlinks = data_source_real_commit_backlinks;
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ((DataSourceClass *) klass)->save_snapshot = data_source_real_save_snapshot;
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ((DataSourceClass *) klass)->internal_delete_backing = data_source_real_internal_delete_backing;
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ((DataSourceClass *) klass)->equals = data_source_real_equals;
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ((DataSourceClass *) klass)->destroy = data_source_real_destroy;
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ((DataSourceClass *) klass)->unlinked = data_source_real_unlinked;
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ((DataSourceClass *) klass)->relinked = data_source_real_relinked;
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ((DataSourceClass *) klass)->destroyed = data_source_real_destroyed;
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ G_OBJECT_CLASS (klass)->finalize = data_source_finalize;
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_signal_new ("unlinked", TYPE_DATA_SOURCE, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (DataSourceClass, unlinked), NULL, NULL, g_cclosure_user_marshal_VOID__DATA_COLLECTION, G_TYPE_NONE, 1, TYPE_SOURCE_COLLECTION);
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_signal_new ("relinked", TYPE_DATA_SOURCE, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (DataSourceClass, relinked), NULL, NULL, g_cclosure_user_marshal_VOID__DATA_COLLECTION, G_TYPE_NONE, 1, TYPE_SOURCE_COLLECTION);
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_signal_new ("destroyed", TYPE_DATA_SOURCE, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (DataSourceClass, destroyed), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+#line 2990 "DataSource.c"
+}
+
+
+static void data_source_instance_init (DataSource * self) {
+ DataView** _tmp0_ = NULL;
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv = DATA_SOURCE_GET_PRIVATE (self);
+#line 42 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = g_new0 (DataView*, 4 + 1);
+#line 42 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->subscribers = _tmp0_;
+#line 42 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->subscribers_length1 = 4;
+#line 42 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->_subscribers_size_ = self->priv->subscribers_length1;
+#line 43 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->holding_tank = NULL;
+#line 44 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->unlinked_from_collection = NULL;
+#line 45 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->backlinks = NULL;
+#line 46 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->in_contact = FALSE;
+#line 47 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->marked_for_destroy = FALSE;
+#line 48 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->is_destroyed = FALSE;
+#line 3018 "DataSource.c"
+}
+
+
+static void data_source_finalize (GObject* obj) {
+ DataSource * self;
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_DATA_SOURCE, DataSource);
+#line 42 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->subscribers = (_vala_array_free (self->priv->subscribers, self->priv->subscribers_length1, (GDestroyNotify) g_object_unref), NULL);
+#line 43 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _source_holding_tank_unref0 (self->priv->holding_tank);
+#line 45 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (self->priv->backlinks);
+#line 38 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ G_OBJECT_CLASS (data_source_parent_class)->finalize (obj);
+#line 3034 "DataSource.c"
+}
+
+
+GType data_source_get_type (void) {
+ static volatile gsize data_source_type_id__volatile = 0;
+ if (g_once_init_enter (&data_source_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (DataSourceClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) data_source_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (DataSource), 0, (GInstanceInitFunc) data_source_instance_init, NULL };
+ GType data_source_type_id;
+ data_source_type_id = g_type_register_static (TYPE_DATA_OBJECT, "DataSource", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
+ g_once_init_leave (&data_source_type_id__volatile, data_source_type_id);
+ }
+ return data_source_type_id__volatile;
+}
+
+
+static void source_snapshot_real_notify_broken (SourceSnapshot* self) {
+#line 455 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->snapshot_broken = TRUE;
+#line 457 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_signal_emit_by_name (self, "broken");
+#line 3055 "DataSource.c"
+}
+
+
+void source_snapshot_notify_broken (SourceSnapshot* self) {
+#line 454 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_SOURCE_SNAPSHOT (self));
+#line 454 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ SOURCE_SNAPSHOT_GET_CLASS (self)->notify_broken (self);
+#line 3064 "DataSource.c"
+}
+
+
+gboolean source_snapshot_is_broken (SourceSnapshot* self) {
+ gboolean result = FALSE;
+ gboolean _tmp0_ = FALSE;
+#line 460 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (IS_SOURCE_SNAPSHOT (self), FALSE);
+#line 461 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = self->priv->snapshot_broken;
+#line 461 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ result = _tmp0_;
+#line 461 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return result;
+#line 3079 "DataSource.c"
+}
+
+
+SourceSnapshot* source_snapshot_construct (GType object_type) {
+ SourceSnapshot* self = NULL;
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self = (SourceSnapshot*) g_type_create_instance (object_type);
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return self;
+#line 3089 "DataSource.c"
+}
+
+
+static void source_snapshot_real_broken (SourceSnapshot* self) {
+}
+
+
+static void value_source_snapshot_init (GValue* value) {
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ value->data[0].v_pointer = NULL;
+#line 3100 "DataSource.c"
+}
+
+
+static void value_source_snapshot_free_value (GValue* value) {
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (value->data[0].v_pointer) {
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_snapshot_unref (value->data[0].v_pointer);
+#line 3109 "DataSource.c"
+ }
+}
+
+
+static void value_source_snapshot_copy_value (const GValue* src_value, GValue* dest_value) {
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (src_value->data[0].v_pointer) {
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ dest_value->data[0].v_pointer = source_snapshot_ref (src_value->data[0].v_pointer);
+#line 3119 "DataSource.c"
+ } else {
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ dest_value->data[0].v_pointer = NULL;
+#line 3123 "DataSource.c"
+ }
+}
+
+
+static gpointer value_source_snapshot_peek_pointer (const GValue* value) {
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return value->data[0].v_pointer;
+#line 3131 "DataSource.c"
+}
+
+
+static gchar* value_source_snapshot_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (collect_values[0].v_pointer) {
+#line 3138 "DataSource.c"
+ SourceSnapshot* object;
+ object = collect_values[0].v_pointer;
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (object->parent_instance.g_class == NULL) {
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+#line 3145 "DataSource.c"
+ } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+#line 3149 "DataSource.c"
+ }
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ value->data[0].v_pointer = source_snapshot_ref (object);
+#line 3153 "DataSource.c"
+ } else {
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ value->data[0].v_pointer = NULL;
+#line 3157 "DataSource.c"
+ }
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return NULL;
+#line 3161 "DataSource.c"
+}
+
+
+static gchar* value_source_snapshot_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+ SourceSnapshot** object_p;
+ object_p = collect_values[0].v_pointer;
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (!object_p) {
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+#line 3172 "DataSource.c"
+ }
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (!value->data[0].v_pointer) {
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ *object_p = NULL;
+#line 3178 "DataSource.c"
+ } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ *object_p = value->data[0].v_pointer;
+#line 3182 "DataSource.c"
+ } else {
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ *object_p = source_snapshot_ref (value->data[0].v_pointer);
+#line 3186 "DataSource.c"
+ }
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return NULL;
+#line 3190 "DataSource.c"
+}
+
+
+GParamSpec* param_spec_source_snapshot (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
+ ParamSpecSourceSnapshot* spec;
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (g_type_is_a (object_type, TYPE_SOURCE_SNAPSHOT), NULL);
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ G_PARAM_SPEC (spec)->value_type = object_type;
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return G_PARAM_SPEC (spec);
+#line 3204 "DataSource.c"
+}
+
+
+gpointer value_get_source_snapshot (const GValue* value) {
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_SOURCE_SNAPSHOT), NULL);
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return value->data[0].v_pointer;
+#line 3213 "DataSource.c"
+}
+
+
+void value_set_source_snapshot (GValue* value, gpointer v_object) {
+ SourceSnapshot* old;
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_SOURCE_SNAPSHOT));
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ old = value->data[0].v_pointer;
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (v_object) {
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_SOURCE_SNAPSHOT));
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ value->data[0].v_pointer = v_object;
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_snapshot_ref (value->data[0].v_pointer);
+#line 3233 "DataSource.c"
+ } else {
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ value->data[0].v_pointer = NULL;
+#line 3237 "DataSource.c"
+ }
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (old) {
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_snapshot_unref (old);
+#line 3243 "DataSource.c"
+ }
+}
+
+
+void value_take_source_snapshot (GValue* value, gpointer v_object) {
+ SourceSnapshot* old;
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_SOURCE_SNAPSHOT));
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ old = value->data[0].v_pointer;
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (v_object) {
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_SOURCE_SNAPSHOT));
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ value->data[0].v_pointer = v_object;
+#line 3262 "DataSource.c"
+ } else {
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ value->data[0].v_pointer = NULL;
+#line 3266 "DataSource.c"
+ }
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (old) {
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_snapshot_unref (old);
+#line 3272 "DataSource.c"
+ }
+}
+
+
+static void source_snapshot_class_init (SourceSnapshotClass * klass) {
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_snapshot_parent_class = g_type_class_peek_parent (klass);
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ((SourceSnapshotClass *) klass)->finalize = source_snapshot_finalize;
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_type_class_add_private (klass, sizeof (SourceSnapshotPrivate));
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ((SourceSnapshotClass *) klass)->notify_broken = source_snapshot_real_notify_broken;
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ((SourceSnapshotClass *) klass)->broken = source_snapshot_real_broken;
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_signal_new ("broken", TYPE_SOURCE_SNAPSHOT, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (SourceSnapshotClass, broken), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+#line 3290 "DataSource.c"
+}
+
+
+static void source_snapshot_instance_init (SourceSnapshot * self) {
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv = SOURCE_SNAPSHOT_GET_PRIVATE (self);
+#line 447 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->snapshot_broken = FALSE;
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->ref_count = 1;
+#line 3301 "DataSource.c"
+}
+
+
+static void source_snapshot_finalize (SourceSnapshot* obj) {
+ SourceSnapshot * self;
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_SOURCE_SNAPSHOT, SourceSnapshot);
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_signal_handlers_destroy (self);
+#line 3311 "DataSource.c"
+}
+
+
+GType source_snapshot_get_type (void) {
+ static volatile gsize source_snapshot_type_id__volatile = 0;
+ if (g_once_init_enter (&source_snapshot_type_id__volatile)) {
+ static const GTypeValueTable g_define_type_value_table = { value_source_snapshot_init, value_source_snapshot_free_value, value_source_snapshot_copy_value, value_source_snapshot_peek_pointer, "p", value_source_snapshot_collect_value, "p", value_source_snapshot_lcopy_value };
+ static const GTypeInfo g_define_type_info = { sizeof (SourceSnapshotClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) source_snapshot_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (SourceSnapshot), 0, (GInstanceInitFunc) source_snapshot_instance_init, &g_define_type_value_table };
+ static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
+ GType source_snapshot_type_id;
+ source_snapshot_type_id = g_type_register_fundamental (g_type_fundamental_next (), "SourceSnapshot", &g_define_type_info, &g_define_type_fundamental_info, G_TYPE_FLAG_ABSTRACT);
+ g_once_init_leave (&source_snapshot_type_id__volatile, source_snapshot_type_id);
+ }
+ return source_snapshot_type_id__volatile;
+}
+
+
+gpointer source_snapshot_ref (gpointer instance) {
+ SourceSnapshot* self;
+ self = instance;
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_atomic_int_inc (&self->ref_count);
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return instance;
+#line 3336 "DataSource.c"
+}
+
+
+void source_snapshot_unref (gpointer instance) {
+ SourceSnapshot* self;
+ self = instance;
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (g_atomic_int_dec_and_test (&self->ref_count)) {
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ SOURCE_SNAPSHOT_GET_CLASS (self)->finalize (self);
+#line 446 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_type_free_instance ((GTypeInstance *) self);
+#line 3349 "DataSource.c"
+ }
+}
+
+
+static gchar* string_strip (const gchar* self) {
+ gchar* result = NULL;
+ gchar* _result_ = NULL;
+ gchar* _tmp0_ = NULL;
+ const gchar* _tmp1_ = NULL;
+#line 1207 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ g_return_val_if_fail (self != NULL, NULL);
+#line 1208 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp0_ = g_strdup (self);
+#line 1208 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _result_ = _tmp0_;
+#line 1209 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp1_ = _result_;
+#line 1209 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ g_strstrip (_tmp1_);
+#line 1210 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ result = _result_;
+#line 1210 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ return result;
+#line 3373 "DataSource.c"
+}
+
+
+SourceBacklink* source_backlink_construct (GType object_type, const gchar* name, const gchar* value) {
+ SourceBacklink* self = NULL;
+ const gchar* _tmp0_ = NULL;
+ const gchar* _tmp1_ = NULL;
+ gboolean _tmp2_ = FALSE;
+ const gchar* _tmp3_ = NULL;
+ gchar* _tmp4_ = NULL;
+ const gchar* _tmp5_ = NULL;
+ gchar* _tmp6_ = NULL;
+#line 498 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (name != NULL, NULL);
+#line 498 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (value != NULL, NULL);
+#line 498 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self = (SourceBacklink*) g_type_create_instance (object_type);
+#line 499 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = name;
+#line 499 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = value;
+#line 499 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = source_backlink_validate_name_value (_tmp0_, _tmp1_);
+#line 499 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _vala_assert (_tmp2_, "validate_name_value(name, value)");
+#line 501 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp3_ = name;
+#line 501 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4_ = string_strip (_tmp3_);
+#line 501 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_free0 (self->priv->_name);
+#line 501 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->_name = _tmp4_;
+#line 502 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp5_ = value;
+#line 502 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp6_ = string_strip (_tmp5_);
+#line 502 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_free0 (self->priv->_value);
+#line 502 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->_value = _tmp6_;
+#line 498 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return self;
+#line 3418 "DataSource.c"
+}
+
+
+SourceBacklink* source_backlink_new (const gchar* name, const gchar* value) {
+#line 498 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return source_backlink_construct (TYPE_SOURCE_BACKLINK, name, value);
+#line 3425 "DataSource.c"
+}
+
+
+SourceBacklink* source_backlink_construct_from_source (GType object_type, DataSource* source) {
+ SourceBacklink* self = NULL;
+ DataSource* _tmp0_ = NULL;
+ gchar* _tmp1_ = NULL;
+ gchar* _tmp2_ = NULL;
+ gchar* _tmp3_ = NULL;
+ DataSource* _tmp4_ = NULL;
+ gint64 _tmp5_ = 0LL;
+ gchar* _tmp6_ = NULL;
+ gchar* _tmp7_ = NULL;
+ gchar* _tmp8_ = NULL;
+ const gchar* _tmp9_ = NULL;
+ const gchar* _tmp10_ = NULL;
+ gboolean _tmp11_ = FALSE;
+#line 505 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (IS_DATA_SOURCE (source), NULL);
+#line 505 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self = (SourceBacklink*) g_type_create_instance (object_type);
+#line 506 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = source;
+#line 506 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = data_source_get_typename (_tmp0_);
+#line 506 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = _tmp1_;
+#line 506 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp3_ = string_strip (_tmp2_);
+#line 506 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_free0 (self->priv->_name);
+#line 506 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->_name = _tmp3_;
+#line 506 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_free0 (_tmp2_);
+#line 507 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4_ = source;
+#line 507 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp5_ = data_source_get_instance_id (_tmp4_);
+#line 507 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp6_ = g_strdup_printf ("%" G_GINT64_FORMAT, _tmp5_);
+#line 507 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp7_ = _tmp6_;
+#line 507 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp8_ = string_strip (_tmp7_);
+#line 507 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_free0 (self->priv->_value);
+#line 507 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->_value = _tmp8_;
+#line 507 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_free0 (_tmp7_);
+#line 509 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp9_ = self->priv->_name;
+#line 509 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp10_ = self->priv->_value;
+#line 509 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp11_ = source_backlink_validate_name_value (_tmp9_, _tmp10_);
+#line 509 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _vala_assert (_tmp11_, "validate_name_value(_name, _value)");
+#line 505 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return self;
+#line 3487 "DataSource.c"
+}
+
+
+SourceBacklink* source_backlink_new_from_source (DataSource* source) {
+#line 505 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return source_backlink_construct_from_source (TYPE_SOURCE_BACKLINK, source);
+#line 3494 "DataSource.c"
+}
+
+
+static gboolean string_contains (const gchar* self, const gchar* needle) {
+ gboolean result = FALSE;
+ const gchar* _tmp0_ = NULL;
+ gchar* _tmp1_ = NULL;
+#line 1376 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ g_return_val_if_fail (self != NULL, FALSE);
+#line 1376 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ g_return_val_if_fail (needle != NULL, FALSE);
+#line 1377 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp0_ = needle;
+#line 1377 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp1_ = strstr ((gchar*) self, (gchar*) _tmp0_);
+#line 1377 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ result = _tmp1_ != NULL;
+#line 1377 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ return result;
+#line 3514 "DataSource.c"
+}
+
+
+static gboolean source_backlink_validate_name_value (const gchar* name, const gchar* value) {
+ gboolean result = FALSE;
+ gboolean _tmp0_ = FALSE;
+ gboolean _tmp1_ = FALSE;
+ const gchar* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+#line 512 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (name != NULL, FALSE);
+#line 512 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (value != NULL, FALSE);
+#line 513 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = name;
+#line 513 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp3_ = string_contains (_tmp2_, "=");
+#line 513 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (!_tmp3_) {
+#line 3534 "DataSource.c"
+ const gchar* _tmp4_ = NULL;
+ gboolean _tmp5_ = FALSE;
+#line 513 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4_ = name;
+#line 513 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp5_ = string_contains (_tmp4_, "|");
+#line 513 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = !_tmp5_;
+#line 3543 "DataSource.c"
+ } else {
+#line 513 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = FALSE;
+#line 3547 "DataSource.c"
+ }
+#line 513 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp1_) {
+#line 3551 "DataSource.c"
+ const gchar* _tmp6_ = NULL;
+ gboolean _tmp7_ = FALSE;
+#line 513 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp6_ = value;
+#line 513 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp7_ = string_contains (_tmp6_, "|");
+#line 513 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = !_tmp7_;
+#line 3560 "DataSource.c"
+ } else {
+#line 513 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = FALSE;
+#line 3564 "DataSource.c"
+ }
+#line 513 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ result = _tmp0_;
+#line 513 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return result;
+#line 3570 "DataSource.c"
+}
+
+
+gchar* source_backlink_to_string (SourceBacklink* self) {
+ gchar* result = NULL;
+ const gchar* _tmp0_ = NULL;
+ const gchar* _tmp1_ = NULL;
+ const gchar* _tmp2_ = NULL;
+ const gchar* _tmp3_ = NULL;
+ gchar* _tmp4_ = NULL;
+#line 516 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (IS_SOURCE_BACKLINK (self), NULL);
+#line 517 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = source_backlink_get_name (self);
+#line 517 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = _tmp0_;
+#line 517 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = source_backlink_get_value (self);
+#line 517 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp3_ = _tmp2_;
+#line 517 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4_ = g_strdup_printf ("Backlink %s=%s", _tmp1_, _tmp3_);
+#line 517 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ result = _tmp4_;
+#line 517 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return result;
+#line 3597 "DataSource.c"
+}
+
+
+guint source_backlink_hash_func (SourceBacklink* backlink) {
+ guint result = 0U;
+ GHashFunc _tmp0_ = NULL;
+ SourceBacklink* _tmp1_ = NULL;
+ const gchar* _tmp2_ = NULL;
+ guint _tmp3_ = 0U;
+ GHashFunc _tmp4_ = NULL;
+ SourceBacklink* _tmp5_ = NULL;
+ const gchar* _tmp6_ = NULL;
+ guint _tmp7_ = 0U;
+#line 520 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail ((backlink == NULL) || IS_SOURCE_BACKLINK (backlink), 0U);
+#line 521 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = g_str_hash;
+#line 521 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = backlink;
+#line 521 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = _tmp1_->priv->_name;
+#line 521 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp3_ = _tmp0_ (_tmp2_);
+#line 521 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4_ = g_str_hash;
+#line 521 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp5_ = backlink;
+#line 521 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp6_ = _tmp5_->priv->_value;
+#line 521 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp7_ = _tmp4_ (_tmp6_);
+#line 521 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ result = _tmp3_ ^ _tmp7_;
+#line 521 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return result;
+#line 3633 "DataSource.c"
+}
+
+
+gboolean source_backlink_equal_func (SourceBacklink* alink, SourceBacklink* blink) {
+ gboolean result = FALSE;
+ gboolean _tmp0_ = FALSE;
+ GEqualFunc _tmp1_ = NULL;
+ SourceBacklink* _tmp2_ = NULL;
+ const gchar* _tmp3_ = NULL;
+ SourceBacklink* _tmp4_ = NULL;
+ const gchar* _tmp5_ = NULL;
+ gboolean _tmp6_ = FALSE;
+#line 524 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail ((alink == NULL) || IS_SOURCE_BACKLINK (alink), FALSE);
+#line 524 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail ((blink == NULL) || IS_SOURCE_BACKLINK (blink), FALSE);
+#line 525 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = g_str_equal;
+#line 525 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = alink;
+#line 525 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp3_ = _tmp2_->priv->_name;
+#line 525 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4_ = blink;
+#line 525 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp5_ = _tmp4_->priv->_name;
+#line 525 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp6_ = _tmp1_ (_tmp3_, _tmp5_);
+#line 525 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp6_) {
+#line 3664 "DataSource.c"
+ GEqualFunc _tmp7_ = NULL;
+ SourceBacklink* _tmp8_ = NULL;
+ const gchar* _tmp9_ = NULL;
+ SourceBacklink* _tmp10_ = NULL;
+ const gchar* _tmp11_ = NULL;
+ gboolean _tmp12_ = FALSE;
+#line 525 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp7_ = g_str_equal;
+#line 525 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp8_ = alink;
+#line 525 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp9_ = _tmp8_->priv->_value;
+#line 525 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp10_ = blink;
+#line 525 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp11_ = _tmp10_->priv->_value;
+#line 525 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp12_ = _tmp7_ (_tmp9_, _tmp11_);
+#line 525 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = _tmp12_;
+#line 3685 "DataSource.c"
+ } else {
+#line 525 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = FALSE;
+#line 3689 "DataSource.c"
+ }
+#line 525 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ result = _tmp0_;
+#line 525 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return result;
+#line 3695 "DataSource.c"
+}
+
+
+const gchar* source_backlink_get_name (SourceBacklink* self) {
+ const gchar* result;
+ const gchar* _tmp0_ = NULL;
+#line 473 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (IS_SOURCE_BACKLINK (self), NULL);
+#line 474 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = self->priv->_name;
+#line 474 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ result = _tmp0_;
+#line 474 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return result;
+#line 3710 "DataSource.c"
+}
+
+
+const gchar* source_backlink_get_value (SourceBacklink* self) {
+ const gchar* result;
+ const gchar* _tmp0_ = NULL;
+#line 479 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (IS_SOURCE_BACKLINK (self), NULL);
+#line 480 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = self->priv->_value;
+#line 480 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ result = _tmp0_;
+#line 480 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return result;
+#line 3725 "DataSource.c"
+}
+
+
+const gchar* source_backlink_get_typename (SourceBacklink* self) {
+ const gchar* result;
+ const gchar* _tmp0_ = NULL;
+#line 486 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (IS_SOURCE_BACKLINK (self), NULL);
+#line 487 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = self->priv->_name;
+#line 487 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ result = _tmp0_;
+#line 487 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return result;
+#line 3740 "DataSource.c"
+}
+
+
+static gint64 int64_parse (const gchar* str) {
+ gint64 result = 0LL;
+ const gchar* _tmp0_ = NULL;
+ gint64 _tmp1_ = 0LL;
+#line 679 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ g_return_val_if_fail (str != NULL, 0LL);
+#line 680 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp0_ = str;
+#line 680 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp1_ = g_ascii_strtoll (_tmp0_, NULL, (guint) 0);
+#line 680 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ result = _tmp1_;
+#line 680 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ return result;
+#line 3758 "DataSource.c"
+}
+
+
+gint64 source_backlink_get_instance_id (SourceBacklink* self) {
+ gint64 result;
+ const gchar* _tmp0_ = NULL;
+ gint64 _tmp1_ = 0LL;
+#line 493 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (IS_SOURCE_BACKLINK (self), 0LL);
+#line 494 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = self->priv->_value;
+#line 494 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = int64_parse (_tmp0_);
+#line 494 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ result = _tmp1_;
+#line 494 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return result;
+#line 3776 "DataSource.c"
+}
+
+
+static void value_source_backlink_init (GValue* value) {
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ value->data[0].v_pointer = NULL;
+#line 3783 "DataSource.c"
+}
+
+
+static void value_source_backlink_free_value (GValue* value) {
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (value->data[0].v_pointer) {
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_backlink_unref (value->data[0].v_pointer);
+#line 3792 "DataSource.c"
+ }
+}
+
+
+static void value_source_backlink_copy_value (const GValue* src_value, GValue* dest_value) {
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (src_value->data[0].v_pointer) {
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ dest_value->data[0].v_pointer = source_backlink_ref (src_value->data[0].v_pointer);
+#line 3802 "DataSource.c"
+ } else {
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ dest_value->data[0].v_pointer = NULL;
+#line 3806 "DataSource.c"
+ }
+}
+
+
+static gpointer value_source_backlink_peek_pointer (const GValue* value) {
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return value->data[0].v_pointer;
+#line 3814 "DataSource.c"
+}
+
+
+static gchar* value_source_backlink_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (collect_values[0].v_pointer) {
+#line 3821 "DataSource.c"
+ SourceBacklink* object;
+ object = collect_values[0].v_pointer;
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (object->parent_instance.g_class == NULL) {
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+#line 3828 "DataSource.c"
+ } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+#line 3832 "DataSource.c"
+ }
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ value->data[0].v_pointer = source_backlink_ref (object);
+#line 3836 "DataSource.c"
+ } else {
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ value->data[0].v_pointer = NULL;
+#line 3840 "DataSource.c"
+ }
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return NULL;
+#line 3844 "DataSource.c"
+}
+
+
+static gchar* value_source_backlink_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+ SourceBacklink** object_p;
+ object_p = collect_values[0].v_pointer;
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (!object_p) {
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+#line 3855 "DataSource.c"
+ }
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (!value->data[0].v_pointer) {
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ *object_p = NULL;
+#line 3861 "DataSource.c"
+ } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ *object_p = value->data[0].v_pointer;
+#line 3865 "DataSource.c"
+ } else {
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ *object_p = source_backlink_ref (value->data[0].v_pointer);
+#line 3869 "DataSource.c"
+ }
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return NULL;
+#line 3873 "DataSource.c"
+}
+
+
+GParamSpec* param_spec_source_backlink (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
+ ParamSpecSourceBacklink* spec;
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (g_type_is_a (object_type, TYPE_SOURCE_BACKLINK), NULL);
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ G_PARAM_SPEC (spec)->value_type = object_type;
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return G_PARAM_SPEC (spec);
+#line 3887 "DataSource.c"
+}
+
+
+gpointer value_get_source_backlink (const GValue* value) {
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_SOURCE_BACKLINK), NULL);
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return value->data[0].v_pointer;
+#line 3896 "DataSource.c"
+}
+
+
+void value_set_source_backlink (GValue* value, gpointer v_object) {
+ SourceBacklink* old;
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_SOURCE_BACKLINK));
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ old = value->data[0].v_pointer;
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (v_object) {
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_SOURCE_BACKLINK));
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ value->data[0].v_pointer = v_object;
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_backlink_ref (value->data[0].v_pointer);
+#line 3916 "DataSource.c"
+ } else {
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ value->data[0].v_pointer = NULL;
+#line 3920 "DataSource.c"
+ }
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (old) {
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_backlink_unref (old);
+#line 3926 "DataSource.c"
+ }
+}
+
+
+void value_take_source_backlink (GValue* value, gpointer v_object) {
+ SourceBacklink* old;
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_SOURCE_BACKLINK));
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ old = value->data[0].v_pointer;
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (v_object) {
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_SOURCE_BACKLINK));
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ value->data[0].v_pointer = v_object;
+#line 3945 "DataSource.c"
+ } else {
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ value->data[0].v_pointer = NULL;
+#line 3949 "DataSource.c"
+ }
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (old) {
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_backlink_unref (old);
+#line 3955 "DataSource.c"
+ }
+}
+
+
+static void source_backlink_class_init (SourceBacklinkClass * klass) {
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_backlink_parent_class = g_type_class_peek_parent (klass);
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ((SourceBacklinkClass *) klass)->finalize = source_backlink_finalize;
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_type_class_add_private (klass, sizeof (SourceBacklinkPrivate));
+#line 3967 "DataSource.c"
+}
+
+
+static void source_backlink_instance_init (SourceBacklink * self) {
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv = SOURCE_BACKLINK_GET_PRIVATE (self);
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->ref_count = 1;
+#line 3976 "DataSource.c"
+}
+
+
+static void source_backlink_finalize (SourceBacklink* obj) {
+ SourceBacklink * self;
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_SOURCE_BACKLINK, SourceBacklink);
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_signal_handlers_destroy (self);
+#line 469 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_free0 (self->priv->_name);
+#line 470 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_free0 (self->priv->_value);
+#line 3990 "DataSource.c"
+}
+
+
+GType source_backlink_get_type (void) {
+ static volatile gsize source_backlink_type_id__volatile = 0;
+ if (g_once_init_enter (&source_backlink_type_id__volatile)) {
+ static const GTypeValueTable g_define_type_value_table = { value_source_backlink_init, value_source_backlink_free_value, value_source_backlink_copy_value, value_source_backlink_peek_pointer, "p", value_source_backlink_collect_value, "p", value_source_backlink_lcopy_value };
+ static const GTypeInfo g_define_type_info = { sizeof (SourceBacklinkClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) source_backlink_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (SourceBacklink), 0, (GInstanceInitFunc) source_backlink_instance_init, &g_define_type_value_table };
+ static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
+ GType source_backlink_type_id;
+ source_backlink_type_id = g_type_register_fundamental (g_type_fundamental_next (), "SourceBacklink", &g_define_type_info, &g_define_type_fundamental_info, 0);
+ g_once_init_leave (&source_backlink_type_id__volatile, source_backlink_type_id);
+ }
+ return source_backlink_type_id__volatile;
+}
+
+
+gpointer source_backlink_ref (gpointer instance) {
+ SourceBacklink* self;
+ self = instance;
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_atomic_int_inc (&self->ref_count);
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return instance;
+#line 4015 "DataSource.c"
+}
+
+
+void source_backlink_unref (gpointer instance) {
+ SourceBacklink* self;
+ self = instance;
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (g_atomic_int_dec_and_test (&self->ref_count)) {
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ SOURCE_BACKLINK_GET_CLASS (self)->finalize (self);
+#line 468 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_type_free_instance ((GTypeInstance *) self);
+#line 4028 "DataSource.c"
+ }
+}
+
+
+static void _source_proxy_on_source_added_data_collection_items_added (DataCollection* _sender, GeeIterable* added, gpointer self) {
+#line 588 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_proxy_on_source_added ((SourceProxy*) self, added);
+#line 4036 "DataSource.c"
+}
+
+
+static void _source_proxy_on_snapshot_broken_source_snapshot_broken (SourceSnapshot* _sender, gpointer self) {
+#line 577 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_proxy_on_snapshot_broken ((SourceProxy*) self);
+#line 4043 "DataSource.c"
+}
+
+
+SourceProxy* source_proxy_construct (GType object_type, DataSource* source) {
+ SourceProxy* self = NULL;
+ DataSource* _tmp0_ = NULL;
+ gint64 _tmp1_ = 0LL;
+ DataSource* _tmp2_ = NULL;
+ gchar* _tmp3_ = NULL;
+ DataSource* _tmp4_ = NULL;
+ SourceSnapshot* _tmp5_ = NULL;
+ SourceSnapshot* _tmp6_ = NULL;
+ SourceSnapshot* _tmp7_ = NULL;
+ DataSource* _tmp8_ = NULL;
+ DataSource* _tmp9_ = NULL;
+ DataCollection* _tmp10_ = NULL;
+ SourceCollection* _tmp11_ = NULL;
+ SourceCollection* _tmp12_ = NULL;
+#line 571 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (IS_DATA_SOURCE (source), NULL);
+#line 571 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self = (SourceProxy*) g_type_create_instance (object_type);
+#line 572 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = source;
+#line 572 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = data_object_get_object_id (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_DATA_OBJECT, DataObject));
+#line 572 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->object_id = _tmp1_;
+#line 573 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = source;
+#line 573 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp3_ = data_object_to_string (G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, TYPE_DATA_OBJECT, DataObject));
+#line 573 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_free0 (self->priv->source_string);
+#line 573 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->source_string = _tmp3_;
+#line 575 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4_ = source;
+#line 575 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp5_ = data_source_save_snapshot (_tmp4_);
+#line 575 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _source_snapshot_unref0 (self->priv->snapshot);
+#line 575 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->snapshot = _tmp5_;
+#line 576 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp6_ = self->priv->snapshot;
+#line 576 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _vala_assert (_tmp6_ != NULL, "snapshot != null");
+#line 577 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp7_ = self->priv->snapshot;
+#line 577 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_signal_connect (_tmp7_, "broken", (GCallback) _source_proxy_on_snapshot_broken_source_snapshot_broken, self);
+#line 579 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp8_ = source;
+#line 579 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_proxy_set_source (self, _tmp8_);
+#line 581 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp9_ = source;
+#line 581 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp10_ = data_object_get_membership (G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, TYPE_DATA_OBJECT, DataObject));
+#line 581 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _data_collection_unref0 (self->priv->membership);
+#line 581 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->membership = G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, TYPE_SOURCE_COLLECTION, SourceCollection);
+#line 582 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp11_ = self->priv->membership;
+#line 582 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _vala_assert (_tmp11_ != NULL, "membership != null");
+#line 583 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp12_ = self->priv->membership;
+#line 583 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_signal_connect (G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, TYPE_DATA_COLLECTION, DataCollection), "items-added", (GCallback) _source_proxy_on_source_added_data_collection_items_added, self);
+#line 571 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return self;
+#line 4118 "DataSource.c"
+}
+
+
+static DataSource* source_proxy_real_reconstitute (SourceProxy* self, gint64 object_id, SourceSnapshot* snapshot) {
+#line 591 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_critical ("Type `%s' does not implement abstract method `source_proxy_reconstitute'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+#line 591 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return NULL;
+#line 4127 "DataSource.c"
+}
+
+
+DataSource* source_proxy_reconstitute (SourceProxy* self, gint64 object_id, SourceSnapshot* snapshot) {
+#line 591 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (IS_SOURCE_PROXY (self), NULL);
+#line 591 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return SOURCE_PROXY_GET_CLASS (self)->reconstitute (self, object_id, snapshot);
+#line 4136 "DataSource.c"
+}
+
+
+static void source_proxy_real_notify_reconstituted (SourceProxy* self, DataSource* source) {
+ DataSource* _tmp0_ = NULL;
+#line 593 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_DATA_SOURCE (source));
+#line 594 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = source;
+#line 594 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_signal_emit_by_name (self, "reconstituted", _tmp0_);
+#line 4148 "DataSource.c"
+}
+
+
+void source_proxy_notify_reconstituted (SourceProxy* self, DataSource* source) {
+#line 593 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_SOURCE_PROXY (self));
+#line 593 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ SOURCE_PROXY_GET_CLASS (self)->notify_reconstituted (self, source);
+#line 4157 "DataSource.c"
+}
+
+
+static void source_proxy_real_notify_dehydrated (SourceProxy* self) {
+#line 598 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_signal_emit_by_name (self, "dehydrated");
+#line 4164 "DataSource.c"
+}
+
+
+void source_proxy_notify_dehydrated (SourceProxy* self) {
+#line 597 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_SOURCE_PROXY (self));
+#line 597 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ SOURCE_PROXY_GET_CLASS (self)->notify_dehydrated (self);
+#line 4173 "DataSource.c"
+}
+
+
+static void source_proxy_real_notify_broken (SourceProxy* self) {
+#line 602 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_signal_emit_by_name (self, "broken");
+#line 4180 "DataSource.c"
+}
+
+
+void source_proxy_notify_broken (SourceProxy* self) {
+#line 601 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_SOURCE_PROXY (self));
+#line 601 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ SOURCE_PROXY_GET_CLASS (self)->notify_broken (self);
+#line 4189 "DataSource.c"
+}
+
+
+static void source_proxy_on_snapshot_broken (SourceProxy* self) {
+#line 605 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_SOURCE_PROXY (self));
+#line 606 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_proxy_drop_source (self);
+#line 608 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_proxy_notify_broken (self);
+#line 4200 "DataSource.c"
+}
+
+
+static void _source_proxy_on_destroyed_data_source_destroyed (DataSource* _sender, gpointer self) {
+#line 615 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_proxy_on_destroyed ((SourceProxy*) self);
+#line 4207 "DataSource.c"
+}
+
+
+static void source_proxy_set_source (SourceProxy* self, DataSource* source) {
+ DataSource* _tmp0_ = NULL;
+ DataSource* _tmp1_ = NULL;
+ DataSource* _tmp2_ = NULL;
+#line 611 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_SOURCE_PROXY (self));
+#line 611 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_DATA_SOURCE (source));
+#line 612 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_proxy_drop_source (self);
+#line 614 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = source;
+#line 614 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = _g_object_ref0 (_tmp0_);
+#line 614 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (self->priv->source);
+#line 614 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->source = _tmp1_;
+#line 615 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = source;
+#line 615 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_signal_connect (_tmp2_, "destroyed", (GCallback) _source_proxy_on_destroyed_data_source_destroyed, self);
+#line 4233 "DataSource.c"
+}
+
+
+static void source_proxy_drop_source (SourceProxy* self) {
+ DataSource* _tmp0_ = NULL;
+ DataSource* _tmp1_ = NULL;
+ guint _tmp2_ = 0U;
+#line 618 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_SOURCE_PROXY (self));
+#line 619 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = self->priv->source;
+#line 619 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp0_ == NULL) {
+#line 620 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return;
+#line 4249 "DataSource.c"
+ }
+#line 622 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = self->priv->source;
+#line 622 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_signal_parse_name ("destroyed", TYPE_DATA_SOURCE, &_tmp2_, NULL, FALSE);
+#line 622 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_signal_handlers_disconnect_matched (_tmp1_, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp2_, 0, NULL, (GCallback) _source_proxy_on_destroyed_data_source_destroyed, self);
+#line 623 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (self->priv->source);
+#line 623 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->source = NULL;
+#line 4261 "DataSource.c"
+}
+
+
+DataSource* source_proxy_get_source (SourceProxy* self) {
+ DataSource* result = NULL;
+ SourceSnapshot* _tmp0_ = NULL;
+ gboolean _tmp1_ = FALSE;
+ DataSource* _tmp2_ = NULL;
+ DataSource* new_source = NULL;
+ gint64 _tmp5_ = 0LL;
+ SourceSnapshot* _tmp6_ = NULL;
+ DataSource* _tmp7_ = NULL;
+ DataSource* _tmp8_ = NULL;
+ DataSource* _tmp9_ = NULL;
+ gint64 _tmp12_ = 0LL;
+ DataSource* _tmp13_ = NULL;
+ gint64 _tmp14_ = 0LL;
+ DataSource* _tmp17_ = NULL;
+ gint64 _tmp18_ = 0LL;
+ gint64 _tmp19_ = 0LL;
+ SourceCollection* _tmp20_ = NULL;
+ DataSource* _tmp21_ = NULL;
+ gboolean _tmp22_ = FALSE;
+ DataSource* _tmp23_ = NULL;
+ DataSource* _tmp24_ = NULL;
+#line 626 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (IS_SOURCE_PROXY (self), NULL);
+#line 627 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = self->priv->snapshot;
+#line 627 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = source_snapshot_is_broken (_tmp0_);
+#line 627 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp1_) {
+#line 628 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ result = NULL;
+#line 628 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return result;
+#line 4299 "DataSource.c"
+ }
+#line 630 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = self->priv->source;
+#line 630 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp2_ != NULL) {
+#line 4305 "DataSource.c"
+ DataSource* _tmp3_ = NULL;
+ DataSource* _tmp4_ = NULL;
+#line 631 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp3_ = self->priv->source;
+#line 631 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4_ = _g_object_ref0 (_tmp3_);
+#line 631 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ result = _tmp4_;
+#line 631 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return result;
+#line 4316 "DataSource.c"
+ }
+#line 636 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp5_ = self->priv->object_id;
+#line 636 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp6_ = self->priv->snapshot;
+#line 636 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp7_ = source_proxy_reconstitute (self, _tmp5_, _tmp6_);
+#line 636 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ new_source = _tmp7_;
+#line 637 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp8_ = self->priv->source;
+#line 637 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp9_ = new_source;
+#line 637 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp8_ != _tmp9_) {
+#line 4332 "DataSource.c"
+ DataSource* _tmp10_ = NULL;
+ DataSource* _tmp11_ = NULL;
+#line 638 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp10_ = new_source;
+#line 638 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp11_ = _g_object_ref0 (_tmp10_);
+#line 638 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (self->priv->source);
+#line 638 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->source = _tmp11_;
+#line 4343 "DataSource.c"
+ }
+#line 639 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp12_ = self->priv->object_id;
+#line 639 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp13_ = self->priv->source;
+#line 639 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp14_ = data_object_get_object_id (G_TYPE_CHECK_INSTANCE_CAST (_tmp13_, TYPE_DATA_OBJECT, DataObject));
+#line 639 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp12_ != _tmp14_) {
+#line 4353 "DataSource.c"
+ DataSource* _tmp15_ = NULL;
+ gint64 _tmp16_ = 0LL;
+#line 640 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp15_ = new_source;
+#line 640 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp16_ = data_object_get_object_id (G_TYPE_CHECK_INSTANCE_CAST (_tmp15_, TYPE_DATA_OBJECT, DataObject));
+#line 640 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv->object_id = _tmp16_;
+#line 4362 "DataSource.c"
+ }
+#line 641 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp17_ = self->priv->source;
+#line 641 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp18_ = data_object_get_object_id (G_TYPE_CHECK_INSTANCE_CAST (_tmp17_, TYPE_DATA_OBJECT, DataObject));
+#line 641 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp19_ = self->priv->object_id;
+#line 641 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _vala_assert (_tmp18_ == _tmp19_, "source.get_object_id() == object_id");
+#line 642 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp20_ = self->priv->membership;
+#line 642 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp21_ = self->priv->source;
+#line 642 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp22_ = data_collection_contains (G_TYPE_CHECK_INSTANCE_CAST (_tmp20_, TYPE_DATA_COLLECTION, DataCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp21_, TYPE_DATA_OBJECT, DataObject));
+#line 642 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _vala_assert (_tmp22_, "membership.contains(source)");
+#line 644 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp23_ = self->priv->source;
+#line 644 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp24_ = _g_object_ref0 (_tmp23_);
+#line 644 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ result = _tmp24_;
+#line 644 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (new_source);
+#line 644 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return result;
+#line 4390 "DataSource.c"
+}
+
+
+static void source_proxy_on_destroyed (SourceProxy* self) {
+ DataSource* _tmp0_ = NULL;
+#line 647 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_SOURCE_PROXY (self));
+#line 648 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = self->priv->source;
+#line 648 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _vala_assert (_tmp0_ != NULL, "source != null");
+#line 651 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_proxy_drop_source (self);
+#line 653 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_proxy_notify_dehydrated (self);
+#line 4406 "DataSource.c"
+}
+
+
+static void source_proxy_on_source_added (SourceProxy* self, GeeIterable* added) {
+ DataSource* _tmp0_ = NULL;
+#line 656 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_SOURCE_PROXY (self));
+#line 656 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (GEE_IS_ITERABLE (added));
+#line 658 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = self->priv->source;
+#line 658 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp0_ != NULL) {
+#line 659 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return;
+#line 4422 "DataSource.c"
+ }
+ {
+ GeeIterator* _object_it = NULL;
+ GeeIterable* _tmp1_ = NULL;
+ GeeIterator* _tmp2_ = NULL;
+#line 661 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp1_ = added;
+#line 661 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp2_ = gee_iterable_iterator (_tmp1_);
+#line 661 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _object_it = _tmp2_;
+#line 661 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ while (TRUE) {
+#line 4436 "DataSource.c"
+ GeeIterator* _tmp3_ = NULL;
+ gboolean _tmp4_ = FALSE;
+ DataObject* object = NULL;
+ GeeIterator* _tmp5_ = NULL;
+ gpointer _tmp6_ = NULL;
+ DataObject* _tmp7_ = NULL;
+ gint64 _tmp8_ = 0LL;
+ gint64 _tmp9_ = 0LL;
+ DataObject* _tmp10_ = NULL;
+ DataObject* _tmp11_ = NULL;
+#line 661 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp3_ = _object_it;
+#line 661 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp4_ = gee_iterator_next (_tmp3_);
+#line 661 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (!_tmp4_) {
+#line 661 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ break;
+#line 4455 "DataSource.c"
+ }
+#line 661 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp5_ = _object_it;
+#line 661 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp6_ = gee_iterator_get (_tmp5_);
+#line 661 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ object = (DataObject*) _tmp6_;
+#line 663 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp7_ = object;
+#line 663 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp8_ = data_object_get_object_id (_tmp7_);
+#line 663 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp9_ = self->priv->object_id;
+#line 663 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (_tmp8_ != _tmp9_) {
+#line 664 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (object);
+#line 664 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ continue;
+#line 4475 "DataSource.c"
+ }
+#line 667 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp10_ = object;
+#line 667 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_proxy_set_source (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, TYPE_DATA_SOURCE, DataSource));
+#line 669 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp11_ = object;
+#line 669 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_proxy_notify_reconstituted (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp11_, TYPE_DATA_SOURCE, DataSource));
+#line 671 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (object);
+#line 671 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ break;
+#line 4489 "DataSource.c"
+ }
+#line 661 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (_object_it);
+#line 4493 "DataSource.c"
+ }
+}
+
+
+static void source_proxy_real_reconstituted (SourceProxy* self, DataSource* source) {
+#line 558 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (IS_DATA_SOURCE (source));
+#line 4501 "DataSource.c"
+}
+
+
+static void source_proxy_real_dehydrated (SourceProxy* self) {
+}
+
+
+static void source_proxy_real_broken (SourceProxy* self) {
+}
+
+
+static void value_source_proxy_init (GValue* value) {
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ value->data[0].v_pointer = NULL;
+#line 4516 "DataSource.c"
+}
+
+
+static void value_source_proxy_free_value (GValue* value) {
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (value->data[0].v_pointer) {
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_proxy_unref (value->data[0].v_pointer);
+#line 4525 "DataSource.c"
+ }
+}
+
+
+static void value_source_proxy_copy_value (const GValue* src_value, GValue* dest_value) {
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (src_value->data[0].v_pointer) {
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ dest_value->data[0].v_pointer = source_proxy_ref (src_value->data[0].v_pointer);
+#line 4535 "DataSource.c"
+ } else {
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ dest_value->data[0].v_pointer = NULL;
+#line 4539 "DataSource.c"
+ }
+}
+
+
+static gpointer value_source_proxy_peek_pointer (const GValue* value) {
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return value->data[0].v_pointer;
+#line 4547 "DataSource.c"
+}
+
+
+static gchar* value_source_proxy_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (collect_values[0].v_pointer) {
+#line 4554 "DataSource.c"
+ SourceProxy* object;
+ object = collect_values[0].v_pointer;
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (object->parent_instance.g_class == NULL) {
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+#line 4561 "DataSource.c"
+ } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+#line 4565 "DataSource.c"
+ }
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ value->data[0].v_pointer = source_proxy_ref (object);
+#line 4569 "DataSource.c"
+ } else {
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ value->data[0].v_pointer = NULL;
+#line 4573 "DataSource.c"
+ }
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return NULL;
+#line 4577 "DataSource.c"
+}
+
+
+static gchar* value_source_proxy_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+ SourceProxy** object_p;
+ object_p = collect_values[0].v_pointer;
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (!object_p) {
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+#line 4588 "DataSource.c"
+ }
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (!value->data[0].v_pointer) {
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ *object_p = NULL;
+#line 4594 "DataSource.c"
+ } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ *object_p = value->data[0].v_pointer;
+#line 4598 "DataSource.c"
+ } else {
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ *object_p = source_proxy_ref (value->data[0].v_pointer);
+#line 4602 "DataSource.c"
+ }
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return NULL;
+#line 4606 "DataSource.c"
+}
+
+
+GParamSpec* param_spec_source_proxy (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
+ ParamSpecSourceProxy* spec;
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (g_type_is_a (object_type, TYPE_SOURCE_PROXY), NULL);
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ G_PARAM_SPEC (spec)->value_type = object_type;
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return G_PARAM_SPEC (spec);
+#line 4620 "DataSource.c"
+}
+
+
+gpointer value_get_source_proxy (const GValue* value) {
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_SOURCE_PROXY), NULL);
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return value->data[0].v_pointer;
+#line 4629 "DataSource.c"
+}
+
+
+void value_set_source_proxy (GValue* value, gpointer v_object) {
+ SourceProxy* old;
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_SOURCE_PROXY));
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ old = value->data[0].v_pointer;
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (v_object) {
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_SOURCE_PROXY));
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ value->data[0].v_pointer = v_object;
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_proxy_ref (value->data[0].v_pointer);
+#line 4649 "DataSource.c"
+ } else {
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ value->data[0].v_pointer = NULL;
+#line 4653 "DataSource.c"
+ }
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (old) {
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_proxy_unref (old);
+#line 4659 "DataSource.c"
+ }
+}
+
+
+void value_take_source_proxy (GValue* value, gpointer v_object) {
+ SourceProxy* old;
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_SOURCE_PROXY));
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ old = value->data[0].v_pointer;
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (v_object) {
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_SOURCE_PROXY));
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ value->data[0].v_pointer = v_object;
+#line 4678 "DataSource.c"
+ } else {
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ value->data[0].v_pointer = NULL;
+#line 4682 "DataSource.c"
+ }
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (old) {
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_proxy_unref (old);
+#line 4688 "DataSource.c"
+ }
+}
+
+
+static void source_proxy_class_init (SourceProxyClass * klass) {
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_proxy_parent_class = g_type_class_peek_parent (klass);
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ((SourceProxyClass *) klass)->finalize = source_proxy_finalize;
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_type_class_add_private (klass, sizeof (SourceProxyPrivate));
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ((SourceProxyClass *) klass)->reconstitute = source_proxy_real_reconstitute;
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ((SourceProxyClass *) klass)->notify_reconstituted = source_proxy_real_notify_reconstituted;
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ((SourceProxyClass *) klass)->notify_dehydrated = source_proxy_real_notify_dehydrated;
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ((SourceProxyClass *) klass)->notify_broken = source_proxy_real_notify_broken;
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ((SourceProxyClass *) klass)->reconstituted = source_proxy_real_reconstituted;
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ((SourceProxyClass *) klass)->dehydrated = source_proxy_real_dehydrated;
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ ((SourceProxyClass *) klass)->broken = source_proxy_real_broken;
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_signal_new ("reconstituted", TYPE_SOURCE_PROXY, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (SourceProxyClass, reconstituted), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, TYPE_DATA_SOURCE);
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_signal_new ("dehydrated", TYPE_SOURCE_PROXY, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (SourceProxyClass, dehydrated), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_signal_new ("broken", TYPE_SOURCE_PROXY, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (SourceProxyClass, broken), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+#line 4720 "DataSource.c"
+}
+
+
+static void source_proxy_instance_init (SourceProxy * self) {
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->priv = SOURCE_PROXY_GET_PRIVATE (self);
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self->ref_count = 1;
+#line 4729 "DataSource.c"
+}
+
+
+static void source_proxy_finalize (SourceProxy* obj) {
+ SourceProxy * self;
+ SourceCollection* _tmp0_ = NULL;
+ guint _tmp1_ = 0U;
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_SOURCE_PROXY, SourceProxy);
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_signal_handlers_destroy (self);
+#line 587 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ source_proxy_drop_source (self);
+#line 588 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _tmp0_ = self->priv->membership;
+#line 588 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_signal_parse_name ("items-added", TYPE_DATA_COLLECTION, &_tmp1_, NULL, FALSE);
+#line 588 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_signal_handlers_disconnect_matched (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_DATA_COLLECTION, DataCollection), G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp1_, 0, NULL, (GCallback) _source_proxy_on_source_added_data_collection_items_added, self);
+#line 551 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_free0 (self->priv->source_string);
+#line 552 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _g_object_unref0 (self->priv->source);
+#line 553 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _source_snapshot_unref0 (self->priv->snapshot);
+#line 554 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ _data_collection_unref0 (self->priv->membership);
+#line 4757 "DataSource.c"
+}
+
+
+GType source_proxy_get_type (void) {
+ static volatile gsize source_proxy_type_id__volatile = 0;
+ if (g_once_init_enter (&source_proxy_type_id__volatile)) {
+ static const GTypeValueTable g_define_type_value_table = { value_source_proxy_init, value_source_proxy_free_value, value_source_proxy_copy_value, value_source_proxy_peek_pointer, "p", value_source_proxy_collect_value, "p", value_source_proxy_lcopy_value };
+ static const GTypeInfo g_define_type_info = { sizeof (SourceProxyClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) source_proxy_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (SourceProxy), 0, (GInstanceInitFunc) source_proxy_instance_init, &g_define_type_value_table };
+ static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
+ GType source_proxy_type_id;
+ source_proxy_type_id = g_type_register_fundamental (g_type_fundamental_next (), "SourceProxy", &g_define_type_info, &g_define_type_fundamental_info, G_TYPE_FLAG_ABSTRACT);
+ g_once_init_leave (&source_proxy_type_id__volatile, source_proxy_type_id);
+ }
+ return source_proxy_type_id__volatile;
+}
+
+
+gpointer source_proxy_ref (gpointer instance) {
+ SourceProxy* self;
+ self = instance;
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_atomic_int_inc (&self->ref_count);
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return instance;
+#line 4782 "DataSource.c"
+}
+
+
+void source_proxy_unref (gpointer instance) {
+ SourceProxy* self;
+ self = instance;
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (g_atomic_int_dec_and_test (&self->ref_count)) {
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ SOURCE_PROXY_GET_CLASS (self)->finalize (self);
+#line 549 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_type_free_instance ((GTypeInstance *) self);
+#line 4795 "DataSource.c"
+ }
+}
+
+
+SourceProxy* proxyable_get_proxy (Proxyable* self) {
+#line 677 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ g_return_val_if_fail (IS_PROXYABLE (self), NULL);
+#line 677 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ return PROXYABLE_GET_INTERFACE (self)->get_proxy (self);
+#line 4805 "DataSource.c"
+}
+
+
+static void proxyable_base_init (ProxyableIface * iface) {
+#line 676 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ static gboolean initialized = FALSE;
+#line 676 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ if (!initialized) {
+#line 676 "/home/jens/Source/shotwell/src/core/DataSource.vala"
+ initialized = TRUE;
+#line 4816 "DataSource.c"
+ }
+}
+
+
+GType proxyable_get_type (void) {
+ static volatile gsize proxyable_type_id__volatile = 0;
+ if (g_once_init_enter (&proxyable_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (ProxyableIface), (GBaseInitFunc) proxyable_base_init, (GBaseFinalizeFunc) NULL, (GClassInitFunc) NULL, (GClassFinalizeFunc) NULL, NULL, 0, 0, (GInstanceInitFunc) NULL, NULL };
+ GType proxyable_type_id;
+ proxyable_type_id = g_type_register_static (G_TYPE_INTERFACE, "Proxyable", &g_define_type_info, 0);
+ g_type_interface_add_prerequisite (proxyable_type_id, G_TYPE_OBJECT);
+ g_once_init_leave (&proxyable_type_id__volatile, proxyable_type_id);
+ }
+ return proxyable_type_id__volatile;
+}
+
+
+static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func) {
+ if ((array != NULL) && (destroy_func != NULL)) {
+ int i;
+ for (i = 0; i < array_length; i = i + 1) {
+ if (((gpointer*) array)[i] != NULL) {
+ destroy_func (((gpointer*) array)[i]);
+ }
+ }
+ }
+}
+
+
+static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func) {
+ _vala_array_destroy (array, array_length, destroy_func);
+ g_free (array);
+}
+
+
+static gint _vala_array_length (gpointer array) {
+ int length;
+ length = 0;
+ if (array) {
+ while (((gpointer*) array)[length]) {
+ length++;
+ }
+ }
+ return length;
+}
+
+
+
diff --git a/src/core/DataSourceTypes.c b/src/core/DataSourceTypes.c
new file mode 100644
index 0000000..0abd6e8
--- /dev/null
+++ b/src/core/DataSourceTypes.c
@@ -0,0 +1,1127 @@
+/* DataSourceTypes.c generated by valac 0.32.1, the Vala compiler
+ * generated from DataSourceTypes.vala, do not modify */
+
+/* Copyright 2016 Software Freedom Conservancy Inc.
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later). See the COPYING file in this distribution.
+ */
+/**/
+/* Media sources*/
+/**/
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gdk-pixbuf/gdk-pixbuf.h>
+#include <gio/gio.h>
+#include <time.h>
+#include <gee.h>
+
+
+#define TYPE_DATA_OBJECT (data_object_get_type ())
+#define DATA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_OBJECT, DataObject))
+#define DATA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_OBJECT, DataObjectClass))
+#define IS_DATA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_OBJECT))
+#define IS_DATA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_OBJECT))
+#define DATA_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_OBJECT, DataObjectClass))
+
+typedef struct _DataObject DataObject;
+typedef struct _DataObjectClass DataObjectClass;
+typedef struct _DataObjectPrivate DataObjectPrivate;
+
+#define TYPE_ALTERATION (alteration_get_type ())
+#define ALTERATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ALTERATION, Alteration))
+#define ALTERATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ALTERATION, AlterationClass))
+#define IS_ALTERATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ALTERATION))
+#define IS_ALTERATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ALTERATION))
+#define ALTERATION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ALTERATION, AlterationClass))
+
+typedef struct _Alteration Alteration;
+typedef struct _AlterationClass AlterationClass;
+
+#define TYPE_DATA_COLLECTION (data_collection_get_type ())
+#define DATA_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_COLLECTION, DataCollection))
+#define DATA_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_COLLECTION, DataCollectionClass))
+#define IS_DATA_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_COLLECTION))
+#define IS_DATA_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_COLLECTION))
+#define DATA_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_COLLECTION, DataCollectionClass))
+
+typedef struct _DataCollection DataCollection;
+typedef struct _DataCollectionClass DataCollectionClass;
+
+#define TYPE_DATA_SOURCE (data_source_get_type ())
+#define DATA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_SOURCE, DataSource))
+#define DATA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_SOURCE, DataSourceClass))
+#define IS_DATA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_SOURCE))
+#define IS_DATA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_SOURCE))
+#define DATA_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_SOURCE, DataSourceClass))
+
+typedef struct _DataSource DataSource;
+typedef struct _DataSourceClass DataSourceClass;
+typedef struct _DataSourcePrivate DataSourcePrivate;
+
+#define TYPE_SOURCE_HOLDING_TANK (source_holding_tank_get_type ())
+#define SOURCE_HOLDING_TANK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SOURCE_HOLDING_TANK, SourceHoldingTank))
+#define SOURCE_HOLDING_TANK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SOURCE_HOLDING_TANK, SourceHoldingTankClass))
+#define IS_SOURCE_HOLDING_TANK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SOURCE_HOLDING_TANK))
+#define IS_SOURCE_HOLDING_TANK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SOURCE_HOLDING_TANK))
+#define SOURCE_HOLDING_TANK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SOURCE_HOLDING_TANK, SourceHoldingTankClass))
+
+typedef struct _SourceHoldingTank SourceHoldingTank;
+typedef struct _SourceHoldingTankClass SourceHoldingTankClass;
+
+#define TYPE_SOURCE_COLLECTION (source_collection_get_type ())
+#define SOURCE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SOURCE_COLLECTION, SourceCollection))
+#define SOURCE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SOURCE_COLLECTION, SourceCollectionClass))
+#define IS_SOURCE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SOURCE_COLLECTION))
+#define IS_SOURCE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SOURCE_COLLECTION))
+#define SOURCE_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SOURCE_COLLECTION, SourceCollectionClass))
+
+typedef struct _SourceCollection SourceCollection;
+typedef struct _SourceCollectionClass SourceCollectionClass;
+
+#define TYPE_SOURCE_SNAPSHOT (source_snapshot_get_type ())
+#define SOURCE_SNAPSHOT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SOURCE_SNAPSHOT, SourceSnapshot))
+#define SOURCE_SNAPSHOT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SOURCE_SNAPSHOT, SourceSnapshotClass))
+#define IS_SOURCE_SNAPSHOT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SOURCE_SNAPSHOT))
+#define IS_SOURCE_SNAPSHOT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SOURCE_SNAPSHOT))
+#define SOURCE_SNAPSHOT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SOURCE_SNAPSHOT, SourceSnapshotClass))
+
+typedef struct _SourceSnapshot SourceSnapshot;
+typedef struct _SourceSnapshotClass SourceSnapshotClass;
+
+#define TYPE_THUMBNAIL_SOURCE (thumbnail_source_get_type ())
+#define THUMBNAIL_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_THUMBNAIL_SOURCE, ThumbnailSource))
+#define THUMBNAIL_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_THUMBNAIL_SOURCE, ThumbnailSourceClass))
+#define IS_THUMBNAIL_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_THUMBNAIL_SOURCE))
+#define IS_THUMBNAIL_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_THUMBNAIL_SOURCE))
+#define THUMBNAIL_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_THUMBNAIL_SOURCE, ThumbnailSourceClass))
+
+typedef struct _ThumbnailSource ThumbnailSource;
+typedef struct _ThumbnailSourceClass ThumbnailSourceClass;
+typedef struct _ThumbnailSourcePrivate ThumbnailSourcePrivate;
+
+#define TYPE_PHOTO_FILE_FORMAT (photo_file_format_get_type ())
+
+#define TYPE_DATA_VIEW (data_view_get_type ())
+#define DATA_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_VIEW, DataView))
+#define DATA_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_VIEW, DataViewClass))
+#define IS_DATA_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_VIEW))
+#define IS_DATA_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_VIEW))
+#define DATA_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_VIEW, DataViewClass))
+
+typedef struct _DataView DataView;
+typedef struct _DataViewClass DataViewClass;
+
+#define TYPE_THUMBNAIL_VIEW (thumbnail_view_get_type ())
+#define THUMBNAIL_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_THUMBNAIL_VIEW, ThumbnailView))
+#define THUMBNAIL_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_THUMBNAIL_VIEW, ThumbnailViewClass))
+#define IS_THUMBNAIL_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_THUMBNAIL_VIEW))
+#define IS_THUMBNAIL_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_THUMBNAIL_VIEW))
+#define THUMBNAIL_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_THUMBNAIL_VIEW, ThumbnailViewClass))
+
+typedef struct _ThumbnailView ThumbnailView;
+typedef struct _ThumbnailViewClass ThumbnailViewClass;
+
+#define TYPE_INDEXABLE (indexable_get_type ())
+#define INDEXABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_INDEXABLE, Indexable))
+#define IS_INDEXABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_INDEXABLE))
+#define INDEXABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TYPE_INDEXABLE, IndexableIface))
+
+typedef struct _Indexable Indexable;
+typedef struct _IndexableIface IndexableIface;
+
+#define TYPE_MEDIA_SOURCE (media_source_get_type ())
+#define MEDIA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_MEDIA_SOURCE, MediaSource))
+#define MEDIA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_MEDIA_SOURCE, MediaSourceClass))
+#define IS_MEDIA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_MEDIA_SOURCE))
+#define IS_MEDIA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_MEDIA_SOURCE))
+#define MEDIA_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_MEDIA_SOURCE, MediaSourceClass))
+
+typedef struct _MediaSource MediaSource;
+typedef struct _MediaSourceClass MediaSourceClass;
+typedef struct _MediaSourcePrivate MediaSourcePrivate;
+
+#define TYPE_EVENT_ID (event_id_get_type ())
+typedef struct _EventID EventID;
+
+#define TYPE_BACKING_FILE_STATE (backing_file_state_get_type ())
+#define BACKING_FILE_STATE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_BACKING_FILE_STATE, BackingFileState))
+#define BACKING_FILE_STATE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_BACKING_FILE_STATE, BackingFileStateClass))
+#define IS_BACKING_FILE_STATE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_BACKING_FILE_STATE))
+#define IS_BACKING_FILE_STATE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_BACKING_FILE_STATE))
+#define BACKING_FILE_STATE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_BACKING_FILE_STATE, BackingFileStateClass))
+
+typedef struct _BackingFileState BackingFileState;
+typedef struct _BackingFileStateClass BackingFileStateClass;
+
+#define TYPE_RATING (rating_get_type ())
+
+#define PHOTO_TYPE_EXCEPTION (photo_exception_get_type ())
+
+#define TYPE_DIMENSIONS (dimensions_get_type ())
+typedef struct _Dimensions Dimensions;
+
+#define TYPE_SCALING (scaling_get_type ())
+
+#define TYPE_SCALE_CONSTRAINT (scale_constraint_get_type ())
+typedef struct _Scaling Scaling;
+
+#define TYPE_IMPORT_ID (import_id_get_type ())
+typedef struct _ImportID ImportID;
+
+#define TYPE_PHOTO_SOURCE (photo_source_get_type ())
+#define PHOTO_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_PHOTO_SOURCE, PhotoSource))
+#define PHOTO_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_PHOTO_SOURCE, PhotoSourceClass))
+#define IS_PHOTO_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_PHOTO_SOURCE))
+#define IS_PHOTO_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_PHOTO_SOURCE))
+#define PHOTO_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_PHOTO_SOURCE, PhotoSourceClass))
+
+typedef struct _PhotoSource PhotoSource;
+typedef struct _PhotoSourceClass PhotoSourceClass;
+typedef struct _PhotoSourcePrivate PhotoSourcePrivate;
+
+#define TYPE_MEDIA_METADATA (media_metadata_get_type ())
+#define MEDIA_METADATA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_MEDIA_METADATA, MediaMetadata))
+#define MEDIA_METADATA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_MEDIA_METADATA, MediaMetadataClass))
+#define IS_MEDIA_METADATA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_MEDIA_METADATA))
+#define IS_MEDIA_METADATA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_MEDIA_METADATA))
+#define MEDIA_METADATA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_MEDIA_METADATA, MediaMetadataClass))
+
+typedef struct _MediaMetadata MediaMetadata;
+typedef struct _MediaMetadataClass MediaMetadataClass;
+
+#define TYPE_PHOTO_METADATA (photo_metadata_get_type ())
+#define PHOTO_METADATA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_PHOTO_METADATA, PhotoMetadata))
+#define PHOTO_METADATA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_PHOTO_METADATA, PhotoMetadataClass))
+#define IS_PHOTO_METADATA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_PHOTO_METADATA))
+#define IS_PHOTO_METADATA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_PHOTO_METADATA))
+#define PHOTO_METADATA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_PHOTO_METADATA, PhotoMetadataClass))
+
+typedef struct _PhotoMetadata PhotoMetadata;
+typedef struct _PhotoMetadataClass PhotoMetadataClass;
+
+#define TYPE_VIDEO_SOURCE (video_source_get_type ())
+#define VIDEO_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_VIDEO_SOURCE, VideoSource))
+#define VIDEO_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_VIDEO_SOURCE, VideoSourceClass))
+#define IS_VIDEO_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_VIDEO_SOURCE))
+#define IS_VIDEO_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_VIDEO_SOURCE))
+#define VIDEO_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_VIDEO_SOURCE, VideoSourceClass))
+
+typedef struct _VideoSource VideoSource;
+typedef struct _VideoSourceClass VideoSourceClass;
+typedef struct _VideoSourcePrivate VideoSourcePrivate;
+
+#define TYPE_EVENT_SOURCE (event_source_get_type ())
+#define EVENT_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_EVENT_SOURCE, EventSource))
+#define EVENT_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_EVENT_SOURCE, EventSourceClass))
+#define IS_EVENT_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_EVENT_SOURCE))
+#define IS_EVENT_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_EVENT_SOURCE))
+#define EVENT_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_EVENT_SOURCE, EventSourceClass))
+
+typedef struct _EventSource EventSource;
+typedef struct _EventSourceClass EventSourceClass;
+typedef struct _EventSourcePrivate EventSourcePrivate;
+
+#define TYPE_CONTAINER_SOURCE (container_source_get_type ())
+#define CONTAINER_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_CONTAINER_SOURCE, ContainerSource))
+#define IS_CONTAINER_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_CONTAINER_SOURCE))
+#define CONTAINER_SOURCE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TYPE_CONTAINER_SOURCE, ContainerSourceIface))
+
+typedef struct _ContainerSource ContainerSource;
+typedef struct _ContainerSourceIface ContainerSourceIface;
+
+#define TYPE_SOURCE_BACKLINK (source_backlink_get_type ())
+#define SOURCE_BACKLINK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SOURCE_BACKLINK, SourceBacklink))
+#define SOURCE_BACKLINK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SOURCE_BACKLINK, SourceBacklinkClass))
+#define IS_SOURCE_BACKLINK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SOURCE_BACKLINK))
+#define IS_SOURCE_BACKLINK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SOURCE_BACKLINK))
+#define SOURCE_BACKLINK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SOURCE_BACKLINK, SourceBacklinkClass))
+
+typedef struct _SourceBacklink SourceBacklink;
+typedef struct _SourceBacklinkClass SourceBacklinkClass;
+
+struct _DataObject {
+ GObject parent_instance;
+ DataObjectPrivate * priv;
+};
+
+struct _DataObjectClass {
+ GObjectClass parent_class;
+ void (*notify_altered) (DataObject* self, Alteration* alteration);
+ void (*notify_membership_changed) (DataObject* self, DataCollection* collection);
+ void (*notify_collection_property_set) (DataObject* self, const gchar* name, GValue* old, GValue* val);
+ void (*notify_collection_property_cleared) (DataObject* self, const gchar* name);
+ gchar* (*get_name) (DataObject* self);
+ gchar* (*to_string) (DataObject* self);
+};
+
+struct _DataSource {
+ DataObject parent_instance;
+ DataSourcePrivate * priv;
+};
+
+struct _DataSourceClass {
+ DataObjectClass parent_class;
+ void (*notify_held_in_tank) (DataSource* self, SourceHoldingTank* holding_tank);
+ void (*notify_unlinking) (DataSource* self, SourceCollection* collection);
+ void (*notify_unlinked) (DataSource* self);
+ void (*notify_relinking) (DataSource* self, SourceCollection* collection);
+ void (*notify_relinked) (DataSource* self);
+ gchar* (*get_typename) (DataSource* self);
+ gint64 (*get_instance_id) (DataSource* self);
+ gchar* (*get_source_id) (DataSource* self);
+ void (*commit_backlinks) (DataSource* self, SourceCollection* sources, const gchar* dehydrated);
+ SourceSnapshot* (*save_snapshot) (DataSource* self);
+ gboolean (*internal_delete_backing) (DataSource* self, GError** error);
+ gboolean (*equals) (DataSource* self, DataSource* source);
+ void (*destroy) (DataSource* self);
+ void (*unlinked) (DataSource* self, SourceCollection* sources);
+ void (*relinked) (DataSource* self, SourceCollection* sources);
+ void (*destroyed) (DataSource* self);
+};
+
+typedef enum {
+ PHOTO_FILE_FORMAT_JFIF,
+ PHOTO_FILE_FORMAT_RAW,
+ PHOTO_FILE_FORMAT_PNG,
+ PHOTO_FILE_FORMAT_TIFF,
+ PHOTO_FILE_FORMAT_BMP,
+ PHOTO_FILE_FORMAT_UNKNOWN
+} PhotoFileFormat;
+
+struct _ThumbnailSource {
+ DataSource parent_instance;
+ ThumbnailSourcePrivate * priv;
+};
+
+struct _ThumbnailSourceClass {
+ DataSourceClass parent_class;
+ void (*notify_thumbnail_altered) (ThumbnailSource* self);
+ GdkPixbuf* (*get_thumbnail) (ThumbnailSource* self, gint scale, GError** error);
+ GdkPixbuf* (*create_thumbnail) (ThumbnailSource* self, gint scale, GError** error);
+ gchar* (*get_representative_id) (ThumbnailSource* self);
+ PhotoFileFormat (*get_preferred_thumbnail_format) (ThumbnailSource* self);
+ void (*thumbnail_altered) (ThumbnailSource* self);
+};
+
+typedef void (*DataSourceContactSubscriber) (DataView* view, void* user_data);
+struct _IndexableIface {
+ GTypeInterface parent_iface;
+ const gchar* (*get_indexable_keywords) (Indexable* self);
+};
+
+struct _EventID {
+ gint64 id;
+};
+
+typedef enum {
+ RATING_REJECTED = -1,
+ RATING_UNRATED = 0,
+ RATING_ONE = 1,
+ RATING_TWO = 2,
+ RATING_THREE = 3,
+ RATING_FOUR = 4,
+ RATING_FIVE = 5
+} Rating;
+
+typedef enum {
+ PHOTO_EXCEPTION_NONE = 0,
+ PHOTO_EXCEPTION_ORIENTATION = 1 << 0,
+ PHOTO_EXCEPTION_CROP = 1 << 1,
+ PHOTO_EXCEPTION_REDEYE = 1 << 2,
+ PHOTO_EXCEPTION_ADJUST = 1 << 3,
+ PHOTO_EXCEPTION_STRAIGHTEN = 1 << 4,
+ PHOTO_EXCEPTION_ALL = 0xFFFFFFFFLL
+} PhotoException;
+
+struct _Dimensions {
+ gint width;
+ gint height;
+};
+
+typedef enum {
+ SCALE_CONSTRAINT_ORIGINAL,
+ SCALE_CONSTRAINT_DIMENSIONS,
+ SCALE_CONSTRAINT_WIDTH,
+ SCALE_CONSTRAINT_HEIGHT,
+ SCALE_CONSTRAINT_FILL_VIEWPORT
+} ScaleConstraint;
+
+struct _Scaling {
+ ScaleConstraint constraint;
+ gint scale;
+ Dimensions viewport;
+ gboolean scale_up;
+};
+
+struct _ImportID {
+ gint64 id;
+};
+
+struct _MediaSource {
+ ThumbnailSource parent_instance;
+ MediaSourcePrivate * priv;
+};
+
+struct _MediaSourceClass {
+ ThumbnailSourceClass parent_class;
+ void (*notify_master_replaced) (MediaSource* self, GFile* old_file, GFile* new_file);
+ gboolean (*set_event_id) (MediaSource* self, EventID* id);
+ gchar* (*get_basename) (MediaSource* self);
+ GFile* (*get_file) (MediaSource* self);
+ GFile* (*get_master_file) (MediaSource* self);
+ guint64 (*get_master_filesize) (MediaSource* self);
+ guint64 (*get_filesize) (MediaSource* self);
+ time_t (*get_timestamp) (MediaSource* self);
+ BackingFileState** (*get_backing_files_state) (MediaSource* self, int* result_length1);
+ gchar* (*get_title) (MediaSource* self);
+ gchar* (*get_comment) (MediaSource* self);
+ void (*set_title) (MediaSource* self, const gchar* title);
+ gboolean (*set_comment) (MediaSource* self, const gchar* comment);
+ Rating (*get_rating) (MediaSource* self);
+ void (*set_rating) (MediaSource* self, Rating rating);
+ void (*increase_rating) (MediaSource* self);
+ void (*decrease_rating) (MediaSource* self);
+ void (*get_dimensions) (MediaSource* self, PhotoException disallowed_steps, Dimensions* result);
+ GdkPixbuf* (*get_preview_pixbuf) (MediaSource* self, Scaling* scaling, GError** error);
+ gboolean (*is_trashed) (MediaSource* self);
+ void (*trash) (MediaSource* self);
+ void (*untrash) (MediaSource* self);
+ gboolean (*is_offline) (MediaSource* self);
+ void (*mark_offline) (MediaSource* self);
+ void (*mark_online) (MediaSource* self);
+ gchar* (*get_master_md5) (MediaSource* self);
+ void (*get_event_id) (MediaSource* self, EventID* result);
+ time_t (*get_exposure_time) (MediaSource* self);
+ void (*get_import_id) (MediaSource* self, ImportID* result);
+ void (*master_replaced) (MediaSource* self, GFile* old_file, GFile* new_file);
+};
+
+struct _PhotoSource {
+ MediaSource parent_instance;
+ PhotoSourcePrivate * priv;
+};
+
+struct _PhotoSourceClass {
+ MediaSourceClass parent_class;
+ PhotoMetadata* (*get_metadata) (PhotoSource* self);
+ GdkPixbuf* (*get_pixbuf) (PhotoSource* self, Scaling* scaling, GError** error);
+};
+
+struct _VideoSource {
+ MediaSource parent_instance;
+ VideoSourcePrivate * priv;
+};
+
+struct _VideoSourceClass {
+ MediaSourceClass parent_class;
+};
+
+struct _EventSource {
+ ThumbnailSource parent_instance;
+ EventSourcePrivate * priv;
+};
+
+struct _EventSourceClass {
+ ThumbnailSourceClass parent_class;
+ time_t (*get_start_time) (EventSource* self);
+ time_t (*get_end_time) (EventSource* self);
+ guint64 (*get_total_filesize) (EventSource* self);
+ gint (*get_media_count) (EventSource* self);
+ GeeCollection* (*get_media) (EventSource* self);
+ gchar* (*get_comment) (EventSource* self);
+ gboolean (*set_comment) (EventSource* self, const gchar* comment);
+};
+
+struct _ContainerSourceIface {
+ GTypeInterface parent_iface;
+ gboolean (*has_links) (ContainerSource* self);
+ SourceBacklink* (*get_backlink) (ContainerSource* self);
+ void (*break_link) (ContainerSource* self, DataSource* source);
+ void (*break_link_many) (ContainerSource* self, GeeCollection* sources);
+ void (*establish_link) (ContainerSource* self, DataSource* source);
+ void (*establish_link_many) (ContainerSource* self, GeeCollection* sources);
+};
+
+
+static gpointer thumbnail_source_parent_class = NULL;
+static gpointer photo_source_parent_class = NULL;
+static gpointer video_source_parent_class = NULL;
+static gpointer event_source_parent_class = NULL;
+
+GType data_object_get_type (void) G_GNUC_CONST;
+gpointer alteration_ref (gpointer instance);
+void alteration_unref (gpointer instance);
+GParamSpec* param_spec_alteration (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_alteration (GValue* value, gpointer v_object);
+void value_take_alteration (GValue* value, gpointer v_object);
+gpointer value_get_alteration (const GValue* value);
+GType alteration_get_type (void) G_GNUC_CONST;
+gpointer data_collection_ref (gpointer instance);
+void data_collection_unref (gpointer instance);
+GParamSpec* param_spec_data_collection (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_data_collection (GValue* value, gpointer v_object);
+void value_take_data_collection (GValue* value, gpointer v_object);
+gpointer value_get_data_collection (const GValue* value);
+GType data_collection_get_type (void) G_GNUC_CONST;
+GType data_source_get_type (void) G_GNUC_CONST;
+gpointer source_holding_tank_ref (gpointer instance);
+void source_holding_tank_unref (gpointer instance);
+GParamSpec* param_spec_source_holding_tank (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_source_holding_tank (GValue* value, gpointer v_object);
+void value_take_source_holding_tank (GValue* value, gpointer v_object);
+gpointer value_get_source_holding_tank (const GValue* value);
+GType source_holding_tank_get_type (void) G_GNUC_CONST;
+GType source_collection_get_type (void) G_GNUC_CONST;
+gpointer source_snapshot_ref (gpointer instance);
+void source_snapshot_unref (gpointer instance);
+GParamSpec* param_spec_source_snapshot (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_source_snapshot (GValue* value, gpointer v_object);
+void value_take_source_snapshot (GValue* value, gpointer v_object);
+gpointer value_get_source_snapshot (const GValue* value);
+GType source_snapshot_get_type (void) G_GNUC_CONST;
+GType thumbnail_source_get_type (void) G_GNUC_CONST;
+GType photo_file_format_get_type (void) G_GNUC_CONST;
+enum {
+ THUMBNAIL_SOURCE_DUMMY_PROPERTY
+};
+ThumbnailSource* thumbnail_source_construct (GType object_type, gint64 object_id);
+DataSource* data_source_construct (GType object_type, gint64 object_id);
+void thumbnail_source_notify_thumbnail_altered (ThumbnailSource* self);
+static void thumbnail_source_real_notify_thumbnail_altered (ThumbnailSource* self);
+GType data_view_get_type (void) G_GNUC_CONST;
+void data_source_contact_subscribers (DataSource* self, DataSourceContactSubscriber contact_subscriber, void* contact_subscriber_target);
+static void thumbnail_source_subscriber_thumbnail_altered (ThumbnailSource* self, DataView* view);
+static void _thumbnail_source_subscriber_thumbnail_altered_data_source_contact_subscriber (DataView* view, gpointer self);
+GType thumbnail_view_get_type (void) G_GNUC_CONST;
+void thumbnail_view_notify_thumbnail_altered (ThumbnailView* self);
+GdkPixbuf* thumbnail_source_get_thumbnail (ThumbnailSource* self, gint scale, GError** error);
+static GdkPixbuf* thumbnail_source_real_get_thumbnail (ThumbnailSource* self, gint scale, GError** error);
+GdkPixbuf* thumbnail_source_create_thumbnail (ThumbnailSource* self, gint scale, GError** error);
+static GdkPixbuf* thumbnail_source_real_create_thumbnail (ThumbnailSource* self, gint scale, GError** error);
+gchar* thumbnail_source_get_representative_id (ThumbnailSource* self);
+static gchar* thumbnail_source_real_get_representative_id (ThumbnailSource* self);
+gchar* data_source_get_source_id (DataSource* self);
+PhotoFileFormat thumbnail_source_get_preferred_thumbnail_format (ThumbnailSource* self);
+static PhotoFileFormat thumbnail_source_real_get_preferred_thumbnail_format (ThumbnailSource* self);
+static void thumbnail_source_real_thumbnail_altered (ThumbnailSource* self);
+GType indexable_get_type (void) G_GNUC_CONST;
+GType media_source_get_type (void) G_GNUC_CONST;
+GType event_id_get_type (void) G_GNUC_CONST;
+EventID* event_id_dup (const EventID* self);
+void event_id_free (EventID* self);
+gpointer backing_file_state_ref (gpointer instance);
+void backing_file_state_unref (gpointer instance);
+GParamSpec* param_spec_backing_file_state (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_backing_file_state (GValue* value, gpointer v_object);
+void value_take_backing_file_state (GValue* value, gpointer v_object);
+gpointer value_get_backing_file_state (const GValue* value);
+GType backing_file_state_get_type (void) G_GNUC_CONST;
+GType rating_get_type (void) G_GNUC_CONST;
+GType photo_exception_get_type (void) G_GNUC_CONST;
+GType dimensions_get_type (void) G_GNUC_CONST;
+Dimensions* dimensions_dup (const Dimensions* self);
+void dimensions_free (Dimensions* self);
+GType scaling_get_type (void) G_GNUC_CONST;
+GType scale_constraint_get_type (void) G_GNUC_CONST;
+Scaling* scaling_dup (const Scaling* self);
+void scaling_free (Scaling* self);
+GType import_id_get_type (void) G_GNUC_CONST;
+ImportID* import_id_dup (const ImportID* self);
+void import_id_free (ImportID* self);
+GType photo_source_get_type (void) G_GNUC_CONST;
+gpointer media_metadata_ref (gpointer instance);
+void media_metadata_unref (gpointer instance);
+GParamSpec* param_spec_media_metadata (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_media_metadata (GValue* value, gpointer v_object);
+void value_take_media_metadata (GValue* value, gpointer v_object);
+gpointer value_get_media_metadata (const GValue* value);
+GType media_metadata_get_type (void) G_GNUC_CONST;
+GType photo_metadata_get_type (void) G_GNUC_CONST;
+enum {
+ PHOTO_SOURCE_DUMMY_PROPERTY
+};
+PhotoSource* photo_source_construct (GType object_type, gint64 object_id);
+MediaSource* media_source_construct (GType object_type, gint64 object_id);
+PhotoMetadata* photo_source_get_metadata (PhotoSource* self);
+static PhotoMetadata* photo_source_real_get_metadata (PhotoSource* self);
+GdkPixbuf* photo_source_get_pixbuf (PhotoSource* self, Scaling* scaling, GError** error);
+static GdkPixbuf* photo_source_real_get_pixbuf (PhotoSource* self, Scaling* scaling, GError** error);
+GType video_source_get_type (void) G_GNUC_CONST;
+enum {
+ VIDEO_SOURCE_DUMMY_PROPERTY
+};
+VideoSource* video_source_construct (GType object_type);
+#define DATA_OBJECT_INVALID_OBJECT_ID ((gint64) -1)
+GType event_source_get_type (void) G_GNUC_CONST;
+enum {
+ EVENT_SOURCE_DUMMY_PROPERTY
+};
+EventSource* event_source_construct (GType object_type, gint64 object_id);
+time_t event_source_get_start_time (EventSource* self);
+static time_t event_source_real_get_start_time (EventSource* self);
+time_t event_source_get_end_time (EventSource* self);
+static time_t event_source_real_get_end_time (EventSource* self);
+guint64 event_source_get_total_filesize (EventSource* self);
+static guint64 event_source_real_get_total_filesize (EventSource* self);
+gint event_source_get_media_count (EventSource* self);
+static gint event_source_real_get_media_count (EventSource* self);
+GeeCollection* event_source_get_media (EventSource* self);
+static GeeCollection* event_source_real_get_media (EventSource* self);
+gchar* event_source_get_comment (EventSource* self);
+static gchar* event_source_real_get_comment (EventSource* self);
+gboolean event_source_set_comment (EventSource* self, const gchar* comment);
+static gboolean event_source_real_set_comment (EventSource* self, const gchar* comment);
+gpointer source_backlink_ref (gpointer instance);
+void source_backlink_unref (gpointer instance);
+GParamSpec* param_spec_source_backlink (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_source_backlink (GValue* value, gpointer v_object);
+void value_take_source_backlink (GValue* value, gpointer v_object);
+gpointer value_get_source_backlink (const GValue* value);
+GType source_backlink_get_type (void) G_GNUC_CONST;
+GType container_source_get_type (void) G_GNUC_CONST;
+gboolean container_source_has_links (ContainerSource* self);
+SourceBacklink* container_source_get_backlink (ContainerSource* self);
+void container_source_break_link (ContainerSource* self, DataSource* source);
+void container_source_break_link_many (ContainerSource* self, GeeCollection* sources);
+void container_source_establish_link (ContainerSource* self, DataSource* source);
+void container_source_establish_link_many (ContainerSource* self, GeeCollection* sources);
+
+
+ThumbnailSource* thumbnail_source_construct (GType object_type, gint64 object_id) {
+ ThumbnailSource * self = NULL;
+ gint64 _tmp0_ = 0LL;
+#line 16 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ _tmp0_ = object_id;
+#line 16 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ self = (ThumbnailSource*) data_source_construct (object_type, _tmp0_);
+#line 15 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return self;
+#line 604 "DataSourceTypes.c"
+}
+
+
+static void _thumbnail_source_subscriber_thumbnail_altered_data_source_contact_subscriber (DataView* view, gpointer self) {
+#line 24 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ thumbnail_source_subscriber_thumbnail_altered ((ThumbnailSource*) self, view);
+#line 611 "DataSourceTypes.c"
+}
+
+
+static void thumbnail_source_real_notify_thumbnail_altered (ThumbnailSource* self) {
+#line 21 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_signal_emit_by_name (self, "thumbnail-altered");
+#line 24 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ data_source_contact_subscribers (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_SOURCE, DataSource), _thumbnail_source_subscriber_thumbnail_altered_data_source_contact_subscriber, self);
+#line 620 "DataSourceTypes.c"
+}
+
+
+void thumbnail_source_notify_thumbnail_altered (ThumbnailSource* self) {
+#line 19 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_return_if_fail (IS_THUMBNAIL_SOURCE (self));
+#line 19 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ THUMBNAIL_SOURCE_GET_CLASS (self)->notify_thumbnail_altered (self);
+#line 629 "DataSourceTypes.c"
+}
+
+
+static void thumbnail_source_subscriber_thumbnail_altered (ThumbnailSource* self, DataView* view) {
+ DataView* _tmp0_ = NULL;
+#line 27 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_return_if_fail (IS_THUMBNAIL_SOURCE (self));
+#line 27 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_return_if_fail (IS_DATA_VIEW (view));
+#line 28 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ _tmp0_ = view;
+#line 28 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ thumbnail_view_notify_thumbnail_altered (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_THUMBNAIL_VIEW, ThumbnailView));
+#line 643 "DataSourceTypes.c"
+}
+
+
+static GdkPixbuf* thumbnail_source_real_get_thumbnail (ThumbnailSource* self, gint scale, GError** error) {
+#line 31 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_critical ("Type `%s' does not implement abstract method `thumbnail_source_get_thumbnail'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+#line 31 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return NULL;
+#line 652 "DataSourceTypes.c"
+}
+
+
+GdkPixbuf* thumbnail_source_get_thumbnail (ThumbnailSource* self, gint scale, GError** error) {
+#line 31 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_return_val_if_fail (IS_THUMBNAIL_SOURCE (self), NULL);
+#line 31 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return THUMBNAIL_SOURCE_GET_CLASS (self)->get_thumbnail (self, scale, error);
+#line 661 "DataSourceTypes.c"
+}
+
+
+static GdkPixbuf* thumbnail_source_real_create_thumbnail (ThumbnailSource* self, gint scale, GError** error) {
+#line 35 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_critical ("Type `%s' does not implement abstract method `thumbnail_source_create_thumbnail'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+#line 35 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return NULL;
+#line 670 "DataSourceTypes.c"
+}
+
+
+GdkPixbuf* thumbnail_source_create_thumbnail (ThumbnailSource* self, gint scale, GError** error) {
+#line 35 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_return_val_if_fail (IS_THUMBNAIL_SOURCE (self), NULL);
+#line 35 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return THUMBNAIL_SOURCE_GET_CLASS (self)->create_thumbnail (self, scale, error);
+#line 679 "DataSourceTypes.c"
+}
+
+
+static gchar* thumbnail_source_real_get_representative_id (ThumbnailSource* self) {
+ gchar* result = NULL;
+ gchar* _tmp0_ = NULL;
+#line 47 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ _tmp0_ = data_source_get_source_id (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_SOURCE, DataSource));
+#line 47 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ result = _tmp0_;
+#line 47 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return result;
+#line 692 "DataSourceTypes.c"
+}
+
+
+gchar* thumbnail_source_get_representative_id (ThumbnailSource* self) {
+#line 46 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_return_val_if_fail (IS_THUMBNAIL_SOURCE (self), NULL);
+#line 46 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return THUMBNAIL_SOURCE_GET_CLASS (self)->get_representative_id (self);
+#line 701 "DataSourceTypes.c"
+}
+
+
+static PhotoFileFormat thumbnail_source_real_get_preferred_thumbnail_format (ThumbnailSource* self) {
+#line 50 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_critical ("Type `%s' does not implement abstract method `thumbnail_source_get_preferred_thumbnail_format'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+#line 50 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return 0;
+#line 710 "DataSourceTypes.c"
+}
+
+
+PhotoFileFormat thumbnail_source_get_preferred_thumbnail_format (ThumbnailSource* self) {
+#line 50 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_return_val_if_fail (IS_THUMBNAIL_SOURCE (self), 0);
+#line 50 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return THUMBNAIL_SOURCE_GET_CLASS (self)->get_preferred_thumbnail_format (self);
+#line 719 "DataSourceTypes.c"
+}
+
+
+static void thumbnail_source_real_thumbnail_altered (ThumbnailSource* self) {
+}
+
+
+static void thumbnail_source_class_init (ThumbnailSourceClass * klass) {
+#line 11 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ thumbnail_source_parent_class = g_type_class_peek_parent (klass);
+#line 11 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ ((ThumbnailSourceClass *) klass)->notify_thumbnail_altered = thumbnail_source_real_notify_thumbnail_altered;
+#line 11 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ ((ThumbnailSourceClass *) klass)->get_thumbnail = thumbnail_source_real_get_thumbnail;
+#line 11 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ ((ThumbnailSourceClass *) klass)->create_thumbnail = thumbnail_source_real_create_thumbnail;
+#line 11 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ ((ThumbnailSourceClass *) klass)->get_representative_id = thumbnail_source_real_get_representative_id;
+#line 11 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ ((ThumbnailSourceClass *) klass)->get_preferred_thumbnail_format = thumbnail_source_real_get_preferred_thumbnail_format;
+#line 11 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ ((ThumbnailSourceClass *) klass)->thumbnail_altered = thumbnail_source_real_thumbnail_altered;
+#line 11 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_signal_new ("thumbnail_altered", TYPE_THUMBNAIL_SOURCE, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ThumbnailSourceClass, thumbnail_altered), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+#line 744 "DataSourceTypes.c"
+}
+
+
+static void thumbnail_source_instance_init (ThumbnailSource * self) {
+}
+
+
+GType thumbnail_source_get_type (void) {
+ static volatile gsize thumbnail_source_type_id__volatile = 0;
+ if (g_once_init_enter (&thumbnail_source_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (ThumbnailSourceClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) thumbnail_source_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ThumbnailSource), 0, (GInstanceInitFunc) thumbnail_source_instance_init, NULL };
+ GType thumbnail_source_type_id;
+ thumbnail_source_type_id = g_type_register_static (TYPE_DATA_SOURCE, "ThumbnailSource", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
+ g_once_init_leave (&thumbnail_source_type_id__volatile, thumbnail_source_type_id);
+ }
+ return thumbnail_source_type_id__volatile;
+}
+
+
+PhotoSource* photo_source_construct (GType object_type, gint64 object_id) {
+ PhotoSource * self = NULL;
+ gint64 _tmp0_ = 0LL;
+#line 55 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ _tmp0_ = object_id;
+#line 55 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ self = (PhotoSource*) media_source_construct (object_type, _tmp0_);
+#line 54 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return self;
+#line 773 "DataSourceTypes.c"
+}
+
+
+static PhotoMetadata* photo_source_real_get_metadata (PhotoSource* self) {
+#line 58 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_critical ("Type `%s' does not implement abstract method `photo_source_get_metadata'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+#line 58 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return NULL;
+#line 782 "DataSourceTypes.c"
+}
+
+
+PhotoMetadata* photo_source_get_metadata (PhotoSource* self) {
+#line 58 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_return_val_if_fail (IS_PHOTO_SOURCE (self), NULL);
+#line 58 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return PHOTO_SOURCE_GET_CLASS (self)->get_metadata (self);
+#line 791 "DataSourceTypes.c"
+}
+
+
+static GdkPixbuf* photo_source_real_get_pixbuf (PhotoSource* self, Scaling* scaling, GError** error) {
+#line 60 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_critical ("Type `%s' does not implement abstract method `photo_source_get_pixbuf'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+#line 60 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return NULL;
+#line 800 "DataSourceTypes.c"
+}
+
+
+GdkPixbuf* photo_source_get_pixbuf (PhotoSource* self, Scaling* scaling, GError** error) {
+#line 60 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_return_val_if_fail (IS_PHOTO_SOURCE (self), NULL);
+#line 60 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return PHOTO_SOURCE_GET_CLASS (self)->get_pixbuf (self, scaling, error);
+#line 809 "DataSourceTypes.c"
+}
+
+
+static void photo_source_class_init (PhotoSourceClass * klass) {
+#line 53 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ photo_source_parent_class = g_type_class_peek_parent (klass);
+#line 53 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ ((PhotoSourceClass *) klass)->get_metadata = photo_source_real_get_metadata;
+#line 53 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ ((PhotoSourceClass *) klass)->get_pixbuf = photo_source_real_get_pixbuf;
+#line 820 "DataSourceTypes.c"
+}
+
+
+static void photo_source_instance_init (PhotoSource * self) {
+}
+
+
+GType photo_source_get_type (void) {
+ static volatile gsize photo_source_type_id__volatile = 0;
+ if (g_once_init_enter (&photo_source_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (PhotoSourceClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) photo_source_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (PhotoSource), 0, (GInstanceInitFunc) photo_source_instance_init, NULL };
+ GType photo_source_type_id;
+ photo_source_type_id = g_type_register_static (TYPE_MEDIA_SOURCE, "PhotoSource", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
+ g_once_init_leave (&photo_source_type_id__volatile, photo_source_type_id);
+ }
+ return photo_source_type_id__volatile;
+}
+
+
+VideoSource* video_source_construct (GType object_type) {
+ VideoSource * self = NULL;
+#line 63 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ self = (VideoSource*) media_source_construct (object_type, DATA_OBJECT_INVALID_OBJECT_ID);
+#line 63 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return self;
+#line 846 "DataSourceTypes.c"
+}
+
+
+static void video_source_class_init (VideoSourceClass * klass) {
+#line 63 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ video_source_parent_class = g_type_class_peek_parent (klass);
+#line 853 "DataSourceTypes.c"
+}
+
+
+static void video_source_instance_init (VideoSource * self) {
+}
+
+
+GType video_source_get_type (void) {
+ static volatile gsize video_source_type_id__volatile = 0;
+ if (g_once_init_enter (&video_source_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (VideoSourceClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) video_source_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (VideoSource), 0, (GInstanceInitFunc) video_source_instance_init, NULL };
+ GType video_source_type_id;
+ video_source_type_id = g_type_register_static (TYPE_MEDIA_SOURCE, "VideoSource", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
+ g_once_init_leave (&video_source_type_id__volatile, video_source_type_id);
+ }
+ return video_source_type_id__volatile;
+}
+
+
+EventSource* event_source_construct (GType object_type, gint64 object_id) {
+ EventSource * self = NULL;
+ gint64 _tmp0_ = 0LL;
+#line 72 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ _tmp0_ = object_id;
+#line 72 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ self = (EventSource*) thumbnail_source_construct (object_type, _tmp0_);
+#line 71 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return self;
+#line 882 "DataSourceTypes.c"
+}
+
+
+static time_t event_source_real_get_start_time (EventSource* self) {
+#line 75 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_critical ("Type `%s' does not implement abstract method `event_source_get_start_time'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+#line 75 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return 0;
+#line 891 "DataSourceTypes.c"
+}
+
+
+time_t event_source_get_start_time (EventSource* self) {
+#line 75 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_return_val_if_fail (IS_EVENT_SOURCE (self), 0);
+#line 75 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return EVENT_SOURCE_GET_CLASS (self)->get_start_time (self);
+#line 900 "DataSourceTypes.c"
+}
+
+
+static time_t event_source_real_get_end_time (EventSource* self) {
+#line 77 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_critical ("Type `%s' does not implement abstract method `event_source_get_end_time'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+#line 77 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return 0;
+#line 909 "DataSourceTypes.c"
+}
+
+
+time_t event_source_get_end_time (EventSource* self) {
+#line 77 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_return_val_if_fail (IS_EVENT_SOURCE (self), 0);
+#line 77 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return EVENT_SOURCE_GET_CLASS (self)->get_end_time (self);
+#line 918 "DataSourceTypes.c"
+}
+
+
+static guint64 event_source_real_get_total_filesize (EventSource* self) {
+#line 79 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_critical ("Type `%s' does not implement abstract method `event_source_get_total_filesize'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+#line 79 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return 0ULL;
+#line 927 "DataSourceTypes.c"
+}
+
+
+guint64 event_source_get_total_filesize (EventSource* self) {
+#line 79 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_return_val_if_fail (IS_EVENT_SOURCE (self), 0ULL);
+#line 79 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return EVENT_SOURCE_GET_CLASS (self)->get_total_filesize (self);
+#line 936 "DataSourceTypes.c"
+}
+
+
+static gint event_source_real_get_media_count (EventSource* self) {
+#line 81 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_critical ("Type `%s' does not implement abstract method `event_source_get_media_count'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+#line 81 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return 0;
+#line 945 "DataSourceTypes.c"
+}
+
+
+gint event_source_get_media_count (EventSource* self) {
+#line 81 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_return_val_if_fail (IS_EVENT_SOURCE (self), 0);
+#line 81 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return EVENT_SOURCE_GET_CLASS (self)->get_media_count (self);
+#line 954 "DataSourceTypes.c"
+}
+
+
+static GeeCollection* event_source_real_get_media (EventSource* self) {
+#line 83 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_critical ("Type `%s' does not implement abstract method `event_source_get_media'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+#line 83 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return NULL;
+#line 963 "DataSourceTypes.c"
+}
+
+
+GeeCollection* event_source_get_media (EventSource* self) {
+#line 83 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_return_val_if_fail (IS_EVENT_SOURCE (self), NULL);
+#line 83 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return EVENT_SOURCE_GET_CLASS (self)->get_media (self);
+#line 972 "DataSourceTypes.c"
+}
+
+
+static gchar* event_source_real_get_comment (EventSource* self) {
+#line 85 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_critical ("Type `%s' does not implement abstract method `event_source_get_comment'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+#line 85 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return NULL;
+#line 981 "DataSourceTypes.c"
+}
+
+
+gchar* event_source_get_comment (EventSource* self) {
+#line 85 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_return_val_if_fail (IS_EVENT_SOURCE (self), NULL);
+#line 85 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return EVENT_SOURCE_GET_CLASS (self)->get_comment (self);
+#line 990 "DataSourceTypes.c"
+}
+
+
+static gboolean event_source_real_set_comment (EventSource* self, const gchar* comment) {
+#line 87 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_critical ("Type `%s' does not implement abstract method `event_source_set_comment'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+#line 87 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return FALSE;
+#line 999 "DataSourceTypes.c"
+}
+
+
+gboolean event_source_set_comment (EventSource* self, const gchar* comment) {
+#line 87 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_return_val_if_fail (IS_EVENT_SOURCE (self), FALSE);
+#line 87 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return EVENT_SOURCE_GET_CLASS (self)->set_comment (self, comment);
+#line 1008 "DataSourceTypes.c"
+}
+
+
+static void event_source_class_init (EventSourceClass * klass) {
+#line 70 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ event_source_parent_class = g_type_class_peek_parent (klass);
+#line 70 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ ((EventSourceClass *) klass)->get_start_time = event_source_real_get_start_time;
+#line 70 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ ((EventSourceClass *) klass)->get_end_time = event_source_real_get_end_time;
+#line 70 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ ((EventSourceClass *) klass)->get_total_filesize = event_source_real_get_total_filesize;
+#line 70 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ ((EventSourceClass *) klass)->get_media_count = event_source_real_get_media_count;
+#line 70 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ ((EventSourceClass *) klass)->get_media = event_source_real_get_media;
+#line 70 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ ((EventSourceClass *) klass)->get_comment = event_source_real_get_comment;
+#line 70 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ ((EventSourceClass *) klass)->set_comment = event_source_real_set_comment;
+#line 1029 "DataSourceTypes.c"
+}
+
+
+static void event_source_instance_init (EventSource * self) {
+}
+
+
+GType event_source_get_type (void) {
+ static volatile gsize event_source_type_id__volatile = 0;
+ if (g_once_init_enter (&event_source_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (EventSourceClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) event_source_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (EventSource), 0, (GInstanceInitFunc) event_source_instance_init, NULL };
+ GType event_source_type_id;
+ event_source_type_id = g_type_register_static (TYPE_THUMBNAIL_SOURCE, "EventSource", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
+ g_once_init_leave (&event_source_type_id__volatile, event_source_type_id);
+ }
+ return event_source_type_id__volatile;
+}
+
+
+gboolean container_source_has_links (ContainerSource* self) {
+#line 95 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_return_val_if_fail (IS_CONTAINER_SOURCE (self), FALSE);
+#line 95 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return CONTAINER_SOURCE_GET_INTERFACE (self)->has_links (self);
+#line 1054 "DataSourceTypes.c"
+}
+
+
+SourceBacklink* container_source_get_backlink (ContainerSource* self) {
+#line 97 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_return_val_if_fail (IS_CONTAINER_SOURCE (self), NULL);
+#line 97 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ return CONTAINER_SOURCE_GET_INTERFACE (self)->get_backlink (self);
+#line 1063 "DataSourceTypes.c"
+}
+
+
+void container_source_break_link (ContainerSource* self, DataSource* source) {
+#line 99 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_return_if_fail (IS_CONTAINER_SOURCE (self));
+#line 99 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ CONTAINER_SOURCE_GET_INTERFACE (self)->break_link (self, source);
+#line 1072 "DataSourceTypes.c"
+}
+
+
+void container_source_break_link_many (ContainerSource* self, GeeCollection* sources) {
+#line 101 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_return_if_fail (IS_CONTAINER_SOURCE (self));
+#line 101 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ CONTAINER_SOURCE_GET_INTERFACE (self)->break_link_many (self, sources);
+#line 1081 "DataSourceTypes.c"
+}
+
+
+void container_source_establish_link (ContainerSource* self, DataSource* source) {
+#line 103 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_return_if_fail (IS_CONTAINER_SOURCE (self));
+#line 103 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ CONTAINER_SOURCE_GET_INTERFACE (self)->establish_link (self, source);
+#line 1090 "DataSourceTypes.c"
+}
+
+
+void container_source_establish_link_many (ContainerSource* self, GeeCollection* sources) {
+#line 105 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ g_return_if_fail (IS_CONTAINER_SOURCE (self));
+#line 105 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ CONTAINER_SOURCE_GET_INTERFACE (self)->establish_link_many (self, sources);
+#line 1099 "DataSourceTypes.c"
+}
+
+
+static void container_source_base_init (ContainerSourceIface * iface) {
+#line 94 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ static gboolean initialized = FALSE;
+#line 94 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ if (!initialized) {
+#line 94 "/home/jens/Source/shotwell/src/core/DataSourceTypes.vala"
+ initialized = TRUE;
+#line 1110 "DataSourceTypes.c"
+ }
+}
+
+
+GType container_source_get_type (void) {
+ static volatile gsize container_source_type_id__volatile = 0;
+ if (g_once_init_enter (&container_source_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (ContainerSourceIface), (GBaseInitFunc) container_source_base_init, (GBaseFinalizeFunc) NULL, (GClassInitFunc) NULL, (GClassFinalizeFunc) NULL, NULL, 0, 0, (GInstanceInitFunc) NULL, NULL };
+ GType container_source_type_id;
+ container_source_type_id = g_type_register_static (G_TYPE_INTERFACE, "ContainerSource", &g_define_type_info, 0);
+ g_type_interface_add_prerequisite (container_source_type_id, TYPE_DATA_SOURCE);
+ g_once_init_leave (&container_source_type_id__volatile, container_source_type_id);
+ }
+ return container_source_type_id__volatile;
+}
+
+
+
diff --git a/src/core/DataView.c b/src/core/DataView.c
new file mode 100644
index 0000000..40153fc
--- /dev/null
+++ b/src/core/DataView.c
@@ -0,0 +1,681 @@
+/* DataView.c generated by valac 0.32.1, the Vala compiler
+ * generated from DataView.vala, do not modify */
+
+/* Copyright 2016 Software Freedom Conservancy Inc.
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later). See the COPYING file in this distribution.
+ */
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+#define TYPE_DATA_OBJECT (data_object_get_type ())
+#define DATA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_OBJECT, DataObject))
+#define DATA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_OBJECT, DataObjectClass))
+#define IS_DATA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_OBJECT))
+#define IS_DATA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_OBJECT))
+#define DATA_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_OBJECT, DataObjectClass))
+
+typedef struct _DataObject DataObject;
+typedef struct _DataObjectClass DataObjectClass;
+typedef struct _DataObjectPrivate DataObjectPrivate;
+
+#define TYPE_ALTERATION (alteration_get_type ())
+#define ALTERATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ALTERATION, Alteration))
+#define ALTERATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ALTERATION, AlterationClass))
+#define IS_ALTERATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ALTERATION))
+#define IS_ALTERATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ALTERATION))
+#define ALTERATION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ALTERATION, AlterationClass))
+
+typedef struct _Alteration Alteration;
+typedef struct _AlterationClass AlterationClass;
+
+#define TYPE_DATA_COLLECTION (data_collection_get_type ())
+#define DATA_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_COLLECTION, DataCollection))
+#define DATA_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_COLLECTION, DataCollectionClass))
+#define IS_DATA_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_COLLECTION))
+#define IS_DATA_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_COLLECTION))
+#define DATA_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_COLLECTION, DataCollectionClass))
+
+typedef struct _DataCollection DataCollection;
+typedef struct _DataCollectionClass DataCollectionClass;
+
+#define TYPE_DATA_VIEW (data_view_get_type ())
+#define DATA_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_VIEW, DataView))
+#define DATA_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_VIEW, DataViewClass))
+#define IS_DATA_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_VIEW))
+#define IS_DATA_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_VIEW))
+#define DATA_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_VIEW, DataViewClass))
+
+typedef struct _DataView DataView;
+typedef struct _DataViewClass DataViewClass;
+typedef struct _DataViewPrivate DataViewPrivate;
+
+#define TYPE_DATA_SOURCE (data_source_get_type ())
+#define DATA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_SOURCE, DataSource))
+#define DATA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_SOURCE, DataSourceClass))
+#define IS_DATA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_SOURCE))
+#define IS_DATA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_SOURCE))
+#define DATA_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_SOURCE, DataSourceClass))
+
+typedef struct _DataSource DataSource;
+typedef struct _DataSourceClass DataSourceClass;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _g_free0(var) (var = (g_free (var), NULL))
+
+#define TYPE_VIEW_COLLECTION (view_collection_get_type ())
+#define VIEW_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_VIEW_COLLECTION, ViewCollection))
+#define VIEW_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_VIEW_COLLECTION, ViewCollectionClass))
+#define IS_VIEW_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_VIEW_COLLECTION))
+#define IS_VIEW_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_VIEW_COLLECTION))
+#define VIEW_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_VIEW_COLLECTION, ViewCollectionClass))
+
+typedef struct _ViewCollection ViewCollection;
+typedef struct _ViewCollectionClass ViewCollectionClass;
+#define _data_collection_unref0(var) ((var == NULL) ? NULL : (var = (data_collection_unref (var), NULL)))
+
+struct _DataObject {
+ GObject parent_instance;
+ DataObjectPrivate * priv;
+};
+
+struct _DataObjectClass {
+ GObjectClass parent_class;
+ void (*notify_altered) (DataObject* self, Alteration* alteration);
+ void (*notify_membership_changed) (DataObject* self, DataCollection* collection);
+ void (*notify_collection_property_set) (DataObject* self, const gchar* name, GValue* old, GValue* val);
+ void (*notify_collection_property_cleared) (DataObject* self, const gchar* name);
+ gchar* (*get_name) (DataObject* self);
+ gchar* (*to_string) (DataObject* self);
+};
+
+struct _DataView {
+ DataObject parent_instance;
+ DataViewPrivate * priv;
+};
+
+struct _DataViewClass {
+ DataObjectClass parent_class;
+ void (*notify_view_altered) (DataView* self);
+ void (*notify_geometry_altered) (DataView* self);
+ void (*notify_unsubscribed) (DataView* self, DataSource* source);
+ void (*state_changed) (DataView* self, gboolean selected);
+ void (*visibility_changed) (DataView* self, gboolean visible);
+ void (*view_altered) (DataView* self);
+ void (*geometry_altered) (DataView* self);
+ void (*unsubscribed) (DataView* self, DataSource* source);
+};
+
+struct _DataViewPrivate {
+ DataSource* source;
+ gboolean selected;
+ gboolean visible;
+};
+
+
+static gpointer data_view_parent_class = NULL;
+
+GType data_object_get_type (void) G_GNUC_CONST;
+gpointer alteration_ref (gpointer instance);
+void alteration_unref (gpointer instance);
+GParamSpec* param_spec_alteration (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_alteration (GValue* value, gpointer v_object);
+void value_take_alteration (GValue* value, gpointer v_object);
+gpointer value_get_alteration (const GValue* value);
+GType alteration_get_type (void) G_GNUC_CONST;
+gpointer data_collection_ref (gpointer instance);
+void data_collection_unref (gpointer instance);
+GParamSpec* param_spec_data_collection (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_data_collection (GValue* value, gpointer v_object);
+void value_take_data_collection (GValue* value, gpointer v_object);
+gpointer value_get_data_collection (const GValue* value);
+GType data_collection_get_type (void) G_GNUC_CONST;
+GType data_view_get_type (void) G_GNUC_CONST;
+GType data_source_get_type (void) G_GNUC_CONST;
+#define DATA_VIEW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_DATA_VIEW, DataViewPrivate))
+enum {
+ DATA_VIEW_DUMMY_PROPERTY
+};
+void data_source_internal_unsubscribe (DataSource* self, DataView* view);
+DataView* data_view_new (DataSource* source);
+DataView* data_view_construct (GType object_type, DataSource* source);
+#define DATA_OBJECT_INVALID_OBJECT_ID ((gint64) -1)
+DataObject* data_object_construct (GType object_type, gint64 object_id);
+void data_source_internal_subscribe (DataSource* self, DataView* view);
+static gchar* data_view_real_get_name (DataObject* base);
+gchar* data_object_get_name (DataObject* self);
+static gchar* data_view_real_to_string (DataObject* base);
+gchar* data_object_to_string (DataObject* self);
+DataSource* data_view_get_source (DataView* self);
+gboolean data_view_is_selected (DataView* self);
+void data_view_internal_set_selected (DataView* self, gboolean selected);
+gboolean data_view_internal_toggle (DataView* self);
+gboolean data_view_is_visible (DataView* self);
+void data_view_internal_set_visible (DataView* self, gboolean visible);
+void data_view_notify_view_altered (DataView* self);
+static void data_view_real_notify_view_altered (DataView* self);
+GType view_collection_get_type (void) G_GNUC_CONST;
+DataCollection* data_object_get_membership (DataObject* self);
+gboolean data_collection_are_notifications_frozen (DataCollection* self);
+void view_collection_internal_notify_view_altered (ViewCollection* self, DataView* view);
+void data_view_notify_geometry_altered (DataView* self);
+static void data_view_real_notify_geometry_altered (DataView* self);
+void view_collection_internal_notify_geometry_altered (ViewCollection* self, DataView* view);
+void data_view_notify_unsubscribed (DataView* self, DataSource* source);
+static void data_view_real_notify_unsubscribed (DataView* self, DataSource* source);
+static void data_view_real_state_changed (DataView* self, gboolean selected);
+static void data_view_real_visibility_changed (DataView* self, gboolean visible);
+static void data_view_real_view_altered (DataView* self);
+static void data_view_real_geometry_altered (DataView* self);
+static void data_view_real_unsubscribed (DataView* self, DataSource* source);
+static void data_view_finalize (GObject* obj);
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+#line 33 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ return self ? g_object_ref (self) : NULL;
+#line 182 "DataView.c"
+}
+
+
+DataView* data_view_construct (GType object_type, DataSource* source) {
+ DataView * self = NULL;
+ DataSource* _tmp0_ = NULL;
+ DataSource* _tmp1_ = NULL;
+ DataSource* _tmp2_ = NULL;
+#line 32 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ g_return_val_if_fail (IS_DATA_SOURCE (source), NULL);
+#line 32 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ self = (DataView*) data_object_construct (object_type, DATA_OBJECT_INVALID_OBJECT_ID);
+#line 33 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp0_ = source;
+#line 33 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp1_ = _g_object_ref0 (_tmp0_);
+#line 33 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _g_object_unref0 (self->priv->source);
+#line 33 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ self->priv->source = _tmp1_;
+#line 37 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp2_ = source;
+#line 37 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ data_source_internal_subscribe (_tmp2_, self);
+#line 32 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ return self;
+#line 209 "DataView.c"
+}
+
+
+DataView* data_view_new (DataSource* source) {
+#line 32 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ return data_view_construct (TYPE_DATA_VIEW, source);
+#line 216 "DataView.c"
+}
+
+
+static gchar* data_view_real_get_name (DataObject* base) {
+ DataView * self;
+ gchar* result = NULL;
+ DataSource* _tmp0_ = NULL;
+ gchar* _tmp1_ = NULL;
+ gchar* _tmp2_ = NULL;
+ gchar* _tmp3_ = NULL;
+ gchar* _tmp4_ = NULL;
+#line 47 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_DATA_VIEW, DataView);
+#line 48 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp0_ = self->priv->source;
+#line 48 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp1_ = data_object_get_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_DATA_OBJECT, DataObject));
+#line 48 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp2_ = _tmp1_;
+#line 48 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp3_ = g_strdup_printf ("View of %s", _tmp2_);
+#line 48 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp4_ = _tmp3_;
+#line 48 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _g_free0 (_tmp2_);
+#line 48 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ result = _tmp4_;
+#line 48 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ return result;
+#line 246 "DataView.c"
+}
+
+
+static gchar* data_view_real_to_string (DataObject* base) {
+ DataView * self;
+ gchar* result = NULL;
+ gchar* _tmp0_ = NULL;
+ gchar* _tmp1_ = NULL;
+ DataSource* _tmp2_ = NULL;
+ gchar* _tmp3_ = NULL;
+ gchar* _tmp4_ = NULL;
+ gchar* _tmp5_ = NULL;
+ gchar* _tmp6_ = NULL;
+#line 51 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_DATA_VIEW, DataView);
+#line 52 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp0_ = data_object_get_name (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_OBJECT, DataObject));
+#line 52 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp1_ = _tmp0_;
+#line 52 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp2_ = self->priv->source;
+#line 52 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp3_ = data_object_to_string (G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, TYPE_DATA_OBJECT, DataObject));
+#line 52 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp4_ = _tmp3_;
+#line 52 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp5_ = g_strdup_printf ("DataView %s [DataSource %s]", _tmp1_, _tmp4_);
+#line 52 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp6_ = _tmp5_;
+#line 52 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _g_free0 (_tmp4_);
+#line 52 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _g_free0 (_tmp1_);
+#line 52 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ result = _tmp6_;
+#line 52 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ return result;
+#line 284 "DataView.c"
+}
+
+
+DataSource* data_view_get_source (DataView* self) {
+ DataSource* result = NULL;
+ DataSource* _tmp0_ = NULL;
+ DataSource* _tmp1_ = NULL;
+#line 55 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ g_return_val_if_fail (IS_DATA_VIEW (self), NULL);
+#line 56 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp0_ = self->priv->source;
+#line 56 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp1_ = _g_object_ref0 (_tmp0_);
+#line 56 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ result = _tmp1_;
+#line 56 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ return result;
+#line 302 "DataView.c"
+}
+
+
+gboolean data_view_is_selected (DataView* self) {
+ gboolean result = FALSE;
+ gboolean _tmp0_ = FALSE;
+#line 59 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ g_return_val_if_fail (IS_DATA_VIEW (self), FALSE);
+#line 60 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp0_ = self->priv->selected;
+#line 60 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ result = _tmp0_;
+#line 60 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ return result;
+#line 317 "DataView.c"
+}
+
+
+void data_view_internal_set_selected (DataView* self, gboolean selected) {
+ gboolean _tmp0_ = FALSE;
+ gboolean _tmp1_ = FALSE;
+ gboolean _tmp2_ = FALSE;
+ gboolean _tmp3_ = FALSE;
+#line 64 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ g_return_if_fail (IS_DATA_VIEW (self));
+#line 65 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp0_ = self->priv->selected;
+#line 65 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp1_ = selected;
+#line 65 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ if (_tmp0_ == _tmp1_) {
+#line 66 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ return;
+#line 336 "DataView.c"
+ }
+#line 68 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp2_ = selected;
+#line 68 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ self->priv->selected = _tmp2_;
+#line 69 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp3_ = selected;
+#line 69 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ g_signal_emit_by_name (self, "state-changed", _tmp3_);
+#line 346 "DataView.c"
+}
+
+
+gboolean data_view_internal_toggle (DataView* self) {
+ gboolean result = FALSE;
+ gboolean _tmp0_ = FALSE;
+ gboolean _tmp1_ = FALSE;
+ gboolean _tmp2_ = FALSE;
+#line 73 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ g_return_val_if_fail (IS_DATA_VIEW (self), FALSE);
+#line 74 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp0_ = self->priv->selected;
+#line 74 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ self->priv->selected = !_tmp0_;
+#line 75 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp1_ = self->priv->selected;
+#line 75 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ g_signal_emit_by_name (self, "state-changed", _tmp1_);
+#line 77 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp2_ = self->priv->selected;
+#line 77 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ result = _tmp2_;
+#line 77 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ return result;
+#line 371 "DataView.c"
+}
+
+
+gboolean data_view_is_visible (DataView* self) {
+ gboolean result = FALSE;
+ gboolean _tmp0_ = FALSE;
+#line 80 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ g_return_val_if_fail (IS_DATA_VIEW (self), FALSE);
+#line 81 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp0_ = self->priv->visible;
+#line 81 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ result = _tmp0_;
+#line 81 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ return result;
+#line 386 "DataView.c"
+}
+
+
+void data_view_internal_set_visible (DataView* self, gboolean visible) {
+ gboolean _tmp0_ = FALSE;
+ gboolean _tmp1_ = FALSE;
+ gboolean _tmp2_ = FALSE;
+ gboolean _tmp3_ = FALSE;
+#line 85 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ g_return_if_fail (IS_DATA_VIEW (self));
+#line 86 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp0_ = self->priv->visible;
+#line 86 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp1_ = visible;
+#line 86 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ if (_tmp0_ == _tmp1_) {
+#line 87 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ return;
+#line 405 "DataView.c"
+ }
+#line 89 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp2_ = visible;
+#line 89 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ self->priv->visible = _tmp2_;
+#line 90 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp3_ = visible;
+#line 90 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ g_signal_emit_by_name (self, "visibility-changed", _tmp3_);
+#line 415 "DataView.c"
+}
+
+
+static void data_view_real_notify_view_altered (DataView* self) {
+ gboolean _tmp0_ = FALSE;
+ ViewCollection* vc = NULL;
+ DataCollection* _tmp1_ = NULL;
+ ViewCollection* _tmp2_ = NULL;
+ ViewCollection* _tmp3_ = NULL;
+#line 95 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp0_ = self->priv->visible;
+#line 95 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ if (!_tmp0_) {
+#line 96 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ return;
+#line 431 "DataView.c"
+ }
+#line 98 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp1_ = data_object_get_membership (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_OBJECT, DataObject));
+#line 98 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp2_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, TYPE_VIEW_COLLECTION) ? ((ViewCollection*) _tmp1_) : NULL;
+#line 98 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ if (_tmp2_ == NULL) {
+#line 98 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _data_collection_unref0 (_tmp1_);
+#line 441 "DataView.c"
+ }
+#line 98 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ vc = _tmp2_;
+#line 99 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp3_ = vc;
+#line 99 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ if (_tmp3_ != NULL) {
+#line 449 "DataView.c"
+ ViewCollection* _tmp4_ = NULL;
+ gboolean _tmp5_ = FALSE;
+ ViewCollection* _tmp6_ = NULL;
+#line 100 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp4_ = vc;
+#line 100 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp5_ = data_collection_are_notifications_frozen (G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, TYPE_DATA_COLLECTION, DataCollection));
+#line 100 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ if (!_tmp5_) {
+#line 101 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ g_signal_emit_by_name (self, "view-altered");
+#line 461 "DataView.c"
+ }
+#line 104 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp6_ = vc;
+#line 104 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ view_collection_internal_notify_view_altered (_tmp6_, self);
+#line 467 "DataView.c"
+ } else {
+#line 106 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ g_signal_emit_by_name (self, "view-altered");
+#line 471 "DataView.c"
+ }
+#line 93 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _data_collection_unref0 (vc);
+#line 475 "DataView.c"
+}
+
+
+void data_view_notify_view_altered (DataView* self) {
+#line 93 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ g_return_if_fail (IS_DATA_VIEW (self));
+#line 93 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ DATA_VIEW_GET_CLASS (self)->notify_view_altered (self);
+#line 484 "DataView.c"
+}
+
+
+static void data_view_real_notify_geometry_altered (DataView* self) {
+ gboolean _tmp0_ = FALSE;
+ ViewCollection* vc = NULL;
+ DataCollection* _tmp1_ = NULL;
+ ViewCollection* _tmp2_ = NULL;
+ ViewCollection* _tmp3_ = NULL;
+#line 112 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp0_ = self->priv->visible;
+#line 112 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ if (!_tmp0_) {
+#line 113 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ return;
+#line 500 "DataView.c"
+ }
+#line 115 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp1_ = data_object_get_membership (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_OBJECT, DataObject));
+#line 115 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp2_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, TYPE_VIEW_COLLECTION) ? ((ViewCollection*) _tmp1_) : NULL;
+#line 115 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ if (_tmp2_ == NULL) {
+#line 115 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _data_collection_unref0 (_tmp1_);
+#line 510 "DataView.c"
+ }
+#line 115 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ vc = _tmp2_;
+#line 116 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp3_ = vc;
+#line 116 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ if (_tmp3_ != NULL) {
+#line 518 "DataView.c"
+ ViewCollection* _tmp4_ = NULL;
+ gboolean _tmp5_ = FALSE;
+ ViewCollection* _tmp6_ = NULL;
+#line 117 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp4_ = vc;
+#line 117 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp5_ = data_collection_are_notifications_frozen (G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, TYPE_DATA_COLLECTION, DataCollection));
+#line 117 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ if (!_tmp5_) {
+#line 118 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ g_signal_emit_by_name (self, "geometry-altered");
+#line 530 "DataView.c"
+ }
+#line 121 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp6_ = vc;
+#line 121 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ view_collection_internal_notify_geometry_altered (_tmp6_, self);
+#line 536 "DataView.c"
+ } else {
+#line 123 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ g_signal_emit_by_name (self, "geometry-altered");
+#line 540 "DataView.c"
+ }
+#line 110 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _data_collection_unref0 (vc);
+#line 544 "DataView.c"
+}
+
+
+void data_view_notify_geometry_altered (DataView* self) {
+#line 110 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ g_return_if_fail (IS_DATA_VIEW (self));
+#line 110 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ DATA_VIEW_GET_CLASS (self)->notify_geometry_altered (self);
+#line 553 "DataView.c"
+}
+
+
+static void data_view_real_notify_unsubscribed (DataView* self, DataSource* source) {
+ DataSource* _tmp0_ = NULL;
+#line 128 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ g_return_if_fail (IS_DATA_SOURCE (source));
+#line 129 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp0_ = source;
+#line 129 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ g_signal_emit_by_name (self, "unsubscribed", _tmp0_);
+#line 565 "DataView.c"
+}
+
+
+void data_view_notify_unsubscribed (DataView* self, DataSource* source) {
+#line 128 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ g_return_if_fail (IS_DATA_VIEW (self));
+#line 128 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ DATA_VIEW_GET_CLASS (self)->notify_unsubscribed (self, source);
+#line 574 "DataView.c"
+}
+
+
+static void data_view_real_state_changed (DataView* self, gboolean selected) {
+}
+
+
+static void data_view_real_visibility_changed (DataView* self, gboolean visible) {
+}
+
+
+static void data_view_real_view_altered (DataView* self) {
+}
+
+
+static void data_view_real_geometry_altered (DataView* self) {
+}
+
+
+static void data_view_real_unsubscribed (DataView* self, DataSource* source) {
+#line 29 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ g_return_if_fail (IS_DATA_SOURCE (source));
+#line 597 "DataView.c"
+}
+
+
+static void data_view_class_init (DataViewClass * klass) {
+#line 7 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ data_view_parent_class = g_type_class_peek_parent (klass);
+#line 7 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ g_type_class_add_private (klass, sizeof (DataViewPrivate));
+#line 7 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ ((DataObjectClass *) klass)->get_name = data_view_real_get_name;
+#line 7 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ ((DataObjectClass *) klass)->to_string = data_view_real_to_string;
+#line 7 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ ((DataViewClass *) klass)->notify_view_altered = data_view_real_notify_view_altered;
+#line 7 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ ((DataViewClass *) klass)->notify_geometry_altered = data_view_real_notify_geometry_altered;
+#line 7 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ ((DataViewClass *) klass)->notify_unsubscribed = data_view_real_notify_unsubscribed;
+#line 7 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ ((DataViewClass *) klass)->state_changed = data_view_real_state_changed;
+#line 7 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ ((DataViewClass *) klass)->visibility_changed = data_view_real_visibility_changed;
+#line 7 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ ((DataViewClass *) klass)->view_altered = data_view_real_view_altered;
+#line 7 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ ((DataViewClass *) klass)->geometry_altered = data_view_real_geometry_altered;
+#line 7 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ ((DataViewClass *) klass)->unsubscribed = data_view_real_unsubscribed;
+#line 7 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ G_OBJECT_CLASS (klass)->finalize = data_view_finalize;
+#line 7 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ g_signal_new ("state_changed", TYPE_DATA_VIEW, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (DataViewClass, state_changed), NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+#line 7 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ g_signal_new ("visibility_changed", TYPE_DATA_VIEW, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (DataViewClass, visibility_changed), NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+#line 7 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ g_signal_new ("view_altered", TYPE_DATA_VIEW, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (DataViewClass, view_altered), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+#line 7 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ g_signal_new ("geometry_altered", TYPE_DATA_VIEW, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (DataViewClass, geometry_altered), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+#line 7 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ g_signal_new ("unsubscribed", TYPE_DATA_VIEW, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (DataViewClass, unsubscribed), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, TYPE_DATA_SOURCE);
+#line 638 "DataView.c"
+}
+
+
+static void data_view_instance_init (DataView * self) {
+#line 7 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ self->priv = DATA_VIEW_GET_PRIVATE (self);
+#line 9 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ self->priv->selected = FALSE;
+#line 10 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ self->priv->visible = TRUE;
+#line 649 "DataView.c"
+}
+
+
+static void data_view_finalize (GObject* obj) {
+ DataView * self;
+ DataSource* _tmp0_ = NULL;
+#line 7 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_DATA_VIEW, DataView);
+#line 44 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _tmp0_ = self->priv->source;
+#line 44 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ data_source_internal_unsubscribe (_tmp0_, self);
+#line 8 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ _g_object_unref0 (self->priv->source);
+#line 7 "/home/jens/Source/shotwell/src/core/DataView.vala"
+ G_OBJECT_CLASS (data_view_parent_class)->finalize (obj);
+#line 666 "DataView.c"
+}
+
+
+GType data_view_get_type (void) {
+ static volatile gsize data_view_type_id__volatile = 0;
+ if (g_once_init_enter (&data_view_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (DataViewClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) data_view_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (DataView), 0, (GInstanceInitFunc) data_view_instance_init, NULL };
+ GType data_view_type_id;
+ data_view_type_id = g_type_register_static (TYPE_DATA_OBJECT, "DataView", &g_define_type_info, 0);
+ g_once_init_leave (&data_view_type_id__volatile, data_view_type_id);
+ }
+ return data_view_type_id__volatile;
+}
+
+
+
diff --git a/src/core/DataViewTypes.c b/src/core/DataViewTypes.c
new file mode 100644
index 0000000..0e55db0
--- /dev/null
+++ b/src/core/DataViewTypes.c
@@ -0,0 +1,546 @@
+/* DataViewTypes.c generated by valac 0.32.1, the Vala compiler
+ * generated from DataViewTypes.vala, do not modify */
+
+/* Copyright 2016 Software Freedom Conservancy Inc.
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later). See the COPYING file in this distribution.
+ */
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+#define TYPE_DATA_OBJECT (data_object_get_type ())
+#define DATA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_OBJECT, DataObject))
+#define DATA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_OBJECT, DataObjectClass))
+#define IS_DATA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_OBJECT))
+#define IS_DATA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_OBJECT))
+#define DATA_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_OBJECT, DataObjectClass))
+
+typedef struct _DataObject DataObject;
+typedef struct _DataObjectClass DataObjectClass;
+typedef struct _DataObjectPrivate DataObjectPrivate;
+
+#define TYPE_ALTERATION (alteration_get_type ())
+#define ALTERATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ALTERATION, Alteration))
+#define ALTERATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ALTERATION, AlterationClass))
+#define IS_ALTERATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ALTERATION))
+#define IS_ALTERATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ALTERATION))
+#define ALTERATION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ALTERATION, AlterationClass))
+
+typedef struct _Alteration Alteration;
+typedef struct _AlterationClass AlterationClass;
+
+#define TYPE_DATA_COLLECTION (data_collection_get_type ())
+#define DATA_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_COLLECTION, DataCollection))
+#define DATA_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_COLLECTION, DataCollectionClass))
+#define IS_DATA_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_COLLECTION))
+#define IS_DATA_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_COLLECTION))
+#define DATA_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_COLLECTION, DataCollectionClass))
+
+typedef struct _DataCollection DataCollection;
+typedef struct _DataCollectionClass DataCollectionClass;
+
+#define TYPE_DATA_VIEW (data_view_get_type ())
+#define DATA_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_VIEW, DataView))
+#define DATA_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_VIEW, DataViewClass))
+#define IS_DATA_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_VIEW))
+#define IS_DATA_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_VIEW))
+#define DATA_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_VIEW, DataViewClass))
+
+typedef struct _DataView DataView;
+typedef struct _DataViewClass DataViewClass;
+typedef struct _DataViewPrivate DataViewPrivate;
+
+#define TYPE_DATA_SOURCE (data_source_get_type ())
+#define DATA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_SOURCE, DataSource))
+#define DATA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_SOURCE, DataSourceClass))
+#define IS_DATA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_SOURCE))
+#define IS_DATA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_SOURCE))
+#define DATA_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_SOURCE, DataSourceClass))
+
+typedef struct _DataSource DataSource;
+typedef struct _DataSourceClass DataSourceClass;
+
+#define TYPE_THUMBNAIL_VIEW (thumbnail_view_get_type ())
+#define THUMBNAIL_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_THUMBNAIL_VIEW, ThumbnailView))
+#define THUMBNAIL_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_THUMBNAIL_VIEW, ThumbnailViewClass))
+#define IS_THUMBNAIL_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_THUMBNAIL_VIEW))
+#define IS_THUMBNAIL_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_THUMBNAIL_VIEW))
+#define THUMBNAIL_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_THUMBNAIL_VIEW, ThumbnailViewClass))
+
+typedef struct _ThumbnailView ThumbnailView;
+typedef struct _ThumbnailViewClass ThumbnailViewClass;
+typedef struct _ThumbnailViewPrivate ThumbnailViewPrivate;
+
+#define TYPE_THUMBNAIL_SOURCE (thumbnail_source_get_type ())
+#define THUMBNAIL_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_THUMBNAIL_SOURCE, ThumbnailSource))
+#define THUMBNAIL_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_THUMBNAIL_SOURCE, ThumbnailSourceClass))
+#define IS_THUMBNAIL_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_THUMBNAIL_SOURCE))
+#define IS_THUMBNAIL_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_THUMBNAIL_SOURCE))
+#define THUMBNAIL_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_THUMBNAIL_SOURCE, ThumbnailSourceClass))
+
+typedef struct _ThumbnailSource ThumbnailSource;
+typedef struct _ThumbnailSourceClass ThumbnailSourceClass;
+
+#define TYPE_PHOTO_VIEW (photo_view_get_type ())
+#define PHOTO_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_PHOTO_VIEW, PhotoView))
+#define PHOTO_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_PHOTO_VIEW, PhotoViewClass))
+#define IS_PHOTO_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_PHOTO_VIEW))
+#define IS_PHOTO_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_PHOTO_VIEW))
+#define PHOTO_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_PHOTO_VIEW, PhotoViewClass))
+
+typedef struct _PhotoView PhotoView;
+typedef struct _PhotoViewClass PhotoViewClass;
+typedef struct _PhotoViewPrivate PhotoViewPrivate;
+
+#define TYPE_MEDIA_SOURCE (media_source_get_type ())
+#define MEDIA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_MEDIA_SOURCE, MediaSource))
+#define MEDIA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_MEDIA_SOURCE, MediaSourceClass))
+#define IS_MEDIA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_MEDIA_SOURCE))
+#define IS_MEDIA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_MEDIA_SOURCE))
+#define MEDIA_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_MEDIA_SOURCE, MediaSourceClass))
+
+typedef struct _MediaSource MediaSource;
+typedef struct _MediaSourceClass MediaSourceClass;
+
+#define TYPE_PHOTO_SOURCE (photo_source_get_type ())
+#define PHOTO_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_PHOTO_SOURCE, PhotoSource))
+#define PHOTO_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_PHOTO_SOURCE, PhotoSourceClass))
+#define IS_PHOTO_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_PHOTO_SOURCE))
+#define IS_PHOTO_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_PHOTO_SOURCE))
+#define PHOTO_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_PHOTO_SOURCE, PhotoSourceClass))
+
+typedef struct _PhotoSource PhotoSource;
+typedef struct _PhotoSourceClass PhotoSourceClass;
+
+#define TYPE_VIDEO_VIEW (video_view_get_type ())
+#define VIDEO_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_VIDEO_VIEW, VideoView))
+#define VIDEO_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_VIDEO_VIEW, VideoViewClass))
+#define IS_VIDEO_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_VIDEO_VIEW))
+#define IS_VIDEO_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_VIDEO_VIEW))
+#define VIDEO_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_VIDEO_VIEW, VideoViewClass))
+
+typedef struct _VideoView VideoView;
+typedef struct _VideoViewClass VideoViewClass;
+typedef struct _VideoViewPrivate VideoViewPrivate;
+
+#define TYPE_VIDEO_SOURCE (video_source_get_type ())
+#define VIDEO_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_VIDEO_SOURCE, VideoSource))
+#define VIDEO_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_VIDEO_SOURCE, VideoSourceClass))
+#define IS_VIDEO_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_VIDEO_SOURCE))
+#define IS_VIDEO_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_VIDEO_SOURCE))
+#define VIDEO_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_VIDEO_SOURCE, VideoSourceClass))
+
+typedef struct _VideoSource VideoSource;
+typedef struct _VideoSourceClass VideoSourceClass;
+
+#define TYPE_EVENT_VIEW (event_view_get_type ())
+#define EVENT_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_EVENT_VIEW, EventView))
+#define EVENT_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_EVENT_VIEW, EventViewClass))
+#define IS_EVENT_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_EVENT_VIEW))
+#define IS_EVENT_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_EVENT_VIEW))
+#define EVENT_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_EVENT_VIEW, EventViewClass))
+
+typedef struct _EventView EventView;
+typedef struct _EventViewClass EventViewClass;
+typedef struct _EventViewPrivate EventViewPrivate;
+
+#define TYPE_EVENT_SOURCE (event_source_get_type ())
+#define EVENT_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_EVENT_SOURCE, EventSource))
+#define EVENT_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_EVENT_SOURCE, EventSourceClass))
+#define IS_EVENT_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_EVENT_SOURCE))
+#define IS_EVENT_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_EVENT_SOURCE))
+#define EVENT_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_EVENT_SOURCE, EventSourceClass))
+
+typedef struct _EventSource EventSource;
+typedef struct _EventSourceClass EventSourceClass;
+
+struct _DataObject {
+ GObject parent_instance;
+ DataObjectPrivate * priv;
+};
+
+struct _DataObjectClass {
+ GObjectClass parent_class;
+ void (*notify_altered) (DataObject* self, Alteration* alteration);
+ void (*notify_membership_changed) (DataObject* self, DataCollection* collection);
+ void (*notify_collection_property_set) (DataObject* self, const gchar* name, GValue* old, GValue* val);
+ void (*notify_collection_property_cleared) (DataObject* self, const gchar* name);
+ gchar* (*get_name) (DataObject* self);
+ gchar* (*to_string) (DataObject* self);
+};
+
+struct _DataView {
+ DataObject parent_instance;
+ DataViewPrivate * priv;
+};
+
+struct _DataViewClass {
+ DataObjectClass parent_class;
+ void (*notify_view_altered) (DataView* self);
+ void (*notify_geometry_altered) (DataView* self);
+ void (*notify_unsubscribed) (DataView* self, DataSource* source);
+ void (*state_changed) (DataView* self, gboolean selected);
+ void (*visibility_changed) (DataView* self, gboolean visible);
+ void (*view_altered) (DataView* self);
+ void (*geometry_altered) (DataView* self);
+ void (*unsubscribed) (DataView* self, DataSource* source);
+};
+
+struct _ThumbnailView {
+ DataView parent_instance;
+ ThumbnailViewPrivate * priv;
+};
+
+struct _ThumbnailViewClass {
+ DataViewClass parent_class;
+ void (*notify_thumbnail_altered) (ThumbnailView* self);
+ void (*thumbnail_altered) (ThumbnailView* self);
+};
+
+struct _PhotoView {
+ ThumbnailView parent_instance;
+ PhotoViewPrivate * priv;
+};
+
+struct _PhotoViewClass {
+ ThumbnailViewClass parent_class;
+};
+
+struct _VideoView {
+ ThumbnailView parent_instance;
+ VideoViewPrivate * priv;
+};
+
+struct _VideoViewClass {
+ ThumbnailViewClass parent_class;
+};
+
+struct _EventView {
+ ThumbnailView parent_instance;
+ EventViewPrivate * priv;
+};
+
+struct _EventViewClass {
+ ThumbnailViewClass parent_class;
+};
+
+
+static gpointer thumbnail_view_parent_class = NULL;
+static gpointer photo_view_parent_class = NULL;
+static gpointer video_view_parent_class = NULL;
+static gpointer event_view_parent_class = NULL;
+
+GType data_object_get_type (void) G_GNUC_CONST;
+gpointer alteration_ref (gpointer instance);
+void alteration_unref (gpointer instance);
+GParamSpec* param_spec_alteration (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_alteration (GValue* value, gpointer v_object);
+void value_take_alteration (GValue* value, gpointer v_object);
+gpointer value_get_alteration (const GValue* value);
+GType alteration_get_type (void) G_GNUC_CONST;
+gpointer data_collection_ref (gpointer instance);
+void data_collection_unref (gpointer instance);
+GParamSpec* param_spec_data_collection (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_data_collection (GValue* value, gpointer v_object);
+void value_take_data_collection (GValue* value, gpointer v_object);
+gpointer value_get_data_collection (const GValue* value);
+GType data_collection_get_type (void) G_GNUC_CONST;
+GType data_view_get_type (void) G_GNUC_CONST;
+GType data_source_get_type (void) G_GNUC_CONST;
+GType thumbnail_view_get_type (void) G_GNUC_CONST;
+enum {
+ THUMBNAIL_VIEW_DUMMY_PROPERTY
+};
+GType thumbnail_source_get_type (void) G_GNUC_CONST;
+ThumbnailView* thumbnail_view_new (ThumbnailSource* source);
+ThumbnailView* thumbnail_view_construct (GType object_type, ThumbnailSource* source);
+DataView* data_view_new (DataSource* source);
+DataView* data_view_construct (GType object_type, DataSource* source);
+void thumbnail_view_notify_thumbnail_altered (ThumbnailView* self);
+static void thumbnail_view_real_notify_thumbnail_altered (ThumbnailView* self);
+static void thumbnail_view_real_thumbnail_altered (ThumbnailView* self);
+GType photo_view_get_type (void) G_GNUC_CONST;
+enum {
+ PHOTO_VIEW_DUMMY_PROPERTY
+};
+GType media_source_get_type (void) G_GNUC_CONST;
+GType photo_source_get_type (void) G_GNUC_CONST;
+PhotoView* photo_view_new (PhotoSource* source);
+PhotoView* photo_view_construct (GType object_type, PhotoSource* source);
+PhotoSource* photo_view_get_photo_source (PhotoView* self);
+DataSource* data_view_get_source (DataView* self);
+GType video_view_get_type (void) G_GNUC_CONST;
+enum {
+ VIDEO_VIEW_DUMMY_PROPERTY
+};
+GType video_source_get_type (void) G_GNUC_CONST;
+VideoView* video_view_new (VideoSource* source);
+VideoView* video_view_construct (GType object_type, VideoSource* source);
+VideoSource* video_view_get_video_source (VideoView* self);
+GType event_view_get_type (void) G_GNUC_CONST;
+enum {
+ EVENT_VIEW_DUMMY_PROPERTY
+};
+GType event_source_get_type (void) G_GNUC_CONST;
+EventView* event_view_new (EventSource* source);
+EventView* event_view_construct (GType object_type, EventSource* source);
+EventSource* event_view_get_event_source (EventView* self);
+
+
+ThumbnailView* thumbnail_view_construct (GType object_type, ThumbnailSource* source) {
+ ThumbnailView * self = NULL;
+ ThumbnailSource* _tmp0_ = NULL;
+#line 11 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ g_return_val_if_fail (IS_THUMBNAIL_SOURCE (source), NULL);
+#line 12 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ _tmp0_ = source;
+#line 12 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ self = (ThumbnailView*) data_view_construct (object_type, G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_DATA_SOURCE, DataSource));
+#line 11 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ return self;
+#line 307 "DataViewTypes.c"
+}
+
+
+ThumbnailView* thumbnail_view_new (ThumbnailSource* source) {
+#line 11 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ return thumbnail_view_construct (TYPE_THUMBNAIL_VIEW, source);
+#line 314 "DataViewTypes.c"
+}
+
+
+static void thumbnail_view_real_notify_thumbnail_altered (ThumbnailView* self) {
+#line 17 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ g_signal_emit_by_name (self, "thumbnail-altered");
+#line 321 "DataViewTypes.c"
+}
+
+
+void thumbnail_view_notify_thumbnail_altered (ThumbnailView* self) {
+#line 15 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ g_return_if_fail (IS_THUMBNAIL_VIEW (self));
+#line 15 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ THUMBNAIL_VIEW_GET_CLASS (self)->notify_thumbnail_altered (self);
+#line 330 "DataViewTypes.c"
+}
+
+
+static void thumbnail_view_real_thumbnail_altered (ThumbnailView* self) {
+}
+
+
+static void thumbnail_view_class_init (ThumbnailViewClass * klass) {
+#line 7 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ thumbnail_view_parent_class = g_type_class_peek_parent (klass);
+#line 7 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ ((ThumbnailViewClass *) klass)->notify_thumbnail_altered = thumbnail_view_real_notify_thumbnail_altered;
+#line 7 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ ((ThumbnailViewClass *) klass)->thumbnail_altered = thumbnail_view_real_thumbnail_altered;
+#line 7 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ g_signal_new ("thumbnail_altered", TYPE_THUMBNAIL_VIEW, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ThumbnailViewClass, thumbnail_altered), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+#line 347 "DataViewTypes.c"
+}
+
+
+static void thumbnail_view_instance_init (ThumbnailView * self) {
+}
+
+
+GType thumbnail_view_get_type (void) {
+ static volatile gsize thumbnail_view_type_id__volatile = 0;
+ if (g_once_init_enter (&thumbnail_view_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (ThumbnailViewClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) thumbnail_view_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ThumbnailView), 0, (GInstanceInitFunc) thumbnail_view_instance_init, NULL };
+ GType thumbnail_view_type_id;
+ thumbnail_view_type_id = g_type_register_static (TYPE_DATA_VIEW, "ThumbnailView", &g_define_type_info, 0);
+ g_once_init_leave (&thumbnail_view_type_id__volatile, thumbnail_view_type_id);
+ }
+ return thumbnail_view_type_id__volatile;
+}
+
+
+PhotoView* photo_view_construct (GType object_type, PhotoSource* source) {
+ PhotoView * self = NULL;
+ PhotoSource* _tmp0_ = NULL;
+#line 22 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ g_return_val_if_fail (IS_PHOTO_SOURCE (source), NULL);
+#line 23 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ _tmp0_ = source;
+#line 23 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ self = (PhotoView*) thumbnail_view_construct (object_type, G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_THUMBNAIL_SOURCE, ThumbnailSource));
+#line 22 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ return self;
+#line 378 "DataViewTypes.c"
+}
+
+
+PhotoView* photo_view_new (PhotoSource* source) {
+#line 22 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ return photo_view_construct (TYPE_PHOTO_VIEW, source);
+#line 385 "DataViewTypes.c"
+}
+
+
+PhotoSource* photo_view_get_photo_source (PhotoView* self) {
+ PhotoSource* result = NULL;
+ DataSource* _tmp0_ = NULL;
+#line 26 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ g_return_val_if_fail (IS_PHOTO_VIEW (self), NULL);
+#line 27 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ _tmp0_ = data_view_get_source (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_VIEW, DataView));
+#line 27 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_PHOTO_SOURCE, PhotoSource);
+#line 27 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ return result;
+#line 400 "DataViewTypes.c"
+}
+
+
+static void photo_view_class_init (PhotoViewClass * klass) {
+#line 21 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ photo_view_parent_class = g_type_class_peek_parent (klass);
+#line 407 "DataViewTypes.c"
+}
+
+
+static void photo_view_instance_init (PhotoView * self) {
+}
+
+
+GType photo_view_get_type (void) {
+ static volatile gsize photo_view_type_id__volatile = 0;
+ if (g_once_init_enter (&photo_view_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (PhotoViewClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) photo_view_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (PhotoView), 0, (GInstanceInitFunc) photo_view_instance_init, NULL };
+ GType photo_view_type_id;
+ photo_view_type_id = g_type_register_static (TYPE_THUMBNAIL_VIEW, "PhotoView", &g_define_type_info, 0);
+ g_once_init_leave (&photo_view_type_id__volatile, photo_view_type_id);
+ }
+ return photo_view_type_id__volatile;
+}
+
+
+VideoView* video_view_construct (GType object_type, VideoSource* source) {
+ VideoView * self = NULL;
+ VideoSource* _tmp0_ = NULL;
+#line 32 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ g_return_val_if_fail (IS_VIDEO_SOURCE (source), NULL);
+#line 33 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ _tmp0_ = source;
+#line 33 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ self = (VideoView*) thumbnail_view_construct (object_type, G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_THUMBNAIL_SOURCE, ThumbnailSource));
+#line 32 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ return self;
+#line 438 "DataViewTypes.c"
+}
+
+
+VideoView* video_view_new (VideoSource* source) {
+#line 32 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ return video_view_construct (TYPE_VIDEO_VIEW, source);
+#line 445 "DataViewTypes.c"
+}
+
+
+VideoSource* video_view_get_video_source (VideoView* self) {
+ VideoSource* result = NULL;
+ DataSource* _tmp0_ = NULL;
+#line 36 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ g_return_val_if_fail (IS_VIDEO_VIEW (self), NULL);
+#line 37 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ _tmp0_ = data_view_get_source (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_VIEW, DataView));
+#line 37 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_VIDEO_SOURCE, VideoSource);
+#line 37 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ return result;
+#line 460 "DataViewTypes.c"
+}
+
+
+static void video_view_class_init (VideoViewClass * klass) {
+#line 31 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ video_view_parent_class = g_type_class_peek_parent (klass);
+#line 467 "DataViewTypes.c"
+}
+
+
+static void video_view_instance_init (VideoView * self) {
+}
+
+
+GType video_view_get_type (void) {
+ static volatile gsize video_view_type_id__volatile = 0;
+ if (g_once_init_enter (&video_view_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (VideoViewClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) video_view_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (VideoView), 0, (GInstanceInitFunc) video_view_instance_init, NULL };
+ GType video_view_type_id;
+ video_view_type_id = g_type_register_static (TYPE_THUMBNAIL_VIEW, "VideoView", &g_define_type_info, 0);
+ g_once_init_leave (&video_view_type_id__volatile, video_view_type_id);
+ }
+ return video_view_type_id__volatile;
+}
+
+
+EventView* event_view_construct (GType object_type, EventSource* source) {
+ EventView * self = NULL;
+ EventSource* _tmp0_ = NULL;
+#line 42 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ g_return_val_if_fail (IS_EVENT_SOURCE (source), NULL);
+#line 43 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ _tmp0_ = source;
+#line 43 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ self = (EventView*) thumbnail_view_construct (object_type, G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_THUMBNAIL_SOURCE, ThumbnailSource));
+#line 42 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ return self;
+#line 498 "DataViewTypes.c"
+}
+
+
+EventView* event_view_new (EventSource* source) {
+#line 42 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ return event_view_construct (TYPE_EVENT_VIEW, source);
+#line 505 "DataViewTypes.c"
+}
+
+
+EventSource* event_view_get_event_source (EventView* self) {
+ EventSource* result = NULL;
+ DataSource* _tmp0_ = NULL;
+#line 46 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ g_return_val_if_fail (IS_EVENT_VIEW (self), NULL);
+#line 47 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ _tmp0_ = data_view_get_source (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_VIEW, DataView));
+#line 47 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_EVENT_SOURCE, EventSource);
+#line 47 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ return result;
+#line 520 "DataViewTypes.c"
+}
+
+
+static void event_view_class_init (EventViewClass * klass) {
+#line 41 "/home/jens/Source/shotwell/src/core/DataViewTypes.vala"
+ event_view_parent_class = g_type_class_peek_parent (klass);
+#line 527 "DataViewTypes.c"
+}
+
+
+static void event_view_instance_init (EventView * self) {
+}
+
+
+GType event_view_get_type (void) {
+ static volatile gsize event_view_type_id__volatile = 0;
+ if (g_once_init_enter (&event_view_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (EventViewClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) event_view_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (EventView), 0, (GInstanceInitFunc) event_view_instance_init, NULL };
+ GType event_view_type_id;
+ event_view_type_id = g_type_register_static (TYPE_THUMBNAIL_VIEW, "EventView", &g_define_type_info, 0);
+ g_once_init_leave (&event_view_type_id__volatile, event_view_type_id);
+ }
+ return event_view_type_id__volatile;
+}
+
+
+
diff --git a/src/core/DatabaseSourceCollection.c b/src/core/DatabaseSourceCollection.c
new file mode 100644
index 0000000..b83be40
--- /dev/null
+++ b/src/core/DatabaseSourceCollection.c
@@ -0,0 +1,914 @@
+/* DatabaseSourceCollection.c generated by valac 0.32.1, the Vala compiler
+ * generated from DatabaseSourceCollection.vala, do not modify */
+
+/* Copyright 2016 Software Freedom Conservancy Inc.
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later). See the COPYING file in this distribution.
+ */
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gee.h>
+
+
+#define TYPE_DATA_OBJECT (data_object_get_type ())
+#define DATA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_OBJECT, DataObject))
+#define DATA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_OBJECT, DataObjectClass))
+#define IS_DATA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_OBJECT))
+#define IS_DATA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_OBJECT))
+#define DATA_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_OBJECT, DataObjectClass))
+
+typedef struct _DataObject DataObject;
+typedef struct _DataObjectClass DataObjectClass;
+
+#define TYPE_DATA_SOURCE (data_source_get_type ())
+#define DATA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_SOURCE, DataSource))
+#define DATA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_SOURCE, DataSourceClass))
+#define IS_DATA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_SOURCE))
+#define IS_DATA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_SOURCE))
+#define DATA_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_SOURCE, DataSourceClass))
+
+typedef struct _DataSource DataSource;
+typedef struct _DataSourceClass DataSourceClass;
+
+#define TYPE_DATA_COLLECTION (data_collection_get_type ())
+#define DATA_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_COLLECTION, DataCollection))
+#define DATA_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_COLLECTION, DataCollectionClass))
+#define IS_DATA_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_COLLECTION))
+#define IS_DATA_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_COLLECTION))
+#define DATA_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_COLLECTION, DataCollectionClass))
+
+typedef struct _DataCollection DataCollection;
+typedef struct _DataCollectionClass DataCollectionClass;
+typedef struct _DataCollectionPrivate DataCollectionPrivate;
+
+#define TYPE_ALTERATION (alteration_get_type ())
+#define ALTERATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ALTERATION, Alteration))
+#define ALTERATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ALTERATION, AlterationClass))
+#define IS_ALTERATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ALTERATION))
+#define IS_ALTERATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ALTERATION))
+#define ALTERATION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ALTERATION, AlterationClass))
+
+typedef struct _Alteration Alteration;
+typedef struct _AlterationClass AlterationClass;
+
+#define TYPE_MARKER (marker_get_type ())
+#define MARKER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_MARKER, Marker))
+#define IS_MARKER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_MARKER))
+#define MARKER_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TYPE_MARKER, MarkerIface))
+
+typedef struct _Marker Marker;
+typedef struct _MarkerIface MarkerIface;
+
+#define TYPE_SOURCE_COLLECTION (source_collection_get_type ())
+#define SOURCE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SOURCE_COLLECTION, SourceCollection))
+#define SOURCE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SOURCE_COLLECTION, SourceCollectionClass))
+#define IS_SOURCE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SOURCE_COLLECTION))
+#define IS_SOURCE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SOURCE_COLLECTION))
+#define SOURCE_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SOURCE_COLLECTION, SourceCollectionClass))
+
+typedef struct _SourceCollection SourceCollection;
+typedef struct _SourceCollectionClass SourceCollectionClass;
+typedef struct _SourceCollectionPrivate SourceCollectionPrivate;
+
+#define TYPE_SOURCE_BACKLINK (source_backlink_get_type ())
+#define SOURCE_BACKLINK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SOURCE_BACKLINK, SourceBacklink))
+#define SOURCE_BACKLINK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SOURCE_BACKLINK, SourceBacklinkClass))
+#define IS_SOURCE_BACKLINK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SOURCE_BACKLINK))
+#define IS_SOURCE_BACKLINK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SOURCE_BACKLINK))
+#define SOURCE_BACKLINK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SOURCE_BACKLINK, SourceBacklinkClass))
+
+typedef struct _SourceBacklink SourceBacklink;
+typedef struct _SourceBacklinkClass SourceBacklinkClass;
+
+#define TYPE_DATABASE_SOURCE_COLLECTION (database_source_collection_get_type ())
+#define DATABASE_SOURCE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATABASE_SOURCE_COLLECTION, DatabaseSourceCollection))
+#define DATABASE_SOURCE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATABASE_SOURCE_COLLECTION, DatabaseSourceCollectionClass))
+#define IS_DATABASE_SOURCE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATABASE_SOURCE_COLLECTION))
+#define IS_DATABASE_SOURCE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATABASE_SOURCE_COLLECTION))
+#define DATABASE_SOURCE_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATABASE_SOURCE_COLLECTION, DatabaseSourceCollectionClass))
+
+typedef struct _DatabaseSourceCollection DatabaseSourceCollection;
+typedef struct _DatabaseSourceCollectionClass DatabaseSourceCollectionClass;
+typedef struct _DatabaseSourceCollectionPrivate DatabaseSourceCollectionPrivate;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+
+#define TYPE_SOURCE_HOLDING_TANK (source_holding_tank_get_type ())
+#define SOURCE_HOLDING_TANK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SOURCE_HOLDING_TANK, SourceHoldingTank))
+#define SOURCE_HOLDING_TANK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SOURCE_HOLDING_TANK, SourceHoldingTankClass))
+#define IS_SOURCE_HOLDING_TANK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SOURCE_HOLDING_TANK))
+#define IS_SOURCE_HOLDING_TANK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SOURCE_HOLDING_TANK))
+#define SOURCE_HOLDING_TANK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SOURCE_HOLDING_TANK, SourceHoldingTankClass))
+
+typedef struct _SourceHoldingTank SourceHoldingTank;
+typedef struct _SourceHoldingTankClass SourceHoldingTankClass;
+typedef struct _SourceHoldingTankPrivate SourceHoldingTankPrivate;
+
+#define TYPE_DATABASE_SOURCE_HOLDING_TANK (database_source_holding_tank_get_type ())
+#define DATABASE_SOURCE_HOLDING_TANK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATABASE_SOURCE_HOLDING_TANK, DatabaseSourceHoldingTank))
+#define DATABASE_SOURCE_HOLDING_TANK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATABASE_SOURCE_HOLDING_TANK, DatabaseSourceHoldingTankClass))
+#define IS_DATABASE_SOURCE_HOLDING_TANK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATABASE_SOURCE_HOLDING_TANK))
+#define IS_DATABASE_SOURCE_HOLDING_TANK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATABASE_SOURCE_HOLDING_TANK))
+#define DATABASE_SOURCE_HOLDING_TANK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATABASE_SOURCE_HOLDING_TANK, DatabaseSourceHoldingTankClass))
+
+typedef struct _DatabaseSourceHoldingTank DatabaseSourceHoldingTank;
+typedef struct _DatabaseSourceHoldingTankClass DatabaseSourceHoldingTankClass;
+typedef struct _DatabaseSourceHoldingTankPrivate DatabaseSourceHoldingTankPrivate;
+#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
+#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
+#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+
+typedef gint64 (*GetSourceDatabaseKey) (DataSource* source, void* user_data);
+typedef gint64 (*Comparator) (void* a, void* b, void* user_data);
+typedef gboolean (*ComparatorPredicate) (DataObject* object, Alteration* alteration, void* user_data);
+typedef gboolean (*ProgressMonitor) (guint64 current, guint64 total, gboolean do_event_loop, void* user_data);
+struct _MarkerIface {
+ GTypeInterface parent_iface;
+ void (*mark) (Marker* self, DataObject* object);
+ void (*unmark) (Marker* self, DataObject* object);
+ gboolean (*toggle) (Marker* self, DataObject* object);
+ void (*mark_many) (Marker* self, GeeCollection* list);
+ void (*unmark_many) (Marker* self, GeeCollection* list);
+ void (*mark_all) (Marker* self);
+ gint (*get_count) (Marker* self);
+ GeeCollection* (*get_all) (Marker* self);
+};
+
+struct _DataCollection {
+ GTypeInstance parent_instance;
+ volatile int ref_count;
+ DataCollectionPrivate * priv;
+};
+
+struct _DataCollectionClass {
+ GTypeClass parent_class;
+ void (*finalize) (DataCollection *self);
+ gchar* (*to_string) (DataCollection* self);
+ void (*notify_items_added) (DataCollection* self, GeeIterable* added);
+ void (*notify_items_removed) (DataCollection* self, GeeIterable* removed);
+ void (*notify_contents_altered) (DataCollection* self, GeeIterable* added, GeeIterable* removed);
+ void (*notify_items_altered) (DataCollection* self, GeeMap* items);
+ void (*notify_ordering_changed) (DataCollection* self);
+ void (*notify_property_set) (DataCollection* self, const gchar* name, GValue* old, GValue* val);
+ void (*notify_property_cleared) (DataCollection* self, const gchar* name);
+ gboolean (*valid_type) (DataCollection* self, DataObject* object);
+ void (*set_comparator) (DataCollection* self, Comparator comparator, void* comparator_target, ComparatorPredicate predicate, void* predicate_target);
+ void (*reset_comparator) (DataCollection* self);
+ GeeCollection* (*get_all) (DataCollection* self);
+ gint (*get_count) (DataCollection* self);
+ DataObject* (*get_at) (DataCollection* self, gint index);
+ gint (*index_of) (DataCollection* self, DataObject* object);
+ gboolean (*contains) (DataCollection* self, DataObject* object);
+ gboolean (*add) (DataCollection* self, DataObject* object);
+ GeeCollection* (*add_many) (DataCollection* self, GeeCollection* objects, ProgressMonitor monitor, void* monitor_target);
+ void (*remove_marked) (DataCollection* self, Marker* m);
+ void (*clear) (DataCollection* self);
+ void (*close) (DataCollection* self);
+ void (*notify_frozen) (DataCollection* self);
+ void (*notify_thawed) (DataCollection* self);
+ void (*items_added) (DataCollection* self, GeeIterable* added);
+ void (*items_removed) (DataCollection* self, GeeIterable* removed);
+ void (*contents_altered) (DataCollection* self, GeeIterable* added, GeeIterable* removed);
+ void (*items_altered) (DataCollection* self, GeeMap* items);
+ void (*ordering_changed) (DataCollection* self);
+ void (*property_set) (DataCollection* self, const gchar* name, GValue* old, GValue* val);
+ void (*property_cleared) (DataCollection* self, const gchar* name);
+ void (*frozen) (DataCollection* self);
+ void (*thawed) (DataCollection* self);
+};
+
+struct _SourceCollection {
+ DataCollection parent_instance;
+ SourceCollectionPrivate * priv;
+};
+
+struct _SourceCollectionClass {
+ DataCollectionClass parent_class;
+ gboolean (*holds_type_of_source) (SourceCollection* self, DataSource* source);
+ void (*notify_items_unlinking) (SourceCollection* self, GeeCollection* unlinking);
+ void (*notify_items_relinked) (SourceCollection* self, GeeCollection* relinked);
+ void (*notify_item_destroyed) (SourceCollection* self, DataSource* source);
+ void (*notify_items_destroyed) (SourceCollection* self, GeeCollection* destroyed);
+ void (*notify_unlinked_destroyed) (SourceCollection* self, DataSource* unlinked);
+ void (*notify_backlink_removed) (SourceCollection* self, SourceBacklink* backlink, GeeCollection* sources);
+ gboolean (*has_backlink) (SourceCollection* self, SourceBacklink* backlink);
+ void (*remove_backlink) (SourceCollection* self, SourceBacklink* backlink);
+ void (*items_unlinking) (SourceCollection* self, GeeCollection* unlinking);
+ void (*items_relinked) (SourceCollection* self, GeeCollection* relinked);
+ void (*item_destroyed) (SourceCollection* self, DataSource* source);
+ void (*items_destroyed) (SourceCollection* self, GeeCollection* destroyed);
+ void (*unlinked_destroyed) (SourceCollection* self, DataSource* source);
+ void (*backlink_removed) (SourceCollection* self, SourceBacklink* backlink, GeeCollection* sources);
+};
+
+struct _DatabaseSourceCollection {
+ SourceCollection parent_instance;
+ DatabaseSourceCollectionPrivate * priv;
+};
+
+struct _DatabaseSourceCollectionClass {
+ SourceCollectionClass parent_class;
+};
+
+struct _DatabaseSourceCollectionPrivate {
+ GetSourceDatabaseKey source_key_func;
+ gpointer source_key_func_target;
+ GeeHashMap* map;
+};
+
+struct _SourceHoldingTank {
+ GTypeInstance parent_instance;
+ volatile int ref_count;
+ SourceHoldingTankPrivate * priv;
+};
+
+struct _SourceHoldingTankClass {
+ GTypeClass parent_class;
+ void (*finalize) (SourceHoldingTank *self);
+ void (*notify_contents_altered) (SourceHoldingTank* self, GeeCollection* added, GeeCollection* removed);
+ void (*contents_altered) (SourceHoldingTank* self, GeeCollection* added, GeeCollection* removed);
+};
+
+struct _DatabaseSourceHoldingTank {
+ SourceHoldingTank parent_instance;
+ DatabaseSourceHoldingTankPrivate * priv;
+};
+
+struct _DatabaseSourceHoldingTankClass {
+ SourceHoldingTankClass parent_class;
+};
+
+struct _DatabaseSourceHoldingTankPrivate {
+ GetSourceDatabaseKey get_key;
+ gpointer get_key_target;
+ GeeHashMap* map;
+};
+
+typedef gboolean (*SourceHoldingTankCheckToKeep) (DataSource* source, Alteration* alteration, void* user_data);
+
+static gpointer database_source_collection_parent_class = NULL;
+static gpointer database_source_holding_tank_parent_class = NULL;
+
+GType data_object_get_type (void) G_GNUC_CONST;
+GType data_source_get_type (void) G_GNUC_CONST;
+gpointer data_collection_ref (gpointer instance);
+void data_collection_unref (gpointer instance);
+GParamSpec* param_spec_data_collection (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_data_collection (GValue* value, gpointer v_object);
+void value_take_data_collection (GValue* value, gpointer v_object);
+gpointer value_get_data_collection (const GValue* value);
+GType data_collection_get_type (void) G_GNUC_CONST;
+gpointer alteration_ref (gpointer instance);
+void alteration_unref (gpointer instance);
+GParamSpec* param_spec_alteration (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_alteration (GValue* value, gpointer v_object);
+void value_take_alteration (GValue* value, gpointer v_object);
+gpointer value_get_alteration (const GValue* value);
+GType alteration_get_type (void) G_GNUC_CONST;
+GType marker_get_type (void) G_GNUC_CONST;
+GType source_collection_get_type (void) G_GNUC_CONST;
+gpointer source_backlink_ref (gpointer instance);
+void source_backlink_unref (gpointer instance);
+GParamSpec* param_spec_source_backlink (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_source_backlink (GValue* value, gpointer v_object);
+void value_take_source_backlink (GValue* value, gpointer v_object);
+gpointer value_get_source_backlink (const GValue* value);
+GType source_backlink_get_type (void) G_GNUC_CONST;
+GType database_source_collection_get_type (void) G_GNUC_CONST;
+#define DATABASE_SOURCE_COLLECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_DATABASE_SOURCE_COLLECTION, DatabaseSourceCollectionPrivate))
+enum {
+ DATABASE_SOURCE_COLLECTION_DUMMY_PROPERTY
+};
+guint int64_hash (gint64* n);
+static guint _int64_hash_gee_hash_data_func (gconstpointer v, gpointer self);
+gboolean int64_equal (gint64* a, gint64* b);
+static gboolean _int64_equal_gee_equal_data_func (gconstpointer a, gconstpointer b, gpointer self);
+static gint64* _int64_dup (gint64* self);
+DatabaseSourceCollection* database_source_collection_construct (GType object_type, const gchar* name, GetSourceDatabaseKey source_key_func, void* source_key_func_target);
+SourceCollection* source_collection_construct (GType object_type, const gchar* name);
+static void database_source_collection_real_notify_items_added (DataCollection* base, GeeIterable* added);
+void data_collection_notify_items_added (DataCollection* self, GeeIterable* added);
+static void database_source_collection_real_notify_items_removed (DataCollection* base, GeeIterable* removed);
+void data_collection_notify_items_removed (DataCollection* self, GeeIterable* removed);
+DataSource* database_source_collection_fetch_by_key (DatabaseSourceCollection* self, gint64 key);
+static void database_source_collection_finalize (DataCollection* obj);
+gpointer source_holding_tank_ref (gpointer instance);
+void source_holding_tank_unref (gpointer instance);
+GParamSpec* param_spec_source_holding_tank (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_source_holding_tank (GValue* value, gpointer v_object);
+void value_take_source_holding_tank (GValue* value, gpointer v_object);
+gpointer value_get_source_holding_tank (const GValue* value);
+GType source_holding_tank_get_type (void) G_GNUC_CONST;
+GType database_source_holding_tank_get_type (void) G_GNUC_CONST;
+#define DATABASE_SOURCE_HOLDING_TANK_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_DATABASE_SOURCE_HOLDING_TANK, DatabaseSourceHoldingTankPrivate))
+enum {
+ DATABASE_SOURCE_HOLDING_TANK_DUMMY_PROPERTY
+};
+DatabaseSourceHoldingTank* database_source_holding_tank_new (SourceCollection* sources, SourceHoldingTankCheckToKeep check_to_keep, void* check_to_keep_target, GetSourceDatabaseKey get_key, void* get_key_target);
+DatabaseSourceHoldingTank* database_source_holding_tank_construct (GType object_type, SourceCollection* sources, SourceHoldingTankCheckToKeep check_to_keep, void* check_to_keep_target, GetSourceDatabaseKey get_key, void* get_key_target);
+SourceHoldingTank* source_holding_tank_new (SourceCollection* sources, SourceHoldingTankCheckToKeep check_to_keep, void* check_to_keep_target);
+SourceHoldingTank* source_holding_tank_construct (GType object_type, SourceCollection* sources, SourceHoldingTankCheckToKeep check_to_keep, void* check_to_keep_target);
+DataSource* database_source_holding_tank_get_by_id (DatabaseSourceHoldingTank* self, gint64 id);
+static void database_source_holding_tank_real_notify_contents_altered (SourceHoldingTank* base, GeeCollection* added, GeeCollection* removed);
+void source_holding_tank_notify_contents_altered (SourceHoldingTank* self, GeeCollection* added, GeeCollection* removed);
+static void database_source_holding_tank_finalize (SourceHoldingTank* obj);
+
+
+static guint _int64_hash_gee_hash_data_func (gconstpointer v, gpointer self) {
+ guint result;
+ result = int64_hash ((gint64*) v);
+#line 17 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ return result;
+#line 327 "DatabaseSourceCollection.c"
+}
+
+
+static gboolean _int64_equal_gee_equal_data_func (gconstpointer a, gconstpointer b, gpointer self) {
+ gboolean result;
+ result = int64_equal ((gint64*) a, (gint64*) b);
+#line 17 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ return result;
+#line 336 "DatabaseSourceCollection.c"
+}
+
+
+static gint64* _int64_dup (gint64* self) {
+ gint64* dup;
+#line 17 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ dup = g_new0 (gint64, 1);
+#line 17 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ memcpy (dup, self, sizeof (gint64));
+#line 17 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ return dup;
+#line 348 "DatabaseSourceCollection.c"
+}
+
+
+DatabaseSourceCollection* database_source_collection_construct (GType object_type, const gchar* name, GetSourceDatabaseKey source_key_func, void* source_key_func_target) {
+ DatabaseSourceCollection* self = NULL;
+ const gchar* _tmp0_ = NULL;
+ GetSourceDatabaseKey _tmp1_ = NULL;
+ void* _tmp1__target = NULL;
+#line 20 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ g_return_val_if_fail (name != NULL, NULL);
+#line 21 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp0_ = name;
+#line 21 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ self = (DatabaseSourceCollection*) source_collection_construct (object_type, _tmp0_);
+#line 23 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp1_ = source_key_func;
+#line 23 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp1__target = source_key_func_target;
+#line 23 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ self->priv->source_key_func = _tmp1_;
+#line 23 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ self->priv->source_key_func_target = _tmp1__target;
+#line 20 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ return self;
+#line 373 "DatabaseSourceCollection.c"
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+#line 28 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ return self ? g_object_ref (self) : NULL;
+#line 380 "DatabaseSourceCollection.c"
+}
+
+
+static void database_source_collection_real_notify_items_added (DataCollection* base, GeeIterable* added) {
+ DatabaseSourceCollection * self;
+ GeeIterable* _tmp17_ = NULL;
+#line 26 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_DATABASE_SOURCE_COLLECTION, DatabaseSourceCollection);
+#line 26 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ g_return_if_fail (GEE_IS_ITERABLE (added));
+#line 391 "DatabaseSourceCollection.c"
+ {
+ GeeIterator* _object_it = NULL;
+ GeeIterable* _tmp0_ = NULL;
+ GeeIterator* _tmp1_ = NULL;
+#line 27 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp0_ = added;
+#line 27 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp1_ = gee_iterable_iterator (_tmp0_);
+#line 27 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _object_it = _tmp1_;
+#line 27 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ while (TRUE) {
+#line 404 "DatabaseSourceCollection.c"
+ GeeIterator* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+ DataObject* object = NULL;
+ GeeIterator* _tmp4_ = NULL;
+ gpointer _tmp5_ = NULL;
+ DataSource* source = NULL;
+ DataObject* _tmp6_ = NULL;
+ DataSource* _tmp7_ = NULL;
+ gint64 key = 0LL;
+ GetSourceDatabaseKey _tmp8_ = NULL;
+ void* _tmp8__target = NULL;
+ DataSource* _tmp9_ = NULL;
+ gint64 _tmp10_ = 0LL;
+ GeeHashMap* _tmp11_ = NULL;
+ gint64 _tmp12_ = 0LL;
+ gboolean _tmp13_ = FALSE;
+ GeeHashMap* _tmp14_ = NULL;
+ gint64 _tmp15_ = 0LL;
+ DataSource* _tmp16_ = NULL;
+#line 27 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp2_ = _object_it;
+#line 27 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp3_ = gee_iterator_next (_tmp2_);
+#line 27 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ if (!_tmp3_) {
+#line 27 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ break;
+#line 432 "DatabaseSourceCollection.c"
+ }
+#line 27 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp4_ = _object_it;
+#line 27 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp5_ = gee_iterator_get (_tmp4_);
+#line 27 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ object = (DataObject*) _tmp5_;
+#line 28 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp6_ = object;
+#line 28 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp7_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, TYPE_DATA_SOURCE, DataSource));
+#line 28 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ source = _tmp7_;
+#line 29 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp8_ = self->priv->source_key_func;
+#line 29 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp8__target = self->priv->source_key_func_target;
+#line 29 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp9_ = source;
+#line 29 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp10_ = _tmp8_ (_tmp9_, _tmp8__target);
+#line 29 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ key = _tmp10_;
+#line 31 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp11_ = self->priv->map;
+#line 31 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp12_ = key;
+#line 31 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp13_ = gee_abstract_map_has_key (G_TYPE_CHECK_INSTANCE_CAST (_tmp11_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), &_tmp12_);
+#line 31 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _vala_assert (!_tmp13_, "!map.has_key(key)");
+#line 33 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp14_ = self->priv->map;
+#line 33 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp15_ = key;
+#line 33 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp16_ = source;
+#line 33 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ gee_abstract_map_set (G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), &_tmp15_, _tmp16_);
+#line 27 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _g_object_unref0 (source);
+#line 27 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _g_object_unref0 (object);
+#line 476 "DatabaseSourceCollection.c"
+ }
+#line 27 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _g_object_unref0 (_object_it);
+#line 480 "DatabaseSourceCollection.c"
+ }
+#line 36 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp17_ = added;
+#line 36 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ DATA_COLLECTION_CLASS (database_source_collection_parent_class)->notify_items_added (G_TYPE_CHECK_INSTANCE_CAST (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_SOURCE_COLLECTION, SourceCollection), TYPE_DATA_COLLECTION, DataCollection), _tmp17_);
+#line 486 "DatabaseSourceCollection.c"
+}
+
+
+static void database_source_collection_real_notify_items_removed (DataCollection* base, GeeIterable* removed) {
+ DatabaseSourceCollection * self;
+ GeeIterable* _tmp13_ = NULL;
+#line 39 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_DATABASE_SOURCE_COLLECTION, DatabaseSourceCollection);
+#line 39 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ g_return_if_fail (GEE_IS_ITERABLE (removed));
+#line 497 "DatabaseSourceCollection.c"
+ {
+ GeeIterator* _object_it = NULL;
+ GeeIterable* _tmp0_ = NULL;
+ GeeIterator* _tmp1_ = NULL;
+#line 40 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp0_ = removed;
+#line 40 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp1_ = gee_iterable_iterator (_tmp0_);
+#line 40 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _object_it = _tmp1_;
+#line 40 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ while (TRUE) {
+#line 510 "DatabaseSourceCollection.c"
+ GeeIterator* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+ DataObject* object = NULL;
+ GeeIterator* _tmp4_ = NULL;
+ gpointer _tmp5_ = NULL;
+ gint64 key = 0LL;
+ GetSourceDatabaseKey _tmp6_ = NULL;
+ void* _tmp6__target = NULL;
+ DataObject* _tmp7_ = NULL;
+ gint64 _tmp8_ = 0LL;
+ gboolean is_removed = FALSE;
+ GeeHashMap* _tmp9_ = NULL;
+ gint64 _tmp10_ = 0LL;
+ gboolean _tmp11_ = FALSE;
+ gboolean _tmp12_ = FALSE;
+#line 40 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp2_ = _object_it;
+#line 40 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp3_ = gee_iterator_next (_tmp2_);
+#line 40 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ if (!_tmp3_) {
+#line 40 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ break;
+#line 534 "DatabaseSourceCollection.c"
+ }
+#line 40 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp4_ = _object_it;
+#line 40 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp5_ = gee_iterator_get (_tmp4_);
+#line 40 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ object = (DataObject*) _tmp5_;
+#line 41 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp6_ = self->priv->source_key_func;
+#line 41 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp6__target = self->priv->source_key_func_target;
+#line 41 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp7_ = object;
+#line 41 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp8_ = _tmp6_ (G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, TYPE_DATA_SOURCE, DataSource), _tmp6__target);
+#line 41 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ key = _tmp8_;
+#line 43 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp9_ = self->priv->map;
+#line 43 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp10_ = key;
+#line 43 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp11_ = gee_abstract_map_unset (G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), &_tmp10_, NULL);
+#line 43 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ is_removed = _tmp11_;
+#line 44 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp12_ = is_removed;
+#line 44 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _vala_assert (_tmp12_, "is_removed");
+#line 40 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _g_object_unref0 (object);
+#line 566 "DatabaseSourceCollection.c"
+ }
+#line 40 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _g_object_unref0 (_object_it);
+#line 570 "DatabaseSourceCollection.c"
+ }
+#line 47 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp13_ = removed;
+#line 47 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ DATA_COLLECTION_CLASS (database_source_collection_parent_class)->notify_items_removed (G_TYPE_CHECK_INSTANCE_CAST (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_SOURCE_COLLECTION, SourceCollection), TYPE_DATA_COLLECTION, DataCollection), _tmp13_);
+#line 576 "DatabaseSourceCollection.c"
+}
+
+
+DataSource* database_source_collection_fetch_by_key (DatabaseSourceCollection* self, gint64 key) {
+ DataSource* result = NULL;
+ GeeHashMap* _tmp0_ = NULL;
+ gint64 _tmp1_ = 0LL;
+ gpointer _tmp2_ = NULL;
+#line 50 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ g_return_val_if_fail (IS_DATABASE_SOURCE_COLLECTION (self), NULL);
+#line 51 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp0_ = self->priv->map;
+#line 51 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp1_ = key;
+#line 51 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp2_ = gee_abstract_map_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), &_tmp1_);
+#line 51 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ result = (DataSource*) _tmp2_;
+#line 51 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ return result;
+#line 597 "DatabaseSourceCollection.c"
+}
+
+
+static void database_source_collection_class_init (DatabaseSourceCollectionClass * klass) {
+#line 15 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ database_source_collection_parent_class = g_type_class_peek_parent (klass);
+#line 15 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ ((DataCollectionClass *) klass)->finalize = database_source_collection_finalize;
+#line 15 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ g_type_class_add_private (klass, sizeof (DatabaseSourceCollectionPrivate));
+#line 15 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ ((DataCollectionClass *) klass)->notify_items_added = database_source_collection_real_notify_items_added;
+#line 15 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ ((DataCollectionClass *) klass)->notify_items_removed = database_source_collection_real_notify_items_removed;
+#line 612 "DatabaseSourceCollection.c"
+}
+
+
+static void database_source_collection_instance_init (DatabaseSourceCollection * self) {
+ GeeHashMap* _tmp0_ = NULL;
+#line 15 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ self->priv = DATABASE_SOURCE_COLLECTION_GET_PRIVATE (self);
+#line 17 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp0_ = gee_hash_map_new (G_TYPE_INT64, (GBoxedCopyFunc) _int64_dup, g_free, TYPE_DATA_SOURCE, (GBoxedCopyFunc) g_object_ref, g_object_unref, _int64_hash_gee_hash_data_func, NULL, NULL, _int64_equal_gee_equal_data_func, NULL, NULL, NULL, NULL, NULL);
+#line 17 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ self->priv->map = _tmp0_;
+#line 624 "DatabaseSourceCollection.c"
+}
+
+
+static void database_source_collection_finalize (DataCollection* obj) {
+ DatabaseSourceCollection * self;
+#line 15 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_DATABASE_SOURCE_COLLECTION, DatabaseSourceCollection);
+#line 17 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _g_object_unref0 (self->priv->map);
+#line 15 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ DATA_COLLECTION_CLASS (database_source_collection_parent_class)->finalize (obj);
+#line 636 "DatabaseSourceCollection.c"
+}
+
+
+GType database_source_collection_get_type (void) {
+ static volatile gsize database_source_collection_type_id__volatile = 0;
+ if (g_once_init_enter (&database_source_collection_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (DatabaseSourceCollectionClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) database_source_collection_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (DatabaseSourceCollection), 0, (GInstanceInitFunc) database_source_collection_instance_init, NULL };
+ GType database_source_collection_type_id;
+ database_source_collection_type_id = g_type_register_static (TYPE_SOURCE_COLLECTION, "DatabaseSourceCollection", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
+ g_once_init_leave (&database_source_collection_type_id__volatile, database_source_collection_type_id);
+ }
+ return database_source_collection_type_id__volatile;
+}
+
+
+DatabaseSourceHoldingTank* database_source_holding_tank_construct (GType object_type, SourceCollection* sources, SourceHoldingTankCheckToKeep check_to_keep, void* check_to_keep_target, GetSourceDatabaseKey get_key, void* get_key_target) {
+ DatabaseSourceHoldingTank* self = NULL;
+ SourceCollection* _tmp0_ = NULL;
+ SourceHoldingTankCheckToKeep _tmp1_ = NULL;
+ void* _tmp1__target = NULL;
+ GetSourceDatabaseKey _tmp2_ = NULL;
+ void* _tmp2__target = NULL;
+#line 60 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ g_return_val_if_fail (IS_SOURCE_COLLECTION (sources), NULL);
+#line 62 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp0_ = sources;
+#line 62 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp1_ = check_to_keep;
+#line 62 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp1__target = check_to_keep_target;
+#line 62 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ self = (DatabaseSourceHoldingTank*) source_holding_tank_construct (object_type, _tmp0_, _tmp1_, _tmp1__target);
+#line 64 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp2_ = get_key;
+#line 64 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp2__target = get_key_target;
+#line 64 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ self->priv->get_key = _tmp2_;
+#line 64 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ self->priv->get_key_target = _tmp2__target;
+#line 60 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ return self;
+#line 679 "DatabaseSourceCollection.c"
+}
+
+
+DatabaseSourceHoldingTank* database_source_holding_tank_new (SourceCollection* sources, SourceHoldingTankCheckToKeep check_to_keep, void* check_to_keep_target, GetSourceDatabaseKey get_key, void* get_key_target) {
+#line 60 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ return database_source_holding_tank_construct (TYPE_DATABASE_SOURCE_HOLDING_TANK, sources, check_to_keep, check_to_keep_target, get_key, get_key_target);
+#line 686 "DatabaseSourceCollection.c"
+}
+
+
+DataSource* database_source_holding_tank_get_by_id (DatabaseSourceHoldingTank* self, gint64 id) {
+ DataSource* result = NULL;
+ GeeHashMap* _tmp0_ = NULL;
+ gint64 _tmp1_ = 0LL;
+ gpointer _tmp2_ = NULL;
+#line 67 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ g_return_val_if_fail (IS_DATABASE_SOURCE_HOLDING_TANK (self), NULL);
+#line 68 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp0_ = self->priv->map;
+#line 68 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp1_ = id;
+#line 68 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp2_ = gee_abstract_map_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), &_tmp1_);
+#line 68 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ result = (DataSource*) _tmp2_;
+#line 68 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ return result;
+#line 707 "DatabaseSourceCollection.c"
+}
+
+
+static void database_source_holding_tank_real_notify_contents_altered (SourceHoldingTank* base, GeeCollection* added, GeeCollection* removed) {
+ DatabaseSourceHoldingTank * self;
+ GeeCollection* _tmp0_ = NULL;
+ GeeCollection* _tmp12_ = NULL;
+ GeeCollection* _tmp23_ = NULL;
+ GeeCollection* _tmp24_ = NULL;
+#line 71 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_DATABASE_SOURCE_HOLDING_TANK, DatabaseSourceHoldingTank);
+#line 71 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ g_return_if_fail ((added == NULL) || GEE_IS_COLLECTION (added));
+#line 71 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ g_return_if_fail ((removed == NULL) || GEE_IS_COLLECTION (removed));
+#line 73 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp0_ = added;
+#line 73 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ if (_tmp0_ != NULL) {
+#line 727 "DatabaseSourceCollection.c"
+ {
+ GeeIterator* _source_it = NULL;
+ GeeCollection* _tmp1_ = NULL;
+ GeeIterator* _tmp2_ = NULL;
+#line 74 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp1_ = added;
+#line 74 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp2_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 74 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _source_it = _tmp2_;
+#line 74 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ while (TRUE) {
+#line 740 "DatabaseSourceCollection.c"
+ GeeIterator* _tmp3_ = NULL;
+ gboolean _tmp4_ = FALSE;
+ DataSource* source = NULL;
+ GeeIterator* _tmp5_ = NULL;
+ gpointer _tmp6_ = NULL;
+ GeeHashMap* _tmp7_ = NULL;
+ GetSourceDatabaseKey _tmp8_ = NULL;
+ void* _tmp8__target = NULL;
+ DataSource* _tmp9_ = NULL;
+ gint64 _tmp10_ = 0LL;
+ DataSource* _tmp11_ = NULL;
+#line 74 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp3_ = _source_it;
+#line 74 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp4_ = gee_iterator_next (_tmp3_);
+#line 74 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ if (!_tmp4_) {
+#line 74 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ break;
+#line 760 "DatabaseSourceCollection.c"
+ }
+#line 74 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp5_ = _source_it;
+#line 74 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp6_ = gee_iterator_get (_tmp5_);
+#line 74 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ source = (DataSource*) _tmp6_;
+#line 75 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp7_ = self->priv->map;
+#line 75 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp8_ = self->priv->get_key;
+#line 75 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp8__target = self->priv->get_key_target;
+#line 75 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp9_ = source;
+#line 75 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp10_ = _tmp8_ (_tmp9_, _tmp8__target);
+#line 75 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp11_ = source;
+#line 75 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ gee_abstract_map_set (G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), &_tmp10_, _tmp11_);
+#line 74 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _g_object_unref0 (source);
+#line 784 "DatabaseSourceCollection.c"
+ }
+#line 74 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _g_object_unref0 (_source_it);
+#line 788 "DatabaseSourceCollection.c"
+ }
+ }
+#line 78 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp12_ = removed;
+#line 78 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ if (_tmp12_ != NULL) {
+#line 795 "DatabaseSourceCollection.c"
+ {
+ GeeIterator* _source_it = NULL;
+ GeeCollection* _tmp13_ = NULL;
+ GeeIterator* _tmp14_ = NULL;
+#line 79 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp13_ = removed;
+#line 79 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp14_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp13_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 79 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _source_it = _tmp14_;
+#line 79 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ while (TRUE) {
+#line 808 "DatabaseSourceCollection.c"
+ GeeIterator* _tmp15_ = NULL;
+ gboolean _tmp16_ = FALSE;
+ DataSource* source = NULL;
+ GeeIterator* _tmp17_ = NULL;
+ gpointer _tmp18_ = NULL;
+ GeeHashMap* _tmp19_ = NULL;
+ GetSourceDatabaseKey _tmp20_ = NULL;
+ void* _tmp20__target = NULL;
+ DataSource* _tmp21_ = NULL;
+ gint64 _tmp22_ = 0LL;
+#line 79 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp15_ = _source_it;
+#line 79 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp16_ = gee_iterator_next (_tmp15_);
+#line 79 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ if (!_tmp16_) {
+#line 79 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ break;
+#line 827 "DatabaseSourceCollection.c"
+ }
+#line 79 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp17_ = _source_it;
+#line 79 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp18_ = gee_iterator_get (_tmp17_);
+#line 79 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ source = (DataSource*) _tmp18_;
+#line 80 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp19_ = self->priv->map;
+#line 80 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp20_ = self->priv->get_key;
+#line 80 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp20__target = self->priv->get_key_target;
+#line 80 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp21_ = source;
+#line 80 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp22_ = _tmp20_ (_tmp21_, _tmp20__target);
+#line 80 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ gee_abstract_map_unset (G_TYPE_CHECK_INSTANCE_CAST (_tmp19_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), &_tmp22_, NULL);
+#line 79 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _g_object_unref0 (source);
+#line 849 "DatabaseSourceCollection.c"
+ }
+#line 79 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _g_object_unref0 (_source_it);
+#line 853 "DatabaseSourceCollection.c"
+ }
+ }
+#line 83 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp23_ = added;
+#line 83 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp24_ = removed;
+#line 83 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ SOURCE_HOLDING_TANK_CLASS (database_source_holding_tank_parent_class)->notify_contents_altered (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_SOURCE_HOLDING_TANK, SourceHoldingTank), _tmp23_, _tmp24_);
+#line 862 "DatabaseSourceCollection.c"
+}
+
+
+static void database_source_holding_tank_class_init (DatabaseSourceHoldingTankClass * klass) {
+#line 55 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ database_source_holding_tank_parent_class = g_type_class_peek_parent (klass);
+#line 55 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ ((SourceHoldingTankClass *) klass)->finalize = database_source_holding_tank_finalize;
+#line 55 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ g_type_class_add_private (klass, sizeof (DatabaseSourceHoldingTankPrivate));
+#line 55 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ ((SourceHoldingTankClass *) klass)->notify_contents_altered = database_source_holding_tank_real_notify_contents_altered;
+#line 875 "DatabaseSourceCollection.c"
+}
+
+
+static void database_source_holding_tank_instance_init (DatabaseSourceHoldingTank * self) {
+ GeeHashMap* _tmp0_ = NULL;
+#line 55 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ self->priv = DATABASE_SOURCE_HOLDING_TANK_GET_PRIVATE (self);
+#line 57 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _tmp0_ = gee_hash_map_new (G_TYPE_INT64, (GBoxedCopyFunc) _int64_dup, g_free, TYPE_DATA_SOURCE, (GBoxedCopyFunc) g_object_ref, g_object_unref, _int64_hash_gee_hash_data_func, NULL, NULL, _int64_equal_gee_equal_data_func, NULL, NULL, NULL, NULL, NULL);
+#line 57 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ self->priv->map = _tmp0_;
+#line 887 "DatabaseSourceCollection.c"
+}
+
+
+static void database_source_holding_tank_finalize (SourceHoldingTank* obj) {
+ DatabaseSourceHoldingTank * self;
+#line 55 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_DATABASE_SOURCE_HOLDING_TANK, DatabaseSourceHoldingTank);
+#line 57 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ _g_object_unref0 (self->priv->map);
+#line 55 "/home/jens/Source/shotwell/src/core/DatabaseSourceCollection.vala"
+ SOURCE_HOLDING_TANK_CLASS (database_source_holding_tank_parent_class)->finalize (obj);
+#line 899 "DatabaseSourceCollection.c"
+}
+
+
+GType database_source_holding_tank_get_type (void) {
+ static volatile gsize database_source_holding_tank_type_id__volatile = 0;
+ if (g_once_init_enter (&database_source_holding_tank_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (DatabaseSourceHoldingTankClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) database_source_holding_tank_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (DatabaseSourceHoldingTank), 0, (GInstanceInitFunc) database_source_holding_tank_instance_init, NULL };
+ GType database_source_holding_tank_type_id;
+ database_source_holding_tank_type_id = g_type_register_static (TYPE_SOURCE_HOLDING_TANK, "DatabaseSourceHoldingTank", &g_define_type_info, 0);
+ g_once_init_leave (&database_source_holding_tank_type_id__volatile, database_source_holding_tank_type_id);
+ }
+ return database_source_holding_tank_type_id__volatile;
+}
+
+
+
diff --git a/src/core/SourceCollection.c b/src/core/SourceCollection.c
new file mode 100644
index 0000000..6321f92
--- /dev/null
+++ b/src/core/SourceCollection.c
@@ -0,0 +1,1694 @@
+/* SourceCollection.c generated by valac 0.32.1, the Vala compiler
+ * generated from SourceCollection.vala, do not modify */
+
+/* Copyright 2016 Software Freedom Conservancy Inc.
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later). See the COPYING file in this distribution.
+ */
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gee.h>
+
+
+#define TYPE_DATA_COLLECTION (data_collection_get_type ())
+#define DATA_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_COLLECTION, DataCollection))
+#define DATA_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_COLLECTION, DataCollectionClass))
+#define IS_DATA_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_COLLECTION))
+#define IS_DATA_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_COLLECTION))
+#define DATA_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_COLLECTION, DataCollectionClass))
+
+typedef struct _DataCollection DataCollection;
+typedef struct _DataCollectionClass DataCollectionClass;
+typedef struct _DataCollectionPrivate DataCollectionPrivate;
+
+#define TYPE_DATA_OBJECT (data_object_get_type ())
+#define DATA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_OBJECT, DataObject))
+#define DATA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_OBJECT, DataObjectClass))
+#define IS_DATA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_OBJECT))
+#define IS_DATA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_OBJECT))
+#define DATA_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_OBJECT, DataObjectClass))
+
+typedef struct _DataObject DataObject;
+typedef struct _DataObjectClass DataObjectClass;
+
+#define TYPE_ALTERATION (alteration_get_type ())
+#define ALTERATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ALTERATION, Alteration))
+#define ALTERATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ALTERATION, AlterationClass))
+#define IS_ALTERATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ALTERATION))
+#define IS_ALTERATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ALTERATION))
+#define ALTERATION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ALTERATION, AlterationClass))
+
+typedef struct _Alteration Alteration;
+typedef struct _AlterationClass AlterationClass;
+
+#define TYPE_MARKER (marker_get_type ())
+#define MARKER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_MARKER, Marker))
+#define IS_MARKER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_MARKER))
+#define MARKER_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TYPE_MARKER, MarkerIface))
+
+typedef struct _Marker Marker;
+typedef struct _MarkerIface MarkerIface;
+
+#define TYPE_SOURCE_COLLECTION (source_collection_get_type ())
+#define SOURCE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SOURCE_COLLECTION, SourceCollection))
+#define SOURCE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SOURCE_COLLECTION, SourceCollectionClass))
+#define IS_SOURCE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SOURCE_COLLECTION))
+#define IS_SOURCE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SOURCE_COLLECTION))
+#define SOURCE_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SOURCE_COLLECTION, SourceCollectionClass))
+
+typedef struct _SourceCollection SourceCollection;
+typedef struct _SourceCollectionClass SourceCollectionClass;
+typedef struct _SourceCollectionPrivate SourceCollectionPrivate;
+
+#define TYPE_DATA_SOURCE (data_source_get_type ())
+#define DATA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_SOURCE, DataSource))
+#define DATA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_SOURCE, DataSourceClass))
+#define IS_DATA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_SOURCE))
+#define IS_DATA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_SOURCE))
+#define DATA_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_SOURCE, DataSourceClass))
+
+typedef struct _DataSource DataSource;
+typedef struct _DataSourceClass DataSourceClass;
+
+#define TYPE_SOURCE_BACKLINK (source_backlink_get_type ())
+#define SOURCE_BACKLINK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SOURCE_BACKLINK, SourceBacklink))
+#define SOURCE_BACKLINK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SOURCE_BACKLINK, SourceBacklinkClass))
+#define IS_SOURCE_BACKLINK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SOURCE_BACKLINK))
+#define IS_SOURCE_BACKLINK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SOURCE_BACKLINK))
+#define SOURCE_BACKLINK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SOURCE_BACKLINK, SourceBacklinkClass))
+
+typedef struct _SourceBacklink SourceBacklink;
+typedef struct _SourceBacklinkClass SourceBacklinkClass;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+
+#define TYPE_THUMBNAIL_SOURCE (thumbnail_source_get_type ())
+#define THUMBNAIL_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_THUMBNAIL_SOURCE, ThumbnailSource))
+#define THUMBNAIL_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_THUMBNAIL_SOURCE, ThumbnailSourceClass))
+#define IS_THUMBNAIL_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_THUMBNAIL_SOURCE))
+#define IS_THUMBNAIL_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_THUMBNAIL_SOURCE))
+#define THUMBNAIL_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_THUMBNAIL_SOURCE, ThumbnailSourceClass))
+
+typedef struct _ThumbnailSource ThumbnailSource;
+typedef struct _ThumbnailSourceClass ThumbnailSourceClass;
+
+#define TYPE_MEDIA_SOURCE (media_source_get_type ())
+#define MEDIA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_MEDIA_SOURCE, MediaSource))
+#define MEDIA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_MEDIA_SOURCE, MediaSourceClass))
+#define IS_MEDIA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_MEDIA_SOURCE))
+#define IS_MEDIA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_MEDIA_SOURCE))
+#define MEDIA_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_MEDIA_SOURCE, MediaSourceClass))
+
+typedef struct _MediaSource MediaSource;
+typedef struct _MediaSourceClass MediaSourceClass;
+
+#define SOURCE_COLLECTION_TYPE_DESTROY_COUNTER (source_collection_destroy_counter_get_type ())
+#define SOURCE_COLLECTION_DESTROY_COUNTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SOURCE_COLLECTION_TYPE_DESTROY_COUNTER, SourceCollectionDestroyCounter))
+#define SOURCE_COLLECTION_DESTROY_COUNTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SOURCE_COLLECTION_TYPE_DESTROY_COUNTER, SourceCollectionDestroyCounterClass))
+#define SOURCE_COLLECTION_IS_DESTROY_COUNTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SOURCE_COLLECTION_TYPE_DESTROY_COUNTER))
+#define SOURCE_COLLECTION_IS_DESTROY_COUNTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SOURCE_COLLECTION_TYPE_DESTROY_COUNTER))
+#define SOURCE_COLLECTION_DESTROY_COUNTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SOURCE_COLLECTION_TYPE_DESTROY_COUNTER, SourceCollectionDestroyCounterClass))
+
+typedef struct _SourceCollectionDestroyCounter SourceCollectionDestroyCounter;
+typedef struct _SourceCollectionDestroyCounterClass SourceCollectionDestroyCounterClass;
+typedef struct _SourceCollectionDestroyCounterPrivate SourceCollectionDestroyCounterPrivate;
+#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
+#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
+#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
+#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+
+typedef gint64 (*Comparator) (void* a, void* b, void* user_data);
+typedef gboolean (*ComparatorPredicate) (DataObject* object, Alteration* alteration, void* user_data);
+typedef gboolean (*ProgressMonitor) (guint64 current, guint64 total, gboolean do_event_loop, void* user_data);
+struct _MarkerIface {
+ GTypeInterface parent_iface;
+ void (*mark) (Marker* self, DataObject* object);
+ void (*unmark) (Marker* self, DataObject* object);
+ gboolean (*toggle) (Marker* self, DataObject* object);
+ void (*mark_many) (Marker* self, GeeCollection* list);
+ void (*unmark_many) (Marker* self, GeeCollection* list);
+ void (*mark_all) (Marker* self);
+ gint (*get_count) (Marker* self);
+ GeeCollection* (*get_all) (Marker* self);
+};
+
+struct _DataCollection {
+ GTypeInstance parent_instance;
+ volatile int ref_count;
+ DataCollectionPrivate * priv;
+};
+
+struct _DataCollectionClass {
+ GTypeClass parent_class;
+ void (*finalize) (DataCollection *self);
+ gchar* (*to_string) (DataCollection* self);
+ void (*notify_items_added) (DataCollection* self, GeeIterable* added);
+ void (*notify_items_removed) (DataCollection* self, GeeIterable* removed);
+ void (*notify_contents_altered) (DataCollection* self, GeeIterable* added, GeeIterable* removed);
+ void (*notify_items_altered) (DataCollection* self, GeeMap* items);
+ void (*notify_ordering_changed) (DataCollection* self);
+ void (*notify_property_set) (DataCollection* self, const gchar* name, GValue* old, GValue* val);
+ void (*notify_property_cleared) (DataCollection* self, const gchar* name);
+ gboolean (*valid_type) (DataCollection* self, DataObject* object);
+ void (*set_comparator) (DataCollection* self, Comparator comparator, void* comparator_target, ComparatorPredicate predicate, void* predicate_target);
+ void (*reset_comparator) (DataCollection* self);
+ GeeCollection* (*get_all) (DataCollection* self);
+ gint (*get_count) (DataCollection* self);
+ DataObject* (*get_at) (DataCollection* self, gint index);
+ gint (*index_of) (DataCollection* self, DataObject* object);
+ gboolean (*contains) (DataCollection* self, DataObject* object);
+ gboolean (*add) (DataCollection* self, DataObject* object);
+ GeeCollection* (*add_many) (DataCollection* self, GeeCollection* objects, ProgressMonitor monitor, void* monitor_target);
+ void (*remove_marked) (DataCollection* self, Marker* m);
+ void (*clear) (DataCollection* self);
+ void (*close) (DataCollection* self);
+ void (*notify_frozen) (DataCollection* self);
+ void (*notify_thawed) (DataCollection* self);
+ void (*items_added) (DataCollection* self, GeeIterable* added);
+ void (*items_removed) (DataCollection* self, GeeIterable* removed);
+ void (*contents_altered) (DataCollection* self, GeeIterable* added, GeeIterable* removed);
+ void (*items_altered) (DataCollection* self, GeeMap* items);
+ void (*ordering_changed) (DataCollection* self);
+ void (*property_set) (DataCollection* self, const gchar* name, GValue* old, GValue* val);
+ void (*property_cleared) (DataCollection* self, const gchar* name);
+ void (*frozen) (DataCollection* self);
+ void (*thawed) (DataCollection* self);
+};
+
+struct _SourceCollection {
+ DataCollection parent_instance;
+ SourceCollectionPrivate * priv;
+};
+
+struct _SourceCollectionClass {
+ DataCollectionClass parent_class;
+ gboolean (*holds_type_of_source) (SourceCollection* self, DataSource* source);
+ void (*notify_items_unlinking) (SourceCollection* self, GeeCollection* unlinking);
+ void (*notify_items_relinked) (SourceCollection* self, GeeCollection* relinked);
+ void (*notify_item_destroyed) (SourceCollection* self, DataSource* source);
+ void (*notify_items_destroyed) (SourceCollection* self, GeeCollection* destroyed);
+ void (*notify_unlinked_destroyed) (SourceCollection* self, DataSource* unlinked);
+ void (*notify_backlink_removed) (SourceCollection* self, SourceBacklink* backlink, GeeCollection* sources);
+ gboolean (*has_backlink) (SourceCollection* self, SourceBacklink* backlink);
+ void (*remove_backlink) (SourceCollection* self, SourceBacklink* backlink);
+ void (*items_unlinking) (SourceCollection* self, GeeCollection* unlinking);
+ void (*items_relinked) (SourceCollection* self, GeeCollection* relinked);
+ void (*item_destroyed) (SourceCollection* self, DataSource* source);
+ void (*items_destroyed) (SourceCollection* self, GeeCollection* destroyed);
+ void (*unlinked_destroyed) (SourceCollection* self, DataSource* source);
+ void (*backlink_removed) (SourceCollection* self, SourceBacklink* backlink, GeeCollection* sources);
+};
+
+struct _SourceCollectionPrivate {
+ GeeMultiMap* backlinks;
+};
+
+typedef gboolean (*MarkedAction) (DataObject* object, GObject* user, void* user_data);
+struct _SourceCollectionDestroyCounter {
+ GObject parent_instance;
+ SourceCollectionDestroyCounterPrivate * priv;
+ Marker* remove_marker;
+ GeeArrayList* notify_list;
+ GeeArrayList* not_removed;
+};
+
+struct _SourceCollectionDestroyCounterClass {
+ GObjectClass parent_class;
+};
+
+
+static gpointer source_collection_parent_class = NULL;
+static gpointer source_collection_destroy_counter_parent_class = NULL;
+
+gpointer data_collection_ref (gpointer instance);
+void data_collection_unref (gpointer instance);
+GParamSpec* param_spec_data_collection (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_data_collection (GValue* value, gpointer v_object);
+void value_take_data_collection (GValue* value, gpointer v_object);
+gpointer value_get_data_collection (const GValue* value);
+GType data_collection_get_type (void) G_GNUC_CONST;
+GType data_object_get_type (void) G_GNUC_CONST;
+gpointer alteration_ref (gpointer instance);
+void alteration_unref (gpointer instance);
+GParamSpec* param_spec_alteration (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_alteration (GValue* value, gpointer v_object);
+void value_take_alteration (GValue* value, gpointer v_object);
+gpointer value_get_alteration (const GValue* value);
+GType alteration_get_type (void) G_GNUC_CONST;
+GType marker_get_type (void) G_GNUC_CONST;
+GType source_collection_get_type (void) G_GNUC_CONST;
+GType data_source_get_type (void) G_GNUC_CONST;
+gpointer source_backlink_ref (gpointer instance);
+void source_backlink_unref (gpointer instance);
+GParamSpec* param_spec_source_backlink (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_source_backlink (GValue* value, gpointer v_object);
+void value_take_source_backlink (GValue* value, gpointer v_object);
+gpointer value_get_source_backlink (const GValue* value);
+GType source_backlink_get_type (void) G_GNUC_CONST;
+#define SOURCE_COLLECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_SOURCE_COLLECTION, SourceCollectionPrivate))
+enum {
+ SOURCE_COLLECTION_DUMMY_PROPERTY
+};
+SourceCollection* source_collection_construct (GType object_type, const gchar* name);
+DataCollection* data_collection_new (const gchar* name);
+DataCollection* data_collection_construct (GType object_type, const gchar* name);
+gboolean source_collection_holds_type_of_source (SourceCollection* self, DataSource* source);
+static gboolean source_collection_real_holds_type_of_source (SourceCollection* self, DataSource* source);
+void source_collection_notify_items_unlinking (SourceCollection* self, GeeCollection* unlinking);
+static void source_collection_real_notify_items_unlinking (SourceCollection* self, GeeCollection* unlinking);
+void source_collection_notify_items_relinked (SourceCollection* self, GeeCollection* relinked);
+static void source_collection_real_notify_items_relinked (SourceCollection* self, GeeCollection* relinked);
+void source_collection_notify_item_destroyed (SourceCollection* self, DataSource* source);
+static void source_collection_real_notify_item_destroyed (SourceCollection* self, DataSource* source);
+void source_collection_notify_items_destroyed (SourceCollection* self, GeeCollection* destroyed);
+static void source_collection_real_notify_items_destroyed (SourceCollection* self, GeeCollection* destroyed);
+void source_collection_notify_unlinked_destroyed (SourceCollection* self, DataSource* unlinked);
+static void source_collection_real_notify_unlinked_destroyed (SourceCollection* self, DataSource* unlinked);
+void source_collection_notify_backlink_removed (SourceCollection* self, SourceBacklink* backlink, GeeCollection* sources);
+static void source_collection_real_notify_backlink_removed (SourceCollection* self, SourceBacklink* backlink, GeeCollection* sources);
+static gboolean source_collection_real_valid_type (DataCollection* base, DataObject* object);
+GType thumbnail_source_get_type (void) G_GNUC_CONST;
+GType media_source_get_type (void) G_GNUC_CONST;
+gint source_collection_destroy_marked (SourceCollection* self, Marker* marker, gboolean delete_backing, ProgressMonitor monitor, void* monitor_target, GeeList* not_removed);
+static GType source_collection_destroy_counter_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
+Marker* data_collection_start_marking (DataCollection* self);
+static SourceCollectionDestroyCounter* source_collection_destroy_counter_new (Marker* remove_marker);
+static SourceCollectionDestroyCounter* source_collection_destroy_counter_construct (GType object_type, Marker* remove_marker);
+void data_collection_act_on_marked (DataCollection* self, Marker* m, MarkedAction action, void* action_target, ProgressMonitor monitor, void* monitor_target, GObject* user);
+static gboolean source_collection_destroy_and_delete_source (SourceCollection* self, DataObject* object, GObject* user);
+static gboolean _source_collection_destroy_and_delete_source_marked_action (DataObject* object, GObject* user, gpointer self);
+static gboolean source_collection_destroy_source (SourceCollection* self, DataObject* object, GObject* user);
+static gboolean _source_collection_destroy_source_marked_action (DataObject* object, GObject* user, gpointer self);
+void data_collection_remove_marked (DataCollection* self, Marker* m);
+gboolean data_source_internal_delete_backing (DataSource* self, GError** error);
+void data_source_internal_mark_for_destroy (DataSource* self);
+void data_source_destroy (DataSource* self);
+void marker_mark (Marker* self, DataObject* object);
+void source_collection_internal_backlink_set (SourceCollection* self, DataSource* source, SourceBacklink* backlink);
+guint source_backlink_hash_func (SourceBacklink* backlink);
+static guint _source_backlink_hash_func_gee_hash_data_func (gconstpointer v, gpointer self);
+gboolean source_backlink_equal_func (SourceBacklink* alink, SourceBacklink* blink);
+static gboolean _source_backlink_equal_func_gee_equal_data_func (gconstpointer a, gconstpointer b, gpointer self);
+void source_collection_internal_backlink_removed (SourceCollection* self, DataSource* source, SourceBacklink* backlink);
+gboolean source_collection_has_backlink (SourceCollection* self, SourceBacklink* backlink);
+static gboolean source_collection_real_has_backlink (SourceCollection* self, SourceBacklink* backlink);
+GeeCollection* source_collection_unlink_marked (SourceCollection* self, Marker* marker, ProgressMonitor monitor, void* monitor_target);
+static gboolean source_collection_prepare_for_unlink (SourceCollection* self, DataObject* object, GObject* user);
+static gboolean _source_collection_prepare_for_unlink_marked_action (DataObject* object, GObject* user, gpointer self);
+Marker* data_collection_mark_many (DataCollection* self, GeeCollection* objects);
+void data_source_notify_unlinking (DataSource* self, SourceCollection* collection);
+void source_collection_relink (SourceCollection* self, DataSource* source);
+void data_source_notify_relinking (DataSource* self, SourceCollection* collection);
+gboolean data_collection_add (DataCollection* self, DataObject* object);
+GeeCollection* data_collection_get_singleton (DataObject* object);
+void data_source_notify_relinked (DataSource* self);
+void source_collection_relink_many (SourceCollection* self, GeeCollection* relink);
+GeeCollection* data_collection_add_many (DataCollection* self, GeeCollection* objects, ProgressMonitor monitor, void* monitor_target);
+void source_collection_remove_backlink (SourceCollection* self, SourceBacklink* backlink);
+static void source_collection_real_remove_backlink (SourceCollection* self, SourceBacklink* backlink);
+gboolean data_source_remove_backlink (DataSource* self, SourceBacklink* backlink);
+static void source_collection_real_items_unlinking (SourceCollection* self, GeeCollection* unlinking);
+static void source_collection_real_items_relinked (SourceCollection* self, GeeCollection* relinked);
+static void source_collection_real_item_destroyed (SourceCollection* self, DataSource* source);
+static void source_collection_real_items_destroyed (SourceCollection* self, GeeCollection* destroyed);
+static void source_collection_real_unlinked_destroyed (SourceCollection* self, DataSource* source);
+static void source_collection_real_backlink_removed (SourceCollection* self, SourceBacklink* backlink, GeeCollection* sources);
+static void g_cclosure_user_marshal_VOID__SOURCE_BACKLINK_OBJECT (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data);
+enum {
+ SOURCE_COLLECTION_DESTROY_COUNTER_DUMMY_PROPERTY
+};
+static void source_collection_destroy_counter_finalize (GObject* obj);
+static void source_collection_finalize (DataCollection* obj);
+
+
+SourceCollection* source_collection_construct (GType object_type, const gchar* name) {
+ SourceCollection* self = NULL;
+ const gchar* _tmp0_ = NULL;
+#line 50 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_val_if_fail (name != NULL, NULL);
+#line 51 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp0_ = name;
+#line 51 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ self = (SourceCollection*) data_collection_construct (object_type, _tmp0_);
+#line 50 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ return self;
+#line 340 "SourceCollection.c"
+}
+
+
+static gboolean source_collection_real_holds_type_of_source (SourceCollection* self, DataSource* source) {
+#line 54 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_critical ("Type `%s' does not implement abstract method `source_collection_holds_type_of_source'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+#line 54 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ return FALSE;
+#line 349 "SourceCollection.c"
+}
+
+
+gboolean source_collection_holds_type_of_source (SourceCollection* self, DataSource* source) {
+#line 54 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_val_if_fail (IS_SOURCE_COLLECTION (self), FALSE);
+#line 54 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ return SOURCE_COLLECTION_GET_CLASS (self)->holds_type_of_source (self, source);
+#line 358 "SourceCollection.c"
+}
+
+
+static void source_collection_real_notify_items_unlinking (SourceCollection* self, GeeCollection* unlinking) {
+ GeeCollection* _tmp0_ = NULL;
+#line 56 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (unlinking));
+#line 57 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp0_ = unlinking;
+#line 57 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_signal_emit_by_name (self, "items-unlinking", _tmp0_);
+#line 370 "SourceCollection.c"
+}
+
+
+void source_collection_notify_items_unlinking (SourceCollection* self, GeeCollection* unlinking) {
+#line 56 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (IS_SOURCE_COLLECTION (self));
+#line 56 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ SOURCE_COLLECTION_GET_CLASS (self)->notify_items_unlinking (self, unlinking);
+#line 379 "SourceCollection.c"
+}
+
+
+static void source_collection_real_notify_items_relinked (SourceCollection* self, GeeCollection* relinked) {
+ GeeCollection* _tmp0_ = NULL;
+#line 60 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (relinked));
+#line 61 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp0_ = relinked;
+#line 61 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_signal_emit_by_name (self, "items-relinked", _tmp0_);
+#line 391 "SourceCollection.c"
+}
+
+
+void source_collection_notify_items_relinked (SourceCollection* self, GeeCollection* relinked) {
+#line 60 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (IS_SOURCE_COLLECTION (self));
+#line 60 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ SOURCE_COLLECTION_GET_CLASS (self)->notify_items_relinked (self, relinked);
+#line 400 "SourceCollection.c"
+}
+
+
+static void source_collection_real_notify_item_destroyed (SourceCollection* self, DataSource* source) {
+ DataSource* _tmp0_ = NULL;
+#line 64 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (IS_DATA_SOURCE (source));
+#line 65 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp0_ = source;
+#line 65 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_signal_emit_by_name (self, "item-destroyed", _tmp0_);
+#line 412 "SourceCollection.c"
+}
+
+
+void source_collection_notify_item_destroyed (SourceCollection* self, DataSource* source) {
+#line 64 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (IS_SOURCE_COLLECTION (self));
+#line 64 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ SOURCE_COLLECTION_GET_CLASS (self)->notify_item_destroyed (self, source);
+#line 421 "SourceCollection.c"
+}
+
+
+static void source_collection_real_notify_items_destroyed (SourceCollection* self, GeeCollection* destroyed) {
+ GeeCollection* _tmp0_ = NULL;
+#line 68 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (destroyed));
+#line 69 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp0_ = destroyed;
+#line 69 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_signal_emit_by_name (self, "items-destroyed", _tmp0_);
+#line 433 "SourceCollection.c"
+}
+
+
+void source_collection_notify_items_destroyed (SourceCollection* self, GeeCollection* destroyed) {
+#line 68 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (IS_SOURCE_COLLECTION (self));
+#line 68 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ SOURCE_COLLECTION_GET_CLASS (self)->notify_items_destroyed (self, destroyed);
+#line 442 "SourceCollection.c"
+}
+
+
+static void source_collection_real_notify_unlinked_destroyed (SourceCollection* self, DataSource* unlinked) {
+ DataSource* _tmp0_ = NULL;
+#line 73 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (IS_DATA_SOURCE (unlinked));
+#line 74 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp0_ = unlinked;
+#line 74 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_signal_emit_by_name (self, "unlinked-destroyed", _tmp0_);
+#line 454 "SourceCollection.c"
+}
+
+
+void source_collection_notify_unlinked_destroyed (SourceCollection* self, DataSource* unlinked) {
+#line 73 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (IS_SOURCE_COLLECTION (self));
+#line 73 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ SOURCE_COLLECTION_GET_CLASS (self)->notify_unlinked_destroyed (self, unlinked);
+#line 463 "SourceCollection.c"
+}
+
+
+static void source_collection_real_notify_backlink_removed (SourceCollection* self, SourceBacklink* backlink, GeeCollection* sources) {
+ SourceBacklink* _tmp0_ = NULL;
+ GeeCollection* _tmp1_ = NULL;
+#line 77 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (IS_SOURCE_BACKLINK (backlink));
+#line 77 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (sources));
+#line 79 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp0_ = backlink;
+#line 79 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp1_ = sources;
+#line 79 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_signal_emit_by_name (self, "backlink-removed", _tmp0_, _tmp1_);
+#line 480 "SourceCollection.c"
+}
+
+
+void source_collection_notify_backlink_removed (SourceCollection* self, SourceBacklink* backlink, GeeCollection* sources) {
+#line 77 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (IS_SOURCE_COLLECTION (self));
+#line 77 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ SOURCE_COLLECTION_GET_CLASS (self)->notify_backlink_removed (self, backlink, sources);
+#line 489 "SourceCollection.c"
+}
+
+
+static gboolean source_collection_real_valid_type (DataCollection* base, DataObject* object) {
+ SourceCollection * self;
+ gboolean result = FALSE;
+ DataObject* _tmp0_ = NULL;
+#line 82 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_SOURCE_COLLECTION, SourceCollection);
+#line 82 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (object), FALSE);
+#line 83 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp0_ = object;
+#line 83 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ result = G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, TYPE_DATA_SOURCE);
+#line 83 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ return result;
+#line 507 "SourceCollection.c"
+}
+
+
+static gboolean _source_collection_destroy_and_delete_source_marked_action (DataObject* object, GObject* user, gpointer self) {
+ gboolean result;
+ result = source_collection_destroy_and_delete_source ((SourceCollection*) self, object, user);
+#line 93 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ return result;
+#line 516 "SourceCollection.c"
+}
+
+
+static gboolean _source_collection_destroy_source_marked_action (DataObject* object, GObject* user, gpointer self) {
+ gboolean result;
+ result = source_collection_destroy_source ((SourceCollection*) self, object, user);
+#line 95 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ return result;
+#line 525 "SourceCollection.c"
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+#line 98 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ return self ? g_object_ref (self) : NULL;
+#line 532 "SourceCollection.c"
+}
+
+
+gint source_collection_destroy_marked (SourceCollection* self, Marker* marker, gboolean delete_backing, ProgressMonitor monitor, void* monitor_target, GeeList* not_removed) {
+ gint result = 0;
+ SourceCollectionDestroyCounter* counter = NULL;
+ Marker* _tmp0_ = NULL;
+ Marker* _tmp1_ = NULL;
+ SourceCollectionDestroyCounter* _tmp2_ = NULL;
+ SourceCollectionDestroyCounter* _tmp3_ = NULL;
+ gboolean _tmp4_ = FALSE;
+ SourceCollectionDestroyCounter* _tmp24_ = NULL;
+ GeeArrayList* _tmp25_ = NULL;
+ SourceCollectionDestroyCounter* _tmp26_ = NULL;
+ Marker* _tmp27_ = NULL;
+ GeeList* _tmp28_ = NULL;
+ SourceCollectionDestroyCounter* _tmp32_ = NULL;
+ GeeArrayList* _tmp33_ = NULL;
+ gint _tmp34_ = 0;
+ gint _tmp35_ = 0;
+#line 88 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_val_if_fail (IS_SOURCE_COLLECTION (self), 0);
+#line 88 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_val_if_fail (IS_MARKER (marker), 0);
+#line 88 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_val_if_fail ((not_removed == NULL) || GEE_IS_LIST (not_removed), 0);
+#line 90 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp0_ = data_collection_start_marking (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 90 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp1_ = _tmp0_;
+#line 90 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp2_ = source_collection_destroy_counter_new (_tmp1_);
+#line 90 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp3_ = _tmp2_;
+#line 90 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _g_object_unref0 (_tmp1_);
+#line 90 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ counter = _tmp3_;
+#line 92 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp4_ = delete_backing;
+#line 92 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ if (_tmp4_) {
+#line 575 "SourceCollection.c"
+ Marker* _tmp5_ = NULL;
+ ProgressMonitor _tmp6_ = NULL;
+ void* _tmp6__target = NULL;
+ SourceCollectionDestroyCounter* _tmp7_ = NULL;
+#line 93 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp5_ = marker;
+#line 93 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp6_ = monitor;
+#line 93 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp6__target = monitor_target;
+#line 93 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp7_ = counter;
+#line 93 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ data_collection_act_on_marked (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), _tmp5_, _source_collection_destroy_and_delete_source_marked_action, self, _tmp6_, _tmp6__target, G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, G_TYPE_OBJECT, GObject));
+#line 590 "SourceCollection.c"
+ } else {
+ Marker* _tmp8_ = NULL;
+ ProgressMonitor _tmp9_ = NULL;
+ void* _tmp9__target = NULL;
+ SourceCollectionDestroyCounter* _tmp10_ = NULL;
+#line 95 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp8_ = marker;
+#line 95 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp9_ = monitor;
+#line 95 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp9__target = monitor_target;
+#line 95 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp10_ = counter;
+#line 95 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ data_collection_act_on_marked (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), _tmp8_, _source_collection_destroy_source_marked_action, self, _tmp9_, _tmp9__target, G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, G_TYPE_OBJECT, GObject));
+#line 606 "SourceCollection.c"
+ }
+ {
+ GeeArrayList* _source_list = NULL;
+ SourceCollectionDestroyCounter* _tmp11_ = NULL;
+ GeeArrayList* _tmp12_ = NULL;
+ GeeArrayList* _tmp13_ = NULL;
+ gint _source_size = 0;
+ GeeArrayList* _tmp14_ = NULL;
+ gint _tmp15_ = 0;
+ gint _tmp16_ = 0;
+ gint _source_index = 0;
+#line 98 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp11_ = counter;
+#line 98 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp12_ = _tmp11_->notify_list;
+#line 98 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp13_ = _g_object_ref0 (_tmp12_);
+#line 98 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _source_list = _tmp13_;
+#line 98 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp14_ = _source_list;
+#line 98 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp15_ = gee_abstract_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 98 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp16_ = _tmp15_;
+#line 98 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _source_size = _tmp16_;
+#line 98 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _source_index = -1;
+#line 98 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ while (TRUE) {
+#line 638 "SourceCollection.c"
+ gint _tmp17_ = 0;
+ gint _tmp18_ = 0;
+ gint _tmp19_ = 0;
+ DataSource* source = NULL;
+ GeeArrayList* _tmp20_ = NULL;
+ gint _tmp21_ = 0;
+ gpointer _tmp22_ = NULL;
+ DataSource* _tmp23_ = NULL;
+#line 98 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp17_ = _source_index;
+#line 98 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _source_index = _tmp17_ + 1;
+#line 98 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp18_ = _source_index;
+#line 98 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp19_ = _source_size;
+#line 98 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ if (!(_tmp18_ < _tmp19_)) {
+#line 98 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ break;
+#line 659 "SourceCollection.c"
+ }
+#line 98 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp20_ = _source_list;
+#line 98 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp21_ = _source_index;
+#line 98 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp22_ = gee_abstract_list_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp20_, GEE_TYPE_ABSTRACT_LIST, GeeAbstractList), _tmp21_);
+#line 98 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ source = (DataSource*) _tmp22_;
+#line 99 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp23_ = source;
+#line 99 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ source_collection_notify_item_destroyed (self, _tmp23_);
+#line 98 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _g_object_unref0 (source);
+#line 675 "SourceCollection.c"
+ }
+#line 98 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _g_object_unref0 (_source_list);
+#line 679 "SourceCollection.c"
+ }
+#line 100 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp24_ = counter;
+#line 100 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp25_ = _tmp24_->notify_list;
+#line 100 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ source_collection_notify_items_destroyed (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp25_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 103 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp26_ = counter;
+#line 103 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp27_ = _tmp26_->remove_marker;
+#line 103 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ data_collection_remove_marked (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), _tmp27_);
+#line 105 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp28_ = not_removed;
+#line 105 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ if (NULL != _tmp28_) {
+#line 697 "SourceCollection.c"
+ GeeList* _tmp29_ = NULL;
+ SourceCollectionDestroyCounter* _tmp30_ = NULL;
+ GeeArrayList* _tmp31_ = NULL;
+#line 106 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp29_ = not_removed;
+#line 106 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp30_ = counter;
+#line 106 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp31_ = _tmp30_->not_removed;
+#line 106 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ gee_collection_add_all (G_TYPE_CHECK_INSTANCE_CAST (_tmp29_, GEE_TYPE_COLLECTION, GeeCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp31_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 709 "SourceCollection.c"
+ }
+#line 109 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp32_ = counter;
+#line 109 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp33_ = _tmp32_->not_removed;
+#line 109 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp34_ = gee_abstract_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp33_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 109 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp35_ = _tmp34_;
+#line 109 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ result = _tmp35_;
+#line 109 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _g_object_unref0 (counter);
+#line 109 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ return result;
+#line 725 "SourceCollection.c"
+}
+
+
+static gboolean source_collection_destroy_and_delete_source (SourceCollection* self, DataObject* object, GObject* user) {
+ gboolean result = FALSE;
+ gboolean success = FALSE;
+ gboolean _tmp3_ = FALSE;
+ gboolean _tmp4_ = FALSE;
+ gboolean _tmp9_ = FALSE;
+ DataObject* _tmp10_ = NULL;
+ GObject* _tmp11_ = NULL;
+ gboolean _tmp12_ = FALSE;
+ GError * _inner_error_ = NULL;
+#line 112 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_val_if_fail (IS_SOURCE_COLLECTION (self), FALSE);
+#line 112 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (object), FALSE);
+#line 112 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_val_if_fail ((user == NULL) || G_IS_OBJECT (user), FALSE);
+#line 113 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ success = FALSE;
+#line 747 "SourceCollection.c"
+ {
+ gboolean _tmp0_ = FALSE;
+ DataObject* _tmp1_ = NULL;
+ gboolean _tmp2_ = FALSE;
+#line 115 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp1_ = object;
+#line 115 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp2_ = data_source_internal_delete_backing (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, TYPE_DATA_SOURCE, DataSource), &_inner_error_);
+#line 115 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp0_ = _tmp2_;
+#line 115 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ if (G_UNLIKELY (_inner_error_ != NULL)) {
+#line 760 "SourceCollection.c"
+ goto __catch46_g_error;
+ }
+#line 115 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ success = _tmp0_;
+#line 765 "SourceCollection.c"
+ }
+ goto __finally46;
+ __catch46_g_error:
+ {
+ GError* err = NULL;
+#line 114 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ err = _inner_error_;
+#line 114 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _inner_error_ = NULL;
+#line 117 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ success = FALSE;
+#line 114 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _g_error_free0 (err);
+#line 779 "SourceCollection.c"
+ }
+ __finally46:
+#line 114 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ if (G_UNLIKELY (_inner_error_ != NULL)) {
+#line 114 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+#line 114 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_clear_error (&_inner_error_);
+#line 114 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ return FALSE;
+#line 790 "SourceCollection.c"
+ }
+#line 120 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp4_ = success;
+#line 120 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ if (!_tmp4_) {
+#line 796 "SourceCollection.c"
+ DataObject* _tmp5_ = NULL;
+#line 120 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp5_ = object;
+#line 120 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp3_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp5_, TYPE_MEDIA_SOURCE);
+#line 802 "SourceCollection.c"
+ } else {
+#line 120 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp3_ = FALSE;
+#line 806 "SourceCollection.c"
+ }
+#line 120 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ if (_tmp3_) {
+#line 810 "SourceCollection.c"
+ GObject* _tmp6_ = NULL;
+ GeeArrayList* _tmp7_ = NULL;
+ DataObject* _tmp8_ = NULL;
+#line 121 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp6_ = user;
+#line 121 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp7_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, SOURCE_COLLECTION_TYPE_DESTROY_COUNTER, SourceCollectionDestroyCounter)->not_removed;
+#line 121 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp8_ = object;
+#line 121 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, TYPE_MEDIA_SOURCE, MediaSource));
+#line 822 "SourceCollection.c"
+ }
+#line 124 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp10_ = object;
+#line 124 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp11_ = user;
+#line 124 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp12_ = source_collection_destroy_source (self, _tmp10_, _tmp11_);
+#line 124 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ if (_tmp12_) {
+#line 832 "SourceCollection.c"
+ gboolean _tmp13_ = FALSE;
+#line 124 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp13_ = success;
+#line 124 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp9_ = _tmp13_;
+#line 838 "SourceCollection.c"
+ } else {
+#line 124 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp9_ = FALSE;
+#line 842 "SourceCollection.c"
+ }
+#line 124 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ result = _tmp9_;
+#line 124 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ return result;
+#line 848 "SourceCollection.c"
+}
+
+
+static gboolean source_collection_destroy_source (SourceCollection* self, DataObject* object, GObject* user) {
+ gboolean result = FALSE;
+ DataSource* source = NULL;
+ DataObject* _tmp0_ = NULL;
+ DataSource* _tmp1_ = NULL;
+ GObject* _tmp2_ = NULL;
+ Marker* _tmp3_ = NULL;
+ GObject* _tmp4_ = NULL;
+ GeeArrayList* _tmp5_ = NULL;
+#line 127 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_val_if_fail (IS_SOURCE_COLLECTION (self), FALSE);
+#line 127 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (object), FALSE);
+#line 127 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_val_if_fail ((user == NULL) || G_IS_OBJECT (user), FALSE);
+#line 128 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp0_ = object;
+#line 128 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp1_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_DATA_SOURCE, DataSource));
+#line 128 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ source = _tmp1_;
+#line 130 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ data_source_internal_mark_for_destroy (source);
+#line 131 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ data_source_destroy (source);
+#line 133 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp2_ = user;
+#line 133 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp3_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, SOURCE_COLLECTION_TYPE_DESTROY_COUNTER, SourceCollectionDestroyCounter)->remove_marker;
+#line 133 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ marker_mark (_tmp3_, G_TYPE_CHECK_INSTANCE_CAST (source, TYPE_DATA_OBJECT, DataObject));
+#line 134 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp4_ = user;
+#line 134 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp5_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, SOURCE_COLLECTION_TYPE_DESTROY_COUNTER, SourceCollectionDestroyCounter)->notify_list;
+#line 134 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp5_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), source);
+#line 136 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ result = TRUE;
+#line 136 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _g_object_unref0 (source);
+#line 136 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ return result;
+#line 895 "SourceCollection.c"
+}
+
+
+static guint _source_backlink_hash_func_gee_hash_data_func (gconstpointer v, gpointer self) {
+ guint result;
+ result = source_backlink_hash_func ((SourceBacklink*) v);
+#line 142 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ return result;
+#line 904 "SourceCollection.c"
+}
+
+
+static gboolean _source_backlink_equal_func_gee_equal_data_func (gconstpointer a, gconstpointer b, gpointer self) {
+ gboolean result;
+ result = source_backlink_equal_func ((SourceBacklink*) a, (SourceBacklink*) b);
+#line 142 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ return result;
+#line 913 "SourceCollection.c"
+}
+
+
+void source_collection_internal_backlink_set (SourceCollection* self, DataSource* source, SourceBacklink* backlink) {
+ GeeMultiMap* _tmp0_ = NULL;
+ GeeMultiMap* _tmp2_ = NULL;
+ SourceBacklink* _tmp3_ = NULL;
+ DataSource* _tmp4_ = NULL;
+#line 140 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (IS_SOURCE_COLLECTION (self));
+#line 140 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (IS_DATA_SOURCE (source));
+#line 140 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (IS_SOURCE_BACKLINK (backlink));
+#line 141 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp0_ = self->priv->backlinks;
+#line 141 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ if (_tmp0_ == NULL) {
+#line 932 "SourceCollection.c"
+ GeeHashMultiMap* _tmp1_ = NULL;
+#line 142 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp1_ = gee_hash_multi_map_new (TYPE_SOURCE_BACKLINK, (GBoxedCopyFunc) source_backlink_ref, source_backlink_unref, TYPE_DATA_SOURCE, (GBoxedCopyFunc) g_object_ref, g_object_unref, _source_backlink_hash_func_gee_hash_data_func, NULL, NULL, _source_backlink_equal_func_gee_equal_data_func, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 142 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _g_object_unref0 (self->priv->backlinks);
+#line 142 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ self->priv->backlinks = G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_MULTI_MAP, GeeMultiMap);
+#line 940 "SourceCollection.c"
+ }
+#line 146 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp2_ = self->priv->backlinks;
+#line 146 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp3_ = backlink;
+#line 146 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp4_ = source;
+#line 146 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ gee_multi_map_set (_tmp2_, _tmp3_, _tmp4_);
+#line 950 "SourceCollection.c"
+}
+
+
+void source_collection_internal_backlink_removed (SourceCollection* self, DataSource* source, SourceBacklink* backlink) {
+ GeeMultiMap* _tmp0_ = NULL;
+ gboolean removed = FALSE;
+ GeeMultiMap* _tmp1_ = NULL;
+ SourceBacklink* _tmp2_ = NULL;
+ DataSource* _tmp3_ = NULL;
+ gboolean _tmp4_ = FALSE;
+#line 150 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (IS_SOURCE_COLLECTION (self));
+#line 150 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (IS_DATA_SOURCE (source));
+#line 150 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (IS_SOURCE_BACKLINK (backlink));
+#line 151 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp0_ = self->priv->backlinks;
+#line 151 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _vala_assert (_tmp0_ != NULL, "backlinks != null");
+#line 153 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp1_ = self->priv->backlinks;
+#line 153 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp2_ = backlink;
+#line 153 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp3_ = source;
+#line 153 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp4_ = gee_multi_map_remove (_tmp1_, _tmp2_, _tmp3_);
+#line 153 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ removed = _tmp4_;
+#line 154 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _vala_assert (removed, "removed");
+#line 983 "SourceCollection.c"
+}
+
+
+static gboolean source_collection_real_has_backlink (SourceCollection* self, SourceBacklink* backlink) {
+ gboolean result = FALSE;
+ gboolean _tmp0_ = FALSE;
+ GeeMultiMap* _tmp1_ = NULL;
+#line 157 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_val_if_fail (IS_SOURCE_BACKLINK (backlink), FALSE);
+#line 158 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp1_ = self->priv->backlinks;
+#line 158 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ if (_tmp1_ != NULL) {
+#line 997 "SourceCollection.c"
+ GeeMultiMap* _tmp2_ = NULL;
+ SourceBacklink* _tmp3_ = NULL;
+ gboolean _tmp4_ = FALSE;
+#line 158 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp2_ = self->priv->backlinks;
+#line 158 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp3_ = backlink;
+#line 158 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp4_ = gee_multi_map_contains (_tmp2_, _tmp3_);
+#line 158 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp0_ = _tmp4_;
+#line 1009 "SourceCollection.c"
+ } else {
+#line 158 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp0_ = FALSE;
+#line 1013 "SourceCollection.c"
+ }
+#line 158 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ result = _tmp0_;
+#line 158 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ return result;
+#line 1019 "SourceCollection.c"
+}
+
+
+gboolean source_collection_has_backlink (SourceCollection* self, SourceBacklink* backlink) {
+#line 157 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_val_if_fail (IS_SOURCE_COLLECTION (self), FALSE);
+#line 157 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ return SOURCE_COLLECTION_GET_CLASS (self)->has_backlink (self, backlink);
+#line 1028 "SourceCollection.c"
+}
+
+
+static gboolean _source_collection_prepare_for_unlink_marked_action (DataObject* object, GObject* user, gpointer self) {
+ gboolean result;
+ result = source_collection_prepare_for_unlink ((SourceCollection*) self, object, user);
+#line 163 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ return result;
+#line 1037 "SourceCollection.c"
+}
+
+
+GeeCollection* source_collection_unlink_marked (SourceCollection* self, Marker* marker, ProgressMonitor monitor, void* monitor_target) {
+ GeeCollection* result = NULL;
+ GeeArrayList* list = NULL;
+ GeeArrayList* _tmp0_ = NULL;
+ Marker* _tmp1_ = NULL;
+ ProgressMonitor _tmp2_ = NULL;
+ void* _tmp2__target = NULL;
+ GeeArrayList* _tmp3_ = NULL;
+ GeeArrayList* _tmp4_ = NULL;
+ gint _tmp5_ = 0;
+ gint _tmp6_ = 0;
+ GeeArrayList* _tmp7_ = NULL;
+ GeeArrayList* _tmp8_ = NULL;
+ Marker* _tmp9_ = NULL;
+ Marker* _tmp10_ = NULL;
+#line 161 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_val_if_fail (IS_SOURCE_COLLECTION (self), NULL);
+#line 161 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_val_if_fail (IS_MARKER (marker), NULL);
+#line 162 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp0_ = gee_array_list_new (TYPE_DATA_SOURCE, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 162 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ list = _tmp0_;
+#line 163 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp1_ = marker;
+#line 163 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp2_ = monitor;
+#line 163 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp2__target = monitor_target;
+#line 163 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp3_ = list;
+#line 163 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ data_collection_act_on_marked (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), _tmp1_, _source_collection_prepare_for_unlink_marked_action, self, _tmp2_, _tmp2__target, G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, G_TYPE_OBJECT, GObject));
+#line 165 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp4_ = list;
+#line 165 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp5_ = gee_abstract_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 165 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp6_ = _tmp5_;
+#line 165 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ if (_tmp6_ == 0) {
+#line 166 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ result = NULL;
+#line 166 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _g_object_unref0 (list);
+#line 166 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ return result;
+#line 1088 "SourceCollection.c"
+ }
+#line 168 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp7_ = list;
+#line 168 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ source_collection_notify_items_unlinking (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 170 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp8_ = list;
+#line 170 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp9_ = data_collection_mark_many (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 170 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp10_ = _tmp9_;
+#line 170 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ data_collection_remove_marked (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), _tmp10_);
+#line 170 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _g_object_unref0 (_tmp10_);
+#line 172 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (list, GEE_TYPE_COLLECTION, GeeCollection);
+#line 172 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ return result;
+#line 1108 "SourceCollection.c"
+}
+
+
+static gboolean source_collection_prepare_for_unlink (SourceCollection* self, DataObject* object, GObject* user) {
+ gboolean result = FALSE;
+ DataSource* source = NULL;
+ DataObject* _tmp0_ = NULL;
+ DataSource* _tmp1_ = NULL;
+ GObject* _tmp2_ = NULL;
+#line 175 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_val_if_fail (IS_SOURCE_COLLECTION (self), FALSE);
+#line 175 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (object), FALSE);
+#line 175 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_val_if_fail ((user == NULL) || G_IS_OBJECT (user), FALSE);
+#line 176 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp0_ = object;
+#line 176 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp1_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_DATA_SOURCE, DataSource));
+#line 176 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ source = _tmp1_;
+#line 178 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ data_source_notify_unlinking (source, self);
+#line 179 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp2_ = user;
+#line 179 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ gee_collection_add (G_TYPE_CHECK_INSTANCE_CAST (G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, GEE_TYPE_LIST, GeeList), GEE_TYPE_COLLECTION, GeeCollection), source);
+#line 181 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ result = TRUE;
+#line 181 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _g_object_unref0 (source);
+#line 181 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ return result;
+#line 1142 "SourceCollection.c"
+}
+
+
+void source_collection_relink (SourceCollection* self, DataSource* source) {
+ DataSource* _tmp0_ = NULL;
+ DataSource* _tmp1_ = NULL;
+ DataSource* _tmp2_ = NULL;
+ GeeCollection* _tmp3_ = NULL;
+ GeeCollection* _tmp4_ = NULL;
+ DataSource* _tmp5_ = NULL;
+#line 184 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (IS_SOURCE_COLLECTION (self));
+#line 184 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (IS_DATA_SOURCE (source));
+#line 185 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp0_ = source;
+#line 185 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ data_source_notify_relinking (_tmp0_, self);
+#line 187 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp1_ = source;
+#line 187 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ data_collection_add (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, TYPE_DATA_OBJECT, DataObject));
+#line 188 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp2_ = source;
+#line 188 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp3_ = data_collection_get_singleton (G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, TYPE_DATA_OBJECT, DataObject));
+#line 188 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp4_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_COLLECTION, GeeCollection);
+#line 188 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ source_collection_notify_items_relinked (self, _tmp4_);
+#line 188 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _g_object_unref0 (_tmp4_);
+#line 190 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp5_ = source;
+#line 190 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ data_source_notify_relinked (_tmp5_);
+#line 1179 "SourceCollection.c"
+}
+
+
+void source_collection_relink_many (SourceCollection* self, GeeCollection* relink) {
+ GeeCollection* _tmp0_ = NULL;
+ gint _tmp1_ = 0;
+ gint _tmp2_ = 0;
+ GeeCollection* _tmp10_ = NULL;
+ GeeCollection* _tmp11_ = NULL;
+ GeeCollection* _tmp12_ = NULL;
+ GeeCollection* _tmp13_ = NULL;
+#line 193 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (IS_SOURCE_COLLECTION (self));
+#line 193 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (relink));
+#line 194 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp0_ = relink;
+#line 194 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp1_ = gee_collection_get_size (_tmp0_);
+#line 194 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp2_ = _tmp1_;
+#line 194 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ if (_tmp2_ == 0) {
+#line 195 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ return;
+#line 1205 "SourceCollection.c"
+ }
+ {
+ GeeIterator* _source_it = NULL;
+ GeeCollection* _tmp3_ = NULL;
+ GeeIterator* _tmp4_ = NULL;
+#line 197 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp3_ = relink;
+#line 197 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp4_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 197 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _source_it = _tmp4_;
+#line 197 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ while (TRUE) {
+#line 1219 "SourceCollection.c"
+ GeeIterator* _tmp5_ = NULL;
+ gboolean _tmp6_ = FALSE;
+ DataSource* source = NULL;
+ GeeIterator* _tmp7_ = NULL;
+ gpointer _tmp8_ = NULL;
+ DataSource* _tmp9_ = NULL;
+#line 197 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp5_ = _source_it;
+#line 197 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp6_ = gee_iterator_next (_tmp5_);
+#line 197 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ if (!_tmp6_) {
+#line 197 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ break;
+#line 1234 "SourceCollection.c"
+ }
+#line 197 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp7_ = _source_it;
+#line 197 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp8_ = gee_iterator_get (_tmp7_);
+#line 197 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ source = (DataSource*) _tmp8_;
+#line 198 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp9_ = source;
+#line 198 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ data_source_notify_relinking (_tmp9_, self);
+#line 197 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _g_object_unref0 (source);
+#line 1248 "SourceCollection.c"
+ }
+#line 197 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _g_object_unref0 (_source_it);
+#line 1252 "SourceCollection.c"
+ }
+#line 200 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp10_ = relink;
+#line 200 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp11_ = data_collection_add_many (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), _tmp10_, NULL, NULL);
+#line 200 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp12_ = _tmp11_;
+#line 200 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _g_object_unref0 (_tmp12_);
+#line 201 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp13_ = relink;
+#line 201 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ source_collection_notify_items_relinked (self, _tmp13_);
+#line 1266 "SourceCollection.c"
+ {
+ GeeIterator* _source_it = NULL;
+ GeeCollection* _tmp14_ = NULL;
+ GeeIterator* _tmp15_ = NULL;
+#line 203 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp14_ = relink;
+#line 203 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp15_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 203 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _source_it = _tmp15_;
+#line 203 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ while (TRUE) {
+#line 1279 "SourceCollection.c"
+ GeeIterator* _tmp16_ = NULL;
+ gboolean _tmp17_ = FALSE;
+ DataSource* source = NULL;
+ GeeIterator* _tmp18_ = NULL;
+ gpointer _tmp19_ = NULL;
+ DataSource* _tmp20_ = NULL;
+#line 203 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp16_ = _source_it;
+#line 203 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp17_ = gee_iterator_next (_tmp16_);
+#line 203 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ if (!_tmp17_) {
+#line 203 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ break;
+#line 1294 "SourceCollection.c"
+ }
+#line 203 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp18_ = _source_it;
+#line 203 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp19_ = gee_iterator_get (_tmp18_);
+#line 203 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ source = (DataSource*) _tmp19_;
+#line 204 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp20_ = source;
+#line 204 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ data_source_notify_relinked (_tmp20_);
+#line 203 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _g_object_unref0 (source);
+#line 1308 "SourceCollection.c"
+ }
+#line 203 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _g_object_unref0 (_source_it);
+#line 1312 "SourceCollection.c"
+ }
+}
+
+
+static void source_collection_real_remove_backlink (SourceCollection* self, SourceBacklink* backlink) {
+ GeeMultiMap* _tmp0_ = NULL;
+ GeeArrayList* sources = NULL;
+ GeeArrayList* _tmp1_ = NULL;
+ GeeArrayList* _tmp2_ = NULL;
+ GeeMultiMap* _tmp3_ = NULL;
+ SourceBacklink* _tmp4_ = NULL;
+ GeeCollection* _tmp5_ = NULL;
+ GeeCollection* _tmp6_ = NULL;
+ SourceBacklink* _tmp20_ = NULL;
+ GeeArrayList* _tmp21_ = NULL;
+#line 207 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (IS_SOURCE_BACKLINK (backlink));
+#line 208 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp0_ = self->priv->backlinks;
+#line 208 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ if (_tmp0_ == NULL) {
+#line 209 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ return;
+#line 1336 "SourceCollection.c"
+ }
+#line 212 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp1_ = gee_array_list_new (TYPE_DATA_SOURCE, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 212 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ sources = _tmp1_;
+#line 213 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp2_ = sources;
+#line 213 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp3_ = self->priv->backlinks;
+#line 213 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp4_ = backlink;
+#line 213 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp5_ = gee_multi_map_get (_tmp3_, _tmp4_);
+#line 213 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp6_ = _tmp5_;
+#line 213 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ gee_array_list_add_all (_tmp2_, _tmp6_);
+#line 213 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _g_object_unref0 (_tmp6_);
+#line 1356 "SourceCollection.c"
+ {
+ GeeArrayList* _source_list = NULL;
+ GeeArrayList* _tmp7_ = NULL;
+ GeeArrayList* _tmp8_ = NULL;
+ gint _source_size = 0;
+ GeeArrayList* _tmp9_ = NULL;
+ gint _tmp10_ = 0;
+ gint _tmp11_ = 0;
+ gint _source_index = 0;
+#line 215 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp7_ = sources;
+#line 215 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp8_ = _g_object_ref0 (_tmp7_);
+#line 215 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _source_list = _tmp8_;
+#line 215 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp9_ = _source_list;
+#line 215 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp10_ = gee_abstract_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 215 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp11_ = _tmp10_;
+#line 215 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _source_size = _tmp11_;
+#line 215 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _source_index = -1;
+#line 215 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ while (TRUE) {
+#line 1384 "SourceCollection.c"
+ gint _tmp12_ = 0;
+ gint _tmp13_ = 0;
+ gint _tmp14_ = 0;
+ DataSource* source = NULL;
+ GeeArrayList* _tmp15_ = NULL;
+ gint _tmp16_ = 0;
+ gpointer _tmp17_ = NULL;
+ DataSource* _tmp18_ = NULL;
+ SourceBacklink* _tmp19_ = NULL;
+#line 215 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp12_ = _source_index;
+#line 215 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _source_index = _tmp12_ + 1;
+#line 215 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp13_ = _source_index;
+#line 215 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp14_ = _source_size;
+#line 215 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ if (!(_tmp13_ < _tmp14_)) {
+#line 215 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ break;
+#line 1406 "SourceCollection.c"
+ }
+#line 215 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp15_ = _source_list;
+#line 215 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp16_ = _source_index;
+#line 215 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp17_ = gee_abstract_list_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp15_, GEE_TYPE_ABSTRACT_LIST, GeeAbstractList), _tmp16_);
+#line 215 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ source = (DataSource*) _tmp17_;
+#line 216 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp18_ = source;
+#line 216 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp19_ = backlink;
+#line 216 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ data_source_remove_backlink (_tmp18_, _tmp19_);
+#line 215 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _g_object_unref0 (source);
+#line 1424 "SourceCollection.c"
+ }
+#line 215 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _g_object_unref0 (_source_list);
+#line 1428 "SourceCollection.c"
+ }
+#line 218 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp20_ = backlink;
+#line 218 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp21_ = sources;
+#line 218 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ source_collection_notify_backlink_removed (self, _tmp20_, G_TYPE_CHECK_INSTANCE_CAST (_tmp21_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 207 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _g_object_unref0 (sources);
+#line 1438 "SourceCollection.c"
+}
+
+
+void source_collection_remove_backlink (SourceCollection* self, SourceBacklink* backlink) {
+#line 207 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (IS_SOURCE_COLLECTION (self));
+#line 207 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ SOURCE_COLLECTION_GET_CLASS (self)->remove_backlink (self, backlink);
+#line 1447 "SourceCollection.c"
+}
+
+
+static void source_collection_real_items_unlinking (SourceCollection* self, GeeCollection* unlinking) {
+#line 20 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (unlinking));
+#line 1454 "SourceCollection.c"
+}
+
+
+static void source_collection_real_items_relinked (SourceCollection* self, GeeCollection* relinked) {
+#line 25 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (relinked));
+#line 1461 "SourceCollection.c"
+}
+
+
+static void source_collection_real_item_destroyed (SourceCollection* self, DataSource* source) {
+#line 30 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (IS_DATA_SOURCE (source));
+#line 1468 "SourceCollection.c"
+}
+
+
+static void source_collection_real_items_destroyed (SourceCollection* self, GeeCollection* destroyed) {
+#line 35 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (destroyed));
+#line 1475 "SourceCollection.c"
+}
+
+
+static void source_collection_real_unlinked_destroyed (SourceCollection* self, DataSource* source) {
+#line 40 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (IS_DATA_SOURCE (source));
+#line 1482 "SourceCollection.c"
+}
+
+
+static void source_collection_real_backlink_removed (SourceCollection* self, SourceBacklink* backlink, GeeCollection* sources) {
+#line 44 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (IS_SOURCE_BACKLINK (backlink));
+#line 44 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (sources));
+#line 1491 "SourceCollection.c"
+}
+
+
+static void g_cclosure_user_marshal_VOID__SOURCE_BACKLINK_OBJECT (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data) {
+ typedef void (*GMarshalFunc_VOID__SOURCE_BACKLINK_OBJECT) (gpointer data1, gpointer arg_1, gpointer arg_2, gpointer data2);
+ register GMarshalFunc_VOID__SOURCE_BACKLINK_OBJECT callback;
+ register GCClosure * cc;
+ register gpointer data1;
+ register gpointer data2;
+ cc = (GCClosure *) closure;
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_if_fail (n_param_values == 3);
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ if (G_CCLOSURE_SWAP_DATA (closure)) {
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ data1 = closure->data;
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ data2 = param_values->data[0].v_pointer;
+#line 1510 "SourceCollection.c"
+ } else {
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ data1 = param_values->data[0].v_pointer;
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ data2 = closure->data;
+#line 1516 "SourceCollection.c"
+ }
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ callback = (GMarshalFunc_VOID__SOURCE_BACKLINK_OBJECT) (marshal_data ? marshal_data : cc->callback);
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ callback (data1, value_get_source_backlink (param_values + 1), g_value_get_object (param_values + 2), data2);
+#line 1522 "SourceCollection.c"
+}
+
+
+static SourceCollectionDestroyCounter* source_collection_destroy_counter_construct (GType object_type, Marker* remove_marker) {
+ SourceCollectionDestroyCounter * self = NULL;
+ Marker* _tmp0_ = NULL;
+ Marker* _tmp1_ = NULL;
+#line 13 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_return_val_if_fail (IS_MARKER (remove_marker), NULL);
+#line 13 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ self = (SourceCollectionDestroyCounter*) g_object_new (object_type, NULL);
+#line 14 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp0_ = remove_marker;
+#line 14 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp1_ = _g_object_ref0 (_tmp0_);
+#line 14 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _g_object_unref0 (self->remove_marker);
+#line 14 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ self->remove_marker = _tmp1_;
+#line 13 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ return self;
+#line 1544 "SourceCollection.c"
+}
+
+
+static SourceCollectionDestroyCounter* source_collection_destroy_counter_new (Marker* remove_marker) {
+#line 13 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ return source_collection_destroy_counter_construct (SOURCE_COLLECTION_TYPE_DESTROY_COUNTER, remove_marker);
+#line 1551 "SourceCollection.c"
+}
+
+
+static void source_collection_destroy_counter_class_init (SourceCollectionDestroyCounterClass * klass) {
+#line 8 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ source_collection_destroy_counter_parent_class = g_type_class_peek_parent (klass);
+#line 8 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ G_OBJECT_CLASS (klass)->finalize = source_collection_destroy_counter_finalize;
+#line 1560 "SourceCollection.c"
+}
+
+
+static void source_collection_destroy_counter_instance_init (SourceCollectionDestroyCounter * self) {
+ GeeArrayList* _tmp0_ = NULL;
+ GeeArrayList* _tmp1_ = NULL;
+#line 10 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp0_ = gee_array_list_new (TYPE_DATA_SOURCE, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 10 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ self->notify_list = _tmp0_;
+#line 11 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _tmp1_ = gee_array_list_new (TYPE_MEDIA_SOURCE, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 11 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ self->not_removed = _tmp1_;
+#line 1575 "SourceCollection.c"
+}
+
+
+static void source_collection_destroy_counter_finalize (GObject* obj) {
+ SourceCollectionDestroyCounter * self;
+#line 8 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, SOURCE_COLLECTION_TYPE_DESTROY_COUNTER, SourceCollectionDestroyCounter);
+#line 9 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _g_object_unref0 (self->remove_marker);
+#line 10 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _g_object_unref0 (self->notify_list);
+#line 11 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _g_object_unref0 (self->not_removed);
+#line 8 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ G_OBJECT_CLASS (source_collection_destroy_counter_parent_class)->finalize (obj);
+#line 1591 "SourceCollection.c"
+}
+
+
+static GType source_collection_destroy_counter_get_type (void) {
+ static volatile gsize source_collection_destroy_counter_type_id__volatile = 0;
+ if (g_once_init_enter (&source_collection_destroy_counter_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (SourceCollectionDestroyCounterClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) source_collection_destroy_counter_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (SourceCollectionDestroyCounter), 0, (GInstanceInitFunc) source_collection_destroy_counter_instance_init, NULL };
+ GType source_collection_destroy_counter_type_id;
+ source_collection_destroy_counter_type_id = g_type_register_static (G_TYPE_OBJECT, "SourceCollectionDestroyCounter", &g_define_type_info, 0);
+ g_once_init_leave (&source_collection_destroy_counter_type_id__volatile, source_collection_destroy_counter_type_id);
+ }
+ return source_collection_destroy_counter_type_id__volatile;
+}
+
+
+static void source_collection_class_init (SourceCollectionClass * klass) {
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ source_collection_parent_class = g_type_class_peek_parent (klass);
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ ((DataCollectionClass *) klass)->finalize = source_collection_finalize;
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_type_class_add_private (klass, sizeof (SourceCollectionPrivate));
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ ((SourceCollectionClass *) klass)->holds_type_of_source = source_collection_real_holds_type_of_source;
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ ((SourceCollectionClass *) klass)->notify_items_unlinking = source_collection_real_notify_items_unlinking;
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ ((SourceCollectionClass *) klass)->notify_items_relinked = source_collection_real_notify_items_relinked;
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ ((SourceCollectionClass *) klass)->notify_item_destroyed = source_collection_real_notify_item_destroyed;
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ ((SourceCollectionClass *) klass)->notify_items_destroyed = source_collection_real_notify_items_destroyed;
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ ((SourceCollectionClass *) klass)->notify_unlinked_destroyed = source_collection_real_notify_unlinked_destroyed;
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ ((SourceCollectionClass *) klass)->notify_backlink_removed = source_collection_real_notify_backlink_removed;
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ ((DataCollectionClass *) klass)->valid_type = source_collection_real_valid_type;
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ ((SourceCollectionClass *) klass)->has_backlink = source_collection_real_has_backlink;
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ ((SourceCollectionClass *) klass)->remove_backlink = source_collection_real_remove_backlink;
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ ((SourceCollectionClass *) klass)->items_unlinking = source_collection_real_items_unlinking;
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ ((SourceCollectionClass *) klass)->items_relinked = source_collection_real_items_relinked;
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ ((SourceCollectionClass *) klass)->item_destroyed = source_collection_real_item_destroyed;
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ ((SourceCollectionClass *) klass)->items_destroyed = source_collection_real_items_destroyed;
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ ((SourceCollectionClass *) klass)->unlinked_destroyed = source_collection_real_unlinked_destroyed;
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ ((SourceCollectionClass *) klass)->backlink_removed = source_collection_real_backlink_removed;
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_signal_new ("items_unlinking", TYPE_SOURCE_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (SourceCollectionClass, items_unlinking), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, GEE_TYPE_COLLECTION);
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_signal_new ("items_relinked", TYPE_SOURCE_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (SourceCollectionClass, items_relinked), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, GEE_TYPE_COLLECTION);
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_signal_new ("item_destroyed", TYPE_SOURCE_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (SourceCollectionClass, item_destroyed), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, TYPE_DATA_SOURCE);
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_signal_new ("items_destroyed", TYPE_SOURCE_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (SourceCollectionClass, items_destroyed), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, GEE_TYPE_COLLECTION);
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_signal_new ("unlinked_destroyed", TYPE_SOURCE_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (SourceCollectionClass, unlinked_destroyed), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, TYPE_DATA_SOURCE);
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ g_signal_new ("backlink_removed", TYPE_SOURCE_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (SourceCollectionClass, backlink_removed), NULL, NULL, g_cclosure_user_marshal_VOID__SOURCE_BACKLINK_OBJECT, G_TYPE_NONE, 2, TYPE_SOURCE_BACKLINK, GEE_TYPE_COLLECTION);
+#line 1658 "SourceCollection.c"
+}
+
+
+static void source_collection_instance_init (SourceCollection * self) {
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ self->priv = SOURCE_COLLECTION_GET_PRIVATE (self);
+#line 48 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ self->priv->backlinks = NULL;
+#line 1667 "SourceCollection.c"
+}
+
+
+static void source_collection_finalize (DataCollection* obj) {
+ SourceCollection * self;
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_SOURCE_COLLECTION, SourceCollection);
+#line 48 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ _g_object_unref0 (self->priv->backlinks);
+#line 7 "/home/jens/Source/shotwell/src/core/SourceCollection.vala"
+ DATA_COLLECTION_CLASS (source_collection_parent_class)->finalize (obj);
+#line 1679 "SourceCollection.c"
+}
+
+
+GType source_collection_get_type (void) {
+ static volatile gsize source_collection_type_id__volatile = 0;
+ if (g_once_init_enter (&source_collection_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (SourceCollectionClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) source_collection_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (SourceCollection), 0, (GInstanceInitFunc) source_collection_instance_init, NULL };
+ GType source_collection_type_id;
+ source_collection_type_id = g_type_register_static (TYPE_DATA_COLLECTION, "SourceCollection", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
+ g_once_init_leave (&source_collection_type_id__volatile, source_collection_type_id);
+ }
+ return source_collection_type_id__volatile;
+}
+
+
+
diff --git a/src/core/SourceHoldingTank.c b/src/core/SourceHoldingTank.c
new file mode 100644
index 0000000..ed7d671
--- /dev/null
+++ b/src/core/SourceHoldingTank.c
@@ -0,0 +1,1729 @@
+/* SourceHoldingTank.c generated by valac 0.32.1, the Vala compiler
+ * generated from SourceHoldingTank.vala, do not modify */
+
+/* Copyright 2016 Software Freedom Conservancy Inc.
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later). See the COPYING file in this distribution.
+ */
+/* A SourceHoldingTank is similar to the holding tank used by ContainerSourceCollection, but for*/
+/* non-ContainerSources to be held offline from their natural SourceCollection (i.e. PhotoSources*/
+/* being held in a trashcan, for example). It is *not* a DataCollection (important!), but rather*/
+/* a signalled collection that moves DataSources to and from their SourceCollection.*/
+/**/
+/* DataSources can be shuttled from their SourceCollection to the SourceHoldingTank manually*/
+/* (via unlink_and_hold) or can be automatically moved by installing a HoldingPredicate.*/
+/* Only one HoldingConditional may be installed. Because of assertions in the methods, it's unwise*/
+/* to use more than one method. add() and add_many() should ONLY be used for DataSources not*/
+/* first installed in their SourceCollection (i.e. they're born in the SourceHoldingTank).*/
+/**/
+/* NOTE: DataSources should never be in more than one SourceHoldingTank. No tests are performed*/
+/* here to verify this. This is why a filter/predicate method (which could automatically move*/
+/* them in as they're altered) is not offered; there's no easy way to keep DataSources from being*/
+/* moved into more than one holding tank, or which should have preference. The CheckToRemove*/
+/* predicate is offered only to know when to release them.*/
+
+#include <glib.h>
+#include <glib-object.h>
+#include <gee.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gobject/gvaluecollector.h>
+
+
+#define TYPE_SOURCE_HOLDING_TANK (source_holding_tank_get_type ())
+#define SOURCE_HOLDING_TANK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SOURCE_HOLDING_TANK, SourceHoldingTank))
+#define SOURCE_HOLDING_TANK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SOURCE_HOLDING_TANK, SourceHoldingTankClass))
+#define IS_SOURCE_HOLDING_TANK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SOURCE_HOLDING_TANK))
+#define IS_SOURCE_HOLDING_TANK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SOURCE_HOLDING_TANK))
+#define SOURCE_HOLDING_TANK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SOURCE_HOLDING_TANK, SourceHoldingTankClass))
+
+typedef struct _SourceHoldingTank SourceHoldingTank;
+typedef struct _SourceHoldingTankClass SourceHoldingTankClass;
+typedef struct _SourceHoldingTankPrivate SourceHoldingTankPrivate;
+
+#define TYPE_DATA_OBJECT (data_object_get_type ())
+#define DATA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_OBJECT, DataObject))
+#define DATA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_OBJECT, DataObjectClass))
+#define IS_DATA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_OBJECT))
+#define IS_DATA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_OBJECT))
+#define DATA_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_OBJECT, DataObjectClass))
+
+typedef struct _DataObject DataObject;
+typedef struct _DataObjectClass DataObjectClass;
+
+#define TYPE_DATA_SOURCE (data_source_get_type ())
+#define DATA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_SOURCE, DataSource))
+#define DATA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_SOURCE, DataSourceClass))
+#define IS_DATA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_SOURCE))
+#define IS_DATA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_SOURCE))
+#define DATA_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_SOURCE, DataSourceClass))
+
+typedef struct _DataSource DataSource;
+typedef struct _DataSourceClass DataSourceClass;
+
+#define TYPE_DATA_COLLECTION (data_collection_get_type ())
+#define DATA_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_COLLECTION, DataCollection))
+#define DATA_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_COLLECTION, DataCollectionClass))
+#define IS_DATA_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_COLLECTION))
+#define IS_DATA_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_COLLECTION))
+#define DATA_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_COLLECTION, DataCollectionClass))
+
+typedef struct _DataCollection DataCollection;
+typedef struct _DataCollectionClass DataCollectionClass;
+
+#define TYPE_SOURCE_COLLECTION (source_collection_get_type ())
+#define SOURCE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SOURCE_COLLECTION, SourceCollection))
+#define SOURCE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SOURCE_COLLECTION, SourceCollectionClass))
+#define IS_SOURCE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SOURCE_COLLECTION))
+#define IS_SOURCE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SOURCE_COLLECTION))
+#define SOURCE_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SOURCE_COLLECTION, SourceCollectionClass))
+
+typedef struct _SourceCollection SourceCollection;
+typedef struct _SourceCollectionClass SourceCollectionClass;
+
+#define TYPE_ALTERATION (alteration_get_type ())
+#define ALTERATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ALTERATION, Alteration))
+#define ALTERATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ALTERATION, AlterationClass))
+#define IS_ALTERATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ALTERATION))
+#define IS_ALTERATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ALTERATION))
+#define ALTERATION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ALTERATION, AlterationClass))
+
+typedef struct _Alteration Alteration;
+typedef struct _AlterationClass AlterationClass;
+
+#define TYPE_DATA_SET (data_set_get_type ())
+#define DATA_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_SET, DataSet))
+#define DATA_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_SET, DataSetClass))
+#define IS_DATA_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_SET))
+#define IS_DATA_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_SET))
+#define DATA_SET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_SET, DataSetClass))
+
+typedef struct _DataSet DataSet;
+typedef struct _DataSetClass DataSetClass;
+#define _data_collection_unref0(var) ((var == NULL) ? NULL : (var = (data_collection_unref (var), NULL)))
+#define _data_set_unref0(var) ((var == NULL) ? NULL : (var = (data_set_unref (var), NULL)))
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+
+#define TYPE_MARKER (marker_get_type ())
+#define MARKER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_MARKER, Marker))
+#define IS_MARKER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_MARKER))
+#define MARKER_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TYPE_MARKER, MarkerIface))
+
+typedef struct _Marker Marker;
+typedef struct _MarkerIface MarkerIface;
+
+#define TYPE_SOURCE_BACKLINK (source_backlink_get_type ())
+#define SOURCE_BACKLINK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SOURCE_BACKLINK, SourceBacklink))
+#define SOURCE_BACKLINK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SOURCE_BACKLINK, SourceBacklinkClass))
+#define IS_SOURCE_BACKLINK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SOURCE_BACKLINK))
+#define IS_SOURCE_BACKLINK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SOURCE_BACKLINK))
+#define SOURCE_BACKLINK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SOURCE_BACKLINK, SourceBacklinkClass))
+
+typedef struct _SourceBacklink SourceBacklink;
+typedef struct _SourceBacklinkClass SourceBacklinkClass;
+
+#define TYPE_SINGLETON_COLLECTION (singleton_collection_get_type ())
+#define SINGLETON_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SINGLETON_COLLECTION, SingletonCollection))
+#define SINGLETON_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SINGLETON_COLLECTION, SingletonCollectionClass))
+#define IS_SINGLETON_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SINGLETON_COLLECTION))
+#define IS_SINGLETON_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SINGLETON_COLLECTION))
+#define SINGLETON_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SINGLETON_COLLECTION, SingletonCollectionClass))
+
+typedef struct _SingletonCollection SingletonCollection;
+typedef struct _SingletonCollectionClass SingletonCollectionClass;
+#define _g_free0(var) (var = (g_free (var), NULL))
+typedef struct _ParamSpecSourceHoldingTank ParamSpecSourceHoldingTank;
+#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
+#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
+#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+
+struct _SourceHoldingTank {
+ GTypeInstance parent_instance;
+ volatile int ref_count;
+ SourceHoldingTankPrivate * priv;
+};
+
+struct _SourceHoldingTankClass {
+ GTypeClass parent_class;
+ void (*finalize) (SourceHoldingTank *self);
+ void (*notify_contents_altered) (SourceHoldingTank* self, GeeCollection* added, GeeCollection* removed);
+ void (*contents_altered) (SourceHoldingTank* self, GeeCollection* added, GeeCollection* removed);
+};
+
+typedef gboolean (*SourceHoldingTankCheckToKeep) (DataSource* source, Alteration* alteration, void* user_data);
+struct _SourceHoldingTankPrivate {
+ SourceCollection* sources;
+ SourceHoldingTankCheckToKeep check_to_keep;
+ gpointer check_to_keep_target;
+ DataSet* tank;
+ GeeHashSet* relinks;
+ GeeHashSet* unlinking;
+ gint64 ordinal;
+};
+
+struct _MarkerIface {
+ GTypeInterface parent_iface;
+ void (*mark) (Marker* self, DataObject* object);
+ void (*unmark) (Marker* self, DataObject* object);
+ gboolean (*toggle) (Marker* self, DataObject* object);
+ void (*mark_many) (Marker* self, GeeCollection* list);
+ void (*unmark_many) (Marker* self, GeeCollection* list);
+ void (*mark_all) (Marker* self);
+ gint (*get_count) (Marker* self);
+ GeeCollection* (*get_all) (Marker* self);
+};
+
+typedef gboolean (*ProgressMonitor) (guint64 current, guint64 total, gboolean do_event_loop, void* user_data);
+struct _ParamSpecSourceHoldingTank {
+ GParamSpec parent_instance;
+};
+
+
+static gpointer source_holding_tank_parent_class = NULL;
+
+gpointer source_holding_tank_ref (gpointer instance);
+void source_holding_tank_unref (gpointer instance);
+GParamSpec* param_spec_source_holding_tank (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_source_holding_tank (GValue* value, gpointer v_object);
+void value_take_source_holding_tank (GValue* value, gpointer v_object);
+gpointer value_get_source_holding_tank (const GValue* value);
+GType source_holding_tank_get_type (void) G_GNUC_CONST;
+GType data_object_get_type (void) G_GNUC_CONST;
+GType data_source_get_type (void) G_GNUC_CONST;
+gpointer data_collection_ref (gpointer instance);
+void data_collection_unref (gpointer instance);
+GParamSpec* param_spec_data_collection (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_data_collection (GValue* value, gpointer v_object);
+void value_take_data_collection (GValue* value, gpointer v_object);
+gpointer value_get_data_collection (const GValue* value);
+GType data_collection_get_type (void) G_GNUC_CONST;
+GType source_collection_get_type (void) G_GNUC_CONST;
+gpointer alteration_ref (gpointer instance);
+void alteration_unref (gpointer instance);
+GParamSpec* param_spec_alteration (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_alteration (GValue* value, gpointer v_object);
+void value_take_alteration (GValue* value, gpointer v_object);
+gpointer value_get_alteration (const GValue* value);
+GType alteration_get_type (void) G_GNUC_CONST;
+gpointer data_set_ref (gpointer instance);
+void data_set_unref (gpointer instance);
+GParamSpec* param_spec_data_set (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_data_set (GValue* value, gpointer v_object);
+void value_take_data_set (GValue* value, gpointer v_object);
+gpointer value_get_data_set (const GValue* value);
+GType data_set_get_type (void) G_GNUC_CONST;
+#define SOURCE_HOLDING_TANK_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_SOURCE_HOLDING_TANK, SourceHoldingTankPrivate))
+enum {
+ SOURCE_HOLDING_TANK_DUMMY_PROPERTY
+};
+static void source_holding_tank_on_source_destroyed (SourceHoldingTank* self, DataSource* source);
+static void _source_holding_tank_on_source_destroyed_source_collection_item_destroyed (SourceCollection* _sender, DataSource* source, gpointer self);
+static void source_holding_tank_on_source_collection_thawed (SourceHoldingTank* self);
+static void _source_holding_tank_on_source_collection_thawed_data_collection_thawed (DataCollection* _sender, gpointer self);
+DataSet* data_set_new (void);
+DataSet* data_set_construct (GType object_type);
+SourceHoldingTank* source_holding_tank_new (SourceCollection* sources, SourceHoldingTankCheckToKeep check_to_keep, void* check_to_keep_target);
+SourceHoldingTank* source_holding_tank_construct (GType object_type, SourceCollection* sources, SourceHoldingTankCheckToKeep check_to_keep, void* check_to_keep_target);
+void source_holding_tank_notify_contents_altered (SourceHoldingTank* self, GeeCollection* added, GeeCollection* removed);
+static void source_holding_tank_real_notify_contents_altered (SourceHoldingTank* self, GeeCollection* added, GeeCollection* removed);
+void data_source_notify_held_in_tank (DataSource* self, SourceHoldingTank* holding_tank);
+gint source_holding_tank_get_count (SourceHoldingTank* self);
+gint data_set_get_count (DataSet* self);
+GeeCollection* source_holding_tank_get_all (SourceHoldingTank* self);
+GeeList* data_set_get_all (DataSet* self);
+gboolean source_holding_tank_contains (SourceHoldingTank* self, DataSource* source);
+gboolean data_set_contains (DataSet* self, DataObject* object);
+void source_holding_tank_add_many (SourceHoldingTank* self, GeeCollection* many);
+void data_object_internal_set_ordinal (DataObject* self, gint64 ordinal);
+gboolean data_set_add_many (DataSet* self, GeeCollection* objects);
+void source_holding_tank_unlink_and_hold (SourceHoldingTank* self, GeeCollection* unlink);
+GType marker_get_type (void) G_GNUC_CONST;
+GeeCollection* source_collection_unlink_marked (SourceCollection* self, Marker* marker, ProgressMonitor monitor, void* monitor_target);
+Marker* data_collection_mark_many (DataCollection* self, GeeCollection* objects);
+gpointer source_backlink_ref (gpointer instance);
+void source_backlink_unref (gpointer instance);
+GParamSpec* param_spec_source_backlink (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_source_backlink (GValue* value, gpointer v_object);
+void value_take_source_backlink (GValue* value, gpointer v_object);
+gpointer value_get_source_backlink (const GValue* value);
+GType source_backlink_get_type (void) G_GNUC_CONST;
+gboolean source_holding_tank_has_backlink (SourceHoldingTank* self, SourceBacklink* backlink);
+DataObject* data_set_get_at (DataSet* self, gint index);
+gboolean data_source_has_backlink (DataSource* self, SourceBacklink* backlink);
+void source_holding_tank_remove_backlink (SourceHoldingTank* self, SourceBacklink* backlink);
+gboolean data_source_remove_backlink (DataSource* self, SourceBacklink* backlink);
+void source_holding_tank_destroy_orphans (SourceHoldingTank* self, GeeList* destroy, gboolean delete_backing, ProgressMonitor monitor, void* monitor_target, GeeList* not_removed);
+gboolean data_set_remove_many (DataSet* self, GeeCollection* objects);
+gboolean data_source_destroy_orphan (DataSource* self, gboolean delete_backing);
+gboolean data_set_remove (DataSet* self, DataObject* object);
+SingletonCollection* singleton_collection_new (GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, gconstpointer object);
+SingletonCollection* singleton_collection_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, gconstpointer object);
+GType singleton_collection_get_type (void) G_GNUC_CONST;
+void source_holding_tank_internal_notify_altered (SourceHoldingTank* self, DataSource* source, Alteration* alteration);
+gchar* data_object_to_string (DataObject* self);
+gchar* source_holding_tank_to_string (SourceHoldingTank* self);
+gboolean data_collection_are_notifications_frozen (DataCollection* self);
+void source_collection_relink (SourceCollection* self, DataSource* source);
+void source_collection_relink_many (SourceCollection* self, GeeCollection* relink);
+static void source_holding_tank_real_contents_altered (SourceHoldingTank* self, GeeCollection* added, GeeCollection* removed);
+static void g_cclosure_user_marshal_VOID__OBJECT_OBJECT (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data);
+static void source_holding_tank_finalize (SourceHoldingTank* obj);
+
+
+static void _source_holding_tank_on_source_destroyed_source_collection_item_destroyed (SourceCollection* _sender, DataSource* source, gpointer self) {
+#line 48 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ source_holding_tank_on_source_destroyed ((SourceHoldingTank*) self, source);
+#line 279 "SourceHoldingTank.c"
+}
+
+
+static void _source_holding_tank_on_source_collection_thawed_data_collection_thawed (DataCollection* _sender, gpointer self) {
+#line 49 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ source_holding_tank_on_source_collection_thawed ((SourceHoldingTank*) self);
+#line 286 "SourceHoldingTank.c"
+}
+
+
+static gpointer _data_collection_ref0 (gpointer self) {
+#line 40 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ return self ? data_collection_ref (self) : NULL;
+#line 293 "SourceHoldingTank.c"
+}
+
+
+SourceHoldingTank* source_holding_tank_construct (GType object_type, SourceCollection* sources, SourceHoldingTankCheckToKeep check_to_keep, void* check_to_keep_target) {
+ SourceHoldingTank* self = NULL;
+ SourceCollection* _tmp0_ = NULL;
+ SourceCollection* _tmp1_ = NULL;
+ SourceHoldingTankCheckToKeep _tmp2_ = NULL;
+ void* _tmp2__target = NULL;
+ SourceCollection* _tmp3_ = NULL;
+ SourceCollection* _tmp4_ = NULL;
+#line 39 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_val_if_fail (IS_SOURCE_COLLECTION (sources), NULL);
+#line 39 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ self = (SourceHoldingTank*) g_type_create_instance (object_type);
+#line 40 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp0_ = sources;
+#line 40 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp1_ = _data_collection_ref0 (_tmp0_);
+#line 40 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _data_collection_unref0 (self->priv->sources);
+#line 40 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ self->priv->sources = _tmp1_;
+#line 41 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp2_ = check_to_keep;
+#line 41 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp2__target = check_to_keep_target;
+#line 41 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ self->priv->check_to_keep = _tmp2_;
+#line 41 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ self->priv->check_to_keep_target = _tmp2__target;
+#line 43 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp3_ = self->priv->sources;
+#line 43 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_signal_connect (_tmp3_, "item-destroyed", (GCallback) _source_holding_tank_on_source_destroyed_source_collection_item_destroyed, self);
+#line 44 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp4_ = self->priv->sources;
+#line 44 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_signal_connect (G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, TYPE_DATA_COLLECTION, DataCollection), "thawed", (GCallback) _source_holding_tank_on_source_collection_thawed_data_collection_thawed, self);
+#line 39 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ return self;
+#line 335 "SourceHoldingTank.c"
+}
+
+
+SourceHoldingTank* source_holding_tank_new (SourceCollection* sources, SourceHoldingTankCheckToKeep check_to_keep, void* check_to_keep_target) {
+#line 39 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ return source_holding_tank_construct (TYPE_SOURCE_HOLDING_TANK, sources, check_to_keep, check_to_keep_target);
+#line 342 "SourceHoldingTank.c"
+}
+
+
+static void source_holding_tank_real_notify_contents_altered (SourceHoldingTank* self, GeeCollection* added, GeeCollection* removed) {
+ GeeCollection* _tmp0_ = NULL;
+ GeeCollection* _tmp8_ = NULL;
+ GeeCollection* _tmp16_ = NULL;
+ GeeCollection* _tmp17_ = NULL;
+#line 52 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_if_fail ((added == NULL) || GEE_IS_COLLECTION (added));
+#line 52 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_if_fail ((removed == NULL) || GEE_IS_COLLECTION (removed));
+#line 54 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp0_ = added;
+#line 54 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (_tmp0_ != NULL) {
+#line 359 "SourceHoldingTank.c"
+ {
+ GeeIterator* _source_it = NULL;
+ GeeCollection* _tmp1_ = NULL;
+ GeeIterator* _tmp2_ = NULL;
+#line 55 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp1_ = added;
+#line 55 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp2_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 55 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _source_it = _tmp2_;
+#line 55 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ while (TRUE) {
+#line 372 "SourceHoldingTank.c"
+ GeeIterator* _tmp3_ = NULL;
+ gboolean _tmp4_ = FALSE;
+ DataSource* source = NULL;
+ GeeIterator* _tmp5_ = NULL;
+ gpointer _tmp6_ = NULL;
+ DataSource* _tmp7_ = NULL;
+#line 55 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp3_ = _source_it;
+#line 55 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp4_ = gee_iterator_next (_tmp3_);
+#line 55 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (!_tmp4_) {
+#line 55 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ break;
+#line 387 "SourceHoldingTank.c"
+ }
+#line 55 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp5_ = _source_it;
+#line 55 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp6_ = gee_iterator_get (_tmp5_);
+#line 55 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ source = (DataSource*) _tmp6_;
+#line 56 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp7_ = source;
+#line 56 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ data_source_notify_held_in_tank (_tmp7_, self);
+#line 55 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _g_object_unref0 (source);
+#line 401 "SourceHoldingTank.c"
+ }
+#line 55 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _g_object_unref0 (_source_it);
+#line 405 "SourceHoldingTank.c"
+ }
+ }
+#line 59 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp8_ = removed;
+#line 59 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (_tmp8_ != NULL) {
+#line 412 "SourceHoldingTank.c"
+ {
+ GeeIterator* _source_it = NULL;
+ GeeCollection* _tmp9_ = NULL;
+ GeeIterator* _tmp10_ = NULL;
+#line 60 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp9_ = removed;
+#line 60 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp10_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 60 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _source_it = _tmp10_;
+#line 60 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ while (TRUE) {
+#line 425 "SourceHoldingTank.c"
+ GeeIterator* _tmp11_ = NULL;
+ gboolean _tmp12_ = FALSE;
+ DataSource* source = NULL;
+ GeeIterator* _tmp13_ = NULL;
+ gpointer _tmp14_ = NULL;
+ DataSource* _tmp15_ = NULL;
+#line 60 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp11_ = _source_it;
+#line 60 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp12_ = gee_iterator_next (_tmp11_);
+#line 60 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (!_tmp12_) {
+#line 60 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ break;
+#line 440 "SourceHoldingTank.c"
+ }
+#line 60 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp13_ = _source_it;
+#line 60 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp14_ = gee_iterator_get (_tmp13_);
+#line 60 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ source = (DataSource*) _tmp14_;
+#line 61 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp15_ = source;
+#line 61 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ data_source_notify_held_in_tank (_tmp15_, NULL);
+#line 60 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _g_object_unref0 (source);
+#line 454 "SourceHoldingTank.c"
+ }
+#line 60 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _g_object_unref0 (_source_it);
+#line 458 "SourceHoldingTank.c"
+ }
+ }
+#line 64 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp16_ = added;
+#line 64 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp17_ = removed;
+#line 64 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_signal_emit_by_name (self, "contents-altered", _tmp16_, _tmp17_);
+#line 467 "SourceHoldingTank.c"
+}
+
+
+void source_holding_tank_notify_contents_altered (SourceHoldingTank* self, GeeCollection* added, GeeCollection* removed) {
+#line 52 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_if_fail (IS_SOURCE_HOLDING_TANK (self));
+#line 52 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ SOURCE_HOLDING_TANK_GET_CLASS (self)->notify_contents_altered (self, added, removed);
+#line 476 "SourceHoldingTank.c"
+}
+
+
+gint source_holding_tank_get_count (SourceHoldingTank* self) {
+ gint result = 0;
+ DataSet* _tmp0_ = NULL;
+ gint _tmp1_ = 0;
+#line 67 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_val_if_fail (IS_SOURCE_HOLDING_TANK (self), 0);
+#line 68 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp0_ = self->priv->tank;
+#line 68 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp1_ = data_set_get_count (_tmp0_);
+#line 68 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ result = _tmp1_;
+#line 68 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ return result;
+#line 494 "SourceHoldingTank.c"
+}
+
+
+GeeCollection* source_holding_tank_get_all (SourceHoldingTank* self) {
+ GeeCollection* result = NULL;
+ DataSet* _tmp0_ = NULL;
+ GeeList* _tmp1_ = NULL;
+#line 71 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_val_if_fail (IS_SOURCE_HOLDING_TANK (self), NULL);
+#line 72 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp0_ = self->priv->tank;
+#line 72 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp1_ = data_set_get_all (_tmp0_);
+#line 72 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_COLLECTION, GeeCollection);
+#line 72 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ return result;
+#line 512 "SourceHoldingTank.c"
+}
+
+
+gboolean source_holding_tank_contains (SourceHoldingTank* self, DataSource* source) {
+ gboolean result = FALSE;
+ gboolean _tmp0_ = FALSE;
+ DataSet* _tmp1_ = NULL;
+ DataSource* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+#line 75 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_val_if_fail (IS_SOURCE_HOLDING_TANK (self), FALSE);
+#line 75 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_val_if_fail (IS_DATA_SOURCE (source), FALSE);
+#line 76 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp1_ = self->priv->tank;
+#line 76 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp2_ = source;
+#line 76 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp3_ = data_set_contains (_tmp1_, G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, TYPE_DATA_OBJECT, DataObject));
+#line 76 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (_tmp3_) {
+#line 76 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp0_ = TRUE;
+#line 536 "SourceHoldingTank.c"
+ } else {
+ GeeHashSet* _tmp4_ = NULL;
+ DataSource* _tmp5_ = NULL;
+ gboolean _tmp6_ = FALSE;
+#line 76 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp4_ = self->priv->unlinking;
+#line 76 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp5_ = source;
+#line 76 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp6_ = gee_abstract_collection_contains (G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp5_);
+#line 76 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp0_ = _tmp6_;
+#line 549 "SourceHoldingTank.c"
+ }
+#line 76 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ result = _tmp0_;
+#line 76 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ return result;
+#line 555 "SourceHoldingTank.c"
+}
+
+
+void source_holding_tank_add_many (SourceHoldingTank* self, GeeCollection* many) {
+ GeeCollection* _tmp0_ = NULL;
+ gint _tmp1_ = 0;
+ gint _tmp2_ = 0;
+ gboolean added = FALSE;
+ DataSet* _tmp11_ = NULL;
+ GeeCollection* _tmp12_ = NULL;
+ gboolean _tmp13_ = FALSE;
+ gboolean _tmp14_ = FALSE;
+ GeeCollection* _tmp15_ = NULL;
+#line 80 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_if_fail (IS_SOURCE_HOLDING_TANK (self));
+#line 80 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (many));
+#line 81 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp0_ = many;
+#line 81 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp1_ = gee_collection_get_size (_tmp0_);
+#line 81 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp2_ = _tmp1_;
+#line 81 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (_tmp2_ == 0) {
+#line 82 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ return;
+#line 583 "SourceHoldingTank.c"
+ }
+ {
+ GeeIterator* _source_it = NULL;
+ GeeCollection* _tmp3_ = NULL;
+ GeeIterator* _tmp4_ = NULL;
+#line 84 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp3_ = many;
+#line 84 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp4_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 84 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _source_it = _tmp4_;
+#line 84 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ while (TRUE) {
+#line 597 "SourceHoldingTank.c"
+ GeeIterator* _tmp5_ = NULL;
+ gboolean _tmp6_ = FALSE;
+ DataSource* source = NULL;
+ GeeIterator* _tmp7_ = NULL;
+ gpointer _tmp8_ = NULL;
+ DataSource* _tmp9_ = NULL;
+ gint64 _tmp10_ = 0LL;
+#line 84 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp5_ = _source_it;
+#line 84 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp6_ = gee_iterator_next (_tmp5_);
+#line 84 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (!_tmp6_) {
+#line 84 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ break;
+#line 613 "SourceHoldingTank.c"
+ }
+#line 84 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp7_ = _source_it;
+#line 84 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp8_ = gee_iterator_get (_tmp7_);
+#line 84 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ source = (DataSource*) _tmp8_;
+#line 85 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp9_ = source;
+#line 85 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp10_ = self->priv->ordinal;
+#line 85 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ self->priv->ordinal = _tmp10_ + 1;
+#line 85 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ data_object_internal_set_ordinal (G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, TYPE_DATA_OBJECT, DataObject), _tmp10_);
+#line 84 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _g_object_unref0 (source);
+#line 631 "SourceHoldingTank.c"
+ }
+#line 84 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _g_object_unref0 (_source_it);
+#line 635 "SourceHoldingTank.c"
+ }
+#line 87 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp11_ = self->priv->tank;
+#line 87 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp12_ = many;
+#line 87 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp13_ = data_set_add_many (_tmp11_, _tmp12_);
+#line 87 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ added = _tmp13_;
+#line 88 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp14_ = added;
+#line 88 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _vala_assert (_tmp14_, "added");
+#line 90 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp15_ = many;
+#line 90 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ source_holding_tank_notify_contents_altered (self, _tmp15_, NULL);
+#line 653 "SourceHoldingTank.c"
+}
+
+
+void source_holding_tank_unlink_and_hold (SourceHoldingTank* self, GeeCollection* unlink) {
+ GeeCollection* _tmp0_ = NULL;
+ gint _tmp1_ = 0;
+ gint _tmp2_ = 0;
+ GeeHashSet* _tmp3_ = NULL;
+ GeeCollection* _tmp4_ = NULL;
+ SourceCollection* _tmp5_ = NULL;
+ SourceCollection* _tmp6_ = NULL;
+ GeeCollection* _tmp7_ = NULL;
+ Marker* _tmp8_ = NULL;
+ Marker* _tmp9_ = NULL;
+ GeeCollection* _tmp10_ = NULL;
+ GeeCollection* _tmp11_ = NULL;
+ gboolean added = FALSE;
+ DataSet* _tmp20_ = NULL;
+ GeeCollection* _tmp21_ = NULL;
+ gboolean _tmp22_ = FALSE;
+ gboolean _tmp23_ = FALSE;
+ GeeHashSet* _tmp24_ = NULL;
+ GeeCollection* _tmp25_ = NULL;
+ GeeCollection* _tmp26_ = NULL;
+#line 95 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_if_fail (IS_SOURCE_HOLDING_TANK (self));
+#line 95 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (unlink));
+#line 96 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp0_ = unlink;
+#line 96 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp1_ = gee_collection_get_size (_tmp0_);
+#line 96 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp2_ = _tmp1_;
+#line 96 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (_tmp2_ == 0) {
+#line 97 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ return;
+#line 692 "SourceHoldingTank.c"
+ }
+#line 100 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp3_ = self->priv->unlinking;
+#line 100 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp4_ = unlink;
+#line 100 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ gee_collection_add_all (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_COLLECTION, GeeCollection), _tmp4_);
+#line 102 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp5_ = self->priv->sources;
+#line 102 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp6_ = self->priv->sources;
+#line 102 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp7_ = unlink;
+#line 102 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp8_ = data_collection_mark_many (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, TYPE_DATA_COLLECTION, DataCollection), _tmp7_);
+#line 102 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp9_ = _tmp8_;
+#line 102 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp10_ = source_collection_unlink_marked (_tmp5_, _tmp9_, NULL, NULL);
+#line 102 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp11_ = _tmp10_;
+#line 102 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _g_object_unref0 (_tmp11_);
+#line 102 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _g_object_unref0 (_tmp9_);
+#line 718 "SourceHoldingTank.c"
+ {
+ GeeIterator* _source_it = NULL;
+ GeeCollection* _tmp12_ = NULL;
+ GeeIterator* _tmp13_ = NULL;
+#line 104 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp12_ = unlink;
+#line 104 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp13_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 104 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _source_it = _tmp13_;
+#line 104 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ while (TRUE) {
+#line 731 "SourceHoldingTank.c"
+ GeeIterator* _tmp14_ = NULL;
+ gboolean _tmp15_ = FALSE;
+ DataSource* source = NULL;
+ GeeIterator* _tmp16_ = NULL;
+ gpointer _tmp17_ = NULL;
+ DataSource* _tmp18_ = NULL;
+ gint64 _tmp19_ = 0LL;
+#line 104 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp14_ = _source_it;
+#line 104 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp15_ = gee_iterator_next (_tmp14_);
+#line 104 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (!_tmp15_) {
+#line 104 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ break;
+#line 747 "SourceHoldingTank.c"
+ }
+#line 104 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp16_ = _source_it;
+#line 104 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp17_ = gee_iterator_get (_tmp16_);
+#line 104 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ source = (DataSource*) _tmp17_;
+#line 105 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp18_ = source;
+#line 105 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp19_ = self->priv->ordinal;
+#line 105 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ self->priv->ordinal = _tmp19_ + 1;
+#line 105 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ data_object_internal_set_ordinal (G_TYPE_CHECK_INSTANCE_CAST (_tmp18_, TYPE_DATA_OBJECT, DataObject), _tmp19_);
+#line 104 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _g_object_unref0 (source);
+#line 765 "SourceHoldingTank.c"
+ }
+#line 104 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _g_object_unref0 (_source_it);
+#line 769 "SourceHoldingTank.c"
+ }
+#line 107 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp20_ = self->priv->tank;
+#line 107 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp21_ = unlink;
+#line 107 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp22_ = data_set_add_many (_tmp20_, _tmp21_);
+#line 107 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ added = _tmp22_;
+#line 108 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp23_ = added;
+#line 108 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _vala_assert (_tmp23_, "added");
+#line 111 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp24_ = self->priv->unlinking;
+#line 111 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp25_ = unlink;
+#line 111 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ gee_collection_remove_all (G_TYPE_CHECK_INSTANCE_CAST (_tmp24_, GEE_TYPE_COLLECTION, GeeCollection), _tmp25_);
+#line 113 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp26_ = unlink;
+#line 113 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ source_holding_tank_notify_contents_altered (self, _tmp26_, NULL);
+#line 793 "SourceHoldingTank.c"
+}
+
+
+gboolean source_holding_tank_has_backlink (SourceHoldingTank* self, SourceBacklink* backlink) {
+ gboolean result = FALSE;
+ gint count = 0;
+ DataSet* _tmp0_ = NULL;
+ gint _tmp1_ = 0;
+#line 116 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_val_if_fail (IS_SOURCE_HOLDING_TANK (self), FALSE);
+#line 116 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_val_if_fail (IS_SOURCE_BACKLINK (backlink), FALSE);
+#line 117 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp0_ = self->priv->tank;
+#line 117 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp1_ = data_set_get_count (_tmp0_);
+#line 117 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ count = _tmp1_;
+#line 812 "SourceHoldingTank.c"
+ {
+ gint ctr = 0;
+#line 118 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ ctr = 0;
+#line 817 "SourceHoldingTank.c"
+ {
+ gboolean _tmp2_ = FALSE;
+#line 118 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp2_ = TRUE;
+#line 118 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ while (TRUE) {
+#line 824 "SourceHoldingTank.c"
+ gint _tmp4_ = 0;
+ gint _tmp5_ = 0;
+ DataSet* _tmp6_ = NULL;
+ gint _tmp7_ = 0;
+ DataObject* _tmp8_ = NULL;
+ DataSource* _tmp9_ = NULL;
+ SourceBacklink* _tmp10_ = NULL;
+ gboolean _tmp11_ = FALSE;
+ gboolean _tmp12_ = FALSE;
+#line 118 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (!_tmp2_) {
+#line 836 "SourceHoldingTank.c"
+ gint _tmp3_ = 0;
+#line 118 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp3_ = ctr;
+#line 118 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ ctr = _tmp3_ + 1;
+#line 842 "SourceHoldingTank.c"
+ }
+#line 118 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp2_ = FALSE;
+#line 118 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp4_ = ctr;
+#line 118 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp5_ = count;
+#line 118 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (!(_tmp4_ < _tmp5_)) {
+#line 118 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ break;
+#line 854 "SourceHoldingTank.c"
+ }
+#line 119 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp6_ = self->priv->tank;
+#line 119 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp7_ = ctr;
+#line 119 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp8_ = data_set_get_at (_tmp6_, _tmp7_);
+#line 119 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp9_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, TYPE_DATA_SOURCE, DataSource);
+#line 119 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp10_ = backlink;
+#line 119 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp11_ = data_source_has_backlink (_tmp9_, _tmp10_);
+#line 119 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp12_ = _tmp11_;
+#line 119 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _g_object_unref0 (_tmp9_);
+#line 119 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (_tmp12_) {
+#line 120 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ result = TRUE;
+#line 120 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ return result;
+#line 878 "SourceHoldingTank.c"
+ }
+ }
+ }
+ }
+#line 123 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ result = FALSE;
+#line 123 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ return result;
+#line 887 "SourceHoldingTank.c"
+}
+
+
+void source_holding_tank_remove_backlink (SourceHoldingTank* self, SourceBacklink* backlink) {
+ gint count = 0;
+ DataSet* _tmp0_ = NULL;
+ gint _tmp1_ = 0;
+#line 126 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_if_fail (IS_SOURCE_HOLDING_TANK (self));
+#line 126 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_if_fail (IS_SOURCE_BACKLINK (backlink));
+#line 127 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp0_ = self->priv->tank;
+#line 127 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp1_ = data_set_get_count (_tmp0_);
+#line 127 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ count = _tmp1_;
+#line 905 "SourceHoldingTank.c"
+ {
+ gint ctr = 0;
+#line 128 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ ctr = 0;
+#line 910 "SourceHoldingTank.c"
+ {
+ gboolean _tmp2_ = FALSE;
+#line 128 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp2_ = TRUE;
+#line 128 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ while (TRUE) {
+#line 917 "SourceHoldingTank.c"
+ gint _tmp4_ = 0;
+ gint _tmp5_ = 0;
+ DataSet* _tmp6_ = NULL;
+ gint _tmp7_ = 0;
+ DataObject* _tmp8_ = NULL;
+ DataSource* _tmp9_ = NULL;
+ SourceBacklink* _tmp10_ = NULL;
+#line 128 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (!_tmp2_) {
+#line 927 "SourceHoldingTank.c"
+ gint _tmp3_ = 0;
+#line 128 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp3_ = ctr;
+#line 128 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ ctr = _tmp3_ + 1;
+#line 933 "SourceHoldingTank.c"
+ }
+#line 128 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp2_ = FALSE;
+#line 128 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp4_ = ctr;
+#line 128 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp5_ = count;
+#line 128 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (!(_tmp4_ < _tmp5_)) {
+#line 128 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ break;
+#line 945 "SourceHoldingTank.c"
+ }
+#line 129 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp6_ = self->priv->tank;
+#line 129 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp7_ = ctr;
+#line 129 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp8_ = data_set_get_at (_tmp6_, _tmp7_);
+#line 129 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp9_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, TYPE_DATA_SOURCE, DataSource);
+#line 129 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp10_ = backlink;
+#line 129 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ data_source_remove_backlink (_tmp9_, _tmp10_);
+#line 129 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _g_object_unref0 (_tmp9_);
+#line 961 "SourceHoldingTank.c"
+ }
+ }
+ }
+}
+
+
+void source_holding_tank_destroy_orphans (SourceHoldingTank* self, GeeList* destroy, gboolean delete_backing, ProgressMonitor monitor, void* monitor_target, GeeList* not_removed) {
+ GeeList* _tmp0_ = NULL;
+ gint _tmp1_ = 0;
+ gint _tmp2_ = 0;
+ gboolean removed = FALSE;
+ DataSet* _tmp3_ = NULL;
+ GeeList* _tmp4_ = NULL;
+ gboolean _tmp5_ = FALSE;
+ gboolean _tmp6_ = FALSE;
+ GeeList* _tmp7_ = NULL;
+ gint count = 0;
+ GeeList* _tmp8_ = NULL;
+ gint _tmp9_ = 0;
+ gint _tmp10_ = 0;
+#line 132 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_if_fail (IS_SOURCE_HOLDING_TANK (self));
+#line 132 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_if_fail (GEE_IS_LIST (destroy));
+#line 132 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_if_fail ((not_removed == NULL) || GEE_IS_LIST (not_removed));
+#line 134 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp0_ = destroy;
+#line 134 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp1_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 134 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp2_ = _tmp1_;
+#line 134 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (_tmp2_ == 0) {
+#line 135 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ return;
+#line 998 "SourceHoldingTank.c"
+ }
+#line 137 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp3_ = self->priv->tank;
+#line 137 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp4_ = destroy;
+#line 137 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp5_ = data_set_remove_many (_tmp3_, G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 137 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ removed = _tmp5_;
+#line 138 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp6_ = removed;
+#line 138 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _vala_assert (_tmp6_, "removed");
+#line 140 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp7_ = destroy;
+#line 140 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ source_holding_tank_notify_contents_altered (self, NULL, G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 142 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp8_ = destroy;
+#line 142 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp9_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 142 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp10_ = _tmp9_;
+#line 142 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ count = _tmp10_;
+#line 1024 "SourceHoldingTank.c"
+ {
+ gint ctr = 0;
+#line 143 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ ctr = 0;
+#line 1029 "SourceHoldingTank.c"
+ {
+ gboolean _tmp11_ = FALSE;
+#line 143 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp11_ = TRUE;
+#line 143 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ while (TRUE) {
+#line 1036 "SourceHoldingTank.c"
+ gint _tmp13_ = 0;
+ gint _tmp14_ = 0;
+ DataSource* source = NULL;
+ GeeList* _tmp15_ = NULL;
+ gint _tmp16_ = 0;
+ gpointer _tmp17_ = NULL;
+ DataSource* _tmp18_ = NULL;
+ gboolean _tmp19_ = FALSE;
+ gboolean _tmp20_ = FALSE;
+ ProgressMonitor _tmp24_ = NULL;
+ void* _tmp24__target = NULL;
+#line 143 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (!_tmp11_) {
+#line 1050 "SourceHoldingTank.c"
+ gint _tmp12_ = 0;
+#line 143 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp12_ = ctr;
+#line 143 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ ctr = _tmp12_ + 1;
+#line 1056 "SourceHoldingTank.c"
+ }
+#line 143 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp11_ = FALSE;
+#line 143 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp13_ = ctr;
+#line 143 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp14_ = count;
+#line 143 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (!(_tmp13_ < _tmp14_)) {
+#line 143 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ break;
+#line 1068 "SourceHoldingTank.c"
+ }
+#line 144 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp15_ = destroy;
+#line 144 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp16_ = ctr;
+#line 144 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp17_ = gee_list_get (_tmp15_, _tmp16_);
+#line 144 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ source = (DataSource*) _tmp17_;
+#line 145 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp18_ = source;
+#line 145 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp19_ = delete_backing;
+#line 145 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp20_ = data_source_destroy_orphan (_tmp18_, _tmp19_);
+#line 145 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (!_tmp20_) {
+#line 1086 "SourceHoldingTank.c"
+ GeeList* _tmp21_ = NULL;
+#line 146 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp21_ = not_removed;
+#line 146 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (NULL != _tmp21_) {
+#line 1092 "SourceHoldingTank.c"
+ GeeList* _tmp22_ = NULL;
+ DataSource* _tmp23_ = NULL;
+#line 147 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp22_ = not_removed;
+#line 147 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp23_ = source;
+#line 147 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ gee_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp22_, GEE_TYPE_COLLECTION, GeeCollection), _tmp23_);
+#line 1101 "SourceHoldingTank.c"
+ }
+ }
+#line 150 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp24_ = monitor;
+#line 150 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp24__target = monitor_target;
+#line 150 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (_tmp24_ != NULL) {
+#line 1110 "SourceHoldingTank.c"
+ ProgressMonitor _tmp25_ = NULL;
+ void* _tmp25__target = NULL;
+ gint _tmp26_ = 0;
+ gint _tmp27_ = 0;
+#line 151 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp25_ = monitor;
+#line 151 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp25__target = monitor_target;
+#line 151 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp26_ = ctr;
+#line 151 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp27_ = count;
+#line 151 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp25_ ((guint64) (_tmp26_ + 1), (guint64) _tmp27_, TRUE, _tmp25__target);
+#line 1125 "SourceHoldingTank.c"
+ }
+#line 143 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _g_object_unref0 (source);
+#line 1129 "SourceHoldingTank.c"
+ }
+ }
+ }
+}
+
+
+static void source_holding_tank_on_source_destroyed (SourceHoldingTank* self, DataSource* source) {
+ DataSet* _tmp0_ = NULL;
+ DataSource* _tmp1_ = NULL;
+ gboolean _tmp2_ = FALSE;
+ gboolean removed = FALSE;
+ DataSet* _tmp3_ = NULL;
+ DataSource* _tmp4_ = NULL;
+ gboolean _tmp5_ = FALSE;
+ gboolean _tmp6_ = FALSE;
+ DataSource* _tmp7_ = NULL;
+ SingletonCollection* _tmp8_ = NULL;
+ SingletonCollection* _tmp9_ = NULL;
+#line 155 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_if_fail (IS_SOURCE_HOLDING_TANK (self));
+#line 155 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_if_fail (IS_DATA_SOURCE (source));
+#line 156 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp0_ = self->priv->tank;
+#line 156 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp1_ = source;
+#line 156 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp2_ = data_set_contains (_tmp0_, G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, TYPE_DATA_OBJECT, DataObject));
+#line 156 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (!_tmp2_) {
+#line 157 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ return;
+#line 1162 "SourceHoldingTank.c"
+ }
+#line 159 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp3_ = self->priv->tank;
+#line 159 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp4_ = source;
+#line 159 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp5_ = data_set_remove (_tmp3_, G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, TYPE_DATA_OBJECT, DataObject));
+#line 159 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ removed = _tmp5_;
+#line 160 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp6_ = removed;
+#line 160 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _vala_assert (_tmp6_, "removed");
+#line 162 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp7_ = source;
+#line 162 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp8_ = singleton_collection_new (TYPE_DATA_SOURCE, (GBoxedCopyFunc) g_object_ref, g_object_unref, _tmp7_);
+#line 162 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp9_ = _tmp8_;
+#line 162 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ source_holding_tank_notify_contents_altered (self, NULL, G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 162 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _g_object_unref0 (_tmp9_);
+#line 1186 "SourceHoldingTank.c"
+}
+
+
+void source_holding_tank_internal_notify_altered (SourceHoldingTank* self, DataSource* source, Alteration* alteration) {
+ DataSet* _tmp0_ = NULL;
+ DataSource* _tmp1_ = NULL;
+ gboolean _tmp2_ = FALSE;
+ SourceHoldingTankCheckToKeep _tmp8_ = NULL;
+ void* _tmp8__target = NULL;
+ DataSource* _tmp9_ = NULL;
+ Alteration* _tmp10_ = NULL;
+ gboolean _tmp11_ = FALSE;
+ gboolean removed = FALSE;
+ DataSet* _tmp12_ = NULL;
+ DataSource* _tmp13_ = NULL;
+ gboolean _tmp14_ = FALSE;
+ gboolean _tmp15_ = FALSE;
+ SourceCollection* _tmp16_ = NULL;
+ gboolean _tmp17_ = FALSE;
+ DataSource* _tmp20_ = NULL;
+ SingletonCollection* _tmp21_ = NULL;
+ SingletonCollection* _tmp22_ = NULL;
+ SourceCollection* _tmp23_ = NULL;
+ DataSource* _tmp24_ = NULL;
+#line 166 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_if_fail (IS_SOURCE_HOLDING_TANK (self));
+#line 166 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_if_fail (IS_DATA_SOURCE (source));
+#line 166 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_if_fail (IS_ALTERATION (alteration));
+#line 167 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp0_ = self->priv->tank;
+#line 167 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp1_ = source;
+#line 167 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp2_ = data_set_contains (_tmp0_, G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, TYPE_DATA_OBJECT, DataObject));
+#line 167 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (!_tmp2_) {
+#line 1225 "SourceHoldingTank.c"
+ DataSource* _tmp3_ = NULL;
+ gchar* _tmp4_ = NULL;
+ gchar* _tmp5_ = NULL;
+ gchar* _tmp6_ = NULL;
+ gchar* _tmp7_ = NULL;
+#line 168 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp3_ = source;
+#line 168 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp4_ = data_object_to_string (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, TYPE_DATA_OBJECT, DataObject));
+#line 168 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp5_ = _tmp4_;
+#line 168 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp6_ = source_holding_tank_to_string (self);
+#line 168 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp7_ = _tmp6_;
+#line 168 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_debug ("SourceHoldingTank.vala:168: SourceHoldingTank.internal_notify_altered " \
+"called for %s not stored in %s", _tmp5_, _tmp7_);
+#line 168 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _g_free0 (_tmp7_);
+#line 168 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _g_free0 (_tmp5_);
+#line 171 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ return;
+#line 1249 "SourceHoldingTank.c"
+ }
+#line 175 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp8_ = self->priv->check_to_keep;
+#line 175 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp8__target = self->priv->check_to_keep_target;
+#line 175 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp9_ = source;
+#line 175 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp10_ = alteration;
+#line 175 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp11_ = _tmp8_ (_tmp9_, _tmp10_, _tmp8__target);
+#line 175 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (_tmp11_) {
+#line 176 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ return;
+#line 1265 "SourceHoldingTank.c"
+ }
+#line 178 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp12_ = self->priv->tank;
+#line 178 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp13_ = source;
+#line 178 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp14_ = data_set_remove (_tmp12_, G_TYPE_CHECK_INSTANCE_CAST (_tmp13_, TYPE_DATA_OBJECT, DataObject));
+#line 178 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ removed = _tmp14_;
+#line 179 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp15_ = removed;
+#line 179 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _vala_assert (_tmp15_, "removed");
+#line 181 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp16_ = self->priv->sources;
+#line 181 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp17_ = data_collection_are_notifications_frozen (G_TYPE_CHECK_INSTANCE_CAST (_tmp16_, TYPE_DATA_COLLECTION, DataCollection));
+#line 181 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (_tmp17_) {
+#line 1285 "SourceHoldingTank.c"
+ GeeHashSet* _tmp18_ = NULL;
+ DataSource* _tmp19_ = NULL;
+#line 182 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp18_ = self->priv->relinks;
+#line 182 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp19_ = source;
+#line 182 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp18_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp19_);
+#line 184 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ return;
+#line 1296 "SourceHoldingTank.c"
+ }
+#line 187 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp20_ = source;
+#line 187 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp21_ = singleton_collection_new (TYPE_DATA_SOURCE, (GBoxedCopyFunc) g_object_ref, g_object_unref, _tmp20_);
+#line 187 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp22_ = _tmp21_;
+#line 187 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ source_holding_tank_notify_contents_altered (self, NULL, G_TYPE_CHECK_INSTANCE_CAST (_tmp22_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 187 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _g_object_unref0 (_tmp22_);
+#line 189 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp23_ = self->priv->sources;
+#line 189 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp24_ = source;
+#line 189 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ source_collection_relink (_tmp23_, _tmp24_);
+#line 1314 "SourceHoldingTank.c"
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+#line 197 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ return self ? g_object_ref (self) : NULL;
+#line 1321 "SourceHoldingTank.c"
+}
+
+
+static void source_holding_tank_on_source_collection_thawed (SourceHoldingTank* self) {
+ GeeHashSet* _tmp0_ = NULL;
+ gint _tmp1_ = 0;
+ gint _tmp2_ = 0;
+ GeeHashSet* copy = NULL;
+ GeeHashSet* _tmp3_ = NULL;
+ GeeHashSet* _tmp4_ = NULL;
+ GeeHashSet* _tmp5_ = NULL;
+ GeeHashSet* _tmp6_ = NULL;
+ SourceCollection* _tmp7_ = NULL;
+ GeeHashSet* _tmp8_ = NULL;
+#line 192 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_if_fail (IS_SOURCE_HOLDING_TANK (self));
+#line 193 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp0_ = self->priv->relinks;
+#line 193 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp1_ = gee_abstract_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 193 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp2_ = _tmp1_;
+#line 193 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (_tmp2_ == 0) {
+#line 194 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ return;
+#line 1348 "SourceHoldingTank.c"
+ }
+#line 197 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp3_ = self->priv->relinks;
+#line 197 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp4_ = _g_object_ref0 (_tmp3_);
+#line 197 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ copy = _tmp4_;
+#line 198 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp5_ = gee_hash_set_new (TYPE_DATA_SOURCE, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 198 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _g_object_unref0 (self->priv->relinks);
+#line 198 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ self->priv->relinks = _tmp5_;
+#line 200 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp6_ = copy;
+#line 200 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ source_holding_tank_notify_contents_altered (self, NULL, G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 202 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp7_ = self->priv->sources;
+#line 202 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp8_ = copy;
+#line 202 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ source_collection_relink_many (_tmp7_, G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 192 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _g_object_unref0 (copy);
+#line 1374 "SourceHoldingTank.c"
+}
+
+
+gchar* source_holding_tank_to_string (SourceHoldingTank* self) {
+ gchar* result = NULL;
+ gchar* _tmp0_ = NULL;
+#line 205 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_val_if_fail (IS_SOURCE_HOLDING_TANK (self), NULL);
+#line 206 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp0_ = g_strdup_printf ("SourceHoldingTank @ 0x%p", self);
+#line 206 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ result = _tmp0_;
+#line 206 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ return result;
+#line 1389 "SourceHoldingTank.c"
+}
+
+
+static void source_holding_tank_real_contents_altered (SourceHoldingTank* self, GeeCollection* added, GeeCollection* removed) {
+#line 35 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_if_fail ((added == NULL) || GEE_IS_COLLECTION (added));
+#line 35 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_if_fail ((removed == NULL) || GEE_IS_COLLECTION (removed));
+#line 1398 "SourceHoldingTank.c"
+}
+
+
+static void g_cclosure_user_marshal_VOID__OBJECT_OBJECT (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data) {
+ typedef void (*GMarshalFunc_VOID__OBJECT_OBJECT) (gpointer data1, gpointer arg_1, gpointer arg_2, gpointer data2);
+ register GMarshalFunc_VOID__OBJECT_OBJECT callback;
+ register GCClosure * cc;
+ register gpointer data1;
+ register gpointer data2;
+ cc = (GCClosure *) closure;
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_if_fail (n_param_values == 3);
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (G_CCLOSURE_SWAP_DATA (closure)) {
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ data1 = closure->data;
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ data2 = param_values->data[0].v_pointer;
+#line 1417 "SourceHoldingTank.c"
+ } else {
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ data1 = param_values->data[0].v_pointer;
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ data2 = closure->data;
+#line 1423 "SourceHoldingTank.c"
+ }
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ callback = (GMarshalFunc_VOID__OBJECT_OBJECT) (marshal_data ? marshal_data : cc->callback);
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ callback (data1, g_value_get_object (param_values + 1), g_value_get_object (param_values + 2), data2);
+#line 1429 "SourceHoldingTank.c"
+}
+
+
+static void value_source_holding_tank_init (GValue* value) {
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ value->data[0].v_pointer = NULL;
+#line 1436 "SourceHoldingTank.c"
+}
+
+
+static void value_source_holding_tank_free_value (GValue* value) {
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (value->data[0].v_pointer) {
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ source_holding_tank_unref (value->data[0].v_pointer);
+#line 1445 "SourceHoldingTank.c"
+ }
+}
+
+
+static void value_source_holding_tank_copy_value (const GValue* src_value, GValue* dest_value) {
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (src_value->data[0].v_pointer) {
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ dest_value->data[0].v_pointer = source_holding_tank_ref (src_value->data[0].v_pointer);
+#line 1455 "SourceHoldingTank.c"
+ } else {
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ dest_value->data[0].v_pointer = NULL;
+#line 1459 "SourceHoldingTank.c"
+ }
+}
+
+
+static gpointer value_source_holding_tank_peek_pointer (const GValue* value) {
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ return value->data[0].v_pointer;
+#line 1467 "SourceHoldingTank.c"
+}
+
+
+static gchar* value_source_holding_tank_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (collect_values[0].v_pointer) {
+#line 1474 "SourceHoldingTank.c"
+ SourceHoldingTank* object;
+ object = collect_values[0].v_pointer;
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (object->parent_instance.g_class == NULL) {
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+#line 1481 "SourceHoldingTank.c"
+ } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+#line 1485 "SourceHoldingTank.c"
+ }
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ value->data[0].v_pointer = source_holding_tank_ref (object);
+#line 1489 "SourceHoldingTank.c"
+ } else {
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ value->data[0].v_pointer = NULL;
+#line 1493 "SourceHoldingTank.c"
+ }
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ return NULL;
+#line 1497 "SourceHoldingTank.c"
+}
+
+
+static gchar* value_source_holding_tank_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+ SourceHoldingTank** object_p;
+ object_p = collect_values[0].v_pointer;
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (!object_p) {
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+#line 1508 "SourceHoldingTank.c"
+ }
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (!value->data[0].v_pointer) {
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ *object_p = NULL;
+#line 1514 "SourceHoldingTank.c"
+ } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ *object_p = value->data[0].v_pointer;
+#line 1518 "SourceHoldingTank.c"
+ } else {
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ *object_p = source_holding_tank_ref (value->data[0].v_pointer);
+#line 1522 "SourceHoldingTank.c"
+ }
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ return NULL;
+#line 1526 "SourceHoldingTank.c"
+}
+
+
+GParamSpec* param_spec_source_holding_tank (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
+ ParamSpecSourceHoldingTank* spec;
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_val_if_fail (g_type_is_a (object_type, TYPE_SOURCE_HOLDING_TANK), NULL);
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ G_PARAM_SPEC (spec)->value_type = object_type;
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ return G_PARAM_SPEC (spec);
+#line 1540 "SourceHoldingTank.c"
+}
+
+
+gpointer value_get_source_holding_tank (const GValue* value) {
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_SOURCE_HOLDING_TANK), NULL);
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ return value->data[0].v_pointer;
+#line 1549 "SourceHoldingTank.c"
+}
+
+
+void value_set_source_holding_tank (GValue* value, gpointer v_object) {
+ SourceHoldingTank* old;
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_SOURCE_HOLDING_TANK));
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ old = value->data[0].v_pointer;
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (v_object) {
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_SOURCE_HOLDING_TANK));
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ value->data[0].v_pointer = v_object;
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ source_holding_tank_ref (value->data[0].v_pointer);
+#line 1569 "SourceHoldingTank.c"
+ } else {
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ value->data[0].v_pointer = NULL;
+#line 1573 "SourceHoldingTank.c"
+ }
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (old) {
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ source_holding_tank_unref (old);
+#line 1579 "SourceHoldingTank.c"
+ }
+}
+
+
+void value_take_source_holding_tank (GValue* value, gpointer v_object) {
+ SourceHoldingTank* old;
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_SOURCE_HOLDING_TANK));
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ old = value->data[0].v_pointer;
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (v_object) {
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_SOURCE_HOLDING_TANK));
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ value->data[0].v_pointer = v_object;
+#line 1598 "SourceHoldingTank.c"
+ } else {
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ value->data[0].v_pointer = NULL;
+#line 1602 "SourceHoldingTank.c"
+ }
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (old) {
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ source_holding_tank_unref (old);
+#line 1608 "SourceHoldingTank.c"
+ }
+}
+
+
+static void source_holding_tank_class_init (SourceHoldingTankClass * klass) {
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ source_holding_tank_parent_class = g_type_class_peek_parent (klass);
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ ((SourceHoldingTankClass *) klass)->finalize = source_holding_tank_finalize;
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_type_class_add_private (klass, sizeof (SourceHoldingTankPrivate));
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ ((SourceHoldingTankClass *) klass)->notify_contents_altered = source_holding_tank_real_notify_contents_altered;
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ ((SourceHoldingTankClass *) klass)->contents_altered = source_holding_tank_real_contents_altered;
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_signal_new ("contents_altered", TYPE_SOURCE_HOLDING_TANK, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (SourceHoldingTankClass, contents_altered), NULL, NULL, g_cclosure_user_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, GEE_TYPE_COLLECTION, GEE_TYPE_COLLECTION);
+#line 1626 "SourceHoldingTank.c"
+}
+
+
+static void source_holding_tank_instance_init (SourceHoldingTank * self) {
+ DataSet* _tmp0_ = NULL;
+ GeeHashSet* _tmp1_ = NULL;
+ GeeHashSet* _tmp2_ = NULL;
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ self->priv = SOURCE_HOLDING_TANK_GET_PRIVATE (self);
+#line 30 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp0_ = data_set_new ();
+#line 30 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ self->priv->tank = _tmp0_;
+#line 31 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp1_ = gee_hash_set_new (TYPE_DATA_SOURCE, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 31 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ self->priv->relinks = _tmp1_;
+#line 32 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp2_ = gee_hash_set_new (TYPE_DATA_SOURCE, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 32 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ self->priv->unlinking = _tmp2_;
+#line 33 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ self->priv->ordinal = (gint64) 0;
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ self->ref_count = 1;
+#line 1652 "SourceHoldingTank.c"
+}
+
+
+static void source_holding_tank_finalize (SourceHoldingTank* obj) {
+ SourceHoldingTank * self;
+ SourceCollection* _tmp0_ = NULL;
+ guint _tmp1_ = 0U;
+ SourceCollection* _tmp2_ = NULL;
+ guint _tmp3_ = 0U;
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_SOURCE_HOLDING_TANK, SourceHoldingTank);
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_signal_handlers_destroy (self);
+#line 48 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp0_ = self->priv->sources;
+#line 48 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_signal_parse_name ("item-destroyed", TYPE_SOURCE_COLLECTION, &_tmp1_, NULL, FALSE);
+#line 48 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_signal_handlers_disconnect_matched (_tmp0_, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp1_, 0, NULL, (GCallback) _source_holding_tank_on_source_destroyed_source_collection_item_destroyed, self);
+#line 49 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _tmp2_ = self->priv->sources;
+#line 49 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_signal_parse_name ("thawed", TYPE_DATA_COLLECTION, &_tmp3_, NULL, FALSE);
+#line 49 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_signal_handlers_disconnect_matched (G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, TYPE_DATA_COLLECTION, DataCollection), G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp3_, 0, NULL, (GCallback) _source_holding_tank_on_source_collection_thawed_data_collection_thawed, self);
+#line 28 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _data_collection_unref0 (self->priv->sources);
+#line 30 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _data_set_unref0 (self->priv->tank);
+#line 31 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _g_object_unref0 (self->priv->relinks);
+#line 32 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ _g_object_unref0 (self->priv->unlinking);
+#line 1686 "SourceHoldingTank.c"
+}
+
+
+GType source_holding_tank_get_type (void) {
+ static volatile gsize source_holding_tank_type_id__volatile = 0;
+ if (g_once_init_enter (&source_holding_tank_type_id__volatile)) {
+ static const GTypeValueTable g_define_type_value_table = { value_source_holding_tank_init, value_source_holding_tank_free_value, value_source_holding_tank_copy_value, value_source_holding_tank_peek_pointer, "p", value_source_holding_tank_collect_value, "p", value_source_holding_tank_lcopy_value };
+ static const GTypeInfo g_define_type_info = { sizeof (SourceHoldingTankClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) source_holding_tank_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (SourceHoldingTank), 0, (GInstanceInitFunc) source_holding_tank_instance_init, &g_define_type_value_table };
+ static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
+ GType source_holding_tank_type_id;
+ source_holding_tank_type_id = g_type_register_fundamental (g_type_fundamental_next (), "SourceHoldingTank", &g_define_type_info, &g_define_type_fundamental_info, 0);
+ g_once_init_leave (&source_holding_tank_type_id__volatile, source_holding_tank_type_id);
+ }
+ return source_holding_tank_type_id__volatile;
+}
+
+
+gpointer source_holding_tank_ref (gpointer instance) {
+ SourceHoldingTank* self;
+ self = instance;
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_atomic_int_inc (&self->ref_count);
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ return instance;
+#line 1711 "SourceHoldingTank.c"
+}
+
+
+void source_holding_tank_unref (gpointer instance) {
+ SourceHoldingTank* self;
+ self = instance;
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ if (g_atomic_int_dec_and_test (&self->ref_count)) {
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ SOURCE_HOLDING_TANK_GET_CLASS (self)->finalize (self);
+#line 24 "/home/jens/Source/shotwell/src/core/SourceHoldingTank.vala"
+ g_type_free_instance ((GTypeInstance *) self);
+#line 1724 "SourceHoldingTank.c"
+ }
+}
+
+
+
diff --git a/src/core/SourceInterfaces.c b/src/core/SourceInterfaces.c
new file mode 100644
index 0000000..5cfc5a9
--- /dev/null
+++ b/src/core/SourceInterfaces.c
@@ -0,0 +1,328 @@
+/* SourceInterfaces.c generated by valac 0.32.1, the Vala compiler
+ * generated from SourceInterfaces.vala, do not modify */
+
+/* Copyright 2016 Software Freedom Conservancy Inc.
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later). See the COPYING file in this distribution.
+ */
+/* See the note in MediaInterfaces.vala for some thoughts on the theory of expanding Shotwell's*/
+/* features via interfaces rather than class heirarchies.*/
+/* Indexable DataSources provide raw strings that may be searched against (and, in the future,*/
+/* indexed) for free-text search queries. DataSources implementing Indexable must prepare and*/
+/* store (i.e. cache) these strings using prepare_indexable_string(s), as preparing the strings*/
+/* for each call is expensive.*/
+/**/
+/* When the indexable string has changed, the object should fire an alteration of*/
+/* "indexable:keywords". The prepare methods will not do this.*/
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+#define TYPE_DATA_OBJECT (data_object_get_type ())
+#define DATA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_OBJECT, DataObject))
+#define DATA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_OBJECT, DataObjectClass))
+#define IS_DATA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_OBJECT))
+#define IS_DATA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_OBJECT))
+#define DATA_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_OBJECT, DataObjectClass))
+
+typedef struct _DataObject DataObject;
+typedef struct _DataObjectClass DataObjectClass;
+
+#define TYPE_DATA_SOURCE (data_source_get_type ())
+#define DATA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_SOURCE, DataSource))
+#define DATA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_SOURCE, DataSourceClass))
+#define IS_DATA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_SOURCE))
+#define IS_DATA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_SOURCE))
+#define DATA_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_SOURCE, DataSourceClass))
+
+typedef struct _DataSource DataSource;
+typedef struct _DataSourceClass DataSourceClass;
+
+#define TYPE_INDEXABLE (indexable_get_type ())
+#define INDEXABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_INDEXABLE, Indexable))
+#define IS_INDEXABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_INDEXABLE))
+#define INDEXABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TYPE_INDEXABLE, IndexableIface))
+
+typedef struct _Indexable Indexable;
+typedef struct _IndexableIface IndexableIface;
+#define _g_free0(var) (var = (g_free (var), NULL))
+#define _g_string_free0(var) ((var == NULL) ? NULL : (var = (g_string_free (var, TRUE), NULL)))
+
+struct _IndexableIface {
+ GTypeInterface parent_iface;
+ const gchar* (*get_indexable_keywords) (Indexable* self);
+};
+
+
+
+GType data_object_get_type (void) G_GNUC_CONST;
+GType data_source_get_type (void) G_GNUC_CONST;
+GType indexable_get_type (void) G_GNUC_CONST;
+const gchar* indexable_get_indexable_keywords (Indexable* self);
+gchar* indexable_prepare_indexable_string (const gchar* str);
+gboolean is_string_empty (const gchar* s);
+gchar* string_remove_diacritics (const gchar* istring);
+gchar* indexable_prepare_indexable_strings (gchar** strs, int strs_length1);
+
+
+const gchar* indexable_get_indexable_keywords (Indexable* self) {
+#line 19 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ g_return_val_if_fail (IS_INDEXABLE (self), NULL);
+#line 19 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ return INDEXABLE_GET_INTERFACE (self)->get_indexable_keywords (self);
+#line 78 "SourceInterfaces.c"
+}
+
+
+gchar* indexable_prepare_indexable_string (const gchar* str) {
+ gchar* result = NULL;
+ const gchar* _tmp0_ = NULL;
+ gboolean _tmp1_ = FALSE;
+ const gchar* _tmp2_ = NULL;
+ gchar* _tmp3_ = NULL;
+ gchar* _tmp4_ = NULL;
+ gchar* _tmp5_ = NULL;
+ gchar* _tmp6_ = NULL;
+#line 22 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp0_ = str;
+#line 22 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp1_ = is_string_empty (_tmp0_);
+#line 22 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ if (_tmp1_) {
+#line 23 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ result = NULL;
+#line 23 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ return result;
+#line 101 "SourceInterfaces.c"
+ }
+#line 24 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp2_ = str;
+#line 24 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp3_ = g_utf8_strdown (_tmp2_, (gssize) -1);
+#line 24 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp4_ = _tmp3_;
+#line 24 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp5_ = string_remove_diacritics (_tmp4_);
+#line 24 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp6_ = _tmp5_;
+#line 24 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _g_free0 (_tmp4_);
+#line 24 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ result = _tmp6_;
+#line 24 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ return result;
+#line 119 "SourceInterfaces.c"
+}
+
+
+gchar* indexable_prepare_indexable_strings (gchar** strs, int strs_length1) {
+ gchar* result = NULL;
+ gboolean _tmp0_ = FALSE;
+ gchar** _tmp1_ = NULL;
+ gint _tmp1__length1 = 0;
+ GString* builder = NULL;
+ GString* _tmp3_ = NULL;
+ gint ctr = 0;
+ const gchar* _tmp21_ = NULL;
+ GString* _tmp22_ = NULL;
+ const gchar* _tmp23_ = NULL;
+ gboolean _tmp24_ = FALSE;
+ gchar* _tmp27_ = NULL;
+#line 28 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp1_ = strs;
+#line 28 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp1__length1 = strs_length1;
+#line 28 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ if (_tmp1_ == NULL) {
+#line 28 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp0_ = TRUE;
+#line 144 "SourceInterfaces.c"
+ } else {
+ gchar** _tmp2_ = NULL;
+ gint _tmp2__length1 = 0;
+#line 28 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp2_ = strs;
+#line 28 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp2__length1 = strs_length1;
+#line 28 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp0_ = _tmp2__length1 == 0;
+#line 154 "SourceInterfaces.c"
+ }
+#line 28 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ if (_tmp0_) {
+#line 29 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ result = NULL;
+#line 29 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ return result;
+#line 162 "SourceInterfaces.c"
+ }
+#line 31 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp3_ = g_string_new ("");
+#line 31 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ builder = _tmp3_;
+#line 32 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ ctr = 0;
+#line 170 "SourceInterfaces.c"
+ {
+ gboolean _tmp4_ = FALSE;
+#line 33 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp4_ = TRUE;
+#line 33 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ while (TRUE) {
+#line 177 "SourceInterfaces.c"
+ gchar** _tmp8_ = NULL;
+ gint _tmp8__length1 = 0;
+ gint _tmp9_ = 0;
+ const gchar* _tmp10_ = NULL;
+ gboolean _tmp11_ = FALSE;
+#line 33 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ if (!_tmp4_) {
+#line 185 "SourceInterfaces.c"
+ gint _tmp5_ = 0;
+ gint _tmp6_ = 0;
+ gchar** _tmp7_ = NULL;
+ gint _tmp7__length1 = 0;
+#line 39 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp5_ = ctr;
+#line 39 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ ctr = _tmp5_ + 1;
+#line 39 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp6_ = ctr;
+#line 39 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp7_ = strs;
+#line 39 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp7__length1 = strs_length1;
+#line 39 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ if (!(_tmp6_ < _tmp7__length1)) {
+#line 39 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ break;
+#line 204 "SourceInterfaces.c"
+ }
+ }
+#line 33 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp4_ = FALSE;
+#line 34 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp8_ = strs;
+#line 34 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp8__length1 = strs_length1;
+#line 34 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp9_ = ctr;
+#line 34 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp10_ = _tmp8_[_tmp9_];
+#line 34 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp11_ = is_string_empty (_tmp10_);
+#line 34 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ if (!_tmp11_) {
+#line 221 "SourceInterfaces.c"
+ GString* _tmp12_ = NULL;
+ gchar** _tmp13_ = NULL;
+ gint _tmp13__length1 = 0;
+ gint _tmp14_ = 0;
+ const gchar* _tmp15_ = NULL;
+ gchar* _tmp16_ = NULL;
+ gchar* _tmp17_ = NULL;
+ gint _tmp18_ = 0;
+ gchar** _tmp19_ = NULL;
+ gint _tmp19__length1 = 0;
+#line 35 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp12_ = builder;
+#line 35 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp13_ = strs;
+#line 35 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp13__length1 = strs_length1;
+#line 35 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp14_ = ctr;
+#line 35 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp15_ = _tmp13_[_tmp14_];
+#line 35 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp16_ = g_utf8_strdown (_tmp15_, (gssize) -1);
+#line 35 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp17_ = _tmp16_;
+#line 35 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ g_string_append (_tmp12_, _tmp17_);
+#line 35 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _g_free0 (_tmp17_);
+#line 36 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp18_ = ctr;
+#line 36 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp19_ = strs;
+#line 36 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp19__length1 = strs_length1;
+#line 36 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ if (_tmp18_ < (_tmp19__length1 - 1)) {
+#line 258 "SourceInterfaces.c"
+ GString* _tmp20_ = NULL;
+#line 37 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp20_ = builder;
+#line 37 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ g_string_append_c (_tmp20_, ' ');
+#line 264 "SourceInterfaces.c"
+ }
+ }
+ }
+ }
+#line 41 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp22_ = builder;
+#line 41 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp23_ = _tmp22_->str;
+#line 41 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp24_ = is_string_empty (_tmp23_);
+#line 41 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ if (!_tmp24_) {
+#line 277 "SourceInterfaces.c"
+ GString* _tmp25_ = NULL;
+ const gchar* _tmp26_ = NULL;
+#line 41 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp25_ = builder;
+#line 41 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp26_ = _tmp25_->str;
+#line 41 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp21_ = _tmp26_;
+#line 286 "SourceInterfaces.c"
+ } else {
+#line 41 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp21_ = NULL;
+#line 290 "SourceInterfaces.c"
+ }
+#line 41 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _tmp27_ = g_strdup (_tmp21_);
+#line 41 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ result = _tmp27_;
+#line 41 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ _g_string_free0 (builder);
+#line 41 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ return result;
+#line 300 "SourceInterfaces.c"
+}
+
+
+static void indexable_base_init (IndexableIface * iface) {
+#line 18 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ static gboolean initialized = FALSE;
+#line 18 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ if (!initialized) {
+#line 18 "/home/jens/Source/shotwell/src/core/SourceInterfaces.vala"
+ initialized = TRUE;
+#line 311 "SourceInterfaces.c"
+ }
+}
+
+
+GType indexable_get_type (void) {
+ static volatile gsize indexable_type_id__volatile = 0;
+ if (g_once_init_enter (&indexable_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (IndexableIface), (GBaseInitFunc) indexable_base_init, (GBaseFinalizeFunc) NULL, (GClassInitFunc) NULL, (GClassFinalizeFunc) NULL, NULL, 0, 0, (GInstanceInitFunc) NULL, NULL };
+ GType indexable_type_id;
+ indexable_type_id = g_type_register_static (G_TYPE_INTERFACE, "Indexable", &g_define_type_info, 0);
+ g_type_interface_add_prerequisite (indexable_type_id, TYPE_DATA_SOURCE);
+ g_once_init_leave (&indexable_type_id__volatile, indexable_type_id);
+ }
+ return indexable_type_id__volatile;
+}
+
+
+
diff --git a/src/core/Tracker.c b/src/core/Tracker.c
new file mode 100644
index 0000000..fa66f0e
--- /dev/null
+++ b/src/core/Tracker.c
@@ -0,0 +1,2025 @@
+/* Tracker.c generated by valac 0.32.1, the Vala compiler
+ * generated from Tracker.vala, do not modify */
+
+/* Copyright 2016 Software Freedom Conservancy Inc.
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later). See the COPYING file in this distribution.
+ */
+
+#include <glib.h>
+#include <glib-object.h>
+#include <gee.h>
+#include <gobject/gvaluecollector.h>
+
+
+#define CORE_TYPE_TRACKER_ACCUMULATOR (core_tracker_accumulator_get_type ())
+#define CORE_TRACKER_ACCUMULATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CORE_TYPE_TRACKER_ACCUMULATOR, CoreTrackerAccumulator))
+#define CORE_IS_TRACKER_ACCUMULATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CORE_TYPE_TRACKER_ACCUMULATOR))
+#define CORE_TRACKER_ACCUMULATOR_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), CORE_TYPE_TRACKER_ACCUMULATOR, CoreTrackerAccumulatorIface))
+
+typedef struct _CoreTrackerAccumulator CoreTrackerAccumulator;
+typedef struct _CoreTrackerAccumulatorIface CoreTrackerAccumulatorIface;
+
+#define TYPE_DATA_OBJECT (data_object_get_type ())
+#define DATA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_OBJECT, DataObject))
+#define DATA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_OBJECT, DataObjectClass))
+#define IS_DATA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_OBJECT))
+#define IS_DATA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_OBJECT))
+#define DATA_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_OBJECT, DataObjectClass))
+
+typedef struct _DataObject DataObject;
+typedef struct _DataObjectClass DataObjectClass;
+
+#define TYPE_ALTERATION (alteration_get_type ())
+#define ALTERATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ALTERATION, Alteration))
+#define ALTERATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ALTERATION, AlterationClass))
+#define IS_ALTERATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ALTERATION))
+#define IS_ALTERATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ALTERATION))
+#define ALTERATION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ALTERATION, AlterationClass))
+
+typedef struct _Alteration Alteration;
+typedef struct _AlterationClass AlterationClass;
+
+#define CORE_TYPE_TRACKER (core_tracker_get_type ())
+#define CORE_TRACKER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CORE_TYPE_TRACKER, CoreTracker))
+#define CORE_TRACKER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CORE_TYPE_TRACKER, CoreTrackerClass))
+#define CORE_IS_TRACKER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CORE_TYPE_TRACKER))
+#define CORE_IS_TRACKER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CORE_TYPE_TRACKER))
+#define CORE_TRACKER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CORE_TYPE_TRACKER, CoreTrackerClass))
+
+typedef struct _CoreTracker CoreTracker;
+typedef struct _CoreTrackerClass CoreTrackerClass;
+typedef struct _CoreTrackerPrivate CoreTrackerPrivate;
+
+#define TYPE_DATA_COLLECTION (data_collection_get_type ())
+#define DATA_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_COLLECTION, DataCollection))
+#define DATA_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_COLLECTION, DataCollectionClass))
+#define IS_DATA_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_COLLECTION))
+#define IS_DATA_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_COLLECTION))
+#define DATA_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_COLLECTION, DataCollectionClass))
+
+typedef struct _DataCollection DataCollection;
+typedef struct _DataCollectionClass DataCollectionClass;
+#define _data_collection_unref0(var) ((var == NULL) ? NULL : (var = (data_collection_unref (var), NULL)))
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _alteration_unref0(var) ((var == NULL) ? NULL : (var = (alteration_unref (var), NULL)))
+typedef struct _CoreParamSpecTracker CoreParamSpecTracker;
+
+#define CORE_TYPE_VIEW_TRACKER (core_view_tracker_get_type ())
+#define CORE_VIEW_TRACKER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CORE_TYPE_VIEW_TRACKER, CoreViewTracker))
+#define CORE_VIEW_TRACKER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CORE_TYPE_VIEW_TRACKER, CoreViewTrackerClass))
+#define CORE_IS_VIEW_TRACKER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CORE_TYPE_VIEW_TRACKER))
+#define CORE_IS_VIEW_TRACKER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CORE_TYPE_VIEW_TRACKER))
+#define CORE_VIEW_TRACKER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CORE_TYPE_VIEW_TRACKER, CoreViewTrackerClass))
+
+typedef struct _CoreViewTracker CoreViewTracker;
+typedef struct _CoreViewTrackerClass CoreViewTrackerClass;
+typedef struct _CoreViewTrackerPrivate CoreViewTrackerPrivate;
+
+#define CORE_VIEW_TRACKER_TYPE_MUX (core_view_tracker_mux_get_type ())
+#define CORE_VIEW_TRACKER_MUX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CORE_VIEW_TRACKER_TYPE_MUX, CoreViewTrackerMux))
+#define CORE_VIEW_TRACKER_MUX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CORE_VIEW_TRACKER_TYPE_MUX, CoreViewTrackerMuxClass))
+#define CORE_VIEW_TRACKER_IS_MUX(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CORE_VIEW_TRACKER_TYPE_MUX))
+#define CORE_VIEW_TRACKER_IS_MUX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CORE_VIEW_TRACKER_TYPE_MUX))
+#define CORE_VIEW_TRACKER_MUX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CORE_VIEW_TRACKER_TYPE_MUX, CoreViewTrackerMuxClass))
+
+typedef struct _CoreViewTrackerMux CoreViewTrackerMux;
+typedef struct _CoreViewTrackerMuxClass CoreViewTrackerMuxClass;
+
+#define TYPE_VIEW_COLLECTION (view_collection_get_type ())
+#define VIEW_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_VIEW_COLLECTION, ViewCollection))
+#define VIEW_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_VIEW_COLLECTION, ViewCollectionClass))
+#define IS_VIEW_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_VIEW_COLLECTION))
+#define IS_VIEW_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_VIEW_COLLECTION))
+#define VIEW_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_VIEW_COLLECTION, ViewCollectionClass))
+
+typedef struct _ViewCollection ViewCollection;
+typedef struct _ViewCollectionClass ViewCollectionClass;
+
+#define TYPE_DATA_VIEW (data_view_get_type ())
+#define DATA_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_VIEW, DataView))
+#define DATA_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_VIEW, DataViewClass))
+#define IS_DATA_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_VIEW))
+#define IS_DATA_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_VIEW))
+#define DATA_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_VIEW, DataViewClass))
+
+typedef struct _DataView DataView;
+typedef struct _DataViewClass DataViewClass;
+typedef struct _CoreViewTrackerMuxPrivate CoreViewTrackerMuxPrivate;
+#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
+#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
+#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+
+struct _CoreTrackerAccumulatorIface {
+ GTypeInterface parent_iface;
+ gboolean (*include) (CoreTrackerAccumulator* self, DataObject* object);
+ gboolean (*uninclude) (CoreTrackerAccumulator* self, DataObject* object);
+ gboolean (*altered) (CoreTrackerAccumulator* self, DataObject* object, Alteration* alteration);
+};
+
+struct _CoreTracker {
+ GTypeInstance parent_instance;
+ volatile int ref_count;
+ CoreTrackerPrivate * priv;
+};
+
+struct _CoreTrackerClass {
+ GTypeClass parent_class;
+ void (*finalize) (CoreTracker *self);
+ void (*updated) (CoreTracker* self);
+};
+
+struct _CoreTrackerPrivate {
+ DataCollection* collection;
+ GeeCollection* initial;
+ CoreTrackerAccumulator* acc;
+};
+
+typedef gboolean (*CoreTrackerIncludeUnincludeObject) (DataObject* object, void* user_data);
+struct _CoreParamSpecTracker {
+ GParamSpec parent_instance;
+};
+
+struct _CoreViewTracker {
+ CoreTracker parent_instance;
+ CoreViewTrackerPrivate * priv;
+};
+
+struct _CoreViewTrackerClass {
+ CoreTrackerClass parent_class;
+};
+
+struct _CoreViewTrackerPrivate {
+ CoreViewTrackerMux* mux;
+};
+
+struct _CoreViewTrackerMux {
+ GObject parent_instance;
+ CoreViewTrackerMuxPrivate * priv;
+ CoreTrackerAccumulator* all;
+ CoreTrackerAccumulator* visible;
+ CoreTrackerAccumulator* selected;
+};
+
+struct _CoreViewTrackerMuxClass {
+ GObjectClass parent_class;
+};
+
+
+static gpointer core_tracker_parent_class = NULL;
+static gpointer core_view_tracker_parent_class = NULL;
+static gpointer core_view_tracker_mux_parent_class = NULL;
+static CoreTrackerAccumulatorIface* core_view_tracker_mux_core_tracker_accumulator_parent_iface = NULL;
+
+GType data_object_get_type (void) G_GNUC_CONST;
+gpointer alteration_ref (gpointer instance);
+void alteration_unref (gpointer instance);
+GParamSpec* param_spec_alteration (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_alteration (GValue* value, gpointer v_object);
+void value_take_alteration (GValue* value, gpointer v_object);
+gpointer value_get_alteration (const GValue* value);
+GType alteration_get_type (void) G_GNUC_CONST;
+GType core_tracker_accumulator_get_type (void) G_GNUC_CONST;
+gboolean core_tracker_accumulator_include (CoreTrackerAccumulator* self, DataObject* object);
+gboolean core_tracker_accumulator_uninclude (CoreTrackerAccumulator* self, DataObject* object);
+gboolean core_tracker_accumulator_altered (CoreTrackerAccumulator* self, DataObject* object, Alteration* alteration);
+gpointer core_tracker_ref (gpointer instance);
+void core_tracker_unref (gpointer instance);
+GParamSpec* core_param_spec_tracker (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void core_value_set_tracker (GValue* value, gpointer v_object);
+void core_value_take_tracker (GValue* value, gpointer v_object);
+gpointer core_value_get_tracker (const GValue* value);
+GType core_tracker_get_type (void) G_GNUC_CONST;
+gpointer data_collection_ref (gpointer instance);
+void data_collection_unref (gpointer instance);
+GParamSpec* param_spec_data_collection (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_data_collection (GValue* value, gpointer v_object);
+void value_take_data_collection (GValue* value, gpointer v_object);
+gpointer value_get_data_collection (const GValue* value);
+GType data_collection_get_type (void) G_GNUC_CONST;
+#define CORE_TRACKER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CORE_TYPE_TRACKER, CoreTrackerPrivate))
+enum {
+ CORE_TRACKER_DUMMY_PROPERTY
+};
+static void core_tracker_on_items_added (CoreTracker* self, GeeIterable* added);
+static void _core_tracker_on_items_added_data_collection_items_added (DataCollection* _sender, GeeIterable* added, gpointer self);
+static void core_tracker_on_items_removed (CoreTracker* self, GeeIterable* removed);
+static void _core_tracker_on_items_removed_data_collection_items_removed (DataCollection* _sender, GeeIterable* removed, gpointer self);
+static void core_tracker_on_items_altered (CoreTracker* self, GeeMap* map);
+static void _core_tracker_on_items_altered_data_collection_items_altered (DataCollection* _sender, GeeMap* items, gpointer self);
+CoreTracker* core_tracker_new (DataCollection* collection, GeeCollection* initial);
+CoreTracker* core_tracker_construct (GType object_type, DataCollection* collection, GeeCollection* initial);
+void core_tracker_start (CoreTracker* self, CoreTrackerAccumulator* acc);
+GeeCollection* data_collection_get_all (DataCollection* self);
+DataCollection* core_tracker_get_collection (CoreTracker* self);
+void core_tracker_include_uninclude (CoreTracker* self, GeeIterable* objects, CoreTrackerIncludeUnincludeObject cb, void* cb_target);
+static gboolean _core_tracker_accumulator_include_core_tracker_include_uninclude_object (DataObject* object, gpointer self);
+static gboolean _core_tracker_accumulator_uninclude_core_tracker_include_uninclude_object (DataObject* object, gpointer self);
+static void core_tracker_real_updated (CoreTracker* self);
+static void core_tracker_finalize (CoreTracker* obj);
+GType core_view_tracker_get_type (void) G_GNUC_CONST;
+static GType core_view_tracker_mux_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
+#define CORE_VIEW_TRACKER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CORE_TYPE_VIEW_TRACKER, CoreViewTrackerPrivate))
+enum {
+ CORE_VIEW_TRACKER_DUMMY_PROPERTY
+};
+GType view_collection_get_type (void) G_GNUC_CONST;
+GType data_view_get_type (void) G_GNUC_CONST;
+static void core_view_tracker_on_items_shown (CoreViewTracker* self, GeeCollection* shown);
+static void _core_view_tracker_on_items_shown_view_collection_items_shown (ViewCollection* _sender, GeeCollection* visible, gpointer self);
+static void core_view_tracker_on_items_hidden (CoreViewTracker* self, GeeCollection* hidden);
+static void _core_view_tracker_on_items_hidden_view_collection_items_hidden (ViewCollection* _sender, GeeCollection* hidden, gpointer self);
+static void core_view_tracker_on_items_selected (CoreViewTracker* self, GeeIterable* selected);
+static void _core_view_tracker_on_items_selected_view_collection_items_selected (ViewCollection* _sender, GeeIterable* selected, gpointer self);
+static void core_view_tracker_on_items_unselected (CoreViewTracker* self, GeeIterable* unselected);
+static void _core_view_tracker_on_items_unselected_view_collection_items_unselected (ViewCollection* _sender, GeeIterable* unselected, gpointer self);
+CoreViewTracker* core_view_tracker_new (ViewCollection* collection);
+CoreViewTracker* core_view_tracker_construct (GType object_type, ViewCollection* collection);
+GeeCollection* view_collection_get_all_unfiltered (ViewCollection* self);
+void core_view_tracker_start (CoreViewTracker* self, CoreTrackerAccumulator* all, CoreTrackerAccumulator* visible, CoreTrackerAccumulator* selected);
+static CoreViewTrackerMux* core_view_tracker_mux_new (CoreTrackerAccumulator* all, CoreTrackerAccumulator* visible, CoreTrackerAccumulator* selected);
+static CoreViewTrackerMux* core_view_tracker_mux_construct (GType object_type, CoreTrackerAccumulator* all, CoreTrackerAccumulator* visible, CoreTrackerAccumulator* selected);
+enum {
+ CORE_VIEW_TRACKER_MUX_DUMMY_PROPERTY
+};
+static gboolean core_view_tracker_mux_real_include (CoreTrackerAccumulator* base, DataObject* object);
+gboolean data_view_is_visible (DataView* self);
+gboolean data_view_is_selected (DataView* self);
+static gboolean core_view_tracker_mux_real_uninclude (CoreTrackerAccumulator* base, DataObject* object);
+static gboolean core_view_tracker_mux_real_altered (CoreTrackerAccumulator* base, DataObject* object, Alteration* alteration);
+static void core_view_tracker_mux_finalize (GObject* obj);
+static void core_view_tracker_finalize (CoreTracker* obj);
+
+
+gboolean core_tracker_accumulator_include (CoreTrackerAccumulator* self, DataObject* object) {
+#line 13 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_val_if_fail (CORE_IS_TRACKER_ACCUMULATOR (self), FALSE);
+#line 13 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ return CORE_TRACKER_ACCUMULATOR_GET_INTERFACE (self)->include (self, object);
+#line 262 "Tracker.c"
+}
+
+
+gboolean core_tracker_accumulator_uninclude (CoreTrackerAccumulator* self, DataObject* object) {
+#line 15 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_val_if_fail (CORE_IS_TRACKER_ACCUMULATOR (self), FALSE);
+#line 15 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ return CORE_TRACKER_ACCUMULATOR_GET_INTERFACE (self)->uninclude (self, object);
+#line 271 "Tracker.c"
+}
+
+
+gboolean core_tracker_accumulator_altered (CoreTrackerAccumulator* self, DataObject* object, Alteration* alteration) {
+#line 17 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_val_if_fail (CORE_IS_TRACKER_ACCUMULATOR (self), FALSE);
+#line 17 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ return CORE_TRACKER_ACCUMULATOR_GET_INTERFACE (self)->altered (self, object, alteration);
+#line 280 "Tracker.c"
+}
+
+
+static void core_tracker_accumulator_base_init (CoreTrackerAccumulatorIface * iface) {
+#line 12 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ static gboolean initialized = FALSE;
+#line 12 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (!initialized) {
+#line 12 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ initialized = TRUE;
+#line 291 "Tracker.c"
+ }
+}
+
+
+GType core_tracker_accumulator_get_type (void) {
+ static volatile gsize core_tracker_accumulator_type_id__volatile = 0;
+ if (g_once_init_enter (&core_tracker_accumulator_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (CoreTrackerAccumulatorIface), (GBaseInitFunc) core_tracker_accumulator_base_init, (GBaseFinalizeFunc) NULL, (GClassInitFunc) NULL, (GClassFinalizeFunc) NULL, NULL, 0, 0, (GInstanceInitFunc) NULL, NULL };
+ GType core_tracker_accumulator_type_id;
+ core_tracker_accumulator_type_id = g_type_register_static (G_TYPE_INTERFACE, "CoreTrackerAccumulator", &g_define_type_info, 0);
+ g_type_interface_add_prerequisite (core_tracker_accumulator_type_id, G_TYPE_OBJECT);
+ g_once_init_leave (&core_tracker_accumulator_type_id__volatile, core_tracker_accumulator_type_id);
+ }
+ return core_tracker_accumulator_type_id__volatile;
+}
+
+
+static void _core_tracker_on_items_added_data_collection_items_added (DataCollection* _sender, GeeIterable* added, gpointer self) {
+#line 40 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ core_tracker_on_items_added ((CoreTracker*) self, added);
+#line 312 "Tracker.c"
+}
+
+
+static void _core_tracker_on_items_removed_data_collection_items_removed (DataCollection* _sender, GeeIterable* removed, gpointer self) {
+#line 41 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ core_tracker_on_items_removed ((CoreTracker*) self, removed);
+#line 319 "Tracker.c"
+}
+
+
+static void _core_tracker_on_items_altered_data_collection_items_altered (DataCollection* _sender, GeeMap* items, gpointer self) {
+#line 42 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ core_tracker_on_items_altered ((CoreTracker*) self, items);
+#line 326 "Tracker.c"
+}
+
+
+static gpointer _data_collection_ref0 (gpointer self) {
+#line 34 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ return self ? data_collection_ref (self) : NULL;
+#line 333 "Tracker.c"
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+#line 35 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ return self ? g_object_ref (self) : NULL;
+#line 340 "Tracker.c"
+}
+
+
+CoreTracker* core_tracker_construct (GType object_type, DataCollection* collection, GeeCollection* initial) {
+ CoreTracker* self = NULL;
+ DataCollection* _tmp0_ = NULL;
+ DataCollection* _tmp1_ = NULL;
+ GeeCollection* _tmp2_ = NULL;
+ GeeCollection* _tmp3_ = NULL;
+#line 33 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_val_if_fail (IS_DATA_COLLECTION (collection), NULL);
+#line 33 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_val_if_fail ((initial == NULL) || GEE_IS_COLLECTION (initial), NULL);
+#line 33 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ self = (CoreTracker*) g_type_create_instance (object_type);
+#line 34 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp0_ = collection;
+#line 34 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp1_ = _data_collection_ref0 (_tmp0_);
+#line 34 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _data_collection_unref0 (self->priv->collection);
+#line 34 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ self->priv->collection = _tmp1_;
+#line 35 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp2_ = initial;
+#line 35 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp3_ = _g_object_ref0 (_tmp2_);
+#line 35 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _g_object_unref0 (self->priv->initial);
+#line 35 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ self->priv->initial = _tmp3_;
+#line 33 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ return self;
+#line 374 "Tracker.c"
+}
+
+
+CoreTracker* core_tracker_new (DataCollection* collection, GeeCollection* initial) {
+#line 33 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ return core_tracker_construct (CORE_TYPE_TRACKER, collection, initial);
+#line 381 "Tracker.c"
+}
+
+
+void core_tracker_start (CoreTracker* self, CoreTrackerAccumulator* acc) {
+ CoreTrackerAccumulator* _tmp0_ = NULL;
+ CoreTrackerAccumulator* _tmp1_ = NULL;
+ CoreTrackerAccumulator* _tmp2_ = NULL;
+ DataCollection* _tmp3_ = NULL;
+ DataCollection* _tmp4_ = NULL;
+ DataCollection* _tmp5_ = NULL;
+ gboolean _tmp6_ = FALSE;
+ GeeCollection* _tmp7_ = NULL;
+#line 46 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_if_fail (CORE_IS_TRACKER (self));
+#line 46 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_if_fail (CORE_IS_TRACKER_ACCUMULATOR (acc));
+#line 48 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp0_ = self->priv->acc;
+#line 48 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _vala_assert (_tmp0_ == NULL, "this.acc == null");
+#line 50 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp1_ = acc;
+#line 50 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp2_ = _g_object_ref0 (_tmp1_);
+#line 50 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _g_object_unref0 (self->priv->acc);
+#line 50 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ self->priv->acc = _tmp2_;
+#line 52 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp3_ = self->priv->collection;
+#line 52 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_signal_connect (_tmp3_, "items-added", (GCallback) _core_tracker_on_items_added_data_collection_items_added, self);
+#line 53 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp4_ = self->priv->collection;
+#line 53 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_signal_connect (_tmp4_, "items-removed", (GCallback) _core_tracker_on_items_removed_data_collection_items_removed, self);
+#line 54 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp5_ = self->priv->collection;
+#line 54 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_signal_connect (_tmp5_, "items-altered", (GCallback) _core_tracker_on_items_altered_data_collection_items_altered, self);
+#line 56 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp7_ = self->priv->initial;
+#line 56 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp7_ != NULL) {
+#line 426 "Tracker.c"
+ GeeCollection* _tmp8_ = NULL;
+ gint _tmp9_ = 0;
+ gint _tmp10_ = 0;
+#line 56 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp8_ = self->priv->initial;
+#line 56 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp9_ = gee_collection_get_size (_tmp8_);
+#line 56 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp10_ = _tmp9_;
+#line 56 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp6_ = _tmp10_ > 0;
+#line 438 "Tracker.c"
+ } else {
+#line 56 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp6_ = FALSE;
+#line 442 "Tracker.c"
+ }
+#line 56 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp6_) {
+#line 446 "Tracker.c"
+ GeeCollection* _tmp11_ = NULL;
+#line 57 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp11_ = self->priv->initial;
+#line 57 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ core_tracker_on_items_added (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp11_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 452 "Tracker.c"
+ } else {
+ GeeCollection* _tmp12_ = NULL;
+#line 58 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp12_ = self->priv->initial;
+#line 58 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp12_ == NULL) {
+#line 459 "Tracker.c"
+ DataCollection* _tmp13_ = NULL;
+ GeeCollection* _tmp14_ = NULL;
+ GeeCollection* _tmp15_ = NULL;
+#line 59 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp13_ = self->priv->collection;
+#line 59 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp14_ = data_collection_get_all (_tmp13_);
+#line 59 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp15_ = _tmp14_;
+#line 59 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ core_tracker_on_items_added (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp15_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 59 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _g_object_unref0 (_tmp15_);
+#line 473 "Tracker.c"
+ }
+ }
+#line 61 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _g_object_unref0 (self->priv->initial);
+#line 61 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ self->priv->initial = NULL;
+#line 480 "Tracker.c"
+}
+
+
+DataCollection* core_tracker_get_collection (CoreTracker* self) {
+ DataCollection* result = NULL;
+ DataCollection* _tmp0_ = NULL;
+ DataCollection* _tmp1_ = NULL;
+#line 64 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_val_if_fail (CORE_IS_TRACKER (self), NULL);
+#line 65 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp0_ = self->priv->collection;
+#line 65 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp1_ = _data_collection_ref0 (_tmp0_);
+#line 65 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ result = _tmp1_;
+#line 65 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ return result;
+#line 498 "Tracker.c"
+}
+
+
+static gboolean _core_tracker_accumulator_include_core_tracker_include_uninclude_object (DataObject* object, gpointer self) {
+ gboolean result;
+ result = core_tracker_accumulator_include ((CoreTrackerAccumulator*) self, object);
+#line 69 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ return result;
+#line 507 "Tracker.c"
+}
+
+
+static void core_tracker_on_items_added (CoreTracker* self, GeeIterable* added) {
+ GeeIterable* _tmp0_ = NULL;
+ CoreTrackerAccumulator* _tmp1_ = NULL;
+#line 68 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_if_fail (CORE_IS_TRACKER (self));
+#line 68 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_if_fail (GEE_IS_ITERABLE (added));
+#line 69 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp0_ = added;
+#line 69 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp1_ = self->priv->acc;
+#line 69 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ core_tracker_include_uninclude (self, _tmp0_, _core_tracker_accumulator_include_core_tracker_include_uninclude_object, _tmp1_);
+#line 524 "Tracker.c"
+}
+
+
+static gboolean _core_tracker_accumulator_uninclude_core_tracker_include_uninclude_object (DataObject* object, gpointer self) {
+ gboolean result;
+ result = core_tracker_accumulator_uninclude ((CoreTrackerAccumulator*) self, object);
+#line 73 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ return result;
+#line 533 "Tracker.c"
+}
+
+
+static void core_tracker_on_items_removed (CoreTracker* self, GeeIterable* removed) {
+ GeeIterable* _tmp0_ = NULL;
+ CoreTrackerAccumulator* _tmp1_ = NULL;
+#line 72 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_if_fail (CORE_IS_TRACKER (self));
+#line 72 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_if_fail (GEE_IS_ITERABLE (removed));
+#line 73 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp0_ = removed;
+#line 73 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp1_ = self->priv->acc;
+#line 73 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ core_tracker_include_uninclude (self, _tmp0_, _core_tracker_accumulator_uninclude_core_tracker_include_uninclude_object, _tmp1_);
+#line 550 "Tracker.c"
+}
+
+
+void core_tracker_include_uninclude (CoreTracker* self, GeeIterable* objects, CoreTrackerIncludeUnincludeObject cb, void* cb_target) {
+ gboolean fire_updated = FALSE;
+ gboolean _tmp11_ = FALSE;
+#line 77 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_if_fail (CORE_IS_TRACKER (self));
+#line 77 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_if_fail (GEE_IS_ITERABLE (objects));
+#line 78 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ fire_updated = FALSE;
+#line 563 "Tracker.c"
+ {
+ GeeIterator* _object_it = NULL;
+ GeeIterable* _tmp0_ = NULL;
+ GeeIterator* _tmp1_ = NULL;
+#line 79 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp0_ = objects;
+#line 79 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp1_ = gee_iterable_iterator (_tmp0_);
+#line 79 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _object_it = _tmp1_;
+#line 79 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ while (TRUE) {
+#line 576 "Tracker.c"
+ GeeIterator* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+ DataObject* object = NULL;
+ GeeIterator* _tmp4_ = NULL;
+ gpointer _tmp5_ = NULL;
+ gboolean _tmp6_ = FALSE;
+ CoreTrackerIncludeUnincludeObject _tmp7_ = NULL;
+ void* _tmp7__target = NULL;
+ DataObject* _tmp8_ = NULL;
+ gboolean _tmp9_ = FALSE;
+#line 79 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp2_ = _object_it;
+#line 79 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp3_ = gee_iterator_next (_tmp2_);
+#line 79 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (!_tmp3_) {
+#line 79 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ break;
+#line 595 "Tracker.c"
+ }
+#line 79 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp4_ = _object_it;
+#line 79 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp5_ = gee_iterator_get (_tmp4_);
+#line 79 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ object = (DataObject*) _tmp5_;
+#line 80 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp7_ = cb;
+#line 80 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp7__target = cb_target;
+#line 80 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp8_ = object;
+#line 80 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp9_ = _tmp7_ (_tmp8_, _tmp7__target);
+#line 80 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp9_) {
+#line 80 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp6_ = TRUE;
+#line 615 "Tracker.c"
+ } else {
+ gboolean _tmp10_ = FALSE;
+#line 80 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp10_ = fire_updated;
+#line 80 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp6_ = _tmp10_;
+#line 622 "Tracker.c"
+ }
+#line 80 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ fire_updated = _tmp6_;
+#line 79 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _g_object_unref0 (object);
+#line 628 "Tracker.c"
+ }
+#line 79 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _g_object_unref0 (_object_it);
+#line 632 "Tracker.c"
+ }
+#line 82 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp11_ = fire_updated;
+#line 82 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp11_) {
+#line 83 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_signal_emit_by_name (self, "updated");
+#line 640 "Tracker.c"
+ }
+}
+
+
+static void core_tracker_on_items_altered (CoreTracker* self, GeeMap* map) {
+ gboolean fire_updated = FALSE;
+ gboolean _tmp20_ = FALSE;
+#line 86 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_if_fail (CORE_IS_TRACKER (self));
+#line 86 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_if_fail (GEE_IS_MAP (map));
+#line 87 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ fire_updated = FALSE;
+#line 654 "Tracker.c"
+ {
+ GeeIterator* _object_it = NULL;
+ GeeMap* _tmp0_ = NULL;
+ GeeSet* _tmp1_ = NULL;
+ GeeSet* _tmp2_ = NULL;
+ GeeSet* _tmp3_ = NULL;
+ GeeIterator* _tmp4_ = NULL;
+ GeeIterator* _tmp5_ = NULL;
+#line 88 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp0_ = map;
+#line 88 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp1_ = gee_map_get_keys (_tmp0_);
+#line 88 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp2_ = _tmp1_;
+#line 88 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp3_ = _tmp2_;
+#line 88 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp4_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 88 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp5_ = _tmp4_;
+#line 88 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _g_object_unref0 (_tmp3_);
+#line 88 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _object_it = _tmp5_;
+#line 88 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ while (TRUE) {
+#line 681 "Tracker.c"
+ GeeIterator* _tmp6_ = NULL;
+ gboolean _tmp7_ = FALSE;
+ DataObject* object = NULL;
+ GeeIterator* _tmp8_ = NULL;
+ gpointer _tmp9_ = NULL;
+ gboolean _tmp10_ = FALSE;
+ CoreTrackerAccumulator* _tmp11_ = NULL;
+ DataObject* _tmp12_ = NULL;
+ GeeMap* _tmp13_ = NULL;
+ DataObject* _tmp14_ = NULL;
+ gpointer _tmp15_ = NULL;
+ Alteration* _tmp16_ = NULL;
+ gboolean _tmp17_ = FALSE;
+ gboolean _tmp18_ = FALSE;
+#line 88 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp6_ = _object_it;
+#line 88 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp7_ = gee_iterator_next (_tmp6_);
+#line 88 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (!_tmp7_) {
+#line 88 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ break;
+#line 704 "Tracker.c"
+ }
+#line 88 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp8_ = _object_it;
+#line 88 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp9_ = gee_iterator_get (_tmp8_);
+#line 88 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ object = (DataObject*) _tmp9_;
+#line 89 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp11_ = self->priv->acc;
+#line 89 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp12_ = object;
+#line 89 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp13_ = map;
+#line 89 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp14_ = object;
+#line 89 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp15_ = gee_map_get (_tmp13_, _tmp14_);
+#line 89 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp16_ = (Alteration*) _tmp15_;
+#line 89 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp17_ = core_tracker_accumulator_altered (_tmp11_, _tmp12_, _tmp16_);
+#line 89 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp18_ = _tmp17_;
+#line 89 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _alteration_unref0 (_tmp16_);
+#line 89 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp18_) {
+#line 89 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp10_ = TRUE;
+#line 734 "Tracker.c"
+ } else {
+ gboolean _tmp19_ = FALSE;
+#line 89 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp19_ = fire_updated;
+#line 89 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp10_ = _tmp19_;
+#line 741 "Tracker.c"
+ }
+#line 89 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ fire_updated = _tmp10_;
+#line 88 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _g_object_unref0 (object);
+#line 747 "Tracker.c"
+ }
+#line 88 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _g_object_unref0 (_object_it);
+#line 751 "Tracker.c"
+ }
+#line 91 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp20_ = fire_updated;
+#line 91 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp20_) {
+#line 92 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_signal_emit_by_name (self, "updated");
+#line 759 "Tracker.c"
+ }
+}
+
+
+static void core_tracker_real_updated (CoreTracker* self) {
+}
+
+
+static void core_value_tracker_init (GValue* value) {
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ value->data[0].v_pointer = NULL;
+#line 771 "Tracker.c"
+}
+
+
+static void core_value_tracker_free_value (GValue* value) {
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (value->data[0].v_pointer) {
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ core_tracker_unref (value->data[0].v_pointer);
+#line 780 "Tracker.c"
+ }
+}
+
+
+static void core_value_tracker_copy_value (const GValue* src_value, GValue* dest_value) {
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (src_value->data[0].v_pointer) {
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ dest_value->data[0].v_pointer = core_tracker_ref (src_value->data[0].v_pointer);
+#line 790 "Tracker.c"
+ } else {
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ dest_value->data[0].v_pointer = NULL;
+#line 794 "Tracker.c"
+ }
+}
+
+
+static gpointer core_value_tracker_peek_pointer (const GValue* value) {
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ return value->data[0].v_pointer;
+#line 802 "Tracker.c"
+}
+
+
+static gchar* core_value_tracker_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (collect_values[0].v_pointer) {
+#line 809 "Tracker.c"
+ CoreTracker* object;
+ object = collect_values[0].v_pointer;
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (object->parent_instance.g_class == NULL) {
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+#line 816 "Tracker.c"
+ } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+#line 820 "Tracker.c"
+ }
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ value->data[0].v_pointer = core_tracker_ref (object);
+#line 824 "Tracker.c"
+ } else {
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ value->data[0].v_pointer = NULL;
+#line 828 "Tracker.c"
+ }
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ return NULL;
+#line 832 "Tracker.c"
+}
+
+
+static gchar* core_value_tracker_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+ CoreTracker** object_p;
+ object_p = collect_values[0].v_pointer;
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (!object_p) {
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+#line 843 "Tracker.c"
+ }
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (!value->data[0].v_pointer) {
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ *object_p = NULL;
+#line 849 "Tracker.c"
+ } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ *object_p = value->data[0].v_pointer;
+#line 853 "Tracker.c"
+ } else {
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ *object_p = core_tracker_ref (value->data[0].v_pointer);
+#line 857 "Tracker.c"
+ }
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ return NULL;
+#line 861 "Tracker.c"
+}
+
+
+GParamSpec* core_param_spec_tracker (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
+ CoreParamSpecTracker* spec;
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_val_if_fail (g_type_is_a (object_type, CORE_TYPE_TRACKER), NULL);
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ G_PARAM_SPEC (spec)->value_type = object_type;
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ return G_PARAM_SPEC (spec);
+#line 875 "Tracker.c"
+}
+
+
+gpointer core_value_get_tracker (const GValue* value) {
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, CORE_TYPE_TRACKER), NULL);
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ return value->data[0].v_pointer;
+#line 884 "Tracker.c"
+}
+
+
+void core_value_set_tracker (GValue* value, gpointer v_object) {
+ CoreTracker* old;
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, CORE_TYPE_TRACKER));
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ old = value->data[0].v_pointer;
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (v_object) {
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, CORE_TYPE_TRACKER));
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ value->data[0].v_pointer = v_object;
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ core_tracker_ref (value->data[0].v_pointer);
+#line 904 "Tracker.c"
+ } else {
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ value->data[0].v_pointer = NULL;
+#line 908 "Tracker.c"
+ }
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (old) {
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ core_tracker_unref (old);
+#line 914 "Tracker.c"
+ }
+}
+
+
+void core_value_take_tracker (GValue* value, gpointer v_object) {
+ CoreTracker* old;
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, CORE_TYPE_TRACKER));
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ old = value->data[0].v_pointer;
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (v_object) {
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, CORE_TYPE_TRACKER));
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ value->data[0].v_pointer = v_object;
+#line 933 "Tracker.c"
+ } else {
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ value->data[0].v_pointer = NULL;
+#line 937 "Tracker.c"
+ }
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (old) {
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ core_tracker_unref (old);
+#line 943 "Tracker.c"
+ }
+}
+
+
+static void core_tracker_class_init (CoreTrackerClass * klass) {
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ core_tracker_parent_class = g_type_class_peek_parent (klass);
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ ((CoreTrackerClass *) klass)->finalize = core_tracker_finalize;
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_type_class_add_private (klass, sizeof (CoreTrackerPrivate));
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ ((CoreTrackerClass *) klass)->updated = core_tracker_real_updated;
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_signal_new ("updated", CORE_TYPE_TRACKER, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (CoreTrackerClass, updated), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+#line 959 "Tracker.c"
+}
+
+
+static void core_tracker_instance_init (CoreTracker * self) {
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ self->priv = CORE_TRACKER_GET_PRIVATE (self);
+#line 28 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ self->priv->acc = NULL;
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ self->ref_count = 1;
+#line 970 "Tracker.c"
+}
+
+
+static void core_tracker_finalize (CoreTracker* obj) {
+ CoreTracker * self;
+ CoreTrackerAccumulator* _tmp0_ = NULL;
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, CORE_TYPE_TRACKER, CoreTracker);
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_signal_handlers_destroy (self);
+#line 39 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp0_ = self->priv->acc;
+#line 39 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp0_ != NULL) {
+#line 985 "Tracker.c"
+ DataCollection* _tmp1_ = NULL;
+ guint _tmp2_ = 0U;
+ DataCollection* _tmp3_ = NULL;
+ guint _tmp4_ = 0U;
+ DataCollection* _tmp5_ = NULL;
+ guint _tmp6_ = 0U;
+#line 40 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp1_ = self->priv->collection;
+#line 40 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_signal_parse_name ("items-added", TYPE_DATA_COLLECTION, &_tmp2_, NULL, FALSE);
+#line 40 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_signal_handlers_disconnect_matched (_tmp1_, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp2_, 0, NULL, (GCallback) _core_tracker_on_items_added_data_collection_items_added, self);
+#line 41 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp3_ = self->priv->collection;
+#line 41 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_signal_parse_name ("items-removed", TYPE_DATA_COLLECTION, &_tmp4_, NULL, FALSE);
+#line 41 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_signal_handlers_disconnect_matched (_tmp3_, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp4_, 0, NULL, (GCallback) _core_tracker_on_items_removed_data_collection_items_removed, self);
+#line 42 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp5_ = self->priv->collection;
+#line 42 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_signal_parse_name ("items-altered", TYPE_DATA_COLLECTION, &_tmp6_, NULL, FALSE);
+#line 42 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_signal_handlers_disconnect_matched (_tmp5_, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp6_, 0, NULL, (GCallback) _core_tracker_on_items_altered_data_collection_items_altered, self);
+#line 1010 "Tracker.c"
+ }
+#line 26 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _data_collection_unref0 (self->priv->collection);
+#line 27 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _g_object_unref0 (self->priv->initial);
+#line 28 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _g_object_unref0 (self->priv->acc);
+#line 1018 "Tracker.c"
+}
+
+
+GType core_tracker_get_type (void) {
+ static volatile gsize core_tracker_type_id__volatile = 0;
+ if (g_once_init_enter (&core_tracker_type_id__volatile)) {
+ static const GTypeValueTable g_define_type_value_table = { core_value_tracker_init, core_value_tracker_free_value, core_value_tracker_copy_value, core_value_tracker_peek_pointer, "p", core_value_tracker_collect_value, "p", core_value_tracker_lcopy_value };
+ static const GTypeInfo g_define_type_info = { sizeof (CoreTrackerClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) core_tracker_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (CoreTracker), 0, (GInstanceInitFunc) core_tracker_instance_init, &g_define_type_value_table };
+ static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
+ GType core_tracker_type_id;
+ core_tracker_type_id = g_type_register_fundamental (g_type_fundamental_next (), "CoreTracker", &g_define_type_info, &g_define_type_fundamental_info, 0);
+ g_once_init_leave (&core_tracker_type_id__volatile, core_tracker_type_id);
+ }
+ return core_tracker_type_id__volatile;
+}
+
+
+gpointer core_tracker_ref (gpointer instance) {
+ CoreTracker* self;
+ self = instance;
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_atomic_int_inc (&self->ref_count);
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ return instance;
+#line 1043 "Tracker.c"
+}
+
+
+void core_tracker_unref (gpointer instance) {
+ CoreTracker* self;
+ self = instance;
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (g_atomic_int_dec_and_test (&self->ref_count)) {
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ CORE_TRACKER_GET_CLASS (self)->finalize (self);
+#line 23 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_type_free_instance ((GTypeInstance *) self);
+#line 1056 "Tracker.c"
+ }
+}
+
+
+static void _core_view_tracker_on_items_shown_view_collection_items_shown (ViewCollection* _sender, GeeCollection* visible, gpointer self) {
+#line 173 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ core_view_tracker_on_items_shown ((CoreViewTracker*) self, visible);
+#line 1064 "Tracker.c"
+}
+
+
+static void _core_view_tracker_on_items_hidden_view_collection_items_hidden (ViewCollection* _sender, GeeCollection* hidden, gpointer self) {
+#line 174 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ core_view_tracker_on_items_hidden ((CoreViewTracker*) self, hidden);
+#line 1071 "Tracker.c"
+}
+
+
+static void _core_view_tracker_on_items_selected_view_collection_items_selected (ViewCollection* _sender, GeeIterable* selected, gpointer self) {
+#line 175 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ core_view_tracker_on_items_selected ((CoreViewTracker*) self, selected);
+#line 1078 "Tracker.c"
+}
+
+
+static void _core_view_tracker_on_items_unselected_view_collection_items_unselected (ViewCollection* _sender, GeeIterable* unselected, gpointer self) {
+#line 176 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ core_view_tracker_on_items_unselected ((CoreViewTracker*) self, unselected);
+#line 1085 "Tracker.c"
+}
+
+
+CoreViewTracker* core_view_tracker_construct (GType object_type, ViewCollection* collection) {
+ CoreViewTracker* self = NULL;
+ ViewCollection* _tmp0_ = NULL;
+ ViewCollection* _tmp1_ = NULL;
+ GeeCollection* _tmp2_ = NULL;
+ GeeCollection* _tmp3_ = NULL;
+#line 165 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (collection), NULL);
+#line 166 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp0_ = collection;
+#line 166 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp1_ = collection;
+#line 166 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp2_ = view_collection_get_all_unfiltered (_tmp1_);
+#line 166 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp3_ = _tmp2_;
+#line 166 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ self = (CoreViewTracker*) core_tracker_construct (object_type, G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_DATA_COLLECTION, DataCollection), _tmp3_);
+#line 166 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _g_object_unref0 (_tmp3_);
+#line 165 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ return self;
+#line 1111 "Tracker.c"
+}
+
+
+CoreViewTracker* core_view_tracker_new (ViewCollection* collection) {
+#line 165 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ return core_view_tracker_construct (CORE_TYPE_VIEW_TRACKER, collection);
+#line 1118 "Tracker.c"
+}
+
+
+void core_view_tracker_start (CoreViewTracker* self, CoreTrackerAccumulator* all, CoreTrackerAccumulator* visible, CoreTrackerAccumulator* selected) {
+ CoreViewTrackerMux* _tmp0_ = NULL;
+ CoreTrackerAccumulator* _tmp1_ = NULL;
+ CoreTrackerAccumulator* _tmp2_ = NULL;
+ CoreTrackerAccumulator* _tmp3_ = NULL;
+ CoreViewTrackerMux* _tmp4_ = NULL;
+ ViewCollection* collection = NULL;
+ DataCollection* _tmp5_ = NULL;
+ ViewCollection* _tmp6_ = NULL;
+ CoreViewTrackerMux* _tmp7_ = NULL;
+#line 180 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_if_fail (CORE_IS_VIEW_TRACKER (self));
+#line 180 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_if_fail ((all == NULL) || CORE_IS_TRACKER_ACCUMULATOR (all));
+#line 180 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_if_fail ((visible == NULL) || CORE_IS_TRACKER_ACCUMULATOR (visible));
+#line 180 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_if_fail ((selected == NULL) || CORE_IS_TRACKER_ACCUMULATOR (selected));
+#line 181 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp0_ = self->priv->mux;
+#line 181 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _vala_assert (_tmp0_ == NULL, "mux == null");
+#line 183 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp1_ = all;
+#line 183 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp2_ = visible;
+#line 183 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp3_ = selected;
+#line 183 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp4_ = core_view_tracker_mux_new (_tmp1_, _tmp2_, _tmp3_);
+#line 183 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _g_object_unref0 (self->priv->mux);
+#line 183 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ self->priv->mux = _tmp4_;
+#line 185 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp5_ = core_tracker_get_collection (G_TYPE_CHECK_INSTANCE_CAST (self, CORE_TYPE_TRACKER, CoreTracker));
+#line 185 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp6_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp5_, TYPE_VIEW_COLLECTION) ? ((ViewCollection*) _tmp5_) : NULL;
+#line 185 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp6_ == NULL) {
+#line 185 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _data_collection_unref0 (_tmp5_);
+#line 1164 "Tracker.c"
+ }
+#line 185 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ collection = _tmp6_;
+#line 186 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _vala_assert (collection != NULL, "collection != null");
+#line 187 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_signal_connect (collection, "items-shown", (GCallback) _core_view_tracker_on_items_shown_view_collection_items_shown, self);
+#line 188 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_signal_connect (collection, "items-hidden", (GCallback) _core_view_tracker_on_items_hidden_view_collection_items_hidden, self);
+#line 189 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_signal_connect (collection, "items-selected", (GCallback) _core_view_tracker_on_items_selected_view_collection_items_selected, self);
+#line 190 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_signal_connect (collection, "items-unselected", (GCallback) _core_view_tracker_on_items_unselected_view_collection_items_unselected, self);
+#line 192 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp7_ = self->priv->mux;
+#line 192 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ core_tracker_start (G_TYPE_CHECK_INSTANCE_CAST (self, CORE_TYPE_TRACKER, CoreTracker), G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, CORE_TYPE_TRACKER_ACCUMULATOR, CoreTrackerAccumulator));
+#line 180 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _data_collection_unref0 (collection);
+#line 1184 "Tracker.c"
+}
+
+
+static void core_view_tracker_on_items_shown (CoreViewTracker* self, GeeCollection* shown) {
+ CoreViewTrackerMux* _tmp0_ = NULL;
+ CoreTrackerAccumulator* _tmp1_ = NULL;
+#line 195 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_if_fail (CORE_IS_VIEW_TRACKER (self));
+#line 195 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (shown));
+#line 196 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp0_ = self->priv->mux;
+#line 196 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp1_ = _tmp0_->visible;
+#line 196 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp1_ != NULL) {
+#line 1201 "Tracker.c"
+ GeeCollection* _tmp2_ = NULL;
+ CoreViewTrackerMux* _tmp3_ = NULL;
+ CoreTrackerAccumulator* _tmp4_ = NULL;
+#line 197 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp2_ = shown;
+#line 197 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp3_ = self->priv->mux;
+#line 197 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp4_ = _tmp3_->visible;
+#line 197 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ core_tracker_include_uninclude (G_TYPE_CHECK_INSTANCE_CAST (self, CORE_TYPE_TRACKER, CoreTracker), G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, GEE_TYPE_ITERABLE, GeeIterable), _core_tracker_accumulator_include_core_tracker_include_uninclude_object, _tmp4_);
+#line 1213 "Tracker.c"
+ }
+}
+
+
+static void core_view_tracker_on_items_hidden (CoreViewTracker* self, GeeCollection* hidden) {
+ CoreViewTrackerMux* _tmp0_ = NULL;
+ CoreTrackerAccumulator* _tmp1_ = NULL;
+#line 200 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_if_fail (CORE_IS_VIEW_TRACKER (self));
+#line 200 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (hidden));
+#line 201 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp0_ = self->priv->mux;
+#line 201 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp1_ = _tmp0_->visible;
+#line 201 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp1_ != NULL) {
+#line 1231 "Tracker.c"
+ GeeCollection* _tmp2_ = NULL;
+ CoreViewTrackerMux* _tmp3_ = NULL;
+ CoreTrackerAccumulator* _tmp4_ = NULL;
+#line 202 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp2_ = hidden;
+#line 202 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp3_ = self->priv->mux;
+#line 202 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp4_ = _tmp3_->visible;
+#line 202 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ core_tracker_include_uninclude (G_TYPE_CHECK_INSTANCE_CAST (self, CORE_TYPE_TRACKER, CoreTracker), G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, GEE_TYPE_ITERABLE, GeeIterable), _core_tracker_accumulator_uninclude_core_tracker_include_uninclude_object, _tmp4_);
+#line 1243 "Tracker.c"
+ }
+}
+
+
+static void core_view_tracker_on_items_selected (CoreViewTracker* self, GeeIterable* selected) {
+ CoreViewTrackerMux* _tmp0_ = NULL;
+ CoreTrackerAccumulator* _tmp1_ = NULL;
+#line 205 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_if_fail (CORE_IS_VIEW_TRACKER (self));
+#line 205 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_if_fail (GEE_IS_ITERABLE (selected));
+#line 206 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp0_ = self->priv->mux;
+#line 206 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp1_ = _tmp0_->selected;
+#line 206 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp1_ != NULL) {
+#line 1261 "Tracker.c"
+ GeeIterable* _tmp2_ = NULL;
+ CoreViewTrackerMux* _tmp3_ = NULL;
+ CoreTrackerAccumulator* _tmp4_ = NULL;
+#line 207 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp2_ = selected;
+#line 207 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp3_ = self->priv->mux;
+#line 207 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp4_ = _tmp3_->selected;
+#line 207 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ core_tracker_include_uninclude (G_TYPE_CHECK_INSTANCE_CAST (self, CORE_TYPE_TRACKER, CoreTracker), _tmp2_, _core_tracker_accumulator_include_core_tracker_include_uninclude_object, _tmp4_);
+#line 1273 "Tracker.c"
+ }
+}
+
+
+static void core_view_tracker_on_items_unselected (CoreViewTracker* self, GeeIterable* unselected) {
+ CoreViewTrackerMux* _tmp0_ = NULL;
+ CoreTrackerAccumulator* _tmp1_ = NULL;
+#line 210 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_if_fail (CORE_IS_VIEW_TRACKER (self));
+#line 210 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_if_fail (GEE_IS_ITERABLE (unselected));
+#line 211 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp0_ = self->priv->mux;
+#line 211 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp1_ = _tmp0_->selected;
+#line 211 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp1_ != NULL) {
+#line 1291 "Tracker.c"
+ GeeIterable* _tmp2_ = NULL;
+ CoreViewTrackerMux* _tmp3_ = NULL;
+ CoreTrackerAccumulator* _tmp4_ = NULL;
+#line 212 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp2_ = unselected;
+#line 212 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp3_ = self->priv->mux;
+#line 212 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp4_ = _tmp3_->selected;
+#line 212 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ core_tracker_include_uninclude (G_TYPE_CHECK_INSTANCE_CAST (self, CORE_TYPE_TRACKER, CoreTracker), _tmp2_, _core_tracker_accumulator_uninclude_core_tracker_include_uninclude_object, _tmp4_);
+#line 1303 "Tracker.c"
+ }
+}
+
+
+static CoreViewTrackerMux* core_view_tracker_mux_construct (GType object_type, CoreTrackerAccumulator* all, CoreTrackerAccumulator* visible, CoreTrackerAccumulator* selected) {
+ CoreViewTrackerMux * self = NULL;
+ CoreTrackerAccumulator* _tmp0_ = NULL;
+ CoreTrackerAccumulator* _tmp1_ = NULL;
+ CoreTrackerAccumulator* _tmp2_ = NULL;
+ CoreTrackerAccumulator* _tmp3_ = NULL;
+ CoreTrackerAccumulator* _tmp4_ = NULL;
+ CoreTrackerAccumulator* _tmp5_ = NULL;
+#line 105 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_val_if_fail ((all == NULL) || CORE_IS_TRACKER_ACCUMULATOR (all), NULL);
+#line 105 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_val_if_fail ((visible == NULL) || CORE_IS_TRACKER_ACCUMULATOR (visible), NULL);
+#line 105 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_val_if_fail ((selected == NULL) || CORE_IS_TRACKER_ACCUMULATOR (selected), NULL);
+#line 105 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ self = (CoreViewTrackerMux*) g_object_new (object_type, NULL);
+#line 106 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp0_ = all;
+#line 106 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp1_ = _g_object_ref0 (_tmp0_);
+#line 106 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _g_object_unref0 (self->all);
+#line 106 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ self->all = _tmp1_;
+#line 107 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp2_ = visible;
+#line 107 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp3_ = _g_object_ref0 (_tmp2_);
+#line 107 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _g_object_unref0 (self->visible);
+#line 107 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ self->visible = _tmp3_;
+#line 108 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp4_ = selected;
+#line 108 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp5_ = _g_object_ref0 (_tmp4_);
+#line 108 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _g_object_unref0 (self->selected);
+#line 108 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ self->selected = _tmp5_;
+#line 105 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ return self;
+#line 1350 "Tracker.c"
+}
+
+
+static CoreViewTrackerMux* core_view_tracker_mux_new (CoreTrackerAccumulator* all, CoreTrackerAccumulator* visible, CoreTrackerAccumulator* selected) {
+#line 105 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ return core_view_tracker_mux_construct (CORE_VIEW_TRACKER_TYPE_MUX, all, visible, selected);
+#line 1357 "Tracker.c"
+}
+
+
+static gboolean core_view_tracker_mux_real_include (CoreTrackerAccumulator* base, DataObject* object) {
+ CoreViewTrackerMux * self;
+ gboolean result = FALSE;
+ DataView* view = NULL;
+ DataObject* _tmp0_ = NULL;
+ DataView* _tmp1_ = NULL;
+ gboolean fire_updated = FALSE;
+ CoreTrackerAccumulator* _tmp2_ = NULL;
+ gboolean _tmp8_ = FALSE;
+ CoreTrackerAccumulator* _tmp9_ = NULL;
+ gboolean _tmp17_ = FALSE;
+ CoreTrackerAccumulator* _tmp18_ = NULL;
+#line 111 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, CORE_VIEW_TRACKER_TYPE_MUX, CoreViewTrackerMux);
+#line 111 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (object), FALSE);
+#line 112 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp0_ = object;
+#line 112 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp1_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_DATA_VIEW, DataView));
+#line 112 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ view = _tmp1_;
+#line 114 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ fire_updated = FALSE;
+#line 116 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp2_ = self->all;
+#line 116 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp2_ != NULL) {
+#line 1389 "Tracker.c"
+ gboolean _tmp3_ = FALSE;
+ CoreTrackerAccumulator* _tmp4_ = NULL;
+ DataView* _tmp5_ = NULL;
+ gboolean _tmp6_ = FALSE;
+#line 117 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp4_ = self->all;
+#line 117 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp5_ = view;
+#line 117 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp6_ = core_tracker_accumulator_include (_tmp4_, G_TYPE_CHECK_INSTANCE_CAST (_tmp5_, TYPE_DATA_OBJECT, DataObject));
+#line 117 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp6_) {
+#line 117 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp3_ = TRUE;
+#line 1404 "Tracker.c"
+ } else {
+ gboolean _tmp7_ = FALSE;
+#line 117 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp7_ = fire_updated;
+#line 117 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp3_ = _tmp7_;
+#line 1411 "Tracker.c"
+ }
+#line 117 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ fire_updated = _tmp3_;
+#line 1415 "Tracker.c"
+ }
+#line 119 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp9_ = self->visible;
+#line 119 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp9_ != NULL) {
+#line 1421 "Tracker.c"
+ DataView* _tmp10_ = NULL;
+ gboolean _tmp11_ = FALSE;
+#line 119 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp10_ = view;
+#line 119 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp11_ = data_view_is_visible (_tmp10_);
+#line 119 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp8_ = _tmp11_;
+#line 1430 "Tracker.c"
+ } else {
+#line 119 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp8_ = FALSE;
+#line 1434 "Tracker.c"
+ }
+#line 119 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp8_) {
+#line 1438 "Tracker.c"
+ gboolean _tmp12_ = FALSE;
+ CoreTrackerAccumulator* _tmp13_ = NULL;
+ DataView* _tmp14_ = NULL;
+ gboolean _tmp15_ = FALSE;
+#line 120 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp13_ = self->visible;
+#line 120 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp14_ = view;
+#line 120 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp15_ = core_tracker_accumulator_include (_tmp13_, G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, TYPE_DATA_OBJECT, DataObject));
+#line 120 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp15_) {
+#line 120 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp12_ = TRUE;
+#line 1453 "Tracker.c"
+ } else {
+ gboolean _tmp16_ = FALSE;
+#line 120 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp16_ = fire_updated;
+#line 120 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp12_ = _tmp16_;
+#line 1460 "Tracker.c"
+ }
+#line 120 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ fire_updated = _tmp12_;
+#line 1464 "Tracker.c"
+ }
+#line 122 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp18_ = self->selected;
+#line 122 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp18_ != NULL) {
+#line 1470 "Tracker.c"
+ DataView* _tmp19_ = NULL;
+ gboolean _tmp20_ = FALSE;
+#line 122 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp19_ = view;
+#line 122 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp20_ = data_view_is_selected (_tmp19_);
+#line 122 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp17_ = _tmp20_;
+#line 1479 "Tracker.c"
+ } else {
+#line 122 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp17_ = FALSE;
+#line 1483 "Tracker.c"
+ }
+#line 122 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp17_) {
+#line 1487 "Tracker.c"
+ gboolean _tmp21_ = FALSE;
+ CoreTrackerAccumulator* _tmp22_ = NULL;
+ DataView* _tmp23_ = NULL;
+ gboolean _tmp24_ = FALSE;
+#line 123 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp22_ = self->selected;
+#line 123 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp23_ = view;
+#line 123 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp24_ = core_tracker_accumulator_include (_tmp22_, G_TYPE_CHECK_INSTANCE_CAST (_tmp23_, TYPE_DATA_OBJECT, DataObject));
+#line 123 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp24_) {
+#line 123 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp21_ = TRUE;
+#line 1502 "Tracker.c"
+ } else {
+ gboolean _tmp25_ = FALSE;
+#line 123 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp25_ = fire_updated;
+#line 123 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp21_ = _tmp25_;
+#line 1509 "Tracker.c"
+ }
+#line 123 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ fire_updated = _tmp21_;
+#line 1513 "Tracker.c"
+ }
+#line 125 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ result = fire_updated;
+#line 125 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _g_object_unref0 (view);
+#line 125 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ return result;
+#line 1521 "Tracker.c"
+}
+
+
+static gboolean core_view_tracker_mux_real_uninclude (CoreTrackerAccumulator* base, DataObject* object) {
+ CoreViewTrackerMux * self;
+ gboolean result = FALSE;
+ DataView* view = NULL;
+ DataObject* _tmp0_ = NULL;
+ DataView* _tmp1_ = NULL;
+ gboolean fire_updated = FALSE;
+ CoreTrackerAccumulator* _tmp2_ = NULL;
+ gboolean _tmp8_ = FALSE;
+ CoreTrackerAccumulator* _tmp9_ = NULL;
+ gboolean _tmp17_ = FALSE;
+ CoreTrackerAccumulator* _tmp18_ = NULL;
+#line 128 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, CORE_VIEW_TRACKER_TYPE_MUX, CoreViewTrackerMux);
+#line 128 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (object), FALSE);
+#line 129 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp0_ = object;
+#line 129 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp1_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_DATA_VIEW, DataView));
+#line 129 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ view = _tmp1_;
+#line 131 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ fire_updated = FALSE;
+#line 133 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp2_ = self->all;
+#line 133 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp2_ != NULL) {
+#line 1553 "Tracker.c"
+ gboolean _tmp3_ = FALSE;
+ CoreTrackerAccumulator* _tmp4_ = NULL;
+ DataView* _tmp5_ = NULL;
+ gboolean _tmp6_ = FALSE;
+#line 134 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp4_ = self->all;
+#line 134 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp5_ = view;
+#line 134 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp6_ = core_tracker_accumulator_uninclude (_tmp4_, G_TYPE_CHECK_INSTANCE_CAST (_tmp5_, TYPE_DATA_OBJECT, DataObject));
+#line 134 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp6_) {
+#line 134 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp3_ = TRUE;
+#line 1568 "Tracker.c"
+ } else {
+ gboolean _tmp7_ = FALSE;
+#line 134 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp7_ = fire_updated;
+#line 134 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp3_ = _tmp7_;
+#line 1575 "Tracker.c"
+ }
+#line 134 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ fire_updated = _tmp3_;
+#line 1579 "Tracker.c"
+ }
+#line 136 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp9_ = self->visible;
+#line 136 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp9_ != NULL) {
+#line 1585 "Tracker.c"
+ DataView* _tmp10_ = NULL;
+ gboolean _tmp11_ = FALSE;
+#line 136 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp10_ = view;
+#line 136 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp11_ = data_view_is_visible (_tmp10_);
+#line 136 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp8_ = _tmp11_;
+#line 1594 "Tracker.c"
+ } else {
+#line 136 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp8_ = FALSE;
+#line 1598 "Tracker.c"
+ }
+#line 136 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp8_) {
+#line 1602 "Tracker.c"
+ gboolean _tmp12_ = FALSE;
+ CoreTrackerAccumulator* _tmp13_ = NULL;
+ DataView* _tmp14_ = NULL;
+ gboolean _tmp15_ = FALSE;
+#line 137 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp13_ = self->visible;
+#line 137 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp14_ = view;
+#line 137 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp15_ = core_tracker_accumulator_uninclude (_tmp13_, G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, TYPE_DATA_OBJECT, DataObject));
+#line 137 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp15_) {
+#line 137 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp12_ = TRUE;
+#line 1617 "Tracker.c"
+ } else {
+ gboolean _tmp16_ = FALSE;
+#line 137 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp16_ = fire_updated;
+#line 137 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp12_ = _tmp16_;
+#line 1624 "Tracker.c"
+ }
+#line 137 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ fire_updated = _tmp12_;
+#line 1628 "Tracker.c"
+ }
+#line 139 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp18_ = self->selected;
+#line 139 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp18_ != NULL) {
+#line 1634 "Tracker.c"
+ DataView* _tmp19_ = NULL;
+ gboolean _tmp20_ = FALSE;
+#line 139 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp19_ = view;
+#line 139 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp20_ = data_view_is_selected (_tmp19_);
+#line 139 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp17_ = _tmp20_;
+#line 1643 "Tracker.c"
+ } else {
+#line 139 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp17_ = FALSE;
+#line 1647 "Tracker.c"
+ }
+#line 139 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp17_) {
+#line 1651 "Tracker.c"
+ gboolean _tmp21_ = FALSE;
+ CoreTrackerAccumulator* _tmp22_ = NULL;
+ DataView* _tmp23_ = NULL;
+ gboolean _tmp24_ = FALSE;
+#line 140 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp22_ = self->selected;
+#line 140 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp23_ = view;
+#line 140 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp24_ = core_tracker_accumulator_uninclude (_tmp22_, G_TYPE_CHECK_INSTANCE_CAST (_tmp23_, TYPE_DATA_OBJECT, DataObject));
+#line 140 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp24_) {
+#line 140 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp21_ = TRUE;
+#line 1666 "Tracker.c"
+ } else {
+ gboolean _tmp25_ = FALSE;
+#line 140 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp25_ = fire_updated;
+#line 140 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp21_ = _tmp25_;
+#line 1673 "Tracker.c"
+ }
+#line 140 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ fire_updated = _tmp21_;
+#line 1677 "Tracker.c"
+ }
+#line 142 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ result = fire_updated;
+#line 142 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _g_object_unref0 (view);
+#line 142 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ return result;
+#line 1685 "Tracker.c"
+}
+
+
+static gboolean core_view_tracker_mux_real_altered (CoreTrackerAccumulator* base, DataObject* object, Alteration* alteration) {
+ CoreViewTrackerMux * self;
+ gboolean result = FALSE;
+ DataView* view = NULL;
+ DataObject* _tmp0_ = NULL;
+ DataView* _tmp1_ = NULL;
+ gboolean fire_updated = FALSE;
+ CoreTrackerAccumulator* _tmp2_ = NULL;
+ gboolean _tmp9_ = FALSE;
+ CoreTrackerAccumulator* _tmp10_ = NULL;
+ gboolean _tmp19_ = FALSE;
+ CoreTrackerAccumulator* _tmp20_ = NULL;
+#line 145 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, CORE_VIEW_TRACKER_TYPE_MUX, CoreViewTrackerMux);
+#line 145 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (object), FALSE);
+#line 145 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_return_val_if_fail (IS_ALTERATION (alteration), FALSE);
+#line 146 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp0_ = object;
+#line 146 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp1_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_DATA_VIEW, DataView));
+#line 146 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ view = _tmp1_;
+#line 148 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ fire_updated = FALSE;
+#line 150 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp2_ = self->all;
+#line 150 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp2_ != NULL) {
+#line 1719 "Tracker.c"
+ gboolean _tmp3_ = FALSE;
+ CoreTrackerAccumulator* _tmp4_ = NULL;
+ DataView* _tmp5_ = NULL;
+ Alteration* _tmp6_ = NULL;
+ gboolean _tmp7_ = FALSE;
+#line 151 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp4_ = self->all;
+#line 151 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp5_ = view;
+#line 151 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp6_ = alteration;
+#line 151 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp7_ = core_tracker_accumulator_altered (_tmp4_, G_TYPE_CHECK_INSTANCE_CAST (_tmp5_, TYPE_DATA_OBJECT, DataObject), _tmp6_);
+#line 151 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp7_) {
+#line 151 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp3_ = TRUE;
+#line 1737 "Tracker.c"
+ } else {
+ gboolean _tmp8_ = FALSE;
+#line 151 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp8_ = fire_updated;
+#line 151 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp3_ = _tmp8_;
+#line 1744 "Tracker.c"
+ }
+#line 151 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ fire_updated = _tmp3_;
+#line 1748 "Tracker.c"
+ }
+#line 153 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp10_ = self->visible;
+#line 153 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp10_ != NULL) {
+#line 1754 "Tracker.c"
+ DataView* _tmp11_ = NULL;
+ gboolean _tmp12_ = FALSE;
+#line 153 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp11_ = view;
+#line 153 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp12_ = data_view_is_visible (_tmp11_);
+#line 153 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp9_ = _tmp12_;
+#line 1763 "Tracker.c"
+ } else {
+#line 153 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp9_ = FALSE;
+#line 1767 "Tracker.c"
+ }
+#line 153 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp9_) {
+#line 1771 "Tracker.c"
+ gboolean _tmp13_ = FALSE;
+ CoreTrackerAccumulator* _tmp14_ = NULL;
+ DataView* _tmp15_ = NULL;
+ Alteration* _tmp16_ = NULL;
+ gboolean _tmp17_ = FALSE;
+#line 154 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp14_ = self->visible;
+#line 154 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp15_ = view;
+#line 154 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp16_ = alteration;
+#line 154 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp17_ = core_tracker_accumulator_altered (_tmp14_, G_TYPE_CHECK_INSTANCE_CAST (_tmp15_, TYPE_DATA_OBJECT, DataObject), _tmp16_);
+#line 154 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp17_) {
+#line 154 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp13_ = TRUE;
+#line 1789 "Tracker.c"
+ } else {
+ gboolean _tmp18_ = FALSE;
+#line 154 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp18_ = fire_updated;
+#line 154 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp13_ = _tmp18_;
+#line 1796 "Tracker.c"
+ }
+#line 154 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ fire_updated = _tmp13_;
+#line 1800 "Tracker.c"
+ }
+#line 156 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp20_ = self->selected;
+#line 156 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp20_ != NULL) {
+#line 1806 "Tracker.c"
+ DataView* _tmp21_ = NULL;
+ gboolean _tmp22_ = FALSE;
+#line 156 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp21_ = view;
+#line 156 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp22_ = data_view_is_selected (_tmp21_);
+#line 156 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp19_ = _tmp22_;
+#line 1815 "Tracker.c"
+ } else {
+#line 156 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp19_ = FALSE;
+#line 1819 "Tracker.c"
+ }
+#line 156 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp19_) {
+#line 1823 "Tracker.c"
+ gboolean _tmp23_ = FALSE;
+ CoreTrackerAccumulator* _tmp24_ = NULL;
+ DataView* _tmp25_ = NULL;
+ Alteration* _tmp26_ = NULL;
+ gboolean _tmp27_ = FALSE;
+#line 157 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp24_ = self->selected;
+#line 157 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp25_ = view;
+#line 157 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp26_ = alteration;
+#line 157 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp27_ = core_tracker_accumulator_altered (_tmp24_, G_TYPE_CHECK_INSTANCE_CAST (_tmp25_, TYPE_DATA_OBJECT, DataObject), _tmp26_);
+#line 157 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp27_) {
+#line 157 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp23_ = TRUE;
+#line 1841 "Tracker.c"
+ } else {
+ gboolean _tmp28_ = FALSE;
+#line 157 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp28_ = fire_updated;
+#line 157 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp23_ = _tmp28_;
+#line 1848 "Tracker.c"
+ }
+#line 157 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ fire_updated = _tmp23_;
+#line 1852 "Tracker.c"
+ }
+#line 159 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ result = fire_updated;
+#line 159 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _g_object_unref0 (view);
+#line 159 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ return result;
+#line 1860 "Tracker.c"
+}
+
+
+static void core_view_tracker_mux_class_init (CoreViewTrackerMuxClass * klass) {
+#line 100 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ core_view_tracker_mux_parent_class = g_type_class_peek_parent (klass);
+#line 100 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ G_OBJECT_CLASS (klass)->finalize = core_view_tracker_mux_finalize;
+#line 1869 "Tracker.c"
+}
+
+
+static void core_view_tracker_mux_core_tracker_accumulator_interface_init (CoreTrackerAccumulatorIface * iface) {
+#line 100 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ core_view_tracker_mux_core_tracker_accumulator_parent_iface = g_type_interface_peek_parent (iface);
+#line 100 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ iface->include = (gboolean (*)(CoreTrackerAccumulator*, DataObject*)) core_view_tracker_mux_real_include;
+#line 100 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ iface->uninclude = (gboolean (*)(CoreTrackerAccumulator*, DataObject*)) core_view_tracker_mux_real_uninclude;
+#line 100 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ iface->altered = (gboolean (*)(CoreTrackerAccumulator*, DataObject*, Alteration*)) core_view_tracker_mux_real_altered;
+#line 1882 "Tracker.c"
+}
+
+
+static void core_view_tracker_mux_instance_init (CoreViewTrackerMux * self) {
+}
+
+
+static void core_view_tracker_mux_finalize (GObject* obj) {
+ CoreViewTrackerMux * self;
+#line 100 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, CORE_VIEW_TRACKER_TYPE_MUX, CoreViewTrackerMux);
+#line 101 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _g_object_unref0 (self->all);
+#line 102 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _g_object_unref0 (self->visible);
+#line 103 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _g_object_unref0 (self->selected);
+#line 100 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ G_OBJECT_CLASS (core_view_tracker_mux_parent_class)->finalize (obj);
+#line 1902 "Tracker.c"
+}
+
+
+static GType core_view_tracker_mux_get_type (void) {
+ static volatile gsize core_view_tracker_mux_type_id__volatile = 0;
+ if (g_once_init_enter (&core_view_tracker_mux_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (CoreViewTrackerMuxClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) core_view_tracker_mux_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (CoreViewTrackerMux), 0, (GInstanceInitFunc) core_view_tracker_mux_instance_init, NULL };
+ static const GInterfaceInfo core_tracker_accumulator_info = { (GInterfaceInitFunc) core_view_tracker_mux_core_tracker_accumulator_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
+ GType core_view_tracker_mux_type_id;
+ core_view_tracker_mux_type_id = g_type_register_static (G_TYPE_OBJECT, "CoreViewTrackerMux", &g_define_type_info, 0);
+ g_type_add_interface_static (core_view_tracker_mux_type_id, CORE_TYPE_TRACKER_ACCUMULATOR, &core_tracker_accumulator_info);
+ g_once_init_leave (&core_view_tracker_mux_type_id__volatile, core_view_tracker_mux_type_id);
+ }
+ return core_view_tracker_mux_type_id__volatile;
+}
+
+
+static void core_view_tracker_class_init (CoreViewTrackerClass * klass) {
+#line 99 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ core_view_tracker_parent_class = g_type_class_peek_parent (klass);
+#line 99 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ ((CoreTrackerClass *) klass)->finalize = core_view_tracker_finalize;
+#line 99 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_type_class_add_private (klass, sizeof (CoreViewTrackerPrivate));
+#line 1927 "Tracker.c"
+}
+
+
+static void core_view_tracker_instance_init (CoreViewTracker * self) {
+#line 99 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ self->priv = CORE_VIEW_TRACKER_GET_PRIVATE (self);
+#line 163 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ self->priv->mux = NULL;
+#line 1936 "Tracker.c"
+}
+
+
+static void core_view_tracker_finalize (CoreTracker* obj) {
+ CoreViewTracker * self;
+ CoreViewTrackerMux* _tmp0_ = NULL;
+#line 99 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, CORE_TYPE_VIEW_TRACKER, CoreViewTracker);
+#line 170 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp0_ = self->priv->mux;
+#line 170 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp0_ != NULL) {
+#line 1949 "Tracker.c"
+ ViewCollection* collection = NULL;
+ DataCollection* _tmp1_ = NULL;
+ ViewCollection* _tmp2_ = NULL;
+ ViewCollection* _tmp3_ = NULL;
+ ViewCollection* _tmp4_ = NULL;
+ guint _tmp5_ = 0U;
+ ViewCollection* _tmp6_ = NULL;
+ guint _tmp7_ = 0U;
+ ViewCollection* _tmp8_ = NULL;
+ guint _tmp9_ = 0U;
+ ViewCollection* _tmp10_ = NULL;
+ guint _tmp11_ = 0U;
+#line 171 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp1_ = core_tracker_get_collection (G_TYPE_CHECK_INSTANCE_CAST (self, CORE_TYPE_TRACKER, CoreTracker));
+#line 171 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp2_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, TYPE_VIEW_COLLECTION) ? ((ViewCollection*) _tmp1_) : NULL;
+#line 171 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ if (_tmp2_ == NULL) {
+#line 171 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _data_collection_unref0 (_tmp1_);
+#line 1970 "Tracker.c"
+ }
+#line 171 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ collection = _tmp2_;
+#line 172 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp3_ = collection;
+#line 172 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _vala_assert (_tmp3_ != NULL, "collection != null");
+#line 173 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp4_ = collection;
+#line 173 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_signal_parse_name ("items-shown", TYPE_VIEW_COLLECTION, &_tmp5_, NULL, FALSE);
+#line 173 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_signal_handlers_disconnect_matched (_tmp4_, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp5_, 0, NULL, (GCallback) _core_view_tracker_on_items_shown_view_collection_items_shown, self);
+#line 174 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp6_ = collection;
+#line 174 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_signal_parse_name ("items-hidden", TYPE_VIEW_COLLECTION, &_tmp7_, NULL, FALSE);
+#line 174 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_signal_handlers_disconnect_matched (_tmp6_, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp7_, 0, NULL, (GCallback) _core_view_tracker_on_items_hidden_view_collection_items_hidden, self);
+#line 175 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp8_ = collection;
+#line 175 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_signal_parse_name ("items-selected", TYPE_VIEW_COLLECTION, &_tmp9_, NULL, FALSE);
+#line 175 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_signal_handlers_disconnect_matched (_tmp8_, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp9_, 0, NULL, (GCallback) _core_view_tracker_on_items_selected_view_collection_items_selected, self);
+#line 176 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _tmp10_ = collection;
+#line 176 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_signal_parse_name ("items-unselected", TYPE_VIEW_COLLECTION, &_tmp11_, NULL, FALSE);
+#line 176 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ g_signal_handlers_disconnect_matched (_tmp10_, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp11_, 0, NULL, (GCallback) _core_view_tracker_on_items_unselected_view_collection_items_unselected, self);
+#line 170 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _data_collection_unref0 (collection);
+#line 2004 "Tracker.c"
+ }
+#line 163 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ _g_object_unref0 (self->priv->mux);
+#line 99 "/home/jens/Source/shotwell/src/core/Tracker.vala"
+ CORE_TRACKER_CLASS (core_view_tracker_parent_class)->finalize (obj);
+#line 2010 "Tracker.c"
+}
+
+
+GType core_view_tracker_get_type (void) {
+ static volatile gsize core_view_tracker_type_id__volatile = 0;
+ if (g_once_init_enter (&core_view_tracker_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (CoreViewTrackerClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) core_view_tracker_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (CoreViewTracker), 0, (GInstanceInitFunc) core_view_tracker_instance_init, NULL };
+ GType core_view_tracker_type_id;
+ core_view_tracker_type_id = g_type_register_static (CORE_TYPE_TRACKER, "CoreViewTracker", &g_define_type_info, 0);
+ g_once_init_leave (&core_view_tracker_type_id__volatile, core_view_tracker_type_id);
+ }
+ return core_view_tracker_type_id__volatile;
+}
+
+
+
diff --git a/src/core/ViewCollection.c b/src/core/ViewCollection.c
new file mode 100644
index 0000000..597091c
--- /dev/null
+++ b/src/core/ViewCollection.c
@@ -0,0 +1,9140 @@
+/* ViewCollection.c generated by valac 0.32.1, the Vala compiler
+ * generated from ViewCollection.vala, do not modify */
+
+/* Copyright 2016 Software Freedom Conservancy Inc.
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later). See the COPYING file in this distribution.
+ */
+/* A ViewCollection holds DataView objects, which are view instances wrapping DataSource objects.*/
+/* Thus, multiple views can exist of a single SourceCollection, each view displaying all or some*/
+/* of that SourceCollection. A view collection also has a notion of order*/
+/* (first/last/next/previous) that can be overridden by child classes. It also understands hidden*/
+/* objects, which are withheld entirely from the collection until they're made visible. Currently*/
+/* the only way to hide objects is with a ViewFilter.*/
+/**/
+/* A ViewCollection may also be locked. When locked, it will not (a) remove hidden items from the*/
+/* collection and (b) remove DataViews representing unlinked DataSources. This allows for the*/
+/* ViewCollection to be "frozen" while manipulating items within it. When the collection is*/
+/* unlocked, all changes are applied at once.*/
+/**/
+/* The default implementation provides a browser which orders the view in the order they're*/
+/* stored in DataCollection, which is not specified.*/
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gee.h>
+#include <gobject/gvaluecollector.h>
+
+
+#define TYPE_DATA_COLLECTION (data_collection_get_type ())
+#define DATA_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_COLLECTION, DataCollection))
+#define DATA_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_COLLECTION, DataCollectionClass))
+#define IS_DATA_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_COLLECTION))
+#define IS_DATA_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_COLLECTION))
+#define DATA_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_COLLECTION, DataCollectionClass))
+
+typedef struct _DataCollection DataCollection;
+typedef struct _DataCollectionClass DataCollectionClass;
+typedef struct _DataCollectionPrivate DataCollectionPrivate;
+
+#define TYPE_DATA_OBJECT (data_object_get_type ())
+#define DATA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_OBJECT, DataObject))
+#define DATA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_OBJECT, DataObjectClass))
+#define IS_DATA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_OBJECT))
+#define IS_DATA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_OBJECT))
+#define DATA_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_OBJECT, DataObjectClass))
+
+typedef struct _DataObject DataObject;
+typedef struct _DataObjectClass DataObjectClass;
+
+#define TYPE_ALTERATION (alteration_get_type ())
+#define ALTERATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ALTERATION, Alteration))
+#define ALTERATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ALTERATION, AlterationClass))
+#define IS_ALTERATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ALTERATION))
+#define IS_ALTERATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ALTERATION))
+#define ALTERATION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ALTERATION, AlterationClass))
+
+typedef struct _Alteration Alteration;
+typedef struct _AlterationClass AlterationClass;
+
+#define TYPE_MARKER (marker_get_type ())
+#define MARKER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_MARKER, Marker))
+#define IS_MARKER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_MARKER))
+#define MARKER_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TYPE_MARKER, MarkerIface))
+
+typedef struct _Marker Marker;
+typedef struct _MarkerIface MarkerIface;
+
+#define TYPE_VIEW_COLLECTION (view_collection_get_type ())
+#define VIEW_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_VIEW_COLLECTION, ViewCollection))
+#define VIEW_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_VIEW_COLLECTION, ViewCollectionClass))
+#define IS_VIEW_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_VIEW_COLLECTION))
+#define IS_VIEW_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_VIEW_COLLECTION))
+#define VIEW_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_VIEW_COLLECTION, ViewCollectionClass))
+
+typedef struct _ViewCollection ViewCollection;
+typedef struct _ViewCollectionClass ViewCollectionClass;
+typedef struct _ViewCollectionPrivate ViewCollectionPrivate;
+
+#define TYPE_DATA_VIEW (data_view_get_type ())
+#define DATA_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_VIEW, DataView))
+#define DATA_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_VIEW, DataViewClass))
+#define IS_DATA_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_VIEW))
+#define IS_DATA_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_VIEW))
+#define DATA_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_VIEW, DataViewClass))
+
+typedef struct _DataView DataView;
+typedef struct _DataViewClass DataViewClass;
+
+#define TYPE_VIEW_FILTER (view_filter_get_type ())
+#define VIEW_FILTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_VIEW_FILTER, ViewFilter))
+#define VIEW_FILTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_VIEW_FILTER, ViewFilterClass))
+#define IS_VIEW_FILTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_VIEW_FILTER))
+#define IS_VIEW_FILTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_VIEW_FILTER))
+#define VIEW_FILTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_VIEW_FILTER, ViewFilterClass))
+
+typedef struct _ViewFilter ViewFilter;
+typedef struct _ViewFilterClass ViewFilterClass;
+
+#define TYPE_SOURCE_COLLECTION (source_collection_get_type ())
+#define SOURCE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SOURCE_COLLECTION, SourceCollection))
+#define SOURCE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SOURCE_COLLECTION, SourceCollectionClass))
+#define IS_SOURCE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SOURCE_COLLECTION))
+#define IS_SOURCE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SOURCE_COLLECTION))
+#define SOURCE_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SOURCE_COLLECTION, SourceCollectionClass))
+
+typedef struct _SourceCollection SourceCollection;
+typedef struct _SourceCollectionClass SourceCollectionClass;
+
+#define VIEW_COLLECTION_TYPE_MONITOR (view_collection_monitor_get_type ())
+#define VIEW_COLLECTION_MONITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIEW_COLLECTION_TYPE_MONITOR, ViewCollectionMonitor))
+#define VIEW_COLLECTION_MONITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIEW_COLLECTION_TYPE_MONITOR, ViewCollectionMonitorClass))
+#define VIEW_COLLECTION_IS_MONITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIEW_COLLECTION_TYPE_MONITOR))
+#define VIEW_COLLECTION_IS_MONITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIEW_COLLECTION_TYPE_MONITOR))
+#define VIEW_COLLECTION_MONITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIEW_COLLECTION_TYPE_MONITOR, ViewCollectionMonitorClass))
+
+typedef struct _ViewCollectionMonitor ViewCollectionMonitor;
+typedef struct _ViewCollectionMonitorClass ViewCollectionMonitorClass;
+
+#define VIEW_COLLECTION_TYPE_MONITOR_IMPL (view_collection_monitor_impl_get_type ())
+#define VIEW_COLLECTION_MONITOR_IMPL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIEW_COLLECTION_TYPE_MONITOR_IMPL, ViewCollectionMonitorImpl))
+#define VIEW_COLLECTION_MONITOR_IMPL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIEW_COLLECTION_TYPE_MONITOR_IMPL, ViewCollectionMonitorImplClass))
+#define VIEW_COLLECTION_IS_MONITOR_IMPL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIEW_COLLECTION_TYPE_MONITOR_IMPL))
+#define VIEW_COLLECTION_IS_MONITOR_IMPL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIEW_COLLECTION_TYPE_MONITOR_IMPL))
+#define VIEW_COLLECTION_MONITOR_IMPL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIEW_COLLECTION_TYPE_MONITOR_IMPL, ViewCollectionMonitorImplClass))
+
+typedef struct _ViewCollectionMonitorImpl ViewCollectionMonitorImpl;
+typedef struct _ViewCollectionMonitorImplClass ViewCollectionMonitorImplClass;
+
+#define TYPE_DATA_SOURCE (data_source_get_type ())
+#define DATA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_SOURCE, DataSource))
+#define DATA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_SOURCE, DataSourceClass))
+#define IS_DATA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_SOURCE))
+#define IS_DATA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_SOURCE))
+#define DATA_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_SOURCE, DataSourceClass))
+
+typedef struct _DataSource DataSource;
+typedef struct _DataSourceClass DataSourceClass;
+
+#define TYPE_DATA_SET (data_set_get_type ())
+#define DATA_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_SET, DataSet))
+#define DATA_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_SET, DataSetClass))
+#define IS_DATA_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_SET))
+#define IS_DATA_SET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_SET))
+#define DATA_SET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_SET, DataSetClass))
+
+typedef struct _DataSet DataSet;
+typedef struct _DataSetClass DataSetClass;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _data_collection_unref0(var) ((var == NULL) ? NULL : (var = (data_collection_unref (var), NULL)))
+#define _data_set_unref0(var) ((var == NULL) ? NULL : (var = (data_set_unref (var), NULL)))
+#define _g_free0(var) (var = (g_free (var), NULL))
+#define _view_filter_unref0(var) ((var == NULL) ? NULL : (var = (view_filter_unref (var), NULL)))
+
+#define TYPE_VIEW_MANAGER (view_manager_get_type ())
+#define VIEW_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_VIEW_MANAGER, ViewManager))
+#define VIEW_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_VIEW_MANAGER, ViewManagerClass))
+#define IS_VIEW_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_VIEW_MANAGER))
+#define IS_VIEW_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_VIEW_MANAGER))
+#define VIEW_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_VIEW_MANAGER, ViewManagerClass))
+
+typedef struct _ViewManager ViewManager;
+typedef struct _ViewManagerClass ViewManagerClass;
+#define _view_collection_monitor_unref0(var) ((var == NULL) ? NULL : (var = (view_collection_monitor_unref (var), NULL)))
+typedef struct _ViewCollectionMonitorPrivate ViewCollectionMonitorPrivate;
+typedef struct _ViewCollectionMonitorImplPrivate ViewCollectionMonitorImplPrivate;
+#define _alteration_unref0(var) ((var == NULL) ? NULL : (var = (alteration_unref (var), NULL)))
+
+#define TYPE_THUMBNAIL_SOURCE (thumbnail_source_get_type ())
+#define THUMBNAIL_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_THUMBNAIL_SOURCE, ThumbnailSource))
+#define THUMBNAIL_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_THUMBNAIL_SOURCE, ThumbnailSourceClass))
+#define IS_THUMBNAIL_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_THUMBNAIL_SOURCE))
+#define IS_THUMBNAIL_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_THUMBNAIL_SOURCE))
+#define THUMBNAIL_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_THUMBNAIL_SOURCE, ThumbnailSourceClass))
+
+typedef struct _ThumbnailSource ThumbnailSource;
+typedef struct _ThumbnailSourceClass ThumbnailSourceClass;
+
+#define TYPE_MEDIA_SOURCE (media_source_get_type ())
+#define MEDIA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_MEDIA_SOURCE, MediaSource))
+#define MEDIA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_MEDIA_SOURCE, MediaSourceClass))
+#define IS_MEDIA_SOURCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_MEDIA_SOURCE))
+#define IS_MEDIA_SOURCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_MEDIA_SOURCE))
+#define MEDIA_SOURCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_MEDIA_SOURCE, MediaSourceClass))
+
+typedef struct _MediaSource MediaSource;
+typedef struct _MediaSourceClass MediaSourceClass;
+
+#define TYPE_RATING (rating_get_type ())
+
+#define VIEW_COLLECTION_TYPE_TOGGLE_LISTS (view_collection_toggle_lists_get_type ())
+#define VIEW_COLLECTION_TOGGLE_LISTS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIEW_COLLECTION_TYPE_TOGGLE_LISTS, ViewCollectionToggleLists))
+#define VIEW_COLLECTION_TOGGLE_LISTS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIEW_COLLECTION_TYPE_TOGGLE_LISTS, ViewCollectionToggleListsClass))
+#define VIEW_COLLECTION_IS_TOGGLE_LISTS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIEW_COLLECTION_TYPE_TOGGLE_LISTS))
+#define VIEW_COLLECTION_IS_TOGGLE_LISTS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIEW_COLLECTION_TYPE_TOGGLE_LISTS))
+#define VIEW_COLLECTION_TOGGLE_LISTS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIEW_COLLECTION_TYPE_TOGGLE_LISTS, ViewCollectionToggleListsClass))
+
+typedef struct _ViewCollectionToggleLists ViewCollectionToggleLists;
+typedef struct _ViewCollectionToggleListsClass ViewCollectionToggleListsClass;
+typedef struct _ViewCollectionToggleListsPrivate ViewCollectionToggleListsPrivate;
+typedef struct _ViewCollectionParamSpecMonitor ViewCollectionParamSpecMonitor;
+#define _view_manager_unref0(var) ((var == NULL) ? NULL : (var = (view_manager_unref (var), NULL)))
+typedef struct _ViewManagerPrivate ViewManagerPrivate;
+typedef struct _ParamSpecViewManager ParamSpecViewManager;
+typedef struct _ViewFilterPrivate ViewFilterPrivate;
+typedef struct _ParamSpecViewFilter ParamSpecViewFilter;
+#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
+#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
+#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+
+typedef gint64 (*Comparator) (void* a, void* b, void* user_data);
+typedef gboolean (*ComparatorPredicate) (DataObject* object, Alteration* alteration, void* user_data);
+typedef gboolean (*ProgressMonitor) (guint64 current, guint64 total, gboolean do_event_loop, void* user_data);
+struct _MarkerIface {
+ GTypeInterface parent_iface;
+ void (*mark) (Marker* self, DataObject* object);
+ void (*unmark) (Marker* self, DataObject* object);
+ gboolean (*toggle) (Marker* self, DataObject* object);
+ void (*mark_many) (Marker* self, GeeCollection* list);
+ void (*unmark_many) (Marker* self, GeeCollection* list);
+ void (*mark_all) (Marker* self);
+ gint (*get_count) (Marker* self);
+ GeeCollection* (*get_all) (Marker* self);
+};
+
+struct _DataCollection {
+ GTypeInstance parent_instance;
+ volatile int ref_count;
+ DataCollectionPrivate * priv;
+};
+
+struct _DataCollectionClass {
+ GTypeClass parent_class;
+ void (*finalize) (DataCollection *self);
+ gchar* (*to_string) (DataCollection* self);
+ void (*notify_items_added) (DataCollection* self, GeeIterable* added);
+ void (*notify_items_removed) (DataCollection* self, GeeIterable* removed);
+ void (*notify_contents_altered) (DataCollection* self, GeeIterable* added, GeeIterable* removed);
+ void (*notify_items_altered) (DataCollection* self, GeeMap* items);
+ void (*notify_ordering_changed) (DataCollection* self);
+ void (*notify_property_set) (DataCollection* self, const gchar* name, GValue* old, GValue* val);
+ void (*notify_property_cleared) (DataCollection* self, const gchar* name);
+ gboolean (*valid_type) (DataCollection* self, DataObject* object);
+ void (*set_comparator) (DataCollection* self, Comparator comparator, void* comparator_target, ComparatorPredicate predicate, void* predicate_target);
+ void (*reset_comparator) (DataCollection* self);
+ GeeCollection* (*get_all) (DataCollection* self);
+ gint (*get_count) (DataCollection* self);
+ DataObject* (*get_at) (DataCollection* self, gint index);
+ gint (*index_of) (DataCollection* self, DataObject* object);
+ gboolean (*contains) (DataCollection* self, DataObject* object);
+ gboolean (*add) (DataCollection* self, DataObject* object);
+ GeeCollection* (*add_many) (DataCollection* self, GeeCollection* objects, ProgressMonitor monitor, void* monitor_target);
+ void (*remove_marked) (DataCollection* self, Marker* m);
+ void (*clear) (DataCollection* self);
+ void (*close) (DataCollection* self);
+ void (*notify_frozen) (DataCollection* self);
+ void (*notify_thawed) (DataCollection* self);
+ void (*items_added) (DataCollection* self, GeeIterable* added);
+ void (*items_removed) (DataCollection* self, GeeIterable* removed);
+ void (*contents_altered) (DataCollection* self, GeeIterable* added, GeeIterable* removed);
+ void (*items_altered) (DataCollection* self, GeeMap* items);
+ void (*ordering_changed) (DataCollection* self);
+ void (*property_set) (DataCollection* self, const gchar* name, GValue* old, GValue* val);
+ void (*property_cleared) (DataCollection* self, const gchar* name);
+ void (*frozen) (DataCollection* self);
+ void (*thawed) (DataCollection* self);
+};
+
+struct _ViewCollection {
+ DataCollection parent_instance;
+ ViewCollectionPrivate * priv;
+};
+
+struct _ViewCollectionClass {
+ DataCollectionClass parent_class;
+ void (*notify_items_selected_unselected) (ViewCollection* self, GeeCollection* selected, GeeCollection* unselected);
+ void (*notify_selection_group_altered) (ViewCollection* self);
+ void (*notify_item_view_altered) (ViewCollection* self, DataView* view);
+ void (*notify_views_altered) (ViewCollection* self, GeeCollection* views);
+ void (*notify_item_geometry_altered) (ViewCollection* self, DataView* view);
+ void (*notify_geometries_altered) (ViewCollection* self, GeeCollection* views);
+ void (*notify_items_shown) (ViewCollection* self, GeeCollection* shown);
+ void (*notify_items_hidden) (ViewCollection* self, GeeCollection* hidden);
+ void (*notify_items_visibility_changed) (ViewCollection* self, GeeCollection* changed);
+ void (*notify_view_filter_installed) (ViewCollection* self, ViewFilter* filter);
+ void (*notify_view_filter_removed) (ViewCollection* self, ViewFilter* filter);
+ DataView* (*get_first) (ViewCollection* self);
+ DataView* (*get_first_unrejected) (ViewCollection* self);
+ DataView* (*get_last) (ViewCollection* self);
+ DataView* (*get_next) (ViewCollection* self, DataView* view);
+ DataView* (*get_previous) (ViewCollection* self, DataView* view);
+ void (*items_selected) (ViewCollection* self, GeeIterable* selected);
+ void (*items_unselected) (ViewCollection* self, GeeIterable* unselected);
+ void (*items_state_changed) (ViewCollection* self, GeeIterable* changed);
+ void (*selection_group_altered) (ViewCollection* self);
+ void (*items_shown) (ViewCollection* self, GeeCollection* visible);
+ void (*items_hidden) (ViewCollection* self, GeeCollection* hidden);
+ void (*items_visibility_changed) (ViewCollection* self, GeeCollection* changed);
+ void (*item_view_altered) (ViewCollection* self, DataView* view);
+ void (*item_geometry_altered) (ViewCollection* self, DataView* view);
+ void (*views_altered) (ViewCollection* self, GeeCollection* views);
+ void (*geometries_altered) (ViewCollection* self, GeeCollection* views);
+ void (*view_filter_installed) (ViewCollection* self, ViewFilter* filer);
+ void (*view_filter_removed) (ViewCollection* self, ViewFilter* filer);
+};
+
+typedef DataView* (*CreateView) (DataSource* source, void* user_data);
+typedef gboolean (*CreateViewPredicate) (DataSource* source, void* user_data);
+struct _ViewCollectionPrivate {
+ GeeHashMultiMap* monitors;
+ ViewCollection* mirroring;
+ CreateView mirroring_ctor;
+ gpointer mirroring_ctor_target;
+ CreateViewPredicate should_mirror;
+ gpointer should_mirror_target;
+ GeeSet* filters;
+ DataSet* selected;
+ DataSet* visible;
+ GeeHashSet* frozen_views_altered;
+ GeeHashSet* frozen_geometries_altered;
+ GeeHashMap* source_map;
+};
+
+struct _ViewCollectionMonitor {
+ GTypeInstance parent_instance;
+ volatile int ref_count;
+ ViewCollectionMonitorPrivate * priv;
+};
+
+struct _ViewCollectionMonitorClass {
+ GTypeClass parent_class;
+ void (*finalize) (ViewCollectionMonitor *self);
+};
+
+struct _ViewCollectionMonitorImpl {
+ ViewCollectionMonitor parent_instance;
+ ViewCollectionMonitorImplPrivate * priv;
+ ViewCollection* owner;
+ SourceCollection* sources;
+ ViewManager* manager;
+ Alteration* prereq;
+};
+
+struct _ViewCollectionMonitorImplClass {
+ ViewCollectionMonitorClass parent_class;
+};
+
+typedef enum {
+ RATING_REJECTED = -1,
+ RATING_UNRATED = 0,
+ RATING_ONE = 1,
+ RATING_TWO = 2,
+ RATING_THREE = 3,
+ RATING_FOUR = 4,
+ RATING_FIVE = 5
+} Rating;
+
+typedef gboolean (*MarkedAction) (DataObject* object, GObject* user, void* user_data);
+struct _ViewCollectionToggleLists {
+ GObject parent_instance;
+ ViewCollectionToggleListsPrivate * priv;
+ GeeArrayList* selected;
+ GeeArrayList* unselected;
+};
+
+struct _ViewCollectionToggleListsClass {
+ GObjectClass parent_class;
+};
+
+struct _ViewCollectionParamSpecMonitor {
+ GParamSpec parent_instance;
+};
+
+struct _ViewManager {
+ GTypeInstance parent_instance;
+ volatile int ref_count;
+ ViewManagerPrivate * priv;
+};
+
+struct _ViewManagerClass {
+ GTypeClass parent_class;
+ void (*finalize) (ViewManager *self);
+ gboolean (*include_in_view) (ViewManager* self, DataSource* source);
+ DataView* (*create_view) (ViewManager* self, DataSource* source);
+};
+
+struct _ParamSpecViewManager {
+ GParamSpec parent_instance;
+};
+
+struct _ViewFilter {
+ GTypeInstance parent_instance;
+ volatile int ref_count;
+ ViewFilterPrivate * priv;
+};
+
+struct _ViewFilterClass {
+ GTypeClass parent_class;
+ void (*finalize) (ViewFilter *self);
+ gboolean (*predicate) (ViewFilter* self, DataView* view);
+ void (*refresh) (ViewFilter* self);
+};
+
+struct _ParamSpecViewFilter {
+ GParamSpec parent_instance;
+};
+
+
+static gpointer view_collection_parent_class = NULL;
+static gpointer view_collection_monitor_parent_class = NULL;
+static gpointer view_collection_monitor_impl_parent_class = NULL;
+static gpointer view_collection_toggle_lists_parent_class = NULL;
+static gpointer view_manager_parent_class = NULL;
+static gpointer view_filter_parent_class = NULL;
+
+gpointer data_collection_ref (gpointer instance);
+void data_collection_unref (gpointer instance);
+GParamSpec* param_spec_data_collection (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_data_collection (GValue* value, gpointer v_object);
+void value_take_data_collection (GValue* value, gpointer v_object);
+gpointer value_get_data_collection (const GValue* value);
+GType data_collection_get_type (void) G_GNUC_CONST;
+GType data_object_get_type (void) G_GNUC_CONST;
+gpointer alteration_ref (gpointer instance);
+void alteration_unref (gpointer instance);
+GParamSpec* param_spec_alteration (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_alteration (GValue* value, gpointer v_object);
+void value_take_alteration (GValue* value, gpointer v_object);
+gpointer value_get_alteration (const GValue* value);
+GType alteration_get_type (void) G_GNUC_CONST;
+GType marker_get_type (void) G_GNUC_CONST;
+GType view_collection_get_type (void) G_GNUC_CONST;
+GType data_view_get_type (void) G_GNUC_CONST;
+gpointer view_filter_ref (gpointer instance);
+void view_filter_unref (gpointer instance);
+GParamSpec* param_spec_view_filter (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_view_filter (GValue* value, gpointer v_object);
+void value_take_view_filter (GValue* value, gpointer v_object);
+gpointer value_get_view_filter (const GValue* value);
+GType view_filter_get_type (void) G_GNUC_CONST;
+GType source_collection_get_type (void) G_GNUC_CONST;
+gpointer view_collection_monitor_ref (gpointer instance);
+void view_collection_monitor_unref (gpointer instance);
+GParamSpec* view_collection_param_spec_monitor (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void view_collection_value_set_monitor (GValue* value, gpointer v_object);
+void view_collection_value_take_monitor (GValue* value, gpointer v_object);
+gpointer view_collection_value_get_monitor (const GValue* value);
+GType view_collection_monitor_get_type (void) G_GNUC_CONST;
+static GType view_collection_monitor_impl_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
+GType data_source_get_type (void) G_GNUC_CONST;
+gpointer data_set_ref (gpointer instance);
+void data_set_unref (gpointer instance);
+GParamSpec* param_spec_data_set (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_data_set (GValue* value, gpointer v_object);
+void value_take_data_set (GValue* value, gpointer v_object);
+gpointer value_get_data_set (const GValue* value);
+GType data_set_get_type (void) G_GNUC_CONST;
+#define VIEW_COLLECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_VIEW_COLLECTION, ViewCollectionPrivate))
+enum {
+ VIEW_COLLECTION_DUMMY_PROPERTY
+};
+DataSet* data_set_new (void);
+DataSet* data_set_construct (GType object_type);
+ViewCollection* view_collection_new (const gchar* name);
+ViewCollection* view_collection_construct (GType object_type, const gchar* name);
+DataCollection* data_collection_new (const gchar* name);
+DataCollection* data_collection_construct (GType object_type, const gchar* name);
+void view_collection_notify_items_selected_unselected (ViewCollection* self, GeeCollection* selected, GeeCollection* unselected);
+static void view_collection_real_notify_items_selected_unselected (ViewCollection* self, GeeCollection* selected, GeeCollection* unselected);
+void view_collection_notify_selection_group_altered (ViewCollection* self);
+static void view_collection_real_notify_selection_group_altered (ViewCollection* self);
+void view_collection_notify_item_view_altered (ViewCollection* self, DataView* view);
+static void view_collection_real_notify_item_view_altered (ViewCollection* self, DataView* view);
+void view_collection_notify_views_altered (ViewCollection* self, GeeCollection* views);
+static void view_collection_real_notify_views_altered (ViewCollection* self, GeeCollection* views);
+void view_collection_notify_item_geometry_altered (ViewCollection* self, DataView* view);
+static void view_collection_real_notify_item_geometry_altered (ViewCollection* self, DataView* view);
+void view_collection_notify_geometries_altered (ViewCollection* self, GeeCollection* views);
+static void view_collection_real_notify_geometries_altered (ViewCollection* self, GeeCollection* views);
+void view_collection_notify_items_shown (ViewCollection* self, GeeCollection* shown);
+static void view_collection_real_notify_items_shown (ViewCollection* self, GeeCollection* shown);
+void view_collection_notify_items_hidden (ViewCollection* self, GeeCollection* hidden);
+static void view_collection_real_notify_items_hidden (ViewCollection* self, GeeCollection* hidden);
+void view_collection_notify_items_visibility_changed (ViewCollection* self, GeeCollection* changed);
+static void view_collection_real_notify_items_visibility_changed (ViewCollection* self, GeeCollection* changed);
+void view_collection_notify_view_filter_installed (ViewCollection* self, ViewFilter* filter);
+static void view_collection_real_notify_view_filter_installed (ViewCollection* self, ViewFilter* filter);
+void view_collection_notify_view_filter_removed (ViewCollection* self, ViewFilter* filter);
+static void view_collection_real_notify_view_filter_removed (ViewCollection* self, ViewFilter* filter);
+static void view_collection_real_clear (DataCollection* base);
+gchar* data_collection_to_string (DataCollection* self);
+void data_collection_clear (DataCollection* self);
+static void view_collection_real_close (DataCollection* base);
+void view_collection_halt_all_monitoring (ViewCollection* self);
+void view_collection_halt_mirroring (ViewCollection* self);
+static void view_collection_on_view_filter_refresh (ViewCollection* self);
+static void _view_collection_on_view_filter_refresh_view_filter_refresh (ViewFilter* _sender, gpointer self);
+void data_collection_close (DataCollection* self);
+gpointer view_manager_ref (gpointer instance);
+void view_manager_unref (gpointer instance);
+GParamSpec* param_spec_view_manager (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_view_manager (GValue* value, gpointer v_object);
+void value_take_view_manager (GValue* value, gpointer v_object);
+gpointer value_get_view_manager (const GValue* value);
+GType view_manager_get_type (void) G_GNUC_CONST;
+ViewCollectionMonitor* view_collection_monitor_source_collection (ViewCollection* self, SourceCollection* sources, ViewManager* manager, Alteration* prereq, GeeCollection* initial, ProgressMonitor progress_monitor, void* progress_monitor_target);
+void data_collection_freeze_notifications (DataCollection* self);
+static ViewCollectionMonitorImpl* view_collection_monitor_impl_new (ViewCollection* owner, SourceCollection* sources, ViewManager* manager, Alteration* prereq);
+static ViewCollectionMonitorImpl* view_collection_monitor_impl_construct (GType object_type, ViewCollection* owner, SourceCollection* sources, ViewManager* manager, Alteration* prereq);
+DataView* view_manager_create_view (ViewManager* self, DataSource* source);
+GeeCollection* data_collection_add_many (DataCollection* self, GeeCollection* objects, ProgressMonitor monitor, void* monitor_target);
+static void view_collection_add_sources (ViewCollection* self, SourceCollection* sources, GeeIterable* added, ProgressMonitor progress_monitor, void* progress_monitor_target);
+GeeCollection* data_collection_get_all (DataCollection* self);
+void data_collection_thaw_notifications (DataCollection* self);
+void view_collection_halt_monitoring (ViewCollection* self, ViewCollectionMonitor* m);
+void view_collection_mirror (ViewCollection* self, ViewCollection* to_mirror, CreateView mirroring_ctor, void* mirroring_ctor_target, CreateViewPredicate should_mirror, void* should_mirror_target);
+void data_collection_set_comparator (DataCollection* self, Comparator comparator, void* comparator_target, ComparatorPredicate predicate, void* predicate_target);
+Comparator data_collection_get_comparator (DataCollection* self, void** result_target);
+ComparatorPredicate data_collection_get_comparator_predicate (DataCollection* self, void** result_target);
+static void view_collection_on_mirror_contents_added (ViewCollection* self, GeeIterable* added);
+static void _view_collection_on_mirror_contents_added_data_collection_items_added (DataCollection* _sender, GeeIterable* added, gpointer self);
+static void view_collection_on_mirror_contents_removed (ViewCollection* self, GeeIterable* removed);
+static void _view_collection_on_mirror_contents_removed_data_collection_items_removed (DataCollection* _sender, GeeIterable* removed, gpointer self);
+void view_collection_copy_into (ViewCollection* self, ViewCollection* to_copy, CreateView copying_ctor, void* copying_ctor_target, CreateViewPredicate should_copy, void* should_copy_target);
+DataSource* data_view_get_source (DataView* self);
+gboolean view_collection_is_view_filter_installed (ViewCollection* self, ViewFilter* f);
+void view_collection_install_view_filter (ViewCollection* self, ViewFilter* f);
+void view_collection_remove_view_filter (ViewCollection* self, ViewFilter* f);
+static void view_collection_filter_altered_items (ViewCollection* self, GeeCollection* views);
+static gboolean view_collection_is_in_filter (ViewCollection* self, DataView* view);
+gboolean view_filter_predicate (ViewFilter* self, DataView* view);
+static gboolean view_collection_real_valid_type (DataCollection* base, DataObject* object);
+static void view_collection_on_sources_added (ViewCollection* self, DataCollection* sources, GeeIterable* added);
+gboolean view_manager_include_in_view (ViewManager* self, DataSource* source);
+static DataView* _view_manager_create_view_create_view (DataSource* source, gpointer self);
+gboolean data_collection_add (DataCollection* self, DataObject* object);
+static gboolean view_collection_real_add (DataCollection* base, DataObject* object);
+void data_view_internal_set_visible (DataView* self, gboolean visible);
+GeeCollection* data_collection_get_singleton (DataObject* object);
+static GeeCollection* view_collection_real_add_many (DataCollection* base, GeeCollection* objects, ProgressMonitor monitor, void* monitor_target);
+static void view_collection_on_sources_removed (ViewCollection* self, GeeIterable* removed);
+Marker* data_collection_start_marking (DataCollection* self);
+void marker_mark (Marker* self, DataObject* object);
+gint marker_get_count (Marker* self);
+void data_collection_remove_marked (DataCollection* self, Marker* m);
+static void view_collection_on_sources_altered (ViewCollection* self, DataCollection* collection, GeeMap* items);
+gboolean alteration_contains_any (Alteration* self, Alteration* other);
+gboolean view_collection_has_view_for_source (ViewCollection* self, DataSource* source);
+DataView* view_collection_get_view_for_source (ViewCollection* self, DataSource* source);
+gboolean data_set_contains (DataSet* self, DataObject* object);
+gboolean data_set_resort_object (DataSet* self, DataObject* object, Alteration* alteration);
+static gboolean view_collection_is_visible (ViewCollection* self, DataView* view);
+Marker* data_collection_mark_many (DataCollection* self, GeeCollection* objects);
+void data_collection_notify_ordering_changed (DataCollection* self);
+static void view_collection_real_notify_items_added (DataCollection* base, GeeIterable* added);
+gboolean data_view_is_selected (DataView* self);
+gboolean data_view_is_visible (DataView* self);
+static gboolean view_collection_add_many_visible (ViewCollection* self, GeeCollection* many);
+static void view_collection_add_many_selected (ViewCollection* self, GeeCollection* views);
+void data_collection_notify_items_added (DataCollection* self, GeeIterable* added);
+static void view_collection_real_notify_items_removed (DataCollection* base, GeeIterable* removed);
+gboolean data_set_remove (DataSet* self, DataObject* object);
+static void view_collection_remove_many_selected (ViewCollection* self, GeeCollection* views);
+void data_collection_notify_items_removed (DataCollection* self, GeeIterable* removed);
+static void view_collection_show_items (ViewCollection* self, GeeList* to_show);
+static void view_collection_hide_items (ViewCollection* self, GeeList* to_hide);
+static void view_collection_real_items_altered (DataCollection* base, GeeMap* map);
+static void view_collection_real_set_comparator (DataCollection* base, Comparator comparator, void* comparator_target, ComparatorPredicate predicate, void* predicate_target);
+void data_set_set_comparator (DataSet* self, Comparator user_comparator, void* user_comparator_target, ComparatorPredicate comparator_predicate, void* comparator_predicate_target);
+static void view_collection_real_reset_comparator (DataCollection* base);
+void data_set_reset_comparator (DataSet* self);
+void data_collection_reset_comparator (DataCollection* self);
+static GeeCollection* view_collection_real_get_all (DataCollection* base);
+GeeList* data_set_get_all (DataSet* self);
+GeeCollection* view_collection_get_all_unfiltered (ViewCollection* self);
+static gint view_collection_real_get_count (DataCollection* base);
+gint data_set_get_count (DataSet* self);
+gint data_collection_get_count (DataCollection* self);
+gint view_collection_get_unfiltered_count (ViewCollection* self);
+static DataObject* view_collection_real_get_at (DataCollection* base, gint index);
+DataObject* data_set_get_at (DataSet* self, gint index);
+DataObject* data_collection_get_at (DataCollection* self, gint index);
+static gint view_collection_real_index_of (DataCollection* base, DataObject* object);
+gint data_set_index_of (DataSet* self, DataObject* object);
+gint data_collection_index_of (DataCollection* self, DataObject* object);
+static gboolean view_collection_real_contains (DataCollection* base, DataObject* object);
+gboolean data_collection_contains (DataCollection* self, DataObject* object);
+DataView* view_collection_get_first (ViewCollection* self);
+static DataView* view_collection_real_get_first (ViewCollection* self);
+DataView* view_collection_get_first_unrejected (ViewCollection* self);
+static DataView* view_collection_real_get_first_unrejected (ViewCollection* self);
+GType thumbnail_source_get_type (void) G_GNUC_CONST;
+GType media_source_get_type (void) G_GNUC_CONST;
+GType rating_get_type (void) G_GNUC_CONST;
+Rating media_source_get_rating (MediaSource* self);
+DataView* view_collection_get_next (ViewCollection* self, DataView* view);
+DataView* view_collection_get_last (ViewCollection* self);
+static DataView* view_collection_real_get_last (ViewCollection* self);
+static DataView* view_collection_real_get_next (ViewCollection* self, DataView* view);
+DataView* view_collection_get_previous (ViewCollection* self, DataView* view);
+static DataView* view_collection_real_get_previous (ViewCollection* self, DataView* view);
+gboolean view_collection_get_immediate_neighbors (ViewCollection* self, DataSource* home, DataSource** next, DataSource** prev, const gchar* type_selector);
+gchar* data_source_get_typename (DataSource* self);
+GeeSet* view_collection_get_extended_neighbors (ViewCollection* self, DataSource* home, const gchar* typename);
+gboolean data_set_add_many (DataSet* self, GeeCollection* objects);
+gboolean data_set_remove_many (DataSet* self, GeeCollection* objects);
+void view_collection_select_marked (ViewCollection* self, Marker* marker);
+void data_collection_act_on_marked (DataCollection* self, Marker* m, MarkedAction action, void* action_target, ProgressMonitor monitor, void* monitor_target, GObject* user);
+static gboolean view_collection_select_item (ViewCollection* self, DataObject* object, GObject* user);
+static gboolean _view_collection_select_item_marked_action (DataObject* object, GObject* user, gpointer self);
+void view_collection_select_all (ViewCollection* self);
+void marker_mark_all (Marker* self);
+void data_view_internal_set_selected (DataView* self, gboolean selected);
+void view_collection_unselect_marked (ViewCollection* self, Marker* marker);
+static gboolean view_collection_unselect_item (ViewCollection* self, DataObject* object, GObject* user);
+static gboolean _view_collection_unselect_item_marked_action (DataObject* object, GObject* user, gpointer self);
+void view_collection_unselect_all (ViewCollection* self);
+void marker_mark_many (Marker* self, GeeCollection* list);
+GeeList* view_collection_get_selected (ViewCollection* self);
+void view_collection_unselect_all_but (ViewCollection* self, DataView* exception);
+void view_collection_unselect_and_select_marked (ViewCollection* self, Marker* unselect, Marker* select);
+void view_collection_toggle_marked (ViewCollection* self, Marker* marker);
+static GType view_collection_toggle_lists_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
+static ViewCollectionToggleLists* view_collection_toggle_lists_new (void);
+static ViewCollectionToggleLists* view_collection_toggle_lists_construct (GType object_type);
+static gboolean view_collection_toggle_item (ViewCollection* self, DataObject* object, GObject* user);
+static gboolean _view_collection_toggle_item_marked_action (DataObject* object, GObject* user, gpointer self);
+gboolean data_view_internal_toggle (DataView* self);
+gint view_collection_get_selected_count (ViewCollection* self);
+DataView* view_collection_get_selected_at (ViewCollection* self, gint index);
+DataSet* data_collection_get_dataset_copy (DataCollection* self);
+gboolean view_collection_has_view_for_source_with_filtered (ViewCollection* self, DataSource* source);
+DataView* view_collection_get_view_for_source_filtered (ViewCollection* self, DataSource* source);
+GeeCollection* view_collection_get_sources (ViewCollection* self);
+gboolean view_collection_has_source_of_type (ViewCollection* self, GType t);
+gint view_collection_get_sources_of_type_count (ViewCollection* self, GType t);
+GeeList* view_collection_get_sources_of_type (ViewCollection* self, GType t);
+GeeList* view_collection_get_selected_sources (ViewCollection* self);
+DataSource* view_collection_get_selected_source_at (ViewCollection* self, gint index);
+GeeList* view_collection_get_selected_sources_of_type (ViewCollection* self, GType t);
+gint view_collection_index_of_source (ViewCollection* self, DataSource* source);
+void view_collection_internal_notify_view_altered (ViewCollection* self, DataView* view);
+gboolean data_collection_are_notifications_frozen (DataCollection* self);
+void view_collection_internal_notify_geometry_altered (ViewCollection* self, DataView* view);
+static void view_collection_real_notify_thawed (DataCollection* base);
+void data_collection_notify_thawed (DataCollection* self);
+gboolean view_collection_are_items_filtered_out (ViewCollection* self);
+static void view_collection_real_items_selected (ViewCollection* self, GeeIterable* selected);
+static void view_collection_real_items_unselected (ViewCollection* self, GeeIterable* unselected);
+static void view_collection_real_items_state_changed (ViewCollection* self, GeeIterable* changed);
+static void view_collection_real_selection_group_altered (ViewCollection* self);
+static void view_collection_real_items_shown (ViewCollection* self, GeeCollection* visible);
+static void view_collection_real_items_hidden (ViewCollection* self, GeeCollection* hidden);
+static void view_collection_real_items_visibility_changed (ViewCollection* self, GeeCollection* changed);
+static void view_collection_real_item_view_altered (ViewCollection* self, DataView* view);
+static void view_collection_real_item_geometry_altered (ViewCollection* self, DataView* view);
+static void view_collection_real_views_altered (ViewCollection* self, GeeCollection* views);
+static void view_collection_real_geometries_altered (ViewCollection* self, GeeCollection* views);
+static void view_collection_real_view_filter_installed (ViewCollection* self, ViewFilter* filer);
+static void g_cclosure_user_marshal_VOID__VIEW_FILTER (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data);
+static void view_collection_real_view_filter_removed (ViewCollection* self, ViewFilter* filer);
+enum {
+ VIEW_COLLECTION_MONITOR_DUMMY_PROPERTY
+};
+ViewCollectionMonitor* view_collection_monitor_new (void);
+ViewCollectionMonitor* view_collection_monitor_construct (GType object_type);
+static void view_collection_monitor_finalize (ViewCollectionMonitor* obj);
+enum {
+ VIEW_COLLECTION_MONITOR_IMPL_DUMMY_PROPERTY
+};
+static void _view_collection_on_sources_added_data_collection_items_added (DataCollection* _sender, GeeIterable* added, gpointer self);
+static void _view_collection_on_sources_removed_data_collection_items_removed (DataCollection* _sender, GeeIterable* removed, gpointer self);
+static void _view_collection_on_sources_altered_data_collection_items_altered (DataCollection* _sender, GeeMap* items, gpointer self);
+static void view_collection_monitor_impl_finalize (ViewCollectionMonitor* obj);
+enum {
+ VIEW_COLLECTION_TOGGLE_LISTS_DUMMY_PROPERTY
+};
+static void view_collection_toggle_lists_finalize (GObject* obj);
+static void view_collection_finalize (DataCollection* obj);
+enum {
+ VIEW_MANAGER_DUMMY_PROPERTY
+};
+static gboolean view_manager_real_include_in_view (ViewManager* self, DataSource* source);
+static DataView* view_manager_real_create_view (ViewManager* self, DataSource* source);
+ViewManager* view_manager_construct (GType object_type);
+static void view_manager_finalize (ViewManager* obj);
+enum {
+ VIEW_FILTER_DUMMY_PROPERTY
+};
+static gboolean view_filter_real_predicate (ViewFilter* self, DataView* view);
+ViewFilter* view_filter_construct (GType object_type);
+static void view_filter_real_refresh (ViewFilter* self);
+static void view_filter_finalize (ViewFilter* obj);
+
+
+ViewCollection* view_collection_construct (GType object_type, const gchar* name) {
+ ViewCollection* self = NULL;
+ const gchar* _tmp0_ = NULL;
+#line 125 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (name != NULL, NULL);
+#line 126 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = name;
+#line 126 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self = (ViewCollection*) data_collection_construct (object_type, _tmp0_);
+#line 125 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return self;
+#line 711 "ViewCollection.c"
+}
+
+
+ViewCollection* view_collection_new (const gchar* name) {
+#line 125 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return view_collection_construct (TYPE_VIEW_COLLECTION, name);
+#line 718 "ViewCollection.c"
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+#line 142 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return self ? g_object_ref (self) : NULL;
+#line 725 "ViewCollection.c"
+}
+
+
+static void view_collection_real_notify_items_selected_unselected (ViewCollection* self, GeeCollection* selected, GeeCollection* unselected) {
+ gboolean _tmp0_ = FALSE;
+ GeeCollection* _tmp1_ = NULL;
+ gboolean has_selected = FALSE;
+ gboolean _tmp5_ = FALSE;
+ GeeCollection* _tmp6_ = NULL;
+ gboolean has_unselected = FALSE;
+ gboolean _tmp10_ = FALSE;
+ gboolean _tmp12_ = FALSE;
+ GeeCollection* sum = NULL;
+ gboolean _tmp14_ = FALSE;
+ gboolean _tmp15_ = FALSE;
+ GeeCollection* _tmp32_ = NULL;
+#line 129 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail ((selected == NULL) || GEE_IS_COLLECTION (selected));
+#line 129 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail ((unselected == NULL) || GEE_IS_COLLECTION (unselected));
+#line 131 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = selected;
+#line 131 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp1_ != NULL) {
+#line 750 "ViewCollection.c"
+ GeeCollection* _tmp2_ = NULL;
+ gint _tmp3_ = 0;
+ gint _tmp4_ = 0;
+#line 131 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = selected;
+#line 131 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = gee_collection_get_size (_tmp2_);
+#line 131 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = _tmp3_;
+#line 131 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = _tmp4_ > 0;
+#line 762 "ViewCollection.c"
+ } else {
+#line 131 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = FALSE;
+#line 766 "ViewCollection.c"
+ }
+#line 131 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ has_selected = _tmp0_;
+#line 132 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = unselected;
+#line 132 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp6_ != NULL) {
+#line 774 "ViewCollection.c"
+ GeeCollection* _tmp7_ = NULL;
+ gint _tmp8_ = 0;
+ gint _tmp9_ = 0;
+#line 132 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = unselected;
+#line 132 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = gee_collection_get_size (_tmp7_);
+#line 132 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = _tmp8_;
+#line 132 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = _tmp9_ > 0;
+#line 786 "ViewCollection.c"
+ } else {
+#line 132 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = FALSE;
+#line 790 "ViewCollection.c"
+ }
+#line 132 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ has_unselected = _tmp5_;
+#line 134 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp10_ = has_selected;
+#line 134 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp10_) {
+#line 798 "ViewCollection.c"
+ GeeCollection* _tmp11_ = NULL;
+#line 135 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp11_ = selected;
+#line 135 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_emit_by_name (self, "items-selected", G_TYPE_CHECK_INSTANCE_CAST (_tmp11_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 804 "ViewCollection.c"
+ }
+#line 137 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp12_ = has_unselected;
+#line 137 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp12_) {
+#line 810 "ViewCollection.c"
+ GeeCollection* _tmp13_ = NULL;
+#line 138 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp13_ = unselected;
+#line 138 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_emit_by_name (self, "items-unselected", G_TYPE_CHECK_INSTANCE_CAST (_tmp13_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 816 "ViewCollection.c"
+ }
+#line 141 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp15_ = has_selected;
+#line 141 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp15_) {
+#line 822 "ViewCollection.c"
+ gboolean _tmp16_ = FALSE;
+#line 141 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp16_ = has_unselected;
+#line 141 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp14_ = !_tmp16_;
+#line 828 "ViewCollection.c"
+ } else {
+#line 141 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp14_ = FALSE;
+#line 832 "ViewCollection.c"
+ }
+#line 141 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp14_) {
+#line 836 "ViewCollection.c"
+ GeeCollection* _tmp17_ = NULL;
+ GeeCollection* _tmp18_ = NULL;
+#line 142 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp17_ = selected;
+#line 142 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp18_ = _g_object_ref0 (_tmp17_);
+#line 142 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (sum);
+#line 142 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ sum = _tmp18_;
+#line 847 "ViewCollection.c"
+ } else {
+ gboolean _tmp19_ = FALSE;
+ gboolean _tmp20_ = FALSE;
+#line 143 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp20_ = has_selected;
+#line 143 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp20_) {
+#line 855 "ViewCollection.c"
+ gboolean _tmp21_ = FALSE;
+#line 143 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp21_ = has_unselected;
+#line 143 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp19_ = _tmp21_;
+#line 861 "ViewCollection.c"
+ } else {
+#line 143 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp19_ = FALSE;
+#line 865 "ViewCollection.c"
+ }
+#line 143 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp19_) {
+#line 869 "ViewCollection.c"
+ GeeCollection* _tmp22_ = NULL;
+ GeeCollection* _tmp23_ = NULL;
+#line 144 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp22_ = unselected;
+#line 144 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp23_ = _g_object_ref0 (_tmp22_);
+#line 144 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (sum);
+#line 144 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ sum = _tmp23_;
+#line 880 "ViewCollection.c"
+ } else {
+ gboolean _tmp24_ = FALSE;
+ gboolean _tmp25_ = FALSE;
+#line 145 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp25_ = has_selected;
+#line 145 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp25_) {
+#line 888 "ViewCollection.c"
+ gboolean _tmp26_ = FALSE;
+#line 145 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp26_ = has_unselected;
+#line 145 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp24_ = !_tmp26_;
+#line 894 "ViewCollection.c"
+ } else {
+#line 145 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp24_ = FALSE;
+#line 898 "ViewCollection.c"
+ }
+#line 145 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp24_) {
+#line 146 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (sum);
+#line 146 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ sum = NULL;
+#line 906 "ViewCollection.c"
+ } else {
+ GeeHashSet* _tmp27_ = NULL;
+ GeeCollection* _tmp28_ = NULL;
+ GeeCollection* _tmp29_ = NULL;
+ GeeCollection* _tmp30_ = NULL;
+ GeeCollection* _tmp31_ = NULL;
+#line 148 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp27_ = gee_hash_set_new (TYPE_DATA_VIEW, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 148 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (sum);
+#line 148 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ sum = G_TYPE_CHECK_INSTANCE_CAST (_tmp27_, GEE_TYPE_COLLECTION, GeeCollection);
+#line 149 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp28_ = sum;
+#line 149 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp29_ = selected;
+#line 149 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_collection_add_all (_tmp28_, _tmp29_);
+#line 150 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp30_ = sum;
+#line 150 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp31_ = unselected;
+#line 150 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_collection_add_all (_tmp30_, _tmp31_);
+#line 931 "ViewCollection.c"
+ }
+ }
+ }
+#line 153 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp32_ = sum;
+#line 153 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp32_ != NULL) {
+#line 939 "ViewCollection.c"
+ GeeCollection* _tmp33_ = NULL;
+#line 154 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp33_ = sum;
+#line 154 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_emit_by_name (self, "items-state-changed", G_TYPE_CHECK_INSTANCE_CAST (_tmp33_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 155 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_notify_selection_group_altered (self);
+#line 947 "ViewCollection.c"
+ }
+#line 129 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (sum);
+#line 951 "ViewCollection.c"
+}
+
+
+void view_collection_notify_items_selected_unselected (ViewCollection* self, GeeCollection* selected, GeeCollection* unselected) {
+#line 129 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 129 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ VIEW_COLLECTION_GET_CLASS (self)->notify_items_selected_unselected (self, selected, unselected);
+#line 960 "ViewCollection.c"
+}
+
+
+static void view_collection_real_notify_selection_group_altered (ViewCollection* self) {
+#line 160 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_emit_by_name (self, "selection-group-altered");
+#line 967 "ViewCollection.c"
+}
+
+
+void view_collection_notify_selection_group_altered (ViewCollection* self) {
+#line 159 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 159 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ VIEW_COLLECTION_GET_CLASS (self)->notify_selection_group_altered (self);
+#line 976 "ViewCollection.c"
+}
+
+
+static void view_collection_real_notify_item_view_altered (ViewCollection* self, DataView* view) {
+ DataView* _tmp0_ = NULL;
+#line 163 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_DATA_VIEW (view));
+#line 164 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = view;
+#line 164 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_emit_by_name (self, "item-view-altered", _tmp0_);
+#line 988 "ViewCollection.c"
+}
+
+
+void view_collection_notify_item_view_altered (ViewCollection* self, DataView* view) {
+#line 163 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 163 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ VIEW_COLLECTION_GET_CLASS (self)->notify_item_view_altered (self, view);
+#line 997 "ViewCollection.c"
+}
+
+
+static void view_collection_real_notify_views_altered (ViewCollection* self, GeeCollection* views) {
+ GeeCollection* _tmp0_ = NULL;
+#line 167 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (views));
+#line 168 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = views;
+#line 168 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_emit_by_name (self, "views-altered", _tmp0_);
+#line 1009 "ViewCollection.c"
+}
+
+
+void view_collection_notify_views_altered (ViewCollection* self, GeeCollection* views) {
+#line 167 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 167 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ VIEW_COLLECTION_GET_CLASS (self)->notify_views_altered (self, views);
+#line 1018 "ViewCollection.c"
+}
+
+
+static void view_collection_real_notify_item_geometry_altered (ViewCollection* self, DataView* view) {
+ DataView* _tmp0_ = NULL;
+#line 171 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_DATA_VIEW (view));
+#line 172 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = view;
+#line 172 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_emit_by_name (self, "item-geometry-altered", _tmp0_);
+#line 1030 "ViewCollection.c"
+}
+
+
+void view_collection_notify_item_geometry_altered (ViewCollection* self, DataView* view) {
+#line 171 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 171 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ VIEW_COLLECTION_GET_CLASS (self)->notify_item_geometry_altered (self, view);
+#line 1039 "ViewCollection.c"
+}
+
+
+static void view_collection_real_notify_geometries_altered (ViewCollection* self, GeeCollection* views) {
+ GeeCollection* _tmp0_ = NULL;
+#line 175 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (views));
+#line 176 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = views;
+#line 176 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_emit_by_name (self, "geometries-altered", _tmp0_);
+#line 1051 "ViewCollection.c"
+}
+
+
+void view_collection_notify_geometries_altered (ViewCollection* self, GeeCollection* views) {
+#line 175 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 175 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ VIEW_COLLECTION_GET_CLASS (self)->notify_geometries_altered (self, views);
+#line 1060 "ViewCollection.c"
+}
+
+
+static void view_collection_real_notify_items_shown (ViewCollection* self, GeeCollection* shown) {
+ GeeCollection* _tmp0_ = NULL;
+#line 179 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (shown));
+#line 180 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = shown;
+#line 180 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_emit_by_name (self, "items-shown", _tmp0_);
+#line 1072 "ViewCollection.c"
+}
+
+
+void view_collection_notify_items_shown (ViewCollection* self, GeeCollection* shown) {
+#line 179 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 179 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ VIEW_COLLECTION_GET_CLASS (self)->notify_items_shown (self, shown);
+#line 1081 "ViewCollection.c"
+}
+
+
+static void view_collection_real_notify_items_hidden (ViewCollection* self, GeeCollection* hidden) {
+ GeeCollection* _tmp0_ = NULL;
+#line 183 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (hidden));
+#line 184 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = hidden;
+#line 184 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_emit_by_name (self, "items-hidden", _tmp0_);
+#line 1093 "ViewCollection.c"
+}
+
+
+void view_collection_notify_items_hidden (ViewCollection* self, GeeCollection* hidden) {
+#line 183 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 183 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ VIEW_COLLECTION_GET_CLASS (self)->notify_items_hidden (self, hidden);
+#line 1102 "ViewCollection.c"
+}
+
+
+static void view_collection_real_notify_items_visibility_changed (ViewCollection* self, GeeCollection* changed) {
+ GeeCollection* _tmp0_ = NULL;
+#line 187 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (changed));
+#line 188 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = changed;
+#line 188 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_emit_by_name (self, "items-visibility-changed", _tmp0_);
+#line 1114 "ViewCollection.c"
+}
+
+
+void view_collection_notify_items_visibility_changed (ViewCollection* self, GeeCollection* changed) {
+#line 187 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 187 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ VIEW_COLLECTION_GET_CLASS (self)->notify_items_visibility_changed (self, changed);
+#line 1123 "ViewCollection.c"
+}
+
+
+static void view_collection_real_notify_view_filter_installed (ViewCollection* self, ViewFilter* filter) {
+ ViewFilter* _tmp0_ = NULL;
+#line 191 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_FILTER (filter));
+#line 192 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = filter;
+#line 192 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_emit_by_name (self, "view-filter-installed", _tmp0_);
+#line 1135 "ViewCollection.c"
+}
+
+
+void view_collection_notify_view_filter_installed (ViewCollection* self, ViewFilter* filter) {
+#line 191 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 191 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ VIEW_COLLECTION_GET_CLASS (self)->notify_view_filter_installed (self, filter);
+#line 1144 "ViewCollection.c"
+}
+
+
+static void view_collection_real_notify_view_filter_removed (ViewCollection* self, ViewFilter* filter) {
+ ViewFilter* _tmp0_ = NULL;
+#line 195 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_FILTER (filter));
+#line 196 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = filter;
+#line 196 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_emit_by_name (self, "view-filter-removed", _tmp0_);
+#line 1156 "ViewCollection.c"
+}
+
+
+void view_collection_notify_view_filter_removed (ViewCollection* self, ViewFilter* filter) {
+#line 195 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 195 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ VIEW_COLLECTION_GET_CLASS (self)->notify_view_filter_removed (self, filter);
+#line 1165 "ViewCollection.c"
+}
+
+
+static void view_collection_real_clear (DataCollection* base) {
+ ViewCollection * self;
+ gboolean _tmp0_ = FALSE;
+ GeeHashMultiMap* _tmp1_ = NULL;
+ gint _tmp2_ = 0;
+ gint _tmp3_ = 0;
+#line 199 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_VIEW_COLLECTION, ViewCollection);
+#line 202 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = self->priv->monitors;
+#line 202 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = gee_multi_map_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_MULTI_MAP, GeeMultiMap));
+#line 202 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = _tmp2_;
+#line 202 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp3_ > 0) {
+#line 202 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = TRUE;
+#line 1187 "ViewCollection.c"
+ } else {
+ ViewCollection* _tmp4_ = NULL;
+#line 202 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = self->priv->mirroring;
+#line 202 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = _tmp4_ != NULL;
+#line 1194 "ViewCollection.c"
+ }
+#line 202 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp0_) {
+#line 1198 "ViewCollection.c"
+ gchar* _tmp5_ = NULL;
+ gchar* _tmp6_ = NULL;
+#line 203 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = data_collection_to_string (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 203 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = _tmp5_;
+#line 203 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_warning ("ViewCollection.vala:203: Cannot clear %s: monitoring or mirroring in e" \
+"ffect", _tmp6_);
+#line 203 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_free0 (_tmp6_);
+#line 205 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return;
+#line 1211 "ViewCollection.c"
+ }
+#line 208 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ DATA_COLLECTION_CLASS (view_collection_parent_class)->clear (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 1215 "ViewCollection.c"
+}
+
+
+static void _view_collection_on_view_filter_refresh_view_filter_refresh (ViewFilter* _sender, gpointer self) {
+#line 215 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_on_view_filter_refresh ((ViewCollection*) self);
+#line 1222 "ViewCollection.c"
+}
+
+
+static void view_collection_real_close (DataCollection* base) {
+ ViewCollection * self;
+ GeeSet* _tmp8_ = NULL;
+#line 211 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_VIEW_COLLECTION, ViewCollection);
+#line 212 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_halt_all_monitoring (self);
+#line 213 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_halt_mirroring (self);
+#line 1235 "ViewCollection.c"
+ {
+ GeeIterator* _f_it = NULL;
+ GeeSet* _tmp0_ = NULL;
+ GeeIterator* _tmp1_ = NULL;
+#line 214 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = self->priv->filters;
+#line 214 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 214 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _f_it = _tmp1_;
+#line 214 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ while (TRUE) {
+#line 1248 "ViewCollection.c"
+ GeeIterator* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+ ViewFilter* f = NULL;
+ GeeIterator* _tmp4_ = NULL;
+ gpointer _tmp5_ = NULL;
+ ViewFilter* _tmp6_ = NULL;
+ guint _tmp7_ = 0U;
+#line 214 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = _f_it;
+#line 214 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = gee_iterator_next (_tmp2_);
+#line 214 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp3_) {
+#line 214 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 1264 "ViewCollection.c"
+ }
+#line 214 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = _f_it;
+#line 214 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = gee_iterator_get (_tmp4_);
+#line 214 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ f = (ViewFilter*) _tmp5_;
+#line 215 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = f;
+#line 215 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_parse_name ("refresh", TYPE_VIEW_FILTER, &_tmp7_, NULL, FALSE);
+#line 215 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_handlers_disconnect_matched (_tmp6_, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp7_, 0, NULL, (GCallback) _view_collection_on_view_filter_refresh_view_filter_refresh, self);
+#line 214 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _view_filter_unref0 (f);
+#line 1280 "ViewCollection.c"
+ }
+#line 214 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_f_it);
+#line 1284 "ViewCollection.c"
+ }
+#line 216 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = self->priv->filters;
+#line 216 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_collection_clear (G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 218 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ DATA_COLLECTION_CLASS (view_collection_parent_class)->close (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 1292 "ViewCollection.c"
+}
+
+
+ViewCollectionMonitor* view_collection_monitor_source_collection (ViewCollection* self, SourceCollection* sources, ViewManager* manager, Alteration* prereq, GeeCollection* initial, ProgressMonitor progress_monitor, void* progress_monitor_target) {
+ ViewCollectionMonitor* result = NULL;
+ ViewCollectionMonitorImpl* monitor = NULL;
+ SourceCollection* _tmp0_ = NULL;
+ ViewManager* _tmp1_ = NULL;
+ Alteration* _tmp2_ = NULL;
+ ViewCollectionMonitorImpl* _tmp3_ = NULL;
+ GeeHashMultiMap* _tmp4_ = NULL;
+ SourceCollection* _tmp5_ = NULL;
+ ViewCollectionMonitorImpl* _tmp6_ = NULL;
+ gboolean _tmp7_ = FALSE;
+ GeeCollection* _tmp8_ = NULL;
+#line 221 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), NULL);
+#line 221 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_SOURCE_COLLECTION (sources), NULL);
+#line 221 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_MANAGER (manager), NULL);
+#line 221 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail ((prereq == NULL) || IS_ALTERATION (prereq), NULL);
+#line 221 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail ((initial == NULL) || GEE_IS_COLLECTION (initial), NULL);
+#line 225 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_halt_mirroring (self);
+#line 227 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ data_collection_freeze_notifications (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 230 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = sources;
+#line 230 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = manager;
+#line 230 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = prereq;
+#line 230 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = view_collection_monitor_impl_new (self, _tmp0_, _tmp1_, _tmp2_);
+#line 230 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ monitor = _tmp3_;
+#line 231 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = self->priv->monitors;
+#line 231 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = sources;
+#line 231 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = monitor;
+#line 231 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_multi_map_set (G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, GEE_TYPE_MULTI_MAP, GeeMultiMap), _tmp5_, _tmp6_);
+#line 233 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = initial;
+#line 233 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp8_ != NULL) {
+#line 1344 "ViewCollection.c"
+ GeeCollection* _tmp9_ = NULL;
+ gint _tmp10_ = 0;
+ gint _tmp11_ = 0;
+#line 233 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = initial;
+#line 233 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp10_ = gee_collection_get_size (_tmp9_);
+#line 233 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp11_ = _tmp10_;
+#line 233 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = _tmp11_ > 0;
+#line 1356 "ViewCollection.c"
+ } else {
+#line 233 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = FALSE;
+#line 1360 "ViewCollection.c"
+ }
+#line 233 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp7_) {
+#line 1364 "ViewCollection.c"
+ GeeArrayList* created_views = NULL;
+ GeeArrayList* _tmp12_ = NULL;
+ GeeArrayList* _tmp24_ = NULL;
+ ProgressMonitor _tmp25_ = NULL;
+ void* _tmp25__target = NULL;
+ GeeCollection* _tmp26_ = NULL;
+ GeeCollection* _tmp27_ = NULL;
+#line 235 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp12_ = gee_array_list_new (TYPE_DATA_VIEW, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 235 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ created_views = _tmp12_;
+#line 1376 "ViewCollection.c"
+ {
+ GeeIterator* _source_it = NULL;
+ GeeCollection* _tmp13_ = NULL;
+ GeeIterator* _tmp14_ = NULL;
+#line 236 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp13_ = initial;
+#line 236 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp14_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp13_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 236 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _source_it = _tmp14_;
+#line 236 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ while (TRUE) {
+#line 1389 "ViewCollection.c"
+ GeeIterator* _tmp15_ = NULL;
+ gboolean _tmp16_ = FALSE;
+ DataSource* source = NULL;
+ GeeIterator* _tmp17_ = NULL;
+ gpointer _tmp18_ = NULL;
+ GeeArrayList* _tmp19_ = NULL;
+ ViewManager* _tmp20_ = NULL;
+ DataSource* _tmp21_ = NULL;
+ DataView* _tmp22_ = NULL;
+ DataView* _tmp23_ = NULL;
+#line 236 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp15_ = _source_it;
+#line 236 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp16_ = gee_iterator_next (_tmp15_);
+#line 236 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp16_) {
+#line 236 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 1408 "ViewCollection.c"
+ }
+#line 236 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp17_ = _source_it;
+#line 236 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp18_ = gee_iterator_get (_tmp17_);
+#line 236 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ source = (DataSource*) _tmp18_;
+#line 237 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp19_ = created_views;
+#line 237 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp20_ = manager;
+#line 237 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp21_ = source;
+#line 237 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp22_ = view_manager_create_view (_tmp20_, _tmp21_);
+#line 237 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp23_ = _tmp22_;
+#line 237 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp19_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp23_);
+#line 237 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp23_);
+#line 236 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (source);
+#line 1432 "ViewCollection.c"
+ }
+#line 236 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_source_it);
+#line 1436 "ViewCollection.c"
+ }
+#line 239 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp24_ = created_views;
+#line 239 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp25_ = progress_monitor;
+#line 239 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp25__target = progress_monitor_target;
+#line 239 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp26_ = data_collection_add_many (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp24_, GEE_TYPE_COLLECTION, GeeCollection), _tmp25_, _tmp25__target);
+#line 239 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp27_ = _tmp26_;
+#line 239 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp27_);
+#line 233 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (created_views);
+#line 1452 "ViewCollection.c"
+ } else {
+ SourceCollection* _tmp28_ = NULL;
+ SourceCollection* _tmp29_ = NULL;
+ GeeCollection* _tmp30_ = NULL;
+ GeeIterable* _tmp31_ = NULL;
+ ProgressMonitor _tmp32_ = NULL;
+ void* _tmp32__target = NULL;
+#line 242 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp28_ = sources;
+#line 242 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp29_ = sources;
+#line 242 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp30_ = data_collection_get_all (G_TYPE_CHECK_INSTANCE_CAST (_tmp29_, TYPE_DATA_COLLECTION, DataCollection));
+#line 242 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp31_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp30_, GEE_TYPE_ITERABLE, GeeIterable);
+#line 242 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp32_ = progress_monitor;
+#line 242 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp32__target = progress_monitor_target;
+#line 242 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_add_sources (self, _tmp28_, _tmp31_, _tmp32_, _tmp32__target);
+#line 242 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp31_);
+#line 1476 "ViewCollection.c"
+ }
+#line 245 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ data_collection_thaw_notifications (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 247 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (monitor, VIEW_COLLECTION_TYPE_MONITOR, ViewCollectionMonitor);
+#line 247 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 1484 "ViewCollection.c"
+}
+
+
+static gpointer _view_collection_monitor_ref0 (gpointer self) {
+#line 251 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return self ? view_collection_monitor_ref (self) : NULL;
+#line 1491 "ViewCollection.c"
+}
+
+
+void view_collection_halt_monitoring (ViewCollection* self, ViewCollectionMonitor* m) {
+ ViewCollectionMonitorImpl* monitor = NULL;
+ ViewCollectionMonitor* _tmp0_ = NULL;
+ ViewCollectionMonitorImpl* _tmp1_ = NULL;
+ gboolean removed = FALSE;
+ GeeHashMultiMap* _tmp2_ = NULL;
+ SourceCollection* _tmp3_ = NULL;
+ gboolean _tmp4_ = FALSE;
+#line 250 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 250 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (VIEW_COLLECTION_IS_MONITOR (m));
+#line 251 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = m;
+#line 251 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = _view_collection_monitor_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, VIEW_COLLECTION_TYPE_MONITOR_IMPL, ViewCollectionMonitorImpl));
+#line 251 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ monitor = _tmp1_;
+#line 253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = self->priv->monitors;
+#line 253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = monitor->sources;
+#line 253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = gee_multi_map_remove (G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, GEE_TYPE_MULTI_MAP, GeeMultiMap), _tmp3_, monitor);
+#line 253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ removed = _tmp4_;
+#line 254 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _vala_assert (removed, "removed");
+#line 250 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _view_collection_monitor_unref0 (monitor);
+#line 1525 "ViewCollection.c"
+}
+
+
+void view_collection_halt_all_monitoring (ViewCollection* self) {
+ GeeHashMultiMap* _tmp0_ = NULL;
+#line 257 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 258 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = self->priv->monitors;
+#line 258 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_multi_map_clear (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_MULTI_MAP, GeeMultiMap));
+#line 1537 "ViewCollection.c"
+}
+
+
+static gpointer _data_collection_ref0 (gpointer self) {
+#line 267 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return self ? data_collection_ref (self) : NULL;
+#line 1544 "ViewCollection.c"
+}
+
+
+static void _view_collection_on_mirror_contents_added_data_collection_items_added (DataCollection* _sender, GeeIterable* added, gpointer self) {
+#line 275 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_on_mirror_contents_added ((ViewCollection*) self, added);
+#line 1551 "ViewCollection.c"
+}
+
+
+static void _view_collection_on_mirror_contents_removed_data_collection_items_removed (DataCollection* _sender, GeeIterable* removed, gpointer self) {
+#line 276 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_on_mirror_contents_removed ((ViewCollection*) self, removed);
+#line 1558 "ViewCollection.c"
+}
+
+
+void view_collection_mirror (ViewCollection* self, ViewCollection* to_mirror, CreateView mirroring_ctor, void* mirroring_ctor_target, CreateViewPredicate should_mirror, void* should_mirror_target) {
+ ViewCollection* _tmp0_ = NULL;
+ ViewCollection* _tmp1_ = NULL;
+ CreateView _tmp2_ = NULL;
+ void* _tmp2__target = NULL;
+ CreateViewPredicate _tmp3_ = NULL;
+ void* _tmp3__target = NULL;
+ ViewCollection* _tmp4_ = NULL;
+ void* _tmp5_ = NULL;
+ Comparator _tmp6_ = NULL;
+ ViewCollection* _tmp7_ = NULL;
+ void* _tmp8_ = NULL;
+ ComparatorPredicate _tmp9_ = NULL;
+ ViewCollection* _tmp10_ = NULL;
+ GeeCollection* _tmp11_ = NULL;
+ GeeCollection* _tmp12_ = NULL;
+ ViewCollection* _tmp13_ = NULL;
+ ViewCollection* _tmp14_ = NULL;
+#line 261 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 261 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (to_mirror));
+#line 263 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_halt_mirroring (self);
+#line 264 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_halt_all_monitoring (self);
+#line 265 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ data_collection_clear (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 267 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = to_mirror;
+#line 267 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = _data_collection_ref0 (_tmp0_);
+#line 267 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _data_collection_unref0 (self->priv->mirroring);
+#line 267 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->priv->mirroring = _tmp1_;
+#line 268 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = mirroring_ctor;
+#line 268 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2__target = mirroring_ctor_target;
+#line 268 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->priv->mirroring_ctor = _tmp2_;
+#line 268 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->priv->mirroring_ctor_target = _tmp2__target;
+#line 269 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = should_mirror;
+#line 269 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3__target = should_mirror_target;
+#line 269 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->priv->should_mirror = _tmp3_;
+#line 269 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->priv->should_mirror_target = _tmp3__target;
+#line 270 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = to_mirror;
+#line 270 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = data_collection_get_comparator (G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, TYPE_DATA_COLLECTION, DataCollection), &_tmp5_);
+#line 270 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = to_mirror;
+#line 270 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = data_collection_get_comparator_predicate (G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, TYPE_DATA_COLLECTION, DataCollection), &_tmp8_);
+#line 270 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ data_collection_set_comparator (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), _tmp6_, _tmp5_, _tmp9_, _tmp8_);
+#line 273 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp10_ = self->priv->mirroring;
+#line 273 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp11_ = data_collection_get_all (G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, TYPE_DATA_COLLECTION, DataCollection));
+#line 273 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp12_ = _tmp11_;
+#line 273 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_on_mirror_contents_added (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 273 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp12_);
+#line 275 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp13_ = self->priv->mirroring;
+#line 275 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_connect (G_TYPE_CHECK_INSTANCE_CAST (_tmp13_, TYPE_DATA_COLLECTION, DataCollection), "items-added", (GCallback) _view_collection_on_mirror_contents_added_data_collection_items_added, self);
+#line 276 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp14_ = self->priv->mirroring;
+#line 276 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_connect (G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, TYPE_DATA_COLLECTION, DataCollection), "items-removed", (GCallback) _view_collection_on_mirror_contents_removed_data_collection_items_removed, self);
+#line 1642 "ViewCollection.c"
+}
+
+
+void view_collection_halt_mirroring (ViewCollection* self) {
+ ViewCollection* _tmp0_ = NULL;
+#line 279 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 280 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = self->priv->mirroring;
+#line 280 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp0_ != NULL) {
+#line 1654 "ViewCollection.c"
+ ViewCollection* _tmp1_ = NULL;
+ guint _tmp2_ = 0U;
+ ViewCollection* _tmp3_ = NULL;
+ guint _tmp4_ = 0U;
+#line 281 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = self->priv->mirroring;
+#line 281 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_parse_name ("items-added", TYPE_DATA_COLLECTION, &_tmp2_, NULL, FALSE);
+#line 281 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_handlers_disconnect_matched (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, TYPE_DATA_COLLECTION, DataCollection), G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp2_, 0, NULL, (GCallback) _view_collection_on_mirror_contents_added_data_collection_items_added, self);
+#line 282 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = self->priv->mirroring;
+#line 282 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_parse_name ("items-removed", TYPE_DATA_COLLECTION, &_tmp4_, NULL, FALSE);
+#line 282 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_handlers_disconnect_matched (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, TYPE_DATA_COLLECTION, DataCollection), G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp4_, 0, NULL, (GCallback) _view_collection_on_mirror_contents_removed_data_collection_items_removed, self);
+#line 1671 "ViewCollection.c"
+ }
+#line 285 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _data_collection_unref0 (self->priv->mirroring);
+#line 285 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->priv->mirroring = NULL;
+#line 1677 "ViewCollection.c"
+}
+
+
+void view_collection_copy_into (ViewCollection* self, ViewCollection* to_copy, CreateView copying_ctor, void* copying_ctor_target, CreateViewPredicate should_copy, void* should_copy_target) {
+ GeeArrayList* copy_view = NULL;
+ GeeArrayList* _tmp0_ = NULL;
+ GeeArrayList* _tmp25_ = NULL;
+ GeeCollection* _tmp26_ = NULL;
+ GeeCollection* _tmp27_ = NULL;
+#line 288 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 288 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (to_copy));
+#line 291 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = gee_array_list_new (TYPE_DATA_OBJECT, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 291 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ copy_view = _tmp0_;
+#line 1695 "ViewCollection.c"
+ {
+ GeeIterator* _object_it = NULL;
+ ViewCollection* _tmp1_ = NULL;
+ GeeCollection* _tmp2_ = NULL;
+ GeeCollection* _tmp3_ = NULL;
+ GeeIterator* _tmp4_ = NULL;
+ GeeIterator* _tmp5_ = NULL;
+#line 292 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = to_copy;
+#line 292 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = data_collection_get_all (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, TYPE_DATA_COLLECTION, DataCollection));
+#line 292 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = _tmp2_;
+#line 292 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 292 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = _tmp4_;
+#line 292 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp3_);
+#line 292 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _object_it = _tmp5_;
+#line 292 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ while (TRUE) {
+#line 1719 "ViewCollection.c"
+ GeeIterator* _tmp6_ = NULL;
+ gboolean _tmp7_ = FALSE;
+ DataObject* object = NULL;
+ GeeIterator* _tmp8_ = NULL;
+ gpointer _tmp9_ = NULL;
+ DataView* view = NULL;
+ DataObject* _tmp10_ = NULL;
+ DataView* _tmp11_ = NULL;
+ CreateViewPredicate _tmp12_ = NULL;
+ void* _tmp12__target = NULL;
+ DataView* _tmp13_ = NULL;
+ DataSource* _tmp14_ = NULL;
+ DataSource* _tmp15_ = NULL;
+ gboolean _tmp16_ = FALSE;
+ gboolean _tmp17_ = FALSE;
+#line 292 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = _object_it;
+#line 292 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = gee_iterator_next (_tmp6_);
+#line 292 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp7_) {
+#line 292 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 1743 "ViewCollection.c"
+ }
+#line 292 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = _object_it;
+#line 292 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = gee_iterator_get (_tmp8_);
+#line 292 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ object = (DataObject*) _tmp9_;
+#line 293 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp10_ = object;
+#line 293 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp11_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, TYPE_DATA_VIEW, DataView));
+#line 293 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view = _tmp11_;
+#line 294 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp12_ = should_copy;
+#line 294 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp12__target = should_copy_target;
+#line 294 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp13_ = view;
+#line 294 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp14_ = data_view_get_source (_tmp13_);
+#line 294 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp15_ = _tmp14_;
+#line 294 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp16_ = _tmp12_ (_tmp15_, _tmp12__target);
+#line 294 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp17_ = _tmp16_;
+#line 294 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp15_);
+#line 294 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp17_) {
+#line 1775 "ViewCollection.c"
+ GeeArrayList* _tmp18_ = NULL;
+ CreateView _tmp19_ = NULL;
+ void* _tmp19__target = NULL;
+ DataView* _tmp20_ = NULL;
+ DataSource* _tmp21_ = NULL;
+ DataSource* _tmp22_ = NULL;
+ DataView* _tmp23_ = NULL;
+ DataView* _tmp24_ = NULL;
+#line 295 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp18_ = copy_view;
+#line 295 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp19_ = copying_ctor;
+#line 295 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp19__target = copying_ctor_target;
+#line 295 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp20_ = view;
+#line 295 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp21_ = data_view_get_source (_tmp20_);
+#line 295 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp22_ = _tmp21_;
+#line 295 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp23_ = _tmp19_ (_tmp22_, _tmp19__target);
+#line 295 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp24_ = _tmp23_;
+#line 295 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp18_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp24_, TYPE_DATA_OBJECT, DataObject));
+#line 295 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp24_);
+#line 295 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp22_);
+#line 1806 "ViewCollection.c"
+ }
+#line 292 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (view);
+#line 292 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (object);
+#line 1812 "ViewCollection.c"
+ }
+#line 292 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_object_it);
+#line 1816 "ViewCollection.c"
+ }
+#line 298 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp25_ = copy_view;
+#line 298 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp26_ = data_collection_add_many (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp25_, GEE_TYPE_COLLECTION, GeeCollection), NULL, NULL);
+#line 298 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp27_ = _tmp26_;
+#line 298 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp27_);
+#line 288 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (copy_view);
+#line 1828 "ViewCollection.c"
+}
+
+
+gboolean view_collection_is_view_filter_installed (ViewCollection* self, ViewFilter* f) {
+ gboolean result = FALSE;
+ GeeSet* _tmp0_ = NULL;
+ ViewFilter* _tmp1_ = NULL;
+ gboolean _tmp2_ = FALSE;
+#line 301 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), FALSE);
+#line 301 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_FILTER (f), FALSE);
+#line 302 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = self->priv->filters;
+#line 302 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = f;
+#line 302 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = gee_collection_contains (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_COLLECTION, GeeCollection), _tmp1_);
+#line 302 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = _tmp2_;
+#line 302 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 1851 "ViewCollection.c"
+}
+
+
+void view_collection_install_view_filter (ViewCollection* self, ViewFilter* f) {
+ ViewFilter* _tmp0_ = NULL;
+ gboolean _tmp1_ = FALSE;
+ GeeSet* _tmp2_ = NULL;
+ ViewFilter* _tmp3_ = NULL;
+ ViewFilter* _tmp4_ = NULL;
+ ViewFilter* _tmp5_ = NULL;
+#line 305 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 305 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_FILTER (f));
+#line 306 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = f;
+#line 306 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = view_collection_is_view_filter_installed (self, _tmp0_);
+#line 306 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp1_) {
+#line 307 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return;
+#line 1874 "ViewCollection.c"
+ }
+#line 309 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = self->priv->filters;
+#line 309 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = f;
+#line 309 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, GEE_TYPE_COLLECTION, GeeCollection), _tmp3_);
+#line 310 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = f;
+#line 310 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_connect (_tmp4_, "refresh", (GCallback) _view_collection_on_view_filter_refresh_view_filter_refresh, self);
+#line 313 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_on_view_filter_refresh (self);
+#line 316 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = f;
+#line 316 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_notify_view_filter_installed (self, _tmp5_);
+#line 1892 "ViewCollection.c"
+}
+
+
+void view_collection_remove_view_filter (ViewCollection* self, ViewFilter* f) {
+ ViewFilter* _tmp0_ = NULL;
+ gboolean _tmp1_ = FALSE;
+ GeeSet* _tmp2_ = NULL;
+ ViewFilter* _tmp3_ = NULL;
+ ViewFilter* _tmp4_ = NULL;
+ guint _tmp5_ = 0U;
+ ViewFilter* _tmp6_ = NULL;
+#line 319 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 319 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_FILTER (f));
+#line 320 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = f;
+#line 320 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = view_collection_is_view_filter_installed (self, _tmp0_);
+#line 320 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp1_) {
+#line 321 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return;
+#line 1916 "ViewCollection.c"
+ }
+#line 323 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = self->priv->filters;
+#line 323 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = f;
+#line 323 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_collection_remove (G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, GEE_TYPE_COLLECTION, GeeCollection), _tmp3_);
+#line 324 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = f;
+#line 324 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_parse_name ("refresh", TYPE_VIEW_FILTER, &_tmp5_, NULL, FALSE);
+#line 324 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_handlers_disconnect_matched (_tmp4_, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp5_, 0, NULL, (GCallback) _view_collection_on_view_filter_refresh_view_filter_refresh, self);
+#line 327 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_on_view_filter_refresh (self);
+#line 330 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = f;
+#line 330 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_notify_view_filter_removed (self, _tmp6_);
+#line 1936 "ViewCollection.c"
+}
+
+
+static void view_collection_on_view_filter_refresh (ViewCollection* self) {
+ GeeCollection* _tmp0_ = NULL;
+ GeeCollection* _tmp1_ = NULL;
+#line 333 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 334 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = DATA_COLLECTION_CLASS (view_collection_parent_class)->get_all (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 334 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_COLLECTION, GeeCollection);
+#line 334 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_filter_altered_items (self, _tmp1_);
+#line 334 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp1_);
+#line 1953 "ViewCollection.c"
+}
+
+
+static gboolean view_collection_is_in_filter (ViewCollection* self, DataView* view) {
+ gboolean result = FALSE;
+#line 338 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), FALSE);
+#line 338 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_DATA_VIEW (view), FALSE);
+#line 1963 "ViewCollection.c"
+ {
+ GeeIterator* _f_it = NULL;
+ GeeSet* _tmp0_ = NULL;
+ GeeIterator* _tmp1_ = NULL;
+#line 339 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = self->priv->filters;
+#line 339 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 339 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _f_it = _tmp1_;
+#line 339 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ while (TRUE) {
+#line 1976 "ViewCollection.c"
+ GeeIterator* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+ ViewFilter* f = NULL;
+ GeeIterator* _tmp4_ = NULL;
+ gpointer _tmp5_ = NULL;
+ ViewFilter* _tmp6_ = NULL;
+ DataView* _tmp7_ = NULL;
+ gboolean _tmp8_ = FALSE;
+#line 339 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = _f_it;
+#line 339 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = gee_iterator_next (_tmp2_);
+#line 339 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp3_) {
+#line 339 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 1993 "ViewCollection.c"
+ }
+#line 339 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = _f_it;
+#line 339 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = gee_iterator_get (_tmp4_);
+#line 339 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ f = (ViewFilter*) _tmp5_;
+#line 340 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = f;
+#line 340 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = view;
+#line 340 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = view_filter_predicate (_tmp6_, _tmp7_);
+#line 340 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp8_) {
+#line 341 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = FALSE;
+#line 341 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _view_filter_unref0 (f);
+#line 341 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_f_it);
+#line 341 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 2017 "ViewCollection.c"
+ }
+#line 339 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _view_filter_unref0 (f);
+#line 2021 "ViewCollection.c"
+ }
+#line 339 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_f_it);
+#line 2025 "ViewCollection.c"
+ }
+#line 343 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = TRUE;
+#line 343 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 2031 "ViewCollection.c"
+}
+
+
+static gboolean view_collection_real_valid_type (DataCollection* base, DataObject* object) {
+ ViewCollection * self;
+ gboolean result = FALSE;
+ DataObject* _tmp0_ = NULL;
+#line 346 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_VIEW_COLLECTION, ViewCollection);
+#line 346 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (object), FALSE);
+#line 347 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = object;
+#line 347 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, TYPE_DATA_VIEW);
+#line 347 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 2049 "ViewCollection.c"
+}
+
+
+static void view_collection_on_sources_added (ViewCollection* self, DataCollection* sources, GeeIterable* added) {
+ DataCollection* _tmp0_ = NULL;
+ GeeIterable* _tmp1_ = NULL;
+#line 350 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 350 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_DATA_COLLECTION (sources));
+#line 350 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (GEE_IS_ITERABLE (added));
+#line 351 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = sources;
+#line 351 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = added;
+#line 351 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_add_sources (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_SOURCE_COLLECTION, SourceCollection), _tmp1_, NULL, NULL);
+#line 2068 "ViewCollection.c"
+}
+
+
+static DataView* _view_manager_create_view_create_view (DataSource* source, gpointer self) {
+ DataView* result;
+ result = view_manager_create_view ((ViewManager*) self, source);
+#line 364 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 2077 "ViewCollection.c"
+}
+
+
+static void view_collection_add_sources (ViewCollection* self, SourceCollection* sources, GeeIterable* added, ProgressMonitor progress_monitor, void* progress_monitor_target) {
+ DataView* created_view = NULL;
+ GeeArrayList* created_views = NULL;
+ DataView* _tmp37_ = NULL;
+#line 354 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 354 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_SOURCE_COLLECTION (sources));
+#line 354 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (GEE_IS_ITERABLE (added));
+#line 358 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ created_view = NULL;
+#line 359 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ created_views = NULL;
+#line 2095 "ViewCollection.c"
+ {
+ GeeIterator* _source_it = NULL;
+ GeeIterable* _tmp0_ = NULL;
+ GeeIterator* _tmp1_ = NULL;
+#line 360 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = added;
+#line 360 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = gee_iterable_iterator (_tmp0_);
+#line 360 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _source_it = _tmp1_;
+#line 360 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ while (TRUE) {
+#line 2108 "ViewCollection.c"
+ GeeIterator* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+ DataSource* source = NULL;
+ GeeIterator* _tmp4_ = NULL;
+ gpointer _tmp5_ = NULL;
+ CreateView factory = NULL;
+ void* factory_target = NULL;
+ GDestroyNotify factory_target_destroy_notify = NULL;
+ CreateView _tmp22_ = NULL;
+ void* _tmp22__target = NULL;
+#line 360 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = _source_it;
+#line 360 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = gee_iterator_next (_tmp2_);
+#line 360 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp3_) {
+#line 360 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 2127 "ViewCollection.c"
+ }
+#line 360 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = _source_it;
+#line 360 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = gee_iterator_get (_tmp4_);
+#line 360 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ source = (DataSource*) _tmp5_;
+#line 361 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ factory = NULL;
+#line 361 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ factory_target = NULL;
+#line 361 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ factory_target_destroy_notify = NULL;
+#line 2141 "ViewCollection.c"
+ {
+ GeeIterator* _monitor_it = NULL;
+ GeeHashMultiMap* _tmp6_ = NULL;
+ SourceCollection* _tmp7_ = NULL;
+ GeeCollection* _tmp8_ = NULL;
+ GeeCollection* _tmp9_ = NULL;
+ GeeIterator* _tmp10_ = NULL;
+ GeeIterator* _tmp11_ = NULL;
+#line 362 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = self->priv->monitors;
+#line 362 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = sources;
+#line 362 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = gee_multi_map_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, GEE_TYPE_MULTI_MAP, GeeMultiMap), _tmp7_);
+#line 362 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = _tmp8_;
+#line 362 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp10_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 362 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp11_ = _tmp10_;
+#line 362 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp9_);
+#line 362 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _monitor_it = _tmp11_;
+#line 362 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ while (TRUE) {
+#line 2168 "ViewCollection.c"
+ GeeIterator* _tmp12_ = NULL;
+ gboolean _tmp13_ = FALSE;
+ ViewCollectionMonitorImpl* monitor = NULL;
+ GeeIterator* _tmp14_ = NULL;
+ gpointer _tmp15_ = NULL;
+ ViewCollectionMonitorImpl* _tmp16_ = NULL;
+ ViewManager* _tmp17_ = NULL;
+ DataSource* _tmp18_ = NULL;
+ gboolean _tmp19_ = FALSE;
+#line 362 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp12_ = _monitor_it;
+#line 362 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp13_ = gee_iterator_next (_tmp12_);
+#line 362 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp13_) {
+#line 362 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 2186 "ViewCollection.c"
+ }
+#line 362 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp14_ = _monitor_it;
+#line 362 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp15_ = gee_iterator_get (_tmp14_);
+#line 362 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ monitor = (ViewCollectionMonitorImpl*) _tmp15_;
+#line 363 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp16_ = monitor;
+#line 363 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp17_ = _tmp16_->manager;
+#line 363 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp18_ = source;
+#line 363 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp19_ = view_manager_include_in_view (_tmp17_, _tmp18_);
+#line 363 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp19_) {
+#line 2204 "ViewCollection.c"
+ ViewCollectionMonitorImpl* _tmp20_ = NULL;
+ ViewManager* _tmp21_ = NULL;
+#line 364 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp20_ = monitor;
+#line 364 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp21_ = _tmp20_->manager;
+#line 364 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ (factory_target_destroy_notify == NULL) ? NULL : (factory_target_destroy_notify (factory_target), NULL);
+#line 364 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ factory = NULL;
+#line 364 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ factory_target = NULL;
+#line 364 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ factory_target_destroy_notify = NULL;
+#line 364 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ factory = _view_manager_create_view_create_view;
+#line 364 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ factory_target = view_manager_ref (_tmp21_);
+#line 364 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ factory_target_destroy_notify = view_manager_unref;
+#line 366 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _view_collection_monitor_unref0 (monitor);
+#line 366 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 2229 "ViewCollection.c"
+ }
+#line 362 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _view_collection_monitor_unref0 (monitor);
+#line 2233 "ViewCollection.c"
+ }
+#line 362 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_monitor_it);
+#line 2237 "ViewCollection.c"
+ }
+#line 370 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp22_ = factory;
+#line 370 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp22__target = factory_target;
+#line 370 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp22_ != NULL) {
+#line 2245 "ViewCollection.c"
+ DataView* new_view = NULL;
+ CreateView _tmp23_ = NULL;
+ void* _tmp23__target = NULL;
+ DataSource* _tmp24_ = NULL;
+ DataView* _tmp25_ = NULL;
+ GeeArrayList* _tmp26_ = NULL;
+#line 371 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp23_ = factory;
+#line 371 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp23__target = factory_target;
+#line 371 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp24_ = source;
+#line 371 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp25_ = _tmp23_ (_tmp24_, _tmp23__target);
+#line 371 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ new_view = _tmp25_;
+#line 375 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp26_ = created_views;
+#line 375 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp26_ != NULL) {
+#line 2266 "ViewCollection.c"
+ GeeArrayList* _tmp27_ = NULL;
+ DataView* _tmp28_ = NULL;
+#line 376 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp27_ = created_views;
+#line 376 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp28_ = new_view;
+#line 376 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp27_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp28_);
+#line 2275 "ViewCollection.c"
+ } else {
+ DataView* _tmp29_ = NULL;
+#line 377 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp29_ = created_view;
+#line 377 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp29_ == NULL) {
+#line 2282 "ViewCollection.c"
+ DataView* _tmp30_ = NULL;
+ DataView* _tmp31_ = NULL;
+#line 378 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp30_ = new_view;
+#line 378 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp31_ = _g_object_ref0 (_tmp30_);
+#line 378 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (created_view);
+#line 378 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ created_view = _tmp31_;
+#line 2293 "ViewCollection.c"
+ } else {
+ GeeArrayList* _tmp32_ = NULL;
+ GeeArrayList* _tmp33_ = NULL;
+ DataView* _tmp34_ = NULL;
+ GeeArrayList* _tmp35_ = NULL;
+ DataView* _tmp36_ = NULL;
+#line 380 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp32_ = gee_array_list_new (TYPE_DATA_VIEW, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 380 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (created_views);
+#line 380 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ created_views = _tmp32_;
+#line 381 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp33_ = created_views;
+#line 381 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp34_ = created_view;
+#line 381 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp33_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp34_);
+#line 382 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (created_view);
+#line 382 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ created_view = NULL;
+#line 383 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp35_ = created_views;
+#line 383 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp36_ = new_view;
+#line 383 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp35_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp36_);
+#line 2322 "ViewCollection.c"
+ }
+ }
+#line 370 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (new_view);
+#line 2327 "ViewCollection.c"
+ }
+#line 360 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ (factory_target_destroy_notify == NULL) ? NULL : (factory_target_destroy_notify (factory_target), NULL);
+#line 360 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ factory = NULL;
+#line 360 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ factory_target = NULL;
+#line 360 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ factory_target_destroy_notify = NULL;
+#line 360 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (source);
+#line 2339 "ViewCollection.c"
+ }
+#line 360 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_source_it);
+#line 2343 "ViewCollection.c"
+ }
+#line 388 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp37_ = created_view;
+#line 388 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp37_ != NULL) {
+#line 2349 "ViewCollection.c"
+ DataView* _tmp38_ = NULL;
+#line 389 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp38_ = created_view;
+#line 389 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ data_collection_add (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp38_, TYPE_DATA_OBJECT, DataObject));
+#line 2355 "ViewCollection.c"
+ } else {
+ gboolean _tmp39_ = FALSE;
+ GeeArrayList* _tmp40_ = NULL;
+#line 390 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp40_ = created_views;
+#line 390 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp40_ != NULL) {
+#line 2363 "ViewCollection.c"
+ GeeArrayList* _tmp41_ = NULL;
+ gint _tmp42_ = 0;
+ gint _tmp43_ = 0;
+#line 390 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp41_ = created_views;
+#line 390 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp42_ = gee_abstract_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp41_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 390 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp43_ = _tmp42_;
+#line 390 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp39_ = _tmp43_ > 0;
+#line 2375 "ViewCollection.c"
+ } else {
+#line 390 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp39_ = FALSE;
+#line 2379 "ViewCollection.c"
+ }
+#line 390 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp39_) {
+#line 2383 "ViewCollection.c"
+ GeeArrayList* _tmp44_ = NULL;
+ ProgressMonitor _tmp45_ = NULL;
+ void* _tmp45__target = NULL;
+ GeeCollection* _tmp46_ = NULL;
+ GeeCollection* _tmp47_ = NULL;
+#line 391 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp44_ = created_views;
+#line 391 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp45_ = progress_monitor;
+#line 391 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp45__target = progress_monitor_target;
+#line 391 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp46_ = data_collection_add_many (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp44_, GEE_TYPE_COLLECTION, GeeCollection), _tmp45_, _tmp45__target);
+#line 391 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp47_ = _tmp46_;
+#line 391 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp47_);
+#line 2401 "ViewCollection.c"
+ }
+ }
+#line 354 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (created_views);
+#line 354 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (created_view);
+#line 2408 "ViewCollection.c"
+}
+
+
+static gboolean view_collection_real_add (DataCollection* base, DataObject* object) {
+ ViewCollection * self;
+ gboolean result = FALSE;
+ DataObject* _tmp0_ = NULL;
+ DataObject* _tmp1_ = NULL;
+ gboolean _tmp2_ = FALSE;
+ DataObject* _tmp3_ = NULL;
+ GeeCollection* _tmp4_ = NULL;
+ GeeCollection* _tmp5_ = NULL;
+#line 394 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_VIEW_COLLECTION, ViewCollection);
+#line 394 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (object), FALSE);
+#line 395 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = object;
+#line 395 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ data_view_internal_set_visible (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_DATA_VIEW, DataView), TRUE);
+#line 397 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = object;
+#line 397 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = DATA_COLLECTION_CLASS (view_collection_parent_class)->add (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), _tmp1_);
+#line 397 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp2_) {
+#line 398 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = FALSE;
+#line 398 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 2439 "ViewCollection.c"
+ }
+#line 400 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = object;
+#line 400 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = data_collection_get_singleton (_tmp3_);
+#line 400 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, GEE_TYPE_COLLECTION, GeeCollection);
+#line 400 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_filter_altered_items (self, _tmp5_);
+#line 400 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp5_);
+#line 402 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = TRUE;
+#line 402 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 2455 "ViewCollection.c"
+}
+
+
+static GeeCollection* view_collection_real_add_many (DataCollection* base, GeeCollection* objects, ProgressMonitor monitor, void* monitor_target) {
+ ViewCollection * self;
+ GeeCollection* result = NULL;
+ GeeCollection* return_list = NULL;
+ GeeCollection* _tmp7_ = NULL;
+ ProgressMonitor _tmp8_ = NULL;
+ void* _tmp8__target = NULL;
+ GeeCollection* _tmp9_ = NULL;
+#line 405 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_VIEW_COLLECTION, ViewCollection);
+#line 405 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (GEE_IS_COLLECTION (objects), NULL);
+#line 2471 "ViewCollection.c"
+ {
+ GeeIterator* _object_it = NULL;
+ GeeCollection* _tmp0_ = NULL;
+ GeeIterator* _tmp1_ = NULL;
+#line 407 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = objects;
+#line 407 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 407 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _object_it = _tmp1_;
+#line 407 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ while (TRUE) {
+#line 2484 "ViewCollection.c"
+ GeeIterator* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+ DataObject* object = NULL;
+ GeeIterator* _tmp4_ = NULL;
+ gpointer _tmp5_ = NULL;
+ DataObject* _tmp6_ = NULL;
+#line 407 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = _object_it;
+#line 407 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = gee_iterator_next (_tmp2_);
+#line 407 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp3_) {
+#line 407 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 2499 "ViewCollection.c"
+ }
+#line 407 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = _object_it;
+#line 407 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = gee_iterator_get (_tmp4_);
+#line 407 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ object = (DataObject*) _tmp5_;
+#line 408 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = object;
+#line 408 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ data_view_internal_set_visible (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, TYPE_DATA_VIEW, DataView), TRUE);
+#line 407 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (object);
+#line 2513 "ViewCollection.c"
+ }
+#line 407 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_object_it);
+#line 2517 "ViewCollection.c"
+ }
+#line 410 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = objects;
+#line 410 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = monitor;
+#line 410 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8__target = monitor_target;
+#line 410 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = DATA_COLLECTION_CLASS (view_collection_parent_class)->add_many (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), _tmp7_, _tmp8_, _tmp8__target);
+#line 410 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return_list = _tmp9_;
+#line 412 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_filter_altered_items (self, G_TYPE_CHECK_INSTANCE_CAST (return_list, GEE_TYPE_COLLECTION, GeeCollection));
+#line 414 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = return_list;
+#line 414 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 2535 "ViewCollection.c"
+}
+
+
+static void view_collection_on_sources_removed (ViewCollection* self, GeeIterable* removed) {
+ Marker* marker = NULL;
+ gboolean _tmp14_ = FALSE;
+ Marker* _tmp15_ = NULL;
+#line 417 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 417 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (GEE_IS_ITERABLE (removed));
+#line 419 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ marker = NULL;
+#line 2549 "ViewCollection.c"
+ {
+ GeeIterator* _source_it = NULL;
+ GeeIterable* _tmp0_ = NULL;
+ GeeIterator* _tmp1_ = NULL;
+#line 420 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = removed;
+#line 420 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = gee_iterable_iterator (_tmp0_);
+#line 420 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _source_it = _tmp1_;
+#line 420 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ while (TRUE) {
+#line 2562 "ViewCollection.c"
+ GeeIterator* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+ DataSource* source = NULL;
+ GeeIterator* _tmp4_ = NULL;
+ gpointer _tmp5_ = NULL;
+ DataView* view = NULL;
+ GeeHashMap* _tmp6_ = NULL;
+ DataSource* _tmp7_ = NULL;
+ gpointer _tmp8_ = NULL;
+ DataView* _tmp9_ = NULL;
+#line 420 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = _source_it;
+#line 420 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = gee_iterator_next (_tmp2_);
+#line 420 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp3_) {
+#line 420 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 2581 "ViewCollection.c"
+ }
+#line 420 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = _source_it;
+#line 420 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = gee_iterator_get (_tmp4_);
+#line 420 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ source = (DataSource*) _tmp5_;
+#line 421 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = self->priv->source_map;
+#line 421 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = source;
+#line 421 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = gee_abstract_map_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp7_);
+#line 421 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view = (DataView*) _tmp8_;
+#line 424 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = view;
+#line 424 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp9_ != NULL) {
+#line 2601 "ViewCollection.c"
+ Marker* _tmp10_ = NULL;
+ Marker* _tmp12_ = NULL;
+ DataView* _tmp13_ = NULL;
+#line 425 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp10_ = marker;
+#line 425 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp10_ == NULL) {
+#line 2609 "ViewCollection.c"
+ Marker* _tmp11_ = NULL;
+#line 426 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp11_ = data_collection_start_marking (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 426 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (marker);
+#line 426 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ marker = _tmp11_;
+#line 2617 "ViewCollection.c"
+ }
+#line 428 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp12_ = marker;
+#line 428 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp13_ = view;
+#line 428 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ marker_mark (_tmp12_, G_TYPE_CHECK_INSTANCE_CAST (_tmp13_, TYPE_DATA_OBJECT, DataObject));
+#line 2625 "ViewCollection.c"
+ }
+#line 420 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (view);
+#line 420 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (source);
+#line 2631 "ViewCollection.c"
+ }
+#line 420 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_source_it);
+#line 2635 "ViewCollection.c"
+ }
+#line 432 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp15_ = marker;
+#line 432 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp15_ != NULL) {
+#line 2641 "ViewCollection.c"
+ Marker* _tmp16_ = NULL;
+ gint _tmp17_ = 0;
+#line 432 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp16_ = marker;
+#line 432 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp17_ = marker_get_count (_tmp16_);
+#line 432 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp14_ = _tmp17_ != 0;
+#line 2650 "ViewCollection.c"
+ } else {
+#line 432 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp14_ = FALSE;
+#line 2654 "ViewCollection.c"
+ }
+#line 432 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp14_) {
+#line 2658 "ViewCollection.c"
+ Marker* _tmp18_ = NULL;
+#line 433 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp18_ = marker;
+#line 433 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ data_collection_remove_marked (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), _tmp18_);
+#line 2664 "ViewCollection.c"
+ }
+#line 417 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (marker);
+#line 2668 "ViewCollection.c"
+}
+
+
+static void view_collection_on_sources_altered (ViewCollection* self, DataCollection* collection, GeeMap* items) {
+ GeeArrayList* to_add = NULL;
+ GeeArrayList* to_remove = NULL;
+ gboolean ordering_changed = FALSE;
+ GeeArrayList* _tmp82_ = NULL;
+ GeeArrayList* _tmp86_ = NULL;
+ gboolean _tmp90_ = FALSE;
+#line 436 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 436 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_DATA_COLLECTION (collection));
+#line 436 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (GEE_IS_MAP (items));
+#line 439 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ to_add = NULL;
+#line 440 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ to_remove = NULL;
+#line 441 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ordering_changed = FALSE;
+#line 2691 "ViewCollection.c"
+ {
+ GeeIterator* _object_it = NULL;
+ GeeMap* _tmp0_ = NULL;
+ GeeSet* _tmp1_ = NULL;
+ GeeSet* _tmp2_ = NULL;
+ GeeSet* _tmp3_ = NULL;
+ GeeIterator* _tmp4_ = NULL;
+ GeeIterator* _tmp5_ = NULL;
+#line 442 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = items;
+#line 442 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = gee_map_get_keys (_tmp0_);
+#line 442 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = _tmp1_;
+#line 442 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = _tmp2_;
+#line 442 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 442 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = _tmp4_;
+#line 442 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp3_);
+#line 442 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _object_it = _tmp5_;
+#line 442 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ while (TRUE) {
+#line 2718 "ViewCollection.c"
+ GeeIterator* _tmp6_ = NULL;
+ gboolean _tmp7_ = FALSE;
+ DataObject* object = NULL;
+ GeeIterator* _tmp8_ = NULL;
+ gpointer _tmp9_ = NULL;
+ Alteration* alteration = NULL;
+ GeeMap* _tmp10_ = NULL;
+ DataObject* _tmp11_ = NULL;
+ gpointer _tmp12_ = NULL;
+ DataSource* source = NULL;
+ DataObject* _tmp13_ = NULL;
+ DataSource* _tmp14_ = NULL;
+ ViewCollectionMonitorImpl* monitor = NULL;
+ gboolean ignored = FALSE;
+ gboolean _tmp38_ = FALSE;
+ gboolean _tmp40_ = FALSE;
+ ViewCollectionMonitorImpl* _tmp41_ = NULL;
+#line 442 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = _object_it;
+#line 442 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = gee_iterator_next (_tmp6_);
+#line 442 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp7_) {
+#line 442 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 2744 "ViewCollection.c"
+ }
+#line 442 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = _object_it;
+#line 442 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = gee_iterator_get (_tmp8_);
+#line 442 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ object = (DataObject*) _tmp9_;
+#line 443 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp10_ = items;
+#line 443 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp11_ = object;
+#line 443 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp12_ = gee_map_get (_tmp10_, _tmp11_);
+#line 443 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ alteration = (Alteration*) _tmp12_;
+#line 444 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp13_ = object;
+#line 444 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp14_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp13_, TYPE_DATA_SOURCE, DataSource));
+#line 444 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ source = _tmp14_;
+#line 446 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ monitor = NULL;
+#line 447 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ignored = TRUE;
+#line 2770 "ViewCollection.c"
+ {
+ GeeIterator* _monitor_impl_it = NULL;
+ GeeHashMultiMap* _tmp15_ = NULL;
+ DataCollection* _tmp16_ = NULL;
+ GeeCollection* _tmp17_ = NULL;
+ GeeCollection* _tmp18_ = NULL;
+ GeeIterator* _tmp19_ = NULL;
+ GeeIterator* _tmp20_ = NULL;
+#line 448 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp15_ = self->priv->monitors;
+#line 448 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp16_ = collection;
+#line 448 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp17_ = gee_multi_map_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp15_, GEE_TYPE_MULTI_MAP, GeeMultiMap), G_TYPE_CHECK_INSTANCE_CAST (_tmp16_, TYPE_SOURCE_COLLECTION, SourceCollection));
+#line 448 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp18_ = _tmp17_;
+#line 448 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp19_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp18_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 448 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp20_ = _tmp19_;
+#line 448 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp18_);
+#line 448 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _monitor_impl_it = _tmp20_;
+#line 448 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ while (TRUE) {
+#line 2797 "ViewCollection.c"
+ GeeIterator* _tmp21_ = NULL;
+ gboolean _tmp22_ = FALSE;
+ ViewCollectionMonitorImpl* monitor_impl = NULL;
+ GeeIterator* _tmp23_ = NULL;
+ gpointer _tmp24_ = NULL;
+ gboolean _tmp25_ = FALSE;
+ ViewCollectionMonitorImpl* _tmp26_ = NULL;
+ Alteration* _tmp27_ = NULL;
+ ViewCollectionMonitorImpl* _tmp32_ = NULL;
+ ViewManager* _tmp33_ = NULL;
+ DataSource* _tmp34_ = NULL;
+ gboolean _tmp35_ = FALSE;
+#line 448 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp21_ = _monitor_impl_it;
+#line 448 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp22_ = gee_iterator_next (_tmp21_);
+#line 448 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp22_) {
+#line 448 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 2818 "ViewCollection.c"
+ }
+#line 448 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp23_ = _monitor_impl_it;
+#line 448 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp24_ = gee_iterator_get (_tmp23_);
+#line 448 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ monitor_impl = (ViewCollectionMonitorImpl*) _tmp24_;
+#line 449 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp26_ = monitor_impl;
+#line 449 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp27_ = _tmp26_->prereq;
+#line 449 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp27_ != NULL) {
+#line 2832 "ViewCollection.c"
+ Alteration* _tmp28_ = NULL;
+ ViewCollectionMonitorImpl* _tmp29_ = NULL;
+ Alteration* _tmp30_ = NULL;
+ gboolean _tmp31_ = FALSE;
+#line 449 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp28_ = alteration;
+#line 449 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp29_ = monitor_impl;
+#line 449 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp30_ = _tmp29_->prereq;
+#line 449 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp31_ = alteration_contains_any (_tmp28_, _tmp30_);
+#line 449 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp25_ = !_tmp31_;
+#line 2847 "ViewCollection.c"
+ } else {
+#line 449 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp25_ = FALSE;
+#line 2851 "ViewCollection.c"
+ }
+#line 449 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp25_) {
+#line 450 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _view_collection_monitor_unref0 (monitor_impl);
+#line 450 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ continue;
+#line 2859 "ViewCollection.c"
+ }
+#line 452 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ignored = FALSE;
+#line 454 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp32_ = monitor_impl;
+#line 454 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp33_ = _tmp32_->manager;
+#line 454 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp34_ = source;
+#line 454 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp35_ = view_manager_include_in_view (_tmp33_, _tmp34_);
+#line 454 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp35_) {
+#line 2873 "ViewCollection.c"
+ ViewCollectionMonitorImpl* _tmp36_ = NULL;
+ ViewCollectionMonitorImpl* _tmp37_ = NULL;
+#line 455 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp36_ = monitor_impl;
+#line 455 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp37_ = _view_collection_monitor_ref0 (_tmp36_);
+#line 455 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _view_collection_monitor_unref0 (monitor);
+#line 455 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ monitor = _tmp37_;
+#line 457 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _view_collection_monitor_unref0 (monitor_impl);
+#line 457 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 2888 "ViewCollection.c"
+ }
+#line 448 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _view_collection_monitor_unref0 (monitor_impl);
+#line 2892 "ViewCollection.c"
+ }
+#line 448 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_monitor_impl_it);
+#line 2896 "ViewCollection.c"
+ }
+#line 461 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp38_ = ignored;
+#line 461 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp38_) {
+#line 2902 "ViewCollection.c"
+ ViewCollectionMonitorImpl* _tmp39_ = NULL;
+#line 462 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp39_ = monitor;
+#line 462 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _vala_assert (_tmp39_ == NULL, "monitor == null");
+#line 464 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _view_collection_monitor_unref0 (monitor);
+#line 464 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (source);
+#line 464 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _alteration_unref0 (alteration);
+#line 464 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (object);
+#line 464 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ continue;
+#line 2918 "ViewCollection.c"
+ }
+#line 467 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp41_ = monitor;
+#line 467 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp41_ != NULL) {
+#line 2924 "ViewCollection.c"
+ DataSource* _tmp42_ = NULL;
+ gboolean _tmp43_ = FALSE;
+#line 467 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp42_ = source;
+#line 467 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp43_ = view_collection_has_view_for_source (self, _tmp42_);
+#line 467 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp40_ = !_tmp43_;
+#line 2933 "ViewCollection.c"
+ } else {
+#line 467 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp40_ = FALSE;
+#line 2937 "ViewCollection.c"
+ }
+#line 467 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp40_) {
+#line 2941 "ViewCollection.c"
+ GeeArrayList* _tmp44_ = NULL;
+ GeeArrayList* _tmp46_ = NULL;
+ ViewCollectionMonitorImpl* _tmp47_ = NULL;
+ ViewManager* _tmp48_ = NULL;
+ DataSource* _tmp49_ = NULL;
+ DataView* _tmp50_ = NULL;
+ DataView* _tmp51_ = NULL;
+#line 468 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp44_ = to_add;
+#line 468 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp44_ == NULL) {
+#line 2953 "ViewCollection.c"
+ GeeArrayList* _tmp45_ = NULL;
+#line 469 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp45_ = gee_array_list_new (TYPE_DATA_VIEW, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 469 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (to_add);
+#line 469 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ to_add = _tmp45_;
+#line 2961 "ViewCollection.c"
+ }
+#line 471 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp46_ = to_add;
+#line 471 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp47_ = monitor;
+#line 471 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp48_ = _tmp47_->manager;
+#line 471 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp49_ = source;
+#line 471 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp50_ = view_manager_create_view (_tmp48_, _tmp49_);
+#line 471 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp51_ = _tmp50_;
+#line 471 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp46_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp51_);
+#line 471 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp51_);
+#line 2979 "ViewCollection.c"
+ } else {
+ gboolean _tmp52_ = FALSE;
+ ViewCollectionMonitorImpl* _tmp53_ = NULL;
+#line 472 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp53_ = monitor;
+#line 472 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp53_ == NULL) {
+#line 2987 "ViewCollection.c"
+ DataSource* _tmp54_ = NULL;
+ gboolean _tmp55_ = FALSE;
+#line 472 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp54_ = source;
+#line 472 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp55_ = view_collection_has_view_for_source (self, _tmp54_);
+#line 472 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp52_ = _tmp55_;
+#line 2996 "ViewCollection.c"
+ } else {
+#line 472 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp52_ = FALSE;
+#line 3000 "ViewCollection.c"
+ }
+#line 472 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp52_) {
+#line 3004 "ViewCollection.c"
+ GeeArrayList* _tmp56_ = NULL;
+ GeeArrayList* _tmp58_ = NULL;
+ DataSource* _tmp59_ = NULL;
+ DataView* _tmp60_ = NULL;
+ DataView* _tmp61_ = NULL;
+#line 473 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp56_ = to_remove;
+#line 473 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp56_ == NULL) {
+#line 3014 "ViewCollection.c"
+ GeeArrayList* _tmp57_ = NULL;
+#line 474 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp57_ = gee_array_list_new (TYPE_DATA_VIEW, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 474 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (to_remove);
+#line 474 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ to_remove = _tmp57_;
+#line 3022 "ViewCollection.c"
+ }
+#line 476 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp58_ = to_remove;
+#line 476 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp59_ = source;
+#line 476 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp60_ = view_collection_get_view_for_source (self, _tmp59_);
+#line 476 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp61_ = _tmp60_;
+#line 476 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp58_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp61_);
+#line 476 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp61_);
+#line 3036 "ViewCollection.c"
+ } else {
+ gboolean _tmp62_ = FALSE;
+ ViewCollectionMonitorImpl* _tmp63_ = NULL;
+#line 477 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp63_ = monitor;
+#line 477 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp63_ != NULL) {
+#line 3044 "ViewCollection.c"
+ DataSource* _tmp64_ = NULL;
+ gboolean _tmp65_ = FALSE;
+#line 477 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp64_ = source;
+#line 477 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp65_ = view_collection_has_view_for_source (self, _tmp64_);
+#line 477 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp62_ = _tmp65_;
+#line 3053 "ViewCollection.c"
+ } else {
+#line 477 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp62_ = FALSE;
+#line 3057 "ViewCollection.c"
+ }
+#line 477 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp62_) {
+#line 3061 "ViewCollection.c"
+ DataView* view = NULL;
+ DataSource* _tmp66_ = NULL;
+ DataView* _tmp67_ = NULL;
+ DataSet* _tmp68_ = NULL;
+ DataView* _tmp69_ = NULL;
+ gboolean _tmp70_ = FALSE;
+ gboolean _tmp74_ = FALSE;
+ DataSet* _tmp75_ = NULL;
+#line 478 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp66_ = source;
+#line 478 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp67_ = view_collection_get_view_for_source (self, _tmp66_);
+#line 478 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view = _tmp67_;
+#line 480 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp68_ = self->priv->selected;
+#line 480 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp69_ = view;
+#line 480 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp70_ = data_set_contains (_tmp68_, G_TYPE_CHECK_INSTANCE_CAST (_tmp69_, TYPE_DATA_OBJECT, DataObject));
+#line 480 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp70_) {
+#line 3084 "ViewCollection.c"
+ DataSet* _tmp71_ = NULL;
+ DataView* _tmp72_ = NULL;
+ Alteration* _tmp73_ = NULL;
+#line 481 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp71_ = self->priv->selected;
+#line 481 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp72_ = view;
+#line 481 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp73_ = alteration;
+#line 481 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ data_set_resort_object (_tmp71_, G_TYPE_CHECK_INSTANCE_CAST (_tmp72_, TYPE_DATA_OBJECT, DataObject), _tmp73_);
+#line 3096 "ViewCollection.c"
+ }
+#line 483 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp75_ = self->priv->visible;
+#line 483 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp75_ != NULL) {
+#line 3102 "ViewCollection.c"
+ DataView* _tmp76_ = NULL;
+ gboolean _tmp77_ = FALSE;
+#line 483 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp76_ = view;
+#line 483 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp77_ = view_collection_is_visible (self, _tmp76_);
+#line 483 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp74_ = _tmp77_;
+#line 3111 "ViewCollection.c"
+ } else {
+#line 483 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp74_ = FALSE;
+#line 3115 "ViewCollection.c"
+ }
+#line 483 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp74_) {
+#line 3119 "ViewCollection.c"
+ DataSet* _tmp78_ = NULL;
+ DataView* _tmp79_ = NULL;
+ Alteration* _tmp80_ = NULL;
+ gboolean _tmp81_ = FALSE;
+#line 484 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp78_ = self->priv->visible;
+#line 484 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp79_ = view;
+#line 484 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp80_ = alteration;
+#line 484 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp81_ = data_set_resort_object (_tmp78_, G_TYPE_CHECK_INSTANCE_CAST (_tmp79_, TYPE_DATA_OBJECT, DataObject), _tmp80_);
+#line 484 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp81_) {
+#line 485 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ordering_changed = TRUE;
+#line 3136 "ViewCollection.c"
+ }
+ }
+#line 477 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (view);
+#line 3141 "ViewCollection.c"
+ }
+ }
+ }
+#line 442 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _view_collection_monitor_unref0 (monitor);
+#line 442 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (source);
+#line 442 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _alteration_unref0 (alteration);
+#line 442 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (object);
+#line 3153 "ViewCollection.c"
+ }
+#line 442 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_object_it);
+#line 3157 "ViewCollection.c"
+ }
+#line 490 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp82_ = to_add;
+#line 490 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp82_ != NULL) {
+#line 3163 "ViewCollection.c"
+ GeeArrayList* _tmp83_ = NULL;
+ GeeCollection* _tmp84_ = NULL;
+ GeeCollection* _tmp85_ = NULL;
+#line 491 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp83_ = to_add;
+#line 491 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp84_ = data_collection_add_many (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp83_, GEE_TYPE_COLLECTION, GeeCollection), NULL, NULL);
+#line 491 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp85_ = _tmp84_;
+#line 491 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp85_);
+#line 3175 "ViewCollection.c"
+ }
+#line 493 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp86_ = to_remove;
+#line 493 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp86_ != NULL) {
+#line 3181 "ViewCollection.c"
+ GeeArrayList* _tmp87_ = NULL;
+ Marker* _tmp88_ = NULL;
+ Marker* _tmp89_ = NULL;
+#line 494 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp87_ = to_remove;
+#line 494 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp88_ = data_collection_mark_many (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp87_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 494 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp89_ = _tmp88_;
+#line 494 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ data_collection_remove_marked (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), _tmp89_);
+#line 494 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp89_);
+#line 3195 "ViewCollection.c"
+ }
+#line 496 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp90_ = ordering_changed;
+#line 496 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp90_) {
+#line 497 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ data_collection_notify_ordering_changed (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 3203 "ViewCollection.c"
+ }
+#line 436 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (to_remove);
+#line 436 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (to_add);
+#line 3209 "ViewCollection.c"
+}
+
+
+static void view_collection_on_mirror_contents_added (ViewCollection* self, GeeIterable* added) {
+ GeeArrayList* to_add = NULL;
+ GeeArrayList* _tmp0_ = NULL;
+ GeeArrayList* _tmp19_ = NULL;
+ gint _tmp20_ = 0;
+ gint _tmp21_ = 0;
+#line 500 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 500 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (GEE_IS_ITERABLE (added));
+#line 501 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = gee_array_list_new (TYPE_DATA_VIEW, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 501 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ to_add = _tmp0_;
+#line 3227 "ViewCollection.c"
+ {
+ GeeIterator* _object_it = NULL;
+ GeeIterable* _tmp1_ = NULL;
+ GeeIterator* _tmp2_ = NULL;
+#line 502 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = added;
+#line 502 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = gee_iterable_iterator (_tmp1_);
+#line 502 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _object_it = _tmp2_;
+#line 502 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ while (TRUE) {
+#line 3240 "ViewCollection.c"
+ GeeIterator* _tmp3_ = NULL;
+ gboolean _tmp4_ = FALSE;
+ DataObject* object = NULL;
+ GeeIterator* _tmp5_ = NULL;
+ gpointer _tmp6_ = NULL;
+ DataSource* source = NULL;
+ DataObject* _tmp7_ = NULL;
+ DataSource* _tmp8_ = NULL;
+ gboolean _tmp9_ = FALSE;
+ CreateViewPredicate _tmp10_ = NULL;
+ void* _tmp10__target = NULL;
+#line 502 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = _object_it;
+#line 502 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = gee_iterator_next (_tmp3_);
+#line 502 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp4_) {
+#line 502 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 3260 "ViewCollection.c"
+ }
+#line 502 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = _object_it;
+#line 502 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = gee_iterator_get (_tmp5_);
+#line 502 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ object = (DataObject*) _tmp6_;
+#line 503 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = object;
+#line 503 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = data_view_get_source (G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, TYPE_DATA_VIEW, DataView));
+#line 503 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ source = _tmp8_;
+#line 505 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp10_ = self->priv->should_mirror;
+#line 505 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp10__target = self->priv->should_mirror_target;
+#line 505 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp10_ == NULL) {
+#line 505 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = TRUE;
+#line 3282 "ViewCollection.c"
+ } else {
+ CreateViewPredicate _tmp11_ = NULL;
+ void* _tmp11__target = NULL;
+ DataSource* _tmp12_ = NULL;
+ gboolean _tmp13_ = FALSE;
+#line 505 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp11_ = self->priv->should_mirror;
+#line 505 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp11__target = self->priv->should_mirror_target;
+#line 505 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp12_ = source;
+#line 505 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp13_ = _tmp11_ (_tmp12_, _tmp11__target);
+#line 505 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = _tmp13_;
+#line 3298 "ViewCollection.c"
+ }
+#line 505 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp9_) {
+#line 3302 "ViewCollection.c"
+ GeeArrayList* _tmp14_ = NULL;
+ CreateView _tmp15_ = NULL;
+ void* _tmp15__target = NULL;
+ DataSource* _tmp16_ = NULL;
+ DataView* _tmp17_ = NULL;
+ DataView* _tmp18_ = NULL;
+#line 506 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp14_ = to_add;
+#line 506 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp15_ = self->priv->mirroring_ctor;
+#line 506 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp15__target = self->priv->mirroring_ctor_target;
+#line 506 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp16_ = source;
+#line 506 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp17_ = _tmp15_ (_tmp16_, _tmp15__target);
+#line 506 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp18_ = _tmp17_;
+#line 506 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp18_);
+#line 506 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp18_);
+#line 3325 "ViewCollection.c"
+ }
+#line 502 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (source);
+#line 502 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (object);
+#line 3331 "ViewCollection.c"
+ }
+#line 502 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_object_it);
+#line 3335 "ViewCollection.c"
+ }
+#line 509 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp19_ = to_add;
+#line 509 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp20_ = gee_abstract_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp19_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 509 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp21_ = _tmp20_;
+#line 509 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp21_ > 0) {
+#line 3345 "ViewCollection.c"
+ GeeArrayList* _tmp22_ = NULL;
+ GeeCollection* _tmp23_ = NULL;
+ GeeCollection* _tmp24_ = NULL;
+#line 510 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp22_ = to_add;
+#line 510 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp23_ = data_collection_add_many (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp22_, GEE_TYPE_COLLECTION, GeeCollection), NULL, NULL);
+#line 510 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp24_ = _tmp23_;
+#line 510 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp24_);
+#line 3357 "ViewCollection.c"
+ }
+#line 500 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (to_add);
+#line 3361 "ViewCollection.c"
+}
+
+
+static void view_collection_on_mirror_contents_removed (ViewCollection* self, GeeIterable* removed) {
+ Marker* marker = NULL;
+ Marker* _tmp0_ = NULL;
+ Marker* _tmp17_ = NULL;
+#line 513 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 513 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (GEE_IS_ITERABLE (removed));
+#line 514 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = data_collection_start_marking (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 514 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ marker = _tmp0_;
+#line 3377 "ViewCollection.c"
+ {
+ GeeIterator* _object_it = NULL;
+ GeeIterable* _tmp1_ = NULL;
+ GeeIterator* _tmp2_ = NULL;
+#line 515 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = removed;
+#line 515 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = gee_iterable_iterator (_tmp1_);
+#line 515 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _object_it = _tmp2_;
+#line 515 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ while (TRUE) {
+#line 3390 "ViewCollection.c"
+ GeeIterator* _tmp3_ = NULL;
+ gboolean _tmp4_ = FALSE;
+ DataObject* object = NULL;
+ GeeIterator* _tmp5_ = NULL;
+ gpointer _tmp6_ = NULL;
+ DataView* view = NULL;
+ DataObject* _tmp7_ = NULL;
+ DataView* _tmp8_ = NULL;
+ DataView* our_view = NULL;
+ DataView* _tmp9_ = NULL;
+ DataSource* _tmp10_ = NULL;
+ DataSource* _tmp11_ = NULL;
+ DataView* _tmp12_ = NULL;
+ DataView* _tmp13_ = NULL;
+ DataView* _tmp14_ = NULL;
+ Marker* _tmp15_ = NULL;
+ DataView* _tmp16_ = NULL;
+#line 515 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = _object_it;
+#line 515 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = gee_iterator_next (_tmp3_);
+#line 515 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp4_) {
+#line 515 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 3416 "ViewCollection.c"
+ }
+#line 515 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = _object_it;
+#line 515 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = gee_iterator_get (_tmp5_);
+#line 515 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ object = (DataObject*) _tmp6_;
+#line 516 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = object;
+#line 516 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, TYPE_DATA_VIEW, DataView));
+#line 516 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view = _tmp8_;
+#line 518 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = view;
+#line 518 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp10_ = data_view_get_source (_tmp9_);
+#line 518 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp11_ = _tmp10_;
+#line 518 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp12_ = view_collection_get_view_for_source (self, _tmp11_);
+#line 518 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp13_ = _tmp12_;
+#line 518 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp11_);
+#line 518 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ our_view = _tmp13_;
+#line 519 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp14_ = our_view;
+#line 519 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _vala_assert (_tmp14_ != NULL, "our_view != null");
+#line 521 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp15_ = marker;
+#line 521 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp16_ = our_view;
+#line 521 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ marker_mark (_tmp15_, G_TYPE_CHECK_INSTANCE_CAST (_tmp16_, TYPE_DATA_OBJECT, DataObject));
+#line 515 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (our_view);
+#line 515 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (view);
+#line 515 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (object);
+#line 3460 "ViewCollection.c"
+ }
+#line 515 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_object_it);
+#line 3464 "ViewCollection.c"
+ }
+#line 524 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp17_ = marker;
+#line 524 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ data_collection_remove_marked (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), _tmp17_);
+#line 513 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (marker);
+#line 3472 "ViewCollection.c"
+}
+
+
+static void view_collection_real_notify_items_added (DataCollection* base, GeeIterable* added) {
+ ViewCollection * self;
+ GeeArrayList* added_visible = NULL;
+ GeeArrayList* added_selected = NULL;
+ GeeArrayList* _tmp30_ = NULL;
+ GeeArrayList* _tmp34_ = NULL;
+ GeeIterable* _tmp37_ = NULL;
+#line 528 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_VIEW_COLLECTION, ViewCollection);
+#line 528 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (GEE_IS_ITERABLE (added));
+#line 529 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ added_visible = NULL;
+#line 530 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ added_selected = NULL;
+#line 3491 "ViewCollection.c"
+ {
+ GeeIterator* _object_it = NULL;
+ GeeIterable* _tmp0_ = NULL;
+ GeeIterator* _tmp1_ = NULL;
+#line 532 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = added;
+#line 532 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = gee_iterable_iterator (_tmp0_);
+#line 532 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _object_it = _tmp1_;
+#line 532 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ while (TRUE) {
+#line 3504 "ViewCollection.c"
+ GeeIterator* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+ DataObject* object = NULL;
+ GeeIterator* _tmp4_ = NULL;
+ gpointer _tmp5_ = NULL;
+ DataView* view = NULL;
+ DataObject* _tmp6_ = NULL;
+ DataView* _tmp7_ = NULL;
+ GeeHashMap* _tmp8_ = NULL;
+ DataView* _tmp9_ = NULL;
+ DataSource* _tmp10_ = NULL;
+ DataSource* _tmp11_ = NULL;
+ DataView* _tmp12_ = NULL;
+ gboolean _tmp13_ = FALSE;
+ DataView* _tmp14_ = NULL;
+ gboolean _tmp15_ = FALSE;
+ gboolean _tmp22_ = FALSE;
+ DataView* _tmp23_ = NULL;
+ gboolean _tmp24_ = FALSE;
+#line 532 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = _object_it;
+#line 532 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = gee_iterator_next (_tmp2_);
+#line 532 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp3_) {
+#line 532 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 3532 "ViewCollection.c"
+ }
+#line 532 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = _object_it;
+#line 532 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = gee_iterator_get (_tmp4_);
+#line 532 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ object = (DataObject*) _tmp5_;
+#line 533 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = object;
+#line 533 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, TYPE_DATA_VIEW, DataView));
+#line 533 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view = _tmp7_;
+#line 534 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = self->priv->source_map;
+#line 534 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = view;
+#line 534 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp10_ = data_view_get_source (_tmp9_);
+#line 534 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp11_ = _tmp10_;
+#line 534 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp12_ = view;
+#line 534 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_abstract_map_set (G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp11_, _tmp12_);
+#line 534 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp11_);
+#line 536 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp14_ = view;
+#line 536 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp15_ = data_view_is_selected (_tmp14_);
+#line 536 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp15_) {
+#line 3566 "ViewCollection.c"
+ DataView* _tmp16_ = NULL;
+ gboolean _tmp17_ = FALSE;
+#line 536 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp16_ = view;
+#line 536 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp17_ = data_view_is_visible (_tmp16_);
+#line 536 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp13_ = _tmp17_;
+#line 3575 "ViewCollection.c"
+ } else {
+#line 536 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp13_ = FALSE;
+#line 3579 "ViewCollection.c"
+ }
+#line 536 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp13_) {
+#line 3583 "ViewCollection.c"
+ GeeArrayList* _tmp18_ = NULL;
+ GeeArrayList* _tmp20_ = NULL;
+ DataView* _tmp21_ = NULL;
+#line 537 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp18_ = added_selected;
+#line 537 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp18_ == NULL) {
+#line 3591 "ViewCollection.c"
+ GeeArrayList* _tmp19_ = NULL;
+#line 538 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp19_ = gee_array_list_new (TYPE_DATA_VIEW, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 538 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (added_selected);
+#line 538 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ added_selected = _tmp19_;
+#line 3599 "ViewCollection.c"
+ }
+#line 540 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp20_ = added_selected;
+#line 540 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp21_ = view;
+#line 540 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp20_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp21_);
+#line 3607 "ViewCollection.c"
+ }
+#line 544 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp23_ = view;
+#line 544 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp24_ = data_view_is_visible (_tmp23_);
+#line 544 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp24_) {
+#line 3615 "ViewCollection.c"
+ DataSet* _tmp25_ = NULL;
+#line 544 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp25_ = self->priv->visible;
+#line 544 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp22_ = _tmp25_ != NULL;
+#line 3621 "ViewCollection.c"
+ } else {
+#line 544 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp22_ = FALSE;
+#line 3625 "ViewCollection.c"
+ }
+#line 544 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp22_) {
+#line 3629 "ViewCollection.c"
+ GeeArrayList* _tmp26_ = NULL;
+ GeeArrayList* _tmp28_ = NULL;
+ DataView* _tmp29_ = NULL;
+#line 545 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp26_ = added_visible;
+#line 545 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp26_ == NULL) {
+#line 3637 "ViewCollection.c"
+ GeeArrayList* _tmp27_ = NULL;
+#line 546 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp27_ = gee_array_list_new (TYPE_DATA_VIEW, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 546 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (added_visible);
+#line 546 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ added_visible = _tmp27_;
+#line 3645 "ViewCollection.c"
+ }
+#line 548 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp28_ = added_visible;
+#line 548 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp29_ = view;
+#line 548 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp28_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp29_);
+#line 3653 "ViewCollection.c"
+ }
+#line 532 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (view);
+#line 532 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (object);
+#line 3659 "ViewCollection.c"
+ }
+#line 532 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_object_it);
+#line 3663 "ViewCollection.c"
+ }
+#line 552 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp30_ = added_visible;
+#line 552 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp30_ != NULL) {
+#line 3669 "ViewCollection.c"
+ gboolean is_added = FALSE;
+ GeeArrayList* _tmp31_ = NULL;
+ gboolean _tmp32_ = FALSE;
+ gboolean _tmp33_ = FALSE;
+#line 553 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp31_ = added_visible;
+#line 553 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp32_ = view_collection_add_many_visible (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp31_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 553 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ is_added = _tmp32_;
+#line 554 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp33_ = is_added;
+#line 554 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _vala_assert (_tmp33_, "is_added");
+#line 3684 "ViewCollection.c"
+ }
+#line 557 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp34_ = added_selected;
+#line 557 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp34_ != NULL) {
+#line 3690 "ViewCollection.c"
+ GeeArrayList* _tmp35_ = NULL;
+ GeeArrayList* _tmp36_ = NULL;
+#line 558 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp35_ = added_selected;
+#line 558 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_add_many_selected (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp35_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 559 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp36_ = added_selected;
+#line 559 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_notify_items_selected_unselected (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp36_, GEE_TYPE_COLLECTION, GeeCollection), NULL);
+#line 3701 "ViewCollection.c"
+ }
+#line 562 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp37_ = added;
+#line 562 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ DATA_COLLECTION_CLASS (view_collection_parent_class)->notify_items_added (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), _tmp37_);
+#line 528 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (added_selected);
+#line 528 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (added_visible);
+#line 3711 "ViewCollection.c"
+}
+
+
+static void view_collection_real_notify_items_removed (DataCollection* base, GeeIterable* removed) {
+ ViewCollection * self;
+ GeeArrayList* selected_removed = NULL;
+ GeeArrayList* _tmp42_ = NULL;
+ GeeIterable* _tmp44_ = NULL;
+#line 566 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_VIEW_COLLECTION, ViewCollection);
+#line 566 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (GEE_IS_ITERABLE (removed));
+#line 567 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ selected_removed = NULL;
+#line 3726 "ViewCollection.c"
+ {
+ GeeIterator* _object_it = NULL;
+ GeeIterable* _tmp0_ = NULL;
+ GeeIterator* _tmp1_ = NULL;
+#line 568 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = removed;
+#line 568 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = gee_iterable_iterator (_tmp0_);
+#line 568 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _object_it = _tmp1_;
+#line 568 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ while (TRUE) {
+#line 3739 "ViewCollection.c"
+ GeeIterator* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+ DataObject* object = NULL;
+ GeeIterator* _tmp4_ = NULL;
+ gpointer _tmp5_ = NULL;
+ DataView* view = NULL;
+ DataObject* _tmp6_ = NULL;
+ DataView* _tmp7_ = NULL;
+ GeeHashMap* _tmp8_ = NULL;
+ DataView* _tmp9_ = NULL;
+ DataSource* _tmp10_ = NULL;
+ DataSource* _tmp11_ = NULL;
+ gboolean _tmp12_ = FALSE;
+ gboolean _tmp13_ = FALSE;
+#line 568 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = _object_it;
+#line 568 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = gee_iterator_next (_tmp2_);
+#line 568 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp3_) {
+#line 568 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 3762 "ViewCollection.c"
+ }
+#line 568 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = _object_it;
+#line 568 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = gee_iterator_get (_tmp4_);
+#line 568 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ object = (DataObject*) _tmp5_;
+#line 569 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = object;
+#line 569 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, TYPE_DATA_VIEW, DataView));
+#line 569 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view = _tmp7_;
+#line 575 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = self->priv->source_map;
+#line 575 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = view;
+#line 575 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp10_ = data_view_get_source (_tmp9_);
+#line 575 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp11_ = _tmp10_;
+#line 575 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp12_ = gee_abstract_map_has_key (G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp11_);
+#line 575 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp13_ = _tmp12_;
+#line 575 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp11_);
+#line 575 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp13_) {
+#line 3792 "ViewCollection.c"
+ gboolean is_removed = FALSE;
+ GeeHashMap* _tmp14_ = NULL;
+ DataView* _tmp15_ = NULL;
+ DataSource* _tmp16_ = NULL;
+ DataSource* _tmp17_ = NULL;
+ gboolean _tmp18_ = FALSE;
+ gboolean _tmp19_ = FALSE;
+ gboolean _tmp20_ = FALSE;
+ DataView* _tmp21_ = NULL;
+ gboolean _tmp22_ = FALSE;
+ gboolean _tmp34_ = FALSE;
+ DataView* _tmp35_ = NULL;
+ gboolean _tmp36_ = FALSE;
+#line 576 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp14_ = self->priv->source_map;
+#line 576 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp15_ = view;
+#line 576 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp16_ = data_view_get_source (_tmp15_);
+#line 576 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp17_ = _tmp16_;
+#line 576 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp18_ = gee_abstract_map_unset (G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp17_, NULL);
+#line 576 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp19_ = _tmp18_;
+#line 576 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp17_);
+#line 576 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ is_removed = _tmp19_;
+#line 577 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp20_ = is_removed;
+#line 577 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _vala_assert (_tmp20_, "is_removed");
+#line 579 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp21_ = view;
+#line 579 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp22_ = data_view_is_selected (_tmp21_);
+#line 579 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp22_) {
+#line 3832 "ViewCollection.c"
+ DataSet* _tmp23_ = NULL;
+ DataView* _tmp24_ = NULL;
+ gboolean _tmp25_ = FALSE;
+ DataView* _tmp26_ = NULL;
+ gboolean _tmp27_ = FALSE;
+ DataView* _tmp28_ = NULL;
+ gboolean _tmp29_ = FALSE;
+#line 581 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp23_ = self->priv->selected;
+#line 581 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp24_ = view;
+#line 581 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp25_ = data_set_contains (_tmp23_, G_TYPE_CHECK_INSTANCE_CAST (_tmp24_, TYPE_DATA_OBJECT, DataObject));
+#line 581 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp26_ = view;
+#line 581 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp27_ = data_view_is_visible (_tmp26_);
+#line 581 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _vala_assert (_tmp25_ == _tmp27_, "selected.contains(view) == view.is_visible()");
+#line 583 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp28_ = view;
+#line 583 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp29_ = data_view_is_visible (_tmp28_);
+#line 583 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp29_) {
+#line 3858 "ViewCollection.c"
+ GeeArrayList* _tmp30_ = NULL;
+ GeeArrayList* _tmp32_ = NULL;
+ DataView* _tmp33_ = NULL;
+#line 584 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp30_ = selected_removed;
+#line 584 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp30_ == NULL) {
+#line 3866 "ViewCollection.c"
+ GeeArrayList* _tmp31_ = NULL;
+#line 585 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp31_ = gee_array_list_new (TYPE_DATA_VIEW, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 585 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (selected_removed);
+#line 585 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ selected_removed = _tmp31_;
+#line 3874 "ViewCollection.c"
+ }
+#line 587 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp32_ = selected_removed;
+#line 587 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp33_ = view;
+#line 587 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp32_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp33_);
+#line 3882 "ViewCollection.c"
+ }
+ }
+#line 591 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp35_ = view;
+#line 591 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp36_ = data_view_is_visible (_tmp35_);
+#line 591 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp36_) {
+#line 3891 "ViewCollection.c"
+ DataSet* _tmp37_ = NULL;
+#line 591 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp37_ = self->priv->visible;
+#line 591 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp34_ = _tmp37_ != NULL;
+#line 3897 "ViewCollection.c"
+ } else {
+#line 591 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp34_ = FALSE;
+#line 3901 "ViewCollection.c"
+ }
+#line 591 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp34_) {
+#line 3905 "ViewCollection.c"
+ DataSet* _tmp38_ = NULL;
+ DataView* _tmp39_ = NULL;
+ gboolean _tmp40_ = FALSE;
+ gboolean _tmp41_ = FALSE;
+#line 592 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp38_ = self->priv->visible;
+#line 592 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp39_ = view;
+#line 592 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp40_ = data_set_remove (_tmp38_, G_TYPE_CHECK_INSTANCE_CAST (_tmp39_, TYPE_DATA_OBJECT, DataObject));
+#line 592 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ is_removed = _tmp40_;
+#line 593 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp41_ = is_removed;
+#line 593 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _vala_assert (_tmp41_, "is_removed");
+#line 3922 "ViewCollection.c"
+ }
+ }
+#line 568 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (view);
+#line 568 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (object);
+#line 3929 "ViewCollection.c"
+ }
+#line 568 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_object_it);
+#line 3933 "ViewCollection.c"
+ }
+#line 598 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp42_ = selected_removed;
+#line 598 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp42_ != NULL) {
+#line 3939 "ViewCollection.c"
+ GeeArrayList* _tmp43_ = NULL;
+#line 599 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp43_ = selected_removed;
+#line 599 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_remove_many_selected (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp43_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 604 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_notify_selection_group_altered (self);
+#line 3947 "ViewCollection.c"
+ }
+#line 607 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp44_ = removed;
+#line 607 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ DATA_COLLECTION_CLASS (view_collection_parent_class)->notify_items_removed (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), _tmp44_);
+#line 566 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (selected_removed);
+#line 3955 "ViewCollection.c"
+}
+
+
+static void view_collection_filter_altered_items (ViewCollection* self, GeeCollection* views) {
+ GeeArrayList* to_show = NULL;
+ GeeArrayList* to_hide = NULL;
+ GeeArrayList* _tmp20_ = NULL;
+ GeeArrayList* _tmp22_ = NULL;
+#line 610 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 610 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (views));
+#line 613 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ to_show = NULL;
+#line 614 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ to_hide = NULL;
+#line 3972 "ViewCollection.c"
+ {
+ GeeIterator* _view_it = NULL;
+ GeeCollection* _tmp0_ = NULL;
+ GeeIterator* _tmp1_ = NULL;
+#line 619 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = views;
+#line 619 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 619 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _view_it = _tmp1_;
+#line 619 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ while (TRUE) {
+#line 3985 "ViewCollection.c"
+ GeeIterator* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+ DataView* view = NULL;
+ GeeIterator* _tmp4_ = NULL;
+ gpointer _tmp5_ = NULL;
+ DataView* _tmp6_ = NULL;
+ gboolean _tmp7_ = FALSE;
+#line 619 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = _view_it;
+#line 619 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = gee_iterator_next (_tmp2_);
+#line 619 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp3_) {
+#line 619 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 4001 "ViewCollection.c"
+ }
+#line 619 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = _view_it;
+#line 619 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = gee_iterator_get (_tmp4_);
+#line 619 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view = (DataView*) _tmp5_;
+#line 620 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = view;
+#line 620 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = view_collection_is_in_filter (self, _tmp6_);
+#line 620 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp7_) {
+#line 4015 "ViewCollection.c"
+ DataView* _tmp8_ = NULL;
+ gboolean _tmp9_ = FALSE;
+#line 621 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = view;
+#line 621 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = data_view_is_visible (_tmp8_);
+#line 621 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp9_) {
+#line 4024 "ViewCollection.c"
+ GeeArrayList* _tmp10_ = NULL;
+ GeeArrayList* _tmp12_ = NULL;
+ DataView* _tmp13_ = NULL;
+#line 622 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp10_ = to_show;
+#line 622 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp10_ == NULL) {
+#line 4032 "ViewCollection.c"
+ GeeArrayList* _tmp11_ = NULL;
+#line 623 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp11_ = gee_array_list_new (TYPE_DATA_VIEW, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 623 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (to_show);
+#line 623 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ to_show = _tmp11_;
+#line 4040 "ViewCollection.c"
+ }
+#line 625 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp12_ = to_show;
+#line 625 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp13_ = view;
+#line 625 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp13_);
+#line 4048 "ViewCollection.c"
+ }
+ } else {
+ DataView* _tmp14_ = NULL;
+ gboolean _tmp15_ = FALSE;
+#line 628 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp14_ = view;
+#line 628 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp15_ = data_view_is_visible (_tmp14_);
+#line 628 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp15_) {
+#line 4059 "ViewCollection.c"
+ GeeArrayList* _tmp16_ = NULL;
+ GeeArrayList* _tmp18_ = NULL;
+ DataView* _tmp19_ = NULL;
+#line 629 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp16_ = to_hide;
+#line 629 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp16_ == NULL) {
+#line 4067 "ViewCollection.c"
+ GeeArrayList* _tmp17_ = NULL;
+#line 630 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp17_ = gee_array_list_new (TYPE_DATA_VIEW, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 630 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (to_hide);
+#line 630 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ to_hide = _tmp17_;
+#line 4075 "ViewCollection.c"
+ }
+#line 632 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp18_ = to_hide;
+#line 632 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp19_ = view;
+#line 632 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp18_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp19_);
+#line 4083 "ViewCollection.c"
+ }
+ }
+#line 619 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (view);
+#line 4088 "ViewCollection.c"
+ }
+#line 619 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_view_it);
+#line 4092 "ViewCollection.c"
+ }
+#line 641 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp20_ = to_show;
+#line 641 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp20_ != NULL) {
+#line 4098 "ViewCollection.c"
+ GeeArrayList* _tmp21_ = NULL;
+#line 642 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp21_ = to_show;
+#line 642 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_show_items (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp21_, GEE_TYPE_LIST, GeeList));
+#line 4104 "ViewCollection.c"
+ }
+#line 644 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp22_ = to_hide;
+#line 644 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp22_ != NULL) {
+#line 4110 "ViewCollection.c"
+ GeeArrayList* _tmp23_ = NULL;
+#line 645 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp23_ = to_hide;
+#line 645 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_hide_items (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp23_, GEE_TYPE_LIST, GeeList));
+#line 4116 "ViewCollection.c"
+ }
+#line 610 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (to_hide);
+#line 610 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (to_show);
+#line 4122 "ViewCollection.c"
+}
+
+
+static void view_collection_real_items_altered (DataCollection* base, GeeMap* map) {
+ ViewCollection * self;
+ GeeMap* _tmp0_ = NULL;
+ GeeSet* _tmp1_ = NULL;
+ GeeSet* _tmp2_ = NULL;
+ GeeSet* _tmp3_ = NULL;
+ GeeMap* _tmp4_ = NULL;
+#line 648 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_VIEW_COLLECTION, ViewCollection);
+#line 648 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (GEE_IS_MAP (map));
+#line 649 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = map;
+#line 649 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = gee_map_get_keys (_tmp0_);
+#line 649 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = _tmp1_;
+#line 649 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = _tmp2_;
+#line 649 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_filter_altered_items (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 649 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp3_);
+#line 651 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = map;
+#line 651 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ DATA_COLLECTION_CLASS (view_collection_parent_class)->items_altered (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), _tmp4_);
+#line 4153 "ViewCollection.c"
+}
+
+
+static void view_collection_real_set_comparator (DataCollection* base, Comparator comparator, void* comparator_target, ComparatorPredicate predicate, void* predicate_target) {
+ ViewCollection * self;
+ DataSet* _tmp0_ = NULL;
+ Comparator _tmp1_ = NULL;
+ void* _tmp1__target = NULL;
+ ComparatorPredicate _tmp2_ = NULL;
+ void* _tmp2__target = NULL;
+ DataSet* _tmp3_ = NULL;
+ Comparator _tmp7_ = NULL;
+ void* _tmp7__target = NULL;
+ ComparatorPredicate _tmp8_ = NULL;
+ void* _tmp8__target = NULL;
+#line 654 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_VIEW_COLLECTION, ViewCollection);
+#line 655 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = self->priv->selected;
+#line 655 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = comparator;
+#line 655 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1__target = comparator_target;
+#line 655 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = predicate;
+#line 655 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2__target = predicate_target;
+#line 655 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ data_set_set_comparator (_tmp0_, _tmp1_, _tmp1__target, _tmp2_, _tmp2__target);
+#line 656 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = self->priv->visible;
+#line 656 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp3_ != NULL) {
+#line 4187 "ViewCollection.c"
+ DataSet* _tmp4_ = NULL;
+ Comparator _tmp5_ = NULL;
+ void* _tmp5__target = NULL;
+ ComparatorPredicate _tmp6_ = NULL;
+ void* _tmp6__target = NULL;
+#line 657 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = self->priv->visible;
+#line 657 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = comparator;
+#line 657 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5__target = comparator_target;
+#line 657 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = predicate;
+#line 657 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6__target = predicate_target;
+#line 657 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ data_set_set_comparator (_tmp4_, _tmp5_, _tmp5__target, _tmp6_, _tmp6__target);
+#line 4205 "ViewCollection.c"
+ }
+#line 659 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = comparator;
+#line 659 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7__target = comparator_target;
+#line 659 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = predicate;
+#line 659 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8__target = predicate_target;
+#line 659 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ DATA_COLLECTION_CLASS (view_collection_parent_class)->set_comparator (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), _tmp7_, _tmp7__target, _tmp8_, _tmp8__target);
+#line 4217 "ViewCollection.c"
+}
+
+
+static void view_collection_real_reset_comparator (DataCollection* base) {
+ ViewCollection * self;
+ DataSet* _tmp0_ = NULL;
+ DataSet* _tmp1_ = NULL;
+#line 662 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_VIEW_COLLECTION, ViewCollection);
+#line 663 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = self->priv->selected;
+#line 663 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ data_set_reset_comparator (_tmp0_);
+#line 664 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = self->priv->visible;
+#line 664 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp1_ != NULL) {
+#line 4235 "ViewCollection.c"
+ DataSet* _tmp2_ = NULL;
+#line 665 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = self->priv->visible;
+#line 665 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ data_set_reset_comparator (_tmp2_);
+#line 4241 "ViewCollection.c"
+ }
+#line 667 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ DATA_COLLECTION_CLASS (view_collection_parent_class)->reset_comparator (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 4245 "ViewCollection.c"
+}
+
+
+static GeeCollection* view_collection_real_get_all (DataCollection* base) {
+ ViewCollection * self;
+ GeeCollection* result = NULL;
+ GeeCollection* _tmp0_ = NULL;
+ DataSet* _tmp1_ = NULL;
+#line 670 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_VIEW_COLLECTION, ViewCollection);
+#line 671 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = self->priv->visible;
+#line 671 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp1_ != NULL) {
+#line 4260 "ViewCollection.c"
+ DataSet* _tmp2_ = NULL;
+ GeeList* _tmp3_ = NULL;
+#line 671 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = self->priv->visible;
+#line 671 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = data_set_get_all (_tmp2_);
+#line 671 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp0_);
+#line 671 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_COLLECTION, GeeCollection);
+#line 4271 "ViewCollection.c"
+ } else {
+ GeeCollection* _tmp4_ = NULL;
+#line 671 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = DATA_COLLECTION_CLASS (view_collection_parent_class)->get_all (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 671 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp0_);
+#line 671 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = _tmp4_;
+#line 4280 "ViewCollection.c"
+ }
+#line 671 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = _tmp0_;
+#line 671 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 4286 "ViewCollection.c"
+}
+
+
+GeeCollection* view_collection_get_all_unfiltered (ViewCollection* self) {
+ GeeCollection* result = NULL;
+ GeeCollection* _tmp0_ = NULL;
+#line 674 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), NULL);
+#line 675 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = DATA_COLLECTION_CLASS (view_collection_parent_class)->get_all (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 675 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = _tmp0_;
+#line 675 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 4301 "ViewCollection.c"
+}
+
+
+static gint view_collection_real_get_count (DataCollection* base) {
+ ViewCollection * self;
+ gint result = 0;
+ gint _tmp0_ = 0;
+ DataSet* _tmp1_ = NULL;
+#line 678 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_VIEW_COLLECTION, ViewCollection);
+#line 679 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = self->priv->visible;
+#line 679 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp1_ != NULL) {
+#line 4316 "ViewCollection.c"
+ DataSet* _tmp2_ = NULL;
+ gint _tmp3_ = 0;
+#line 679 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = self->priv->visible;
+#line 679 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = data_set_get_count (_tmp2_);
+#line 679 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = _tmp3_;
+#line 4325 "ViewCollection.c"
+ } else {
+ gint _tmp4_ = 0;
+#line 679 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = DATA_COLLECTION_CLASS (view_collection_parent_class)->get_count (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 679 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = _tmp4_;
+#line 4332 "ViewCollection.c"
+ }
+#line 679 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = _tmp0_;
+#line 679 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 4338 "ViewCollection.c"
+}
+
+
+gint view_collection_get_unfiltered_count (ViewCollection* self) {
+ gint result = 0;
+ gint _tmp0_ = 0;
+#line 682 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), 0);
+#line 683 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = DATA_COLLECTION_CLASS (view_collection_parent_class)->get_count (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 683 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = _tmp0_;
+#line 683 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 4353 "ViewCollection.c"
+}
+
+
+static DataObject* view_collection_real_get_at (DataCollection* base, gint index) {
+ ViewCollection * self;
+ DataObject* result = NULL;
+ DataObject* _tmp0_ = NULL;
+ DataSet* _tmp1_ = NULL;
+#line 686 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_VIEW_COLLECTION, ViewCollection);
+#line 687 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = self->priv->visible;
+#line 687 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp1_ != NULL) {
+#line 4368 "ViewCollection.c"
+ DataSet* _tmp2_ = NULL;
+ gint _tmp3_ = 0;
+ DataObject* _tmp4_ = NULL;
+#line 687 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = self->priv->visible;
+#line 687 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = index;
+#line 687 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = data_set_get_at (_tmp2_, _tmp3_);
+#line 687 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp0_);
+#line 687 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = _tmp4_;
+#line 4382 "ViewCollection.c"
+ } else {
+ gint _tmp5_ = 0;
+ DataObject* _tmp6_ = NULL;
+#line 687 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = index;
+#line 687 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = DATA_COLLECTION_CLASS (view_collection_parent_class)->get_at (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), _tmp5_);
+#line 687 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp0_);
+#line 687 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = _tmp6_;
+#line 4394 "ViewCollection.c"
+ }
+#line 687 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = _tmp0_;
+#line 687 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 4400 "ViewCollection.c"
+}
+
+
+static gint view_collection_real_index_of (DataCollection* base, DataObject* object) {
+ ViewCollection * self;
+ gint result = 0;
+ gint _tmp0_ = 0;
+ DataSet* _tmp1_ = NULL;
+#line 690 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_VIEW_COLLECTION, ViewCollection);
+#line 690 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (object), 0);
+#line 691 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = self->priv->visible;
+#line 691 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp1_ != NULL) {
+#line 4417 "ViewCollection.c"
+ DataSet* _tmp2_ = NULL;
+ DataObject* _tmp3_ = NULL;
+ gint _tmp4_ = 0;
+#line 691 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = self->priv->visible;
+#line 691 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = object;
+#line 691 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = data_set_index_of (_tmp2_, _tmp3_);
+#line 691 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = _tmp4_;
+#line 4429 "ViewCollection.c"
+ } else {
+ DataObject* _tmp5_ = NULL;
+ gint _tmp6_ = 0;
+#line 691 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = object;
+#line 691 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = DATA_COLLECTION_CLASS (view_collection_parent_class)->index_of (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), _tmp5_);
+#line 691 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = _tmp6_;
+#line 4439 "ViewCollection.c"
+ }
+#line 691 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = _tmp0_;
+#line 691 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 4445 "ViewCollection.c"
+}
+
+
+static gboolean view_collection_real_contains (DataCollection* base, DataObject* object) {
+ ViewCollection * self;
+ gboolean result = FALSE;
+ DataObject* _tmp0_ = NULL;
+ gboolean _tmp1_ = FALSE;
+ DataObject* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+#line 694 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_VIEW_COLLECTION, ViewCollection);
+#line 694 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (object), FALSE);
+#line 697 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = object;
+#line 697 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = DATA_COLLECTION_CLASS (view_collection_parent_class)->contains (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), _tmp0_);
+#line 697 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp1_) {
+#line 698 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = FALSE;
+#line 698 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 4470 "ViewCollection.c"
+ }
+#line 701 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = object;
+#line 701 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = view_collection_is_visible (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, TYPE_DATA_VIEW, DataView));
+#line 701 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = _tmp3_;
+#line 701 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 4480 "ViewCollection.c"
+}
+
+
+static DataView* view_collection_real_get_first (ViewCollection* self) {
+ DataView* result = NULL;
+ DataView* _tmp0_ = NULL;
+ gint _tmp1_ = 0;
+#line 705 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = data_collection_get_count (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 705 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp1_ > 0) {
+#line 4492 "ViewCollection.c"
+ DataObject* _tmp2_ = NULL;
+#line 705 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = data_collection_get_at (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), 0);
+#line 705 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp0_);
+#line 705 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, TYPE_DATA_VIEW, DataView);
+#line 4500 "ViewCollection.c"
+ } else {
+#line 705 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp0_);
+#line 705 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = NULL;
+#line 4506 "ViewCollection.c"
+ }
+#line 705 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = _tmp0_;
+#line 705 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 4512 "ViewCollection.c"
+}
+
+
+DataView* view_collection_get_first (ViewCollection* self) {
+#line 704 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), NULL);
+#line 704 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return VIEW_COLLECTION_GET_CLASS (self)->get_first (self);
+#line 4521 "ViewCollection.c"
+}
+
+
+/**
+ * @brief A helper method for places in the app that need a
+ * non-rejected media source (namely Events, when looking to
+ * automatically choose a thumbnail).
+ *
+ * @note If every view in this collection is rejected, we
+ * return the first view; this is intentional. This prevents
+ * pathological events that have nothing but rejected images
+ * in them from breaking.
+ */
+static DataView* view_collection_real_get_first_unrejected (ViewCollection* self) {
+ DataView* result = NULL;
+ gint _tmp0_ = 0;
+ DataView* dv = NULL;
+ DataView* _tmp1_ = NULL;
+ gint num_views = 0;
+ gint _tmp2_ = 0;
+ DataView* _tmp17_ = NULL;
+#line 720 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = data_collection_get_count (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 720 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp0_ < 1) {
+#line 721 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = NULL;
+#line 721 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 4551 "ViewCollection.c"
+ }
+#line 724 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = view_collection_get_first (self);
+#line 724 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ dv = _tmp1_;
+#line 725 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = data_collection_get_count (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 725 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ num_views = _tmp2_;
+#line 727 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ while (TRUE) {
+#line 4563 "ViewCollection.c"
+ gboolean _tmp3_ = FALSE;
+ DataView* _tmp4_ = NULL;
+ MediaSource* tmp = NULL;
+ DataView* _tmp8_ = NULL;
+ DataSource* _tmp9_ = NULL;
+ MediaSource* _tmp10_ = NULL;
+ gboolean _tmp11_ = FALSE;
+ MediaSource* _tmp12_ = NULL;
+#line 727 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = dv;
+#line 727 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp4_ != NULL) {
+#line 4576 "ViewCollection.c"
+ DataView* _tmp5_ = NULL;
+ gint _tmp6_ = 0;
+ gint _tmp7_ = 0;
+#line 727 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = dv;
+#line 727 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = data_collection_index_of (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp5_, TYPE_DATA_OBJECT, DataObject));
+#line 727 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = num_views;
+#line 727 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = _tmp6_ < (_tmp7_ - 1);
+#line 4588 "ViewCollection.c"
+ } else {
+#line 727 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = FALSE;
+#line 4592 "ViewCollection.c"
+ }
+#line 727 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp3_) {
+#line 727 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 4598 "ViewCollection.c"
+ }
+#line 728 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = dv;
+#line 728 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = data_view_get_source (_tmp8_);
+#line 728 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp10_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp9_, TYPE_MEDIA_SOURCE) ? ((MediaSource*) _tmp9_) : NULL;
+#line 728 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp10_ == NULL) {
+#line 728 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp9_);
+#line 4610 "ViewCollection.c"
+ }
+#line 728 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ tmp = _tmp10_;
+#line 730 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp12_ = tmp;
+#line 730 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp12_ != NULL) {
+#line 4618 "ViewCollection.c"
+ MediaSource* _tmp13_ = NULL;
+ Rating _tmp14_ = 0;
+#line 730 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp13_ = tmp;
+#line 730 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp14_ = media_source_get_rating (_tmp13_);
+#line 730 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp11_ = _tmp14_ != RATING_REJECTED;
+#line 4627 "ViewCollection.c"
+ } else {
+#line 730 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp11_ = FALSE;
+#line 4631 "ViewCollection.c"
+ }
+#line 730 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp11_) {
+#line 732 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = dv;
+#line 732 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (tmp);
+#line 732 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 4641 "ViewCollection.c"
+ } else {
+ DataView* _tmp15_ = NULL;
+ DataView* _tmp16_ = NULL;
+#line 734 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp15_ = dv;
+#line 734 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp16_ = view_collection_get_next (self, _tmp15_);
+#line 734 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (dv);
+#line 734 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ dv = _tmp16_;
+#line 4653 "ViewCollection.c"
+ }
+#line 727 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (tmp);
+#line 4657 "ViewCollection.c"
+ }
+#line 740 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp17_ = view_collection_get_first (self);
+#line 740 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = _tmp17_;
+#line 740 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (dv);
+#line 740 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 4667 "ViewCollection.c"
+}
+
+
+DataView* view_collection_get_first_unrejected (ViewCollection* self) {
+#line 718 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), NULL);
+#line 718 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return VIEW_COLLECTION_GET_CLASS (self)->get_first_unrejected (self);
+#line 4676 "ViewCollection.c"
+}
+
+
+static DataView* view_collection_real_get_last (ViewCollection* self) {
+ DataView* result = NULL;
+ DataView* _tmp0_ = NULL;
+ gint _tmp1_ = 0;
+#line 744 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = data_collection_get_count (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 744 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp1_ > 0) {
+#line 4688 "ViewCollection.c"
+ gint _tmp2_ = 0;
+ DataObject* _tmp3_ = NULL;
+#line 744 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = data_collection_get_count (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 744 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = data_collection_get_at (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), _tmp2_ - 1);
+#line 744 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp0_);
+#line 744 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, TYPE_DATA_VIEW, DataView);
+#line 4699 "ViewCollection.c"
+ } else {
+#line 744 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp0_);
+#line 744 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = NULL;
+#line 4705 "ViewCollection.c"
+ }
+#line 744 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = _tmp0_;
+#line 744 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 4711 "ViewCollection.c"
+}
+
+
+DataView* view_collection_get_last (ViewCollection* self) {
+#line 743 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), NULL);
+#line 743 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return VIEW_COLLECTION_GET_CLASS (self)->get_last (self);
+#line 4720 "ViewCollection.c"
+}
+
+
+static DataView* view_collection_real_get_next (ViewCollection* self, DataView* view) {
+ DataView* result = NULL;
+ gint _tmp0_ = 0;
+ gint index = 0;
+ DataView* _tmp1_ = NULL;
+ gint _tmp2_ = 0;
+ gint _tmp3_ = 0;
+ gint _tmp4_ = 0;
+ gint _tmp5_ = 0;
+ gint _tmp6_ = 0;
+ gint _tmp7_ = 0;
+ DataObject* _tmp8_ = NULL;
+#line 747 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_DATA_VIEW (view), NULL);
+#line 748 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = data_collection_get_count (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 748 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp0_ == 0) {
+#line 749 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = NULL;
+#line 749 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 4746 "ViewCollection.c"
+ }
+#line 751 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = view;
+#line 751 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = data_collection_index_of (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, TYPE_DATA_OBJECT, DataObject));
+#line 751 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ index = _tmp2_;
+#line 752 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = index;
+#line 752 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp3_ < 0) {
+#line 753 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = NULL;
+#line 753 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 4762 "ViewCollection.c"
+ }
+#line 755 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = index;
+#line 755 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ index = _tmp4_ + 1;
+#line 756 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = index;
+#line 756 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = data_collection_get_count (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 756 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp5_ >= _tmp6_) {
+#line 757 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ index = 0;
+#line 4776 "ViewCollection.c"
+ }
+#line 759 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = index;
+#line 759 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = data_collection_get_at (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), _tmp7_);
+#line 759 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, TYPE_DATA_VIEW, DataView);
+#line 759 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 4786 "ViewCollection.c"
+}
+
+
+DataView* view_collection_get_next (ViewCollection* self, DataView* view) {
+#line 747 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), NULL);
+#line 747 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return VIEW_COLLECTION_GET_CLASS (self)->get_next (self, view);
+#line 4795 "ViewCollection.c"
+}
+
+
+static DataView* view_collection_real_get_previous (ViewCollection* self, DataView* view) {
+ DataView* result = NULL;
+ gint _tmp0_ = 0;
+ gint index = 0;
+ DataView* _tmp1_ = NULL;
+ gint _tmp2_ = 0;
+ gint _tmp3_ = 0;
+ gint _tmp4_ = 0;
+ gint _tmp5_ = 0;
+ gint _tmp7_ = 0;
+ DataObject* _tmp8_ = NULL;
+#line 762 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_DATA_VIEW (view), NULL);
+#line 763 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = data_collection_get_count (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 763 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp0_ == 0) {
+#line 764 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = NULL;
+#line 764 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 4820 "ViewCollection.c"
+ }
+#line 766 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = view;
+#line 766 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = data_collection_index_of (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, TYPE_DATA_OBJECT, DataObject));
+#line 766 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ index = _tmp2_;
+#line 767 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = index;
+#line 767 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp3_ < 0) {
+#line 768 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = NULL;
+#line 768 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 4836 "ViewCollection.c"
+ }
+#line 770 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = index;
+#line 770 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ index = _tmp4_ - 1;
+#line 771 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = index;
+#line 771 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp5_ < 0) {
+#line 4846 "ViewCollection.c"
+ gint _tmp6_ = 0;
+#line 772 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = data_collection_get_count (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 772 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ index = _tmp6_ - 1;
+#line 4852 "ViewCollection.c"
+ }
+#line 774 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = index;
+#line 774 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = data_collection_get_at (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), _tmp7_);
+#line 774 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, TYPE_DATA_VIEW, DataView);
+#line 774 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 4862 "ViewCollection.c"
+}
+
+
+DataView* view_collection_get_previous (ViewCollection* self, DataView* view) {
+#line 762 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), NULL);
+#line 762 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return VIEW_COLLECTION_GET_CLASS (self)->get_previous (self, view);
+#line 4871 "ViewCollection.c"
+}
+
+
+gboolean view_collection_get_immediate_neighbors (ViewCollection* self, DataSource* home, DataSource** next, DataSource** prev, const gchar* type_selector) {
+ DataSource* _vala_next = NULL;
+ DataSource* _vala_prev = NULL;
+ gboolean result = FALSE;
+ DataView* home_view = NULL;
+ DataSource* _tmp0_ = NULL;
+ DataView* _tmp1_ = NULL;
+ DataView* _tmp2_ = NULL;
+ DataView* next_view = NULL;
+ DataView* _tmp3_ = NULL;
+ DataView* _tmp4_ = NULL;
+ DataView* prev_view = NULL;
+ DataView* _tmp19_ = NULL;
+ DataView* _tmp20_ = NULL;
+#line 777 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), FALSE);
+#line 777 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_DATA_SOURCE (home), FALSE);
+#line 779 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_vala_next);
+#line 779 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _vala_next = NULL;
+#line 780 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_vala_prev);
+#line 780 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _vala_prev = NULL;
+#line 782 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = home;
+#line 782 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = view_collection_get_view_for_source (self, _tmp0_);
+#line 782 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ home_view = _tmp1_;
+#line 783 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = home_view;
+#line 783 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp2_ == NULL) {
+#line 784 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = FALSE;
+#line 784 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (home_view);
+#line 784 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (next) {
+#line 784 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ *next = _vala_next;
+#line 4919 "ViewCollection.c"
+ } else {
+#line 784 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_vala_next);
+#line 4923 "ViewCollection.c"
+ }
+#line 784 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (prev) {
+#line 784 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ *prev = _vala_prev;
+#line 4929 "ViewCollection.c"
+ } else {
+#line 784 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_vala_prev);
+#line 4933 "ViewCollection.c"
+ }
+#line 784 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 4937 "ViewCollection.c"
+ }
+#line 786 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = home_view;
+#line 786 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = view_collection_get_next (self, _tmp3_);
+#line 786 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ next_view = _tmp4_;
+#line 787 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ while (TRUE) {
+#line 4947 "ViewCollection.c"
+ DataView* _tmp5_ = NULL;
+ DataView* _tmp6_ = NULL;
+ gboolean _tmp7_ = FALSE;
+ const gchar* _tmp8_ = NULL;
+ DataView* _tmp17_ = NULL;
+ DataView* _tmp18_ = NULL;
+#line 787 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = next_view;
+#line 787 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = home_view;
+#line 787 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!(_tmp5_ != _tmp6_)) {
+#line 787 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 4962 "ViewCollection.c"
+ }
+#line 788 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = type_selector;
+#line 788 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp8_ == NULL) {
+#line 788 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = TRUE;
+#line 4970 "ViewCollection.c"
+ } else {
+ DataView* _tmp9_ = NULL;
+ DataSource* _tmp10_ = NULL;
+ DataSource* _tmp11_ = NULL;
+ gchar* _tmp12_ = NULL;
+ gchar* _tmp13_ = NULL;
+ const gchar* _tmp14_ = NULL;
+#line 788 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = next_view;
+#line 788 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp10_ = data_view_get_source (_tmp9_);
+#line 788 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp11_ = _tmp10_;
+#line 788 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp12_ = data_source_get_typename (_tmp11_);
+#line 788 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp13_ = _tmp12_;
+#line 788 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp14_ = type_selector;
+#line 788 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = g_strcmp0 (_tmp13_, _tmp14_) == 0;
+#line 788 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_free0 (_tmp13_);
+#line 788 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp11_);
+#line 4996 "ViewCollection.c"
+ }
+#line 788 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp7_) {
+#line 5000 "ViewCollection.c"
+ DataView* _tmp15_ = NULL;
+ DataSource* _tmp16_ = NULL;
+#line 789 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp15_ = next_view;
+#line 789 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp16_ = data_view_get_source (_tmp15_);
+#line 789 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_vala_next);
+#line 789 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _vala_next = _tmp16_;
+#line 790 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 5013 "ViewCollection.c"
+ }
+#line 792 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp17_ = next_view;
+#line 792 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp18_ = view_collection_get_next (self, _tmp17_);
+#line 792 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (next_view);
+#line 792 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ next_view = _tmp18_;
+#line 5023 "ViewCollection.c"
+ }
+#line 795 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp19_ = home_view;
+#line 795 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp20_ = view_collection_get_previous (self, _tmp19_);
+#line 795 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ prev_view = _tmp20_;
+#line 796 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ while (TRUE) {
+#line 5033 "ViewCollection.c"
+ DataView* _tmp21_ = NULL;
+ DataView* _tmp22_ = NULL;
+ gboolean _tmp23_ = FALSE;
+ const gchar* _tmp24_ = NULL;
+ DataView* _tmp33_ = NULL;
+ DataView* _tmp34_ = NULL;
+#line 796 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp21_ = prev_view;
+#line 796 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp22_ = home_view;
+#line 796 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!(_tmp21_ != _tmp22_)) {
+#line 796 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 5048 "ViewCollection.c"
+ }
+#line 797 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp24_ = type_selector;
+#line 797 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp24_ == NULL) {
+#line 797 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp23_ = TRUE;
+#line 5056 "ViewCollection.c"
+ } else {
+ DataView* _tmp25_ = NULL;
+ DataSource* _tmp26_ = NULL;
+ DataSource* _tmp27_ = NULL;
+ gchar* _tmp28_ = NULL;
+ gchar* _tmp29_ = NULL;
+ const gchar* _tmp30_ = NULL;
+#line 797 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp25_ = prev_view;
+#line 797 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp26_ = data_view_get_source (_tmp25_);
+#line 797 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp27_ = _tmp26_;
+#line 797 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp28_ = data_source_get_typename (_tmp27_);
+#line 797 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp29_ = _tmp28_;
+#line 797 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp30_ = type_selector;
+#line 797 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp23_ = g_strcmp0 (_tmp29_, _tmp30_) == 0;
+#line 797 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_free0 (_tmp29_);
+#line 797 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp27_);
+#line 5082 "ViewCollection.c"
+ }
+#line 797 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp23_) {
+#line 5086 "ViewCollection.c"
+ DataView* _tmp31_ = NULL;
+ DataSource* _tmp32_ = NULL;
+#line 798 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp31_ = prev_view;
+#line 798 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp32_ = data_view_get_source (_tmp31_);
+#line 798 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_vala_prev);
+#line 798 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _vala_prev = _tmp32_;
+#line 799 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 5099 "ViewCollection.c"
+ }
+#line 801 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp33_ = prev_view;
+#line 801 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp34_ = view_collection_get_previous (self, _tmp33_);
+#line 801 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (prev_view);
+#line 801 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ prev_view = _tmp34_;
+#line 5109 "ViewCollection.c"
+ }
+#line 804 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = TRUE;
+#line 804 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (prev_view);
+#line 804 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (next_view);
+#line 804 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (home_view);
+#line 804 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (next) {
+#line 804 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ *next = _vala_next;
+#line 5123 "ViewCollection.c"
+ } else {
+#line 804 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_vala_next);
+#line 5127 "ViewCollection.c"
+ }
+#line 804 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (prev) {
+#line 804 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ *prev = _vala_prev;
+#line 5133 "ViewCollection.c"
+ } else {
+#line 804 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_vala_prev);
+#line 5137 "ViewCollection.c"
+ }
+#line 804 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 5141 "ViewCollection.c"
+}
+
+
+GeeSet* view_collection_get_extended_neighbors (ViewCollection* self, DataSource* home, const gchar* typename) {
+ GeeSet* result = NULL;
+ GeeSet* neighbors = NULL;
+ GeeHashSet* _tmp0_ = NULL;
+ DataSource* next = NULL;
+ DataSource* prev = NULL;
+ DataSource* _tmp1_ = NULL;
+ const gchar* _tmp2_ = NULL;
+ DataSource* _tmp3_ = NULL;
+ DataSource* _tmp4_ = NULL;
+ gboolean _tmp5_ = FALSE;
+ DataSource* _tmp6_ = NULL;
+ DataSource* _tmp16_ = NULL;
+ GeeSet* _tmp26_ = NULL;
+ DataSource* _tmp27_ = NULL;
+#line 808 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), NULL);
+#line 808 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_DATA_SOURCE (home), NULL);
+#line 810 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = gee_hash_set_new (TYPE_DATA_SOURCE, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 810 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ neighbors = G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_SET, GeeSet);
+#line 814 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = home;
+#line 814 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = typename;
+#line 814 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = view_collection_get_immediate_neighbors (self, _tmp1_, &_tmp3_, &_tmp4_, _tmp2_);
+#line 814 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (next);
+#line 814 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ next = _tmp3_;
+#line 814 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (prev);
+#line 814 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ prev = _tmp4_;
+#line 814 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp5_) {
+#line 815 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = neighbors;
+#line 815 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (prev);
+#line 815 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (next);
+#line 815 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 5192 "ViewCollection.c"
+ }
+#line 818 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = next;
+#line 818 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp6_ != NULL) {
+#line 5198 "ViewCollection.c"
+ GeeSet* _tmp7_ = NULL;
+ DataSource* _tmp8_ = NULL;
+ DataSource* next_next = NULL;
+ DataSource* next_prev = NULL;
+ DataSource* _tmp9_ = NULL;
+ const gchar* _tmp10_ = NULL;
+ DataSource* _tmp11_ = NULL;
+ DataSource* _tmp12_ = NULL;
+ DataSource* _tmp13_ = NULL;
+#line 819 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = neighbors;
+#line 819 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = next;
+#line 819 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, GEE_TYPE_COLLECTION, GeeCollection), _tmp8_);
+#line 822 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = next;
+#line 822 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp10_ = typename;
+#line 822 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_get_immediate_neighbors (self, _tmp9_, &_tmp11_, &_tmp12_, _tmp10_);
+#line 822 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (next_next);
+#line 822 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ next_next = _tmp11_;
+#line 822 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (next_prev);
+#line 822 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ next_prev = _tmp12_;
+#line 825 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp13_ = next_next;
+#line 825 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp13_ != NULL) {
+#line 5232 "ViewCollection.c"
+ GeeSet* _tmp14_ = NULL;
+ DataSource* _tmp15_ = NULL;
+#line 826 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp14_ = neighbors;
+#line 826 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp15_ = next_next;
+#line 826 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, GEE_TYPE_COLLECTION, GeeCollection), _tmp15_);
+#line 5241 "ViewCollection.c"
+ }
+#line 818 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (next_prev);
+#line 818 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (next_next);
+#line 5247 "ViewCollection.c"
+ }
+#line 830 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp16_ = prev;
+#line 830 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp16_ != NULL) {
+#line 5253 "ViewCollection.c"
+ GeeSet* _tmp17_ = NULL;
+ DataSource* _tmp18_ = NULL;
+ DataSource* next_prev = NULL;
+ DataSource* prev_prev = NULL;
+ DataSource* _tmp19_ = NULL;
+ const gchar* _tmp20_ = NULL;
+ DataSource* _tmp21_ = NULL;
+ DataSource* _tmp22_ = NULL;
+ DataSource* _tmp23_ = NULL;
+#line 831 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp17_ = neighbors;
+#line 831 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp18_ = prev;
+#line 831 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp17_, GEE_TYPE_COLLECTION, GeeCollection), _tmp18_);
+#line 834 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp19_ = prev;
+#line 834 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp20_ = typename;
+#line 834 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_get_immediate_neighbors (self, _tmp19_, &_tmp21_, &_tmp22_, _tmp20_);
+#line 834 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (next_prev);
+#line 834 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ next_prev = _tmp21_;
+#line 834 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (prev_prev);
+#line 834 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ prev_prev = _tmp22_;
+#line 837 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp23_ = prev_prev;
+#line 837 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp23_ != NULL) {
+#line 5287 "ViewCollection.c"
+ GeeSet* _tmp24_ = NULL;
+ DataSource* _tmp25_ = NULL;
+#line 838 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp24_ = neighbors;
+#line 838 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp25_ = prev_prev;
+#line 838 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp24_, GEE_TYPE_COLLECTION, GeeCollection), _tmp25_);
+#line 5296 "ViewCollection.c"
+ }
+#line 830 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (prev_prev);
+#line 830 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (next_prev);
+#line 5302 "ViewCollection.c"
+ }
+#line 842 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp26_ = neighbors;
+#line 842 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp27_ = home;
+#line 842 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_collection_remove (G_TYPE_CHECK_INSTANCE_CAST (_tmp26_, GEE_TYPE_COLLECTION, GeeCollection), _tmp27_);
+#line 844 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = neighbors;
+#line 844 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (prev);
+#line 844 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (next);
+#line 844 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 5318 "ViewCollection.c"
+}
+
+
+static void view_collection_add_many_selected (ViewCollection* self, GeeCollection* views) {
+ GeeCollection* _tmp0_ = NULL;
+ gint _tmp1_ = 0;
+ gint _tmp2_ = 0;
+ gboolean added = FALSE;
+ DataSet* _tmp11_ = NULL;
+ GeeCollection* _tmp12_ = NULL;
+ gboolean _tmp13_ = FALSE;
+ gboolean _tmp14_ = FALSE;
+#line 849 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 849 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (views));
+#line 850 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = views;
+#line 850 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = gee_collection_get_size (_tmp0_);
+#line 850 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = _tmp1_;
+#line 850 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp2_ == 0) {
+#line 851 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return;
+#line 5345 "ViewCollection.c"
+ }
+ {
+ GeeIterator* _view_it = NULL;
+ GeeCollection* _tmp3_ = NULL;
+ GeeIterator* _tmp4_ = NULL;
+#line 853 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = views;
+#line 853 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 853 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _view_it = _tmp4_;
+#line 853 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ while (TRUE) {
+#line 5359 "ViewCollection.c"
+ GeeIterator* _tmp5_ = NULL;
+ gboolean _tmp6_ = FALSE;
+ DataView* view = NULL;
+ GeeIterator* _tmp7_ = NULL;
+ gpointer _tmp8_ = NULL;
+ DataView* _tmp9_ = NULL;
+ gboolean _tmp10_ = FALSE;
+#line 853 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = _view_it;
+#line 853 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = gee_iterator_next (_tmp5_);
+#line 853 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp6_) {
+#line 853 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 5375 "ViewCollection.c"
+ }
+#line 853 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = _view_it;
+#line 853 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = gee_iterator_get (_tmp7_);
+#line 853 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view = (DataView*) _tmp8_;
+#line 854 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = view;
+#line 854 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp10_ = data_view_is_visible (_tmp9_);
+#line 854 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _vala_assert (_tmp10_, "view.is_visible()");
+#line 853 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (view);
+#line 5391 "ViewCollection.c"
+ }
+#line 853 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_view_it);
+#line 5395 "ViewCollection.c"
+ }
+#line 856 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp11_ = self->priv->selected;
+#line 856 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp12_ = views;
+#line 856 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp13_ = data_set_add_many (_tmp11_, _tmp12_);
+#line 856 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ added = _tmp13_;
+#line 857 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp14_ = added;
+#line 857 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _vala_assert (_tmp14_, "added");
+#line 5409 "ViewCollection.c"
+}
+
+
+static void view_collection_remove_many_selected (ViewCollection* self, GeeCollection* views) {
+ GeeCollection* _tmp0_ = NULL;
+ gint _tmp1_ = 0;
+ gint _tmp2_ = 0;
+ gboolean removed = FALSE;
+ DataSet* _tmp3_ = NULL;
+ GeeCollection* _tmp4_ = NULL;
+ gboolean _tmp5_ = FALSE;
+ gboolean _tmp6_ = FALSE;
+#line 860 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 860 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (views));
+#line 861 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = views;
+#line 861 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = gee_collection_get_size (_tmp0_);
+#line 861 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = _tmp1_;
+#line 861 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp2_ == 0) {
+#line 862 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return;
+#line 5436 "ViewCollection.c"
+ }
+#line 864 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = self->priv->selected;
+#line 864 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = views;
+#line 864 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = data_set_remove_many (_tmp3_, _tmp4_);
+#line 864 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ removed = _tmp5_;
+#line 865 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = removed;
+#line 865 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _vala_assert (_tmp6_, "removed");
+#line 5450 "ViewCollection.c"
+}
+
+
+static gboolean _view_collection_select_item_marked_action (DataObject* object, GObject* user, gpointer self) {
+ gboolean result;
+ result = view_collection_select_item ((ViewCollection*) self, object, user);
+#line 871 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 5459 "ViewCollection.c"
+}
+
+
+void view_collection_select_marked (ViewCollection* self, Marker* marker) {
+ GeeArrayList* selected = NULL;
+ GeeArrayList* _tmp0_ = NULL;
+ Marker* _tmp1_ = NULL;
+ GeeArrayList* _tmp2_ = NULL;
+ GeeArrayList* _tmp3_ = NULL;
+ gint _tmp4_ = 0;
+ gint _tmp5_ = 0;
+#line 869 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 869 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_MARKER (marker));
+#line 870 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = gee_array_list_new (TYPE_DATA_VIEW, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 870 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ selected = _tmp0_;
+#line 871 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = marker;
+#line 871 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = selected;
+#line 871 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ data_collection_act_on_marked (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), _tmp1_, _view_collection_select_item_marked_action, self, NULL, NULL, G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, G_TYPE_OBJECT, GObject));
+#line 873 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = selected;
+#line 873 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = gee_abstract_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 873 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = _tmp4_;
+#line 873 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp5_ > 0) {
+#line 5493 "ViewCollection.c"
+ GeeArrayList* _tmp6_ = NULL;
+ GeeArrayList* _tmp7_ = NULL;
+#line 874 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = selected;
+#line 874 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_add_many_selected (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 875 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = selected;
+#line 875 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_notify_items_selected_unselected (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, GEE_TYPE_COLLECTION, GeeCollection), NULL);
+#line 5504 "ViewCollection.c"
+ }
+#line 869 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (selected);
+#line 5508 "ViewCollection.c"
+}
+
+
+void view_collection_select_all (ViewCollection* self) {
+ Marker* marker = NULL;
+ Marker* _tmp0_ = NULL;
+#line 880 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 881 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = data_collection_start_marking (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 881 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ marker = _tmp0_;
+#line 882 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ marker_mark_all (marker);
+#line 883 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_select_marked (self, marker);
+#line 880 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (marker);
+#line 5527 "ViewCollection.c"
+}
+
+
+static gboolean view_collection_select_item (ViewCollection* self, DataObject* object, GObject* user) {
+ gboolean result = FALSE;
+ DataView* view = NULL;
+ DataObject* _tmp0_ = NULL;
+ DataView* _tmp1_ = NULL;
+ DataView* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+ DataView* _tmp9_ = NULL;
+ DataView* _tmp10_ = NULL;
+ gboolean _tmp11_ = FALSE;
+#line 886 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), FALSE);
+#line 886 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (object), FALSE);
+#line 886 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail ((user == NULL) || G_IS_OBJECT (user), FALSE);
+#line 887 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = object;
+#line 887 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_DATA_VIEW, DataView));
+#line 887 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view = _tmp1_;
+#line 888 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = view;
+#line 888 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = data_view_is_selected (_tmp2_);
+#line 888 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp3_) {
+#line 5559 "ViewCollection.c"
+ DataView* _tmp4_ = NULL;
+ gboolean _tmp5_ = FALSE;
+#line 889 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = view;
+#line 889 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = data_view_is_visible (_tmp4_);
+#line 889 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp5_) {
+#line 5568 "ViewCollection.c"
+ DataSet* _tmp6_ = NULL;
+ DataView* _tmp7_ = NULL;
+ gboolean _tmp8_ = FALSE;
+#line 890 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = self->priv->selected;
+#line 890 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = view;
+#line 890 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = data_set_contains (_tmp6_, G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, TYPE_DATA_OBJECT, DataObject));
+#line 890 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _vala_assert (_tmp8_, "selected.contains(view)");
+#line 5580 "ViewCollection.c"
+ }
+#line 892 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = TRUE;
+#line 892 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (view);
+#line 892 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 5588 "ViewCollection.c"
+ }
+#line 895 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = view;
+#line 895 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ data_view_internal_set_selected (_tmp9_, TRUE);
+#line 899 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp10_ = view;
+#line 899 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp11_ = data_view_is_visible (_tmp10_);
+#line 899 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp11_) {
+#line 5600 "ViewCollection.c"
+ GObject* _tmp12_ = NULL;
+ DataView* _tmp13_ = NULL;
+#line 900 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp12_ = user;
+#line 900 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp13_ = view;
+#line 900 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, GEE_TYPE_ARRAY_LIST, GeeArrayList), GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp13_);
+#line 5609 "ViewCollection.c"
+ }
+#line 902 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = TRUE;
+#line 902 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (view);
+#line 902 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 5617 "ViewCollection.c"
+}
+
+
+static gboolean _view_collection_unselect_item_marked_action (DataObject* object, GObject* user, gpointer self) {
+ gboolean result;
+ result = view_collection_unselect_item ((ViewCollection*) self, object, user);
+#line 908 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 5626 "ViewCollection.c"
+}
+
+
+void view_collection_unselect_marked (ViewCollection* self, Marker* marker) {
+ GeeArrayList* unselected = NULL;
+ GeeArrayList* _tmp0_ = NULL;
+ Marker* _tmp1_ = NULL;
+ GeeArrayList* _tmp2_ = NULL;
+ GeeArrayList* _tmp3_ = NULL;
+ gint _tmp4_ = 0;
+ gint _tmp5_ = 0;
+#line 906 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 906 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_MARKER (marker));
+#line 907 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = gee_array_list_new (TYPE_DATA_VIEW, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 907 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ unselected = _tmp0_;
+#line 908 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = marker;
+#line 908 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = unselected;
+#line 908 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ data_collection_act_on_marked (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), _tmp1_, _view_collection_unselect_item_marked_action, self, NULL, NULL, G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, G_TYPE_OBJECT, GObject));
+#line 910 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = unselected;
+#line 910 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = gee_abstract_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 910 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = _tmp4_;
+#line 910 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp5_ > 0) {
+#line 5660 "ViewCollection.c"
+ GeeArrayList* _tmp6_ = NULL;
+ GeeArrayList* _tmp7_ = NULL;
+#line 911 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = unselected;
+#line 911 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_remove_many_selected (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 912 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = unselected;
+#line 912 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_notify_items_selected_unselected (self, NULL, G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 5671 "ViewCollection.c"
+ }
+#line 906 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (unselected);
+#line 5675 "ViewCollection.c"
+}
+
+
+void view_collection_unselect_all (ViewCollection* self) {
+ DataSet* _tmp0_ = NULL;
+ gint _tmp1_ = 0;
+ Marker* marker = NULL;
+ Marker* _tmp2_ = NULL;
+ Marker* _tmp3_ = NULL;
+ GeeList* _tmp4_ = NULL;
+ GeeList* _tmp5_ = NULL;
+ Marker* _tmp6_ = NULL;
+#line 917 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 918 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = self->priv->selected;
+#line 918 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = data_set_get_count (_tmp0_);
+#line 918 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp1_ == 0) {
+#line 919 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return;
+#line 5698 "ViewCollection.c"
+ }
+#line 921 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = data_collection_start_marking (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 921 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ marker = _tmp2_;
+#line 922 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = marker;
+#line 922 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = view_collection_get_selected (self);
+#line 922 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = _tmp4_;
+#line 922 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ marker_mark_many (_tmp3_, G_TYPE_CHECK_INSTANCE_CAST (_tmp5_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 922 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp5_);
+#line 924 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = marker;
+#line 924 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_unselect_marked (self, _tmp6_);
+#line 917 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (marker);
+#line 5720 "ViewCollection.c"
+}
+
+
+void view_collection_unselect_all_but (ViewCollection* self, DataView* exception) {
+ Marker* marker = NULL;
+ Marker* _tmp0_ = NULL;
+ Marker* _tmp15_ = NULL;
+#line 928 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 928 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_DATA_VIEW (exception));
+#line 929 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = data_collection_start_marking (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 929 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ marker = _tmp0_;
+#line 5736 "ViewCollection.c"
+ {
+ GeeIterator* _object_it = NULL;
+ GeeCollection* _tmp1_ = NULL;
+ GeeCollection* _tmp2_ = NULL;
+ GeeIterator* _tmp3_ = NULL;
+ GeeIterator* _tmp4_ = NULL;
+#line 930 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = data_collection_get_all (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 930 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = _tmp1_;
+#line 930 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 930 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = _tmp3_;
+#line 930 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp2_);
+#line 930 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _object_it = _tmp4_;
+#line 930 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ while (TRUE) {
+#line 5757 "ViewCollection.c"
+ GeeIterator* _tmp5_ = NULL;
+ gboolean _tmp6_ = FALSE;
+ DataObject* object = NULL;
+ GeeIterator* _tmp7_ = NULL;
+ gpointer _tmp8_ = NULL;
+ DataView* view = NULL;
+ DataObject* _tmp9_ = NULL;
+ DataView* _tmp10_ = NULL;
+ DataView* _tmp11_ = NULL;
+ DataView* _tmp12_ = NULL;
+#line 930 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = _object_it;
+#line 930 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = gee_iterator_next (_tmp5_);
+#line 930 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp6_) {
+#line 930 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 5776 "ViewCollection.c"
+ }
+#line 930 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = _object_it;
+#line 930 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = gee_iterator_get (_tmp7_);
+#line 930 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ object = (DataObject*) _tmp8_;
+#line 931 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = object;
+#line 931 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp10_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, TYPE_DATA_VIEW, DataView));
+#line 931 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view = _tmp10_;
+#line 932 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp11_ = view;
+#line 932 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp12_ = exception;
+#line 932 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp11_ != _tmp12_) {
+#line 5796 "ViewCollection.c"
+ Marker* _tmp13_ = NULL;
+ DataView* _tmp14_ = NULL;
+#line 933 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp13_ = marker;
+#line 933 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp14_ = view;
+#line 933 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ marker_mark (_tmp13_, G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, TYPE_DATA_OBJECT, DataObject));
+#line 5805 "ViewCollection.c"
+ }
+#line 930 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (view);
+#line 930 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (object);
+#line 5811 "ViewCollection.c"
+ }
+#line 930 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_object_it);
+#line 5815 "ViewCollection.c"
+ }
+#line 936 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp15_ = marker;
+#line 936 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_unselect_marked (self, _tmp15_);
+#line 928 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (marker);
+#line 5823 "ViewCollection.c"
+}
+
+
+static gboolean view_collection_unselect_item (ViewCollection* self, DataObject* object, GObject* user) {
+ gboolean result = FALSE;
+ DataView* view = NULL;
+ DataObject* _tmp0_ = NULL;
+ DataView* _tmp1_ = NULL;
+ DataView* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+ DataView* _tmp7_ = NULL;
+ GObject* _tmp8_ = NULL;
+ DataView* _tmp9_ = NULL;
+#line 939 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), FALSE);
+#line 939 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (object), FALSE);
+#line 939 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail ((user == NULL) || G_IS_OBJECT (user), FALSE);
+#line 940 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = object;
+#line 940 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_DATA_VIEW, DataView));
+#line 940 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view = _tmp1_;
+#line 941 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = view;
+#line 941 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = data_view_is_selected (_tmp2_);
+#line 941 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp3_) {
+#line 5855 "ViewCollection.c"
+ DataSet* _tmp4_ = NULL;
+ DataView* _tmp5_ = NULL;
+ gboolean _tmp6_ = FALSE;
+#line 942 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = self->priv->selected;
+#line 942 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = view;
+#line 942 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = data_set_contains (_tmp4_, G_TYPE_CHECK_INSTANCE_CAST (_tmp5_, TYPE_DATA_OBJECT, DataObject));
+#line 942 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _vala_assert (!_tmp6_, "!selected.contains(view)");
+#line 944 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = TRUE;
+#line 944 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (view);
+#line 944 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 5873 "ViewCollection.c"
+ }
+#line 947 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = view;
+#line 947 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ data_view_internal_set_selected (_tmp7_, FALSE);
+#line 948 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = user;
+#line 948 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = view;
+#line 948 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, GEE_TYPE_ARRAY_LIST, GeeArrayList), GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp9_);
+#line 950 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = TRUE;
+#line 950 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (view);
+#line 950 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 5891 "ViewCollection.c"
+}
+
+
+void view_collection_unselect_and_select_marked (ViewCollection* self, Marker* unselect, Marker* select) {
+ GeeArrayList* unselected = NULL;
+ GeeArrayList* _tmp0_ = NULL;
+ Marker* _tmp1_ = NULL;
+ GeeArrayList* selected = NULL;
+ GeeArrayList* _tmp2_ = NULL;
+ Marker* _tmp3_ = NULL;
+#line 954 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 954 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_MARKER (unselect));
+#line 954 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_MARKER (select));
+#line 955 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = gee_array_list_new (TYPE_DATA_VIEW, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 955 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ unselected = _tmp0_;
+#line 956 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = unselect;
+#line 956 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ data_collection_act_on_marked (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), _tmp1_, _view_collection_unselect_item_marked_action, self, NULL, NULL, G_TYPE_CHECK_INSTANCE_CAST (unselected, G_TYPE_OBJECT, GObject));
+#line 958 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_remove_many_selected (self, G_TYPE_CHECK_INSTANCE_CAST (unselected, GEE_TYPE_COLLECTION, GeeCollection));
+#line 960 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = gee_array_list_new (TYPE_DATA_VIEW, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 960 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ selected = _tmp2_;
+#line 961 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = select;
+#line 961 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ data_collection_act_on_marked (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), _tmp3_, _view_collection_select_item_marked_action, self, NULL, NULL, G_TYPE_CHECK_INSTANCE_CAST (selected, G_TYPE_OBJECT, GObject));
+#line 963 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_add_many_selected (self, G_TYPE_CHECK_INSTANCE_CAST (selected, GEE_TYPE_COLLECTION, GeeCollection));
+#line 965 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_notify_items_selected_unselected (self, G_TYPE_CHECK_INSTANCE_CAST (selected, GEE_TYPE_COLLECTION, GeeCollection), G_TYPE_CHECK_INSTANCE_CAST (unselected, GEE_TYPE_COLLECTION, GeeCollection));
+#line 954 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (selected);
+#line 954 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (unselected);
+#line 5934 "ViewCollection.c"
+}
+
+
+static gboolean _view_collection_toggle_item_marked_action (DataObject* object, GObject* user, gpointer self) {
+ gboolean result;
+ result = view_collection_toggle_item ((ViewCollection*) self, object, user);
+#line 972 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 5943 "ViewCollection.c"
+}
+
+
+void view_collection_toggle_marked (ViewCollection* self, Marker* marker) {
+ ViewCollectionToggleLists* lists = NULL;
+ ViewCollectionToggleLists* _tmp0_ = NULL;
+ Marker* _tmp1_ = NULL;
+ GeeArrayList* _tmp2_ = NULL;
+ GeeArrayList* _tmp3_ = NULL;
+ GeeArrayList* _tmp4_ = NULL;
+ GeeArrayList* _tmp5_ = NULL;
+#line 970 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 970 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_MARKER (marker));
+#line 971 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = view_collection_toggle_lists_new ();
+#line 971 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ lists = _tmp0_;
+#line 972 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = marker;
+#line 972 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ data_collection_act_on_marked (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), _tmp1_, _view_collection_toggle_item_marked_action, self, NULL, NULL, G_TYPE_CHECK_INSTANCE_CAST (lists, G_TYPE_OBJECT, GObject));
+#line 975 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = lists->selected;
+#line 975 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_add_many_selected (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 976 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = lists->unselected;
+#line 976 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_remove_many_selected (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 978 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = lists->selected;
+#line 978 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = lists->unselected;
+#line 978 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_notify_items_selected_unselected (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, GEE_TYPE_COLLECTION, GeeCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp5_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 970 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (lists);
+#line 5983 "ViewCollection.c"
+}
+
+
+static gboolean view_collection_toggle_item (ViewCollection* self, DataObject* object, GObject* user) {
+ gboolean result = FALSE;
+ DataView* view = NULL;
+ DataObject* _tmp0_ = NULL;
+ DataView* _tmp1_ = NULL;
+ ViewCollectionToggleLists* lists = NULL;
+ GObject* _tmp2_ = NULL;
+ ViewCollectionToggleLists* _tmp3_ = NULL;
+ DataView* _tmp4_ = NULL;
+ gboolean _tmp5_ = FALSE;
+#line 981 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), FALSE);
+#line 981 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_DATA_OBJECT (object), FALSE);
+#line 981 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail ((user == NULL) || G_IS_OBJECT (user), FALSE);
+#line 982 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = object;
+#line 982 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_DATA_VIEW, DataView));
+#line 982 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view = _tmp1_;
+#line 983 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = user;
+#line 983 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, VIEW_COLLECTION_TYPE_TOGGLE_LISTS, ViewCollectionToggleLists));
+#line 983 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ lists = _tmp3_;
+#line 989 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = view;
+#line 989 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = data_view_internal_toggle (_tmp4_);
+#line 989 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp5_) {
+#line 6021 "ViewCollection.c"
+ DataView* _tmp6_ = NULL;
+ gboolean _tmp7_ = FALSE;
+#line 990 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = view;
+#line 990 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = data_view_is_visible (_tmp6_);
+#line 990 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp7_) {
+#line 6030 "ViewCollection.c"
+ ViewCollectionToggleLists* _tmp8_ = NULL;
+ GeeArrayList* _tmp9_ = NULL;
+ DataView* _tmp10_ = NULL;
+#line 991 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = lists;
+#line 991 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = _tmp8_->selected;
+#line 991 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp10_ = view;
+#line 991 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp10_);
+#line 6042 "ViewCollection.c"
+ }
+ } else {
+ ViewCollectionToggleLists* _tmp11_ = NULL;
+ GeeArrayList* _tmp12_ = NULL;
+ DataView* _tmp13_ = NULL;
+#line 993 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp11_ = lists;
+#line 993 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp12_ = _tmp11_->unselected;
+#line 993 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp13_ = view;
+#line 993 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp13_);
+#line 6056 "ViewCollection.c"
+ }
+#line 996 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = TRUE;
+#line 996 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (lists);
+#line 996 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (view);
+#line 996 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 6066 "ViewCollection.c"
+}
+
+
+gint view_collection_get_selected_count (ViewCollection* self) {
+ gint result = 0;
+ DataSet* _tmp0_ = NULL;
+ gint _tmp1_ = 0;
+#line 999 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), 0);
+#line 1000 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = self->priv->selected;
+#line 1000 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = data_set_get_count (_tmp0_);
+#line 1000 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = _tmp1_;
+#line 1000 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 6084 "ViewCollection.c"
+}
+
+
+GeeList* view_collection_get_selected (ViewCollection* self) {
+ GeeList* result = NULL;
+ DataSet* _tmp0_ = NULL;
+ GeeList* _tmp1_ = NULL;
+#line 1003 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), NULL);
+#line 1004 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = self->priv->selected;
+#line 1004 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = data_set_get_all (_tmp0_);
+#line 1004 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_LIST, GeeList);
+#line 1004 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 6102 "ViewCollection.c"
+}
+
+
+DataView* view_collection_get_selected_at (ViewCollection* self, gint index) {
+ DataView* result = NULL;
+ DataSet* _tmp0_ = NULL;
+ gint _tmp1_ = 0;
+ DataObject* _tmp2_ = NULL;
+#line 1007 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), NULL);
+#line 1008 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = self->priv->selected;
+#line 1008 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = index;
+#line 1008 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = data_set_get_at (_tmp0_, _tmp1_);
+#line 1008 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, TYPE_DATA_VIEW, DataView);
+#line 1008 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 6123 "ViewCollection.c"
+}
+
+
+static gboolean view_collection_is_visible (ViewCollection* self, DataView* view) {
+ gboolean result = FALSE;
+ gboolean _tmp0_ = FALSE;
+ DataSet* _tmp1_ = NULL;
+#line 1011 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), FALSE);
+#line 1011 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_DATA_VIEW (view), FALSE);
+#line 1012 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = self->priv->visible;
+#line 1012 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp1_ != NULL) {
+#line 6139 "ViewCollection.c"
+ DataSet* _tmp2_ = NULL;
+ DataView* _tmp3_ = NULL;
+ gboolean _tmp4_ = FALSE;
+#line 1012 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = self->priv->visible;
+#line 1012 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = view;
+#line 1012 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = data_set_contains (_tmp2_, G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, TYPE_DATA_OBJECT, DataObject));
+#line 1012 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = _tmp4_;
+#line 6151 "ViewCollection.c"
+ } else {
+#line 1012 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = TRUE;
+#line 6155 "ViewCollection.c"
+ }
+#line 1012 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = _tmp0_;
+#line 1012 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 6161 "ViewCollection.c"
+}
+
+
+static gboolean view_collection_add_many_visible (ViewCollection* self, GeeCollection* many) {
+ gboolean result = FALSE;
+ DataSet* _tmp0_ = NULL;
+ DataSet* _tmp1_ = NULL;
+ GeeCollection* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+ DataSet* _tmp4_ = NULL;
+ gint _tmp5_ = 0;
+ gint _tmp6_ = 0;
+#line 1015 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), FALSE);
+#line 1015 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (GEE_IS_COLLECTION (many), FALSE);
+#line 1016 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = self->priv->visible;
+#line 1016 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp0_ == NULL) {
+#line 1017 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = TRUE;
+#line 1017 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 6186 "ViewCollection.c"
+ }
+#line 1019 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = self->priv->visible;
+#line 1019 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = many;
+#line 1019 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = data_set_add_many (_tmp1_, _tmp2_);
+#line 1019 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp3_) {
+#line 1020 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = FALSE;
+#line 1020 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 6200 "ViewCollection.c"
+ }
+#line 1023 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = self->priv->visible;
+#line 1023 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = data_set_get_count (_tmp4_);
+#line 1023 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = DATA_COLLECTION_CLASS (view_collection_parent_class)->get_count (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 1023 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp5_ == _tmp6_) {
+#line 1024 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _data_set_unref0 (self->priv->visible);
+#line 1024 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->priv->visible = NULL;
+#line 6214 "ViewCollection.c"
+ }
+#line 1026 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = TRUE;
+#line 1026 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 6220 "ViewCollection.c"
+}
+
+
+static void view_collection_hide_items (ViewCollection* self, GeeList* to_hide) {
+ GeeArrayList* unselected = NULL;
+ GeeArrayList* _tmp0_ = NULL;
+ gint count = 0;
+ GeeList* _tmp1_ = NULL;
+ gint _tmp2_ = 0;
+ gint _tmp3_ = 0;
+ DataSet* _tmp22_ = NULL;
+ gboolean removed = FALSE;
+ DataSet* _tmp24_ = NULL;
+ GeeList* _tmp25_ = NULL;
+ gboolean _tmp26_ = FALSE;
+ gboolean _tmp27_ = FALSE;
+ GeeArrayList* _tmp28_ = NULL;
+ GeeArrayList* _tmp29_ = NULL;
+ gint _tmp30_ = 0;
+ gint _tmp31_ = 0;
+ GeeList* _tmp33_ = NULL;
+ gint _tmp34_ = 0;
+ gint _tmp35_ = 0;
+#line 1030 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 1030 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (GEE_IS_LIST (to_hide));
+#line 1031 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = gee_array_list_new (TYPE_DATA_VIEW, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 1031 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ unselected = _tmp0_;
+#line 1033 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = to_hide;
+#line 1033 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 1033 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = _tmp2_;
+#line 1033 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ count = _tmp3_;
+#line 6260 "ViewCollection.c"
+ {
+ gint ctr = 0;
+#line 1034 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ctr = 0;
+#line 6265 "ViewCollection.c"
+ {
+ gboolean _tmp4_ = FALSE;
+#line 1034 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = TRUE;
+#line 1034 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ while (TRUE) {
+#line 6272 "ViewCollection.c"
+ gint _tmp6_ = 0;
+ gint _tmp7_ = 0;
+ DataView* view = NULL;
+ GeeList* _tmp8_ = NULL;
+ gint _tmp9_ = 0;
+ gpointer _tmp10_ = NULL;
+ DataView* _tmp11_ = NULL;
+ gboolean _tmp12_ = FALSE;
+ DataView* _tmp13_ = NULL;
+ gboolean _tmp14_ = FALSE;
+ DataView* _tmp21_ = NULL;
+#line 1034 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp4_) {
+#line 6286 "ViewCollection.c"
+ gint _tmp5_ = 0;
+#line 1034 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = ctr;
+#line 1034 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ctr = _tmp5_ + 1;
+#line 6292 "ViewCollection.c"
+ }
+#line 1034 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = FALSE;
+#line 1034 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = ctr;
+#line 1034 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = count;
+#line 1034 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!(_tmp6_ < _tmp7_)) {
+#line 1034 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 6304 "ViewCollection.c"
+ }
+#line 1035 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = to_hide;
+#line 1035 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = ctr;
+#line 1035 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp10_ = gee_list_get (_tmp8_, _tmp9_);
+#line 1035 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view = (DataView*) _tmp10_;
+#line 1036 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp11_ = view;
+#line 1036 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp12_ = data_view_is_visible (_tmp11_);
+#line 1036 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _vala_assert (_tmp12_, "view.is_visible()");
+#line 1038 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp13_ = view;
+#line 1038 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp14_ = data_view_is_selected (_tmp13_);
+#line 1038 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp14_) {
+#line 6326 "ViewCollection.c"
+ DataView* _tmp15_ = NULL;
+ GeeArrayList* _tmp16_ = NULL;
+ DataView* _tmp17_ = NULL;
+#line 1039 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp15_ = view;
+#line 1039 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ data_view_internal_set_selected (_tmp15_, FALSE);
+#line 1040 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp16_ = unselected;
+#line 1040 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp17_ = view;
+#line 1040 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp16_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp17_);
+#line 6340 "ViewCollection.c"
+ } else {
+ DataSet* _tmp18_ = NULL;
+ DataView* _tmp19_ = NULL;
+ gboolean _tmp20_ = FALSE;
+#line 1042 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp18_ = self->priv->selected;
+#line 1042 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp19_ = view;
+#line 1042 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp20_ = data_set_contains (_tmp18_, G_TYPE_CHECK_INSTANCE_CAST (_tmp19_, TYPE_DATA_OBJECT, DataObject));
+#line 1042 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _vala_assert (!_tmp20_, "!selected.contains(view)");
+#line 6353 "ViewCollection.c"
+ }
+#line 1045 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp21_ = view;
+#line 1045 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ data_view_internal_set_visible (_tmp21_, FALSE);
+#line 1034 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (view);
+#line 6361 "ViewCollection.c"
+ }
+ }
+ }
+#line 1048 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp22_ = self->priv->visible;
+#line 1048 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp22_ == NULL) {
+#line 6369 "ViewCollection.c"
+ DataSet* _tmp23_ = NULL;
+#line 1050 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp23_ = data_collection_get_dataset_copy (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 1050 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _data_set_unref0 (self->priv->visible);
+#line 1050 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->priv->visible = _tmp23_;
+#line 6377 "ViewCollection.c"
+ }
+#line 1053 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp24_ = self->priv->visible;
+#line 1053 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp25_ = to_hide;
+#line 1053 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp26_ = data_set_remove_many (_tmp24_, G_TYPE_CHECK_INSTANCE_CAST (_tmp25_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 1053 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ removed = _tmp26_;
+#line 1054 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp27_ = removed;
+#line 1054 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _vala_assert (_tmp27_, "removed");
+#line 1056 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp28_ = unselected;
+#line 1056 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_remove_many_selected (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp28_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 1058 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp29_ = unselected;
+#line 1058 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp30_ = gee_abstract_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp29_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 1058 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp31_ = _tmp30_;
+#line 1058 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp31_ > 0) {
+#line 6403 "ViewCollection.c"
+ GeeArrayList* _tmp32_ = NULL;
+#line 1059 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp32_ = unselected;
+#line 1059 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_notify_items_selected_unselected (self, NULL, G_TYPE_CHECK_INSTANCE_CAST (_tmp32_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 6409 "ViewCollection.c"
+ }
+#line 1061 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp33_ = to_hide;
+#line 1061 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp34_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp33_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 1061 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp35_ = _tmp34_;
+#line 1061 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp35_ > 0) {
+#line 6419 "ViewCollection.c"
+ GeeList* _tmp36_ = NULL;
+ GeeList* _tmp37_ = NULL;
+#line 1062 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp36_ = to_hide;
+#line 1062 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_notify_items_hidden (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp36_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 1063 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp37_ = to_hide;
+#line 1063 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_notify_items_visibility_changed (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp37_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 6430 "ViewCollection.c"
+ }
+#line 1030 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (unselected);
+#line 6434 "ViewCollection.c"
+}
+
+
+static void view_collection_show_items (ViewCollection* self, GeeList* to_show) {
+ GeeArrayList* added_selected = NULL;
+ GeeArrayList* _tmp0_ = NULL;
+ gint count = 0;
+ GeeList* _tmp1_ = NULL;
+ gint _tmp2_ = 0;
+ gint _tmp3_ = 0;
+ gboolean added = FALSE;
+ GeeList* _tmp21_ = NULL;
+ gboolean _tmp22_ = FALSE;
+ gboolean _tmp23_ = FALSE;
+ GeeArrayList* _tmp24_ = NULL;
+ GeeList* _tmp25_ = NULL;
+ gint _tmp26_ = 0;
+ gint _tmp27_ = 0;
+#line 1068 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 1068 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (GEE_IS_LIST (to_show));
+#line 1069 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = gee_array_list_new (TYPE_DATA_VIEW, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 1069 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ added_selected = _tmp0_;
+#line 1071 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = to_show;
+#line 1071 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 1071 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = _tmp2_;
+#line 1071 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ count = _tmp3_;
+#line 6469 "ViewCollection.c"
+ {
+ gint ctr = 0;
+#line 1072 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ctr = 0;
+#line 6474 "ViewCollection.c"
+ {
+ gboolean _tmp4_ = FALSE;
+#line 1072 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = TRUE;
+#line 1072 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ while (TRUE) {
+#line 6481 "ViewCollection.c"
+ gint _tmp6_ = 0;
+ gint _tmp7_ = 0;
+ DataView* view = NULL;
+ GeeList* _tmp8_ = NULL;
+ gint _tmp9_ = 0;
+ gpointer _tmp10_ = NULL;
+ DataView* _tmp11_ = NULL;
+ gboolean _tmp12_ = FALSE;
+ DataView* _tmp13_ = NULL;
+ DataView* _tmp14_ = NULL;
+ gboolean _tmp15_ = FALSE;
+#line 1072 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp4_) {
+#line 6495 "ViewCollection.c"
+ gint _tmp5_ = 0;
+#line 1072 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = ctr;
+#line 1072 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ctr = _tmp5_ + 1;
+#line 6501 "ViewCollection.c"
+ }
+#line 1072 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = FALSE;
+#line 1072 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = ctr;
+#line 1072 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = count;
+#line 1072 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!(_tmp6_ < _tmp7_)) {
+#line 1072 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 6513 "ViewCollection.c"
+ }
+#line 1073 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = to_show;
+#line 1073 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = ctr;
+#line 1073 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp10_ = gee_list_get (_tmp8_, _tmp9_);
+#line 1073 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view = (DataView*) _tmp10_;
+#line 1074 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp11_ = view;
+#line 1074 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp12_ = data_view_is_visible (_tmp11_);
+#line 1074 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _vala_assert (!_tmp12_, "!view.is_visible()");
+#line 1076 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp13_ = view;
+#line 1076 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ data_view_internal_set_visible (_tmp13_, TRUE);
+#line 1079 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp14_ = view;
+#line 1079 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp15_ = data_view_is_selected (_tmp14_);
+#line 1079 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp15_) {
+#line 6539 "ViewCollection.c"
+ DataSet* _tmp16_ = NULL;
+ DataView* _tmp17_ = NULL;
+ gboolean _tmp18_ = FALSE;
+ GeeArrayList* _tmp19_ = NULL;
+ DataView* _tmp20_ = NULL;
+#line 1080 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp16_ = self->priv->selected;
+#line 1080 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp17_ = view;
+#line 1080 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp18_ = data_set_contains (_tmp16_, G_TYPE_CHECK_INSTANCE_CAST (_tmp17_, TYPE_DATA_OBJECT, DataObject));
+#line 1080 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _vala_assert (!_tmp18_, "!selected.contains(view)");
+#line 1081 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp19_ = added_selected;
+#line 1081 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp20_ = view;
+#line 1081 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp19_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp20_);
+#line 6559 "ViewCollection.c"
+ }
+#line 1072 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (view);
+#line 6563 "ViewCollection.c"
+ }
+ }
+ }
+#line 1085 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp21_ = to_show;
+#line 1085 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp22_ = view_collection_add_many_visible (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp21_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 1085 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ added = _tmp22_;
+#line 1086 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp23_ = added;
+#line 1086 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _vala_assert (_tmp23_, "added");
+#line 1088 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp24_ = added_selected;
+#line 1088 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_add_many_selected (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp24_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 1090 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp25_ = to_show;
+#line 1090 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp26_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp25_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 1090 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp27_ = _tmp26_;
+#line 1090 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp27_ > 0) {
+#line 6589 "ViewCollection.c"
+ GeeList* _tmp28_ = NULL;
+ GeeList* _tmp29_ = NULL;
+#line 1091 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp28_ = to_show;
+#line 1091 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_notify_items_shown (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp28_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 1092 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp29_ = to_show;
+#line 1092 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_notify_items_visibility_changed (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp29_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 6600 "ViewCollection.c"
+ }
+#line 1068 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (added_selected);
+#line 6604 "ViewCollection.c"
+}
+
+
+gboolean view_collection_has_view_for_source (ViewCollection* self, DataSource* source) {
+ gboolean result = FALSE;
+ DataSource* _tmp0_ = NULL;
+ DataView* _tmp1_ = NULL;
+ DataView* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+#line 1097 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), FALSE);
+#line 1097 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_DATA_SOURCE (source), FALSE);
+#line 1098 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = source;
+#line 1098 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = view_collection_get_view_for_source (self, _tmp0_);
+#line 1098 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = _tmp1_;
+#line 1098 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = _tmp2_ != NULL;
+#line 1098 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp2_);
+#line 1098 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = _tmp3_;
+#line 1098 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 6632 "ViewCollection.c"
+}
+
+
+DataView* view_collection_get_view_for_source (ViewCollection* self, DataSource* source) {
+ DataView* result = NULL;
+ GeeHashMap* _tmp0_ = NULL;
+ DataSource* _tmp1_ = NULL;
+ gpointer _tmp2_ = NULL;
+#line 1102 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), NULL);
+#line 1102 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_DATA_SOURCE (source), NULL);
+#line 1103 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = self->priv->source_map;
+#line 1103 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = source;
+#line 1103 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = gee_abstract_map_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp1_);
+#line 1103 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = (DataView*) _tmp2_;
+#line 1103 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 6655 "ViewCollection.c"
+}
+
+
+gboolean view_collection_has_view_for_source_with_filtered (ViewCollection* self, DataSource* source) {
+ gboolean result = FALSE;
+ DataSource* _tmp0_ = NULL;
+ DataView* _tmp1_ = NULL;
+ DataView* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+#line 1107 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), FALSE);
+#line 1107 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_DATA_SOURCE (source), FALSE);
+#line 1108 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = source;
+#line 1108 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = view_collection_get_view_for_source_filtered (self, _tmp0_);
+#line 1108 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = _tmp1_;
+#line 1108 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = _tmp2_ != NULL;
+#line 1108 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp2_);
+#line 1108 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = _tmp3_;
+#line 1108 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 6683 "ViewCollection.c"
+}
+
+
+DataView* view_collection_get_view_for_source_filtered (ViewCollection* self, DataSource* source) {
+ DataView* result = NULL;
+ DataView* view = NULL;
+ GeeHashMap* _tmp0_ = NULL;
+ DataSource* _tmp1_ = NULL;
+ gpointer _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+ DataView* _tmp4_ = NULL;
+#line 1112 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), NULL);
+#line 1112 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_DATA_SOURCE (source), NULL);
+#line 1113 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = self->priv->source_map;
+#line 1113 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = source;
+#line 1113 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = gee_abstract_map_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp1_);
+#line 1113 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view = (DataView*) _tmp2_;
+#line 1115 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = view;
+#line 1115 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp4_ != NULL) {
+#line 6711 "ViewCollection.c"
+ DataView* _tmp5_ = NULL;
+ gboolean _tmp6_ = FALSE;
+#line 1115 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = view;
+#line 1115 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = view_collection_is_in_filter (self, _tmp5_);
+#line 1115 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = !_tmp6_;
+#line 6720 "ViewCollection.c"
+ } else {
+#line 1115 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = FALSE;
+#line 6724 "ViewCollection.c"
+ }
+#line 1115 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp3_) {
+#line 1116 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = NULL;
+#line 1116 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (view);
+#line 1116 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 6734 "ViewCollection.c"
+ }
+#line 1117 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = view;
+#line 1117 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 6740 "ViewCollection.c"
+}
+
+
+GeeCollection* view_collection_get_sources (ViewCollection* self) {
+ GeeCollection* result = NULL;
+ GeeHashMap* _tmp0_ = NULL;
+ GeeSet* _tmp1_ = NULL;
+ GeeSet* _tmp2_ = NULL;
+ GeeSet* _tmp3_ = NULL;
+ GeeSet* _tmp4_ = NULL;
+ GeeSet* _tmp5_ = NULL;
+ GeeCollection* _tmp6_ = NULL;
+#line 1121 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), NULL);
+#line 1122 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = self->priv->source_map;
+#line 1122 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = gee_abstract_map_get_keys (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_MAP, GeeMap));
+#line 1122 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = _tmp1_;
+#line 1122 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = _tmp2_;
+#line 1122 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = gee_set_get_read_only_view (_tmp3_);
+#line 1122 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = _tmp4_;
+#line 1122 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp5_, GEE_TYPE_COLLECTION, GeeCollection);
+#line 1122 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp3_);
+#line 1122 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = _tmp6_;
+#line 1122 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 6775 "ViewCollection.c"
+}
+
+
+gboolean view_collection_has_source_of_type (ViewCollection* self, GType t) {
+ gboolean result = FALSE;
+ GType _tmp0_ = 0UL;
+ gboolean _tmp1_ = FALSE;
+#line 1126 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), FALSE);
+#line 1127 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = t;
+#line 1127 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = g_type_is_a (_tmp0_, TYPE_DATA_SOURCE);
+#line 1127 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _vala_assert (_tmp1_, "t.is_a(typeof(DataSource))");
+#line 6791 "ViewCollection.c"
+ {
+ GeeIterator* _source_it = NULL;
+ GeeHashMap* _tmp2_ = NULL;
+ GeeSet* _tmp3_ = NULL;
+ GeeSet* _tmp4_ = NULL;
+ GeeSet* _tmp5_ = NULL;
+ GeeIterator* _tmp6_ = NULL;
+ GeeIterator* _tmp7_ = NULL;
+#line 1129 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = self->priv->source_map;
+#line 1129 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = gee_abstract_map_get_keys (G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, GEE_TYPE_MAP, GeeMap));
+#line 1129 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = _tmp3_;
+#line 1129 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = _tmp4_;
+#line 1129 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp5_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 1129 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = _tmp6_;
+#line 1129 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp5_);
+#line 1129 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _source_it = _tmp7_;
+#line 1129 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ while (TRUE) {
+#line 6818 "ViewCollection.c"
+ GeeIterator* _tmp8_ = NULL;
+ gboolean _tmp9_ = FALSE;
+ DataSource* source = NULL;
+ GeeIterator* _tmp10_ = NULL;
+ gpointer _tmp11_ = NULL;
+ DataSource* _tmp12_ = NULL;
+ GType _tmp13_ = 0UL;
+ GType _tmp14_ = 0UL;
+ gboolean _tmp15_ = FALSE;
+#line 1129 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = _source_it;
+#line 1129 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = gee_iterator_next (_tmp8_);
+#line 1129 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp9_) {
+#line 1129 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 6836 "ViewCollection.c"
+ }
+#line 1129 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp10_ = _source_it;
+#line 1129 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp11_ = gee_iterator_get (_tmp10_);
+#line 1129 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ source = (DataSource*) _tmp11_;
+#line 1130 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp12_ = source;
+#line 1130 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp13_ = G_TYPE_FROM_INSTANCE (G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, G_TYPE_OBJECT, GObject));
+#line 1130 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp14_ = t;
+#line 1130 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp15_ = g_type_is_a (_tmp13_, _tmp14_);
+#line 1130 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp15_) {
+#line 1131 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = TRUE;
+#line 1131 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (source);
+#line 1131 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_source_it);
+#line 1131 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 6862 "ViewCollection.c"
+ }
+#line 1129 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (source);
+#line 6866 "ViewCollection.c"
+ }
+#line 1129 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_source_it);
+#line 6870 "ViewCollection.c"
+ }
+#line 1134 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = FALSE;
+#line 1134 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 6876 "ViewCollection.c"
+}
+
+
+gint view_collection_get_sources_of_type_count (ViewCollection* self, GType t) {
+ gint result = 0;
+ GType _tmp0_ = 0UL;
+ gboolean _tmp1_ = FALSE;
+ gint count = 0;
+#line 1137 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), 0);
+#line 1138 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = t;
+#line 1138 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = g_type_is_a (_tmp0_, TYPE_DATA_SOURCE);
+#line 1138 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _vala_assert (_tmp1_, "t.is_a(typeof(DataSource))");
+#line 1140 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ count = 0;
+#line 6895 "ViewCollection.c"
+ {
+ GeeIterator* _object_it = NULL;
+ GeeCollection* _tmp2_ = NULL;
+ GeeCollection* _tmp3_ = NULL;
+ GeeIterator* _tmp4_ = NULL;
+ GeeIterator* _tmp5_ = NULL;
+#line 1141 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = data_collection_get_all (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 1141 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = _tmp2_;
+#line 1141 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 1141 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = _tmp4_;
+#line 1141 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp3_);
+#line 1141 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _object_it = _tmp5_;
+#line 1141 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ while (TRUE) {
+#line 6916 "ViewCollection.c"
+ GeeIterator* _tmp6_ = NULL;
+ gboolean _tmp7_ = FALSE;
+ DataObject* object = NULL;
+ GeeIterator* _tmp8_ = NULL;
+ gpointer _tmp9_ = NULL;
+ DataObject* _tmp10_ = NULL;
+ DataSource* _tmp11_ = NULL;
+ DataSource* _tmp12_ = NULL;
+ GType _tmp13_ = 0UL;
+ GType _tmp14_ = 0UL;
+ gboolean _tmp15_ = FALSE;
+ gboolean _tmp16_ = FALSE;
+#line 1141 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = _object_it;
+#line 1141 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = gee_iterator_next (_tmp6_);
+#line 1141 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp7_) {
+#line 1141 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 6937 "ViewCollection.c"
+ }
+#line 1141 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = _object_it;
+#line 1141 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = gee_iterator_get (_tmp8_);
+#line 1141 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ object = (DataObject*) _tmp9_;
+#line 1142 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp10_ = object;
+#line 1142 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp11_ = data_view_get_source (G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, TYPE_DATA_VIEW, DataView));
+#line 1142 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp12_ = _tmp11_;
+#line 1142 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp13_ = G_TYPE_FROM_INSTANCE (G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, G_TYPE_OBJECT, GObject));
+#line 1142 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp14_ = t;
+#line 1142 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp15_ = g_type_is_a (_tmp13_, _tmp14_);
+#line 1142 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp16_ = _tmp15_;
+#line 1142 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp12_);
+#line 1142 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp16_) {
+#line 6963 "ViewCollection.c"
+ gint _tmp17_ = 0;
+#line 1143 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp17_ = count;
+#line 1143 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ count = _tmp17_ + 1;
+#line 6969 "ViewCollection.c"
+ }
+#line 1141 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (object);
+#line 6973 "ViewCollection.c"
+ }
+#line 1141 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_object_it);
+#line 6977 "ViewCollection.c"
+ }
+#line 1146 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = count;
+#line 1146 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 6983 "ViewCollection.c"
+}
+
+
+GeeList* view_collection_get_sources_of_type (ViewCollection* self, GType t) {
+ GeeList* result = NULL;
+ GType _tmp0_ = 0UL;
+ gboolean _tmp1_ = FALSE;
+ GeeList* sources = NULL;
+#line 1149 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), NULL);
+#line 1150 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = t;
+#line 1150 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = g_type_is_a (_tmp0_, TYPE_DATA_SOURCE);
+#line 1150 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _vala_assert (_tmp1_, "t.is_a(typeof(DataSource))");
+#line 1152 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ sources = NULL;
+#line 7002 "ViewCollection.c"
+ {
+ GeeIterator* _object_it = NULL;
+ GeeCollection* _tmp2_ = NULL;
+ GeeCollection* _tmp3_ = NULL;
+ GeeIterator* _tmp4_ = NULL;
+ GeeIterator* _tmp5_ = NULL;
+#line 1153 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = data_collection_get_all (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 1153 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = _tmp2_;
+#line 1153 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 1153 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = _tmp4_;
+#line 1153 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp3_);
+#line 1153 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _object_it = _tmp5_;
+#line 1153 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ while (TRUE) {
+#line 7023 "ViewCollection.c"
+ GeeIterator* _tmp6_ = NULL;
+ gboolean _tmp7_ = FALSE;
+ DataObject* object = NULL;
+ GeeIterator* _tmp8_ = NULL;
+ gpointer _tmp9_ = NULL;
+ DataSource* source = NULL;
+ DataObject* _tmp10_ = NULL;
+ DataSource* _tmp11_ = NULL;
+ DataSource* _tmp12_ = NULL;
+ GType _tmp13_ = 0UL;
+ GType _tmp14_ = 0UL;
+ gboolean _tmp15_ = FALSE;
+#line 1153 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = _object_it;
+#line 1153 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = gee_iterator_next (_tmp6_);
+#line 1153 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp7_) {
+#line 1153 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 7044 "ViewCollection.c"
+ }
+#line 1153 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = _object_it;
+#line 1153 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = gee_iterator_get (_tmp8_);
+#line 1153 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ object = (DataObject*) _tmp9_;
+#line 1154 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp10_ = object;
+#line 1154 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp11_ = data_view_get_source (G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, TYPE_DATA_VIEW, DataView));
+#line 1154 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ source = _tmp11_;
+#line 1155 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp12_ = source;
+#line 1155 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp13_ = G_TYPE_FROM_INSTANCE (G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, G_TYPE_OBJECT, GObject));
+#line 1155 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp14_ = t;
+#line 1155 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp15_ = g_type_is_a (_tmp13_, _tmp14_);
+#line 1155 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp15_) {
+#line 7068 "ViewCollection.c"
+ GeeList* _tmp16_ = NULL;
+ GeeList* _tmp18_ = NULL;
+ DataSource* _tmp19_ = NULL;
+#line 1156 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp16_ = sources;
+#line 1156 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp16_ == NULL) {
+#line 7076 "ViewCollection.c"
+ GeeArrayList* _tmp17_ = NULL;
+#line 1157 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp17_ = gee_array_list_new (TYPE_DATA_SOURCE, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 1157 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (sources);
+#line 1157 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ sources = G_TYPE_CHECK_INSTANCE_CAST (_tmp17_, GEE_TYPE_LIST, GeeList);
+#line 7084 "ViewCollection.c"
+ }
+#line 1159 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp18_ = sources;
+#line 1159 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp19_ = source;
+#line 1159 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp18_, GEE_TYPE_COLLECTION, GeeCollection), _tmp19_);
+#line 7092 "ViewCollection.c"
+ }
+#line 1153 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (source);
+#line 1153 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (object);
+#line 7098 "ViewCollection.c"
+ }
+#line 1153 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_object_it);
+#line 7102 "ViewCollection.c"
+ }
+#line 1163 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = sources;
+#line 1163 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 7108 "ViewCollection.c"
+}
+
+
+GeeList* view_collection_get_selected_sources (ViewCollection* self) {
+ GeeList* result = NULL;
+ GeeList* sources = NULL;
+ GeeArrayList* _tmp0_ = NULL;
+ gint count = 0;
+ DataSet* _tmp1_ = NULL;
+ gint _tmp2_ = 0;
+#line 1166 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), NULL);
+#line 1167 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = gee_array_list_new (TYPE_DATA_SOURCE, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 1167 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ sources = G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_LIST, GeeList);
+#line 1169 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = self->priv->selected;
+#line 1169 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = data_set_get_count (_tmp1_);
+#line 1169 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ count = _tmp2_;
+#line 7131 "ViewCollection.c"
+ {
+ gint ctr = 0;
+#line 1170 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ctr = 0;
+#line 7136 "ViewCollection.c"
+ {
+ gboolean _tmp3_ = FALSE;
+#line 1170 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = TRUE;
+#line 1170 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ while (TRUE) {
+#line 7143 "ViewCollection.c"
+ gint _tmp5_ = 0;
+ gint _tmp6_ = 0;
+ GeeList* _tmp7_ = NULL;
+ DataSet* _tmp8_ = NULL;
+ gint _tmp9_ = 0;
+ DataObject* _tmp10_ = NULL;
+ DataView* _tmp11_ = NULL;
+ DataSource* _tmp12_ = NULL;
+ DataSource* _tmp13_ = NULL;
+#line 1170 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp3_) {
+#line 7155 "ViewCollection.c"
+ gint _tmp4_ = 0;
+#line 1170 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = ctr;
+#line 1170 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ctr = _tmp4_ + 1;
+#line 7161 "ViewCollection.c"
+ }
+#line 1170 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = FALSE;
+#line 1170 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = ctr;
+#line 1170 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = count;
+#line 1170 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!(_tmp5_ < _tmp6_)) {
+#line 1170 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 7173 "ViewCollection.c"
+ }
+#line 1171 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = sources;
+#line 1171 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = self->priv->selected;
+#line 1171 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = ctr;
+#line 1171 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp10_ = data_set_get_at (_tmp8_, _tmp9_);
+#line 1171 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp11_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, TYPE_DATA_VIEW, DataView);
+#line 1171 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp12_ = data_view_get_source (_tmp11_);
+#line 1171 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp13_ = _tmp12_;
+#line 1171 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, GEE_TYPE_COLLECTION, GeeCollection), _tmp13_);
+#line 1171 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp13_);
+#line 1171 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp11_);
+#line 7195 "ViewCollection.c"
+ }
+ }
+ }
+#line 1173 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = sources;
+#line 1173 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 7203 "ViewCollection.c"
+}
+
+
+DataSource* view_collection_get_selected_source_at (ViewCollection* self, gint index) {
+ DataSource* result = NULL;
+ DataObject* object = NULL;
+ DataSet* _tmp0_ = NULL;
+ gint _tmp1_ = 0;
+ DataObject* _tmp2_ = NULL;
+ DataSource* _tmp3_ = NULL;
+ DataObject* _tmp4_ = NULL;
+#line 1176 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), NULL);
+#line 1177 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = self->priv->selected;
+#line 1177 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = index;
+#line 1177 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = data_set_get_at (_tmp0_, _tmp1_);
+#line 1177 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ object = _tmp2_;
+#line 1179 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = object;
+#line 1179 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp4_ != NULL) {
+#line 7229 "ViewCollection.c"
+ DataObject* _tmp5_ = NULL;
+ DataSource* _tmp6_ = NULL;
+#line 1179 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = object;
+#line 1179 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = data_view_get_source (G_TYPE_CHECK_INSTANCE_CAST (_tmp5_, TYPE_DATA_VIEW, DataView));
+#line 1179 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp3_);
+#line 1179 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = _tmp6_;
+#line 7240 "ViewCollection.c"
+ } else {
+#line 1179 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp3_);
+#line 1179 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = NULL;
+#line 7246 "ViewCollection.c"
+ }
+#line 1179 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = _tmp3_;
+#line 1179 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (object);
+#line 1179 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 7254 "ViewCollection.c"
+}
+
+
+GeeList* view_collection_get_selected_sources_of_type (ViewCollection* self, GType t) {
+ GeeList* result = NULL;
+ GeeList* sources = NULL;
+#line 1182 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), NULL);
+#line 1183 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ sources = NULL;
+#line 7265 "ViewCollection.c"
+ {
+ GeeList* _view_list = NULL;
+ GeeList* _tmp0_ = NULL;
+ gint _view_size = 0;
+ GeeList* _tmp1_ = NULL;
+ gint _tmp2_ = 0;
+ gint _tmp3_ = 0;
+ gint _view_index = 0;
+#line 1184 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = view_collection_get_selected (self);
+#line 1184 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _view_list = _tmp0_;
+#line 1184 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = _view_list;
+#line 1184 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 1184 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = _tmp2_;
+#line 1184 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _view_size = _tmp3_;
+#line 1184 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _view_index = -1;
+#line 1184 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ while (TRUE) {
+#line 7290 "ViewCollection.c"
+ gint _tmp4_ = 0;
+ gint _tmp5_ = 0;
+ gint _tmp6_ = 0;
+ DataView* view = NULL;
+ GeeList* _tmp7_ = NULL;
+ gint _tmp8_ = 0;
+ gpointer _tmp9_ = NULL;
+ DataSource* source = NULL;
+ DataView* _tmp10_ = NULL;
+ DataSource* _tmp11_ = NULL;
+ DataSource* _tmp12_ = NULL;
+ GType _tmp13_ = 0UL;
+ GType _tmp14_ = 0UL;
+ gboolean _tmp15_ = FALSE;
+#line 1184 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = _view_index;
+#line 1184 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _view_index = _tmp4_ + 1;
+#line 1184 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = _view_index;
+#line 1184 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = _view_size;
+#line 1184 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!(_tmp5_ < _tmp6_)) {
+#line 1184 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 7317 "ViewCollection.c"
+ }
+#line 1184 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = _view_list;
+#line 1184 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = _view_index;
+#line 1184 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = gee_list_get (_tmp7_, _tmp8_);
+#line 1184 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view = (DataView*) _tmp9_;
+#line 1185 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp10_ = view;
+#line 1185 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp11_ = data_view_get_source (_tmp10_);
+#line 1185 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ source = _tmp11_;
+#line 1186 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp12_ = source;
+#line 1186 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp13_ = G_TYPE_FROM_INSTANCE (G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, G_TYPE_OBJECT, GObject));
+#line 1186 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp14_ = t;
+#line 1186 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp15_ = g_type_is_a (_tmp13_, _tmp14_);
+#line 1186 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp15_) {
+#line 7343 "ViewCollection.c"
+ GeeList* _tmp16_ = NULL;
+ GeeList* _tmp18_ = NULL;
+ DataSource* _tmp19_ = NULL;
+#line 1187 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp16_ = sources;
+#line 1187 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp16_ == NULL) {
+#line 7351 "ViewCollection.c"
+ GeeArrayList* _tmp17_ = NULL;
+#line 1188 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp17_ = gee_array_list_new (TYPE_DATA_SOURCE, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 1188 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (sources);
+#line 1188 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ sources = G_TYPE_CHECK_INSTANCE_CAST (_tmp17_, GEE_TYPE_LIST, GeeList);
+#line 7359 "ViewCollection.c"
+ }
+#line 1190 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp18_ = sources;
+#line 1190 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp19_ = source;
+#line 1190 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp18_, GEE_TYPE_COLLECTION, GeeCollection), _tmp19_);
+#line 7367 "ViewCollection.c"
+ }
+#line 1184 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (source);
+#line 1184 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (view);
+#line 7373 "ViewCollection.c"
+ }
+#line 1184 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_view_list);
+#line 7377 "ViewCollection.c"
+ }
+#line 1194 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = sources;
+#line 1194 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 7383 "ViewCollection.c"
+}
+
+
+gint view_collection_index_of_source (ViewCollection* self, DataSource* source) {
+ gint result = 0;
+ DataView* view = NULL;
+ DataSource* _tmp0_ = NULL;
+ DataView* _tmp1_ = NULL;
+ gint _tmp2_ = 0;
+ DataView* _tmp3_ = NULL;
+#line 1198 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), 0);
+#line 1198 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_DATA_SOURCE (source), 0);
+#line 1199 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = source;
+#line 1199 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = view_collection_get_view_for_source (self, _tmp0_);
+#line 1199 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view = _tmp1_;
+#line 1201 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = view;
+#line 1201 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp3_ != NULL) {
+#line 7408 "ViewCollection.c"
+ DataView* _tmp4_ = NULL;
+ gint _tmp5_ = 0;
+#line 1201 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = view;
+#line 1201 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = data_collection_index_of (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, TYPE_DATA_OBJECT, DataObject));
+#line 1201 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = _tmp5_;
+#line 7417 "ViewCollection.c"
+ } else {
+#line 1201 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = -1;
+#line 7421 "ViewCollection.c"
+ }
+#line 1201 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = _tmp2_;
+#line 1201 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (view);
+#line 1201 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 7429 "ViewCollection.c"
+}
+
+
+void view_collection_internal_notify_view_altered (ViewCollection* self, DataView* view) {
+ gboolean _tmp0_ = FALSE;
+#line 1205 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 1205 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_DATA_VIEW (view));
+#line 1206 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = data_collection_are_notifications_frozen (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 1206 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp0_) {
+#line 7443 "ViewCollection.c"
+ DataView* _tmp1_ = NULL;
+ DataView* _tmp2_ = NULL;
+ GeeCollection* _tmp3_ = NULL;
+ GeeCollection* _tmp4_ = NULL;
+#line 1207 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = view;
+#line 1207 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_notify_item_view_altered (self, _tmp1_);
+#line 1208 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = view;
+#line 1208 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = data_collection_get_singleton (G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, TYPE_DATA_OBJECT, DataObject));
+#line 1208 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_COLLECTION, GeeCollection);
+#line 1208 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_notify_views_altered (self, _tmp4_);
+#line 1208 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp4_);
+#line 7462 "ViewCollection.c"
+ } else {
+ GeeHashSet* _tmp5_ = NULL;
+ GeeHashSet* _tmp7_ = NULL;
+ DataView* _tmp8_ = NULL;
+#line 1210 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = self->priv->frozen_views_altered;
+#line 1210 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp5_ == NULL) {
+#line 7471 "ViewCollection.c"
+ GeeHashSet* _tmp6_ = NULL;
+#line 1211 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = gee_hash_set_new (TYPE_DATA_VIEW, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 1211 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (self->priv->frozen_views_altered);
+#line 1211 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->priv->frozen_views_altered = _tmp6_;
+#line 7479 "ViewCollection.c"
+ }
+#line 1212 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = self->priv->frozen_views_altered;
+#line 1212 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = view;
+#line 1212 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp8_);
+#line 7487 "ViewCollection.c"
+ }
+}
+
+
+void view_collection_internal_notify_geometry_altered (ViewCollection* self, DataView* view) {
+ gboolean _tmp0_ = FALSE;
+#line 1217 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (self));
+#line 1217 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_DATA_VIEW (view));
+#line 1218 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = data_collection_are_notifications_frozen (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 1218 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp0_) {
+#line 7502 "ViewCollection.c"
+ DataView* _tmp1_ = NULL;
+ DataView* _tmp2_ = NULL;
+ GeeCollection* _tmp3_ = NULL;
+ GeeCollection* _tmp4_ = NULL;
+#line 1219 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = view;
+#line 1219 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_notify_item_geometry_altered (self, _tmp1_);
+#line 1220 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = view;
+#line 1220 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = data_collection_get_singleton (G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, TYPE_DATA_OBJECT, DataObject));
+#line 1220 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_COLLECTION, GeeCollection);
+#line 1220 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_notify_geometries_altered (self, _tmp4_);
+#line 1220 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_tmp4_);
+#line 7521 "ViewCollection.c"
+ } else {
+ GeeHashSet* _tmp5_ = NULL;
+ GeeHashSet* _tmp7_ = NULL;
+ DataView* _tmp8_ = NULL;
+#line 1222 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = self->priv->frozen_geometries_altered;
+#line 1222 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp5_ == NULL) {
+#line 7530 "ViewCollection.c"
+ GeeHashSet* _tmp6_ = NULL;
+#line 1223 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = gee_hash_set_new (TYPE_DATA_VIEW, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 1223 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (self->priv->frozen_geometries_altered);
+#line 1223 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->priv->frozen_geometries_altered = _tmp6_;
+#line 7538 "ViewCollection.c"
+ }
+#line 1224 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = self->priv->frozen_geometries_altered;
+#line 1224 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = view;
+#line 1224 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp8_);
+#line 7546 "ViewCollection.c"
+ }
+}
+
+
+static void view_collection_real_notify_thawed (DataCollection* base) {
+ ViewCollection * self;
+ GeeHashSet* _tmp0_ = NULL;
+ GeeHashSet* _tmp9_ = NULL;
+#line 1228 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_VIEW_COLLECTION, ViewCollection);
+#line 1229 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = self->priv->frozen_views_altered;
+#line 1229 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp0_ != NULL) {
+#line 7561 "ViewCollection.c"
+ GeeHashSet* _tmp8_ = NULL;
+ {
+ GeeIterator* _view_it = NULL;
+ GeeHashSet* _tmp1_ = NULL;
+ GeeIterator* _tmp2_ = NULL;
+#line 1230 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = self->priv->frozen_views_altered;
+#line 1230 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = gee_abstract_collection_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection));
+#line 1230 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _view_it = _tmp2_;
+#line 1230 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ while (TRUE) {
+#line 7575 "ViewCollection.c"
+ GeeIterator* _tmp3_ = NULL;
+ gboolean _tmp4_ = FALSE;
+ DataView* view = NULL;
+ GeeIterator* _tmp5_ = NULL;
+ gpointer _tmp6_ = NULL;
+ DataView* _tmp7_ = NULL;
+#line 1230 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = _view_it;
+#line 1230 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = gee_iterator_next (_tmp3_);
+#line 1230 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp4_) {
+#line 1230 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 7590 "ViewCollection.c"
+ }
+#line 1230 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = _view_it;
+#line 1230 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = gee_iterator_get (_tmp5_);
+#line 1230 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view = (DataView*) _tmp6_;
+#line 1231 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = view;
+#line 1231 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_notify_item_view_altered (self, _tmp7_);
+#line 1230 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (view);
+#line 7604 "ViewCollection.c"
+ }
+#line 1230 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_view_it);
+#line 7608 "ViewCollection.c"
+ }
+#line 1232 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = self->priv->frozen_views_altered;
+#line 1232 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_notify_views_altered (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 1233 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (self->priv->frozen_views_altered);
+#line 1233 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->priv->frozen_views_altered = NULL;
+#line 7618 "ViewCollection.c"
+ }
+#line 1236 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = self->priv->frozen_geometries_altered;
+#line 1236 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (_tmp9_ != NULL) {
+#line 7624 "ViewCollection.c"
+ GeeHashSet* _tmp17_ = NULL;
+ {
+ GeeIterator* _view_it = NULL;
+ GeeHashSet* _tmp10_ = NULL;
+ GeeIterator* _tmp11_ = NULL;
+#line 1237 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp10_ = self->priv->frozen_geometries_altered;
+#line 1237 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp11_ = gee_abstract_collection_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection));
+#line 1237 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _view_it = _tmp11_;
+#line 1237 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ while (TRUE) {
+#line 7638 "ViewCollection.c"
+ GeeIterator* _tmp12_ = NULL;
+ gboolean _tmp13_ = FALSE;
+ DataView* view = NULL;
+ GeeIterator* _tmp14_ = NULL;
+ gpointer _tmp15_ = NULL;
+ DataView* _tmp16_ = NULL;
+#line 1237 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp12_ = _view_it;
+#line 1237 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp13_ = gee_iterator_next (_tmp12_);
+#line 1237 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!_tmp13_) {
+#line 1237 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ break;
+#line 7653 "ViewCollection.c"
+ }
+#line 1237 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp14_ = _view_it;
+#line 1237 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp15_ = gee_iterator_get (_tmp14_);
+#line 1237 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view = (DataView*) _tmp15_;
+#line 1238 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp16_ = view;
+#line 1238 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_notify_item_geometry_altered (self, _tmp16_);
+#line 1237 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (view);
+#line 7667 "ViewCollection.c"
+ }
+#line 1237 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (_view_it);
+#line 7671 "ViewCollection.c"
+ }
+#line 1239 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp17_ = self->priv->frozen_geometries_altered;
+#line 1239 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_notify_geometries_altered (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp17_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 1240 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (self->priv->frozen_geometries_altered);
+#line 1240 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->priv->frozen_geometries_altered = NULL;
+#line 7681 "ViewCollection.c"
+ }
+#line 1243 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ DATA_COLLECTION_CLASS (view_collection_parent_class)->notify_thawed (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 7685 "ViewCollection.c"
+}
+
+
+gboolean view_collection_are_items_filtered_out (ViewCollection* self) {
+ gboolean result = FALSE;
+ gint _tmp0_ = 0;
+ gint _tmp1_ = 0;
+#line 1246 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (self), FALSE);
+#line 1247 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = DATA_COLLECTION_CLASS (view_collection_parent_class)->get_count (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 1247 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = data_collection_get_count (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_COLLECTION, DataCollection));
+#line 1247 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = _tmp0_ != _tmp1_;
+#line 1247 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 7703 "ViewCollection.c"
+}
+
+
+static void view_collection_real_items_selected (ViewCollection* self, GeeIterable* selected) {
+#line 75 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (GEE_IS_ITERABLE (selected));
+#line 7710 "ViewCollection.c"
+}
+
+
+static void view_collection_real_items_unselected (ViewCollection* self, GeeIterable* unselected) {
+#line 79 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (GEE_IS_ITERABLE (unselected));
+#line 7717 "ViewCollection.c"
+}
+
+
+static void view_collection_real_items_state_changed (ViewCollection* self, GeeIterable* changed) {
+#line 83 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (GEE_IS_ITERABLE (changed));
+#line 7724 "ViewCollection.c"
+}
+
+
+static void view_collection_real_selection_group_altered (ViewCollection* self) {
+}
+
+
+static void view_collection_real_items_shown (ViewCollection* self, GeeCollection* visible) {
+#line 94 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (visible));
+#line 7735 "ViewCollection.c"
+}
+
+
+static void view_collection_real_items_hidden (ViewCollection* self, GeeCollection* hidden) {
+#line 98 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (hidden));
+#line 7742 "ViewCollection.c"
+}
+
+
+static void view_collection_real_items_visibility_changed (ViewCollection* self, GeeCollection* changed) {
+#line 102 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (changed));
+#line 7749 "ViewCollection.c"
+}
+
+
+static void view_collection_real_item_view_altered (ViewCollection* self, DataView* view) {
+#line 106 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_DATA_VIEW (view));
+#line 7756 "ViewCollection.c"
+}
+
+
+static void view_collection_real_item_geometry_altered (ViewCollection* self, DataView* view) {
+#line 110 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_DATA_VIEW (view));
+#line 7763 "ViewCollection.c"
+}
+
+
+static void view_collection_real_views_altered (ViewCollection* self, GeeCollection* views) {
+#line 113 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (views));
+#line 7770 "ViewCollection.c"
+}
+
+
+static void view_collection_real_geometries_altered (ViewCollection* self, GeeCollection* views) {
+#line 116 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (views));
+#line 7777 "ViewCollection.c"
+}
+
+
+static void view_collection_real_view_filter_installed (ViewCollection* self, ViewFilter* filer) {
+#line 119 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_FILTER (filer));
+#line 7784 "ViewCollection.c"
+}
+
+
+static void g_cclosure_user_marshal_VOID__VIEW_FILTER (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data) {
+ typedef void (*GMarshalFunc_VOID__VIEW_FILTER) (gpointer data1, gpointer arg_1, gpointer data2);
+ register GMarshalFunc_VOID__VIEW_FILTER callback;
+ register GCClosure * cc;
+ register gpointer data1;
+ register gpointer data2;
+ cc = (GCClosure *) closure;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (n_param_values == 2);
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (G_CCLOSURE_SWAP_DATA (closure)) {
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ data1 = closure->data;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ data2 = param_values->data[0].v_pointer;
+#line 7803 "ViewCollection.c"
+ } else {
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ data1 = param_values->data[0].v_pointer;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ data2 = closure->data;
+#line 7809 "ViewCollection.c"
+ }
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ callback = (GMarshalFunc_VOID__VIEW_FILTER) (marshal_data ? marshal_data : cc->callback);
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ callback (data1, value_get_view_filter (param_values + 1), data2);
+#line 7815 "ViewCollection.c"
+}
+
+
+static void view_collection_real_view_filter_removed (ViewCollection* self, ViewFilter* filer) {
+#line 122 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (IS_VIEW_FILTER (filer));
+#line 7822 "ViewCollection.c"
+}
+
+
+ViewCollectionMonitor* view_collection_monitor_construct (GType object_type) {
+ ViewCollectionMonitor* self = NULL;
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self = (ViewCollectionMonitor*) g_type_create_instance (object_type);
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return self;
+#line 7832 "ViewCollection.c"
+}
+
+
+ViewCollectionMonitor* view_collection_monitor_new (void) {
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return view_collection_monitor_construct (VIEW_COLLECTION_TYPE_MONITOR);
+#line 7839 "ViewCollection.c"
+}
+
+
+static void view_collection_value_monitor_init (GValue* value) {
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ value->data[0].v_pointer = NULL;
+#line 7846 "ViewCollection.c"
+}
+
+
+static void view_collection_value_monitor_free_value (GValue* value) {
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (value->data[0].v_pointer) {
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_monitor_unref (value->data[0].v_pointer);
+#line 7855 "ViewCollection.c"
+ }
+}
+
+
+static void view_collection_value_monitor_copy_value (const GValue* src_value, GValue* dest_value) {
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (src_value->data[0].v_pointer) {
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ dest_value->data[0].v_pointer = view_collection_monitor_ref (src_value->data[0].v_pointer);
+#line 7865 "ViewCollection.c"
+ } else {
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ dest_value->data[0].v_pointer = NULL;
+#line 7869 "ViewCollection.c"
+ }
+}
+
+
+static gpointer view_collection_value_monitor_peek_pointer (const GValue* value) {
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return value->data[0].v_pointer;
+#line 7877 "ViewCollection.c"
+}
+
+
+static gchar* view_collection_value_monitor_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (collect_values[0].v_pointer) {
+#line 7884 "ViewCollection.c"
+ ViewCollectionMonitor* object;
+ object = collect_values[0].v_pointer;
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (object->parent_instance.g_class == NULL) {
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+#line 7891 "ViewCollection.c"
+ } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+#line 7895 "ViewCollection.c"
+ }
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ value->data[0].v_pointer = view_collection_monitor_ref (object);
+#line 7899 "ViewCollection.c"
+ } else {
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ value->data[0].v_pointer = NULL;
+#line 7903 "ViewCollection.c"
+ }
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return NULL;
+#line 7907 "ViewCollection.c"
+}
+
+
+static gchar* view_collection_value_monitor_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+ ViewCollectionMonitor** object_p;
+ object_p = collect_values[0].v_pointer;
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!object_p) {
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+#line 7918 "ViewCollection.c"
+ }
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!value->data[0].v_pointer) {
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ *object_p = NULL;
+#line 7924 "ViewCollection.c"
+ } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ *object_p = value->data[0].v_pointer;
+#line 7928 "ViewCollection.c"
+ } else {
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ *object_p = view_collection_monitor_ref (value->data[0].v_pointer);
+#line 7932 "ViewCollection.c"
+ }
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return NULL;
+#line 7936 "ViewCollection.c"
+}
+
+
+GParamSpec* view_collection_param_spec_monitor (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
+ ViewCollectionParamSpecMonitor* spec;
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (g_type_is_a (object_type, VIEW_COLLECTION_TYPE_MONITOR), NULL);
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ G_PARAM_SPEC (spec)->value_type = object_type;
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return G_PARAM_SPEC (spec);
+#line 7950 "ViewCollection.c"
+}
+
+
+gpointer view_collection_value_get_monitor (const GValue* value) {
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VIEW_COLLECTION_TYPE_MONITOR), NULL);
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return value->data[0].v_pointer;
+#line 7959 "ViewCollection.c"
+}
+
+
+void view_collection_value_set_monitor (GValue* value, gpointer v_object) {
+ ViewCollectionMonitor* old;
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VIEW_COLLECTION_TYPE_MONITOR));
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ old = value->data[0].v_pointer;
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (v_object) {
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, VIEW_COLLECTION_TYPE_MONITOR));
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ value->data[0].v_pointer = v_object;
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_monitor_ref (value->data[0].v_pointer);
+#line 7979 "ViewCollection.c"
+ } else {
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ value->data[0].v_pointer = NULL;
+#line 7983 "ViewCollection.c"
+ }
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (old) {
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_monitor_unref (old);
+#line 7989 "ViewCollection.c"
+ }
+}
+
+
+void view_collection_value_take_monitor (GValue* value, gpointer v_object) {
+ ViewCollectionMonitor* old;
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VIEW_COLLECTION_TYPE_MONITOR));
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ old = value->data[0].v_pointer;
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (v_object) {
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, VIEW_COLLECTION_TYPE_MONITOR));
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ value->data[0].v_pointer = v_object;
+#line 8008 "ViewCollection.c"
+ } else {
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ value->data[0].v_pointer = NULL;
+#line 8012 "ViewCollection.c"
+ }
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (old) {
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_monitor_unref (old);
+#line 8018 "ViewCollection.c"
+ }
+}
+
+
+static void view_collection_monitor_class_init (ViewCollectionMonitorClass * klass) {
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_monitor_parent_class = g_type_class_peek_parent (klass);
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionMonitorClass *) klass)->finalize = view_collection_monitor_finalize;
+#line 8028 "ViewCollection.c"
+}
+
+
+static void view_collection_monitor_instance_init (ViewCollectionMonitor * self) {
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->ref_count = 1;
+#line 8035 "ViewCollection.c"
+}
+
+
+static void view_collection_monitor_finalize (ViewCollectionMonitor* obj) {
+ ViewCollectionMonitor * self;
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, VIEW_COLLECTION_TYPE_MONITOR, ViewCollectionMonitor);
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_handlers_destroy (self);
+#line 8045 "ViewCollection.c"
+}
+
+
+GType view_collection_monitor_get_type (void) {
+ static volatile gsize view_collection_monitor_type_id__volatile = 0;
+ if (g_once_init_enter (&view_collection_monitor_type_id__volatile)) {
+ static const GTypeValueTable g_define_type_value_table = { view_collection_value_monitor_init, view_collection_value_monitor_free_value, view_collection_value_monitor_copy_value, view_collection_value_monitor_peek_pointer, "p", view_collection_value_monitor_collect_value, "p", view_collection_value_monitor_lcopy_value };
+ static const GTypeInfo g_define_type_info = { sizeof (ViewCollectionMonitorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) view_collection_monitor_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ViewCollectionMonitor), 0, (GInstanceInitFunc) view_collection_monitor_instance_init, &g_define_type_value_table };
+ static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
+ GType view_collection_monitor_type_id;
+ view_collection_monitor_type_id = g_type_register_fundamental (g_type_fundamental_next (), "ViewCollectionMonitor", &g_define_type_info, &g_define_type_fundamental_info, 0);
+ g_once_init_leave (&view_collection_monitor_type_id__volatile, view_collection_monitor_type_id);
+ }
+ return view_collection_monitor_type_id__volatile;
+}
+
+
+gpointer view_collection_monitor_ref (gpointer instance) {
+ ViewCollectionMonitor* self;
+ self = instance;
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_atomic_int_inc (&self->ref_count);
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return instance;
+#line 8070 "ViewCollection.c"
+}
+
+
+void view_collection_monitor_unref (gpointer instance) {
+ ViewCollectionMonitor* self;
+ self = instance;
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (g_atomic_int_dec_and_test (&self->ref_count)) {
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ VIEW_COLLECTION_MONITOR_GET_CLASS (self)->finalize (self);
+#line 22 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_type_free_instance ((GTypeInstance *) self);
+#line 8083 "ViewCollection.c"
+ }
+}
+
+
+static void _view_collection_on_sources_added_data_collection_items_added (DataCollection* _sender, GeeIterable* added, gpointer self) {
+#line 44 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_on_sources_added ((ViewCollection*) self, _sender, added);
+#line 8091 "ViewCollection.c"
+}
+
+
+static void _view_collection_on_sources_removed_data_collection_items_removed (DataCollection* _sender, GeeIterable* removed, gpointer self) {
+#line 45 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_on_sources_removed ((ViewCollection*) self, removed);
+#line 8098 "ViewCollection.c"
+}
+
+
+static void _view_collection_on_sources_altered_data_collection_items_altered (DataCollection* _sender, GeeMap* items, gpointer self) {
+#line 46 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_on_sources_altered ((ViewCollection*) self, _sender, items);
+#line 8105 "ViewCollection.c"
+}
+
+
+static gpointer _view_manager_ref0 (gpointer self) {
+#line 35 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return self ? view_manager_ref (self) : NULL;
+#line 8112 "ViewCollection.c"
+}
+
+
+static gpointer _alteration_ref0 (gpointer self) {
+#line 36 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return self ? alteration_ref (self) : NULL;
+#line 8119 "ViewCollection.c"
+}
+
+
+static ViewCollectionMonitorImpl* view_collection_monitor_impl_construct (GType object_type, ViewCollection* owner, SourceCollection* sources, ViewManager* manager, Alteration* prereq) {
+ ViewCollectionMonitorImpl* self = NULL;
+ ViewCollection* _tmp0_ = NULL;
+ ViewCollection* _tmp1_ = NULL;
+ SourceCollection* _tmp2_ = NULL;
+ SourceCollection* _tmp3_ = NULL;
+ ViewManager* _tmp4_ = NULL;
+ ViewManager* _tmp5_ = NULL;
+ Alteration* _tmp6_ = NULL;
+ Alteration* _tmp7_ = NULL;
+ SourceCollection* _tmp8_ = NULL;
+ ViewCollection* _tmp9_ = NULL;
+ SourceCollection* _tmp10_ = NULL;
+ ViewCollection* _tmp11_ = NULL;
+ SourceCollection* _tmp12_ = NULL;
+ ViewCollection* _tmp13_ = NULL;
+#line 31 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_COLLECTION (owner), NULL);
+#line 31 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_SOURCE_COLLECTION (sources), NULL);
+#line 31 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_MANAGER (manager), NULL);
+#line 31 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail ((prereq == NULL) || IS_ALTERATION (prereq), NULL);
+#line 31 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self = (ViewCollectionMonitorImpl*) view_collection_monitor_construct (object_type);
+#line 33 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = owner;
+#line 33 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = _data_collection_ref0 (_tmp0_);
+#line 33 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _data_collection_unref0 (self->owner);
+#line 33 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->owner = _tmp1_;
+#line 34 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = sources;
+#line 34 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = _data_collection_ref0 (_tmp2_);
+#line 34 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _data_collection_unref0 (self->sources);
+#line 34 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->sources = _tmp3_;
+#line 35 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = manager;
+#line 35 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp5_ = _view_manager_ref0 (_tmp4_);
+#line 35 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _view_manager_unref0 (self->manager);
+#line 35 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->manager = _tmp5_;
+#line 36 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = prereq;
+#line 36 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = _alteration_ref0 (_tmp6_);
+#line 36 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _alteration_unref0 (self->prereq);
+#line 36 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->prereq = _tmp7_;
+#line 38 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp8_ = sources;
+#line 38 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp9_ = owner;
+#line 38 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_connect (G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, TYPE_DATA_COLLECTION, DataCollection), "items-added", (GCallback) _view_collection_on_sources_added_data_collection_items_added, _tmp9_);
+#line 39 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp10_ = sources;
+#line 39 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp11_ = owner;
+#line 39 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_connect (G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, TYPE_DATA_COLLECTION, DataCollection), "items-removed", (GCallback) _view_collection_on_sources_removed_data_collection_items_removed, _tmp11_);
+#line 40 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp12_ = sources;
+#line 40 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp13_ = owner;
+#line 40 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_connect (G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, TYPE_DATA_COLLECTION, DataCollection), "items-altered", (GCallback) _view_collection_on_sources_altered_data_collection_items_altered, _tmp13_);
+#line 31 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return self;
+#line 8201 "ViewCollection.c"
+}
+
+
+static ViewCollectionMonitorImpl* view_collection_monitor_impl_new (ViewCollection* owner, SourceCollection* sources, ViewManager* manager, Alteration* prereq) {
+#line 31 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return view_collection_monitor_impl_construct (VIEW_COLLECTION_TYPE_MONITOR_IMPL, owner, sources, manager, prereq);
+#line 8208 "ViewCollection.c"
+}
+
+
+static void view_collection_monitor_impl_class_init (ViewCollectionMonitorImplClass * klass) {
+#line 25 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_monitor_impl_parent_class = g_type_class_peek_parent (klass);
+#line 25 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionMonitorClass *) klass)->finalize = view_collection_monitor_impl_finalize;
+#line 8217 "ViewCollection.c"
+}
+
+
+static void view_collection_monitor_impl_instance_init (ViewCollectionMonitorImpl * self) {
+}
+
+
+static void view_collection_monitor_impl_finalize (ViewCollectionMonitor* obj) {
+ ViewCollectionMonitorImpl * self;
+ SourceCollection* _tmp0_ = NULL;
+ ViewCollection* _tmp1_ = NULL;
+ guint _tmp2_ = 0U;
+ SourceCollection* _tmp3_ = NULL;
+ ViewCollection* _tmp4_ = NULL;
+ guint _tmp5_ = 0U;
+ SourceCollection* _tmp6_ = NULL;
+ ViewCollection* _tmp7_ = NULL;
+ guint _tmp8_ = 0U;
+#line 25 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, VIEW_COLLECTION_TYPE_MONITOR_IMPL, ViewCollectionMonitorImpl);
+#line 44 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = self->sources;
+#line 44 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = self->owner;
+#line 44 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_parse_name ("items-added", TYPE_DATA_COLLECTION, &_tmp2_, NULL, FALSE);
+#line 44 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_handlers_disconnect_matched (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_DATA_COLLECTION, DataCollection), G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp2_, 0, NULL, (GCallback) _view_collection_on_sources_added_data_collection_items_added, _tmp1_);
+#line 45 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = self->sources;
+#line 45 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp4_ = self->owner;
+#line 45 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_parse_name ("items-removed", TYPE_DATA_COLLECTION, &_tmp5_, NULL, FALSE);
+#line 45 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_handlers_disconnect_matched (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, TYPE_DATA_COLLECTION, DataCollection), G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp5_, 0, NULL, (GCallback) _view_collection_on_sources_removed_data_collection_items_removed, _tmp4_);
+#line 46 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp6_ = self->sources;
+#line 46 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp7_ = self->owner;
+#line 46 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_parse_name ("items-altered", TYPE_DATA_COLLECTION, &_tmp8_, NULL, FALSE);
+#line 46 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_handlers_disconnect_matched (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, TYPE_DATA_COLLECTION, DataCollection), G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp8_, 0, NULL, (GCallback) _view_collection_on_sources_altered_data_collection_items_altered, _tmp7_);
+#line 26 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _data_collection_unref0 (self->owner);
+#line 27 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _data_collection_unref0 (self->sources);
+#line 28 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _view_manager_unref0 (self->manager);
+#line 29 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _alteration_unref0 (self->prereq);
+#line 25 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ VIEW_COLLECTION_MONITOR_CLASS (view_collection_monitor_impl_parent_class)->finalize (obj);
+#line 8272 "ViewCollection.c"
+}
+
+
+static GType view_collection_monitor_impl_get_type (void) {
+ static volatile gsize view_collection_monitor_impl_type_id__volatile = 0;
+ if (g_once_init_enter (&view_collection_monitor_impl_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (ViewCollectionMonitorImplClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) view_collection_monitor_impl_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ViewCollectionMonitorImpl), 0, (GInstanceInitFunc) view_collection_monitor_impl_instance_init, NULL };
+ GType view_collection_monitor_impl_type_id;
+ view_collection_monitor_impl_type_id = g_type_register_static (VIEW_COLLECTION_TYPE_MONITOR, "ViewCollectionMonitorImpl", &g_define_type_info, 0);
+ g_once_init_leave (&view_collection_monitor_impl_type_id__volatile, view_collection_monitor_impl_type_id);
+ }
+ return view_collection_monitor_impl_type_id__volatile;
+}
+
+
+static ViewCollectionToggleLists* view_collection_toggle_lists_construct (GType object_type) {
+ ViewCollectionToggleLists * self = NULL;
+#line 50 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self = (ViewCollectionToggleLists*) g_object_new (object_type, NULL);
+#line 50 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return self;
+#line 8294 "ViewCollection.c"
+}
+
+
+static ViewCollectionToggleLists* view_collection_toggle_lists_new (void) {
+#line 50 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return view_collection_toggle_lists_construct (VIEW_COLLECTION_TYPE_TOGGLE_LISTS);
+#line 8301 "ViewCollection.c"
+}
+
+
+static void view_collection_toggle_lists_class_init (ViewCollectionToggleListsClass * klass) {
+#line 50 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_toggle_lists_parent_class = g_type_class_peek_parent (klass);
+#line 50 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ G_OBJECT_CLASS (klass)->finalize = view_collection_toggle_lists_finalize;
+#line 8310 "ViewCollection.c"
+}
+
+
+static void view_collection_toggle_lists_instance_init (ViewCollectionToggleLists * self) {
+ GeeArrayList* _tmp0_ = NULL;
+ GeeArrayList* _tmp1_ = NULL;
+#line 51 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = gee_array_list_new (TYPE_DATA_VIEW, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 51 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->selected = _tmp0_;
+#line 52 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = gee_array_list_new (TYPE_DATA_VIEW, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 52 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->unselected = _tmp1_;
+#line 8325 "ViewCollection.c"
+}
+
+
+static void view_collection_toggle_lists_finalize (GObject* obj) {
+ ViewCollectionToggleLists * self;
+#line 50 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, VIEW_COLLECTION_TYPE_TOGGLE_LISTS, ViewCollectionToggleLists);
+#line 51 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (self->selected);
+#line 52 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (self->unselected);
+#line 50 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ G_OBJECT_CLASS (view_collection_toggle_lists_parent_class)->finalize (obj);
+#line 8339 "ViewCollection.c"
+}
+
+
+static GType view_collection_toggle_lists_get_type (void) {
+ static volatile gsize view_collection_toggle_lists_type_id__volatile = 0;
+ if (g_once_init_enter (&view_collection_toggle_lists_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (ViewCollectionToggleListsClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) view_collection_toggle_lists_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ViewCollectionToggleLists), 0, (GInstanceInitFunc) view_collection_toggle_lists_instance_init, NULL };
+ GType view_collection_toggle_lists_type_id;
+ view_collection_toggle_lists_type_id = g_type_register_static (G_TYPE_OBJECT, "ViewCollectionToggleLists", &g_define_type_info, 0);
+ g_once_init_leave (&view_collection_toggle_lists_type_id__volatile, view_collection_toggle_lists_type_id);
+ }
+ return view_collection_toggle_lists_type_id__volatile;
+}
+
+
+static void view_collection_class_init (ViewCollectionClass * klass) {
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_collection_parent_class = g_type_class_peek_parent (klass);
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((DataCollectionClass *) klass)->finalize = view_collection_finalize;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_type_class_add_private (klass, sizeof (ViewCollectionPrivate));
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionClass *) klass)->notify_items_selected_unselected = view_collection_real_notify_items_selected_unselected;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionClass *) klass)->notify_selection_group_altered = view_collection_real_notify_selection_group_altered;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionClass *) klass)->notify_item_view_altered = view_collection_real_notify_item_view_altered;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionClass *) klass)->notify_views_altered = view_collection_real_notify_views_altered;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionClass *) klass)->notify_item_geometry_altered = view_collection_real_notify_item_geometry_altered;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionClass *) klass)->notify_geometries_altered = view_collection_real_notify_geometries_altered;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionClass *) klass)->notify_items_shown = view_collection_real_notify_items_shown;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionClass *) klass)->notify_items_hidden = view_collection_real_notify_items_hidden;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionClass *) klass)->notify_items_visibility_changed = view_collection_real_notify_items_visibility_changed;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionClass *) klass)->notify_view_filter_installed = view_collection_real_notify_view_filter_installed;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionClass *) klass)->notify_view_filter_removed = view_collection_real_notify_view_filter_removed;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((DataCollectionClass *) klass)->clear = view_collection_real_clear;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((DataCollectionClass *) klass)->close = view_collection_real_close;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((DataCollectionClass *) klass)->valid_type = view_collection_real_valid_type;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((DataCollectionClass *) klass)->add = view_collection_real_add;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((DataCollectionClass *) klass)->add_many = view_collection_real_add_many;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((DataCollectionClass *) klass)->notify_items_added = view_collection_real_notify_items_added;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((DataCollectionClass *) klass)->notify_items_removed = view_collection_real_notify_items_removed;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((DataCollectionClass *) klass)->items_altered = view_collection_real_items_altered;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((DataCollectionClass *) klass)->set_comparator = view_collection_real_set_comparator;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((DataCollectionClass *) klass)->reset_comparator = view_collection_real_reset_comparator;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((DataCollectionClass *) klass)->get_all = view_collection_real_get_all;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((DataCollectionClass *) klass)->get_count = view_collection_real_get_count;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((DataCollectionClass *) klass)->get_at = view_collection_real_get_at;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((DataCollectionClass *) klass)->index_of = view_collection_real_index_of;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((DataCollectionClass *) klass)->contains = view_collection_real_contains;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionClass *) klass)->get_first = view_collection_real_get_first;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionClass *) klass)->get_first_unrejected = view_collection_real_get_first_unrejected;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionClass *) klass)->get_last = view_collection_real_get_last;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionClass *) klass)->get_next = view_collection_real_get_next;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionClass *) klass)->get_previous = view_collection_real_get_previous;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((DataCollectionClass *) klass)->notify_thawed = view_collection_real_notify_thawed;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionClass *) klass)->items_selected = view_collection_real_items_selected;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionClass *) klass)->items_unselected = view_collection_real_items_unselected;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionClass *) klass)->items_state_changed = view_collection_real_items_state_changed;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionClass *) klass)->selection_group_altered = view_collection_real_selection_group_altered;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionClass *) klass)->items_shown = view_collection_real_items_shown;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionClass *) klass)->items_hidden = view_collection_real_items_hidden;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionClass *) klass)->items_visibility_changed = view_collection_real_items_visibility_changed;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionClass *) klass)->item_view_altered = view_collection_real_item_view_altered;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionClass *) klass)->item_geometry_altered = view_collection_real_item_geometry_altered;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionClass *) klass)->views_altered = view_collection_real_views_altered;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionClass *) klass)->geometries_altered = view_collection_real_geometries_altered;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionClass *) klass)->view_filter_installed = view_collection_real_view_filter_installed;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewCollectionClass *) klass)->view_filter_removed = view_collection_real_view_filter_removed;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_new ("items_selected", TYPE_VIEW_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ViewCollectionClass, items_selected), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, GEE_TYPE_ITERABLE);
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_new ("items_unselected", TYPE_VIEW_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ViewCollectionClass, items_unselected), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, GEE_TYPE_ITERABLE);
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_new ("items_state_changed", TYPE_VIEW_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ViewCollectionClass, items_state_changed), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, GEE_TYPE_ITERABLE);
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_new ("selection_group_altered", TYPE_VIEW_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ViewCollectionClass, selection_group_altered), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_new ("items_shown", TYPE_VIEW_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ViewCollectionClass, items_shown), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, GEE_TYPE_COLLECTION);
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_new ("items_hidden", TYPE_VIEW_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ViewCollectionClass, items_hidden), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, GEE_TYPE_COLLECTION);
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_new ("items_visibility_changed", TYPE_VIEW_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ViewCollectionClass, items_visibility_changed), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, GEE_TYPE_COLLECTION);
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_new ("item_view_altered", TYPE_VIEW_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ViewCollectionClass, item_view_altered), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, TYPE_DATA_VIEW);
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_new ("item_geometry_altered", TYPE_VIEW_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ViewCollectionClass, item_geometry_altered), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, TYPE_DATA_VIEW);
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_new ("views_altered", TYPE_VIEW_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ViewCollectionClass, views_altered), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, GEE_TYPE_COLLECTION);
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_new ("geometries_altered", TYPE_VIEW_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ViewCollectionClass, geometries_altered), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, GEE_TYPE_COLLECTION);
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_new ("view_filter_installed", TYPE_VIEW_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ViewCollectionClass, view_filter_installed), NULL, NULL, g_cclosure_user_marshal_VOID__VIEW_FILTER, G_TYPE_NONE, 1, TYPE_VIEW_FILTER);
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_new ("view_filter_removed", TYPE_VIEW_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ViewCollectionClass, view_filter_removed), NULL, NULL, g_cclosure_user_marshal_VOID__VIEW_FILTER, G_TYPE_NONE, 1, TYPE_VIEW_FILTER);
+#line 8478 "ViewCollection.c"
+}
+
+
+static void view_collection_instance_init (ViewCollection * self) {
+ GeeHashMultiMap* _tmp0_ = NULL;
+ GeeHashSet* _tmp1_ = NULL;
+ DataSet* _tmp2_ = NULL;
+ GeeHashMap* _tmp3_ = NULL;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->priv = VIEW_COLLECTION_GET_PRIVATE (self);
+#line 59 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp0_ = gee_hash_multi_map_new (TYPE_SOURCE_COLLECTION, (GBoxedCopyFunc) data_collection_ref, data_collection_unref, VIEW_COLLECTION_TYPE_MONITOR_IMPL, (GBoxedCopyFunc) view_collection_monitor_ref, view_collection_monitor_unref, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 59 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->priv->monitors = _tmp0_;
+#line 61 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->priv->mirroring = NULL;
+#line 62 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->priv->mirroring_ctor = NULL;
+#line 63 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->priv->should_mirror = NULL;
+#line 64 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp1_ = gee_hash_set_new (TYPE_VIEW_FILTER, (GBoxedCopyFunc) view_filter_ref, view_filter_unref, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 64 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->priv->filters = G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_SET, GeeSet);
+#line 65 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp2_ = data_set_new ();
+#line 65 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->priv->selected = _tmp2_;
+#line 66 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->priv->visible = NULL;
+#line 67 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->priv->frozen_views_altered = NULL;
+#line 68 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->priv->frozen_geometries_altered = NULL;
+#line 72 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _tmp3_ = gee_hash_map_new (TYPE_DATA_SOURCE, (GBoxedCopyFunc) g_object_ref, g_object_unref, TYPE_DATA_VIEW, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 72 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->priv->source_map = _tmp3_;
+#line 8517 "ViewCollection.c"
+}
+
+
+static void view_collection_finalize (DataCollection* obj) {
+ ViewCollection * self;
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_VIEW_COLLECTION, ViewCollection);
+#line 59 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (self->priv->monitors);
+#line 61 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _data_collection_unref0 (self->priv->mirroring);
+#line 64 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (self->priv->filters);
+#line 65 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _data_set_unref0 (self->priv->selected);
+#line 66 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _data_set_unref0 (self->priv->visible);
+#line 67 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (self->priv->frozen_views_altered);
+#line 68 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (self->priv->frozen_geometries_altered);
+#line 72 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ _g_object_unref0 (self->priv->source_map);
+#line 21 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ DATA_COLLECTION_CLASS (view_collection_parent_class)->finalize (obj);
+#line 8543 "ViewCollection.c"
+}
+
+
+GType view_collection_get_type (void) {
+ static volatile gsize view_collection_type_id__volatile = 0;
+ if (g_once_init_enter (&view_collection_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (ViewCollectionClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) view_collection_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ViewCollection), 0, (GInstanceInitFunc) view_collection_instance_init, NULL };
+ GType view_collection_type_id;
+ view_collection_type_id = g_type_register_static (TYPE_DATA_COLLECTION, "ViewCollection", &g_define_type_info, 0);
+ g_once_init_leave (&view_collection_type_id__volatile, view_collection_type_id);
+ }
+ return view_collection_type_id__volatile;
+}
+
+
+static gboolean view_manager_real_include_in_view (ViewManager* self, DataSource* source) {
+ gboolean result = FALSE;
+#line 1257 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_DATA_SOURCE (source), FALSE);
+#line 1258 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ result = TRUE;
+#line 1258 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return result;
+#line 8567 "ViewCollection.c"
+}
+
+
+gboolean view_manager_include_in_view (ViewManager* self, DataSource* source) {
+#line 1257 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_MANAGER (self), FALSE);
+#line 1257 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return VIEW_MANAGER_GET_CLASS (self)->include_in_view (self, source);
+#line 8576 "ViewCollection.c"
+}
+
+
+static DataView* view_manager_real_create_view (ViewManager* self, DataSource* source) {
+#line 1263 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_critical ("Type `%s' does not implement abstract method `view_manager_create_view'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+#line 1263 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return NULL;
+#line 8585 "ViewCollection.c"
+}
+
+
+DataView* view_manager_create_view (ViewManager* self, DataSource* source) {
+#line 1263 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_MANAGER (self), NULL);
+#line 1263 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return VIEW_MANAGER_GET_CLASS (self)->create_view (self, source);
+#line 8594 "ViewCollection.c"
+}
+
+
+ViewManager* view_manager_construct (GType object_type) {
+ ViewManager* self = NULL;
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self = (ViewManager*) g_type_create_instance (object_type);
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return self;
+#line 8604 "ViewCollection.c"
+}
+
+
+static void value_view_manager_init (GValue* value) {
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ value->data[0].v_pointer = NULL;
+#line 8611 "ViewCollection.c"
+}
+
+
+static void value_view_manager_free_value (GValue* value) {
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (value->data[0].v_pointer) {
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_manager_unref (value->data[0].v_pointer);
+#line 8620 "ViewCollection.c"
+ }
+}
+
+
+static void value_view_manager_copy_value (const GValue* src_value, GValue* dest_value) {
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (src_value->data[0].v_pointer) {
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ dest_value->data[0].v_pointer = view_manager_ref (src_value->data[0].v_pointer);
+#line 8630 "ViewCollection.c"
+ } else {
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ dest_value->data[0].v_pointer = NULL;
+#line 8634 "ViewCollection.c"
+ }
+}
+
+
+static gpointer value_view_manager_peek_pointer (const GValue* value) {
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return value->data[0].v_pointer;
+#line 8642 "ViewCollection.c"
+}
+
+
+static gchar* value_view_manager_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (collect_values[0].v_pointer) {
+#line 8649 "ViewCollection.c"
+ ViewManager* object;
+ object = collect_values[0].v_pointer;
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (object->parent_instance.g_class == NULL) {
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+#line 8656 "ViewCollection.c"
+ } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+#line 8660 "ViewCollection.c"
+ }
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ value->data[0].v_pointer = view_manager_ref (object);
+#line 8664 "ViewCollection.c"
+ } else {
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ value->data[0].v_pointer = NULL;
+#line 8668 "ViewCollection.c"
+ }
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return NULL;
+#line 8672 "ViewCollection.c"
+}
+
+
+static gchar* value_view_manager_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+ ViewManager** object_p;
+ object_p = collect_values[0].v_pointer;
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!object_p) {
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+#line 8683 "ViewCollection.c"
+ }
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!value->data[0].v_pointer) {
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ *object_p = NULL;
+#line 8689 "ViewCollection.c"
+ } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ *object_p = value->data[0].v_pointer;
+#line 8693 "ViewCollection.c"
+ } else {
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ *object_p = view_manager_ref (value->data[0].v_pointer);
+#line 8697 "ViewCollection.c"
+ }
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return NULL;
+#line 8701 "ViewCollection.c"
+}
+
+
+GParamSpec* param_spec_view_manager (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
+ ParamSpecViewManager* spec;
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (g_type_is_a (object_type, TYPE_VIEW_MANAGER), NULL);
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ G_PARAM_SPEC (spec)->value_type = object_type;
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return G_PARAM_SPEC (spec);
+#line 8715 "ViewCollection.c"
+}
+
+
+gpointer value_get_view_manager (const GValue* value) {
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_VIEW_MANAGER), NULL);
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return value->data[0].v_pointer;
+#line 8724 "ViewCollection.c"
+}
+
+
+void value_set_view_manager (GValue* value, gpointer v_object) {
+ ViewManager* old;
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_VIEW_MANAGER));
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ old = value->data[0].v_pointer;
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (v_object) {
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_VIEW_MANAGER));
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ value->data[0].v_pointer = v_object;
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_manager_ref (value->data[0].v_pointer);
+#line 8744 "ViewCollection.c"
+ } else {
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ value->data[0].v_pointer = NULL;
+#line 8748 "ViewCollection.c"
+ }
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (old) {
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_manager_unref (old);
+#line 8754 "ViewCollection.c"
+ }
+}
+
+
+void value_take_view_manager (GValue* value, gpointer v_object) {
+ ViewManager* old;
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_VIEW_MANAGER));
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ old = value->data[0].v_pointer;
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (v_object) {
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_VIEW_MANAGER));
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ value->data[0].v_pointer = v_object;
+#line 8773 "ViewCollection.c"
+ } else {
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ value->data[0].v_pointer = NULL;
+#line 8777 "ViewCollection.c"
+ }
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (old) {
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_manager_unref (old);
+#line 8783 "ViewCollection.c"
+ }
+}
+
+
+static void view_manager_class_init (ViewManagerClass * klass) {
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_manager_parent_class = g_type_class_peek_parent (klass);
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewManagerClass *) klass)->finalize = view_manager_finalize;
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewManagerClass *) klass)->include_in_view = view_manager_real_include_in_view;
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewManagerClass *) klass)->create_view = view_manager_real_create_view;
+#line 8797 "ViewCollection.c"
+}
+
+
+static void view_manager_instance_init (ViewManager * self) {
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->ref_count = 1;
+#line 8804 "ViewCollection.c"
+}
+
+
+static void view_manager_finalize (ViewManager* obj) {
+ ViewManager * self;
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_VIEW_MANAGER, ViewManager);
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_handlers_destroy (self);
+#line 8814 "ViewCollection.c"
+}
+
+
+GType view_manager_get_type (void) {
+ static volatile gsize view_manager_type_id__volatile = 0;
+ if (g_once_init_enter (&view_manager_type_id__volatile)) {
+ static const GTypeValueTable g_define_type_value_table = { value_view_manager_init, value_view_manager_free_value, value_view_manager_copy_value, value_view_manager_peek_pointer, "p", value_view_manager_collect_value, "p", value_view_manager_lcopy_value };
+ static const GTypeInfo g_define_type_info = { sizeof (ViewManagerClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) view_manager_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ViewManager), 0, (GInstanceInitFunc) view_manager_instance_init, &g_define_type_value_table };
+ static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
+ GType view_manager_type_id;
+ view_manager_type_id = g_type_register_fundamental (g_type_fundamental_next (), "ViewManager", &g_define_type_info, &g_define_type_fundamental_info, G_TYPE_FLAG_ABSTRACT);
+ g_once_init_leave (&view_manager_type_id__volatile, view_manager_type_id);
+ }
+ return view_manager_type_id__volatile;
+}
+
+
+gpointer view_manager_ref (gpointer instance) {
+ ViewManager* self;
+ self = instance;
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_atomic_int_inc (&self->ref_count);
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return instance;
+#line 8839 "ViewCollection.c"
+}
+
+
+void view_manager_unref (gpointer instance) {
+ ViewManager* self;
+ self = instance;
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (g_atomic_int_dec_and_test (&self->ref_count)) {
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ VIEW_MANAGER_GET_CLASS (self)->finalize (self);
+#line 1253 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_type_free_instance ((GTypeInstance *) self);
+#line 8852 "ViewCollection.c"
+ }
+}
+
+
+static gboolean view_filter_real_predicate (ViewFilter* self, DataView* view) {
+#line 1285 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_critical ("Type `%s' does not implement abstract method `view_filter_predicate'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+#line 1285 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return FALSE;
+#line 8862 "ViewCollection.c"
+}
+
+
+gboolean view_filter_predicate (ViewFilter* self, DataView* view) {
+#line 1285 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (IS_VIEW_FILTER (self), FALSE);
+#line 1285 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return VIEW_FILTER_GET_CLASS (self)->predicate (self, view);
+#line 8871 "ViewCollection.c"
+}
+
+
+ViewFilter* view_filter_construct (GType object_type) {
+ ViewFilter* self = NULL;
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self = (ViewFilter*) g_type_create_instance (object_type);
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return self;
+#line 8881 "ViewCollection.c"
+}
+
+
+static void view_filter_real_refresh (ViewFilter* self) {
+}
+
+
+static void value_view_filter_init (GValue* value) {
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ value->data[0].v_pointer = NULL;
+#line 8892 "ViewCollection.c"
+}
+
+
+static void value_view_filter_free_value (GValue* value) {
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (value->data[0].v_pointer) {
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_filter_unref (value->data[0].v_pointer);
+#line 8901 "ViewCollection.c"
+ }
+}
+
+
+static void value_view_filter_copy_value (const GValue* src_value, GValue* dest_value) {
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (src_value->data[0].v_pointer) {
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ dest_value->data[0].v_pointer = view_filter_ref (src_value->data[0].v_pointer);
+#line 8911 "ViewCollection.c"
+ } else {
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ dest_value->data[0].v_pointer = NULL;
+#line 8915 "ViewCollection.c"
+ }
+}
+
+
+static gpointer value_view_filter_peek_pointer (const GValue* value) {
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return value->data[0].v_pointer;
+#line 8923 "ViewCollection.c"
+}
+
+
+static gchar* value_view_filter_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (collect_values[0].v_pointer) {
+#line 8930 "ViewCollection.c"
+ ViewFilter* object;
+ object = collect_values[0].v_pointer;
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (object->parent_instance.g_class == NULL) {
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+#line 8937 "ViewCollection.c"
+ } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+#line 8941 "ViewCollection.c"
+ }
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ value->data[0].v_pointer = view_filter_ref (object);
+#line 8945 "ViewCollection.c"
+ } else {
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ value->data[0].v_pointer = NULL;
+#line 8949 "ViewCollection.c"
+ }
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return NULL;
+#line 8953 "ViewCollection.c"
+}
+
+
+static gchar* value_view_filter_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+ ViewFilter** object_p;
+ object_p = collect_values[0].v_pointer;
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!object_p) {
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+#line 8964 "ViewCollection.c"
+ }
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (!value->data[0].v_pointer) {
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ *object_p = NULL;
+#line 8970 "ViewCollection.c"
+ } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ *object_p = value->data[0].v_pointer;
+#line 8974 "ViewCollection.c"
+ } else {
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ *object_p = view_filter_ref (value->data[0].v_pointer);
+#line 8978 "ViewCollection.c"
+ }
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return NULL;
+#line 8982 "ViewCollection.c"
+}
+
+
+GParamSpec* param_spec_view_filter (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
+ ParamSpecViewFilter* spec;
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (g_type_is_a (object_type, TYPE_VIEW_FILTER), NULL);
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ G_PARAM_SPEC (spec)->value_type = object_type;
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return G_PARAM_SPEC (spec);
+#line 8996 "ViewCollection.c"
+}
+
+
+gpointer value_get_view_filter (const GValue* value) {
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_VIEW_FILTER), NULL);
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return value->data[0].v_pointer;
+#line 9005 "ViewCollection.c"
+}
+
+
+void value_set_view_filter (GValue* value, gpointer v_object) {
+ ViewFilter* old;
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_VIEW_FILTER));
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ old = value->data[0].v_pointer;
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (v_object) {
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_VIEW_FILTER));
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ value->data[0].v_pointer = v_object;
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_filter_ref (value->data[0].v_pointer);
+#line 9025 "ViewCollection.c"
+ } else {
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ value->data[0].v_pointer = NULL;
+#line 9029 "ViewCollection.c"
+ }
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (old) {
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_filter_unref (old);
+#line 9035 "ViewCollection.c"
+ }
+}
+
+
+void value_take_view_filter (GValue* value, gpointer v_object) {
+ ViewFilter* old;
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_VIEW_FILTER));
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ old = value->data[0].v_pointer;
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (v_object) {
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_VIEW_FILTER));
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ value->data[0].v_pointer = v_object;
+#line 9054 "ViewCollection.c"
+ } else {
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ value->data[0].v_pointer = NULL;
+#line 9058 "ViewCollection.c"
+ }
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (old) {
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_filter_unref (old);
+#line 9064 "ViewCollection.c"
+ }
+}
+
+
+static void view_filter_class_init (ViewFilterClass * klass) {
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ view_filter_parent_class = g_type_class_peek_parent (klass);
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewFilterClass *) klass)->finalize = view_filter_finalize;
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewFilterClass *) klass)->predicate = view_filter_real_predicate;
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ ((ViewFilterClass *) klass)->refresh = view_filter_real_refresh;
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_new ("refresh", TYPE_VIEW_FILTER, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ViewFilterClass, refresh), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+#line 9080 "ViewCollection.c"
+}
+
+
+static void view_filter_instance_init (ViewFilter * self) {
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self->ref_count = 1;
+#line 9087 "ViewCollection.c"
+}
+
+
+static void view_filter_finalize (ViewFilter* obj) {
+ ViewFilter * self;
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_VIEW_FILTER, ViewFilter);
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_signal_handlers_destroy (self);
+#line 9097 "ViewCollection.c"
+}
+
+
+GType view_filter_get_type (void) {
+ static volatile gsize view_filter_type_id__volatile = 0;
+ if (g_once_init_enter (&view_filter_type_id__volatile)) {
+ static const GTypeValueTable g_define_type_value_table = { value_view_filter_init, value_view_filter_free_value, value_view_filter_copy_value, value_view_filter_peek_pointer, "p", value_view_filter_collect_value, "p", value_view_filter_lcopy_value };
+ static const GTypeInfo g_define_type_info = { sizeof (ViewFilterClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) view_filter_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ViewFilter), 0, (GInstanceInitFunc) view_filter_instance_init, &g_define_type_value_table };
+ static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
+ GType view_filter_type_id;
+ view_filter_type_id = g_type_register_fundamental (g_type_fundamental_next (), "ViewFilter", &g_define_type_info, &g_define_type_fundamental_info, G_TYPE_FLAG_ABSTRACT);
+ g_once_init_leave (&view_filter_type_id__volatile, view_filter_type_id);
+ }
+ return view_filter_type_id__volatile;
+}
+
+
+gpointer view_filter_ref (gpointer instance) {
+ ViewFilter* self;
+ self = instance;
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_atomic_int_inc (&self->ref_count);
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ return instance;
+#line 9122 "ViewCollection.c"
+}
+
+
+void view_filter_unref (gpointer instance) {
+ ViewFilter* self;
+ self = instance;
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ if (g_atomic_int_dec_and_test (&self->ref_count)) {
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ VIEW_FILTER_GET_CLASS (self)->finalize (self);
+#line 1278 "/home/jens/Source/shotwell/src/core/ViewCollection.vala"
+ g_type_free_instance ((GTypeInstance *) self);
+#line 9135 "ViewCollection.c"
+ }
+}
+
+
+
diff --git a/src/core/mk/core.mk b/src/core/mk/core.mk
deleted file mode 100644
index c35c93a..0000000
--- a/src/core/mk/core.mk
+++ /dev/null
@@ -1,43 +0,0 @@
-
-# UNIT_NAME is the Vala namespace. A file named UNIT_NAME.vala must be in this directory with
-# a init() and terminate() function declared in the namespace.
-UNIT_NAME := Core
-
-# UNIT_DIR should match the subdirectory the files are located in. Generally UNIT_NAME in all
-# lowercase. The name of this file should be UNIT_DIR.mk.
-UNIT_DIR := core
-
-# All Vala files in the unit should be listed here with no subdirectory prefix.
-#
-# NOTE: Do *not* include the unit's master file, i.e. UNIT_NAME.vala.
-UNIT_FILES := \
- DataCollection.vala \
- DataSet.vala \
- util.vala \
- SourceCollection.vala \
- SourceHoldingTank.vala \
- DatabaseSourceCollection.vala \
- ContainerSourceCollection.vala \
- ViewCollection.vala \
- DataObject.vala \
- Alteration.vala \
- DataSource.vala \
- DataSourceTypes.vala \
- DataView.vala \
- DataViewTypes.vala \
- Tracker.vala \
- SourceInterfaces.vala
-
-# Any unit this unit relies upon (and should be initialized before it's initialized) should
-# be listed here using its Vala namespace.
-#
-# NOTE: All units are assumed to rely upon the unit-unit. Do not include that here.
-UNIT_USES :=
-
-# List any additional files that are used in the build process as a part of this unit that should
-# be packaged in the tarball. File names should be relative to the unit's home directory.
-UNIT_RC :=
-
-# unitize.mk must be called at the end of each UNIT_DIR.mk file.
-include unitize.mk
-
diff --git a/src/core/util.c b/src/core/util.c
new file mode 100644
index 0000000..0088011
--- /dev/null
+++ b/src/core/util.c
@@ -0,0 +1,1791 @@
+/* util.c generated by valac 0.32.1, the Vala compiler
+ * generated from util.vala, do not modify */
+
+/* Copyright 2016 Software Freedom Conservancy Inc.
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later). See the COPYING file in this distribution.
+ */
+/* SingletonCollection is a read-only collection designed to hold exactly one item in it. This*/
+/* is far more efficient than creating a dummy collection (such as ArrayList) merely to pass around*/
+/* a single item, particularly for signals which require Iterables and Collections.*/
+/**/
+/* This collection cannot be used to store null.*/
+
+#include <glib.h>
+#include <glib-object.h>
+#include <gee.h>
+#include <stdlib.h>
+#include <string.h>
+#include <float.h>
+#include <math.h>
+#include <gobject/gvaluecollector.h>
+
+
+#define TYPE_SINGLETON_COLLECTION (singleton_collection_get_type ())
+#define SINGLETON_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SINGLETON_COLLECTION, SingletonCollection))
+#define SINGLETON_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SINGLETON_COLLECTION, SingletonCollectionClass))
+#define IS_SINGLETON_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SINGLETON_COLLECTION))
+#define IS_SINGLETON_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SINGLETON_COLLECTION))
+#define SINGLETON_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SINGLETON_COLLECTION, SingletonCollectionClass))
+
+typedef struct _SingletonCollection SingletonCollection;
+typedef struct _SingletonCollectionClass SingletonCollectionClass;
+typedef struct _SingletonCollectionPrivate SingletonCollectionPrivate;
+#define _g_destroy_func0(var) (((var == NULL) || (g_destroy_func == NULL)) ? NULL : (var = (g_destroy_func (var), NULL)))
+
+#define SINGLETON_COLLECTION_TYPE_SINGLETON_ITERATOR (singleton_collection_singleton_iterator_get_type ())
+#define SINGLETON_COLLECTION_SINGLETON_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SINGLETON_COLLECTION_TYPE_SINGLETON_ITERATOR, SingletonCollectionSingletonIterator))
+#define SINGLETON_COLLECTION_SINGLETON_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SINGLETON_COLLECTION_TYPE_SINGLETON_ITERATOR, SingletonCollectionSingletonIteratorClass))
+#define SINGLETON_COLLECTION_IS_SINGLETON_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SINGLETON_COLLECTION_TYPE_SINGLETON_ITERATOR))
+#define SINGLETON_COLLECTION_IS_SINGLETON_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SINGLETON_COLLECTION_TYPE_SINGLETON_ITERATOR))
+#define SINGLETON_COLLECTION_SINGLETON_ITERATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SINGLETON_COLLECTION_TYPE_SINGLETON_ITERATOR, SingletonCollectionSingletonIteratorClass))
+
+typedef struct _SingletonCollectionSingletonIterator SingletonCollectionSingletonIterator;
+typedef struct _SingletonCollectionSingletonIteratorClass SingletonCollectionSingletonIteratorClass;
+typedef struct _SingletonCollectionSingletonIteratorPrivate SingletonCollectionSingletonIteratorPrivate;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+
+#define TYPE_MARKER (marker_get_type ())
+#define MARKER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_MARKER, Marker))
+#define IS_MARKER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_MARKER))
+#define MARKER_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TYPE_MARKER, MarkerIface))
+
+typedef struct _Marker Marker;
+typedef struct _MarkerIface MarkerIface;
+
+#define TYPE_DATA_OBJECT (data_object_get_type ())
+#define DATA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATA_OBJECT, DataObject))
+#define DATA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATA_OBJECT, DataObjectClass))
+#define IS_DATA_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATA_OBJECT))
+#define IS_DATA_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATA_OBJECT))
+#define DATA_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATA_OBJECT, DataObjectClass))
+
+typedef struct _DataObject DataObject;
+typedef struct _DataObjectClass DataObjectClass;
+
+#define TYPE_UNKNOWN_TOTAL_MONITOR (unknown_total_monitor_get_type ())
+#define UNKNOWN_TOTAL_MONITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_UNKNOWN_TOTAL_MONITOR, UnknownTotalMonitor))
+#define UNKNOWN_TOTAL_MONITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_UNKNOWN_TOTAL_MONITOR, UnknownTotalMonitorClass))
+#define IS_UNKNOWN_TOTAL_MONITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_UNKNOWN_TOTAL_MONITOR))
+#define IS_UNKNOWN_TOTAL_MONITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_UNKNOWN_TOTAL_MONITOR))
+#define UNKNOWN_TOTAL_MONITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_UNKNOWN_TOTAL_MONITOR, UnknownTotalMonitorClass))
+
+typedef struct _UnknownTotalMonitor UnknownTotalMonitor;
+typedef struct _UnknownTotalMonitorClass UnknownTotalMonitorClass;
+typedef struct _UnknownTotalMonitorPrivate UnknownTotalMonitorPrivate;
+typedef struct _ParamSpecUnknownTotalMonitor ParamSpecUnknownTotalMonitor;
+
+#define TYPE_AGGREGATE_PROGRESS_MONITOR (aggregate_progress_monitor_get_type ())
+#define AGGREGATE_PROGRESS_MONITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_AGGREGATE_PROGRESS_MONITOR, AggregateProgressMonitor))
+#define AGGREGATE_PROGRESS_MONITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_AGGREGATE_PROGRESS_MONITOR, AggregateProgressMonitorClass))
+#define IS_AGGREGATE_PROGRESS_MONITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_AGGREGATE_PROGRESS_MONITOR))
+#define IS_AGGREGATE_PROGRESS_MONITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_AGGREGATE_PROGRESS_MONITOR))
+#define AGGREGATE_PROGRESS_MONITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_AGGREGATE_PROGRESS_MONITOR, AggregateProgressMonitorClass))
+
+typedef struct _AggregateProgressMonitor AggregateProgressMonitor;
+typedef struct _AggregateProgressMonitorClass AggregateProgressMonitorClass;
+typedef struct _AggregateProgressMonitorPrivate AggregateProgressMonitorPrivate;
+#define _g_free0(var) (var = (g_free (var), NULL))
+typedef struct _ParamSpecAggregateProgressMonitor ParamSpecAggregateProgressMonitor;
+
+struct _SingletonCollection {
+ GeeAbstractCollection parent_instance;
+ SingletonCollectionPrivate * priv;
+};
+
+struct _SingletonCollectionClass {
+ GeeAbstractCollectionClass parent_class;
+};
+
+struct _SingletonCollectionPrivate {
+ GType g_type;
+ GBoxedCopyFunc g_dup_func;
+ GDestroyNotify g_destroy_func;
+ gpointer object;
+};
+
+struct _SingletonCollectionSingletonIterator {
+ GObject parent_instance;
+ SingletonCollectionSingletonIteratorPrivate * priv;
+};
+
+struct _SingletonCollectionSingletonIteratorClass {
+ GObjectClass parent_class;
+};
+
+struct _SingletonCollectionSingletonIteratorPrivate {
+ GType g_type;
+ GBoxedCopyFunc g_dup_func;
+ GDestroyNotify g_destroy_func;
+ SingletonCollection* c;
+ gboolean done;
+ gpointer current;
+};
+
+struct _MarkerIface {
+ GTypeInterface parent_iface;
+ void (*mark) (Marker* self, DataObject* object);
+ void (*unmark) (Marker* self, DataObject* object);
+ gboolean (*toggle) (Marker* self, DataObject* object);
+ void (*mark_many) (Marker* self, GeeCollection* list);
+ void (*unmark_many) (Marker* self, GeeCollection* list);
+ void (*mark_all) (Marker* self);
+ gint (*get_count) (Marker* self);
+ GeeCollection* (*get_all) (Marker* self);
+};
+
+typedef gboolean (*MarkedAction) (DataObject* object, GObject* user, void* user_data);
+typedef gboolean (*ProgressMonitor) (guint64 current, guint64 total, gboolean do_event_loop, void* user_data);
+struct _UnknownTotalMonitor {
+ GTypeInstance parent_instance;
+ volatile int ref_count;
+ UnknownTotalMonitorPrivate * priv;
+};
+
+struct _UnknownTotalMonitorClass {
+ GTypeClass parent_class;
+ void (*finalize) (UnknownTotalMonitor *self);
+};
+
+struct _UnknownTotalMonitorPrivate {
+ guint64 total;
+ ProgressMonitor wrapped_monitor;
+ gpointer wrapped_monitor_target;
+};
+
+struct _ParamSpecUnknownTotalMonitor {
+ GParamSpec parent_instance;
+};
+
+struct _AggregateProgressMonitor {
+ GTypeInstance parent_instance;
+ volatile int ref_count;
+ AggregateProgressMonitorPrivate * priv;
+};
+
+struct _AggregateProgressMonitorClass {
+ GTypeClass parent_class;
+ void (*finalize) (AggregateProgressMonitor *self);
+};
+
+struct _AggregateProgressMonitorPrivate {
+ guint64 grand_total;
+ ProgressMonitor wrapped_monitor;
+ gpointer wrapped_monitor_target;
+ guint64 aggregate_count;
+ guint64 last_count;
+};
+
+struct _ParamSpecAggregateProgressMonitor {
+ GParamSpec parent_instance;
+};
+
+
+static gpointer singleton_collection_parent_class = NULL;
+static gpointer singleton_collection_singleton_iterator_parent_class = NULL;
+static GeeTraversableIface* singleton_collection_singleton_iterator_gee_traversable_parent_iface = NULL;
+static GeeIteratorIface* singleton_collection_singleton_iterator_gee_iterator_parent_iface = NULL;
+static gpointer unknown_total_monitor_parent_class = NULL;
+static gpointer aggregate_progress_monitor_parent_class = NULL;
+
+GType singleton_collection_get_type (void) G_GNUC_CONST;
+#define SINGLETON_COLLECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_SINGLETON_COLLECTION, SingletonCollectionPrivate))
+enum {
+ SINGLETON_COLLECTION_DUMMY_PROPERTY,
+ SINGLETON_COLLECTION_G_TYPE,
+ SINGLETON_COLLECTION_G_DUP_FUNC,
+ SINGLETON_COLLECTION_G_DESTROY_FUNC,
+ SINGLETON_COLLECTION_READ_ONLY,
+ SINGLETON_COLLECTION_SIZE
+};
+SingletonCollection* singleton_collection_new (GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, gconstpointer object);
+SingletonCollection* singleton_collection_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, gconstpointer object);
+static gboolean singleton_collection_real_add (GeeAbstractCollection* base, gconstpointer object);
+static void singleton_collection_real_clear (GeeAbstractCollection* base);
+static gboolean singleton_collection_real_contains (GeeAbstractCollection* base, gconstpointer object);
+static GeeIterator* singleton_collection_real_iterator (GeeAbstractCollection* base);
+static SingletonCollectionSingletonIterator* singleton_collection_singleton_iterator_new (GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, SingletonCollection* c);
+static SingletonCollectionSingletonIterator* singleton_collection_singleton_iterator_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, SingletonCollection* c);
+static GType singleton_collection_singleton_iterator_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
+static gboolean singleton_collection_real_remove (GeeAbstractCollection* base, gconstpointer item);
+#define SINGLETON_COLLECTION_SINGLETON_ITERATOR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), SINGLETON_COLLECTION_TYPE_SINGLETON_ITERATOR, SingletonCollectionSingletonIteratorPrivate))
+enum {
+ SINGLETON_COLLECTION_SINGLETON_ITERATOR_DUMMY_PROPERTY,
+ SINGLETON_COLLECTION_SINGLETON_ITERATOR_G_TYPE,
+ SINGLETON_COLLECTION_SINGLETON_ITERATOR_G_DUP_FUNC,
+ SINGLETON_COLLECTION_SINGLETON_ITERATOR_G_DESTROY_FUNC,
+ SINGLETON_COLLECTION_SINGLETON_ITERATOR_READ_ONLY,
+ SINGLETON_COLLECTION_SINGLETON_ITERATOR_VALID
+};
+static gboolean singleton_collection_singleton_iterator_real_foreach (GeeTraversable* base, GeeForallFunc f, void* f_target);
+static gpointer singleton_collection_singleton_iterator_real_get (GeeIterator* base);
+static gboolean singleton_collection_singleton_iterator_real_has_next (GeeIterator* base);
+static gboolean singleton_collection_singleton_iterator_real_next (GeeIterator* base);
+static void singleton_collection_singleton_iterator_real_remove (GeeIterator* base);
+static void singleton_collection_singleton_iterator_finalize (GObject* obj);
+static void _vala_singleton_collection_singleton_iterator_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
+static void _vala_singleton_collection_singleton_iterator_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
+static void singleton_collection_finalize (GObject* obj);
+static void _vala_singleton_collection_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
+static void _vala_singleton_collection_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
+GType data_object_get_type (void) G_GNUC_CONST;
+GType marker_get_type (void) G_GNUC_CONST;
+void marker_mark (Marker* self, DataObject* object);
+void marker_unmark (Marker* self, DataObject* object);
+gboolean marker_toggle (Marker* self, DataObject* object);
+void marker_mark_many (Marker* self, GeeCollection* list);
+void marker_unmark_many (Marker* self, GeeCollection* list);
+void marker_mark_all (Marker* self);
+gint marker_get_count (Marker* self);
+GeeCollection* marker_get_all (Marker* self);
+gpointer unknown_total_monitor_ref (gpointer instance);
+void unknown_total_monitor_unref (gpointer instance);
+GParamSpec* param_spec_unknown_total_monitor (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_unknown_total_monitor (GValue* value, gpointer v_object);
+void value_take_unknown_total_monitor (GValue* value, gpointer v_object);
+gpointer value_get_unknown_total_monitor (const GValue* value);
+GType unknown_total_monitor_get_type (void) G_GNUC_CONST;
+#define UNKNOWN_TOTAL_MONITOR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_UNKNOWN_TOTAL_MONITOR, UnknownTotalMonitorPrivate))
+enum {
+ UNKNOWN_TOTAL_MONITOR_DUMMY_PROPERTY
+};
+UnknownTotalMonitor* unknown_total_monitor_new (guint64 total, ProgressMonitor wrapped_monitor, void* wrapped_monitor_target);
+UnknownTotalMonitor* unknown_total_monitor_construct (GType object_type, guint64 total, ProgressMonitor wrapped_monitor, void* wrapped_monitor_target);
+gboolean unknown_total_monitor_monitor (UnknownTotalMonitor* self, guint64 count, guint64 total);
+static void unknown_total_monitor_finalize (UnknownTotalMonitor* obj);
+gpointer aggregate_progress_monitor_ref (gpointer instance);
+void aggregate_progress_monitor_unref (gpointer instance);
+GParamSpec* param_spec_aggregate_progress_monitor (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_aggregate_progress_monitor (GValue* value, gpointer v_object);
+void value_take_aggregate_progress_monitor (GValue* value, gpointer v_object);
+gpointer value_get_aggregate_progress_monitor (const GValue* value);
+GType aggregate_progress_monitor_get_type (void) G_GNUC_CONST;
+#define AGGREGATE_PROGRESS_MONITOR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_AGGREGATE_PROGRESS_MONITOR, AggregateProgressMonitorPrivate))
+enum {
+ AGGREGATE_PROGRESS_MONITOR_DUMMY_PROPERTY
+};
+AggregateProgressMonitor* aggregate_progress_monitor_new (guint64 grand_total, ProgressMonitor wrapped_monitor, void* wrapped_monitor_target);
+AggregateProgressMonitor* aggregate_progress_monitor_construct (GType object_type, guint64 grand_total, ProgressMonitor wrapped_monitor, void* wrapped_monitor_target);
+void aggregate_progress_monitor_next_step (AggregateProgressMonitor* self, const gchar* name);
+gboolean aggregate_progress_monitor_monitor (AggregateProgressMonitor* self, guint64 count, guint64 total);
+static void aggregate_progress_monitor_finalize (AggregateProgressMonitor* obj);
+gboolean null_progress_monitor (guint64 count, guint64 total);
+gdouble degrees_to_radians (gdouble theta);
+
+
+SingletonCollection* singleton_collection_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, gconstpointer object) {
+ SingletonCollection * self = NULL;
+ gconstpointer _tmp0_ = NULL;
+ gpointer _tmp1_ = NULL;
+#line 65 "/home/jens/Source/shotwell/src/core/util.vala"
+ self = (SingletonCollection*) gee_abstract_collection_construct (object_type, g_type, (GBoxedCopyFunc) g_dup_func, g_destroy_func);
+#line 65 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->g_type = g_type;
+#line 65 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->g_dup_func = g_dup_func;
+#line 65 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->g_destroy_func = g_destroy_func;
+#line 66 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp0_ = object;
+#line 66 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp1_ = ((_tmp0_ != NULL) && (g_dup_func != NULL)) ? g_dup_func ((gpointer) _tmp0_) : ((gpointer) _tmp0_);
+#line 66 "/home/jens/Source/shotwell/src/core/util.vala"
+ _g_destroy_func0 (self->priv->object);
+#line 66 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->object = _tmp1_;
+#line 65 "/home/jens/Source/shotwell/src/core/util.vala"
+ return self;
+#line 300 "util.c"
+}
+
+
+SingletonCollection* singleton_collection_new (GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, gconstpointer object) {
+#line 65 "/home/jens/Source/shotwell/src/core/util.vala"
+ return singleton_collection_construct (TYPE_SINGLETON_COLLECTION, g_type, g_dup_func, g_destroy_func, object);
+#line 307 "util.c"
+}
+
+
+static gboolean singleton_collection_real_add (GeeAbstractCollection* base, gconstpointer object) {
+ SingletonCollection * self;
+ gboolean result = FALSE;
+#line 73 "/home/jens/Source/shotwell/src/core/util.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_SINGLETON_COLLECTION, SingletonCollection);
+#line 74 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_warning ("util.vala:74: Cannot add to SingletonCollection");
+#line 76 "/home/jens/Source/shotwell/src/core/util.vala"
+ result = FALSE;
+#line 76 "/home/jens/Source/shotwell/src/core/util.vala"
+ return result;
+#line 322 "util.c"
+}
+
+
+static void singleton_collection_real_clear (GeeAbstractCollection* base) {
+ SingletonCollection * self;
+#line 79 "/home/jens/Source/shotwell/src/core/util.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_SINGLETON_COLLECTION, SingletonCollection);
+#line 80 "/home/jens/Source/shotwell/src/core/util.vala"
+ ((self->priv->object == NULL) || (self->priv->g_destroy_func == NULL)) ? NULL : (self->priv->object = (self->priv->g_destroy_func (self->priv->object), NULL));
+#line 80 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->object = NULL;
+#line 334 "util.c"
+}
+
+
+static gboolean singleton_collection_real_contains (GeeAbstractCollection* base, gconstpointer object) {
+ SingletonCollection * self;
+ gboolean result = FALSE;
+ gconstpointer _tmp0_ = NULL;
+ gconstpointer _tmp1_ = NULL;
+#line 83 "/home/jens/Source/shotwell/src/core/util.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_SINGLETON_COLLECTION, SingletonCollection);
+#line 84 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp0_ = self->priv->object;
+#line 84 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp1_ = object;
+#line 84 "/home/jens/Source/shotwell/src/core/util.vala"
+ result = _tmp0_ == _tmp1_;
+#line 84 "/home/jens/Source/shotwell/src/core/util.vala"
+ return result;
+#line 353 "util.c"
+}
+
+
+static GeeIterator* singleton_collection_real_iterator (GeeAbstractCollection* base) {
+ SingletonCollection * self;
+ GeeIterator* result = NULL;
+ SingletonCollectionSingletonIterator* _tmp0_ = NULL;
+#line 87 "/home/jens/Source/shotwell/src/core/util.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_SINGLETON_COLLECTION, SingletonCollection);
+#line 88 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp0_ = singleton_collection_singleton_iterator_new (self->priv->g_type, (GBoxedCopyFunc) self->priv->g_dup_func, self->priv->g_destroy_func, self);
+#line 88 "/home/jens/Source/shotwell/src/core/util.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_ITERATOR, GeeIterator);
+#line 88 "/home/jens/Source/shotwell/src/core/util.vala"
+ return result;
+#line 369 "util.c"
+}
+
+
+static gboolean singleton_collection_real_remove (GeeAbstractCollection* base, gconstpointer item) {
+ SingletonCollection * self;
+ gboolean result = FALSE;
+ gconstpointer _tmp0_ = NULL;
+ gconstpointer _tmp1_ = NULL;
+#line 91 "/home/jens/Source/shotwell/src/core/util.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_SINGLETON_COLLECTION, SingletonCollection);
+#line 92 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp0_ = item;
+#line 92 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp1_ = self->priv->object;
+#line 92 "/home/jens/Source/shotwell/src/core/util.vala"
+ if (_tmp0_ == _tmp1_) {
+#line 93 "/home/jens/Source/shotwell/src/core/util.vala"
+ ((self->priv->object == NULL) || (self->priv->g_destroy_func == NULL)) ? NULL : (self->priv->object = (self->priv->g_destroy_func (self->priv->object), NULL));
+#line 93 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->object = NULL;
+#line 95 "/home/jens/Source/shotwell/src/core/util.vala"
+ result = TRUE;
+#line 95 "/home/jens/Source/shotwell/src/core/util.vala"
+ return result;
+#line 394 "util.c"
+ }
+#line 98 "/home/jens/Source/shotwell/src/core/util.vala"
+ result = FALSE;
+#line 98 "/home/jens/Source/shotwell/src/core/util.vala"
+ return result;
+#line 400 "util.c"
+}
+
+
+static gboolean singleton_collection_real_get_read_only (GeeAbstractCollection* base) {
+ gboolean result;
+ SingletonCollection* self;
+#line 70 "/home/jens/Source/shotwell/src/core/util.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_SINGLETON_COLLECTION, SingletonCollection);
+#line 70 "/home/jens/Source/shotwell/src/core/util.vala"
+ result = FALSE;
+#line 70 "/home/jens/Source/shotwell/src/core/util.vala"
+ return result;
+#line 413 "util.c"
+}
+
+
+static gint singleton_collection_real_get_size (GeeAbstractCollection* base) {
+ gint result;
+ SingletonCollection* self;
+ gint _tmp0_ = 0;
+ gconstpointer _tmp1_ = NULL;
+#line 102 "/home/jens/Source/shotwell/src/core/util.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_SINGLETON_COLLECTION, SingletonCollection);
+#line 103 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp1_ = self->priv->object;
+#line 103 "/home/jens/Source/shotwell/src/core/util.vala"
+ if (_tmp1_ != NULL) {
+#line 103 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp0_ = 1;
+#line 430 "util.c"
+ } else {
+#line 103 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp0_ = 0;
+#line 434 "util.c"
+ }
+#line 103 "/home/jens/Source/shotwell/src/core/util.vala"
+ result = _tmp0_;
+#line 103 "/home/jens/Source/shotwell/src/core/util.vala"
+ return result;
+#line 440 "util.c"
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+#line 20 "/home/jens/Source/shotwell/src/core/util.vala"
+ return self ? g_object_ref (self) : NULL;
+#line 447 "util.c"
+}
+
+
+static SingletonCollectionSingletonIterator* singleton_collection_singleton_iterator_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, SingletonCollection* c) {
+ SingletonCollectionSingletonIterator * self = NULL;
+ SingletonCollection* _tmp0_ = NULL;
+ SingletonCollection* _tmp1_ = NULL;
+#line 19 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_return_val_if_fail (IS_SINGLETON_COLLECTION (c), NULL);
+#line 19 "/home/jens/Source/shotwell/src/core/util.vala"
+ self = (SingletonCollectionSingletonIterator*) g_object_new (object_type, NULL);
+#line 19 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->g_type = g_type;
+#line 19 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->g_dup_func = g_dup_func;
+#line 19 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->g_destroy_func = g_destroy_func;
+#line 20 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp0_ = c;
+#line 20 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp1_ = _g_object_ref0 (_tmp0_);
+#line 20 "/home/jens/Source/shotwell/src/core/util.vala"
+ _g_object_unref0 (self->priv->c);
+#line 20 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->c = _tmp1_;
+#line 19 "/home/jens/Source/shotwell/src/core/util.vala"
+ return self;
+#line 475 "util.c"
+}
+
+
+static SingletonCollectionSingletonIterator* singleton_collection_singleton_iterator_new (GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func, SingletonCollection* c) {
+#line 19 "/home/jens/Source/shotwell/src/core/util.vala"
+ return singleton_collection_singleton_iterator_construct (SINGLETON_COLLECTION_TYPE_SINGLETON_ITERATOR, g_type, g_dup_func, g_destroy_func, c);
+#line 482 "util.c"
+}
+
+
+static gboolean singleton_collection_singleton_iterator_real_foreach (GeeTraversable* base, GeeForallFunc f, void* f_target) {
+ SingletonCollectionSingletonIterator * self;
+ gboolean result = FALSE;
+ GeeForallFunc _tmp0_ = NULL;
+ void* _tmp0__target = NULL;
+ SingletonCollection* _tmp1_ = NULL;
+ gconstpointer _tmp2_ = NULL;
+ gpointer _tmp3_ = NULL;
+ gboolean _tmp4_ = FALSE;
+#line 31 "/home/jens/Source/shotwell/src/core/util.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, SINGLETON_COLLECTION_TYPE_SINGLETON_ITERATOR, SingletonCollectionSingletonIterator);
+#line 32 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp0_ = f;
+#line 32 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp0__target = f_target;
+#line 32 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp1_ = self->priv->c;
+#line 32 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp2_ = _tmp1_->priv->object;
+#line 32 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp3_ = ((_tmp2_ != NULL) && (self->priv->g_dup_func != NULL)) ? self->priv->g_dup_func ((gpointer) _tmp2_) : ((gpointer) _tmp2_);
+#line 32 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp4_ = _tmp0_ (_tmp3_, _tmp0__target);
+#line 32 "/home/jens/Source/shotwell/src/core/util.vala"
+ result = _tmp4_;
+#line 32 "/home/jens/Source/shotwell/src/core/util.vala"
+ return result;
+#line 513 "util.c"
+}
+
+
+static gpointer singleton_collection_singleton_iterator_real_get (GeeIterator* base) {
+ SingletonCollectionSingletonIterator * self;
+ gpointer result = NULL;
+ gconstpointer _tmp0_ = NULL;
+ gpointer _tmp1_ = NULL;
+#line 35 "/home/jens/Source/shotwell/src/core/util.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, SINGLETON_COLLECTION_TYPE_SINGLETON_ITERATOR, SingletonCollectionSingletonIterator);
+#line 36 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp0_ = self->priv->current;
+#line 36 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp1_ = ((_tmp0_ != NULL) && (self->priv->g_dup_func != NULL)) ? self->priv->g_dup_func ((gpointer) _tmp0_) : ((gpointer) _tmp0_);
+#line 36 "/home/jens/Source/shotwell/src/core/util.vala"
+ result = _tmp1_;
+#line 36 "/home/jens/Source/shotwell/src/core/util.vala"
+ return result;
+#line 532 "util.c"
+}
+
+
+static gboolean singleton_collection_singleton_iterator_real_has_next (GeeIterator* base) {
+ SingletonCollectionSingletonIterator * self;
+ gboolean result = FALSE;
+#line 39 "/home/jens/Source/shotwell/src/core/util.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, SINGLETON_COLLECTION_TYPE_SINGLETON_ITERATOR, SingletonCollectionSingletonIterator);
+#line 40 "/home/jens/Source/shotwell/src/core/util.vala"
+ result = FALSE;
+#line 40 "/home/jens/Source/shotwell/src/core/util.vala"
+ return result;
+#line 545 "util.c"
+}
+
+
+static gboolean singleton_collection_singleton_iterator_real_next (GeeIterator* base) {
+ SingletonCollectionSingletonIterator * self;
+ gboolean result = FALSE;
+ gboolean _tmp0_ = FALSE;
+ SingletonCollection* _tmp1_ = NULL;
+ gconstpointer _tmp2_ = NULL;
+ gpointer _tmp3_ = NULL;
+#line 43 "/home/jens/Source/shotwell/src/core/util.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, SINGLETON_COLLECTION_TYPE_SINGLETON_ITERATOR, SingletonCollectionSingletonIterator);
+#line 44 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp0_ = self->priv->done;
+#line 44 "/home/jens/Source/shotwell/src/core/util.vala"
+ if (_tmp0_) {
+#line 45 "/home/jens/Source/shotwell/src/core/util.vala"
+ result = FALSE;
+#line 45 "/home/jens/Source/shotwell/src/core/util.vala"
+ return result;
+#line 566 "util.c"
+ }
+#line 47 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->done = TRUE;
+#line 48 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp1_ = self->priv->c;
+#line 48 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp2_ = _tmp1_->priv->object;
+#line 48 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp3_ = ((_tmp2_ != NULL) && (self->priv->g_dup_func != NULL)) ? self->priv->g_dup_func ((gpointer) _tmp2_) : ((gpointer) _tmp2_);
+#line 48 "/home/jens/Source/shotwell/src/core/util.vala"
+ ((self->priv->current == NULL) || (self->priv->g_destroy_func == NULL)) ? NULL : (self->priv->current = (self->priv->g_destroy_func (self->priv->current), NULL));
+#line 48 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->current = _tmp3_;
+#line 50 "/home/jens/Source/shotwell/src/core/util.vala"
+ result = TRUE;
+#line 50 "/home/jens/Source/shotwell/src/core/util.vala"
+ return result;
+#line 584 "util.c"
+}
+
+
+static void singleton_collection_singleton_iterator_real_remove (GeeIterator* base) {
+ SingletonCollectionSingletonIterator * self;
+ gboolean _tmp0_ = FALSE;
+#line 53 "/home/jens/Source/shotwell/src/core/util.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, SINGLETON_COLLECTION_TYPE_SINGLETON_ITERATOR, SingletonCollectionSingletonIterator);
+#line 54 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp0_ = self->priv->done;
+#line 54 "/home/jens/Source/shotwell/src/core/util.vala"
+ if (!_tmp0_) {
+#line 597 "util.c"
+ SingletonCollection* _tmp1_ = NULL;
+#line 55 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp1_ = self->priv->c;
+#line 55 "/home/jens/Source/shotwell/src/core/util.vala"
+ ((_tmp1_->priv->object == NULL) || (self->priv->g_destroy_func == NULL)) ? NULL : (_tmp1_->priv->object = (self->priv->g_destroy_func (_tmp1_->priv->object), NULL));
+#line 55 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp1_->priv->object = NULL;
+#line 56 "/home/jens/Source/shotwell/src/core/util.vala"
+ ((self->priv->current == NULL) || (self->priv->g_destroy_func == NULL)) ? NULL : (self->priv->current = (self->priv->g_destroy_func (self->priv->current), NULL));
+#line 56 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->current = NULL;
+#line 609 "util.c"
+ }
+#line 59 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->done = TRUE;
+#line 613 "util.c"
+}
+
+
+static gboolean singleton_collection_singleton_iterator_real_get_read_only (GeeIterator* base) {
+ gboolean result;
+ SingletonCollectionSingletonIterator* self;
+ gboolean _tmp0_ = FALSE;
+#line 24 "/home/jens/Source/shotwell/src/core/util.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, SINGLETON_COLLECTION_TYPE_SINGLETON_ITERATOR, SingletonCollectionSingletonIterator);
+#line 24 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp0_ = self->priv->done;
+#line 24 "/home/jens/Source/shotwell/src/core/util.vala"
+ result = _tmp0_;
+#line 24 "/home/jens/Source/shotwell/src/core/util.vala"
+ return result;
+#line 629 "util.c"
+}
+
+
+static gboolean singleton_collection_singleton_iterator_real_get_valid (GeeIterator* base) {
+ gboolean result;
+ SingletonCollectionSingletonIterator* self;
+ gboolean _tmp0_ = FALSE;
+#line 28 "/home/jens/Source/shotwell/src/core/util.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, SINGLETON_COLLECTION_TYPE_SINGLETON_ITERATOR, SingletonCollectionSingletonIterator);
+#line 28 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp0_ = self->priv->done;
+#line 28 "/home/jens/Source/shotwell/src/core/util.vala"
+ result = _tmp0_;
+#line 28 "/home/jens/Source/shotwell/src/core/util.vala"
+ return result;
+#line 645 "util.c"
+}
+
+
+static void singleton_collection_singleton_iterator_class_init (SingletonCollectionSingletonIteratorClass * klass) {
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ singleton_collection_singleton_iterator_parent_class = g_type_class_peek_parent (klass);
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_type_class_add_private (klass, sizeof (SingletonCollectionSingletonIteratorPrivate));
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ G_OBJECT_CLASS (klass)->get_property = _vala_singleton_collection_singleton_iterator_get_property;
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ G_OBJECT_CLASS (klass)->set_property = _vala_singleton_collection_singleton_iterator_set_property;
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ G_OBJECT_CLASS (klass)->finalize = singleton_collection_singleton_iterator_finalize;
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_object_class_install_property (G_OBJECT_CLASS (klass), SINGLETON_COLLECTION_SINGLETON_ITERATOR_G_TYPE, g_param_spec_gtype ("g-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_object_class_install_property (G_OBJECT_CLASS (klass), SINGLETON_COLLECTION_SINGLETON_ITERATOR_G_DUP_FUNC, g_param_spec_pointer ("g-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_object_class_install_property (G_OBJECT_CLASS (klass), SINGLETON_COLLECTION_SINGLETON_ITERATOR_G_DESTROY_FUNC, g_param_spec_pointer ("g-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_object_class_install_property (G_OBJECT_CLASS (klass), SINGLETON_COLLECTION_SINGLETON_ITERATOR_READ_ONLY, g_param_spec_boolean ("read-only", "read-only", "read-only", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_object_class_install_property (G_OBJECT_CLASS (klass), SINGLETON_COLLECTION_SINGLETON_ITERATOR_VALID, g_param_spec_boolean ("valid", "valid", "valid", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
+#line 670 "util.c"
+}
+
+
+static GType singleton_collection_singleton_iterator_gee_traversable_get_g_type (SingletonCollectionSingletonIterator* self) {
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ return self->priv->g_type;
+#line 677 "util.c"
+}
+
+
+static GBoxedCopyFunc singleton_collection_singleton_iterator_gee_traversable_get_g_dup_func (SingletonCollectionSingletonIterator* self) {
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ return self->priv->g_dup_func;
+#line 684 "util.c"
+}
+
+
+static GDestroyNotify singleton_collection_singleton_iterator_gee_traversable_get_g_destroy_func (SingletonCollectionSingletonIterator* self) {
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ return self->priv->g_destroy_func;
+#line 691 "util.c"
+}
+
+
+static void singleton_collection_singleton_iterator_gee_traversable_interface_init (GeeTraversableIface * iface) {
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ singleton_collection_singleton_iterator_gee_traversable_parent_iface = g_type_interface_peek_parent (iface);
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ iface->foreach = (gboolean (*)(GeeTraversable*, GeeForallFunc, void*)) singleton_collection_singleton_iterator_real_foreach;
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ iface->get_g_type = (GType(*)(GeeTraversable*)) singleton_collection_singleton_iterator_gee_traversable_get_g_type;
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ iface->get_g_dup_func = (GBoxedCopyFunc(*)(GeeTraversable*)) singleton_collection_singleton_iterator_gee_traversable_get_g_dup_func;
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ iface->get_g_destroy_func = (GDestroyNotify(*)(GeeTraversable*)) singleton_collection_singleton_iterator_gee_traversable_get_g_destroy_func;
+#line 706 "util.c"
+}
+
+
+static void singleton_collection_singleton_iterator_gee_iterator_interface_init (GeeIteratorIface * iface) {
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ singleton_collection_singleton_iterator_gee_iterator_parent_iface = g_type_interface_peek_parent (iface);
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ iface->get = (gpointer (*)(GeeIterator*)) singleton_collection_singleton_iterator_real_get;
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ iface->has_next = (gboolean (*)(GeeIterator*)) singleton_collection_singleton_iterator_real_has_next;
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ iface->next = (gboolean (*)(GeeIterator*)) singleton_collection_singleton_iterator_real_next;
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ iface->remove = (void (*)(GeeIterator*)) singleton_collection_singleton_iterator_real_remove;
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ iface->get_read_only = singleton_collection_singleton_iterator_real_get_read_only;
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ iface->get_valid = singleton_collection_singleton_iterator_real_get_valid;
+#line 725 "util.c"
+}
+
+
+static void singleton_collection_singleton_iterator_instance_init (SingletonCollectionSingletonIterator * self) {
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv = SINGLETON_COLLECTION_SINGLETON_ITERATOR_GET_PRIVATE (self);
+#line 16 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->done = FALSE;
+#line 17 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->current = NULL;
+#line 736 "util.c"
+}
+
+
+static void singleton_collection_singleton_iterator_finalize (GObject* obj) {
+ SingletonCollectionSingletonIterator * self;
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, SINGLETON_COLLECTION_TYPE_SINGLETON_ITERATOR, SingletonCollectionSingletonIterator);
+#line 15 "/home/jens/Source/shotwell/src/core/util.vala"
+ _g_object_unref0 (self->priv->c);
+#line 17 "/home/jens/Source/shotwell/src/core/util.vala"
+ ((self->priv->current == NULL) || (self->priv->g_destroy_func == NULL)) ? NULL : (self->priv->current = (self->priv->g_destroy_func (self->priv->current), NULL));
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ G_OBJECT_CLASS (singleton_collection_singleton_iterator_parent_class)->finalize (obj);
+#line 750 "util.c"
+}
+
+
+static GType singleton_collection_singleton_iterator_get_type (void) {
+ static volatile gsize singleton_collection_singleton_iterator_type_id__volatile = 0;
+ if (g_once_init_enter (&singleton_collection_singleton_iterator_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (SingletonCollectionSingletonIteratorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) singleton_collection_singleton_iterator_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (SingletonCollectionSingletonIterator), 0, (GInstanceInitFunc) singleton_collection_singleton_iterator_instance_init, NULL };
+ static const GInterfaceInfo gee_traversable_info = { (GInterfaceInitFunc) singleton_collection_singleton_iterator_gee_traversable_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
+ static const GInterfaceInfo gee_iterator_info = { (GInterfaceInitFunc) singleton_collection_singleton_iterator_gee_iterator_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
+ GType singleton_collection_singleton_iterator_type_id;
+ singleton_collection_singleton_iterator_type_id = g_type_register_static (G_TYPE_OBJECT, "SingletonCollectionSingletonIterator", &g_define_type_info, 0);
+ g_type_add_interface_static (singleton_collection_singleton_iterator_type_id, GEE_TYPE_TRAVERSABLE, &gee_traversable_info);
+ g_type_add_interface_static (singleton_collection_singleton_iterator_type_id, GEE_TYPE_ITERATOR, &gee_iterator_info);
+ g_once_init_leave (&singleton_collection_singleton_iterator_type_id__volatile, singleton_collection_singleton_iterator_type_id);
+ }
+ return singleton_collection_singleton_iterator_type_id__volatile;
+}
+
+
+static void _vala_singleton_collection_singleton_iterator_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
+ SingletonCollectionSingletonIterator * self;
+ self = G_TYPE_CHECK_INSTANCE_CAST (object, SINGLETON_COLLECTION_TYPE_SINGLETON_ITERATOR, SingletonCollectionSingletonIterator);
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ switch (property_id) {
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ case SINGLETON_COLLECTION_SINGLETON_ITERATOR_READ_ONLY:
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_value_set_boolean (value, gee_iterator_get_read_only (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_ITERATOR, GeeIterator)));
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ break;
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ case SINGLETON_COLLECTION_SINGLETON_ITERATOR_VALID:
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_value_set_boolean (value, gee_iterator_get_valid (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_ITERATOR, GeeIterator)));
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ break;
+#line 787 "util.c"
+ default:
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ break;
+#line 793 "util.c"
+ }
+}
+
+
+static void _vala_singleton_collection_singleton_iterator_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
+ SingletonCollectionSingletonIterator * self;
+ self = G_TYPE_CHECK_INSTANCE_CAST (object, SINGLETON_COLLECTION_TYPE_SINGLETON_ITERATOR, SingletonCollectionSingletonIterator);
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ switch (property_id) {
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ case SINGLETON_COLLECTION_SINGLETON_ITERATOR_G_TYPE:
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->g_type = g_value_get_gtype (value);
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ break;
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ case SINGLETON_COLLECTION_SINGLETON_ITERATOR_G_DUP_FUNC:
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->g_dup_func = g_value_get_pointer (value);
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ break;
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ case SINGLETON_COLLECTION_SINGLETON_ITERATOR_G_DESTROY_FUNC:
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->g_destroy_func = g_value_get_pointer (value);
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ break;
+#line 821 "util.c"
+ default:
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+#line 14 "/home/jens/Source/shotwell/src/core/util.vala"
+ break;
+#line 827 "util.c"
+ }
+}
+
+
+static void singleton_collection_class_init (SingletonCollectionClass * klass) {
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ singleton_collection_parent_class = g_type_class_peek_parent (klass);
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_type_class_add_private (klass, sizeof (SingletonCollectionPrivate));
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ ((GeeAbstractCollectionClass *) klass)->add = singleton_collection_real_add;
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ ((GeeAbstractCollectionClass *) klass)->clear = singleton_collection_real_clear;
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ ((GeeAbstractCollectionClass *) klass)->contains = singleton_collection_real_contains;
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ ((GeeAbstractCollectionClass *) klass)->iterator = singleton_collection_real_iterator;
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ ((GeeAbstractCollectionClass *) klass)->remove = singleton_collection_real_remove;
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ GEE_ABSTRACT_COLLECTION_CLASS (klass)->get_read_only = singleton_collection_real_get_read_only;
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ GEE_ABSTRACT_COLLECTION_CLASS (klass)->get_size = singleton_collection_real_get_size;
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ G_OBJECT_CLASS (klass)->get_property = _vala_singleton_collection_get_property;
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ G_OBJECT_CLASS (klass)->set_property = _vala_singleton_collection_set_property;
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ G_OBJECT_CLASS (klass)->finalize = singleton_collection_finalize;
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_object_class_install_property (G_OBJECT_CLASS (klass), SINGLETON_COLLECTION_G_TYPE, g_param_spec_gtype ("g-type", "type", "type", G_TYPE_NONE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_object_class_install_property (G_OBJECT_CLASS (klass), SINGLETON_COLLECTION_G_DUP_FUNC, g_param_spec_pointer ("g-dup-func", "dup func", "dup func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_object_class_install_property (G_OBJECT_CLASS (klass), SINGLETON_COLLECTION_G_DESTROY_FUNC, g_param_spec_pointer ("g-destroy-func", "destroy func", "destroy func", G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_object_class_install_property (G_OBJECT_CLASS (klass), SINGLETON_COLLECTION_READ_ONLY, g_param_spec_boolean ("read-only", "read-only", "read-only", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_object_class_install_property (G_OBJECT_CLASS (klass), SINGLETON_COLLECTION_SIZE, g_param_spec_int ("size", "size", "size", G_MININT, G_MAXINT, 0, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
+#line 867 "util.c"
+}
+
+
+static void singleton_collection_instance_init (SingletonCollection * self) {
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv = SINGLETON_COLLECTION_GET_PRIVATE (self);
+#line 874 "util.c"
+}
+
+
+static void singleton_collection_finalize (GObject* obj) {
+ SingletonCollection * self;
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_SINGLETON_COLLECTION, SingletonCollection);
+#line 63 "/home/jens/Source/shotwell/src/core/util.vala"
+ ((self->priv->object == NULL) || (self->priv->g_destroy_func == NULL)) ? NULL : (self->priv->object = (self->priv->g_destroy_func (self->priv->object), NULL));
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ G_OBJECT_CLASS (singleton_collection_parent_class)->finalize (obj);
+#line 886 "util.c"
+}
+
+
+GType singleton_collection_get_type (void) {
+ static volatile gsize singleton_collection_type_id__volatile = 0;
+ if (g_once_init_enter (&singleton_collection_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (SingletonCollectionClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) singleton_collection_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (SingletonCollection), 0, (GInstanceInitFunc) singleton_collection_instance_init, NULL };
+ GType singleton_collection_type_id;
+ singleton_collection_type_id = g_type_register_static (GEE_TYPE_ABSTRACT_COLLECTION, "SingletonCollection", &g_define_type_info, 0);
+ g_once_init_leave (&singleton_collection_type_id__volatile, singleton_collection_type_id);
+ }
+ return singleton_collection_type_id__volatile;
+}
+
+
+static void _vala_singleton_collection_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
+ SingletonCollection * self;
+ self = G_TYPE_CHECK_INSTANCE_CAST (object, TYPE_SINGLETON_COLLECTION, SingletonCollection);
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ switch (property_id) {
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ case SINGLETON_COLLECTION_READ_ONLY:
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_value_set_boolean (value, gee_abstract_collection_get_read_only (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection)));
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ break;
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ case SINGLETON_COLLECTION_SIZE:
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_value_set_int (value, gee_abstract_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (self, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection)));
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ break;
+#line 919 "util.c"
+ default:
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ break;
+#line 925 "util.c"
+ }
+}
+
+
+static void _vala_singleton_collection_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
+ SingletonCollection * self;
+ self = G_TYPE_CHECK_INSTANCE_CAST (object, TYPE_SINGLETON_COLLECTION, SingletonCollection);
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ switch (property_id) {
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ case SINGLETON_COLLECTION_G_TYPE:
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->g_type = g_value_get_gtype (value);
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ break;
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ case SINGLETON_COLLECTION_G_DUP_FUNC:
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->g_dup_func = g_value_get_pointer (value);
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ break;
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ case SINGLETON_COLLECTION_G_DESTROY_FUNC:
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->g_destroy_func = g_value_get_pointer (value);
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ break;
+#line 953 "util.c"
+ default:
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+#line 13 "/home/jens/Source/shotwell/src/core/util.vala"
+ break;
+#line 959 "util.c"
+ }
+}
+
+
+void marker_mark (Marker* self, DataObject* object) {
+#line 113 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_return_if_fail (IS_MARKER (self));
+#line 113 "/home/jens/Source/shotwell/src/core/util.vala"
+ MARKER_GET_INTERFACE (self)->mark (self, object);
+#line 969 "util.c"
+}
+
+
+void marker_unmark (Marker* self, DataObject* object) {
+#line 115 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_return_if_fail (IS_MARKER (self));
+#line 115 "/home/jens/Source/shotwell/src/core/util.vala"
+ MARKER_GET_INTERFACE (self)->unmark (self, object);
+#line 978 "util.c"
+}
+
+
+gboolean marker_toggle (Marker* self, DataObject* object) {
+#line 117 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_return_val_if_fail (IS_MARKER (self), FALSE);
+#line 117 "/home/jens/Source/shotwell/src/core/util.vala"
+ return MARKER_GET_INTERFACE (self)->toggle (self, object);
+#line 987 "util.c"
+}
+
+
+void marker_mark_many (Marker* self, GeeCollection* list) {
+#line 119 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_return_if_fail (IS_MARKER (self));
+#line 119 "/home/jens/Source/shotwell/src/core/util.vala"
+ MARKER_GET_INTERFACE (self)->mark_many (self, list);
+#line 996 "util.c"
+}
+
+
+void marker_unmark_many (Marker* self, GeeCollection* list) {
+#line 121 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_return_if_fail (IS_MARKER (self));
+#line 121 "/home/jens/Source/shotwell/src/core/util.vala"
+ MARKER_GET_INTERFACE (self)->unmark_many (self, list);
+#line 1005 "util.c"
+}
+
+
+void marker_mark_all (Marker* self) {
+#line 123 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_return_if_fail (IS_MARKER (self));
+#line 123 "/home/jens/Source/shotwell/src/core/util.vala"
+ MARKER_GET_INTERFACE (self)->mark_all (self);
+#line 1014 "util.c"
+}
+
+
+gint marker_get_count (Marker* self) {
+#line 127 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_return_val_if_fail (IS_MARKER (self), 0);
+#line 127 "/home/jens/Source/shotwell/src/core/util.vala"
+ return MARKER_GET_INTERFACE (self)->get_count (self);
+#line 1023 "util.c"
+}
+
+
+GeeCollection* marker_get_all (Marker* self) {
+#line 130 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_return_val_if_fail (IS_MARKER (self), NULL);
+#line 130 "/home/jens/Source/shotwell/src/core/util.vala"
+ return MARKER_GET_INTERFACE (self)->get_all (self);
+#line 1032 "util.c"
+}
+
+
+static void marker_base_init (MarkerIface * iface) {
+#line 112 "/home/jens/Source/shotwell/src/core/util.vala"
+ static gboolean initialized = FALSE;
+#line 112 "/home/jens/Source/shotwell/src/core/util.vala"
+ if (!initialized) {
+#line 112 "/home/jens/Source/shotwell/src/core/util.vala"
+ initialized = TRUE;
+#line 1043 "util.c"
+ }
+}
+
+
+GType marker_get_type (void) {
+ static volatile gsize marker_type_id__volatile = 0;
+ if (g_once_init_enter (&marker_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (MarkerIface), (GBaseInitFunc) marker_base_init, (GBaseFinalizeFunc) NULL, (GClassInitFunc) NULL, (GClassFinalizeFunc) NULL, NULL, 0, 0, (GInstanceInitFunc) NULL, NULL };
+ GType marker_type_id;
+ marker_type_id = g_type_register_static (G_TYPE_INTERFACE, "Marker", &g_define_type_info, 0);
+ g_type_interface_add_prerequisite (marker_type_id, G_TYPE_OBJECT);
+ g_once_init_leave (&marker_type_id__volatile, marker_type_id);
+ }
+ return marker_type_id__volatile;
+}
+
+
+UnknownTotalMonitor* unknown_total_monitor_construct (GType object_type, guint64 total, ProgressMonitor wrapped_monitor, void* wrapped_monitor_target) {
+ UnknownTotalMonitor* self = NULL;
+ guint64 _tmp0_ = 0ULL;
+ ProgressMonitor _tmp1_ = NULL;
+ void* _tmp1__target = NULL;
+#line 147 "/home/jens/Source/shotwell/src/core/util.vala"
+ self = (UnknownTotalMonitor*) g_type_create_instance (object_type);
+#line 148 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp0_ = total;
+#line 148 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->total = _tmp0_;
+#line 149 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp1_ = wrapped_monitor;
+#line 149 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp1__target = wrapped_monitor_target;
+#line 149 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->wrapped_monitor = _tmp1_;
+#line 149 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->wrapped_monitor_target = _tmp1__target;
+#line 147 "/home/jens/Source/shotwell/src/core/util.vala"
+ return self;
+#line 1082 "util.c"
+}
+
+
+UnknownTotalMonitor* unknown_total_monitor_new (guint64 total, ProgressMonitor wrapped_monitor, void* wrapped_monitor_target) {
+#line 147 "/home/jens/Source/shotwell/src/core/util.vala"
+ return unknown_total_monitor_construct (TYPE_UNKNOWN_TOTAL_MONITOR, total, wrapped_monitor, wrapped_monitor_target);
+#line 1089 "util.c"
+}
+
+
+gboolean unknown_total_monitor_monitor (UnknownTotalMonitor* self, guint64 count, guint64 total) {
+ gboolean result = FALSE;
+ ProgressMonitor _tmp0_ = NULL;
+ void* _tmp0__target = NULL;
+ guint64 _tmp1_ = 0ULL;
+ guint64 _tmp2_ = 0ULL;
+ gboolean _tmp3_ = FALSE;
+#line 152 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_return_val_if_fail (IS_UNKNOWN_TOTAL_MONITOR (self), FALSE);
+#line 153 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp0_ = self->priv->wrapped_monitor;
+#line 153 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp0__target = self->priv->wrapped_monitor_target;
+#line 153 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp1_ = count;
+#line 153 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp2_ = self->priv->total;
+#line 153 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp3_ = _tmp0_ (_tmp1_, _tmp2_, TRUE, _tmp0__target);
+#line 153 "/home/jens/Source/shotwell/src/core/util.vala"
+ result = _tmp3_;
+#line 153 "/home/jens/Source/shotwell/src/core/util.vala"
+ return result;
+#line 1116 "util.c"
+}
+
+
+static void value_unknown_total_monitor_init (GValue* value) {
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ value->data[0].v_pointer = NULL;
+#line 1123 "util.c"
+}
+
+
+static void value_unknown_total_monitor_free_value (GValue* value) {
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ if (value->data[0].v_pointer) {
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ unknown_total_monitor_unref (value->data[0].v_pointer);
+#line 1132 "util.c"
+ }
+}
+
+
+static void value_unknown_total_monitor_copy_value (const GValue* src_value, GValue* dest_value) {
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ if (src_value->data[0].v_pointer) {
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ dest_value->data[0].v_pointer = unknown_total_monitor_ref (src_value->data[0].v_pointer);
+#line 1142 "util.c"
+ } else {
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ dest_value->data[0].v_pointer = NULL;
+#line 1146 "util.c"
+ }
+}
+
+
+static gpointer value_unknown_total_monitor_peek_pointer (const GValue* value) {
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ return value->data[0].v_pointer;
+#line 1154 "util.c"
+}
+
+
+static gchar* value_unknown_total_monitor_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ if (collect_values[0].v_pointer) {
+#line 1161 "util.c"
+ UnknownTotalMonitor* object;
+ object = collect_values[0].v_pointer;
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ if (object->parent_instance.g_class == NULL) {
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+#line 1168 "util.c"
+ } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+#line 1172 "util.c"
+ }
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ value->data[0].v_pointer = unknown_total_monitor_ref (object);
+#line 1176 "util.c"
+ } else {
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ value->data[0].v_pointer = NULL;
+#line 1180 "util.c"
+ }
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ return NULL;
+#line 1184 "util.c"
+}
+
+
+static gchar* value_unknown_total_monitor_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+ UnknownTotalMonitor** object_p;
+ object_p = collect_values[0].v_pointer;
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ if (!object_p) {
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+#line 1195 "util.c"
+ }
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ if (!value->data[0].v_pointer) {
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ *object_p = NULL;
+#line 1201 "util.c"
+ } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ *object_p = value->data[0].v_pointer;
+#line 1205 "util.c"
+ } else {
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ *object_p = unknown_total_monitor_ref (value->data[0].v_pointer);
+#line 1209 "util.c"
+ }
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ return NULL;
+#line 1213 "util.c"
+}
+
+
+GParamSpec* param_spec_unknown_total_monitor (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
+ ParamSpecUnknownTotalMonitor* spec;
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_return_val_if_fail (g_type_is_a (object_type, TYPE_UNKNOWN_TOTAL_MONITOR), NULL);
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ G_PARAM_SPEC (spec)->value_type = object_type;
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ return G_PARAM_SPEC (spec);
+#line 1227 "util.c"
+}
+
+
+gpointer value_get_unknown_total_monitor (const GValue* value) {
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_UNKNOWN_TOTAL_MONITOR), NULL);
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ return value->data[0].v_pointer;
+#line 1236 "util.c"
+}
+
+
+void value_set_unknown_total_monitor (GValue* value, gpointer v_object) {
+ UnknownTotalMonitor* old;
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_UNKNOWN_TOTAL_MONITOR));
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ old = value->data[0].v_pointer;
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ if (v_object) {
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_UNKNOWN_TOTAL_MONITOR));
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ value->data[0].v_pointer = v_object;
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ unknown_total_monitor_ref (value->data[0].v_pointer);
+#line 1256 "util.c"
+ } else {
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ value->data[0].v_pointer = NULL;
+#line 1260 "util.c"
+ }
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ if (old) {
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ unknown_total_monitor_unref (old);
+#line 1266 "util.c"
+ }
+}
+
+
+void value_take_unknown_total_monitor (GValue* value, gpointer v_object) {
+ UnknownTotalMonitor* old;
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_UNKNOWN_TOTAL_MONITOR));
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ old = value->data[0].v_pointer;
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ if (v_object) {
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_UNKNOWN_TOTAL_MONITOR));
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ value->data[0].v_pointer = v_object;
+#line 1285 "util.c"
+ } else {
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ value->data[0].v_pointer = NULL;
+#line 1289 "util.c"
+ }
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ if (old) {
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ unknown_total_monitor_unref (old);
+#line 1295 "util.c"
+ }
+}
+
+
+static void unknown_total_monitor_class_init (UnknownTotalMonitorClass * klass) {
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ unknown_total_monitor_parent_class = g_type_class_peek_parent (klass);
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ ((UnknownTotalMonitorClass *) klass)->finalize = unknown_total_monitor_finalize;
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_type_class_add_private (klass, sizeof (UnknownTotalMonitorPrivate));
+#line 1307 "util.c"
+}
+
+
+static void unknown_total_monitor_instance_init (UnknownTotalMonitor * self) {
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv = UNKNOWN_TOTAL_MONITOR_GET_PRIVATE (self);
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->ref_count = 1;
+#line 1316 "util.c"
+}
+
+
+static void unknown_total_monitor_finalize (UnknownTotalMonitor* obj) {
+ UnknownTotalMonitor * self;
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_UNKNOWN_TOTAL_MONITOR, UnknownTotalMonitor);
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_signal_handlers_destroy (self);
+#line 1326 "util.c"
+}
+
+
+GType unknown_total_monitor_get_type (void) {
+ static volatile gsize unknown_total_monitor_type_id__volatile = 0;
+ if (g_once_init_enter (&unknown_total_monitor_type_id__volatile)) {
+ static const GTypeValueTable g_define_type_value_table = { value_unknown_total_monitor_init, value_unknown_total_monitor_free_value, value_unknown_total_monitor_copy_value, value_unknown_total_monitor_peek_pointer, "p", value_unknown_total_monitor_collect_value, "p", value_unknown_total_monitor_lcopy_value };
+ static const GTypeInfo g_define_type_info = { sizeof (UnknownTotalMonitorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) unknown_total_monitor_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (UnknownTotalMonitor), 0, (GInstanceInitFunc) unknown_total_monitor_instance_init, &g_define_type_value_table };
+ static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
+ GType unknown_total_monitor_type_id;
+ unknown_total_monitor_type_id = g_type_register_fundamental (g_type_fundamental_next (), "UnknownTotalMonitor", &g_define_type_info, &g_define_type_fundamental_info, 0);
+ g_once_init_leave (&unknown_total_monitor_type_id__volatile, unknown_total_monitor_type_id);
+ }
+ return unknown_total_monitor_type_id__volatile;
+}
+
+
+gpointer unknown_total_monitor_ref (gpointer instance) {
+ UnknownTotalMonitor* self;
+ self = instance;
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_atomic_int_inc (&self->ref_count);
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ return instance;
+#line 1351 "util.c"
+}
+
+
+void unknown_total_monitor_unref (gpointer instance) {
+ UnknownTotalMonitor* self;
+ self = instance;
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ if (g_atomic_int_dec_and_test (&self->ref_count)) {
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ UNKNOWN_TOTAL_MONITOR_GET_CLASS (self)->finalize (self);
+#line 143 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_type_free_instance ((GTypeInstance *) self);
+#line 1364 "util.c"
+ }
+}
+
+
+AggregateProgressMonitor* aggregate_progress_monitor_construct (GType object_type, guint64 grand_total, ProgressMonitor wrapped_monitor, void* wrapped_monitor_target) {
+ AggregateProgressMonitor* self = NULL;
+ guint64 _tmp0_ = 0ULL;
+ ProgressMonitor _tmp1_ = NULL;
+ void* _tmp1__target = NULL;
+#line 165 "/home/jens/Source/shotwell/src/core/util.vala"
+ self = (AggregateProgressMonitor*) g_type_create_instance (object_type);
+#line 166 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp0_ = grand_total;
+#line 166 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->grand_total = _tmp0_;
+#line 167 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp1_ = wrapped_monitor;
+#line 167 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp1__target = wrapped_monitor_target;
+#line 167 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->wrapped_monitor = _tmp1_;
+#line 167 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->wrapped_monitor_target = _tmp1__target;
+#line 165 "/home/jens/Source/shotwell/src/core/util.vala"
+ return self;
+#line 1390 "util.c"
+}
+
+
+AggregateProgressMonitor* aggregate_progress_monitor_new (guint64 grand_total, ProgressMonitor wrapped_monitor, void* wrapped_monitor_target) {
+#line 165 "/home/jens/Source/shotwell/src/core/util.vala"
+ return aggregate_progress_monitor_construct (TYPE_AGGREGATE_PROGRESS_MONITOR, grand_total, wrapped_monitor, wrapped_monitor_target);
+#line 1397 "util.c"
+}
+
+
+void aggregate_progress_monitor_next_step (AggregateProgressMonitor* self, const gchar* name) {
+ const gchar* _tmp0_ = NULL;
+ guint64 _tmp1_ = 0ULL;
+ gchar* _tmp2_ = NULL;
+ gchar* _tmp3_ = NULL;
+ guint64 _tmp4_ = 0ULL;
+ gchar* _tmp5_ = NULL;
+ gchar* _tmp6_ = NULL;
+#line 170 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_return_if_fail (IS_AGGREGATE_PROGRESS_MONITOR (self));
+#line 170 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_return_if_fail (name != NULL);
+#line 171 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp0_ = name;
+#line 171 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp1_ = self->priv->aggregate_count;
+#line 171 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp2_ = g_strdup_printf ("%" G_GUINT64_FORMAT, _tmp1_);
+#line 171 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp3_ = _tmp2_;
+#line 171 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp4_ = self->priv->grand_total;
+#line 171 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp5_ = g_strdup_printf ("%" G_GUINT64_FORMAT, _tmp4_);
+#line 171 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp6_ = _tmp5_;
+#line 171 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_debug ("util.vala:171: next step: %s (%s/%s)", _tmp0_, _tmp3_, _tmp6_);
+#line 171 "/home/jens/Source/shotwell/src/core/util.vala"
+ _g_free0 (_tmp6_);
+#line 171 "/home/jens/Source/shotwell/src/core/util.vala"
+ _g_free0 (_tmp3_);
+#line 172 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->last_count = G_MAXUINT64;
+#line 1435 "util.c"
+}
+
+
+gboolean aggregate_progress_monitor_monitor (AggregateProgressMonitor* self, guint64 count, guint64 total) {
+ gboolean result = FALSE;
+ guint64 _tmp0_ = 0ULL;
+ guint64 _tmp1_ = 0ULL;
+ guint64 _tmp5_ = 0ULL;
+ guint64 _tmp6_ = 0ULL;
+ guint64 _tmp7_ = 0ULL;
+ guint64 _tmp9_ = 0ULL;
+ ProgressMonitor _tmp10_ = NULL;
+ void* _tmp10__target = NULL;
+ guint64 _tmp11_ = 0ULL;
+ guint64 _tmp12_ = 0ULL;
+ gboolean _tmp13_ = FALSE;
+#line 175 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_return_val_if_fail (IS_AGGREGATE_PROGRESS_MONITOR (self), FALSE);
+#line 177 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp1_ = self->priv->last_count;
+#line 177 "/home/jens/Source/shotwell/src/core/util.vala"
+ if (_tmp1_ != G_MAXUINT64) {
+#line 1458 "util.c"
+ guint64 _tmp2_ = 0ULL;
+ guint64 _tmp3_ = 0ULL;
+#line 177 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp2_ = count;
+#line 177 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp3_ = self->priv->last_count;
+#line 177 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp0_ = _tmp2_ - _tmp3_;
+#line 1467 "util.c"
+ } else {
+ guint64 _tmp4_ = 0ULL;
+#line 177 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp4_ = count;
+#line 177 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp0_ = _tmp4_;
+#line 1474 "util.c"
+ }
+#line 177 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp5_ = self->priv->aggregate_count;
+#line 177 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->aggregate_count = _tmp5_ + _tmp0_;
+#line 178 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp6_ = self->priv->aggregate_count;
+#line 178 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp7_ = self->priv->grand_total;
+#line 178 "/home/jens/Source/shotwell/src/core/util.vala"
+ if (_tmp6_ > _tmp7_) {
+#line 1486 "util.c"
+ guint64 _tmp8_ = 0ULL;
+#line 179 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp8_ = self->priv->grand_total;
+#line 179 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->aggregate_count = _tmp8_;
+#line 1492 "util.c"
+ }
+#line 182 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp9_ = count;
+#line 182 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->last_count = _tmp9_;
+#line 184 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp10_ = self->priv->wrapped_monitor;
+#line 184 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp10__target = self->priv->wrapped_monitor_target;
+#line 184 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp11_ = self->priv->aggregate_count;
+#line 184 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp12_ = self->priv->grand_total;
+#line 184 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp13_ = _tmp10_ (_tmp11_, _tmp12_, TRUE, _tmp10__target);
+#line 184 "/home/jens/Source/shotwell/src/core/util.vala"
+ result = _tmp13_;
+#line 184 "/home/jens/Source/shotwell/src/core/util.vala"
+ return result;
+#line 1512 "util.c"
+}
+
+
+static void value_aggregate_progress_monitor_init (GValue* value) {
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ value->data[0].v_pointer = NULL;
+#line 1519 "util.c"
+}
+
+
+static void value_aggregate_progress_monitor_free_value (GValue* value) {
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ if (value->data[0].v_pointer) {
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ aggregate_progress_monitor_unref (value->data[0].v_pointer);
+#line 1528 "util.c"
+ }
+}
+
+
+static void value_aggregate_progress_monitor_copy_value (const GValue* src_value, GValue* dest_value) {
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ if (src_value->data[0].v_pointer) {
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ dest_value->data[0].v_pointer = aggregate_progress_monitor_ref (src_value->data[0].v_pointer);
+#line 1538 "util.c"
+ } else {
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ dest_value->data[0].v_pointer = NULL;
+#line 1542 "util.c"
+ }
+}
+
+
+static gpointer value_aggregate_progress_monitor_peek_pointer (const GValue* value) {
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ return value->data[0].v_pointer;
+#line 1550 "util.c"
+}
+
+
+static gchar* value_aggregate_progress_monitor_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ if (collect_values[0].v_pointer) {
+#line 1557 "util.c"
+ AggregateProgressMonitor* object;
+ object = collect_values[0].v_pointer;
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ if (object->parent_instance.g_class == NULL) {
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+#line 1564 "util.c"
+ } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+#line 1568 "util.c"
+ }
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ value->data[0].v_pointer = aggregate_progress_monitor_ref (object);
+#line 1572 "util.c"
+ } else {
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ value->data[0].v_pointer = NULL;
+#line 1576 "util.c"
+ }
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ return NULL;
+#line 1580 "util.c"
+}
+
+
+static gchar* value_aggregate_progress_monitor_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+ AggregateProgressMonitor** object_p;
+ object_p = collect_values[0].v_pointer;
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ if (!object_p) {
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+#line 1591 "util.c"
+ }
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ if (!value->data[0].v_pointer) {
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ *object_p = NULL;
+#line 1597 "util.c"
+ } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ *object_p = value->data[0].v_pointer;
+#line 1601 "util.c"
+ } else {
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ *object_p = aggregate_progress_monitor_ref (value->data[0].v_pointer);
+#line 1605 "util.c"
+ }
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ return NULL;
+#line 1609 "util.c"
+}
+
+
+GParamSpec* param_spec_aggregate_progress_monitor (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
+ ParamSpecAggregateProgressMonitor* spec;
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_return_val_if_fail (g_type_is_a (object_type, TYPE_AGGREGATE_PROGRESS_MONITOR), NULL);
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ G_PARAM_SPEC (spec)->value_type = object_type;
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ return G_PARAM_SPEC (spec);
+#line 1623 "util.c"
+}
+
+
+gpointer value_get_aggregate_progress_monitor (const GValue* value) {
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_AGGREGATE_PROGRESS_MONITOR), NULL);
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ return value->data[0].v_pointer;
+#line 1632 "util.c"
+}
+
+
+void value_set_aggregate_progress_monitor (GValue* value, gpointer v_object) {
+ AggregateProgressMonitor* old;
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_AGGREGATE_PROGRESS_MONITOR));
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ old = value->data[0].v_pointer;
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ if (v_object) {
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_AGGREGATE_PROGRESS_MONITOR));
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ value->data[0].v_pointer = v_object;
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ aggregate_progress_monitor_ref (value->data[0].v_pointer);
+#line 1652 "util.c"
+ } else {
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ value->data[0].v_pointer = NULL;
+#line 1656 "util.c"
+ }
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ if (old) {
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ aggregate_progress_monitor_unref (old);
+#line 1662 "util.c"
+ }
+}
+
+
+void value_take_aggregate_progress_monitor (GValue* value, gpointer v_object) {
+ AggregateProgressMonitor* old;
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_AGGREGATE_PROGRESS_MONITOR));
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ old = value->data[0].v_pointer;
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ if (v_object) {
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_AGGREGATE_PROGRESS_MONITOR));
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ value->data[0].v_pointer = v_object;
+#line 1681 "util.c"
+ } else {
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ value->data[0].v_pointer = NULL;
+#line 1685 "util.c"
+ }
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ if (old) {
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ aggregate_progress_monitor_unref (old);
+#line 1691 "util.c"
+ }
+}
+
+
+static void aggregate_progress_monitor_class_init (AggregateProgressMonitorClass * klass) {
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ aggregate_progress_monitor_parent_class = g_type_class_peek_parent (klass);
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ ((AggregateProgressMonitorClass *) klass)->finalize = aggregate_progress_monitor_finalize;
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_type_class_add_private (klass, sizeof (AggregateProgressMonitorPrivate));
+#line 1703 "util.c"
+}
+
+
+static void aggregate_progress_monitor_instance_init (AggregateProgressMonitor * self) {
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv = AGGREGATE_PROGRESS_MONITOR_GET_PRIVATE (self);
+#line 162 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->aggregate_count = (guint64) 0;
+#line 163 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->priv->last_count = G_MAXUINT64;
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ self->ref_count = 1;
+#line 1716 "util.c"
+}
+
+
+static void aggregate_progress_monitor_finalize (AggregateProgressMonitor* obj) {
+ AggregateProgressMonitor * self;
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_AGGREGATE_PROGRESS_MONITOR, AggregateProgressMonitor);
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_signal_handlers_destroy (self);
+#line 1726 "util.c"
+}
+
+
+GType aggregate_progress_monitor_get_type (void) {
+ static volatile gsize aggregate_progress_monitor_type_id__volatile = 0;
+ if (g_once_init_enter (&aggregate_progress_monitor_type_id__volatile)) {
+ static const GTypeValueTable g_define_type_value_table = { value_aggregate_progress_monitor_init, value_aggregate_progress_monitor_free_value, value_aggregate_progress_monitor_copy_value, value_aggregate_progress_monitor_peek_pointer, "p", value_aggregate_progress_monitor_collect_value, "p", value_aggregate_progress_monitor_lcopy_value };
+ static const GTypeInfo g_define_type_info = { sizeof (AggregateProgressMonitorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) aggregate_progress_monitor_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (AggregateProgressMonitor), 0, (GInstanceInitFunc) aggregate_progress_monitor_instance_init, &g_define_type_value_table };
+ static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
+ GType aggregate_progress_monitor_type_id;
+ aggregate_progress_monitor_type_id = g_type_register_fundamental (g_type_fundamental_next (), "AggregateProgressMonitor", &g_define_type_info, &g_define_type_fundamental_info, 0);
+ g_once_init_leave (&aggregate_progress_monitor_type_id__volatile, aggregate_progress_monitor_type_id);
+ }
+ return aggregate_progress_monitor_type_id__volatile;
+}
+
+
+gpointer aggregate_progress_monitor_ref (gpointer instance) {
+ AggregateProgressMonitor* self;
+ self = instance;
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_atomic_int_inc (&self->ref_count);
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ return instance;
+#line 1751 "util.c"
+}
+
+
+void aggregate_progress_monitor_unref (gpointer instance) {
+ AggregateProgressMonitor* self;
+ self = instance;
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ if (g_atomic_int_dec_and_test (&self->ref_count)) {
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ AGGREGATE_PROGRESS_MONITOR_GET_CLASS (self)->finalize (self);
+#line 159 "/home/jens/Source/shotwell/src/core/util.vala"
+ g_type_free_instance ((GTypeInstance *) self);
+#line 1764 "util.c"
+ }
+}
+
+
+gboolean null_progress_monitor (guint64 count, guint64 total) {
+ gboolean result = FALSE;
+#line 190 "/home/jens/Source/shotwell/src/core/util.vala"
+ result = TRUE;
+#line 190 "/home/jens/Source/shotwell/src/core/util.vala"
+ return result;
+#line 1775 "util.c"
+}
+
+
+gdouble degrees_to_radians (gdouble theta) {
+ gdouble result = 0.0;
+ gdouble _tmp0_ = 0.0;
+#line 195 "/home/jens/Source/shotwell/src/core/util.vala"
+ _tmp0_ = theta;
+#line 195 "/home/jens/Source/shotwell/src/core/util.vala"
+ result = _tmp0_ * (G_PI / 180.0);
+#line 195 "/home/jens/Source/shotwell/src/core/util.vala"
+ return result;
+#line 1788 "util.c"
+}
+
+
+