summaryrefslogtreecommitdiff
path: root/src/Tag.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/Tag.c')
-rw-r--r--src/Tag.c9786
1 files changed, 9786 insertions, 0 deletions
diff --git a/src/Tag.c b/src/Tag.c
new file mode 100644
index 0000000..3682fd8
--- /dev/null
+++ b/src/Tag.c
@@ -0,0 +1,9786 @@
+/* Tag.c generated by valac 0.32.1, the Vala compiler
+ * generated from Tag.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>
+#include <time.h>
+#include <glib/gi18n-lib.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 TYPE_TAG_SOURCE_COLLECTION (tag_source_collection_get_type ())
+#define TAG_SOURCE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_TAG_SOURCE_COLLECTION, TagSourceCollection))
+#define TAG_SOURCE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_TAG_SOURCE_COLLECTION, TagSourceCollectionClass))
+#define IS_TAG_SOURCE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_TAG_SOURCE_COLLECTION))
+#define IS_TAG_SOURCE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_TAG_SOURCE_COLLECTION))
+#define TAG_SOURCE_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_TAG_SOURCE_COLLECTION, TagSourceCollectionClass))
+
+typedef struct _TagSourceCollection TagSourceCollection;
+typedef struct _TagSourceCollectionClass TagSourceCollectionClass;
+typedef struct _TagSourceCollectionPrivate TagSourceCollectionPrivate;
+
+#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 TYPE_MEDIA_SOURCE_COLLECTION (media_source_collection_get_type ())
+#define MEDIA_SOURCE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_MEDIA_SOURCE_COLLECTION, MediaSourceCollection))
+#define MEDIA_SOURCE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_MEDIA_SOURCE_COLLECTION, MediaSourceCollectionClass))
+#define IS_MEDIA_SOURCE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_MEDIA_SOURCE_COLLECTION))
+#define IS_MEDIA_SOURCE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_MEDIA_SOURCE_COLLECTION))
+#define MEDIA_SOURCE_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_MEDIA_SOURCE_COLLECTION, MediaSourceCollectionClass))
+
+typedef struct _MediaSourceCollection MediaSourceCollection;
+typedef struct _MediaSourceCollectionClass MediaSourceCollectionClass;
+
+#define TYPE_LIBRARY_PHOTO_SOURCE_COLLECTION (library_photo_source_collection_get_type ())
+#define LIBRARY_PHOTO_SOURCE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_LIBRARY_PHOTO_SOURCE_COLLECTION, LibraryPhotoSourceCollection))
+#define LIBRARY_PHOTO_SOURCE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_LIBRARY_PHOTO_SOURCE_COLLECTION, LibraryPhotoSourceCollectionClass))
+#define IS_LIBRARY_PHOTO_SOURCE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_LIBRARY_PHOTO_SOURCE_COLLECTION))
+#define IS_LIBRARY_PHOTO_SOURCE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_LIBRARY_PHOTO_SOURCE_COLLECTION))
+#define LIBRARY_PHOTO_SOURCE_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_LIBRARY_PHOTO_SOURCE_COLLECTION, LibraryPhotoSourceCollectionClass))
+
+typedef struct _LibraryPhotoSourceCollection LibraryPhotoSourceCollection;
+typedef struct _LibraryPhotoSourceCollectionClass LibraryPhotoSourceCollectionClass;
+
+#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_PHOTO (photo_get_type ())
+#define PHOTO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_PHOTO, Photo))
+#define PHOTO_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_PHOTO, PhotoClass))
+#define IS_PHOTO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_PHOTO))
+#define IS_PHOTO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_PHOTO))
+#define PHOTO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_PHOTO, PhotoClass))
+
+typedef struct _Photo Photo;
+typedef struct _PhotoClass PhotoClass;
+
+#define TYPE_LIBRARY_PHOTO (library_photo_get_type ())
+#define LIBRARY_PHOTO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_LIBRARY_PHOTO, LibraryPhoto))
+#define LIBRARY_PHOTO_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_LIBRARY_PHOTO, LibraryPhotoClass))
+#define IS_LIBRARY_PHOTO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_LIBRARY_PHOTO))
+#define IS_LIBRARY_PHOTO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_LIBRARY_PHOTO))
+#define LIBRARY_PHOTO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_LIBRARY_PHOTO, LibraryPhotoClass))
+
+typedef struct _LibraryPhoto LibraryPhoto;
+typedef struct _LibraryPhotoClass LibraryPhotoClass;
+
+#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 _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+
+#define TYPE_VIDEO_SOURCE_COLLECTION (video_source_collection_get_type ())
+#define VIDEO_SOURCE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_VIDEO_SOURCE_COLLECTION, VideoSourceCollection))
+#define VIDEO_SOURCE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_VIDEO_SOURCE_COLLECTION, VideoSourceCollectionClass))
+#define IS_VIDEO_SOURCE_COLLECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_VIDEO_SOURCE_COLLECTION))
+#define IS_VIDEO_SOURCE_COLLECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_VIDEO_SOURCE_COLLECTION))
+#define VIDEO_SOURCE_COLLECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_VIDEO_SOURCE_COLLECTION, VideoSourceCollectionClass))
+
+typedef struct _VideoSourceCollection VideoSourceCollection;
+typedef struct _VideoSourceCollectionClass VideoSourceCollectionClass;
+
+#define TYPE_TAG_ID (tag_id_get_type ())
+typedef struct _TagID TagID;
+#define _g_free0(var) (var = (g_free (var), NULL))
+typedef struct _DataObjectPrivate DataObjectPrivate;
+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_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_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 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;
+
+#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;
+typedef struct _TagPrivate TagPrivate;
+
+#define TYPE_TAG_ROW (tag_row_get_type ())
+#define TAG_ROW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_TAG_ROW, TagRow))
+#define TAG_ROW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_TAG_ROW, TagRowClass))
+#define IS_TAG_ROW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_TAG_ROW))
+#define IS_TAG_ROW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_TAG_ROW))
+#define TAG_ROW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_TAG_ROW, TagRowClass))
+
+typedef struct _TagRow TagRow;
+typedef struct _TagRowClass TagRowClass;
+
+#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;
+#define _tag_row_unref0(var) ((var == NULL) ? NULL : (var = (tag_row_unref (var), NULL)))
+#define _data_collection_unref0(var) ((var == NULL) ? NULL : (var = (data_collection_unref (var), NULL)))
+typedef struct _TagRowPrivate TagRowPrivate;
+
+#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_MEDIA_COLLECTION_REGISTRY (media_collection_registry_get_type ())
+#define MEDIA_COLLECTION_REGISTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_MEDIA_COLLECTION_REGISTRY, MediaCollectionRegistry))
+#define MEDIA_COLLECTION_REGISTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_MEDIA_COLLECTION_REGISTRY, MediaCollectionRegistryClass))
+#define IS_MEDIA_COLLECTION_REGISTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_MEDIA_COLLECTION_REGISTRY))
+#define IS_MEDIA_COLLECTION_REGISTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_MEDIA_COLLECTION_REGISTRY))
+#define MEDIA_COLLECTION_REGISTRY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_MEDIA_COLLECTION_REGISTRY, MediaCollectionRegistryClass))
+
+typedef struct _MediaCollectionRegistry MediaCollectionRegistry;
+typedef struct _MediaCollectionRegistryClass MediaCollectionRegistryClass;
+#define _media_collection_registry_unref0(var) ((var == NULL) ? NULL : (var = (media_collection_registry_unref (var), NULL)))
+
+#define TYPE_DATABASE_TABLE (database_table_get_type ())
+#define DATABASE_TABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DATABASE_TABLE, DatabaseTable))
+#define DATABASE_TABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_DATABASE_TABLE, DatabaseTableClass))
+#define IS_DATABASE_TABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DATABASE_TABLE))
+#define IS_DATABASE_TABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DATABASE_TABLE))
+#define DATABASE_TABLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DATABASE_TABLE, DatabaseTableClass))
+
+typedef struct _DatabaseTable DatabaseTable;
+typedef struct _DatabaseTableClass DatabaseTableClass;
+
+#define TYPE_TAG_TABLE (tag_table_get_type ())
+#define TAG_TABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_TAG_TABLE, TagTable))
+#define TAG_TABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_TAG_TABLE, TagTableClass))
+#define IS_TAG_TABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_TAG_TABLE))
+#define IS_TAG_TABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_TAG_TABLE))
+#define TAG_TABLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_TAG_TABLE, TagTableClass))
+
+typedef struct _TagTable TagTable;
+typedef struct _TagTableClass TagTableClass;
+#define _database_table_unref0(var) ((var == NULL) ? NULL : (var = (database_table_unref (var), NULL)))
+#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
+#define _g_string_free0(var) ((var == NULL) ? NULL : (var = (g_string_free (var, TRUE), NULL)))
+
+#define TYPE_PREPARE_INPUT_TEXT_OPTIONS (prepare_input_text_options_get_type ())
+#define _alteration_unref0(var) ((var == NULL) ? NULL : (var = (alteration_unref (var), NULL)))
+
+#define TAG_TYPE_TAG_SNAPSHOT (tag_tag_snapshot_get_type ())
+#define TAG_TAG_SNAPSHOT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TAG_TYPE_TAG_SNAPSHOT, TagTagSnapshot))
+#define TAG_TAG_SNAPSHOT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TAG_TYPE_TAG_SNAPSHOT, TagTagSnapshotClass))
+#define TAG_IS_TAG_SNAPSHOT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TAG_TYPE_TAG_SNAPSHOT))
+#define TAG_IS_TAG_SNAPSHOT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TAG_TYPE_TAG_SNAPSHOT))
+#define TAG_TAG_SNAPSHOT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TAG_TYPE_TAG_SNAPSHOT, TagTagSnapshotClass))
+
+typedef struct _TagTagSnapshot TagTagSnapshot;
+typedef struct _TagTagSnapshotClass TagTagSnapshotClass;
+
+#define TAG_TYPE_TAG_PROXY (tag_tag_proxy_get_type ())
+#define TAG_TAG_PROXY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TAG_TYPE_TAG_PROXY, TagTagProxy))
+#define TAG_TAG_PROXY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TAG_TYPE_TAG_PROXY, TagTagProxyClass))
+#define TAG_IS_TAG_PROXY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TAG_TYPE_TAG_PROXY))
+#define TAG_IS_TAG_PROXY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TAG_TYPE_TAG_PROXY))
+#define TAG_TAG_PROXY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TAG_TYPE_TAG_PROXY, TagTagProxyClass))
+
+typedef struct _TagTagProxy TagTagProxy;
+typedef struct _TagTagProxyClass TagTagProxyClass;
+#define _source_backlink_unref0(var) ((var == NULL) ? NULL : (var = (source_backlink_unref (var), NULL)))
+typedef struct _SourceSnapshotPrivate SourceSnapshotPrivate;
+typedef struct _TagTagSnapshotPrivate TagTagSnapshotPrivate;
+typedef struct _SourceProxyPrivate SourceProxyPrivate;
+typedef struct _TagTagProxyPrivate TagTagProxyPrivate;
+#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 _TagSourceCollection {
+ ContainerSourceCollection parent_instance;
+ TagSourceCollectionPrivate * priv;
+};
+
+struct _TagSourceCollectionClass {
+ ContainerSourceCollectionClass parent_class;
+};
+
+struct _TagSourceCollectionPrivate {
+ GeeHashMap* name_map;
+ GeeHashMap* source_map;
+ GeeHashMap* sorted_source_map;
+};
+
+typedef gint64 (*GetSourceDatabaseKey) (DataSource* source, void* user_data);
+struct _TagID {
+ gint64 id;
+};
+
+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 _ProxyableIface {
+ GTypeInterface parent_iface;
+ SourceProxy* (*get_proxy) (Proxyable* self);
+};
+
+struct _IndexableIface {
+ GTypeInterface parent_iface;
+ const gchar* (*get_indexable_keywords) (Indexable* self);
+};
+
+struct _Tag {
+ DataSource parent_instance;
+ TagPrivate * priv;
+};
+
+struct _TagClass {
+ DataSourceClass parent_class;
+};
+
+struct _TagPrivate {
+ TagRow* row;
+ ViewCollection* media_views;
+ gchar* name_collation_key;
+ gboolean unlinking;
+ gboolean relinking;
+ gchar* indexable_keywords;
+};
+
+struct _TagRow {
+ GTypeInstance parent_instance;
+ volatile int ref_count;
+ TagRowPrivate * priv;
+ TagID tag_id;
+ gchar* name;
+ GeeSet* source_id_list;
+ time_t time_created;
+};
+
+struct _TagRowClass {
+ GTypeClass parent_class;
+ void (*finalize) (TagRow *self);
+};
+
+typedef enum {
+ DATABASE_ERROR_ERROR,
+ DATABASE_ERROR_BACKING,
+ DATABASE_ERROR_MEMORY,
+ DATABASE_ERROR_ABORT,
+ DATABASE_ERROR_LIMITS,
+ DATABASE_ERROR_TYPESPEC
+} DatabaseError;
+#define DATABASE_ERROR database_error_quark ()
+typedef enum {
+ PREPARE_INPUT_TEXT_OPTIONS_EMPTY_IS_NULL = 1 << 0,
+ PREPARE_INPUT_TEXT_OPTIONS_VALIDATE = 1 << 1,
+ PREPARE_INPUT_TEXT_OPTIONS_INVALID_IS_NULL = 1 << 2,
+ PREPARE_INPUT_TEXT_OPTIONS_STRIP = 1 << 3,
+ PREPARE_INPUT_TEXT_OPTIONS_STRIP_CRLF = 1 << 4,
+ PREPARE_INPUT_TEXT_OPTIONS_NORMALIZE = 1 << 5,
+ PREPARE_INPUT_TEXT_OPTIONS_DEFAULT = ((((PREPARE_INPUT_TEXT_OPTIONS_EMPTY_IS_NULL | PREPARE_INPUT_TEXT_OPTIONS_VALIDATE) | PREPARE_INPUT_TEXT_OPTIONS_INVALID_IS_NULL) | PREPARE_INPUT_TEXT_OPTIONS_STRIP_CRLF) | PREPARE_INPUT_TEXT_OPTIONS_STRIP) | PREPARE_INPUT_TEXT_OPTIONS_NORMALIZE
+} PrepareInputTextOptions;
+
+typedef DataView* (*CreateView) (DataSource* source, void* user_data);
+typedef gboolean (*CreateViewPredicate) (DataSource* source, 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 _TagTagSnapshot {
+ SourceSnapshot parent_instance;
+ TagTagSnapshotPrivate * priv;
+};
+
+struct _TagTagSnapshotClass {
+ SourceSnapshotClass parent_class;
+};
+
+struct _TagTagSnapshotPrivate {
+ TagRow* row;
+ GeeHashSet* sources;
+};
+
+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 _TagTagProxy {
+ SourceProxy parent_instance;
+ TagTagProxyPrivate * priv;
+};
+
+struct _TagTagProxyClass {
+ SourceProxyClass parent_class;
+};
+
+
+static gpointer tag_source_collection_parent_class = NULL;
+extern LibraryPhotoSourceCollection* library_photo_global;
+extern VideoSourceCollection* video_global;
+static gpointer tag_parent_class = NULL;
+extern TagSourceCollection* tag_global;
+TagSourceCollection* tag_global = NULL;
+static gpointer tag_tag_snapshot_parent_class = NULL;
+static gpointer tag_tag_proxy_parent_class = NULL;
+static ContainerSourceIface* tag_container_source_parent_iface = NULL;
+static ProxyableIface* tag_proxyable_parent_iface = NULL;
+static IndexableIface* tag_indexable_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;
+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;
+GType tag_source_collection_get_type (void) G_GNUC_CONST;
+GType tag_get_type (void) G_GNUC_CONST;
+GType thumbnail_source_get_type (void) G_GNUC_CONST;
+GType media_source_get_type (void) G_GNUC_CONST;
+#define TAG_SOURCE_COLLECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_TAG_SOURCE_COLLECTION, TagSourceCollectionPrivate))
+enum {
+ TAG_SOURCE_COLLECTION_DUMMY_PROPERTY
+};
+GType media_source_collection_get_type (void) G_GNUC_CONST;
+GType library_photo_source_collection_get_type (void) G_GNUC_CONST;
+GType photo_source_get_type (void) G_GNUC_CONST;
+GType photo_get_type (void) G_GNUC_CONST;
+GType library_photo_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;
+static void tag_source_collection_on_photo_source_reimported (TagSourceCollection* self, LibraryPhoto* photo, PhotoMetadata* metadata);
+static void _tag_source_collection_on_photo_source_reimported_library_photo_source_collection_source_reimported (LibraryPhotoSourceCollection* _sender, LibraryPhoto* photo, PhotoMetadata* metadata, gpointer self);
+guint tag_hash_name_string (const gchar* a);
+static guint _tag_hash_name_string_gee_hash_data_func (gconstpointer v, gpointer self);
+gboolean tag_equal_name_strings (const gchar* a, const gchar* b);
+static gboolean _tag_equal_name_strings_gee_equal_data_func (gconstpointer a, gconstpointer b, gpointer self);
+TagSourceCollection* tag_source_collection_new (void);
+TagSourceCollection* tag_source_collection_construct (GType object_type);
+#define TAG_TYPENAME "tag"
+static gint64 tag_source_collection_get_tag_key (DataSource* source);
+static gint64 _tag_source_collection_get_tag_key_get_source_database_key (DataSource* source, gpointer 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);
+void container_source_collection_attach_collection (ContainerSourceCollection* self, SourceCollection* collection);
+GType video_source_collection_get_type (void) G_GNUC_CONST;
+static gboolean tag_source_collection_real_holds_type_of_source (SourceCollection* base, DataSource* source);
+gint64 data_source_get_instance_id (DataSource* self);
+static GeeCollection* tag_source_collection_real_get_containers_holding_source (ContainerSourceCollection* base, DataSource* source);
+GeeList* tag_source_collection_fetch_for_source (TagSourceCollection* self, MediaSource* source);
+static ContainerSource* tag_source_collection_real_convert_backlink_to_container (ContainerSourceCollection* base, SourceBacklink* backlink);
+GType tag_id_get_type (void) G_GNUC_CONST;
+TagID* tag_id_dup (const TagID* self);
+void tag_id_free (TagID* self);
+gint64 source_backlink_get_instance_id (SourceBacklink* self);
+void tag_id_init (TagID *self, gint64 id);
+Tag* tag_source_collection_fetch (TagSourceCollection* self, TagID* tag_id);
+GeeCollection* container_source_collection_get_holding_tank (ContainerSourceCollection* self);
+void tag_get_tag_id (Tag* self, TagID* result);
+gchar* tag_get_path (Tag* self);
+#define TAG_PATH_SEPARATOR_STRING "/"
+GeeList* hierarchical_tag_utilities_enumerate_parent_paths (const gchar* in_path);
+gchar* hierarchical_tag_utilities_hierarchical_to_flat (const gchar* path);
+void tag_promote (Tag* self);
+DataSource* database_source_collection_fetch_by_key (DatabaseSourceCollection* self, gint64 key);
+gboolean tag_source_collection_exists (TagSourceCollection* self, const gchar* name, gboolean treat_htags_as_root);
+Tag* tag_source_collection_fetch_by_name (TagSourceCollection* self, const gchar* name, gboolean treat_htags_as_root);
+GeeCollection* tag_source_collection_get_all_names (TagSourceCollection* self);
+GeeSortedSet* tag_source_collection_fetch_sorted_for_source (TagSourceCollection* self, MediaSource* photo);
+GeeList* hierarchical_tag_utilities_enumerate_path_components (const gchar* in_path);
+gchar* hierarchical_tag_utilities_flat_to_hierarchical (const gchar* name);
+Tag* tag_source_collection_restore_tag_from_holding_tank (TagSourceCollection* self, const gchar* name);
+gchar* data_object_get_name (DataObject* self);
+gboolean container_source_collection_relink_from_holding_tank (ContainerSourceCollection* self, ContainerSource* source);
+static void tag_source_collection_real_notify_items_added (DataCollection* base, GeeIterable* added);
+void data_collection_notify_items_added (DataCollection* self, GeeIterable* added);
+static void tag_source_collection_real_notify_items_removed (DataCollection* base, GeeIterable* removed);
+Tag* tag_get_hierarchical_parent (Tag* self);
+GeeList* tag_get_hierarchical_children (Tag* self);
+void tag_flatten (Tag* self);
+void data_collection_notify_items_removed (DataCollection* self, GeeIterable* removed);
+static void tag_source_collection_real_notify_items_altered (DataCollection* base, GeeMap* map);
+gboolean data_source_equals (DataSource* self, DataSource* source);
+void data_collection_notify_items_altered (DataCollection* self, GeeMap* items);
+static void tag_source_collection_real_notify_container_contents_added (ContainerSourceCollection* base, ContainerSource* container, GeeCollection* added, gboolean relinking);
+gint tag_compare_names (Tag* a, Tag* b);
+static gint _tag_compare_names_gcompare_data_func (gconstpointer a, gconstpointer b, gpointer self);
+void container_source_collection_notify_container_contents_added (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* added, gboolean relinked);
+static void tag_source_collection_real_notify_container_contents_removed (ContainerSourceCollection* base, ContainerSource* container, GeeCollection* removed, gboolean unlinking);
+void container_source_collection_notify_container_contents_removed (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* removed, gboolean unlinked);
+static void tag_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;
+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;
+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;
+GType proxyable_get_type (void) G_GNUC_CONST;
+GType indexable_get_type (void) G_GNUC_CONST;
+gpointer tag_row_ref (gpointer instance);
+void tag_row_unref (gpointer instance);
+GParamSpec* param_spec_tag_row (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_tag_row (GValue* value, gpointer v_object);
+void value_take_tag_row (GValue* value, gpointer v_object);
+gpointer value_get_tag_row (const GValue* value);
+GType tag_row_get_type (void) G_GNUC_CONST;
+GType view_collection_get_type (void) G_GNUC_CONST;
+#define TAG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_TAG, TagPrivate))
+enum {
+ TAG_DUMMY_PROPERTY
+};
+GType data_view_get_type (void) G_GNUC_CONST;
+static void tag_on_media_views_contents_altered (Tag* self, GeeIterable* added, GeeIterable* removed);
+static void _tag_on_media_views_contents_altered_data_collection_contents_altered (DataCollection* _sender, GeeIterable* added, GeeIterable* removed, gpointer self);
+static void tag_on_sources_destroyed (Tag* self, GeeCollection* sources);
+static void _tag_on_sources_destroyed_source_collection_items_destroyed (SourceCollection* _sender, GeeCollection* destroyed, gpointer self);
+#define TAG_TAG_LIST_SEPARATOR_STRING ", "
+static Tag* tag_new (TagRow* row, gint64 object_id);
+static Tag* tag_construct (GType object_type, TagRow* row, gint64 object_id);
+DataSource* data_source_construct (GType object_type, gint64 object_id);
+gchar* tag_prep_tag_name (const gchar* name);
+GType thumbnail_view_get_type (void) G_GNUC_CONST;
+gpointer media_collection_registry_ref (gpointer instance);
+void media_collection_registry_unref (gpointer instance);
+GParamSpec* param_spec_media_collection_registry (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_media_collection_registry (GValue* value, gpointer v_object);
+void value_take_media_collection_registry (GValue* value, gpointer v_object);
+gpointer value_get_media_collection_registry (const GValue* value);
+GType media_collection_registry_get_type (void) G_GNUC_CONST;
+MediaCollectionRegistry* media_collection_registry_get_instance (void);
+MediaSource* media_collection_registry_fetch_media (MediaCollectionRegistry* self, const gchar* source_id);
+ThumbnailView* thumbnail_view_new (ThumbnailSource* source);
+ThumbnailView* thumbnail_view_construct (GType object_type, ThumbnailSource* source);
+ViewCollection* view_collection_new (const gchar* name);
+ViewCollection* view_collection_construct (GType object_type, const gchar* name);
+GeeCollection* data_collection_add_many (DataCollection* self, GeeCollection* objects, ProgressMonitor monitor, void* monitor_target);
+void container_source_collection_notify_container_contents_altered (ContainerSourceCollection* self, ContainerSource* container, GeeCollection* added, gboolean relinked, GeeCollection* removed, gboolean unlinked);
+static void tag_update_indexable_keywords (Tag* self);
+void tag_init (ProgressMonitor monitor, void* monitor_target);
+gpointer database_table_ref (gpointer instance);
+void database_table_unref (gpointer instance);
+GParamSpec* param_spec_database_table (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_database_table (GValue* value, gpointer v_object);
+void value_take_database_table (GValue* value, gpointer v_object);
+gpointer value_get_database_table (const GValue* value);
+GType database_table_get_type (void) G_GNUC_CONST;
+GType tag_table_get_type (void) G_GNUC_CONST;
+TagTable* tag_table_get_instance (void);
+GQuark database_error_quark (void);
+GeeList* tag_table_get_all_rows (TagTable* self, GError** error);
+void app_window_database_error (GError* err);
+void tag_table_remove (TagTable* self, TagID* tag_id, GError** error);
+#define DATA_OBJECT_INVALID_OBJECT_ID ((gint64) -1)
+gboolean container_source_has_links (ContainerSource* self);
+void data_source_rehydrate_backlinks (DataSource* self, SourceCollection* unlinked_from, const gchar* dehydrated);
+GeeCollection* tag_get_sources (Tag* self);
+gchar* tag_get_user_visible_name (Tag* self);
+void tag_attach_many (Tag* self, GeeCollection* sources);
+GeeMultiMap* tag_detach_many (Tag* self, GeeCollection* sources);
+gboolean data_source_destroy_orphan (DataSource* self, gboolean delete_backing);
+gint tag_get_sources_count (Tag* self);
+void container_source_collection_init_add_many_unlinked (ContainerSourceCollection* self, GeeCollection* unlinked);
+void tag_terminate (void);
+gint string_precollated_compare (const gchar* astr, const gchar* akey, const gchar* bstr, const gchar* bkey);
+gchar* tag_get_name_collation_key (Tag* self);
+gint tag_compare_user_visible_names (Tag* a, Tag* b);
+guint string_collated_hash (void* ptr);
+gboolean string_collated_equals (void* a, void* b);
+Tag* tag_for_path (const gchar* name);
+TagRow* tag_table_add (TagTable* self, const gchar* name, GError** error);
+gboolean data_collection_add (DataCollection* self, DataObject* object);
+GeeCollection* tag_get_terminal_tags (GeeCollection* tags);
+GeeList* tag_make_user_visible_tag_list (GeeCollection* tags);
+static gint _tag_compare_user_visible_names_gcompare_data_func (gconstpointer a, gconstpointer b, gpointer self);
+gchar* tag_make_tag_markup_string (GeeList* tags, gint highlight_index);
+gchar* guarded_markup_escape_text (const gchar* plain);
+GType prepare_input_text_options_get_type (void) G_GNUC_CONST;
+gchar* prepare_input_text (const gchar* text, PrepareInputTextOptions options, gint dest_length);
+#define DEFAULT_USER_TEXT_INPUT_LENGTH 1024
+gchar** tag_prep_tag_names (gchar** names, int names_length1, int* result_length1);
+static void _vala_array_add293 (gchar*** array, int* length, int* size, gchar* value);
+static void tag_set_raw_flat_name (Tag* self, const gchar* name);
+void tag_table_rename (TagTable* self, TagID* tag_id, const gchar* new_name, GError** error);
+void data_object_notify_altered (DataObject* self, Alteration* alteration);
+Alteration* alteration_new_from_list (const gchar* list);
+Alteration* alteration_construct_from_list (GType object_type, const gchar* list);
+static void tag_set_raw_path (Tag* self, const gchar* path, gboolean suppress_notify);
+static gchar* tag_real_get_typename (DataSource* base);
+static gint64 tag_real_get_instance_id (DataSource* base);
+static gchar* tag_real_get_name (DataObject* base);
+gchar* hierarchical_tag_utilities_get_basename (const gchar* in_path);
+gchar* tag_get_searchable_name (Tag* self);
+gchar* string_remove_diacritics (const gchar* istring);
+gint tag_get_attachment_count (Tag* self, MediaSource* source);
+gboolean tag_contains (Tag* self, MediaSource* source);
+static gchar* tag_get_next_untitled_tag_name (const gchar* _prefix);
+Tag* tag_create_new_child (Tag* self);
+Tag* tag_create_new_root (void);
+static gchar* tag_real_to_string (DataObject* base);
+gint data_collection_get_count (DataCollection* self);
+static gboolean tag_real_equals (DataSource* base, DataSource* source);
+static SourceSnapshot* tag_real_save_snapshot (DataSource* base);
+static TagTagSnapshot* tag_tag_snapshot_new (Tag* tag);
+static TagTagSnapshot* tag_tag_snapshot_construct (GType object_type, Tag* tag);
+static GType tag_tag_snapshot_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
+static SourceProxy* tag_real_get_proxy (Proxyable* base);
+static TagTagProxy* tag_tag_proxy_new (Tag* tag);
+static TagTagProxy* tag_tag_proxy_construct (GType object_type, Tag* tag);
+static GType tag_tag_proxy_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
+Tag* tag_reconstitute (gint64 object_id, TagRow* row);
+void tag_table_create_from_row (TagTable* self, TagRow* row, TagID* result, GError** error);
+gchar* data_object_to_string (DataObject* self);
+static gboolean tag_real_has_links (ContainerSource* base);
+gboolean source_collection_has_backlink (SourceCollection* self, SourceBacklink* backlink);
+SourceBacklink* container_source_get_backlink (ContainerSource* self);
+static SourceBacklink* tag_real_get_backlink (ContainerSource* base);
+SourceBacklink* source_backlink_new_from_source (DataSource* source);
+SourceBacklink* source_backlink_construct_from_source (GType object_type, DataSource* source);
+static void tag_real_break_link (ContainerSource* base, DataSource* source);
+GeeList* tag_detach (Tag* self, MediaSource* source);
+static void tag_real_break_link_many (ContainerSource* base, GeeCollection* sources);
+static void tag_real_establish_link (ContainerSource* base, DataSource* source);
+void tag_attach (Tag* self, MediaSource* source);
+static void tag_real_establish_link_many (ContainerSource* base, GeeCollection* sources);
+gchar* indexable_prepare_indexable_string (const gchar* str);
+static const gchar* tag_real_get_indexable_keywords (Indexable* base);
+gboolean view_collection_has_view_for_source (ViewCollection* self, DataSource* source);
+DataView* view_collection_get_view_for_source (ViewCollection* self, DataSource* source);
+void data_collection_remove_marked (DataCollection* self, Marker* m);
+Marker* data_collection_mark (DataCollection* self, DataObject* object);
+Marker* data_collection_start_marking (DataCollection* self);
+void marker_mark (Marker* self, DataObject* object);
+gboolean tag_rename (Tag* self, const gchar* name);
+GeeCollection* view_collection_get_sources (ViewCollection* self);
+void tag_mirror_sources (Tag* self, ViewCollection* view, CreateView mirroring_ctor, void* mirroring_ctor_target);
+void view_collection_mirror (ViewCollection* self, ViewCollection* to_mirror, CreateView mirroring_ctor, void* mirroring_ctor_target, CreateViewPredicate should_mirror, void* should_mirror_target);
+DataSource* data_view_get_source (DataView* self);
+gchar* data_source_get_source_id (DataSource* self);
+void tag_table_set_tagged_sources (TagTable* self, TagID* tag_id, GeeCollection* source_ids, GError** error);
+static void tag_real_destroy (DataSource* base);
+void data_collection_clear (DataCollection* self);
+void data_source_destroy (DataSource* self);
+#define TAG_TAG_SNAPSHOT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TAG_TYPE_TAG_SNAPSHOT, TagTagSnapshotPrivate))
+enum {
+ TAG_TAG_SNAPSHOT_DUMMY_PROPERTY
+};
+static void tag_tag_snapshot_on_source_destroyed (TagTagSnapshot* self, DataSource* source);
+static void _tag_tag_snapshot_on_source_destroyed_source_collection_item_destroyed (SourceCollection* _sender, DataSource* source, gpointer self);
+SourceSnapshot* source_snapshot_construct (GType object_type);
+static TagRow* tag_tag_snapshot_get_row (TagTagSnapshot* self);
+static void tag_tag_snapshot_real_notify_broken (SourceSnapshot* base);
+TagRow* tag_row_new (void);
+TagRow* tag_row_construct (GType object_type);
+void source_snapshot_notify_broken (SourceSnapshot* self);
+static void tag_tag_snapshot_finalize (SourceSnapshot* obj);
+enum {
+ TAG_TAG_PROXY_DUMMY_PROPERTY
+};
+SourceProxy* source_proxy_construct (GType object_type, DataSource* source);
+static DataSource* tag_tag_proxy_real_reconstitute (SourceProxy* base, gint64 object_id, SourceSnapshot* snapshot);
+static void tag_finalize (GObject* 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 void _tag_source_collection_on_photo_source_reimported_library_photo_source_collection_source_reimported (LibraryPhotoSourceCollection* _sender, LibraryPhoto* photo, PhotoMetadata* metadata, gpointer self) {
+#line 26 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_source_collection_on_photo_source_reimported ((TagSourceCollection*) self, photo, metadata);
+#line 1015 "Tag.c"
+}
+
+
+static guint _tag_hash_name_string_gee_hash_data_func (gconstpointer v, gpointer self) {
+ guint result;
+ result = tag_hash_name_string ((const gchar*) v);
+#line 8 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 1024 "Tag.c"
+}
+
+
+static gboolean _tag_equal_name_strings_gee_equal_data_func (gconstpointer a, gconstpointer b, gpointer self) {
+ gboolean result;
+ result = tag_equal_name_strings ((const gchar*) a, (const gchar*) b);
+#line 8 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 1033 "Tag.c"
+}
+
+
+static gint64 _tag_source_collection_get_tag_key_get_source_database_key (DataSource* source, gpointer self) {
+ gint64 result;
+ result = tag_source_collection_get_tag_key (source);
+#line 16 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 1042 "Tag.c"
+}
+
+
+TagSourceCollection* tag_source_collection_construct (GType object_type) {
+ TagSourceCollection* self = NULL;
+ LibraryPhotoSourceCollection* _tmp0_ = NULL;
+ VideoSourceCollection* _tmp1_ = NULL;
+ LibraryPhotoSourceCollection* _tmp2_ = NULL;
+#line 16 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = (TagSourceCollection*) container_source_collection_construct (object_type, TAG_TYPENAME, "TagSourceCollection", _tag_source_collection_get_tag_key_get_source_database_key, NULL);
+#line 18 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = library_photo_global;
+#line 18 "/home/jens/Source/shotwell/src/Tag.vala"
+ container_source_collection_attach_collection (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_CONTAINER_SOURCE_COLLECTION, ContainerSourceCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_SOURCE_COLLECTION, SourceCollection));
+#line 19 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = video_global;
+#line 19 "/home/jens/Source/shotwell/src/Tag.vala"
+ container_source_collection_attach_collection (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_CONTAINER_SOURCE_COLLECTION, ContainerSourceCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, TYPE_SOURCE_COLLECTION, SourceCollection));
+#line 22 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = library_photo_global;
+#line 22 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_signal_connect (_tmp2_, "source-reimported", (GCallback) _tag_source_collection_on_photo_source_reimported_library_photo_source_collection_source_reimported, self);
+#line 15 "/home/jens/Source/shotwell/src/Tag.vala"
+ return self;
+#line 1067 "Tag.c"
+}
+
+
+TagSourceCollection* tag_source_collection_new (void) {
+#line 15 "/home/jens/Source/shotwell/src/Tag.vala"
+ return tag_source_collection_construct (TYPE_TAG_SOURCE_COLLECTION);
+#line 1074 "Tag.c"
+}
+
+
+static gboolean tag_source_collection_real_holds_type_of_source (SourceCollection* base, DataSource* source) {
+ TagSourceCollection * self;
+ gboolean result = FALSE;
+ DataSource* _tmp0_ = NULL;
+#line 29 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_TAG_SOURCE_COLLECTION, TagSourceCollection);
+#line 29 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_DATA_SOURCE (source), FALSE);
+#line 30 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = source;
+#line 30 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, TYPE_TAG);
+#line 30 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 1092 "Tag.c"
+}
+
+
+static gint64 tag_source_collection_get_tag_key (DataSource* source) {
+ gint64 result = 0LL;
+ DataSource* _tmp0_ = NULL;
+ gint64 _tmp1_ = 0LL;
+#line 33 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_DATA_SOURCE (source), 0LL);
+#line 34 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = source;
+#line 34 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = data_source_get_instance_id (G_TYPE_CHECK_INSTANCE_CAST (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_TAG, Tag), TYPE_DATA_SOURCE, DataSource));
+#line 34 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = _tmp1_;
+#line 34 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 1110 "Tag.c"
+}
+
+
+static GeeCollection* tag_source_collection_real_get_containers_holding_source (ContainerSourceCollection* base, DataSource* source) {
+ TagSourceCollection * self;
+ GeeCollection* result = NULL;
+ DataSource* _tmp0_ = NULL;
+ GeeList* _tmp1_ = NULL;
+#line 37 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_TAG_SOURCE_COLLECTION, TagSourceCollection);
+#line 37 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_DATA_SOURCE (source), NULL);
+#line 38 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = source;
+#line 38 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = tag_source_collection_fetch_for_source (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_MEDIA_SOURCE, MediaSource));
+#line 38 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_COLLECTION, GeeCollection);
+#line 38 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 1131 "Tag.c"
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+#line 48 "/home/jens/Source/shotwell/src/Tag.vala"
+ return self ? g_object_ref (self) : NULL;
+#line 1138 "Tag.c"
+}
+
+
+static ContainerSource* tag_source_collection_real_convert_backlink_to_container (ContainerSourceCollection* base, SourceBacklink* backlink) {
+ TagSourceCollection * self;
+ ContainerSource* result = NULL;
+ TagID tag_id = {0};
+ SourceBacklink* _tmp0_ = NULL;
+ gint64 _tmp1_ = 0LL;
+ gint64 _tmp2_ = 0LL;
+ Tag* _result_ = NULL;
+ Tag* tag = NULL;
+ TagID _tmp3_ = {0};
+ Tag* _tmp4_ = NULL;
+ Tag* _tmp5_ = NULL;
+ Tag* _tmp25_ = NULL;
+#line 41 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_TAG_SOURCE_COLLECTION, TagSourceCollection);
+#line 41 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_SOURCE_BACKLINK (backlink), NULL);
+#line 42 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = backlink;
+#line 42 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = source_backlink_get_instance_id (_tmp0_);
+#line 42 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = _tmp1_;
+#line 42 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_id_init (&tag_id, _tmp2_);
+#line 43 "/home/jens/Source/shotwell/src/Tag.vala"
+ _result_ = NULL;
+#line 46 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = tag_id;
+#line 46 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = tag_source_collection_fetch (self, &_tmp3_);
+#line 46 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag = _tmp4_;
+#line 47 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = tag;
+#line 47 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp5_ != NULL) {
+#line 1179 "Tag.c"
+ Tag* _tmp6_ = NULL;
+ Tag* _tmp7_ = NULL;
+#line 48 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = tag;
+#line 48 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = _g_object_ref0 (_tmp6_);
+#line 48 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_result_);
+#line 48 "/home/jens/Source/shotwell/src/Tag.vala"
+ _result_ = _tmp7_;
+#line 1190 "Tag.c"
+ } else {
+ {
+ GeeIterator* _container_it = NULL;
+ GeeCollection* _tmp8_ = NULL;
+ GeeCollection* _tmp9_ = NULL;
+ GeeIterator* _tmp10_ = NULL;
+ GeeIterator* _tmp11_ = NULL;
+#line 51 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = container_source_collection_get_holding_tank (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_CONTAINER_SOURCE_COLLECTION, ContainerSourceCollection));
+#line 51 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = _tmp8_;
+#line 51 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 51 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = _tmp10_;
+#line 51 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp9_);
+#line 51 "/home/jens/Source/shotwell/src/Tag.vala"
+ _container_it = _tmp11_;
+#line 51 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 1212 "Tag.c"
+ GeeIterator* _tmp12_ = NULL;
+ gboolean _tmp13_ = FALSE;
+ ContainerSource* container = NULL;
+ GeeIterator* _tmp14_ = NULL;
+ gpointer _tmp15_ = NULL;
+ ContainerSource* _tmp16_ = NULL;
+ Tag* _tmp17_ = NULL;
+ Tag* _tmp18_ = NULL;
+ TagID _tmp19_ = {0};
+ gint64 _tmp20_ = 0LL;
+ TagID _tmp21_ = {0};
+ gint64 _tmp22_ = 0LL;
+#line 51 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = _container_it;
+#line 51 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = gee_iterator_next (_tmp12_);
+#line 51 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp13_) {
+#line 51 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 1233 "Tag.c"
+ }
+#line 51 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp14_ = _container_it;
+#line 51 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp15_ = gee_iterator_get (_tmp14_);
+#line 51 "/home/jens/Source/shotwell/src/Tag.vala"
+ container = (ContainerSource*) _tmp15_;
+#line 52 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp16_ = container;
+#line 52 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp17_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp16_, TYPE_TAG, Tag));
+#line 52 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (tag);
+#line 52 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag = _tmp17_;
+#line 53 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp18_ = tag;
+#line 53 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_get_tag_id (_tmp18_, &_tmp19_);
+#line 53 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp20_ = _tmp19_.id;
+#line 53 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp21_ = tag_id;
+#line 53 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp22_ = _tmp21_.id;
+#line 53 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp20_ == _tmp22_) {
+#line 1261 "Tag.c"
+ Tag* _tmp23_ = NULL;
+ Tag* _tmp24_ = NULL;
+#line 54 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp23_ = tag;
+#line 54 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp24_ = _g_object_ref0 (_tmp23_);
+#line 54 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_result_);
+#line 54 "/home/jens/Source/shotwell/src/Tag.vala"
+ _result_ = _tmp24_;
+#line 55 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (container);
+#line 55 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 1276 "Tag.c"
+ }
+#line 51 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (container);
+#line 1280 "Tag.c"
+ }
+#line 51 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_container_it);
+#line 1284 "Tag.c"
+ }
+ }
+#line 63 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp25_ = _result_;
+#line 63 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp25_ != NULL) {
+#line 1291 "Tag.c"
+ gboolean _tmp26_ = FALSE;
+ Tag* _tmp27_ = NULL;
+ gchar* _tmp28_ = NULL;
+ gchar* _tmp29_ = NULL;
+ gboolean _tmp30_ = FALSE;
+ gboolean _tmp31_ = FALSE;
+#line 64 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp27_ = _result_;
+#line 64 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp28_ = tag_get_path (_tmp27_);
+#line 64 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp29_ = _tmp28_;
+#line 64 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp30_ = g_str_has_prefix (_tmp29_, TAG_PATH_SEPARATOR_STRING);
+#line 64 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp31_ = _tmp30_;
+#line 64 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp29_);
+#line 64 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp31_) {
+#line 1312 "Tag.c"
+ Tag* _tmp32_ = NULL;
+ gchar* _tmp33_ = NULL;
+ gchar* _tmp34_ = NULL;
+ GeeList* _tmp35_ = NULL;
+ GeeList* _tmp36_ = NULL;
+ gint _tmp37_ = 0;
+ gint _tmp38_ = 0;
+#line 65 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp32_ = _result_;
+#line 65 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp33_ = tag_get_path (_tmp32_);
+#line 65 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp34_ = _tmp33_;
+#line 65 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp35_ = hierarchical_tag_utilities_enumerate_parent_paths (_tmp34_);
+#line 65 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp36_ = _tmp35_;
+#line 65 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp37_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp36_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 65 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp38_ = _tmp37_;
+#line 65 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp26_ = _tmp38_ > 0;
+#line 65 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp36_);
+#line 65 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp34_);
+#line 1340 "Tag.c"
+ } else {
+#line 64 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp26_ = FALSE;
+#line 1344 "Tag.c"
+ }
+#line 64 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp26_) {
+#line 1348 "Tag.c"
+ gchar* top_level_with_prefix_path = NULL;
+ Tag* _tmp39_ = NULL;
+ gchar* _tmp40_ = NULL;
+ gchar* _tmp41_ = NULL;
+ GeeList* _tmp42_ = NULL;
+ GeeList* _tmp43_ = NULL;
+ gpointer _tmp44_ = NULL;
+ gchar* _tmp45_ = NULL;
+ gchar* top_level_no_prefix_path = NULL;
+ const gchar* _tmp46_ = NULL;
+ gchar* _tmp47_ = NULL;
+#line 66 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp39_ = _result_;
+#line 66 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp40_ = tag_get_path (_tmp39_);
+#line 66 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp41_ = _tmp40_;
+#line 66 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp42_ = hierarchical_tag_utilities_enumerate_parent_paths (_tmp41_);
+#line 66 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp43_ = _tmp42_;
+#line 66 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp44_ = gee_list_get (_tmp43_, 0);
+#line 66 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp45_ = (gchar*) _tmp44_;
+#line 66 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp43_);
+#line 66 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp41_);
+#line 66 "/home/jens/Source/shotwell/src/Tag.vala"
+ top_level_with_prefix_path = _tmp45_;
+#line 68 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp46_ = top_level_with_prefix_path;
+#line 68 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp47_ = hierarchical_tag_utilities_hierarchical_to_flat (_tmp46_);
+#line 68 "/home/jens/Source/shotwell/src/Tag.vala"
+ top_level_no_prefix_path = _tmp47_;
+#line 1386 "Tag.c"
+ {
+ GeeIterator* _container_it = NULL;
+ GeeCollection* _tmp48_ = NULL;
+ GeeCollection* _tmp49_ = NULL;
+ GeeIterator* _tmp50_ = NULL;
+ GeeIterator* _tmp51_ = NULL;
+#line 71 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp48_ = container_source_collection_get_holding_tank (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_CONTAINER_SOURCE_COLLECTION, ContainerSourceCollection));
+#line 71 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp49_ = _tmp48_;
+#line 71 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp50_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp49_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 71 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp51_ = _tmp50_;
+#line 71 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp49_);
+#line 71 "/home/jens/Source/shotwell/src/Tag.vala"
+ _container_it = _tmp51_;
+#line 71 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 1407 "Tag.c"
+ GeeIterator* _tmp52_ = NULL;
+ gboolean _tmp53_ = FALSE;
+ ContainerSource* container = NULL;
+ GeeIterator* _tmp54_ = NULL;
+ gpointer _tmp55_ = NULL;
+ Tag* parent_candidate = NULL;
+ ContainerSource* _tmp56_ = NULL;
+ Tag* _tmp57_ = NULL;
+ Tag* _tmp58_ = NULL;
+ gchar* _tmp59_ = NULL;
+ gchar* _tmp60_ = NULL;
+ const gchar* _tmp61_ = NULL;
+ gboolean _tmp62_ = FALSE;
+#line 71 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp52_ = _container_it;
+#line 71 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp53_ = gee_iterator_next (_tmp52_);
+#line 71 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp53_) {
+#line 71 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 1429 "Tag.c"
+ }
+#line 71 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp54_ = _container_it;
+#line 71 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp55_ = gee_iterator_get (_tmp54_);
+#line 71 "/home/jens/Source/shotwell/src/Tag.vala"
+ container = (ContainerSource*) _tmp55_;
+#line 72 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp56_ = container;
+#line 72 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp57_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp56_, TYPE_TAG, Tag));
+#line 72 "/home/jens/Source/shotwell/src/Tag.vala"
+ parent_candidate = _tmp57_;
+#line 73 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp58_ = parent_candidate;
+#line 73 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp59_ = tag_get_path (_tmp58_);
+#line 73 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp60_ = _tmp59_;
+#line 73 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp61_ = top_level_no_prefix_path;
+#line 73 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp62_ = g_strcmp0 (_tmp60_, _tmp61_) == 0;
+#line 73 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp60_);
+#line 73 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp62_) {
+#line 1457 "Tag.c"
+ Tag* _tmp63_ = NULL;
+#line 74 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp63_ = parent_candidate;
+#line 74 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_promote (_tmp63_);
+#line 1463 "Tag.c"
+ }
+#line 71 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (parent_candidate);
+#line 71 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (container);
+#line 1469 "Tag.c"
+ }
+#line 71 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_container_it);
+#line 1473 "Tag.c"
+ }
+#line 64 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (top_level_no_prefix_path);
+#line 64 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (top_level_with_prefix_path);
+#line 1479 "Tag.c"
+ }
+ }
+#line 79 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (_result_, TYPE_CONTAINER_SOURCE, ContainerSource);
+#line 79 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (tag);
+#line 79 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 1488 "Tag.c"
+}
+
+
+Tag* tag_source_collection_fetch (TagSourceCollection* self, TagID* tag_id) {
+ Tag* result = NULL;
+ TagID _tmp0_ = {0};
+ gint64 _tmp1_ = 0LL;
+ DataSource* _tmp2_ = NULL;
+#line 82 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_TAG_SOURCE_COLLECTION (self), NULL);
+#line 82 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (tag_id != NULL, NULL);
+#line 83 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = *tag_id;
+#line 83 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = _tmp0_.id;
+#line 83 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = database_source_collection_fetch_by_key (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATABASE_SOURCE_COLLECTION, DatabaseSourceCollection), _tmp1_);
+#line 83 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, TYPE_TAG, Tag);
+#line 83 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 1511 "Tag.c"
+}
+
+
+gboolean tag_source_collection_exists (TagSourceCollection* self, const gchar* name, gboolean treat_htags_as_root) {
+ gboolean result = FALSE;
+ const gchar* _tmp0_ = NULL;
+ gboolean _tmp1_ = FALSE;
+ Tag* _tmp2_ = NULL;
+ Tag* _tmp3_ = NULL;
+ gboolean _tmp4_ = FALSE;
+#line 86 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_TAG_SOURCE_COLLECTION (self), FALSE);
+#line 86 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (name != NULL, FALSE);
+#line 87 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = name;
+#line 87 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = treat_htags_as_root;
+#line 87 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = tag_source_collection_fetch_by_name (self, _tmp0_, _tmp1_);
+#line 87 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = _tmp2_;
+#line 87 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = _tmp3_ != NULL;
+#line 87 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp3_);
+#line 87 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = _tmp4_;
+#line 87 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 1542 "Tag.c"
+}
+
+
+GeeCollection* tag_source_collection_get_all_names (TagSourceCollection* self) {
+ GeeCollection* result = NULL;
+ GeeHashMap* _tmp0_ = NULL;
+ GeeSet* _tmp1_ = NULL;
+ GeeSet* _tmp2_ = NULL;
+#line 90 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_TAG_SOURCE_COLLECTION (self), NULL);
+#line 91 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = self->priv->name_map;
+#line 91 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = gee_abstract_map_get_keys (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_MAP, GeeMap));
+#line 91 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = _tmp1_;
+#line 91 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, GEE_TYPE_COLLECTION, GeeCollection);
+#line 91 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 1563 "Tag.c"
+}
+
+
+GeeList* tag_source_collection_fetch_for_source (TagSourceCollection* self, MediaSource* source) {
+ GeeList* result = NULL;
+ GeeHashMap* _tmp0_ = NULL;
+ MediaSource* _tmp1_ = NULL;
+ gpointer _tmp2_ = NULL;
+#line 98 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_TAG_SOURCE_COLLECTION (self), NULL);
+#line 98 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_MEDIA_SOURCE (source), NULL);
+#line 99 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = self->priv->source_map;
+#line 99 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = source;
+#line 99 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = gee_abstract_map_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp1_);
+#line 99 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = (GeeList*) _tmp2_;
+#line 99 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 1586 "Tag.c"
+}
+
+
+GeeSortedSet* tag_source_collection_fetch_sorted_for_source (TagSourceCollection* self, MediaSource* photo) {
+ GeeSortedSet* result = NULL;
+ GeeHashMap* _tmp0_ = NULL;
+ MediaSource* _tmp1_ = NULL;
+ gpointer _tmp2_ = NULL;
+#line 106 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_TAG_SOURCE_COLLECTION (self), NULL);
+#line 106 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_MEDIA_SOURCE (photo), NULL);
+#line 107 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = self->priv->sorted_source_map;
+#line 107 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = photo;
+#line 107 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = gee_abstract_map_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp1_);
+#line 107 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = (GeeSortedSet*) _tmp2_;
+#line 107 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 1609 "Tag.c"
+}
+
+
+Tag* tag_source_collection_fetch_by_name (TagSourceCollection* self, const gchar* name, gboolean treat_htags_as_root) {
+ Tag* result = NULL;
+ gboolean _tmp0_ = FALSE;
+ GeeHashMap* _tmp23_ = NULL;
+ const gchar* _tmp24_ = NULL;
+ gpointer _tmp25_ = NULL;
+#line 112 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_TAG_SOURCE_COLLECTION (self), NULL);
+#line 112 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (name != NULL, NULL);
+#line 113 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = treat_htags_as_root;
+#line 113 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp0_) {
+#line 1627 "Tag.c"
+ const gchar* _tmp1_ = NULL;
+ gboolean _tmp2_ = FALSE;
+#line 114 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = name;
+#line 114 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = g_str_has_prefix (_tmp1_, TAG_PATH_SEPARATOR_STRING);
+#line 114 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp2_) {
+#line 1636 "Tag.c"
+ const gchar* _tmp3_ = NULL;
+ GeeList* _tmp4_ = NULL;
+ GeeList* _tmp5_ = NULL;
+ gint _tmp6_ = 0;
+ gint _tmp7_ = 0;
+ gboolean _tmp8_ = FALSE;
+#line 115 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = name;
+#line 115 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = hierarchical_tag_utilities_enumerate_path_components (_tmp3_);
+#line 115 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = _tmp4_;
+#line 115 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp5_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 115 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = _tmp6_;
+#line 115 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = _tmp7_ == 1;
+#line 115 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp5_);
+#line 115 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp8_) {
+#line 1659 "Tag.c"
+ Tag* tag = NULL;
+ GeeHashMap* _tmp9_ = NULL;
+ const gchar* _tmp10_ = NULL;
+ gchar* _tmp11_ = NULL;
+ gchar* _tmp12_ = NULL;
+ gpointer _tmp13_ = NULL;
+ Tag* _tmp14_ = NULL;
+ Tag* _tmp15_ = NULL;
+#line 116 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = self->priv->name_map;
+#line 116 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = name;
+#line 116 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = hierarchical_tag_utilities_hierarchical_to_flat (_tmp10_);
+#line 116 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = _tmp11_;
+#line 116 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = gee_abstract_map_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp12_);
+#line 116 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp14_ = (Tag*) _tmp13_;
+#line 116 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp12_);
+#line 116 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag = _tmp14_;
+#line 117 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp15_ = tag;
+#line 117 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp15_ != NULL) {
+#line 118 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = tag;
+#line 118 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 1692 "Tag.c"
+ }
+#line 115 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (tag);
+#line 1696 "Tag.c"
+ }
+ } else {
+ Tag* tag = NULL;
+ GeeHashMap* _tmp16_ = NULL;
+ const gchar* _tmp17_ = NULL;
+ gchar* _tmp18_ = NULL;
+ gchar* _tmp19_ = NULL;
+ gpointer _tmp20_ = NULL;
+ Tag* _tmp21_ = NULL;
+ Tag* _tmp22_ = NULL;
+#line 121 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp16_ = self->priv->name_map;
+#line 121 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp17_ = name;
+#line 121 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp18_ = hierarchical_tag_utilities_flat_to_hierarchical (_tmp17_);
+#line 121 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp19_ = _tmp18_;
+#line 121 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp20_ = gee_abstract_map_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp16_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp19_);
+#line 121 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp21_ = (Tag*) _tmp20_;
+#line 121 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp19_);
+#line 121 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag = _tmp21_;
+#line 122 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp22_ = tag;
+#line 122 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp22_ != NULL) {
+#line 123 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = tag;
+#line 123 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 1731 "Tag.c"
+ }
+#line 114 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (tag);
+#line 1735 "Tag.c"
+ }
+ }
+#line 127 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp23_ = self->priv->name_map;
+#line 127 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp24_ = name;
+#line 127 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp25_ = gee_abstract_map_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp23_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp24_);
+#line 127 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = (Tag*) _tmp25_;
+#line 127 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 1748 "Tag.c"
+}
+
+
+Tag* tag_source_collection_restore_tag_from_holding_tank (TagSourceCollection* self, const gchar* name) {
+ Tag* result = NULL;
+ Tag* found = NULL;
+ Tag* _tmp17_ = NULL;
+#line 130 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_TAG_SOURCE_COLLECTION (self), NULL);
+#line 130 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (name != NULL, NULL);
+#line 131 "/home/jens/Source/shotwell/src/Tag.vala"
+ found = NULL;
+#line 1762 "Tag.c"
+ {
+ GeeIterator* _container_it = NULL;
+ GeeCollection* _tmp0_ = NULL;
+ GeeCollection* _tmp1_ = NULL;
+ GeeIterator* _tmp2_ = NULL;
+ GeeIterator* _tmp3_ = NULL;
+#line 132 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = container_source_collection_get_holding_tank (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_CONTAINER_SOURCE_COLLECTION, ContainerSourceCollection));
+#line 132 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = _tmp0_;
+#line 132 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 132 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = _tmp2_;
+#line 132 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp1_);
+#line 132 "/home/jens/Source/shotwell/src/Tag.vala"
+ _container_it = _tmp3_;
+#line 132 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 1783 "Tag.c"
+ GeeIterator* _tmp4_ = NULL;
+ gboolean _tmp5_ = FALSE;
+ ContainerSource* container = NULL;
+ GeeIterator* _tmp6_ = NULL;
+ gpointer _tmp7_ = NULL;
+ Tag* tag = NULL;
+ ContainerSource* _tmp8_ = NULL;
+ Tag* _tmp9_ = NULL;
+ Tag* _tmp10_ = NULL;
+ gchar* _tmp11_ = NULL;
+ gchar* _tmp12_ = NULL;
+ const gchar* _tmp13_ = NULL;
+ gboolean _tmp14_ = FALSE;
+#line 132 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = _container_it;
+#line 132 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = gee_iterator_next (_tmp4_);
+#line 132 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp5_) {
+#line 132 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 1805 "Tag.c"
+ }
+#line 132 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = _container_it;
+#line 132 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = gee_iterator_get (_tmp6_);
+#line 132 "/home/jens/Source/shotwell/src/Tag.vala"
+ container = (ContainerSource*) _tmp7_;
+#line 133 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = container;
+#line 133 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, TYPE_TAG, Tag));
+#line 133 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag = _tmp9_;
+#line 134 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = tag;
+#line 134 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = data_object_get_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, TYPE_DATA_OBJECT, DataObject));
+#line 134 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = _tmp11_;
+#line 134 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = name;
+#line 134 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp14_ = g_strcmp0 (_tmp12_, _tmp13_) == 0;
+#line 134 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp12_);
+#line 134 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp14_) {
+#line 1833 "Tag.c"
+ Tag* _tmp15_ = NULL;
+ Tag* _tmp16_ = NULL;
+#line 135 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp15_ = tag;
+#line 135 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp16_ = _g_object_ref0 (_tmp15_);
+#line 135 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (found);
+#line 135 "/home/jens/Source/shotwell/src/Tag.vala"
+ found = _tmp16_;
+#line 137 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (tag);
+#line 137 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (container);
+#line 137 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 1850 "Tag.c"
+ }
+#line 132 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (tag);
+#line 132 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (container);
+#line 1856 "Tag.c"
+ }
+#line 132 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_container_it);
+#line 1860 "Tag.c"
+ }
+#line 141 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp17_ = found;
+#line 141 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp17_ != NULL) {
+#line 1866 "Tag.c"
+ gboolean relinked = FALSE;
+ Tag* _tmp18_ = NULL;
+ gboolean _tmp19_ = FALSE;
+ gboolean _tmp20_ = FALSE;
+#line 142 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp18_ = found;
+#line 142 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp19_ = container_source_collection_relink_from_holding_tank (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_CONTAINER_SOURCE_COLLECTION, ContainerSourceCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp18_, TYPE_CONTAINER_SOURCE, ContainerSource));
+#line 142 "/home/jens/Source/shotwell/src/Tag.vala"
+ relinked = _tmp19_;
+#line 143 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp20_ = relinked;
+#line 143 "/home/jens/Source/shotwell/src/Tag.vala"
+ _vala_assert (_tmp20_, "relinked");
+#line 1881 "Tag.c"
+ }
+#line 146 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = found;
+#line 146 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 1887 "Tag.c"
+}
+
+
+static void tag_source_collection_real_notify_items_added (DataCollection* base, GeeIterable* added) {
+ TagSourceCollection * self;
+ GeeIterable* _tmp18_ = NULL;
+#line 149 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_TAG_SOURCE_COLLECTION, TagSourceCollection);
+#line 149 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (GEE_IS_ITERABLE (added));
+#line 1898 "Tag.c"
+ {
+ GeeIterator* _object_it = NULL;
+ GeeIterable* _tmp0_ = NULL;
+ GeeIterator* _tmp1_ = NULL;
+#line 150 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = added;
+#line 150 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = gee_iterable_iterator (_tmp0_);
+#line 150 "/home/jens/Source/shotwell/src/Tag.vala"
+ _object_it = _tmp1_;
+#line 150 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 1911 "Tag.c"
+ GeeIterator* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+ DataObject* object = NULL;
+ GeeIterator* _tmp4_ = NULL;
+ gpointer _tmp5_ = NULL;
+ Tag* tag = NULL;
+ DataObject* _tmp6_ = NULL;
+ Tag* _tmp7_ = NULL;
+ GeeHashMap* _tmp8_ = NULL;
+ Tag* _tmp9_ = NULL;
+ gchar* _tmp10_ = NULL;
+ gchar* _tmp11_ = NULL;
+ gboolean _tmp12_ = FALSE;
+ GeeHashMap* _tmp13_ = NULL;
+ Tag* _tmp14_ = NULL;
+ gchar* _tmp15_ = NULL;
+ gchar* _tmp16_ = NULL;
+ Tag* _tmp17_ = NULL;
+#line 150 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = _object_it;
+#line 150 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = gee_iterator_next (_tmp2_);
+#line 150 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp3_) {
+#line 150 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 1938 "Tag.c"
+ }
+#line 150 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = _object_it;
+#line 150 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = gee_iterator_get (_tmp4_);
+#line 150 "/home/jens/Source/shotwell/src/Tag.vala"
+ object = (DataObject*) _tmp5_;
+#line 151 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = object;
+#line 151 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, TYPE_TAG, Tag));
+#line 151 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag = _tmp7_;
+#line 153 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = self->priv->name_map;
+#line 153 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = tag;
+#line 153 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = data_object_get_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, TYPE_DATA_OBJECT, DataObject));
+#line 153 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = _tmp10_;
+#line 153 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = gee_abstract_map_has_key (G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp11_);
+#line 153 "/home/jens/Source/shotwell/src/Tag.vala"
+ _vala_assert (!_tmp12_, "!name_map.has_key(tag.get_name())");
+#line 153 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp11_);
+#line 154 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = self->priv->name_map;
+#line 154 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp14_ = tag;
+#line 154 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp15_ = data_object_get_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, TYPE_DATA_OBJECT, DataObject));
+#line 154 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp16_ = _tmp15_;
+#line 154 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp17_ = tag;
+#line 154 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_abstract_map_set (G_TYPE_CHECK_INSTANCE_CAST (_tmp13_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp16_, _tmp17_);
+#line 154 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp16_);
+#line 150 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (tag);
+#line 150 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (object);
+#line 1984 "Tag.c"
+ }
+#line 150 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_object_it);
+#line 1988 "Tag.c"
+ }
+#line 157 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp18_ = added;
+#line 157 "/home/jens/Source/shotwell/src/Tag.vala"
+ DATA_COLLECTION_CLASS (tag_source_collection_parent_class)->notify_items_added (G_TYPE_CHECK_INSTANCE_CAST (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_CONTAINER_SOURCE_COLLECTION, ContainerSourceCollection), TYPE_DATA_COLLECTION, DataCollection), _tmp18_);
+#line 1994 "Tag.c"
+}
+
+
+static void tag_source_collection_real_notify_items_removed (DataCollection* base, GeeIterable* removed) {
+ TagSourceCollection * self;
+ GeeIterable* _tmp29_ = NULL;
+#line 160 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_TAG_SOURCE_COLLECTION, TagSourceCollection);
+#line 160 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (GEE_IS_ITERABLE (removed));
+#line 2005 "Tag.c"
+ {
+ GeeIterator* _object_it = NULL;
+ GeeIterable* _tmp0_ = NULL;
+ GeeIterator* _tmp1_ = NULL;
+#line 161 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = removed;
+#line 161 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = gee_iterable_iterator (_tmp0_);
+#line 161 "/home/jens/Source/shotwell/src/Tag.vala"
+ _object_it = _tmp1_;
+#line 161 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 2018 "Tag.c"
+ GeeIterator* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+ DataObject* object = NULL;
+ GeeIterator* _tmp4_ = NULL;
+ gpointer _tmp5_ = NULL;
+ Tag* tag = NULL;
+ DataObject* _tmp6_ = NULL;
+ Tag* _tmp7_ = NULL;
+ gboolean unset = FALSE;
+ GeeHashMap* _tmp8_ = NULL;
+ Tag* _tmp9_ = NULL;
+ gchar* _tmp10_ = NULL;
+ gchar* _tmp11_ = NULL;
+ gboolean _tmp12_ = FALSE;
+ gboolean _tmp13_ = FALSE;
+ gboolean _tmp14_ = FALSE;
+ Tag* parent = NULL;
+ Tag* _tmp15_ = NULL;
+ Tag* _tmp16_ = NULL;
+ gboolean _tmp17_ = FALSE;
+ Tag* _tmp18_ = NULL;
+#line 161 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = _object_it;
+#line 161 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = gee_iterator_next (_tmp2_);
+#line 161 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp3_) {
+#line 161 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 2048 "Tag.c"
+ }
+#line 161 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = _object_it;
+#line 161 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = gee_iterator_get (_tmp4_);
+#line 161 "/home/jens/Source/shotwell/src/Tag.vala"
+ object = (DataObject*) _tmp5_;
+#line 162 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = object;
+#line 162 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, TYPE_TAG, Tag));
+#line 162 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag = _tmp7_;
+#line 164 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = self->priv->name_map;
+#line 164 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = tag;
+#line 164 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = data_object_get_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, TYPE_DATA_OBJECT, DataObject));
+#line 164 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = _tmp10_;
+#line 164 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = gee_abstract_map_unset (G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp11_, NULL);
+#line 164 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = _tmp12_;
+#line 164 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp11_);
+#line 164 "/home/jens/Source/shotwell/src/Tag.vala"
+ unset = _tmp13_;
+#line 165 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp14_ = unset;
+#line 165 "/home/jens/Source/shotwell/src/Tag.vala"
+ _vala_assert (_tmp14_, "unset");
+#line 169 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp15_ = tag;
+#line 169 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp16_ = tag_get_hierarchical_parent (_tmp15_);
+#line 169 "/home/jens/Source/shotwell/src/Tag.vala"
+ parent = _tmp16_;
+#line 170 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp18_ = parent;
+#line 170 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp18_ != NULL) {
+#line 2092 "Tag.c"
+ Tag* _tmp19_ = NULL;
+ Tag* _tmp20_ = NULL;
+ Tag* _tmp21_ = NULL;
+#line 170 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp19_ = parent;
+#line 170 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp20_ = tag_get_hierarchical_parent (_tmp19_);
+#line 170 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp21_ = _tmp20_;
+#line 170 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp17_ = _tmp21_ == NULL;
+#line 170 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp21_);
+#line 2106 "Tag.c"
+ } else {
+#line 170 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp17_ = FALSE;
+#line 2110 "Tag.c"
+ }
+#line 170 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp17_) {
+#line 2114 "Tag.c"
+ Tag* _tmp22_ = NULL;
+ GeeList* _tmp23_ = NULL;
+ GeeList* _tmp24_ = NULL;
+ gint _tmp25_ = 0;
+ gint _tmp26_ = 0;
+ gboolean _tmp27_ = FALSE;
+#line 171 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp22_ = parent;
+#line 171 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp23_ = tag_get_hierarchical_children (_tmp22_);
+#line 171 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp24_ = _tmp23_;
+#line 171 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp25_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp24_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 171 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp26_ = _tmp25_;
+#line 171 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp27_ = _tmp26_ == 0;
+#line 171 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp24_);
+#line 171 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp27_) {
+#line 2137 "Tag.c"
+ Tag* _tmp28_ = NULL;
+#line 172 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp28_ = parent;
+#line 172 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_flatten (_tmp28_);
+#line 2143 "Tag.c"
+ }
+ }
+#line 161 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (parent);
+#line 161 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (tag);
+#line 161 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (object);
+#line 2152 "Tag.c"
+ }
+#line 161 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_object_it);
+#line 2156 "Tag.c"
+ }
+#line 176 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp29_ = removed;
+#line 176 "/home/jens/Source/shotwell/src/Tag.vala"
+ DATA_COLLECTION_CLASS (tag_source_collection_parent_class)->notify_items_removed (G_TYPE_CHECK_INSTANCE_CAST (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_CONTAINER_SOURCE_COLLECTION, ContainerSourceCollection), TYPE_DATA_COLLECTION, DataCollection), _tmp29_);
+#line 2162 "Tag.c"
+}
+
+
+static void tag_source_collection_real_notify_items_altered (DataCollection* base, GeeMap* map) {
+ TagSourceCollection * self;
+ GeeMap* _tmp37_ = NULL;
+#line 179 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_TAG_SOURCE_COLLECTION, TagSourceCollection);
+#line 179 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (GEE_IS_MAP (map));
+#line 2173 "Tag.c"
+ {
+ GeeIterator* _object_it = NULL;
+ GeeMap* _tmp0_ = NULL;
+ GeeSet* _tmp1_ = NULL;
+ GeeSet* _tmp2_ = NULL;
+ GeeSet* _tmp3_ = NULL;
+ GeeIterator* _tmp4_ = NULL;
+ GeeIterator* _tmp5_ = NULL;
+#line 180 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = map;
+#line 180 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = gee_map_get_keys (_tmp0_);
+#line 180 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = _tmp1_;
+#line 180 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = _tmp2_;
+#line 180 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 180 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = _tmp4_;
+#line 180 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp3_);
+#line 180 "/home/jens/Source/shotwell/src/Tag.vala"
+ _object_it = _tmp5_;
+#line 180 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 2200 "Tag.c"
+ GeeIterator* _tmp6_ = NULL;
+ gboolean _tmp7_ = FALSE;
+ DataObject* object = NULL;
+ GeeIterator* _tmp8_ = NULL;
+ gpointer _tmp9_ = NULL;
+ Tag* tag = NULL;
+ DataObject* _tmp10_ = NULL;
+ Tag* _tmp11_ = NULL;
+ gchar* old_name = NULL;
+ GeeMapIterator* iter = NULL;
+ GeeHashMap* _tmp12_ = NULL;
+ GeeMapIterator* _tmp13_ = NULL;
+ const gchar* _tmp24_ = NULL;
+ Tag* _tmp25_ = NULL;
+ gchar* _tmp26_ = NULL;
+ gchar* _tmp27_ = NULL;
+ const gchar* _tmp28_ = NULL;
+ gboolean _tmp29_ = FALSE;
+#line 180 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = _object_it;
+#line 180 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = gee_iterator_next (_tmp6_);
+#line 180 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp7_) {
+#line 180 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 2227 "Tag.c"
+ }
+#line 180 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = _object_it;
+#line 180 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = gee_iterator_get (_tmp8_);
+#line 180 "/home/jens/Source/shotwell/src/Tag.vala"
+ object = (DataObject*) _tmp9_;
+#line 181 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = object;
+#line 181 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, TYPE_TAG, Tag));
+#line 181 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag = _tmp11_;
+#line 183 "/home/jens/Source/shotwell/src/Tag.vala"
+ old_name = NULL;
+#line 186 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = self->priv->name_map;
+#line 186 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = gee_abstract_map_map_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap));
+#line 186 "/home/jens/Source/shotwell/src/Tag.vala"
+ iter = _tmp13_;
+#line 187 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 2251 "Tag.c"
+ GeeMapIterator* _tmp14_ = NULL;
+ gboolean _tmp15_ = FALSE;
+ GeeMapIterator* _tmp16_ = NULL;
+ gpointer _tmp17_ = NULL;
+ Tag* _tmp18_ = NULL;
+ Tag* _tmp19_ = NULL;
+ gboolean _tmp20_ = FALSE;
+ gboolean _tmp21_ = FALSE;
+ GeeMapIterator* _tmp22_ = NULL;
+ gpointer _tmp23_ = NULL;
+#line 187 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp14_ = iter;
+#line 187 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp15_ = gee_map_iterator_next (_tmp14_);
+#line 187 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp15_) {
+#line 187 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 2270 "Tag.c"
+ }
+#line 188 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp16_ = iter;
+#line 188 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp17_ = gee_map_iterator_get_value (_tmp16_);
+#line 188 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp18_ = (Tag*) _tmp17_;
+#line 188 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp19_ = tag;
+#line 188 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp20_ = data_source_equals (G_TYPE_CHECK_INSTANCE_CAST (_tmp18_, TYPE_DATA_SOURCE, DataSource), G_TYPE_CHECK_INSTANCE_CAST (_tmp19_, TYPE_DATA_SOURCE, DataSource));
+#line 188 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp21_ = !_tmp20_;
+#line 188 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp18_);
+#line 188 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp21_) {
+#line 189 "/home/jens/Source/shotwell/src/Tag.vala"
+ continue;
+#line 2290 "Tag.c"
+ }
+#line 191 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp22_ = iter;
+#line 191 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp23_ = gee_map_iterator_get_key (_tmp22_);
+#line 191 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (old_name);
+#line 191 "/home/jens/Source/shotwell/src/Tag.vala"
+ old_name = (gchar*) _tmp23_;
+#line 193 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 2302 "Tag.c"
+ }
+#line 196 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp24_ = old_name;
+#line 196 "/home/jens/Source/shotwell/src/Tag.vala"
+ _vala_assert (_tmp24_ != NULL, "old_name != null");
+#line 198 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp25_ = tag;
+#line 198 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp26_ = data_object_get_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp25_, TYPE_DATA_OBJECT, DataObject));
+#line 198 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp27_ = _tmp26_;
+#line 198 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp28_ = old_name;
+#line 198 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp29_ = g_strcmp0 (_tmp27_, _tmp28_) != 0;
+#line 198 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp27_);
+#line 198 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp29_) {
+#line 2322 "Tag.c"
+ GeeHashMap* _tmp30_ = NULL;
+ const gchar* _tmp31_ = NULL;
+ GeeHashMap* _tmp32_ = NULL;
+ Tag* _tmp33_ = NULL;
+ gchar* _tmp34_ = NULL;
+ gchar* _tmp35_ = NULL;
+ Tag* _tmp36_ = NULL;
+#line 199 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp30_ = self->priv->name_map;
+#line 199 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp31_ = old_name;
+#line 199 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_abstract_map_unset (G_TYPE_CHECK_INSTANCE_CAST (_tmp30_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp31_, NULL);
+#line 200 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp32_ = self->priv->name_map;
+#line 200 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp33_ = tag;
+#line 200 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp34_ = data_object_get_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp33_, TYPE_DATA_OBJECT, DataObject));
+#line 200 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp35_ = _tmp34_;
+#line 200 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp36_ = tag;
+#line 200 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_abstract_map_set (G_TYPE_CHECK_INSTANCE_CAST (_tmp32_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp35_, _tmp36_);
+#line 200 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp35_);
+#line 2350 "Tag.c"
+ }
+#line 180 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (iter);
+#line 180 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (old_name);
+#line 180 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (tag);
+#line 180 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (object);
+#line 2360 "Tag.c"
+ }
+#line 180 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_object_it);
+#line 2364 "Tag.c"
+ }
+#line 204 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp37_ = map;
+#line 204 "/home/jens/Source/shotwell/src/Tag.vala"
+ DATA_COLLECTION_CLASS (tag_source_collection_parent_class)->notify_items_altered (G_TYPE_CHECK_INSTANCE_CAST (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_CONTAINER_SOURCE_COLLECTION, ContainerSourceCollection), TYPE_DATA_COLLECTION, DataCollection), _tmp37_);
+#line 2370 "Tag.c"
+}
+
+
+static gint _tag_compare_names_gcompare_data_func (gconstpointer a, gconstpointer b, gpointer self) {
+ gint result;
+ result = tag_compare_names ((Tag*) a, (Tag*) b);
+#line 224 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 2379 "Tag.c"
+}
+
+
+static void tag_source_collection_real_notify_container_contents_added (ContainerSourceCollection* base, ContainerSource* container, GeeCollection* added, gboolean relinking) {
+ TagSourceCollection * self;
+ Tag* tag = NULL;
+ ContainerSource* _tmp0_ = NULL;
+ Tag* _tmp1_ = NULL;
+ GeeCollection* sources = NULL;
+ GeeCollection* _tmp2_ = NULL;
+ GeeCollection* _tmp3_ = NULL;
+ ContainerSource* _tmp34_ = NULL;
+ GeeCollection* _tmp35_ = NULL;
+ gboolean _tmp36_ = FALSE;
+#line 207 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_TAG_SOURCE_COLLECTION, TagSourceCollection);
+#line 207 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (IS_CONTAINER_SOURCE (container));
+#line 207 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (added));
+#line 209 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = container;
+#line 209 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_TAG, Tag));
+#line 209 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag = _tmp1_;
+#line 210 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = added;
+#line 210 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 210 "/home/jens/Source/shotwell/src/Tag.vala"
+ sources = _tmp3_;
+#line 2412 "Tag.c"
+ {
+ GeeIterator* _source_it = NULL;
+ GeeCollection* _tmp4_ = NULL;
+ GeeIterator* _tmp5_ = NULL;
+#line 212 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = sources;
+#line 212 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 212 "/home/jens/Source/shotwell/src/Tag.vala"
+ _source_it = _tmp5_;
+#line 212 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 2425 "Tag.c"
+ GeeIterator* _tmp6_ = NULL;
+ gboolean _tmp7_ = FALSE;
+ MediaSource* source = NULL;
+ GeeIterator* _tmp8_ = NULL;
+ gpointer _tmp9_ = NULL;
+ GeeList* tags = NULL;
+ GeeHashMap* _tmp10_ = NULL;
+ MediaSource* _tmp11_ = NULL;
+ gpointer _tmp12_ = NULL;
+ GeeList* _tmp13_ = NULL;
+ gboolean is_added = FALSE;
+ GeeList* _tmp18_ = NULL;
+ Tag* _tmp19_ = NULL;
+ gboolean _tmp20_ = FALSE;
+ gboolean _tmp21_ = FALSE;
+ GeeSortedSet* sorted_tags = NULL;
+ GeeHashMap* _tmp22_ = NULL;
+ MediaSource* _tmp23_ = NULL;
+ gpointer _tmp24_ = NULL;
+ GeeSortedSet* _tmp25_ = NULL;
+ GeeSortedSet* _tmp30_ = NULL;
+ Tag* _tmp31_ = NULL;
+ gboolean _tmp32_ = FALSE;
+ gboolean _tmp33_ = FALSE;
+#line 212 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = _source_it;
+#line 212 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = gee_iterator_next (_tmp6_);
+#line 212 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp7_) {
+#line 212 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 2458 "Tag.c"
+ }
+#line 212 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = _source_it;
+#line 212 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = gee_iterator_get (_tmp8_);
+#line 212 "/home/jens/Source/shotwell/src/Tag.vala"
+ source = (MediaSource*) _tmp9_;
+#line 213 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = self->priv->source_map;
+#line 213 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = source;
+#line 213 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = gee_abstract_map_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp11_);
+#line 213 "/home/jens/Source/shotwell/src/Tag.vala"
+ tags = (GeeList*) _tmp12_;
+#line 214 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = tags;
+#line 214 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp13_ == NULL) {
+#line 2478 "Tag.c"
+ GeeArrayList* _tmp14_ = NULL;
+ GeeHashMap* _tmp15_ = NULL;
+ MediaSource* _tmp16_ = NULL;
+ GeeList* _tmp17_ = NULL;
+#line 215 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp14_ = gee_array_list_new (TYPE_TAG, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 215 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (tags);
+#line 215 "/home/jens/Source/shotwell/src/Tag.vala"
+ tags = G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, GEE_TYPE_LIST, GeeList);
+#line 216 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp15_ = self->priv->source_map;
+#line 216 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp16_ = source;
+#line 216 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp17_ = tags;
+#line 216 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_abstract_map_set (G_TYPE_CHECK_INSTANCE_CAST (_tmp15_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp16_, _tmp17_);
+#line 2497 "Tag.c"
+ }
+#line 219 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp18_ = tags;
+#line 219 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp19_ = tag;
+#line 219 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp20_ = gee_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp18_, GEE_TYPE_COLLECTION, GeeCollection), _tmp19_);
+#line 219 "/home/jens/Source/shotwell/src/Tag.vala"
+ is_added = _tmp20_;
+#line 220 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp21_ = is_added;
+#line 220 "/home/jens/Source/shotwell/src/Tag.vala"
+ _vala_assert (_tmp21_, "is_added");
+#line 222 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp22_ = self->priv->sorted_source_map;
+#line 222 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp23_ = source;
+#line 222 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp24_ = gee_abstract_map_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp22_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp23_);
+#line 222 "/home/jens/Source/shotwell/src/Tag.vala"
+ sorted_tags = (GeeSortedSet*) _tmp24_;
+#line 223 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp25_ = sorted_tags;
+#line 223 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp25_ == NULL) {
+#line 2523 "Tag.c"
+ GeeTreeSet* _tmp26_ = NULL;
+ GeeHashMap* _tmp27_ = NULL;
+ MediaSource* _tmp28_ = NULL;
+ GeeSortedSet* _tmp29_ = NULL;
+#line 224 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp26_ = gee_tree_set_new (TYPE_TAG, (GBoxedCopyFunc) g_object_ref, g_object_unref, _tag_compare_names_gcompare_data_func, NULL, NULL);
+#line 224 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (sorted_tags);
+#line 224 "/home/jens/Source/shotwell/src/Tag.vala"
+ sorted_tags = G_TYPE_CHECK_INSTANCE_CAST (_tmp26_, GEE_TYPE_SORTED_SET, GeeSortedSet);
+#line 225 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp27_ = self->priv->sorted_source_map;
+#line 225 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp28_ = source;
+#line 225 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp29_ = sorted_tags;
+#line 225 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_abstract_map_set (G_TYPE_CHECK_INSTANCE_CAST (_tmp27_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp28_, _tmp29_);
+#line 2542 "Tag.c"
+ }
+#line 228 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp30_ = sorted_tags;
+#line 228 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp31_ = tag;
+#line 228 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp32_ = gee_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp30_, GEE_TYPE_COLLECTION, GeeCollection), _tmp31_);
+#line 228 "/home/jens/Source/shotwell/src/Tag.vala"
+ is_added = _tmp32_;
+#line 229 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp33_ = is_added;
+#line 229 "/home/jens/Source/shotwell/src/Tag.vala"
+ _vala_assert (_tmp33_, "is_added");
+#line 212 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (sorted_tags);
+#line 212 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (tags);
+#line 212 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (source);
+#line 2562 "Tag.c"
+ }
+#line 212 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_source_it);
+#line 2566 "Tag.c"
+ }
+#line 232 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp34_ = container;
+#line 232 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp35_ = added;
+#line 232 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp36_ = relinking;
+#line 232 "/home/jens/Source/shotwell/src/Tag.vala"
+ CONTAINER_SOURCE_COLLECTION_CLASS (tag_source_collection_parent_class)->notify_container_contents_added (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_CONTAINER_SOURCE_COLLECTION, ContainerSourceCollection), _tmp34_, _tmp35_, _tmp36_);
+#line 207 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (sources);
+#line 207 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (tag);
+#line 2580 "Tag.c"
+}
+
+
+static void tag_source_collection_real_notify_container_contents_removed (ContainerSourceCollection* base, ContainerSource* container, GeeCollection* removed, gboolean unlinking) {
+ TagSourceCollection * self;
+ Tag* tag = NULL;
+ ContainerSource* _tmp0_ = NULL;
+ Tag* _tmp1_ = NULL;
+ GeeCollection* sources = NULL;
+ GeeCollection* _tmp2_ = NULL;
+ GeeCollection* _tmp3_ = NULL;
+ ContainerSource* _tmp36_ = NULL;
+ GeeCollection* _tmp37_ = NULL;
+ gboolean _tmp38_ = FALSE;
+#line 235 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_TAG_SOURCE_COLLECTION, TagSourceCollection);
+#line 235 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (IS_CONTAINER_SOURCE (container));
+#line 235 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (removed));
+#line 237 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = container;
+#line 237 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_TAG, Tag));
+#line 237 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag = _tmp1_;
+#line 238 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = removed;
+#line 238 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 238 "/home/jens/Source/shotwell/src/Tag.vala"
+ sources = _tmp3_;
+#line 2613 "Tag.c"
+ {
+ GeeIterator* _source_it = NULL;
+ GeeCollection* _tmp4_ = NULL;
+ GeeIterator* _tmp5_ = NULL;
+#line 240 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = sources;
+#line 240 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 240 "/home/jens/Source/shotwell/src/Tag.vala"
+ _source_it = _tmp5_;
+#line 240 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 2626 "Tag.c"
+ GeeIterator* _tmp6_ = NULL;
+ gboolean _tmp7_ = FALSE;
+ MediaSource* source = NULL;
+ GeeIterator* _tmp8_ = NULL;
+ gpointer _tmp9_ = NULL;
+ GeeList* tags = NULL;
+ GeeHashMap* _tmp10_ = NULL;
+ MediaSource* _tmp11_ = NULL;
+ gpointer _tmp12_ = NULL;
+ GeeList* _tmp13_ = NULL;
+ gboolean is_removed = FALSE;
+ GeeList* _tmp14_ = NULL;
+ Tag* _tmp15_ = NULL;
+ gboolean _tmp16_ = FALSE;
+ gboolean _tmp17_ = FALSE;
+ GeeList* _tmp18_ = NULL;
+ gint _tmp19_ = 0;
+ gint _tmp20_ = 0;
+ GeeSortedSet* sorted_tags = NULL;
+ GeeHashMap* _tmp23_ = NULL;
+ MediaSource* _tmp24_ = NULL;
+ gpointer _tmp25_ = NULL;
+ GeeSortedSet* _tmp26_ = NULL;
+ GeeSortedSet* _tmp27_ = NULL;
+ Tag* _tmp28_ = NULL;
+ gboolean _tmp29_ = FALSE;
+ gboolean _tmp30_ = FALSE;
+ GeeSortedSet* _tmp31_ = NULL;
+ gint _tmp32_ = 0;
+ gint _tmp33_ = 0;
+#line 240 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = _source_it;
+#line 240 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = gee_iterator_next (_tmp6_);
+#line 240 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp7_) {
+#line 240 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 2665 "Tag.c"
+ }
+#line 240 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = _source_it;
+#line 240 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = gee_iterator_get (_tmp8_);
+#line 240 "/home/jens/Source/shotwell/src/Tag.vala"
+ source = (MediaSource*) _tmp9_;
+#line 241 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = self->priv->source_map;
+#line 241 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = source;
+#line 241 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = gee_abstract_map_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp11_);
+#line 241 "/home/jens/Source/shotwell/src/Tag.vala"
+ tags = (GeeList*) _tmp12_;
+#line 242 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = tags;
+#line 242 "/home/jens/Source/shotwell/src/Tag.vala"
+ _vala_assert (_tmp13_ != NULL, "tags != null");
+#line 244 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp14_ = tags;
+#line 244 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp15_ = tag;
+#line 244 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp16_ = gee_collection_remove (G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, GEE_TYPE_COLLECTION, GeeCollection), _tmp15_);
+#line 244 "/home/jens/Source/shotwell/src/Tag.vala"
+ is_removed = _tmp16_;
+#line 245 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp17_ = is_removed;
+#line 245 "/home/jens/Source/shotwell/src/Tag.vala"
+ _vala_assert (_tmp17_, "is_removed");
+#line 247 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp18_ = tags;
+#line 247 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp19_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp18_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 247 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp20_ = _tmp19_;
+#line 247 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp20_ == 0) {
+#line 2705 "Tag.c"
+ GeeHashMap* _tmp21_ = NULL;
+ MediaSource* _tmp22_ = NULL;
+#line 248 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp21_ = self->priv->source_map;
+#line 248 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp22_ = source;
+#line 248 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_abstract_map_unset (G_TYPE_CHECK_INSTANCE_CAST (_tmp21_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp22_, NULL);
+#line 2714 "Tag.c"
+ }
+#line 250 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp23_ = self->priv->sorted_source_map;
+#line 250 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp24_ = source;
+#line 250 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp25_ = gee_abstract_map_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp23_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp24_);
+#line 250 "/home/jens/Source/shotwell/src/Tag.vala"
+ sorted_tags = (GeeSortedSet*) _tmp25_;
+#line 251 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp26_ = sorted_tags;
+#line 251 "/home/jens/Source/shotwell/src/Tag.vala"
+ _vala_assert (_tmp26_ != NULL, "sorted_tags != null");
+#line 253 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp27_ = sorted_tags;
+#line 253 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp28_ = tag;
+#line 253 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp29_ = gee_collection_remove (G_TYPE_CHECK_INSTANCE_CAST (_tmp27_, GEE_TYPE_COLLECTION, GeeCollection), _tmp28_);
+#line 253 "/home/jens/Source/shotwell/src/Tag.vala"
+ is_removed = _tmp29_;
+#line 254 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp30_ = is_removed;
+#line 254 "/home/jens/Source/shotwell/src/Tag.vala"
+ _vala_assert (_tmp30_, "is_removed");
+#line 256 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp31_ = sorted_tags;
+#line 256 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp32_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp31_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 256 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp33_ = _tmp32_;
+#line 256 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp33_ == 0) {
+#line 2748 "Tag.c"
+ GeeHashMap* _tmp34_ = NULL;
+ MediaSource* _tmp35_ = NULL;
+#line 257 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp34_ = self->priv->sorted_source_map;
+#line 257 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp35_ = source;
+#line 257 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_abstract_map_unset (G_TYPE_CHECK_INSTANCE_CAST (_tmp34_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp35_, NULL);
+#line 2757 "Tag.c"
+ }
+#line 240 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (sorted_tags);
+#line 240 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (tags);
+#line 240 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (source);
+#line 2765 "Tag.c"
+ }
+#line 240 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_source_it);
+#line 2769 "Tag.c"
+ }
+#line 260 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp36_ = container;
+#line 260 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp37_ = removed;
+#line 260 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp38_ = unlinking;
+#line 260 "/home/jens/Source/shotwell/src/Tag.vala"
+ CONTAINER_SOURCE_COLLECTION_CLASS (tag_source_collection_parent_class)->notify_container_contents_removed (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_CONTAINER_SOURCE_COLLECTION, ContainerSourceCollection), _tmp36_, _tmp37_, _tmp38_);
+#line 235 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (sources);
+#line 235 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (tag);
+#line 2783 "Tag.c"
+}
+
+
+static void tag_source_collection_on_photo_source_reimported (TagSourceCollection* self, LibraryPhoto* photo, PhotoMetadata* metadata) {
+#line 263 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (IS_TAG_SOURCE_COLLECTION (self));
+#line 263 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (IS_LIBRARY_PHOTO (photo));
+#line 263 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail ((metadata == NULL) || IS_PHOTO_METADATA (metadata));
+#line 2794 "Tag.c"
+}
+
+
+static void tag_source_collection_class_init (TagSourceCollectionClass * klass) {
+#line 7 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_source_collection_parent_class = g_type_class_peek_parent (klass);
+#line 7 "/home/jens/Source/shotwell/src/Tag.vala"
+ ((DataCollectionClass *) klass)->finalize = tag_source_collection_finalize;
+#line 7 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_type_class_add_private (klass, sizeof (TagSourceCollectionPrivate));
+#line 7 "/home/jens/Source/shotwell/src/Tag.vala"
+ ((SourceCollectionClass *) klass)->holds_type_of_source = tag_source_collection_real_holds_type_of_source;
+#line 7 "/home/jens/Source/shotwell/src/Tag.vala"
+ ((ContainerSourceCollectionClass *) klass)->get_containers_holding_source = tag_source_collection_real_get_containers_holding_source;
+#line 7 "/home/jens/Source/shotwell/src/Tag.vala"
+ ((ContainerSourceCollectionClass *) klass)->convert_backlink_to_container = tag_source_collection_real_convert_backlink_to_container;
+#line 7 "/home/jens/Source/shotwell/src/Tag.vala"
+ ((DataCollectionClass *) klass)->notify_items_added = tag_source_collection_real_notify_items_added;
+#line 7 "/home/jens/Source/shotwell/src/Tag.vala"
+ ((DataCollectionClass *) klass)->notify_items_removed = tag_source_collection_real_notify_items_removed;
+#line 7 "/home/jens/Source/shotwell/src/Tag.vala"
+ ((DataCollectionClass *) klass)->notify_items_altered = tag_source_collection_real_notify_items_altered;
+#line 7 "/home/jens/Source/shotwell/src/Tag.vala"
+ ((ContainerSourceCollectionClass *) klass)->notify_container_contents_added = tag_source_collection_real_notify_container_contents_added;
+#line 7 "/home/jens/Source/shotwell/src/Tag.vala"
+ ((ContainerSourceCollectionClass *) klass)->notify_container_contents_removed = tag_source_collection_real_notify_container_contents_removed;
+#line 2821 "Tag.c"
+}
+
+
+static void tag_source_collection_instance_init (TagSourceCollection * self) {
+ GeeHashMap* _tmp0_ = NULL;
+ GeeHashMap* _tmp1_ = NULL;
+ GeeHashMap* _tmp2_ = NULL;
+#line 7 "/home/jens/Source/shotwell/src/Tag.vala"
+ self->priv = TAG_SOURCE_COLLECTION_GET_PRIVATE (self);
+#line 8 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = gee_hash_map_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, TYPE_TAG, (GBoxedCopyFunc) g_object_ref, g_object_unref, _tag_hash_name_string_gee_hash_data_func, NULL, NULL, _tag_equal_name_strings_gee_equal_data_func, NULL, NULL, NULL, NULL, NULL);
+#line 8 "/home/jens/Source/shotwell/src/Tag.vala"
+ self->priv->name_map = _tmp0_;
+#line 10 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = gee_hash_map_new (TYPE_MEDIA_SOURCE, (GBoxedCopyFunc) g_object_ref, g_object_unref, GEE_TYPE_LIST, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 10 "/home/jens/Source/shotwell/src/Tag.vala"
+ self->priv->source_map = _tmp1_;
+#line 12 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = gee_hash_map_new (TYPE_MEDIA_SOURCE, (GBoxedCopyFunc) g_object_ref, g_object_unref, GEE_TYPE_SORTED_SET, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 12 "/home/jens/Source/shotwell/src/Tag.vala"
+ self->priv->sorted_source_map = _tmp2_;
+#line 2843 "Tag.c"
+}
+
+
+static void tag_source_collection_finalize (DataCollection* obj) {
+ TagSourceCollection * self;
+ LibraryPhotoSourceCollection* _tmp0_ = NULL;
+ guint _tmp1_ = 0U;
+#line 7 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_TAG_SOURCE_COLLECTION, TagSourceCollection);
+#line 26 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = library_photo_global;
+#line 26 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_signal_parse_name ("source-reimported", TYPE_LIBRARY_PHOTO_SOURCE_COLLECTION, &_tmp1_, NULL, FALSE);
+#line 26 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_signal_handlers_disconnect_matched (_tmp0_, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp1_, 0, NULL, (GCallback) _tag_source_collection_on_photo_source_reimported_library_photo_source_collection_source_reimported, self);
+#line 8 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (self->priv->name_map);
+#line 10 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (self->priv->source_map);
+#line 12 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (self->priv->sorted_source_map);
+#line 7 "/home/jens/Source/shotwell/src/Tag.vala"
+ DATA_COLLECTION_CLASS (tag_source_collection_parent_class)->finalize (obj);
+#line 2867 "Tag.c"
+}
+
+
+GType tag_source_collection_get_type (void) {
+ static volatile gsize tag_source_collection_type_id__volatile = 0;
+ if (g_once_init_enter (&tag_source_collection_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (TagSourceCollectionClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) tag_source_collection_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (TagSourceCollection), 0, (GInstanceInitFunc) tag_source_collection_instance_init, NULL };
+ GType tag_source_collection_type_id;
+ tag_source_collection_type_id = g_type_register_static (TYPE_CONTAINER_SOURCE_COLLECTION, "TagSourceCollection", &g_define_type_info, 0);
+ g_once_init_leave (&tag_source_collection_type_id__volatile, tag_source_collection_type_id);
+ }
+ return tag_source_collection_type_id__volatile;
+}
+
+
+static void _tag_on_media_views_contents_altered_data_collection_contents_altered (DataCollection* _sender, GeeIterable* added, GeeIterable* removed, gpointer self) {
+#line 382 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_on_media_views_contents_altered ((Tag*) self, added, removed);
+#line 2886 "Tag.c"
+}
+
+
+static void _tag_on_sources_destroyed_source_collection_items_destroyed (SourceCollection* _sender, GeeCollection* destroyed, gpointer self) {
+#line 383 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_on_sources_destroyed ((Tag*) self, destroyed);
+#line 2893 "Tag.c"
+}
+
+
+static gpointer _tag_row_ref0 (gpointer self) {
+#line 335 "/home/jens/Source/shotwell/src/Tag.vala"
+ return self ? tag_row_ref (self) : NULL;
+#line 2900 "Tag.c"
+}
+
+
+static Tag* tag_construct (GType object_type, TagRow* row, gint64 object_id) {
+ Tag * self = NULL;
+ gint64 _tmp0_ = 0LL;
+ TagRow* _tmp1_ = NULL;
+ TagRow* _tmp2_ = NULL;
+ TagRow* _tmp3_ = NULL;
+ TagRow* _tmp4_ = NULL;
+ const gchar* _tmp5_ = NULL;
+ gchar* _tmp6_ = NULL;
+ GeeArrayList* source_list = NULL;
+ GeeArrayList* _tmp7_ = NULL;
+ GeeArrayList* thumbnail_views = NULL;
+ GeeArrayList* _tmp8_ = NULL;
+ TagRow* _tmp9_ = NULL;
+ GeeSet* _tmp10_ = NULL;
+ TagRow* _tmp32_ = NULL;
+ TagID _tmp33_ = {0};
+ gint64 _tmp34_ = 0LL;
+ gchar* _tmp35_ = NULL;
+ gchar* _tmp36_ = NULL;
+ gchar* _tmp37_ = NULL;
+ gchar* _tmp38_ = NULL;
+ ViewCollection* _tmp39_ = NULL;
+ ViewCollection* _tmp40_ = NULL;
+ GeeArrayList* _tmp41_ = NULL;
+ GeeCollection* _tmp42_ = NULL;
+ GeeCollection* _tmp43_ = NULL;
+ GeeArrayList* _tmp44_ = NULL;
+ gint _tmp45_ = 0;
+ gint _tmp46_ = 0;
+ ViewCollection* _tmp51_ = NULL;
+ LibraryPhotoSourceCollection* _tmp52_ = NULL;
+ VideoSourceCollection* _tmp53_ = NULL;
+#line 332 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_TAG_ROW (row), NULL);
+#line 333 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = object_id;
+#line 333 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = (Tag*) data_source_construct (object_type, _tmp0_);
+#line 335 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = row;
+#line 335 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = _tag_row_ref0 (_tmp1_);
+#line 335 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tag_row_unref0 (self->priv->row);
+#line 335 "/home/jens/Source/shotwell/src/Tag.vala"
+ self->priv->row = _tmp2_;
+#line 338 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = self->priv->row;
+#line 338 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = self->priv->row;
+#line 338 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = _tmp4_->name;
+#line 338 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = tag_prep_tag_name (_tmp5_);
+#line 338 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp3_->name);
+#line 338 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_->name = _tmp6_;
+#line 341 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = gee_array_list_new (TYPE_MEDIA_SOURCE, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 341 "/home/jens/Source/shotwell/src/Tag.vala"
+ source_list = _tmp7_;
+#line 342 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = gee_array_list_new (TYPE_THUMBNAIL_VIEW, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 342 "/home/jens/Source/shotwell/src/Tag.vala"
+ thumbnail_views = _tmp8_;
+#line 343 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = self->priv->row;
+#line 343 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = _tmp9_->source_id_list;
+#line 343 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp10_ != NULL) {
+#line 2977 "Tag.c"
+ {
+ GeeIterator* _source_id_it = NULL;
+ TagRow* _tmp11_ = NULL;
+ GeeSet* _tmp12_ = NULL;
+ GeeIterator* _tmp13_ = NULL;
+#line 344 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = self->priv->row;
+#line 344 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = _tmp11_->source_id_list;
+#line 344 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 344 "/home/jens/Source/shotwell/src/Tag.vala"
+ _source_id_it = _tmp13_;
+#line 344 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 2993 "Tag.c"
+ GeeIterator* _tmp14_ = NULL;
+ gboolean _tmp15_ = FALSE;
+ gchar* source_id = NULL;
+ GeeIterator* _tmp16_ = NULL;
+ gpointer _tmp17_ = NULL;
+ MediaSource* current_source = NULL;
+ MediaCollectionRegistry* _tmp18_ = NULL;
+ MediaCollectionRegistry* _tmp19_ = NULL;
+ const gchar* _tmp20_ = NULL;
+ MediaSource* _tmp21_ = NULL;
+ MediaSource* _tmp22_ = NULL;
+ MediaSource* _tmp23_ = NULL;
+ GeeArrayList* _tmp24_ = NULL;
+ MediaSource* _tmp25_ = NULL;
+ GeeArrayList* _tmp26_ = NULL;
+ MediaSource* _tmp27_ = NULL;
+ ThumbnailView* _tmp28_ = NULL;
+ ThumbnailView* _tmp29_ = NULL;
+#line 344 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp14_ = _source_id_it;
+#line 344 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp15_ = gee_iterator_next (_tmp14_);
+#line 344 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp15_) {
+#line 344 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 3020 "Tag.c"
+ }
+#line 344 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp16_ = _source_id_it;
+#line 344 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp17_ = gee_iterator_get (_tmp16_);
+#line 344 "/home/jens/Source/shotwell/src/Tag.vala"
+ source_id = (gchar*) _tmp17_;
+#line 345 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp18_ = media_collection_registry_get_instance ();
+#line 345 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp19_ = _tmp18_;
+#line 345 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp20_ = source_id;
+#line 345 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp21_ = media_collection_registry_fetch_media (_tmp19_, _tmp20_);
+#line 345 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp22_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp21_, TYPE_MEDIA_SOURCE, MediaSource);
+#line 345 "/home/jens/Source/shotwell/src/Tag.vala"
+ _media_collection_registry_unref0 (_tmp19_);
+#line 345 "/home/jens/Source/shotwell/src/Tag.vala"
+ current_source = _tmp22_;
+#line 347 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp23_ = current_source;
+#line 347 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp23_ == NULL) {
+#line 348 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (current_source);
+#line 348 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (source_id);
+#line 348 "/home/jens/Source/shotwell/src/Tag.vala"
+ continue;
+#line 3052 "Tag.c"
+ }
+#line 350 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp24_ = source_list;
+#line 350 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp25_ = current_source;
+#line 350 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp24_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp25_);
+#line 351 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp26_ = thumbnail_views;
+#line 351 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp27_ = current_source;
+#line 351 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp28_ = thumbnail_view_new (G_TYPE_CHECK_INSTANCE_CAST (_tmp27_, TYPE_THUMBNAIL_SOURCE, ThumbnailSource));
+#line 351 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp29_ = _tmp28_;
+#line 351 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp26_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp29_);
+#line 351 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp29_);
+#line 344 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (current_source);
+#line 344 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (source_id);
+#line 3076 "Tag.c"
+ }
+#line 344 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_source_id_it);
+#line 3080 "Tag.c"
+ }
+ } else {
+ TagRow* _tmp30_ = NULL;
+ GeeHashSet* _tmp31_ = NULL;
+#line 355 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp30_ = self->priv->row;
+#line 355 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp31_ = gee_hash_set_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 355 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp30_->source_id_list);
+#line 355 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp30_->source_id_list = G_TYPE_CHECK_INSTANCE_CAST (_tmp31_, GEE_TYPE_SET, GeeSet);
+#line 3093 "Tag.c"
+ }
+#line 359 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp32_ = row;
+#line 359 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp33_ = _tmp32_->tag_id;
+#line 359 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp34_ = _tmp33_.id;
+#line 359 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp35_ = g_strdup_printf ("%" G_GINT64_FORMAT, _tmp34_);
+#line 359 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp36_ = _tmp35_;
+#line 359 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp37_ = g_strdup_printf ("ViewCollection for tag %s", _tmp36_);
+#line 359 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp38_ = _tmp37_;
+#line 359 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp39_ = view_collection_new (_tmp38_);
+#line 359 "/home/jens/Source/shotwell/src/Tag.vala"
+ _data_collection_unref0 (self->priv->media_views);
+#line 359 "/home/jens/Source/shotwell/src/Tag.vala"
+ self->priv->media_views = _tmp39_;
+#line 359 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp38_);
+#line 359 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp36_);
+#line 360 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp40_ = self->priv->media_views;
+#line 360 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp41_ = thumbnail_views;
+#line 360 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp42_ = data_collection_add_many (G_TYPE_CHECK_INSTANCE_CAST (_tmp40_, TYPE_DATA_COLLECTION, DataCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp41_, GEE_TYPE_COLLECTION, GeeCollection), NULL, NULL);
+#line 360 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp43_ = _tmp42_;
+#line 360 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp43_);
+#line 364 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp44_ = source_list;
+#line 364 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp45_ = gee_abstract_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp44_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 364 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp46_ = _tmp45_;
+#line 364 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp46_ > 0) {
+#line 3137 "Tag.c"
+ TagSourceCollection* _tmp47_ = NULL;
+ GeeArrayList* _tmp48_ = NULL;
+ TagSourceCollection* _tmp49_ = NULL;
+ GeeArrayList* _tmp50_ = NULL;
+#line 365 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp47_ = tag_global;
+#line 365 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp48_ = source_list;
+#line 365 "/home/jens/Source/shotwell/src/Tag.vala"
+ container_source_collection_notify_container_contents_added (G_TYPE_CHECK_INSTANCE_CAST (_tmp47_, TYPE_CONTAINER_SOURCE_COLLECTION, ContainerSourceCollection), G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_CONTAINER_SOURCE, ContainerSource), G_TYPE_CHECK_INSTANCE_CAST (_tmp48_, GEE_TYPE_COLLECTION, GeeCollection), FALSE);
+#line 366 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp49_ = tag_global;
+#line 366 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp50_ = source_list;
+#line 366 "/home/jens/Source/shotwell/src/Tag.vala"
+ container_source_collection_notify_container_contents_altered (G_TYPE_CHECK_INSTANCE_CAST (_tmp49_, TYPE_CONTAINER_SOURCE_COLLECTION, ContainerSourceCollection), G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_CONTAINER_SOURCE, ContainerSource), G_TYPE_CHECK_INSTANCE_CAST (_tmp50_, GEE_TYPE_COLLECTION, GeeCollection), FALSE, NULL, FALSE);
+#line 3154 "Tag.c"
+ }
+#line 371 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp51_ = self->priv->media_views;
+#line 371 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_signal_connect_object (G_TYPE_CHECK_INSTANCE_CAST (_tmp51_, TYPE_DATA_COLLECTION, DataCollection), "contents-altered", (GCallback) _tag_on_media_views_contents_altered_data_collection_contents_altered, self, 0);
+#line 375 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp52_ = library_photo_global;
+#line 375 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_signal_connect_object (G_TYPE_CHECK_INSTANCE_CAST (_tmp52_, TYPE_SOURCE_COLLECTION, SourceCollection), "items-destroyed", (GCallback) _tag_on_sources_destroyed_source_collection_items_destroyed, self, 0);
+#line 376 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp53_ = video_global;
+#line 376 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_signal_connect_object (G_TYPE_CHECK_INSTANCE_CAST (_tmp53_, TYPE_SOURCE_COLLECTION, SourceCollection), "items-destroyed", (GCallback) _tag_on_sources_destroyed_source_collection_items_destroyed, self, 0);
+#line 378 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_update_indexable_keywords (self);
+#line 332 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (thumbnail_views);
+#line 332 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (source_list);
+#line 332 "/home/jens/Source/shotwell/src/Tag.vala"
+ return self;
+#line 3176 "Tag.c"
+}
+
+
+static Tag* tag_new (TagRow* row, gint64 object_id) {
+#line 332 "/home/jens/Source/shotwell/src/Tag.vala"
+ return tag_construct (TYPE_TAG, row, object_id);
+#line 3183 "Tag.c"
+}
+
+
+void tag_init (ProgressMonitor monitor, void* monitor_target) {
+ TagSourceCollection* _tmp0_ = NULL;
+ GeeList* rows = NULL;
+ GeeTreeMap* ancestry_dictionary = NULL;
+ GeeTreeMap* _tmp8_ = NULL;
+ GeeArrayList* unlinked = NULL;
+ GeeArrayList* _tmp9_ = NULL;
+ gint count = 0;
+ GeeList* _tmp10_ = NULL;
+ gint _tmp11_ = 0;
+ gint _tmp12_ = 0;
+ GeeSet* victim_set = NULL;
+ GeeHashSet* _tmp54_ = NULL;
+ GeeSet* _tmp110_ = NULL;
+ TagSourceCollection* _tmp171_ = NULL;
+ GeeTreeMap* _tmp172_ = NULL;
+ GeeCollection* _tmp173_ = NULL;
+ GeeCollection* _tmp174_ = NULL;
+ GeeCollection* _tmp175_ = NULL;
+ GeeCollection* _tmp176_ = NULL;
+ GeeCollection* _tmp177_ = NULL;
+ TagSourceCollection* _tmp178_ = NULL;
+ GeeArrayList* _tmp179_ = NULL;
+ GError * _inner_error_ = NULL;
+#line 388 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = tag_source_collection_new ();
+#line 388 "/home/jens/Source/shotwell/src/Tag.vala"
+ _data_collection_unref0 (tag_global);
+#line 388 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_global = _tmp0_;
+#line 391 "/home/jens/Source/shotwell/src/Tag.vala"
+ rows = NULL;
+#line 3219 "Tag.c"
+ {
+ GeeList* _tmp1_ = NULL;
+ TagTable* _tmp2_ = NULL;
+ TagTable* _tmp3_ = NULL;
+ GeeList* _tmp4_ = NULL;
+ GeeList* _tmp5_ = NULL;
+ GeeList* _tmp6_ = NULL;
+#line 393 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = tag_table_get_instance ();
+#line 393 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = _tmp2_;
+#line 393 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = tag_table_get_all_rows (_tmp3_, &_inner_error_);
+#line 393 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = _tmp4_;
+#line 393 "/home/jens/Source/shotwell/src/Tag.vala"
+ _database_table_unref0 (_tmp3_);
+#line 393 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = _tmp5_;
+#line 393 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (G_UNLIKELY (_inner_error_ != NULL)) {
+#line 393 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_inner_error_->domain == DATABASE_ERROR) {
+#line 3243 "Tag.c"
+ goto __catch459_database_error;
+ }
+#line 393 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (rows);
+#line 393 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+#line 393 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_clear_error (&_inner_error_);
+#line 393 "/home/jens/Source/shotwell/src/Tag.vala"
+ return;
+#line 3254 "Tag.c"
+ }
+#line 393 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = _tmp1_;
+#line 393 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = NULL;
+#line 393 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (rows);
+#line 393 "/home/jens/Source/shotwell/src/Tag.vala"
+ rows = _tmp6_;
+#line 392 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp1_);
+#line 3266 "Tag.c"
+ }
+ goto __finally459;
+ __catch459_database_error:
+ {
+ GError* err = NULL;
+ GError* _tmp7_ = NULL;
+#line 392 "/home/jens/Source/shotwell/src/Tag.vala"
+ err = _inner_error_;
+#line 392 "/home/jens/Source/shotwell/src/Tag.vala"
+ _inner_error_ = NULL;
+#line 395 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = err;
+#line 395 "/home/jens/Source/shotwell/src/Tag.vala"
+ app_window_database_error (_tmp7_);
+#line 392 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_error_free0 (err);
+#line 3283 "Tag.c"
+ }
+ __finally459:
+#line 392 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (G_UNLIKELY (_inner_error_ != NULL)) {
+#line 392 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (rows);
+#line 392 "/home/jens/Source/shotwell/src/Tag.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 392 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_clear_error (&_inner_error_);
+#line 392 "/home/jens/Source/shotwell/src/Tag.vala"
+ return;
+#line 3296 "Tag.c"
+ }
+#line 404 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = gee_tree_map_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, TYPE_TAG, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 404 "/home/jens/Source/shotwell/src/Tag.vala"
+ ancestry_dictionary = _tmp8_;
+#line 406 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = gee_array_list_new (TYPE_TAG, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 406 "/home/jens/Source/shotwell/src/Tag.vala"
+ unlinked = _tmp9_;
+#line 407 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = rows;
+#line 407 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 407 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = _tmp11_;
+#line 407 "/home/jens/Source/shotwell/src/Tag.vala"
+ count = _tmp12_;
+#line 3314 "Tag.c"
+ {
+ gint ctr = 0;
+#line 408 "/home/jens/Source/shotwell/src/Tag.vala"
+ ctr = 0;
+#line 3319 "Tag.c"
+ {
+ gboolean _tmp13_ = FALSE;
+#line 408 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = TRUE;
+#line 408 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 3326 "Tag.c"
+ gint _tmp15_ = 0;
+ gint _tmp16_ = 0;
+ TagRow* row = NULL;
+ GeeList* _tmp17_ = NULL;
+ gint _tmp18_ = 0;
+ gpointer _tmp19_ = NULL;
+ gchar* name = NULL;
+ TagRow* _tmp20_ = NULL;
+ const gchar* _tmp21_ = NULL;
+ gchar* _tmp22_ = NULL;
+ const gchar* _tmp23_ = NULL;
+ TagRow* _tmp34_ = NULL;
+ const gchar* _tmp35_ = NULL;
+ gchar* _tmp36_ = NULL;
+ Tag* tag = NULL;
+ TagRow* _tmp37_ = NULL;
+ Tag* _tmp38_ = NULL;
+ ProgressMonitor _tmp39_ = NULL;
+ void* _tmp39__target = NULL;
+ GeeTreeMap* _tmp43_ = NULL;
+ Tag* _tmp44_ = NULL;
+ gchar* _tmp45_ = NULL;
+ gchar* _tmp46_ = NULL;
+ Tag* _tmp47_ = NULL;
+ Tag* _tmp48_ = NULL;
+ gboolean _tmp49_ = FALSE;
+#line 408 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp13_) {
+#line 3355 "Tag.c"
+ gint _tmp14_ = 0;
+#line 408 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp14_ = ctr;
+#line 408 "/home/jens/Source/shotwell/src/Tag.vala"
+ ctr = _tmp14_ + 1;
+#line 3361 "Tag.c"
+ }
+#line 408 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = FALSE;
+#line 408 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp15_ = ctr;
+#line 408 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp16_ = count;
+#line 408 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!(_tmp15_ < _tmp16_)) {
+#line 408 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 3373 "Tag.c"
+ }
+#line 409 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp17_ = rows;
+#line 409 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp18_ = ctr;
+#line 409 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp19_ = gee_list_get (_tmp17_, _tmp18_);
+#line 409 "/home/jens/Source/shotwell/src/Tag.vala"
+ row = (TagRow*) _tmp19_;
+#line 412 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp20_ = row;
+#line 412 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp21_ = _tmp20_->name;
+#line 412 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp22_ = tag_prep_tag_name (_tmp21_);
+#line 412 "/home/jens/Source/shotwell/src/Tag.vala"
+ name = _tmp22_;
+#line 413 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp23_ = name;
+#line 413 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp23_ == NULL) {
+#line 3395 "Tag.c"
+ TagRow* _tmp24_ = NULL;
+ const gchar* _tmp25_ = NULL;
+#line 416 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp24_ = row;
+#line 416 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp25_ = _tmp24_->name;
+#line 416 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_warning ("Tag.vala:416: Invalid tag name \"%s\": removing from database", _tmp25_);
+#line 3404 "Tag.c"
+ {
+ TagTable* _tmp26_ = NULL;
+ TagTable* _tmp27_ = NULL;
+ TagRow* _tmp28_ = NULL;
+ TagID _tmp29_ = {0};
+#line 418 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp26_ = tag_table_get_instance ();
+#line 418 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp27_ = _tmp26_;
+#line 418 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp28_ = row;
+#line 418 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp29_ = _tmp28_->tag_id;
+#line 418 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_table_remove (_tmp27_, &_tmp29_, &_inner_error_);
+#line 418 "/home/jens/Source/shotwell/src/Tag.vala"
+ _database_table_unref0 (_tmp27_);
+#line 418 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (G_UNLIKELY (_inner_error_ != NULL)) {
+#line 418 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_inner_error_->domain == DATABASE_ERROR) {
+#line 3426 "Tag.c"
+ goto __catch460_database_error;
+ }
+#line 418 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (name);
+#line 418 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tag_row_unref0 (row);
+#line 418 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (unlinked);
+#line 418 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (ancestry_dictionary);
+#line 418 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (rows);
+#line 418 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+#line 418 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_clear_error (&_inner_error_);
+#line 418 "/home/jens/Source/shotwell/src/Tag.vala"
+ return;
+#line 3445 "Tag.c"
+ }
+ }
+ goto __finally460;
+ __catch460_database_error:
+ {
+ GError* err = NULL;
+ TagRow* _tmp30_ = NULL;
+ const gchar* _tmp31_ = NULL;
+ GError* _tmp32_ = NULL;
+ const gchar* _tmp33_ = NULL;
+#line 417 "/home/jens/Source/shotwell/src/Tag.vala"
+ err = _inner_error_;
+#line 417 "/home/jens/Source/shotwell/src/Tag.vala"
+ _inner_error_ = NULL;
+#line 420 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp30_ = row;
+#line 420 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp31_ = _tmp30_->name;
+#line 420 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp32_ = err;
+#line 420 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp33_ = _tmp32_->message;
+#line 420 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_warning ("Tag.vala:420: Unable to delete tag \"%s\": %s", _tmp31_, _tmp33_);
+#line 417 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_error_free0 (err);
+#line 3472 "Tag.c"
+ }
+ __finally460:
+#line 417 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (G_UNLIKELY (_inner_error_ != NULL)) {
+#line 417 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (name);
+#line 417 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tag_row_unref0 (row);
+#line 417 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (unlinked);
+#line 417 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (ancestry_dictionary);
+#line 417 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (rows);
+#line 417 "/home/jens/Source/shotwell/src/Tag.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 417 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_clear_error (&_inner_error_);
+#line 417 "/home/jens/Source/shotwell/src/Tag.vala"
+ return;
+#line 3493 "Tag.c"
+ }
+#line 423 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (name);
+#line 423 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tag_row_unref0 (row);
+#line 423 "/home/jens/Source/shotwell/src/Tag.vala"
+ continue;
+#line 3501 "Tag.c"
+ }
+#line 426 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp34_ = row;
+#line 426 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp35_ = name;
+#line 426 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp36_ = g_strdup (_tmp35_);
+#line 426 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp34_->name);
+#line 426 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp34_->name = _tmp36_;
+#line 428 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp37_ = row;
+#line 428 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp38_ = tag_new (_tmp37_, DATA_OBJECT_INVALID_OBJECT_ID);
+#line 428 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag = _tmp38_;
+#line 429 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp39_ = monitor;
+#line 429 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp39__target = monitor_target;
+#line 429 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp39_ != NULL) {
+#line 3525 "Tag.c"
+ ProgressMonitor _tmp40_ = NULL;
+ void* _tmp40__target = NULL;
+ gint _tmp41_ = 0;
+ gint _tmp42_ = 0;
+#line 430 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp40_ = monitor;
+#line 430 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp40__target = monitor_target;
+#line 430 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp41_ = ctr;
+#line 430 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp42_ = count;
+#line 430 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp40_ ((guint64) _tmp41_, (guint64) _tmp42_, TRUE, _tmp40__target);
+#line 3540 "Tag.c"
+ }
+#line 432 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp43_ = ancestry_dictionary;
+#line 432 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp44_ = tag;
+#line 432 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp45_ = tag_get_path (_tmp44_);
+#line 432 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp46_ = _tmp45_;
+#line 432 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp47_ = tag;
+#line 432 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_abstract_map_set (G_TYPE_CHECK_INSTANCE_CAST (_tmp43_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp46_, _tmp47_);
+#line 432 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp46_);
+#line 434 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp48_ = tag;
+#line 434 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp49_ = container_source_has_links (G_TYPE_CHECK_INSTANCE_CAST (_tmp48_, TYPE_CONTAINER_SOURCE, ContainerSource));
+#line 434 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp49_) {
+#line 3562 "Tag.c"
+ Tag* _tmp50_ = NULL;
+ TagSourceCollection* _tmp51_ = NULL;
+ GeeArrayList* _tmp52_ = NULL;
+ Tag* _tmp53_ = NULL;
+#line 435 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp50_ = tag;
+#line 435 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp51_ = tag_global;
+#line 435 "/home/jens/Source/shotwell/src/Tag.vala"
+ data_source_rehydrate_backlinks (G_TYPE_CHECK_INSTANCE_CAST (_tmp50_, TYPE_DATA_SOURCE, DataSource), G_TYPE_CHECK_INSTANCE_CAST (_tmp51_, TYPE_SOURCE_COLLECTION, SourceCollection), NULL);
+#line 436 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp52_ = unlinked;
+#line 436 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp53_ = tag;
+#line 436 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp52_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp53_);
+#line 3579 "Tag.c"
+ }
+#line 408 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (tag);
+#line 408 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (name);
+#line 408 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tag_row_unref0 (row);
+#line 3587 "Tag.c"
+ }
+ }
+ }
+#line 440 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp54_ = gee_hash_set_new (TYPE_TAG, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 440 "/home/jens/Source/shotwell/src/Tag.vala"
+ victim_set = G_TYPE_CHECK_INSTANCE_CAST (_tmp54_, GEE_TYPE_SET, GeeSet);
+#line 3595 "Tag.c"
+ {
+ GeeIterator* _fq_tag_path_it = NULL;
+ GeeTreeMap* _tmp55_ = NULL;
+ GeeSet* _tmp56_ = NULL;
+ GeeSet* _tmp57_ = NULL;
+ GeeSet* _tmp58_ = NULL;
+ GeeIterator* _tmp59_ = NULL;
+ GeeIterator* _tmp60_ = NULL;
+#line 445 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp55_ = ancestry_dictionary;
+#line 445 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp56_ = gee_abstract_map_get_keys (G_TYPE_CHECK_INSTANCE_CAST (_tmp55_, GEE_TYPE_MAP, GeeMap));
+#line 445 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp57_ = _tmp56_;
+#line 445 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp58_ = _tmp57_;
+#line 445 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp59_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp58_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 445 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp60_ = _tmp59_;
+#line 445 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp58_);
+#line 445 "/home/jens/Source/shotwell/src/Tag.vala"
+ _fq_tag_path_it = _tmp60_;
+#line 445 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 3622 "Tag.c"
+ GeeIterator* _tmp61_ = NULL;
+ gboolean _tmp62_ = FALSE;
+ gchar* fq_tag_path = NULL;
+ GeeIterator* _tmp63_ = NULL;
+ gpointer _tmp64_ = NULL;
+ const gchar* _tmp65_ = NULL;
+ GeeList* _tmp66_ = NULL;
+ GeeList* _tmp67_ = NULL;
+ gint _tmp68_ = 0;
+ gint _tmp69_ = 0;
+ gboolean _tmp70_ = FALSE;
+#line 445 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp61_ = _fq_tag_path_it;
+#line 445 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp62_ = gee_iterator_next (_tmp61_);
+#line 445 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp62_) {
+#line 445 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 3642 "Tag.c"
+ }
+#line 445 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp63_ = _fq_tag_path_it;
+#line 445 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp64_ = gee_iterator_get (_tmp63_);
+#line 445 "/home/jens/Source/shotwell/src/Tag.vala"
+ fq_tag_path = (gchar*) _tmp64_;
+#line 446 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp65_ = fq_tag_path;
+#line 446 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp66_ = hierarchical_tag_utilities_enumerate_parent_paths (_tmp65_);
+#line 446 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp67_ = _tmp66_;
+#line 446 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp68_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp67_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 446 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp69_ = _tmp68_;
+#line 446 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp70_ = _tmp69_ < 1;
+#line 446 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp67_);
+#line 446 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp70_) {
+#line 3666 "Tag.c"
+ gboolean _tmp71_ = FALSE;
+ const gchar* _tmp72_ = NULL;
+ gboolean _tmp73_ = FALSE;
+#line 447 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp72_ = fq_tag_path;
+#line 447 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp73_ = g_str_has_prefix (_tmp72_, TAG_PATH_SEPARATOR_STRING);
+#line 447 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp73_) {
+#line 3676 "Tag.c"
+ GeeTreeMap* _tmp74_ = NULL;
+ const gchar* _tmp75_ = NULL;
+ gchar* _tmp76_ = NULL;
+ gchar* _tmp77_ = NULL;
+ gboolean _tmp78_ = FALSE;
+#line 448 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp74_ = ancestry_dictionary;
+#line 448 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp75_ = fq_tag_path;
+#line 448 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp76_ = hierarchical_tag_utilities_hierarchical_to_flat (_tmp75_);
+#line 448 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp77_ = _tmp76_;
+#line 448 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp78_ = gee_abstract_map_has_key (G_TYPE_CHECK_INSTANCE_CAST (_tmp74_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp77_);
+#line 448 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp71_ = _tmp78_;
+#line 448 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp77_);
+#line 3696 "Tag.c"
+ } else {
+#line 447 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp71_ = FALSE;
+#line 3700 "Tag.c"
+ }
+#line 447 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp71_) {
+#line 3704 "Tag.c"
+ GeeSet* _tmp79_ = NULL;
+ GeeTreeMap* _tmp80_ = NULL;
+ const gchar* _tmp81_ = NULL;
+ gpointer _tmp82_ = NULL;
+ Tag* _tmp83_ = NULL;
+#line 449 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp79_ = victim_set;
+#line 449 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp80_ = ancestry_dictionary;
+#line 449 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp81_ = fq_tag_path;
+#line 449 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp82_ = gee_abstract_map_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp80_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp81_);
+#line 449 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp83_ = (Tag*) _tmp82_;
+#line 449 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp79_, GEE_TYPE_COLLECTION, GeeCollection), _tmp83_);
+#line 449 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp83_);
+#line 3724 "Tag.c"
+ }
+ }
+#line 445 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (fq_tag_path);
+#line 3729 "Tag.c"
+ }
+#line 445 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_fq_tag_path_it);
+#line 3733 "Tag.c"
+ }
+ {
+ GeeIterator* _tag_it = NULL;
+ GeeSet* _tmp84_ = NULL;
+ GeeIterator* _tmp85_ = NULL;
+#line 454 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp84_ = victim_set;
+#line 454 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp85_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp84_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 454 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tag_it = _tmp85_;
+#line 454 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 3747 "Tag.c"
+ GeeIterator* _tmp86_ = NULL;
+ gboolean _tmp87_ = FALSE;
+ Tag* tag = NULL;
+ GeeIterator* _tmp88_ = NULL;
+ gpointer _tmp89_ = NULL;
+ GeeCollection* source_collection = NULL;
+ Tag* _tmp90_ = NULL;
+ GeeCollection* _tmp91_ = NULL;
+ gchar* flat_version = NULL;
+ Tag* _tmp92_ = NULL;
+ gchar* _tmp93_ = NULL;
+ TagSourceCollection* _tmp94_ = NULL;
+ const gchar* _tmp95_ = NULL;
+ Tag* _tmp96_ = NULL;
+ Tag* _tmp97_ = NULL;
+ GeeCollection* _tmp98_ = NULL;
+ GeeTreeMap* _tmp99_ = NULL;
+ Tag* _tmp100_ = NULL;
+ gchar* _tmp101_ = NULL;
+ gchar* _tmp102_ = NULL;
+ Tag* _tmp103_ = NULL;
+ Tag* _tmp104_ = NULL;
+ GeeCollection* _tmp105_ = NULL;
+ GeeCollection* _tmp106_ = NULL;
+ GeeMultiMap* _tmp107_ = NULL;
+ GeeMultiMap* _tmp108_ = NULL;
+ Tag* _tmp109_ = NULL;
+#line 454 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp86_ = _tag_it;
+#line 454 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp87_ = gee_iterator_next (_tmp86_);
+#line 454 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp87_) {
+#line 454 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 3783 "Tag.c"
+ }
+#line 454 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp88_ = _tag_it;
+#line 454 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp89_ = gee_iterator_get (_tmp88_);
+#line 454 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag = (Tag*) _tmp89_;
+#line 455 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp90_ = tag;
+#line 455 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp91_ = tag_get_sources (_tmp90_);
+#line 455 "/home/jens/Source/shotwell/src/Tag.vala"
+ source_collection = _tmp91_;
+#line 456 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp92_ = tag;
+#line 456 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp93_ = tag_get_user_visible_name (_tmp92_);
+#line 456 "/home/jens/Source/shotwell/src/Tag.vala"
+ flat_version = _tmp93_;
+#line 457 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp94_ = tag_global;
+#line 457 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp95_ = flat_version;
+#line 457 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp96_ = tag_source_collection_fetch_by_name (_tmp94_, _tmp95_, FALSE);
+#line 457 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp97_ = _tmp96_;
+#line 457 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp98_ = source_collection;
+#line 457 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_attach_many (_tmp97_, _tmp98_);
+#line 457 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp97_);
+#line 459 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp99_ = ancestry_dictionary;
+#line 459 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp100_ = tag;
+#line 459 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp101_ = tag_get_path (_tmp100_);
+#line 459 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp102_ = _tmp101_;
+#line 459 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_abstract_map_unset (G_TYPE_CHECK_INSTANCE_CAST (_tmp99_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp102_, NULL);
+#line 459 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp102_);
+#line 461 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp103_ = tag;
+#line 461 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp104_ = tag;
+#line 461 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp105_ = tag_get_sources (_tmp104_);
+#line 461 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp106_ = _tmp105_;
+#line 461 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp107_ = tag_detach_many (_tmp103_, _tmp106_);
+#line 461 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp108_ = _tmp107_;
+#line 461 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp108_);
+#line 461 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp106_);
+#line 462 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp109_ = tag;
+#line 462 "/home/jens/Source/shotwell/src/Tag.vala"
+ data_source_destroy_orphan (G_TYPE_CHECK_INSTANCE_CAST (_tmp109_, TYPE_DATA_SOURCE, DataSource), TRUE);
+#line 454 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (flat_version);
+#line 454 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (source_collection);
+#line 454 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (tag);
+#line 3855 "Tag.c"
+ }
+#line 454 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tag_it);
+#line 3859 "Tag.c"
+ }
+#line 468 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp110_ = victim_set;
+#line 468 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_collection_clear (G_TYPE_CHECK_INSTANCE_CAST (_tmp110_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 3865 "Tag.c"
+ {
+ GeeIterator* _fq_tag_path_it = NULL;
+ GeeTreeMap* _tmp111_ = NULL;
+ GeeSet* _tmp112_ = NULL;
+ GeeSet* _tmp113_ = NULL;
+ GeeSet* _tmp114_ = NULL;
+ GeeIterator* _tmp115_ = NULL;
+ GeeIterator* _tmp116_ = NULL;
+#line 470 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp111_ = ancestry_dictionary;
+#line 470 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp112_ = gee_abstract_map_get_keys (G_TYPE_CHECK_INSTANCE_CAST (_tmp111_, GEE_TYPE_MAP, GeeMap));
+#line 470 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp113_ = _tmp112_;
+#line 470 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp114_ = _tmp113_;
+#line 470 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp115_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp114_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 470 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp116_ = _tmp115_;
+#line 470 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp114_);
+#line 470 "/home/jens/Source/shotwell/src/Tag.vala"
+ _fq_tag_path_it = _tmp116_;
+#line 470 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 3892 "Tag.c"
+ GeeIterator* _tmp117_ = NULL;
+ gboolean _tmp118_ = FALSE;
+ gchar* fq_tag_path = NULL;
+ GeeIterator* _tmp119_ = NULL;
+ gpointer _tmp120_ = NULL;
+ GeeList* parents_to_search = NULL;
+ const gchar* _tmp121_ = NULL;
+ GeeList* _tmp122_ = NULL;
+ Tag* curr_child = NULL;
+ GeeTreeMap* _tmp123_ = NULL;
+ const gchar* _tmp124_ = NULL;
+ gpointer _tmp125_ = NULL;
+#line 470 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp117_ = _fq_tag_path_it;
+#line 470 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp118_ = gee_iterator_next (_tmp117_);
+#line 470 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp118_) {
+#line 470 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 3913 "Tag.c"
+ }
+#line 470 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp119_ = _fq_tag_path_it;
+#line 470 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp120_ = gee_iterator_get (_tmp119_);
+#line 470 "/home/jens/Source/shotwell/src/Tag.vala"
+ fq_tag_path = (gchar*) _tmp120_;
+#line 471 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp121_ = fq_tag_path;
+#line 471 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp122_ = hierarchical_tag_utilities_enumerate_parent_paths (_tmp121_);
+#line 471 "/home/jens/Source/shotwell/src/Tag.vala"
+ parents_to_search = _tmp122_;
+#line 474 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp123_ = ancestry_dictionary;
+#line 474 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp124_ = fq_tag_path;
+#line 474 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp125_ = gee_abstract_map_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp123_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp124_);
+#line 474 "/home/jens/Source/shotwell/src/Tag.vala"
+ curr_child = (Tag*) _tmp125_;
+#line 3935 "Tag.c"
+ {
+ GeeList* _parent_path_list = NULL;
+ GeeList* _tmp126_ = NULL;
+ GeeList* _tmp127_ = NULL;
+ gint _parent_path_size = 0;
+ GeeList* _tmp128_ = NULL;
+ gint _tmp129_ = 0;
+ gint _tmp130_ = 0;
+ gint _parent_path_index = 0;
+#line 476 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp126_ = parents_to_search;
+#line 476 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp127_ = _g_object_ref0 (_tmp126_);
+#line 476 "/home/jens/Source/shotwell/src/Tag.vala"
+ _parent_path_list = _tmp127_;
+#line 476 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp128_ = _parent_path_list;
+#line 476 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp129_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp128_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 476 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp130_ = _tmp129_;
+#line 476 "/home/jens/Source/shotwell/src/Tag.vala"
+ _parent_path_size = _tmp130_;
+#line 476 "/home/jens/Source/shotwell/src/Tag.vala"
+ _parent_path_index = -1;
+#line 476 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 3963 "Tag.c"
+ gint _tmp131_ = 0;
+ gint _tmp132_ = 0;
+ gint _tmp133_ = 0;
+ gchar* parent_path = NULL;
+ GeeList* _tmp134_ = NULL;
+ gint _tmp135_ = 0;
+ gpointer _tmp136_ = NULL;
+ gint child_ref_count = 0;
+ Tag* _tmp137_ = NULL;
+ gint _tmp138_ = 0;
+ gint parent_ref_count = 0;
+ GeeTreeMap* _tmp139_ = NULL;
+ const gchar* _tmp140_ = NULL;
+ gboolean _tmp141_ = FALSE;
+ gint _tmp147_ = 0;
+ gint _tmp148_ = 0;
+ GeeSet* _tmp151_ = NULL;
+ GeeTreeMap* _tmp152_ = NULL;
+ const gchar* _tmp153_ = NULL;
+ gpointer _tmp154_ = NULL;
+ Tag* _tmp155_ = NULL;
+ gboolean _tmp156_ = FALSE;
+ gboolean _tmp157_ = FALSE;
+#line 476 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp131_ = _parent_path_index;
+#line 476 "/home/jens/Source/shotwell/src/Tag.vala"
+ _parent_path_index = _tmp131_ + 1;
+#line 476 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp132_ = _parent_path_index;
+#line 476 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp133_ = _parent_path_size;
+#line 476 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!(_tmp132_ < _tmp133_)) {
+#line 476 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 3999 "Tag.c"
+ }
+#line 476 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp134_ = _parent_path_list;
+#line 476 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp135_ = _parent_path_index;
+#line 476 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp136_ = gee_list_get (_tmp134_, _tmp135_);
+#line 476 "/home/jens/Source/shotwell/src/Tag.vala"
+ parent_path = (gchar*) _tmp136_;
+#line 479 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp137_ = curr_child;
+#line 479 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp138_ = tag_get_sources_count (_tmp137_);
+#line 479 "/home/jens/Source/shotwell/src/Tag.vala"
+ child_ref_count = _tmp138_;
+#line 480 "/home/jens/Source/shotwell/src/Tag.vala"
+ parent_ref_count = -1;
+#line 483 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp139_ = ancestry_dictionary;
+#line 483 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp140_ = parent_path;
+#line 483 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp141_ = gee_abstract_map_has_key (G_TYPE_CHECK_INSTANCE_CAST (_tmp139_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp140_);
+#line 483 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp141_) {
+#line 4025 "Tag.c"
+ GeeTreeMap* _tmp142_ = NULL;
+ const gchar* _tmp143_ = NULL;
+ gpointer _tmp144_ = NULL;
+ Tag* _tmp145_ = NULL;
+ gint _tmp146_ = 0;
+#line 485 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp142_ = ancestry_dictionary;
+#line 485 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp143_ = parent_path;
+#line 485 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp144_ = gee_abstract_map_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp142_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp143_);
+#line 485 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp145_ = (Tag*) _tmp144_;
+#line 485 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp146_ = tag_get_sources_count (_tmp145_);
+#line 485 "/home/jens/Source/shotwell/src/Tag.vala"
+ parent_ref_count = _tmp146_;
+#line 485 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp145_);
+#line 4045 "Tag.c"
+ }
+#line 489 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp147_ = child_ref_count;
+#line 489 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp148_ = parent_ref_count;
+#line 489 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp147_ > _tmp148_) {
+#line 4053 "Tag.c"
+ GeeSet* _tmp149_ = NULL;
+ Tag* _tmp150_ = NULL;
+#line 493 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp149_ = victim_set;
+#line 493 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp150_ = curr_child;
+#line 493 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp149_, GEE_TYPE_COLLECTION, GeeCollection), _tmp150_);
+#line 497 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (parent_path);
+#line 497 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 4066 "Tag.c"
+ }
+#line 501 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp151_ = victim_set;
+#line 501 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp152_ = ancestry_dictionary;
+#line 501 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp153_ = parent_path;
+#line 501 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp154_ = gee_abstract_map_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp152_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp153_);
+#line 501 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp155_ = (Tag*) _tmp154_;
+#line 501 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp156_ = gee_collection_contains (G_TYPE_CHECK_INSTANCE_CAST (_tmp151_, GEE_TYPE_COLLECTION, GeeCollection), _tmp155_);
+#line 501 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp157_ = _tmp156_;
+#line 501 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp155_);
+#line 501 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp157_) {
+#line 4086 "Tag.c"
+ GeeSet* _tmp158_ = NULL;
+ Tag* _tmp159_ = NULL;
+#line 503 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp158_ = victim_set;
+#line 503 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp159_ = curr_child;
+#line 503 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp158_, GEE_TYPE_COLLECTION, GeeCollection), _tmp159_);
+#line 504 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (parent_path);
+#line 504 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 4099 "Tag.c"
+ }
+#line 476 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (parent_path);
+#line 4103 "Tag.c"
+ }
+#line 476 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_parent_path_list);
+#line 4107 "Tag.c"
+ }
+#line 470 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (curr_child);
+#line 470 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (parents_to_search);
+#line 470 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (fq_tag_path);
+#line 4115 "Tag.c"
+ }
+#line 470 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_fq_tag_path_it);
+#line 4119 "Tag.c"
+ }
+ {
+ GeeIterator* _t_it = NULL;
+ GeeSet* _tmp160_ = NULL;
+ GeeIterator* _tmp161_ = NULL;
+#line 510 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp160_ = victim_set;
+#line 510 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp161_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp160_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 510 "/home/jens/Source/shotwell/src/Tag.vala"
+ _t_it = _tmp161_;
+#line 510 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 4133 "Tag.c"
+ GeeIterator* _tmp162_ = NULL;
+ gboolean _tmp163_ = FALSE;
+ Tag* t = NULL;
+ GeeIterator* _tmp164_ = NULL;
+ gpointer _tmp165_ = NULL;
+ GeeTreeMap* _tmp166_ = NULL;
+ Tag* _tmp167_ = NULL;
+ gchar* _tmp168_ = NULL;
+ gchar* _tmp169_ = NULL;
+ Tag* _tmp170_ = NULL;
+#line 510 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp162_ = _t_it;
+#line 510 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp163_ = gee_iterator_next (_tmp162_);
+#line 510 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp163_) {
+#line 510 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 4152 "Tag.c"
+ }
+#line 510 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp164_ = _t_it;
+#line 510 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp165_ = gee_iterator_get (_tmp164_);
+#line 510 "/home/jens/Source/shotwell/src/Tag.vala"
+ t = (Tag*) _tmp165_;
+#line 511 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp166_ = ancestry_dictionary;
+#line 511 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp167_ = t;
+#line 511 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp168_ = tag_get_path (_tmp167_);
+#line 511 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp169_ = _tmp168_;
+#line 511 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_abstract_map_unset (G_TYPE_CHECK_INSTANCE_CAST (_tmp166_, GEE_TYPE_ABSTRACT_MAP, GeeAbstractMap), _tmp169_, NULL);
+#line 511 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp169_);
+#line 512 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp170_ = t;
+#line 512 "/home/jens/Source/shotwell/src/Tag.vala"
+ data_source_destroy_orphan (G_TYPE_CHECK_INSTANCE_CAST (_tmp170_, TYPE_DATA_SOURCE, DataSource), TRUE);
+#line 510 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (t);
+#line 4178 "Tag.c"
+ }
+#line 510 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_t_it);
+#line 4182 "Tag.c"
+ }
+#line 516 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp171_ = tag_global;
+#line 516 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp172_ = ancestry_dictionary;
+#line 516 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp173_ = gee_abstract_map_get_values (G_TYPE_CHECK_INSTANCE_CAST (_tmp172_, GEE_TYPE_MAP, GeeMap));
+#line 516 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp174_ = _tmp173_;
+#line 516 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp175_ = _tmp174_;
+#line 516 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp176_ = data_collection_add_many (G_TYPE_CHECK_INSTANCE_CAST (_tmp171_, TYPE_DATA_COLLECTION, DataCollection), _tmp175_, NULL, NULL);
+#line 516 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp177_ = _tmp176_;
+#line 516 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp177_);
+#line 516 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp175_);
+#line 517 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp178_ = tag_global;
+#line 517 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp179_ = unlinked;
+#line 517 "/home/jens/Source/shotwell/src/Tag.vala"
+ container_source_collection_init_add_many_unlinked (G_TYPE_CHECK_INSTANCE_CAST (_tmp178_, TYPE_CONTAINER_SOURCE_COLLECTION, ContainerSourceCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp179_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 4208 "Tag.c"
+ {
+ GeeIterator* _t_it = NULL;
+ GeeTreeMap* _tmp180_ = NULL;
+ GeeCollection* _tmp181_ = NULL;
+ GeeCollection* _tmp182_ = NULL;
+ GeeCollection* _tmp183_ = NULL;
+ GeeIterator* _tmp184_ = NULL;
+ GeeIterator* _tmp185_ = NULL;
+#line 521 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp180_ = ancestry_dictionary;
+#line 521 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp181_ = gee_abstract_map_get_values (G_TYPE_CHECK_INSTANCE_CAST (_tmp180_, GEE_TYPE_MAP, GeeMap));
+#line 521 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp182_ = _tmp181_;
+#line 521 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp183_ = _tmp182_;
+#line 521 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp184_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp183_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 521 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp185_ = _tmp184_;
+#line 521 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp183_);
+#line 521 "/home/jens/Source/shotwell/src/Tag.vala"
+ _t_it = _tmp185_;
+#line 521 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 4235 "Tag.c"
+ GeeIterator* _tmp186_ = NULL;
+ gboolean _tmp187_ = FALSE;
+ Tag* t = NULL;
+ GeeIterator* _tmp188_ = NULL;
+ gpointer _tmp189_ = NULL;
+ gboolean _tmp190_ = FALSE;
+ Tag* _tmp191_ = NULL;
+ GeeList* _tmp192_ = NULL;
+ GeeList* _tmp193_ = NULL;
+ gint _tmp194_ = 0;
+ gint _tmp195_ = 0;
+ gboolean _tmp196_ = FALSE;
+#line 521 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp186_ = _t_it;
+#line 521 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp187_ = gee_iterator_next (_tmp186_);
+#line 521 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp187_) {
+#line 521 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 4256 "Tag.c"
+ }
+#line 521 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp188_ = _t_it;
+#line 521 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp189_ = gee_iterator_get (_tmp188_);
+#line 521 "/home/jens/Source/shotwell/src/Tag.vala"
+ t = (Tag*) _tmp189_;
+#line 523 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp191_ = t;
+#line 523 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp192_ = tag_get_hierarchical_children (_tmp191_);
+#line 523 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp193_ = _tmp192_;
+#line 523 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp194_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp193_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 523 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp195_ = _tmp194_;
+#line 523 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp196_ = _tmp195_ < 1;
+#line 523 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp193_);
+#line 523 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp196_) {
+#line 4280 "Tag.c"
+ Tag* _tmp197_ = NULL;
+ Tag* _tmp198_ = NULL;
+ Tag* _tmp199_ = NULL;
+#line 523 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp197_ = t;
+#line 523 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp198_ = tag_get_hierarchical_parent (_tmp197_);
+#line 523 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp199_ = _tmp198_;
+#line 523 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp190_ = _tmp199_ == NULL;
+#line 523 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp199_);
+#line 4294 "Tag.c"
+ } else {
+#line 523 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp190_ = FALSE;
+#line 4298 "Tag.c"
+ }
+#line 523 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp190_) {
+#line 4302 "Tag.c"
+ Tag* _tmp200_ = NULL;
+#line 525 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp200_ = t;
+#line 525 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_flatten (_tmp200_);
+#line 4308 "Tag.c"
+ }
+#line 521 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (t);
+#line 4312 "Tag.c"
+ }
+#line 521 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_t_it);
+#line 4316 "Tag.c"
+ }
+#line 387 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (victim_set);
+#line 387 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (unlinked);
+#line 387 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (ancestry_dictionary);
+#line 387 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (rows);
+#line 4326 "Tag.c"
+}
+
+
+void tag_terminate (void) {
+}
+
+
+gint tag_compare_names (Tag* a, Tag* b) {
+ gint result = 0;
+ Tag* _tmp0_ = NULL;
+ gchar* _tmp1_ = NULL;
+ gchar* _tmp2_ = NULL;
+ Tag* _tmp3_ = NULL;
+ gchar* _tmp4_ = NULL;
+ gchar* _tmp5_ = NULL;
+ Tag* _tmp6_ = NULL;
+ gchar* _tmp7_ = NULL;
+ gchar* _tmp8_ = NULL;
+ Tag* _tmp9_ = NULL;
+ gchar* _tmp10_ = NULL;
+ gchar* _tmp11_ = NULL;
+ gint _tmp12_ = 0;
+ gint _tmp13_ = 0;
+#line 533 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_TAG (a), 0);
+#line 533 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_TAG (b), 0);
+#line 534 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = a;
+#line 534 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = data_object_get_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_DATA_OBJECT, DataObject));
+#line 534 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = _tmp1_;
+#line 534 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = a;
+#line 534 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = tag_get_name_collation_key (_tmp3_);
+#line 534 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = _tmp4_;
+#line 534 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = b;
+#line 534 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = data_object_get_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, TYPE_DATA_OBJECT, DataObject));
+#line 534 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = _tmp7_;
+#line 534 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = b;
+#line 534 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = tag_get_name_collation_key (_tmp9_);
+#line 534 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = _tmp10_;
+#line 534 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = string_precollated_compare (_tmp2_, _tmp5_, _tmp8_, _tmp11_);
+#line 534 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = _tmp12_;
+#line 534 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp11_);
+#line 534 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp8_);
+#line 534 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp5_);
+#line 534 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp2_);
+#line 534 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = _tmp13_;
+#line 534 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 4394 "Tag.c"
+}
+
+
+gint tag_compare_user_visible_names (Tag* a, Tag* b) {
+ gint result = 0;
+ Tag* _tmp0_ = NULL;
+ gchar* _tmp1_ = NULL;
+ gchar* _tmp2_ = NULL;
+ Tag* _tmp3_ = NULL;
+ gchar* _tmp4_ = NULL;
+ gchar* _tmp5_ = NULL;
+ Tag* _tmp6_ = NULL;
+ gchar* _tmp7_ = NULL;
+ gchar* _tmp8_ = NULL;
+ Tag* _tmp9_ = NULL;
+ gchar* _tmp10_ = NULL;
+ gchar* _tmp11_ = NULL;
+ gint _tmp12_ = 0;
+ gint _tmp13_ = 0;
+#line 538 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_TAG (a), 0);
+#line 538 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_TAG (b), 0);
+#line 539 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = a;
+#line 539 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = tag_get_user_visible_name (_tmp0_);
+#line 539 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = _tmp1_;
+#line 539 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = a;
+#line 539 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = tag_get_name_collation_key (_tmp3_);
+#line 539 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = _tmp4_;
+#line 539 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = b;
+#line 539 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = tag_get_user_visible_name (_tmp6_);
+#line 539 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = _tmp7_;
+#line 539 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = b;
+#line 539 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = tag_get_name_collation_key (_tmp9_);
+#line 539 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = _tmp10_;
+#line 539 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = string_precollated_compare (_tmp2_, _tmp5_, _tmp8_, _tmp11_);
+#line 539 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = _tmp12_;
+#line 539 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp11_);
+#line 539 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp8_);
+#line 539 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp5_);
+#line 539 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp2_);
+#line 539 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = _tmp13_;
+#line 539 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 4458 "Tag.c"
+}
+
+
+guint tag_hash_name_string (const gchar* a) {
+ guint result = 0U;
+ const gchar* _tmp0_ = NULL;
+ guint _tmp1_ = 0U;
+#line 543 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (a != NULL, 0U);
+#line 544 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = a;
+#line 544 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = string_collated_hash (_tmp0_);
+#line 544 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = _tmp1_;
+#line 544 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 4476 "Tag.c"
+}
+
+
+gboolean tag_equal_name_strings (const gchar* a, const gchar* b) {
+ gboolean result = FALSE;
+ const gchar* _tmp0_ = NULL;
+ const gchar* _tmp1_ = NULL;
+ gboolean _tmp2_ = FALSE;
+#line 547 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (a != NULL, FALSE);
+#line 547 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (b != NULL, FALSE);
+#line 548 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = a;
+#line 548 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = b;
+#line 548 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = string_collated_equals (_tmp0_, _tmp1_);
+#line 548 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = _tmp2_;
+#line 548 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 4499 "Tag.c"
+}
+
+
+Tag* tag_for_path (const gchar* name) {
+ Tag* result = NULL;
+ Tag* tag = NULL;
+ TagSourceCollection* _tmp0_ = NULL;
+ const gchar* _tmp1_ = NULL;
+ Tag* _tmp2_ = NULL;
+ Tag* _tmp3_ = NULL;
+ Tag* _tmp7_ = NULL;
+ TagSourceCollection* _tmp16_ = NULL;
+ Tag* _tmp17_ = NULL;
+ GError * _inner_error_ = NULL;
+#line 553 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (name != NULL, NULL);
+#line 554 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = tag_global;
+#line 554 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = name;
+#line 554 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = tag_source_collection_fetch_by_name (_tmp0_, _tmp1_, TRUE);
+#line 554 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag = _tmp2_;
+#line 555 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = tag;
+#line 555 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp3_ == NULL) {
+#line 4528 "Tag.c"
+ TagSourceCollection* _tmp4_ = NULL;
+ const gchar* _tmp5_ = NULL;
+ Tag* _tmp6_ = NULL;
+#line 556 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = tag_global;
+#line 556 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = name;
+#line 556 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = tag_source_collection_restore_tag_from_holding_tank (_tmp4_, _tmp5_);
+#line 556 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (tag);
+#line 556 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag = _tmp6_;
+#line 4542 "Tag.c"
+ }
+#line 558 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = tag;
+#line 558 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp7_ != NULL) {
+#line 559 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = tag;
+#line 559 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 4552 "Tag.c"
+ }
+ {
+ TagRow* _tmp8_ = NULL;
+ TagTable* _tmp9_ = NULL;
+ TagTable* _tmp10_ = NULL;
+ const gchar* _tmp11_ = NULL;
+ TagRow* _tmp12_ = NULL;
+ TagRow* _tmp13_ = NULL;
+ Tag* _tmp14_ = NULL;
+#line 563 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = tag_table_get_instance ();
+#line 563 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = _tmp9_;
+#line 563 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = name;
+#line 563 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = tag_table_add (_tmp10_, _tmp11_, &_inner_error_);
+#line 563 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = _tmp12_;
+#line 563 "/home/jens/Source/shotwell/src/Tag.vala"
+ _database_table_unref0 (_tmp10_);
+#line 563 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = _tmp13_;
+#line 563 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (G_UNLIKELY (_inner_error_ != NULL)) {
+#line 563 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_inner_error_->domain == DATABASE_ERROR) {
+#line 4580 "Tag.c"
+ goto __catch461_database_error;
+ }
+#line 563 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (tag);
+#line 563 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+#line 563 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_clear_error (&_inner_error_);
+#line 563 "/home/jens/Source/shotwell/src/Tag.vala"
+ return NULL;
+#line 4591 "Tag.c"
+ }
+#line 563 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp14_ = tag_new (_tmp8_, DATA_OBJECT_INVALID_OBJECT_ID);
+#line 563 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (tag);
+#line 563 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag = _tmp14_;
+#line 562 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tag_row_unref0 (_tmp8_);
+#line 4601 "Tag.c"
+ }
+ goto __finally461;
+ __catch461_database_error:
+ {
+ GError* err = NULL;
+ GError* _tmp15_ = NULL;
+#line 562 "/home/jens/Source/shotwell/src/Tag.vala"
+ err = _inner_error_;
+#line 562 "/home/jens/Source/shotwell/src/Tag.vala"
+ _inner_error_ = NULL;
+#line 565 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp15_ = err;
+#line 565 "/home/jens/Source/shotwell/src/Tag.vala"
+ app_window_database_error (_tmp15_);
+#line 562 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_error_free0 (err);
+#line 4618 "Tag.c"
+ }
+ __finally461:
+#line 562 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (G_UNLIKELY (_inner_error_ != NULL)) {
+#line 562 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (tag);
+#line 562 "/home/jens/Source/shotwell/src/Tag.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 562 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_clear_error (&_inner_error_);
+#line 562 "/home/jens/Source/shotwell/src/Tag.vala"
+ return NULL;
+#line 4631 "Tag.c"
+ }
+#line 568 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp16_ = tag_global;
+#line 568 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp17_ = tag;
+#line 568 "/home/jens/Source/shotwell/src/Tag.vala"
+ data_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp16_, TYPE_DATA_COLLECTION, DataCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp17_, TYPE_DATA_OBJECT, DataObject));
+#line 570 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = tag;
+#line 570 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 4643 "Tag.c"
+}
+
+
+GeeCollection* tag_get_terminal_tags (GeeCollection* tags) {
+ GeeCollection* result = NULL;
+ GeeSet* result_paths = NULL;
+ GeeHashSet* _tmp0_ = NULL;
+ GeeArrayList* _result_ = NULL;
+ GeeArrayList* _tmp38_ = NULL;
+#line 573 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (GEE_IS_COLLECTION (tags), NULL);
+#line 574 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = gee_hash_set_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 574 "/home/jens/Source/shotwell/src/Tag.vala"
+ result_paths = G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_SET, GeeSet);
+#line 4659 "Tag.c"
+ {
+ GeeIterator* _tag_it = NULL;
+ GeeCollection* _tmp1_ = NULL;
+ GeeIterator* _tmp2_ = NULL;
+#line 576 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = tags;
+#line 576 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 576 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tag_it = _tmp2_;
+#line 576 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 4672 "Tag.c"
+ GeeIterator* _tmp3_ = NULL;
+ gboolean _tmp4_ = FALSE;
+ Tag* tag = NULL;
+ GeeIterator* _tmp5_ = NULL;
+ gpointer _tmp6_ = NULL;
+ Tag* _tmp7_ = NULL;
+ gchar* _tmp8_ = NULL;
+ gchar* _tmp9_ = NULL;
+ gboolean _tmp10_ = FALSE;
+ gboolean _tmp11_ = FALSE;
+ Tag* _tmp16_ = NULL;
+ Tag* _tmp17_ = NULL;
+ Tag* _tmp18_ = NULL;
+ gboolean _tmp19_ = FALSE;
+ GeeSet* _tmp34_ = NULL;
+ Tag* _tmp35_ = NULL;
+ gchar* _tmp36_ = NULL;
+ gchar* _tmp37_ = NULL;
+#line 576 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = _tag_it;
+#line 576 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = gee_iterator_next (_tmp3_);
+#line 576 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp4_) {
+#line 576 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 4699 "Tag.c"
+ }
+#line 576 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = _tag_it;
+#line 576 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = gee_iterator_get (_tmp5_);
+#line 576 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag = (Tag*) _tmp6_;
+#line 578 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = tag;
+#line 578 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = tag_get_path (_tmp7_);
+#line 578 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = _tmp8_;
+#line 578 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = g_str_has_prefix (_tmp9_, TAG_PATH_SEPARATOR_STRING);
+#line 578 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = !_tmp10_;
+#line 578 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp9_);
+#line 578 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp11_) {
+#line 4721 "Tag.c"
+ GeeSet* _tmp12_ = NULL;
+ Tag* _tmp13_ = NULL;
+ gchar* _tmp14_ = NULL;
+ gchar* _tmp15_ = NULL;
+#line 579 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = result_paths;
+#line 579 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = tag;
+#line 579 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp14_ = tag_get_path (_tmp13_);
+#line 579 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp15_ = _tmp14_;
+#line 579 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, GEE_TYPE_COLLECTION, GeeCollection), _tmp15_);
+#line 579 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp15_);
+#line 580 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (tag);
+#line 580 "/home/jens/Source/shotwell/src/Tag.vala"
+ continue;
+#line 4742 "Tag.c"
+ }
+#line 586 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp16_ = tag;
+#line 586 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp17_ = tag_get_hierarchical_parent (_tmp16_);
+#line 586 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp18_ = _tmp17_;
+#line 586 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp19_ = _tmp18_ != NULL;
+#line 586 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp18_);
+#line 586 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp19_) {
+#line 4756 "Tag.c"
+ GeeSet* _tmp20_ = NULL;
+ Tag* _tmp21_ = NULL;
+ Tag* _tmp22_ = NULL;
+ Tag* _tmp23_ = NULL;
+ gchar* _tmp24_ = NULL;
+ gchar* _tmp25_ = NULL;
+ gboolean _tmp26_ = FALSE;
+ gboolean _tmp27_ = FALSE;
+#line 589 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp20_ = result_paths;
+#line 589 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp21_ = tag;
+#line 589 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp22_ = tag_get_hierarchical_parent (_tmp21_);
+#line 589 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp23_ = _tmp22_;
+#line 589 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp24_ = tag_get_path (_tmp23_);
+#line 589 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp25_ = _tmp24_;
+#line 589 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp26_ = gee_collection_contains (G_TYPE_CHECK_INSTANCE_CAST (_tmp20_, GEE_TYPE_COLLECTION, GeeCollection), _tmp25_);
+#line 589 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp27_ = _tmp26_;
+#line 589 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp25_);
+#line 589 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp23_);
+#line 589 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp27_) {
+#line 4787 "Tag.c"
+ GeeSet* _tmp28_ = NULL;
+ Tag* _tmp29_ = NULL;
+ Tag* _tmp30_ = NULL;
+ Tag* _tmp31_ = NULL;
+ gchar* _tmp32_ = NULL;
+ gchar* _tmp33_ = NULL;
+#line 590 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp28_ = result_paths;
+#line 590 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp29_ = tag;
+#line 590 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp30_ = tag_get_hierarchical_parent (_tmp29_);
+#line 590 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp31_ = _tmp30_;
+#line 590 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp32_ = tag_get_path (_tmp31_);
+#line 590 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp33_ = _tmp32_;
+#line 590 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_collection_remove (G_TYPE_CHECK_INSTANCE_CAST (_tmp28_, GEE_TYPE_COLLECTION, GeeCollection), _tmp33_);
+#line 590 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp33_);
+#line 590 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp31_);
+#line 4812 "Tag.c"
+ }
+ }
+#line 593 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp34_ = result_paths;
+#line 593 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp35_ = tag;
+#line 593 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp36_ = tag_get_path (_tmp35_);
+#line 593 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp37_ = _tmp36_;
+#line 593 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp34_, GEE_TYPE_COLLECTION, GeeCollection), _tmp37_);
+#line 593 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp37_);
+#line 576 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (tag);
+#line 4829 "Tag.c"
+ }
+#line 576 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tag_it);
+#line 4833 "Tag.c"
+ }
+#line 596 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp38_ = gee_array_list_new (TYPE_TAG, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 596 "/home/jens/Source/shotwell/src/Tag.vala"
+ _result_ = _tmp38_;
+#line 4839 "Tag.c"
+ {
+ GeeIterator* _path_it = NULL;
+ GeeSet* _tmp39_ = NULL;
+ GeeIterator* _tmp40_ = NULL;
+#line 597 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp39_ = result_paths;
+#line 597 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp40_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp39_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 597 "/home/jens/Source/shotwell/src/Tag.vala"
+ _path_it = _tmp40_;
+#line 597 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 4852 "Tag.c"
+ GeeIterator* _tmp41_ = NULL;
+ gboolean _tmp42_ = FALSE;
+ gchar* path = NULL;
+ GeeIterator* _tmp43_ = NULL;
+ gpointer _tmp44_ = NULL;
+ TagSourceCollection* _tmp45_ = NULL;
+ const gchar* _tmp46_ = NULL;
+ gboolean _tmp47_ = FALSE;
+#line 597 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp41_ = _path_it;
+#line 597 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp42_ = gee_iterator_next (_tmp41_);
+#line 597 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp42_) {
+#line 597 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 4869 "Tag.c"
+ }
+#line 597 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp43_ = _path_it;
+#line 597 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp44_ = gee_iterator_get (_tmp43_);
+#line 597 "/home/jens/Source/shotwell/src/Tag.vala"
+ path = (gchar*) _tmp44_;
+#line 598 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp45_ = tag_global;
+#line 598 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp46_ = path;
+#line 598 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp47_ = tag_source_collection_exists (_tmp45_, _tmp46_, FALSE);
+#line 598 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp47_) {
+#line 4885 "Tag.c"
+ GeeArrayList* _tmp48_ = NULL;
+ const gchar* _tmp49_ = NULL;
+ Tag* _tmp50_ = NULL;
+ Tag* _tmp51_ = NULL;
+#line 599 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp48_ = _result_;
+#line 599 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp49_ = path;
+#line 599 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp50_ = tag_for_path (_tmp49_);
+#line 599 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp51_ = _tmp50_;
+#line 599 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp48_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp51_);
+#line 599 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp51_);
+#line 4902 "Tag.c"
+ } else {
+ {
+ GeeIterator* _probed_tag_it = NULL;
+ GeeCollection* _tmp52_ = NULL;
+ GeeIterator* _tmp53_ = NULL;
+#line 601 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp52_ = tags;
+#line 601 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp53_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp52_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 601 "/home/jens/Source/shotwell/src/Tag.vala"
+ _probed_tag_it = _tmp53_;
+#line 601 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 4916 "Tag.c"
+ GeeIterator* _tmp54_ = NULL;
+ gboolean _tmp55_ = FALSE;
+ Tag* probed_tag = NULL;
+ GeeIterator* _tmp56_ = NULL;
+ gpointer _tmp57_ = NULL;
+ Tag* _tmp58_ = NULL;
+ gchar* _tmp59_ = NULL;
+ gchar* _tmp60_ = NULL;
+ const gchar* _tmp61_ = NULL;
+ gboolean _tmp62_ = FALSE;
+#line 601 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp54_ = _probed_tag_it;
+#line 601 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp55_ = gee_iterator_next (_tmp54_);
+#line 601 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp55_) {
+#line 601 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 4935 "Tag.c"
+ }
+#line 601 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp56_ = _probed_tag_it;
+#line 601 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp57_ = gee_iterator_get (_tmp56_);
+#line 601 "/home/jens/Source/shotwell/src/Tag.vala"
+ probed_tag = (Tag*) _tmp57_;
+#line 602 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp58_ = probed_tag;
+#line 602 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp59_ = tag_get_path (_tmp58_);
+#line 602 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp60_ = _tmp59_;
+#line 602 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp61_ = path;
+#line 602 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp62_ = g_strcmp0 (_tmp60_, _tmp61_) == 0;
+#line 602 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp60_);
+#line 602 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp62_) {
+#line 4957 "Tag.c"
+ GeeArrayList* _tmp63_ = NULL;
+ Tag* _tmp64_ = NULL;
+#line 603 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp63_ = _result_;
+#line 603 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp64_ = probed_tag;
+#line 603 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp63_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp64_);
+#line 4966 "Tag.c"
+ }
+#line 601 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (probed_tag);
+#line 4970 "Tag.c"
+ }
+#line 601 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_probed_tag_it);
+#line 4974 "Tag.c"
+ }
+ }
+#line 597 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (path);
+#line 4979 "Tag.c"
+ }
+#line 597 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_path_it);
+#line 4983 "Tag.c"
+ }
+#line 608 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (_result_, GEE_TYPE_COLLECTION, GeeCollection);
+#line 608 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (result_paths);
+#line 608 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 4991 "Tag.c"
+}
+
+
+static gint _tag_compare_user_visible_names_gcompare_data_func (gconstpointer a, gconstpointer b, gpointer self) {
+ gint result;
+ result = tag_compare_user_visible_names ((Tag*) a, (Tag*) b);
+#line 623 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 5000 "Tag.c"
+}
+
+
+GeeList* tag_make_user_visible_tag_list (GeeCollection* tags) {
+ GeeList* result = NULL;
+ GeeHashSet* seen_tags = NULL;
+ GeeHashSet* _tmp0_ = NULL;
+ GeeCollection* terminal_tags = NULL;
+ GeeCollection* _tmp1_ = NULL;
+ GeeCollection* _tmp2_ = NULL;
+ GeeArrayList* sorted_tags = NULL;
+ GeeArrayList* _tmp3_ = NULL;
+ GeeArrayList* _tmp19_ = NULL;
+#line 612 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (GEE_IS_COLLECTION (tags), NULL);
+#line 613 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = gee_hash_set_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 613 "/home/jens/Source/shotwell/src/Tag.vala"
+ seen_tags = _tmp0_;
+#line 614 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = tags;
+#line 614 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = tag_get_terminal_tags (_tmp1_);
+#line 614 "/home/jens/Source/shotwell/src/Tag.vala"
+ terminal_tags = _tmp2_;
+#line 615 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = gee_array_list_new (TYPE_TAG, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 615 "/home/jens/Source/shotwell/src/Tag.vala"
+ sorted_tags = _tmp3_;
+#line 5030 "Tag.c"
+ {
+ GeeIterator* _tag_it = NULL;
+ GeeCollection* _tmp4_ = NULL;
+ GeeIterator* _tmp5_ = NULL;
+#line 616 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = terminal_tags;
+#line 616 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 616 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tag_it = _tmp5_;
+#line 616 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 5043 "Tag.c"
+ GeeIterator* _tmp6_ = NULL;
+ gboolean _tmp7_ = FALSE;
+ Tag* tag = NULL;
+ GeeIterator* _tmp8_ = NULL;
+ gpointer _tmp9_ = NULL;
+ gchar* user_visible_name = NULL;
+ Tag* _tmp10_ = NULL;
+ gchar* _tmp11_ = NULL;
+ GeeHashSet* _tmp12_ = NULL;
+ const gchar* _tmp13_ = NULL;
+ gboolean _tmp14_ = FALSE;
+#line 616 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = _tag_it;
+#line 616 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = gee_iterator_next (_tmp6_);
+#line 616 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp7_) {
+#line 616 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 5063 "Tag.c"
+ }
+#line 616 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = _tag_it;
+#line 616 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = gee_iterator_get (_tmp8_);
+#line 616 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag = (Tag*) _tmp9_;
+#line 617 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = tag;
+#line 617 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = tag_get_user_visible_name (_tmp10_);
+#line 617 "/home/jens/Source/shotwell/src/Tag.vala"
+ user_visible_name = _tmp11_;
+#line 618 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = seen_tags;
+#line 618 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = user_visible_name;
+#line 618 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp14_ = gee_abstract_collection_contains (G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp13_);
+#line 618 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp14_) {
+#line 5085 "Tag.c"
+ GeeArrayList* _tmp15_ = NULL;
+ Tag* _tmp16_ = NULL;
+ GeeHashSet* _tmp17_ = NULL;
+ const gchar* _tmp18_ = NULL;
+#line 619 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp15_ = sorted_tags;
+#line 619 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp16_ = tag;
+#line 619 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp15_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp16_);
+#line 620 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp17_ = seen_tags;
+#line 620 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp18_ = user_visible_name;
+#line 620 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp17_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp18_);
+#line 5102 "Tag.c"
+ }
+#line 616 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (user_visible_name);
+#line 616 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (tag);
+#line 5108 "Tag.c"
+ }
+#line 616 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tag_it);
+#line 5112 "Tag.c"
+ }
+#line 623 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp19_ = sorted_tags;
+#line 623 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_list_sort (G_TYPE_CHECK_INSTANCE_CAST (_tmp19_, GEE_TYPE_LIST, GeeList), _tag_compare_user_visible_names_gcompare_data_func, NULL, NULL);
+#line 624 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (sorted_tags, GEE_TYPE_LIST, GeeList);
+#line 624 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (terminal_tags);
+#line 624 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (seen_tags);
+#line 624 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 5126 "Tag.c"
+}
+
+
+gchar* tag_make_tag_markup_string (GeeList* tags, gint highlight_index) {
+ gchar* result = NULL;
+ GString* builder = NULL;
+ GString* _tmp0_ = NULL;
+ gint i = 0;
+ gboolean first = FALSE;
+ GString* _tmp27_ = NULL;
+ gchar* built = NULL;
+ GString* _tmp28_ = NULL;
+ const gchar* _tmp29_ = NULL;
+ gchar* _tmp30_ = NULL;
+#line 627 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (GEE_IS_LIST (tags), NULL);
+#line 628 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = g_string_new ("<small>");
+#line 628 "/home/jens/Source/shotwell/src/Tag.vala"
+ builder = _tmp0_;
+#line 629 "/home/jens/Source/shotwell/src/Tag.vala"
+ i = 0;
+#line 630 "/home/jens/Source/shotwell/src/Tag.vala"
+ first = TRUE;
+#line 5151 "Tag.c"
+ {
+ GeeList* _tag_list = NULL;
+ GeeList* _tmp1_ = NULL;
+ GeeList* _tmp2_ = NULL;
+ gint _tag_size = 0;
+ GeeList* _tmp3_ = NULL;
+ gint _tmp4_ = 0;
+ gint _tmp5_ = 0;
+ gint _tag_index = 0;
+#line 631 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = tags;
+#line 631 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = _g_object_ref0 (_tmp1_);
+#line 631 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tag_list = _tmp2_;
+#line 631 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = _tag_list;
+#line 631 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 631 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = _tmp4_;
+#line 631 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tag_size = _tmp5_;
+#line 631 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tag_index = -1;
+#line 631 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 5179 "Tag.c"
+ gint _tmp6_ = 0;
+ gint _tmp7_ = 0;
+ gint _tmp8_ = 0;
+ Tag* tag = NULL;
+ GeeList* _tmp9_ = NULL;
+ gint _tmp10_ = 0;
+ gpointer _tmp11_ = NULL;
+ gchar* tag_name = NULL;
+ Tag* _tmp12_ = NULL;
+ gchar* _tmp13_ = NULL;
+ gchar* esc_tag_name = NULL;
+ const gchar* _tmp14_ = NULL;
+ gchar* _tmp15_ = NULL;
+ gboolean _tmp16_ = FALSE;
+ gint _tmp18_ = 0;
+ gint _tmp19_ = 0;
+ GString* _tmp21_ = NULL;
+ const gchar* _tmp22_ = NULL;
+ gint _tmp23_ = 0;
+ gint _tmp24_ = 0;
+ gint _tmp26_ = 0;
+#line 631 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = _tag_index;
+#line 631 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tag_index = _tmp6_ + 1;
+#line 631 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = _tag_index;
+#line 631 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = _tag_size;
+#line 631 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!(_tmp7_ < _tmp8_)) {
+#line 631 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 5213 "Tag.c"
+ }
+#line 631 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = _tag_list;
+#line 631 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = _tag_index;
+#line 631 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = gee_list_get (_tmp9_, _tmp10_);
+#line 631 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag = (Tag*) _tmp11_;
+#line 632 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = tag;
+#line 632 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = tag_get_user_visible_name (_tmp12_);
+#line 632 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_name = _tmp13_;
+#line 633 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp14_ = tag_name;
+#line 633 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp15_ = guarded_markup_escape_text (_tmp14_);
+#line 633 "/home/jens/Source/shotwell/src/Tag.vala"
+ esc_tag_name = _tmp15_;
+#line 634 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp16_ = first;
+#line 634 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp16_) {
+#line 635 "/home/jens/Source/shotwell/src/Tag.vala"
+ first = FALSE;
+#line 5241 "Tag.c"
+ } else {
+ GString* _tmp17_ = NULL;
+#line 637 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp17_ = builder;
+#line 637 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_string_append (_tmp17_, TAG_TAG_LIST_SEPARATOR_STRING);
+#line 5248 "Tag.c"
+ }
+#line 638 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp18_ = highlight_index;
+#line 638 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp19_ = i;
+#line 638 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp18_ == _tmp19_) {
+#line 5256 "Tag.c"
+ GString* _tmp20_ = NULL;
+#line 639 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp20_ = builder;
+#line 639 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_string_append (_tmp20_, "<u>");
+#line 5262 "Tag.c"
+ }
+#line 640 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp21_ = builder;
+#line 640 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp22_ = esc_tag_name;
+#line 640 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_string_append (_tmp21_, _tmp22_);
+#line 641 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp23_ = highlight_index;
+#line 641 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp24_ = i;
+#line 641 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp23_ == _tmp24_) {
+#line 5276 "Tag.c"
+ GString* _tmp25_ = NULL;
+#line 642 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp25_ = builder;
+#line 642 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_string_append (_tmp25_, "</u>");
+#line 5282 "Tag.c"
+ }
+#line 643 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp26_ = i;
+#line 643 "/home/jens/Source/shotwell/src/Tag.vala"
+ i = _tmp26_ + 1;
+#line 631 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (esc_tag_name);
+#line 631 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (tag_name);
+#line 631 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (tag);
+#line 5294 "Tag.c"
+ }
+#line 631 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tag_list);
+#line 5298 "Tag.c"
+ }
+#line 646 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp27_ = builder;
+#line 646 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_string_append (_tmp27_, "</small>");
+#line 647 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp28_ = builder;
+#line 647 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp29_ = _tmp28_->str;
+#line 647 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp30_ = g_strdup (_tmp29_);
+#line 647 "/home/jens/Source/shotwell/src/Tag.vala"
+ built = _tmp30_;
+#line 648 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = built;
+#line 648 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_string_free0 (builder);
+#line 648 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 5318 "Tag.c"
+}
+
+
+gchar* tag_prep_tag_name (const gchar* name) {
+ gchar* result = NULL;
+ const gchar* _tmp0_ = NULL;
+ gchar* _tmp1_ = NULL;
+#line 653 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (name != NULL, NULL);
+#line 654 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = name;
+#line 654 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = prepare_input_text (_tmp0_, PREPARE_INPUT_TEXT_OPTIONS_DEFAULT, DEFAULT_USER_TEXT_INPUT_LENGTH);
+#line 654 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = _tmp1_;
+#line 654 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 5336 "Tag.c"
+}
+
+
+static void _vala_array_add293 (gchar*** array, int* length, int* size, gchar* value) {
+#line 665 "/home/jens/Source/shotwell/src/Tag.vala"
+ if ((*length) == (*size)) {
+#line 665 "/home/jens/Source/shotwell/src/Tag.vala"
+ *size = (*size) ? (2 * (*size)) : 4;
+#line 665 "/home/jens/Source/shotwell/src/Tag.vala"
+ *array = g_renew (gchar*, *array, (*size) + 1);
+#line 5347 "Tag.c"
+ }
+#line 665 "/home/jens/Source/shotwell/src/Tag.vala"
+ (*array)[(*length)++] = value;
+#line 665 "/home/jens/Source/shotwell/src/Tag.vala"
+ (*array)[*length] = NULL;
+#line 5353 "Tag.c"
+}
+
+
+gchar** tag_prep_tag_names (gchar** names, int names_length1, int* result_length1) {
+ gchar** result = NULL;
+ gchar** _result_ = NULL;
+ gchar** _tmp0_ = NULL;
+ gint _result__length1 = 0;
+ gint __result__size_ = 0;
+ gchar** _tmp13_ = NULL;
+ gint _tmp13__length1 = 0;
+#line 660 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = g_new0 (gchar*, 0 + 1);
+#line 660 "/home/jens/Source/shotwell/src/Tag.vala"
+ _result_ = _tmp0_;
+#line 660 "/home/jens/Source/shotwell/src/Tag.vala"
+ _result__length1 = 0;
+#line 660 "/home/jens/Source/shotwell/src/Tag.vala"
+ __result__size_ = _result__length1;
+#line 5373 "Tag.c"
+ {
+ gint ctr = 0;
+#line 662 "/home/jens/Source/shotwell/src/Tag.vala"
+ ctr = 0;
+#line 5378 "Tag.c"
+ {
+ gboolean _tmp1_ = FALSE;
+#line 662 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = TRUE;
+#line 662 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 5385 "Tag.c"
+ gint _tmp3_ = 0;
+ gchar** _tmp4_ = NULL;
+ gint _tmp4__length1 = 0;
+ gchar* new_name = NULL;
+ gchar** _tmp5_ = NULL;
+ gint _tmp5__length1 = 0;
+ gint _tmp6_ = 0;
+ const gchar* _tmp7_ = NULL;
+ gchar* _tmp8_ = NULL;
+ const gchar* _tmp9_ = NULL;
+#line 662 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp1_) {
+#line 5398 "Tag.c"
+ gint _tmp2_ = 0;
+#line 662 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = ctr;
+#line 662 "/home/jens/Source/shotwell/src/Tag.vala"
+ ctr = _tmp2_ + 1;
+#line 5404 "Tag.c"
+ }
+#line 662 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = FALSE;
+#line 662 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = ctr;
+#line 662 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = names;
+#line 662 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4__length1 = names_length1;
+#line 662 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!(_tmp3_ < _tmp4__length1)) {
+#line 662 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 5418 "Tag.c"
+ }
+#line 663 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = names;
+#line 663 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5__length1 = names_length1;
+#line 663 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = ctr;
+#line 663 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = _tmp5_[_tmp6_];
+#line 663 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = tag_prep_tag_name (_tmp7_);
+#line 663 "/home/jens/Source/shotwell/src/Tag.vala"
+ new_name = _tmp8_;
+#line 664 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = new_name;
+#line 664 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp9_ != NULL) {
+#line 5436 "Tag.c"
+ gchar** _tmp10_ = NULL;
+ gint _tmp10__length1 = 0;
+ const gchar* _tmp11_ = NULL;
+ gchar* _tmp12_ = NULL;
+#line 665 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = _result_;
+#line 665 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10__length1 = _result__length1;
+#line 665 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = new_name;
+#line 665 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = g_strdup (_tmp11_);
+#line 665 "/home/jens/Source/shotwell/src/Tag.vala"
+ _vala_array_add293 (&_result_, &_result__length1, &__result__size_, _tmp12_);
+#line 5451 "Tag.c"
+ }
+#line 662 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (new_name);
+#line 5455 "Tag.c"
+ }
+ }
+ }
+#line 668 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = _result_;
+#line 668 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13__length1 = _result__length1;
+#line 668 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (result_length1) {
+#line 668 "/home/jens/Source/shotwell/src/Tag.vala"
+ *result_length1 = _tmp13__length1;
+#line 5467 "Tag.c"
+ }
+#line 668 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = _tmp13_;
+#line 668 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 5473 "Tag.c"
+}
+
+
+static void tag_set_raw_flat_name (Tag* self, const gchar* name) {
+ gchar* prepped_name = NULL;
+ const gchar* _tmp0_ = NULL;
+ gchar* _tmp1_ = NULL;
+ const gchar* _tmp2_ = NULL;
+ const gchar* _tmp3_ = NULL;
+ gboolean _tmp4_ = FALSE;
+ TagRow* _tmp11_ = NULL;
+ const gchar* _tmp12_ = NULL;
+ gchar* _tmp13_ = NULL;
+ Alteration* _tmp14_ = NULL;
+ Alteration* _tmp15_ = NULL;
+ GError * _inner_error_ = NULL;
+#line 671 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (IS_TAG (self));
+#line 671 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (name != NULL);
+#line 672 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = name;
+#line 672 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = tag_prep_tag_name (_tmp0_);
+#line 672 "/home/jens/Source/shotwell/src/Tag.vala"
+ prepped_name = _tmp1_;
+#line 674 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = prepped_name;
+#line 674 "/home/jens/Source/shotwell/src/Tag.vala"
+ _vala_assert (_tmp2_ != NULL, "prepped_name != null");
+#line 675 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = prepped_name;
+#line 675 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = g_str_has_prefix (_tmp3_, TAG_PATH_SEPARATOR_STRING);
+#line 675 "/home/jens/Source/shotwell/src/Tag.vala"
+ _vala_assert (!_tmp4_, "!prepped_name.has_prefix(Tag.PATH_SEPARATOR_STRING)");
+#line 5510 "Tag.c"
+ {
+ TagTable* _tmp5_ = NULL;
+ TagTable* _tmp6_ = NULL;
+ TagRow* _tmp7_ = NULL;
+ TagID _tmp8_ = {0};
+ const gchar* _tmp9_ = NULL;
+#line 678 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = tag_table_get_instance ();
+#line 678 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = _tmp5_;
+#line 678 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = self->priv->row;
+#line 678 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = _tmp7_->tag_id;
+#line 678 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = prepped_name;
+#line 678 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_table_rename (_tmp6_, &_tmp8_, _tmp9_, &_inner_error_);
+#line 678 "/home/jens/Source/shotwell/src/Tag.vala"
+ _database_table_unref0 (_tmp6_);
+#line 678 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (G_UNLIKELY (_inner_error_ != NULL)) {
+#line 678 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_inner_error_->domain == DATABASE_ERROR) {
+#line 5535 "Tag.c"
+ goto __catch462_database_error;
+ }
+#line 678 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (prepped_name);
+#line 678 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+#line 678 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_clear_error (&_inner_error_);
+#line 678 "/home/jens/Source/shotwell/src/Tag.vala"
+ return;
+#line 5546 "Tag.c"
+ }
+ }
+ goto __finally462;
+ __catch462_database_error:
+ {
+ GError* err = NULL;
+ GError* _tmp10_ = NULL;
+#line 677 "/home/jens/Source/shotwell/src/Tag.vala"
+ err = _inner_error_;
+#line 677 "/home/jens/Source/shotwell/src/Tag.vala"
+ _inner_error_ = NULL;
+#line 680 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = err;
+#line 680 "/home/jens/Source/shotwell/src/Tag.vala"
+ app_window_database_error (_tmp10_);
+#line 681 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_error_free0 (err);
+#line 681 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (prepped_name);
+#line 681 "/home/jens/Source/shotwell/src/Tag.vala"
+ return;
+#line 5568 "Tag.c"
+ }
+ __finally462:
+#line 677 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (G_UNLIKELY (_inner_error_ != NULL)) {
+#line 677 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (prepped_name);
+#line 677 "/home/jens/Source/shotwell/src/Tag.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 677 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_clear_error (&_inner_error_);
+#line 677 "/home/jens/Source/shotwell/src/Tag.vala"
+ return;
+#line 5581 "Tag.c"
+ }
+#line 684 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = self->priv->row;
+#line 684 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = prepped_name;
+#line 684 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = g_strdup (_tmp12_);
+#line 684 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp11_->name);
+#line 684 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_->name = _tmp13_;
+#line 685 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (self->priv->name_collation_key);
+#line 685 "/home/jens/Source/shotwell/src/Tag.vala"
+ self->priv->name_collation_key = NULL;
+#line 687 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_update_indexable_keywords (self);
+#line 689 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp14_ = alteration_new_from_list ("metadata:name, indexable:keywords");
+#line 689 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp15_ = _tmp14_;
+#line 689 "/home/jens/Source/shotwell/src/Tag.vala"
+ data_object_notify_altered (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_OBJECT, DataObject), _tmp15_);
+#line 689 "/home/jens/Source/shotwell/src/Tag.vala"
+ _alteration_unref0 (_tmp15_);
+#line 671 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (prepped_name);
+#line 5609 "Tag.c"
+}
+
+
+static void tag_set_raw_path (Tag* self, const gchar* path, gboolean suppress_notify) {
+ gchar* prepped_path = NULL;
+ const gchar* _tmp0_ = NULL;
+ gchar* _tmp1_ = NULL;
+ const gchar* _tmp2_ = NULL;
+ const gchar* _tmp3_ = NULL;
+ gboolean _tmp4_ = FALSE;
+ TagSourceCollection* _tmp5_ = NULL;
+ const gchar* _tmp6_ = NULL;
+ gboolean _tmp7_ = FALSE;
+ TagRow* _tmp14_ = NULL;
+ const gchar* _tmp15_ = NULL;
+ gchar* _tmp16_ = NULL;
+ gboolean _tmp17_ = FALSE;
+ GError * _inner_error_ = NULL;
+#line 692 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (IS_TAG (self));
+#line 692 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (path != NULL);
+#line 693 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = path;
+#line 693 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = tag_prep_tag_name (_tmp0_);
+#line 693 "/home/jens/Source/shotwell/src/Tag.vala"
+ prepped_path = _tmp1_;
+#line 695 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = prepped_path;
+#line 695 "/home/jens/Source/shotwell/src/Tag.vala"
+ _vala_assert (_tmp2_ != NULL, "prepped_path != null");
+#line 696 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = prepped_path;
+#line 696 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = g_str_has_prefix (_tmp3_, TAG_PATH_SEPARATOR_STRING);
+#line 696 "/home/jens/Source/shotwell/src/Tag.vala"
+ _vala_assert (_tmp4_, "prepped_path.has_prefix(Tag.PATH_SEPARATOR_STRING)");
+#line 697 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = tag_global;
+#line 697 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = prepped_path;
+#line 697 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = tag_source_collection_exists (_tmp5_, _tmp6_, FALSE);
+#line 697 "/home/jens/Source/shotwell/src/Tag.vala"
+ _vala_assert (!_tmp7_, "!Tag.global.exists(prepped_path)");
+#line 5656 "Tag.c"
+ {
+ TagTable* _tmp8_ = NULL;
+ TagTable* _tmp9_ = NULL;
+ TagRow* _tmp10_ = NULL;
+ TagID _tmp11_ = {0};
+ const gchar* _tmp12_ = NULL;
+#line 700 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = tag_table_get_instance ();
+#line 700 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = _tmp8_;
+#line 700 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = self->priv->row;
+#line 700 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = _tmp10_->tag_id;
+#line 700 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = prepped_path;
+#line 700 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_table_rename (_tmp9_, &_tmp11_, _tmp12_, &_inner_error_);
+#line 700 "/home/jens/Source/shotwell/src/Tag.vala"
+ _database_table_unref0 (_tmp9_);
+#line 700 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (G_UNLIKELY (_inner_error_ != NULL)) {
+#line 700 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_inner_error_->domain == DATABASE_ERROR) {
+#line 5681 "Tag.c"
+ goto __catch463_database_error;
+ }
+#line 700 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (prepped_path);
+#line 700 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+#line 700 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_clear_error (&_inner_error_);
+#line 700 "/home/jens/Source/shotwell/src/Tag.vala"
+ return;
+#line 5692 "Tag.c"
+ }
+ }
+ goto __finally463;
+ __catch463_database_error:
+ {
+ GError* err = NULL;
+ GError* _tmp13_ = NULL;
+#line 699 "/home/jens/Source/shotwell/src/Tag.vala"
+ err = _inner_error_;
+#line 699 "/home/jens/Source/shotwell/src/Tag.vala"
+ _inner_error_ = NULL;
+#line 702 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = err;
+#line 702 "/home/jens/Source/shotwell/src/Tag.vala"
+ app_window_database_error (_tmp13_);
+#line 703 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_error_free0 (err);
+#line 703 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (prepped_path);
+#line 703 "/home/jens/Source/shotwell/src/Tag.vala"
+ return;
+#line 5714 "Tag.c"
+ }
+ __finally463:
+#line 699 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (G_UNLIKELY (_inner_error_ != NULL)) {
+#line 699 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (prepped_path);
+#line 699 "/home/jens/Source/shotwell/src/Tag.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 699 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_clear_error (&_inner_error_);
+#line 699 "/home/jens/Source/shotwell/src/Tag.vala"
+ return;
+#line 5727 "Tag.c"
+ }
+#line 706 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp14_ = self->priv->row;
+#line 706 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp15_ = prepped_path;
+#line 706 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp16_ = g_strdup (_tmp15_);
+#line 706 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp14_->name);
+#line 706 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp14_->name = _tmp16_;
+#line 707 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (self->priv->name_collation_key);
+#line 707 "/home/jens/Source/shotwell/src/Tag.vala"
+ self->priv->name_collation_key = NULL;
+#line 709 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp17_ = suppress_notify;
+#line 709 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp17_) {
+#line 5747 "Tag.c"
+ Alteration* _tmp18_ = NULL;
+ Alteration* _tmp19_ = NULL;
+#line 710 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_update_indexable_keywords (self);
+#line 711 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp18_ = alteration_new_from_list ("metadata:name, indexable:keywords");
+#line 711 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp19_ = _tmp18_;
+#line 711 "/home/jens/Source/shotwell/src/Tag.vala"
+ data_object_notify_altered (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_OBJECT, DataObject), _tmp19_);
+#line 711 "/home/jens/Source/shotwell/src/Tag.vala"
+ _alteration_unref0 (_tmp19_);
+#line 5760 "Tag.c"
+ }
+#line 692 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (prepped_path);
+#line 5764 "Tag.c"
+}
+
+
+static gchar* tag_real_get_typename (DataSource* base) {
+ Tag * self;
+ gchar* result = NULL;
+ gchar* _tmp0_ = NULL;
+#line 715 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_TAG, Tag);
+#line 716 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = g_strdup (TAG_TYPENAME);
+#line 716 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = _tmp0_;
+#line 716 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 5780 "Tag.c"
+}
+
+
+static gint64 tag_real_get_instance_id (DataSource* base) {
+ Tag * self;
+ gint64 result = 0LL;
+ TagID _tmp0_ = {0};
+ gint64 _tmp1_ = 0LL;
+#line 719 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_TAG, Tag);
+#line 720 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_get_tag_id (self, &_tmp0_);
+#line 720 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = _tmp0_.id;
+#line 720 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = _tmp1_;
+#line 720 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 5799 "Tag.c"
+}
+
+
+static gchar* tag_real_get_name (DataObject* base) {
+ Tag * self;
+ gchar* result = NULL;
+ TagRow* _tmp0_ = NULL;
+ const gchar* _tmp1_ = NULL;
+ gchar* _tmp2_ = NULL;
+#line 723 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_TAG, Tag);
+#line 724 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = self->priv->row;
+#line 724 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = _tmp0_->name;
+#line 724 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = g_strdup (_tmp1_);
+#line 724 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = _tmp2_;
+#line 724 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 5821 "Tag.c"
+}
+
+
+gchar* tag_get_path (Tag* self) {
+ gchar* result = NULL;
+ gchar* _tmp0_ = NULL;
+#line 727 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_TAG (self), NULL);
+#line 728 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = data_object_get_name (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_OBJECT, DataObject));
+#line 728 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = _tmp0_;
+#line 728 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 5836 "Tag.c"
+}
+
+
+gchar* tag_get_user_visible_name (Tag* self) {
+ gchar* result = NULL;
+ gchar* _tmp0_ = NULL;
+ gchar* _tmp1_ = NULL;
+ gchar* _tmp2_ = NULL;
+ gchar* _tmp3_ = NULL;
+#line 731 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_TAG (self), NULL);
+#line 732 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = tag_get_path (self);
+#line 732 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = _tmp0_;
+#line 732 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = hierarchical_tag_utilities_get_basename (_tmp1_);
+#line 732 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = _tmp2_;
+#line 732 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp1_);
+#line 732 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = _tmp3_;
+#line 732 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 5862 "Tag.c"
+}
+
+
+gchar* tag_get_searchable_name (Tag* self) {
+ gchar* result = NULL;
+ gchar* istring = NULL;
+ gchar* _tmp0_ = NULL;
+ gchar* _tmp1_ = NULL;
+ gchar* _tmp2_ = NULL;
+ gchar* _tmp3_ = NULL;
+ gchar* _tmp4_ = NULL;
+ gchar* _tmp5_ = NULL;
+ gchar* _tmp6_ = NULL;
+#line 735 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_TAG (self), NULL);
+#line 736 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = tag_get_path (self);
+#line 736 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = _tmp0_;
+#line 736 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = hierarchical_tag_utilities_get_basename (_tmp1_);
+#line 736 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = _tmp2_;
+#line 736 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = g_utf8_strdown (_tmp3_, (gssize) -1);
+#line 736 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = _tmp4_;
+#line 736 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp3_);
+#line 736 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp1_);
+#line 736 "/home/jens/Source/shotwell/src/Tag.vala"
+ istring = _tmp5_;
+#line 737 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = string_remove_diacritics (istring);
+#line 737 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = _tmp6_;
+#line 737 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (istring);
+#line 737 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 5904 "Tag.c"
+}
+
+
+void tag_flatten (Tag* self) {
+ Tag* _tmp0_ = NULL;
+ Tag* _tmp1_ = NULL;
+ gchar* _tmp2_ = NULL;
+ gchar* _tmp3_ = NULL;
+#line 740 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (IS_TAG (self));
+#line 741 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = tag_get_hierarchical_parent (self);
+#line 741 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = _tmp0_;
+#line 741 "/home/jens/Source/shotwell/src/Tag.vala"
+ _vala_assert (_tmp1_ == NULL, "get_hierarchical_parent() == null");
+#line 741 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp1_);
+#line 743 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = tag_get_user_visible_name (self);
+#line 743 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = _tmp2_;
+#line 743 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_set_raw_flat_name (self, _tmp3_);
+#line 743 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp3_);
+#line 5931 "Tag.c"
+}
+
+
+void tag_promote (Tag* self) {
+ gchar* _tmp0_ = NULL;
+ gchar* _tmp1_ = NULL;
+ gboolean _tmp2_ = FALSE;
+ gboolean _tmp3_ = FALSE;
+ gchar* _tmp4_ = NULL;
+ gchar* _tmp5_ = NULL;
+ gchar* _tmp6_ = NULL;
+ gchar* _tmp7_ = NULL;
+#line 746 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (IS_TAG (self));
+#line 747 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = tag_get_path (self);
+#line 747 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = _tmp0_;
+#line 747 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = g_str_has_prefix (_tmp1_, TAG_PATH_SEPARATOR_STRING);
+#line 747 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = _tmp2_;
+#line 747 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp1_);
+#line 747 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp3_) {
+#line 748 "/home/jens/Source/shotwell/src/Tag.vala"
+ return;
+#line 5960 "Tag.c"
+ }
+#line 750 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = tag_get_path (self);
+#line 750 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = _tmp4_;
+#line 750 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = g_strconcat (TAG_PATH_SEPARATOR_STRING, _tmp5_, NULL);
+#line 750 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = _tmp6_;
+#line 750 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_set_raw_path (self, _tmp7_, FALSE);
+#line 750 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp7_);
+#line 750 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp5_);
+#line 5976 "Tag.c"
+}
+
+
+Tag* tag_get_hierarchical_parent (Tag* self) {
+ Tag* result = NULL;
+ gchar* _tmp0_ = NULL;
+ gchar* _tmp1_ = NULL;
+ gboolean _tmp2_ = FALSE;
+ gboolean _tmp3_ = FALSE;
+ GeeList* components = NULL;
+ gchar* _tmp4_ = NULL;
+ gchar* _tmp5_ = NULL;
+ GeeList* _tmp6_ = NULL;
+ GeeList* _tmp7_ = NULL;
+ GeeList* _tmp8_ = NULL;
+ gint _tmp9_ = 0;
+ gint _tmp10_ = 0;
+ GeeList* _tmp11_ = NULL;
+ gint _tmp12_ = 0;
+ gint _tmp13_ = 0;
+ gchar* parent_path = NULL;
+ gchar* _tmp14_ = NULL;
+ TagSourceCollection* _tmp29_ = NULL;
+ const gchar* _tmp30_ = NULL;
+ gboolean _tmp31_ = FALSE;
+#line 753 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_TAG (self), NULL);
+#line 755 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = tag_get_path (self);
+#line 755 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = _tmp0_;
+#line 755 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = g_str_has_prefix (_tmp1_, TAG_PATH_SEPARATOR_STRING);
+#line 755 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = !_tmp2_;
+#line 755 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp1_);
+#line 755 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp3_) {
+#line 756 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = NULL;
+#line 756 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 6020 "Tag.c"
+ }
+#line 758 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = tag_get_path (self);
+#line 758 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = _tmp4_;
+#line 758 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = hierarchical_tag_utilities_enumerate_path_components (_tmp5_);
+#line 758 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = _tmp6_;
+#line 758 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp5_);
+#line 758 "/home/jens/Source/shotwell/src/Tag.vala"
+ components = _tmp7_;
+#line 761 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = components;
+#line 761 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 761 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = _tmp9_;
+#line 761 "/home/jens/Source/shotwell/src/Tag.vala"
+ _vala_assert (_tmp10_ > 0, "components.size > 0");
+#line 763 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = components;
+#line 763 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp11_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 763 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = _tmp12_;
+#line 763 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp13_ == 1) {
+#line 764 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = NULL;
+#line 764 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (components);
+#line 764 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 6056 "Tag.c"
+ }
+#line 767 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp14_ = g_strdup ("");
+#line 767 "/home/jens/Source/shotwell/src/Tag.vala"
+ parent_path = _tmp14_;
+#line 6062 "Tag.c"
+ {
+ gint i = 0;
+#line 768 "/home/jens/Source/shotwell/src/Tag.vala"
+ i = 0;
+#line 6067 "Tag.c"
+ {
+ gboolean _tmp15_ = FALSE;
+#line 768 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp15_ = TRUE;
+#line 768 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 6074 "Tag.c"
+ gint _tmp17_ = 0;
+ GeeList* _tmp18_ = NULL;
+ gint _tmp19_ = 0;
+ gint _tmp20_ = 0;
+ const gchar* _tmp21_ = NULL;
+ GeeList* _tmp22_ = NULL;
+ gint _tmp23_ = 0;
+ gpointer _tmp24_ = NULL;
+ gchar* _tmp25_ = NULL;
+ gchar* _tmp26_ = NULL;
+ gchar* _tmp27_ = NULL;
+ gchar* _tmp28_ = NULL;
+#line 768 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp15_) {
+#line 6089 "Tag.c"
+ gint _tmp16_ = 0;
+#line 768 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp16_ = i;
+#line 768 "/home/jens/Source/shotwell/src/Tag.vala"
+ i = _tmp16_ + 1;
+#line 6095 "Tag.c"
+ }
+#line 768 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp15_ = FALSE;
+#line 768 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp17_ = i;
+#line 768 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp18_ = components;
+#line 768 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp19_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp18_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 768 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp20_ = _tmp19_;
+#line 768 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!(_tmp17_ < (_tmp20_ - 1))) {
+#line 768 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 6111 "Tag.c"
+ }
+#line 769 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp21_ = parent_path;
+#line 769 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp22_ = components;
+#line 769 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp23_ = i;
+#line 769 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp24_ = gee_list_get (_tmp22_, _tmp23_);
+#line 769 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp25_ = (gchar*) _tmp24_;
+#line 769 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp26_ = g_strconcat (TAG_PATH_SEPARATOR_STRING, _tmp25_, NULL);
+#line 769 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp27_ = _tmp26_;
+#line 769 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp28_ = g_strconcat (_tmp21_, _tmp27_, NULL);
+#line 769 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (parent_path);
+#line 769 "/home/jens/Source/shotwell/src/Tag.vala"
+ parent_path = _tmp28_;
+#line 769 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp27_);
+#line 769 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp25_);
+#line 6137 "Tag.c"
+ }
+ }
+ }
+#line 771 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp29_ = tag_global;
+#line 771 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp30_ = parent_path;
+#line 771 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp31_ = tag_source_collection_exists (_tmp29_, _tmp30_, FALSE);
+#line 771 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp31_) {
+#line 6149 "Tag.c"
+ const gchar* _tmp32_ = NULL;
+ Tag* _tmp33_ = NULL;
+#line 772 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp32_ = parent_path;
+#line 772 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp33_ = tag_for_path (_tmp32_);
+#line 772 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = _tmp33_;
+#line 772 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (parent_path);
+#line 772 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (components);
+#line 772 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 6164 "Tag.c"
+ } else {
+#line 774 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = NULL;
+#line 774 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (parent_path);
+#line 774 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (components);
+#line 774 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 6174 "Tag.c"
+ }
+#line 753 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (parent_path);
+#line 753 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (components);
+#line 6180 "Tag.c"
+}
+
+
+gint tag_get_attachment_count (Tag* self, MediaSource* source) {
+ gint result = 0;
+ MediaSource* _tmp0_ = NULL;
+ gboolean _tmp1_ = FALSE;
+ gint _result_ = 0;
+#line 777 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_TAG (self), 0);
+#line 777 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_MEDIA_SOURCE (source), 0);
+#line 779 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = source;
+#line 779 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = tag_contains (self, _tmp0_);
+#line 779 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp1_) {
+#line 780 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = 0;
+#line 780 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 6203 "Tag.c"
+ }
+#line 783 "/home/jens/Source/shotwell/src/Tag.vala"
+ _result_ = 1;
+#line 6207 "Tag.c"
+ {
+ GeeList* _child_list = NULL;
+ GeeList* _tmp2_ = NULL;
+ gint _child_size = 0;
+ GeeList* _tmp3_ = NULL;
+ gint _tmp4_ = 0;
+ gint _tmp5_ = 0;
+ gint _child_index = 0;
+#line 786 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = tag_get_hierarchical_children (self);
+#line 786 "/home/jens/Source/shotwell/src/Tag.vala"
+ _child_list = _tmp2_;
+#line 786 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = _child_list;
+#line 786 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 786 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = _tmp4_;
+#line 786 "/home/jens/Source/shotwell/src/Tag.vala"
+ _child_size = _tmp5_;
+#line 786 "/home/jens/Source/shotwell/src/Tag.vala"
+ _child_index = -1;
+#line 786 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 6232 "Tag.c"
+ gint _tmp6_ = 0;
+ gint _tmp7_ = 0;
+ gint _tmp8_ = 0;
+ Tag* child = NULL;
+ GeeList* _tmp9_ = NULL;
+ gint _tmp10_ = 0;
+ gpointer _tmp11_ = NULL;
+ Tag* _tmp12_ = NULL;
+ MediaSource* _tmp13_ = NULL;
+ gboolean _tmp14_ = FALSE;
+#line 786 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = _child_index;
+#line 786 "/home/jens/Source/shotwell/src/Tag.vala"
+ _child_index = _tmp6_ + 1;
+#line 786 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = _child_index;
+#line 786 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = _child_size;
+#line 786 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!(_tmp7_ < _tmp8_)) {
+#line 786 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 6255 "Tag.c"
+ }
+#line 786 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = _child_list;
+#line 786 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = _child_index;
+#line 786 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = gee_list_get (_tmp9_, _tmp10_);
+#line 786 "/home/jens/Source/shotwell/src/Tag.vala"
+ child = (Tag*) _tmp11_;
+#line 787 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = child;
+#line 787 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = source;
+#line 787 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp14_ = tag_contains (_tmp12_, _tmp13_);
+#line 787 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp14_) {
+#line 6273 "Tag.c"
+ gint _tmp15_ = 0;
+#line 788 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp15_ = _result_;
+#line 788 "/home/jens/Source/shotwell/src/Tag.vala"
+ _result_ = _tmp15_ + 1;
+#line 6279 "Tag.c"
+ }
+#line 786 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (child);
+#line 6283 "Tag.c"
+ }
+#line 786 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_child_list);
+#line 6287 "Tag.c"
+ }
+#line 790 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = _result_;
+#line 790 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 6293 "Tag.c"
+}
+
+
+/**
+ * gets all hierarchical children of a tag recursively; tags are enumerated from most-derived
+ * to least-derived
+ */
+GeeList* tag_get_hierarchical_children (Tag* self) {
+ GeeList* result = NULL;
+ GeeArrayList* _result_ = NULL;
+ GeeArrayList* _tmp0_ = NULL;
+ GeeArrayList* result_reversed = NULL;
+ GeeArrayList* _tmp1_ = NULL;
+ gchar* _tmp2_ = NULL;
+ gchar* _tmp3_ = NULL;
+ gboolean _tmp4_ = FALSE;
+ gboolean _tmp5_ = FALSE;
+ GeeTreeSet* forward_sorted_paths = NULL;
+ GeeTreeSet* _tmp6_ = NULL;
+ gchar* target_path = NULL;
+ gchar* _tmp7_ = NULL;
+ gchar* _tmp8_ = NULL;
+ gchar* _tmp9_ = NULL;
+ gchar* _tmp10_ = NULL;
+#line 797 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_TAG (self), NULL);
+#line 798 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = gee_array_list_new (TYPE_TAG, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 798 "/home/jens/Source/shotwell/src/Tag.vala"
+ _result_ = _tmp0_;
+#line 799 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = gee_array_list_new (TYPE_TAG, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 799 "/home/jens/Source/shotwell/src/Tag.vala"
+ result_reversed = _tmp1_;
+#line 802 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = tag_get_path (self);
+#line 802 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = _tmp2_;
+#line 802 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = g_str_has_prefix (_tmp3_, TAG_PATH_SEPARATOR_STRING);
+#line 802 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = !_tmp4_;
+#line 802 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp3_);
+#line 802 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp5_) {
+#line 803 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (_result_, GEE_TYPE_LIST, GeeList);
+#line 803 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (result_reversed);
+#line 803 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 6346 "Tag.c"
+ }
+#line 807 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = gee_tree_set_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, NULL, NULL, NULL);
+#line 807 "/home/jens/Source/shotwell/src/Tag.vala"
+ forward_sorted_paths = _tmp6_;
+#line 809 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = tag_get_path (self);
+#line 809 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = _tmp7_;
+#line 809 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = g_strconcat (_tmp8_, TAG_PATH_SEPARATOR_STRING, NULL);
+#line 809 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = _tmp9_;
+#line 809 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp8_);
+#line 809 "/home/jens/Source/shotwell/src/Tag.vala"
+ target_path = _tmp10_;
+#line 6364 "Tag.c"
+ {
+ GeeIterator* _path_it = NULL;
+ TagSourceCollection* _tmp11_ = NULL;
+ GeeCollection* _tmp12_ = NULL;
+ GeeCollection* _tmp13_ = NULL;
+ GeeIterator* _tmp14_ = NULL;
+ GeeIterator* _tmp15_ = NULL;
+#line 810 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = tag_global;
+#line 810 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = tag_source_collection_get_all_names (_tmp11_);
+#line 810 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = _tmp12_;
+#line 810 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp14_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp13_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 810 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp15_ = _tmp14_;
+#line 810 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp13_);
+#line 810 "/home/jens/Source/shotwell/src/Tag.vala"
+ _path_it = _tmp15_;
+#line 810 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 6388 "Tag.c"
+ GeeIterator* _tmp16_ = NULL;
+ gboolean _tmp17_ = FALSE;
+ gchar* path = NULL;
+ GeeIterator* _tmp18_ = NULL;
+ gpointer _tmp19_ = NULL;
+ const gchar* _tmp20_ = NULL;
+ const gchar* _tmp21_ = NULL;
+ gboolean _tmp22_ = FALSE;
+#line 810 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp16_ = _path_it;
+#line 810 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp17_ = gee_iterator_next (_tmp16_);
+#line 810 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp17_) {
+#line 810 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 6405 "Tag.c"
+ }
+#line 810 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp18_ = _path_it;
+#line 810 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp19_ = gee_iterator_get (_tmp18_);
+#line 810 "/home/jens/Source/shotwell/src/Tag.vala"
+ path = (gchar*) _tmp19_;
+#line 811 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp20_ = path;
+#line 811 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp21_ = target_path;
+#line 811 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp22_ = g_str_has_prefix (_tmp20_, _tmp21_);
+#line 811 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp22_) {
+#line 6421 "Tag.c"
+ GeeTreeSet* _tmp23_ = NULL;
+ const gchar* _tmp24_ = NULL;
+#line 812 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp23_ = forward_sorted_paths;
+#line 812 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp24_ = path;
+#line 812 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp23_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp24_);
+#line 6430 "Tag.c"
+ }
+#line 810 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (path);
+#line 6434 "Tag.c"
+ }
+#line 810 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_path_it);
+#line 6438 "Tag.c"
+ }
+ {
+ GeeIterator* _tmp_it = NULL;
+ GeeTreeSet* _tmp25_ = NULL;
+ GeeIterator* _tmp26_ = NULL;
+#line 815 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp25_ = forward_sorted_paths;
+#line 815 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp26_ = gee_abstract_collection_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp25_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection));
+#line 815 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp_it = _tmp26_;
+#line 815 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 6452 "Tag.c"
+ GeeIterator* _tmp27_ = NULL;
+ gboolean _tmp28_ = FALSE;
+ gchar* tmp = NULL;
+ GeeIterator* _tmp29_ = NULL;
+ gpointer _tmp30_ = NULL;
+ GeeArrayList* _tmp31_ = NULL;
+ const gchar* _tmp32_ = NULL;
+ Tag* _tmp33_ = NULL;
+ Tag* _tmp34_ = NULL;
+#line 815 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp27_ = _tmp_it;
+#line 815 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp28_ = gee_iterator_next (_tmp27_);
+#line 815 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp28_) {
+#line 815 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 6470 "Tag.c"
+ }
+#line 815 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp29_ = _tmp_it;
+#line 815 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp30_ = gee_iterator_get (_tmp29_);
+#line 815 "/home/jens/Source/shotwell/src/Tag.vala"
+ tmp = (gchar*) _tmp30_;
+#line 816 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp31_ = result_reversed;
+#line 816 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp32_ = tmp;
+#line 816 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp33_ = tag_for_path (_tmp32_);
+#line 816 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp34_ = _tmp33_;
+#line 816 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp31_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp34_);
+#line 816 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp34_);
+#line 815 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (tmp);
+#line 6492 "Tag.c"
+ }
+#line 815 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp_it);
+#line 6496 "Tag.c"
+ }
+ {
+ gint index = 0;
+ GeeArrayList* _tmp35_ = NULL;
+ gint _tmp36_ = 0;
+ gint _tmp37_ = 0;
+#line 819 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp35_ = result_reversed;
+#line 819 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp36_ = gee_abstract_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp35_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 819 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp37_ = _tmp36_;
+#line 819 "/home/jens/Source/shotwell/src/Tag.vala"
+ index = _tmp37_ - 1;
+#line 6511 "Tag.c"
+ {
+ gboolean _tmp38_ = FALSE;
+#line 819 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp38_ = TRUE;
+#line 819 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 6518 "Tag.c"
+ gint _tmp40_ = 0;
+ GeeArrayList* _tmp41_ = NULL;
+ GeeArrayList* _tmp42_ = NULL;
+ gint _tmp43_ = 0;
+ gpointer _tmp44_ = NULL;
+ Tag* _tmp45_ = NULL;
+#line 819 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp38_) {
+#line 6527 "Tag.c"
+ gint _tmp39_ = 0;
+#line 819 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp39_ = index;
+#line 819 "/home/jens/Source/shotwell/src/Tag.vala"
+ index = _tmp39_ - 1;
+#line 6533 "Tag.c"
+ }
+#line 819 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp38_ = FALSE;
+#line 819 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp40_ = index;
+#line 819 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!(_tmp40_ >= 0)) {
+#line 819 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 6543 "Tag.c"
+ }
+#line 820 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp41_ = _result_;
+#line 820 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp42_ = result_reversed;
+#line 820 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp43_ = index;
+#line 820 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp44_ = gee_abstract_list_get (G_TYPE_CHECK_INSTANCE_CAST (_tmp42_, GEE_TYPE_ABSTRACT_LIST, GeeAbstractList), _tmp43_);
+#line 820 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp45_ = (Tag*) _tmp44_;
+#line 820 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp41_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp45_);
+#line 820 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp45_);
+#line 6559 "Tag.c"
+ }
+ }
+ }
+#line 823 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (_result_, GEE_TYPE_LIST, GeeList);
+#line 823 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (target_path);
+#line 823 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (forward_sorted_paths);
+#line 823 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (result_reversed);
+#line 823 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 6573 "Tag.c"
+}
+
+
+static gchar* tag_get_next_untitled_tag_name (const gchar* _prefix) {
+ gchar* result = NULL;
+ const gchar* _tmp0_ = NULL;
+ const gchar* _tmp1_ = NULL;
+ gchar* prefix = NULL;
+ gchar* _tmp3_ = NULL;
+ gchar* candidate_name = NULL;
+ const gchar* _tmp4_ = NULL;
+ gchar* _tmp5_ = NULL;
+ guint64 counter = 0ULL;
+#line 829 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = _prefix;
+#line 829 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp1_ != NULL) {
+#line 6591 "Tag.c"
+ const gchar* _tmp2_ = NULL;
+#line 829 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = _prefix;
+#line 829 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = _tmp2_;
+#line 6597 "Tag.c"
+ } else {
+#line 829 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = "";
+#line 6601 "Tag.c"
+ }
+#line 829 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = g_strdup (_tmp0_);
+#line 829 "/home/jens/Source/shotwell/src/Tag.vala"
+ prefix = _tmp3_;
+#line 830 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = _ ("untitled");
+#line 830 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = g_strdup (_tmp4_);
+#line 830 "/home/jens/Source/shotwell/src/Tag.vala"
+ candidate_name = _tmp5_;
+#line 831 "/home/jens/Source/shotwell/src/Tag.vala"
+ counter = (guint64) 0;
+#line 6615 "Tag.c"
+ {
+ gboolean _tmp6_ = FALSE;
+#line 832 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = TRUE;
+#line 832 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 6622 "Tag.c"
+ gchar* _tmp8_ = NULL;
+ guint64 _tmp9_ = 0ULL;
+ gchar* path_candidate = NULL;
+ const gchar* _tmp15_ = NULL;
+ const gchar* _tmp16_ = NULL;
+ gchar* _tmp17_ = NULL;
+ gchar* _tmp18_ = NULL;
+ gchar* _tmp19_ = NULL;
+ gchar* _tmp20_ = NULL;
+ TagSourceCollection* _tmp21_ = NULL;
+ const gchar* _tmp22_ = NULL;
+ gboolean _tmp23_ = FALSE;
+ guint64 _tmp24_ = 0ULL;
+#line 832 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp6_) {
+#line 6638 "Tag.c"
+ guint64 _tmp7_ = 0ULL;
+#line 840 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = counter;
+#line 840 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!(_tmp7_ < G_MAXUINT64)) {
+#line 840 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 6646 "Tag.c"
+ }
+ }
+#line 832 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = FALSE;
+#line 834 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = counter;
+#line 834 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp9_ == ((guint64) 0)) {
+#line 6655 "Tag.c"
+ gchar* _tmp10_ = NULL;
+#line 834 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = g_strdup ("");
+#line 834 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp8_);
+#line 834 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = _tmp10_;
+#line 6663 "Tag.c"
+ } else {
+ guint64 _tmp11_ = 0ULL;
+ gchar* _tmp12_ = NULL;
+ gchar* _tmp13_ = NULL;
+ gchar* _tmp14_ = NULL;
+#line 834 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = counter;
+#line 834 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = g_strdup_printf ("%" G_GUINT64_FORMAT, _tmp11_);
+#line 834 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = _tmp12_;
+#line 834 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp14_ = g_strconcat (" ", _tmp13_, NULL);
+#line 834 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp8_);
+#line 834 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = _tmp14_;
+#line 834 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp13_);
+#line 6683 "Tag.c"
+ }
+#line 833 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp15_ = prefix;
+#line 833 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp16_ = candidate_name;
+#line 833 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp17_ = g_strconcat (_tmp15_, _tmp16_, NULL);
+#line 833 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp18_ = _tmp17_;
+#line 833 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp19_ = g_strconcat (_tmp18_, _tmp8_, NULL);
+#line 833 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp20_ = _tmp19_;
+#line 833 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp18_);
+#line 833 "/home/jens/Source/shotwell/src/Tag.vala"
+ path_candidate = _tmp20_;
+#line 836 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp21_ = tag_global;
+#line 836 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp22_ = path_candidate;
+#line 836 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp23_ = tag_source_collection_exists (_tmp21_, _tmp22_, FALSE);
+#line 836 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp23_) {
+#line 837 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = path_candidate;
+#line 837 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp8_);
+#line 837 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (candidate_name);
+#line 837 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (prefix);
+#line 837 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 6719 "Tag.c"
+ }
+#line 839 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp24_ = counter;
+#line 839 "/home/jens/Source/shotwell/src/Tag.vala"
+ counter = _tmp24_ + 1;
+#line 832 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (path_candidate);
+#line 832 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp8_);
+#line 6729 "Tag.c"
+ }
+ }
+#line 843 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_assert_not_reached ();
+#line 828 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (candidate_name);
+#line 828 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (prefix);
+#line 6738 "Tag.c"
+}
+
+
+Tag* tag_create_new_child (Tag* self) {
+ Tag* result = NULL;
+ gchar* path_prefix = NULL;
+ gchar* _tmp0_ = NULL;
+ const gchar* _tmp1_ = NULL;
+ gboolean _tmp2_ = FALSE;
+ const gchar* _tmp8_ = NULL;
+ gchar* _tmp9_ = NULL;
+ gchar* _tmp10_ = NULL;
+ gchar* _tmp11_ = NULL;
+ gchar* _tmp12_ = NULL;
+ Tag* _tmp13_ = NULL;
+ Tag* _tmp14_ = NULL;
+#line 846 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_TAG (self), NULL);
+#line 847 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = tag_get_path (self);
+#line 847 "/home/jens/Source/shotwell/src/Tag.vala"
+ path_prefix = _tmp0_;
+#line 849 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = path_prefix;
+#line 849 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = g_str_has_prefix (_tmp1_, TAG_PATH_SEPARATOR_STRING);
+#line 849 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp2_) {
+#line 6767 "Tag.c"
+ gchar* _tmp3_ = NULL;
+ gchar* _tmp4_ = NULL;
+ gchar* _tmp5_ = NULL;
+ gchar* _tmp6_ = NULL;
+ gchar* _tmp7_ = NULL;
+#line 850 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = tag_get_path (self);
+#line 850 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = _tmp3_;
+#line 850 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = hierarchical_tag_utilities_flat_to_hierarchical (_tmp4_);
+#line 850 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = _tmp5_;
+#line 850 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_set_raw_path (self, _tmp6_, FALSE);
+#line 850 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp6_);
+#line 850 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp4_);
+#line 852 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = tag_get_path (self);
+#line 852 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (path_prefix);
+#line 852 "/home/jens/Source/shotwell/src/Tag.vala"
+ path_prefix = _tmp7_;
+#line 6793 "Tag.c"
+ }
+#line 855 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = path_prefix;
+#line 855 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = g_strconcat (_tmp8_, TAG_PATH_SEPARATOR_STRING, NULL);
+#line 855 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = _tmp9_;
+#line 855 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = tag_get_next_untitled_tag_name (_tmp10_);
+#line 855 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = _tmp11_;
+#line 855 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = tag_for_path (_tmp12_);
+#line 855 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp14_ = _tmp13_;
+#line 855 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp12_);
+#line 855 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp10_);
+#line 855 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = _tmp14_;
+#line 855 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (path_prefix);
+#line 855 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 6819 "Tag.c"
+}
+
+
+Tag* tag_create_new_root (void) {
+ Tag* result = NULL;
+ gchar* _tmp0_ = NULL;
+ gchar* _tmp1_ = NULL;
+ Tag* _tmp2_ = NULL;
+ Tag* _tmp3_ = NULL;
+#line 859 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = tag_get_next_untitled_tag_name (NULL);
+#line 859 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = _tmp0_;
+#line 859 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = tag_for_path (_tmp1_);
+#line 859 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = _tmp2_;
+#line 859 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp1_);
+#line 859 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = _tmp3_;
+#line 859 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 6843 "Tag.c"
+}
+
+
+gchar* tag_get_name_collation_key (Tag* self) {
+ gchar* result = NULL;
+ const gchar* _tmp0_ = NULL;
+ const gchar* _tmp4_ = NULL;
+ gchar* _tmp5_ = NULL;
+#line 862 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_TAG (self), NULL);
+#line 863 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = self->priv->name_collation_key;
+#line 863 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp0_ == NULL) {
+#line 6858 "Tag.c"
+ TagRow* _tmp1_ = NULL;
+ const gchar* _tmp2_ = NULL;
+ gchar* _tmp3_ = NULL;
+#line 864 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = self->priv->row;
+#line 864 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = _tmp1_->name;
+#line 864 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = g_utf8_collate_key (_tmp2_, (gssize) -1);
+#line 864 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (self->priv->name_collation_key);
+#line 864 "/home/jens/Source/shotwell/src/Tag.vala"
+ self->priv->name_collation_key = _tmp3_;
+#line 6872 "Tag.c"
+ }
+#line 866 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = self->priv->name_collation_key;
+#line 866 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = g_strdup (_tmp4_);
+#line 866 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = _tmp5_;
+#line 866 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 6882 "Tag.c"
+}
+
+
+static gchar* tag_real_to_string (DataObject* base) {
+ Tag * self;
+ gchar* result = NULL;
+ TagRow* _tmp0_ = NULL;
+ const gchar* _tmp1_ = NULL;
+ ViewCollection* _tmp2_ = NULL;
+ gint _tmp3_ = 0;
+ gchar* _tmp4_ = NULL;
+#line 869 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_TAG, Tag);
+#line 870 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = self->priv->row;
+#line 870 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = _tmp0_->name;
+#line 870 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = self->priv->media_views;
+#line 870 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = data_collection_get_count (G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, TYPE_DATA_COLLECTION, DataCollection));
+#line 870 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = g_strdup_printf ("Tag %s (%d sources)", _tmp1_, _tmp3_);
+#line 870 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = _tmp4_;
+#line 870 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 6910 "Tag.c"
+}
+
+
+static gboolean tag_real_equals (DataSource* base, DataSource* source) {
+ Tag * self;
+ gboolean result = FALSE;
+ Tag* tag = NULL;
+ DataSource* _tmp0_ = NULL;
+ Tag* _tmp1_ = NULL;
+ Tag* _tmp2_ = NULL;
+ DataSource* _tmp11_ = NULL;
+ gboolean _tmp12_ = FALSE;
+#line 873 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_TAG, Tag);
+#line 873 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail ((source == NULL) || IS_DATA_SOURCE (source), FALSE);
+#line 875 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = source;
+#line 875 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, TYPE_TAG) ? ((Tag*) _tmp0_) : NULL);
+#line 875 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag = _tmp1_;
+#line 876 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = tag;
+#line 876 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp2_ != NULL) {
+#line 6937 "Tag.c"
+ Tag* _tmp3_ = NULL;
+#line 877 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = tag;
+#line 877 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp3_ != self) {
+#line 6943 "Tag.c"
+ Tag* _tmp4_ = NULL;
+ TagRow* _tmp5_ = NULL;
+ TagID _tmp6_ = {0};
+ gint64 _tmp7_ = 0LL;
+ TagRow* _tmp8_ = NULL;
+ TagID _tmp9_ = {0};
+ gint64 _tmp10_ = 0LL;
+#line 878 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = tag;
+#line 878 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = _tmp4_->priv->row;
+#line 878 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = _tmp5_->tag_id;
+#line 878 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = _tmp6_.id;
+#line 878 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = self->priv->row;
+#line 878 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = _tmp8_->tag_id;
+#line 878 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = _tmp9_.id;
+#line 878 "/home/jens/Source/shotwell/src/Tag.vala"
+ _vala_assert (_tmp7_ != _tmp10_, "tag.row.tag_id.id != row.tag_id.id");
+#line 6967 "Tag.c"
+ }
+ }
+#line 882 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = source;
+#line 882 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = DATA_SOURCE_CLASS (tag_parent_class)->equals (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_SOURCE, DataSource), _tmp11_);
+#line 882 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = _tmp12_;
+#line 882 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (tag);
+#line 882 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 6980 "Tag.c"
+}
+
+
+void tag_get_tag_id (Tag* self, TagID* result) {
+ TagRow* _tmp0_ = NULL;
+ TagID _tmp1_ = {0};
+#line 885 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (IS_TAG (self));
+#line 886 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = self->priv->row;
+#line 886 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = _tmp0_->tag_id;
+#line 886 "/home/jens/Source/shotwell/src/Tag.vala"
+ *result = _tmp1_;
+#line 886 "/home/jens/Source/shotwell/src/Tag.vala"
+ return;
+#line 6997 "Tag.c"
+}
+
+
+static SourceSnapshot* tag_real_save_snapshot (DataSource* base) {
+ Tag * self;
+ SourceSnapshot* result = NULL;
+ TagTagSnapshot* _tmp0_ = NULL;
+#line 889 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_TAG, Tag);
+#line 890 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = tag_tag_snapshot_new (self);
+#line 890 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_SOURCE_SNAPSHOT, SourceSnapshot);
+#line 890 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 7013 "Tag.c"
+}
+
+
+static SourceProxy* tag_real_get_proxy (Proxyable* base) {
+ Tag * self;
+ SourceProxy* result = NULL;
+ TagTagProxy* _tmp0_ = NULL;
+#line 893 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_TAG, Tag);
+#line 894 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = tag_tag_proxy_new (self);
+#line 894 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_SOURCE_PROXY, SourceProxy);
+#line 894 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 7029 "Tag.c"
+}
+
+
+Tag* tag_reconstitute (gint64 object_id, TagRow* row) {
+ Tag* result = NULL;
+ Tag* tag = NULL;
+ TagRow* _tmp8_ = NULL;
+ gint64 _tmp9_ = 0LL;
+ Tag* _tmp10_ = NULL;
+ TagSourceCollection* _tmp11_ = NULL;
+ gchar* _tmp12_ = NULL;
+ gchar* _tmp13_ = NULL;
+ GError * _inner_error_ = NULL;
+#line 897 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_TAG_ROW (row), NULL);
+#line 7045 "Tag.c"
+ {
+ TagID _tmp0_ = {0};
+ TagTable* _tmp1_ = NULL;
+ TagTable* _tmp2_ = NULL;
+ TagRow* _tmp3_ = NULL;
+ TagID _tmp4_ = {0};
+ TagID _tmp5_ = {0};
+ TagRow* _tmp6_ = NULL;
+#line 900 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = tag_table_get_instance ();
+#line 900 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = _tmp1_;
+#line 900 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = row;
+#line 900 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_table_create_from_row (_tmp2_, _tmp3_, &_tmp4_, &_inner_error_);
+#line 900 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = _tmp4_;
+#line 900 "/home/jens/Source/shotwell/src/Tag.vala"
+ _database_table_unref0 (_tmp2_);
+#line 900 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = _tmp5_;
+#line 900 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (G_UNLIKELY (_inner_error_ != NULL)) {
+#line 900 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_inner_error_->domain == DATABASE_ERROR) {
+#line 7072 "Tag.c"
+ goto __catch464_database_error;
+ }
+#line 900 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+#line 900 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_clear_error (&_inner_error_);
+#line 900 "/home/jens/Source/shotwell/src/Tag.vala"
+ return NULL;
+#line 7081 "Tag.c"
+ }
+#line 900 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = row;
+#line 900 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_->tag_id = _tmp0_;
+#line 7087 "Tag.c"
+ }
+ goto __finally464;
+ __catch464_database_error:
+ {
+ GError* err = NULL;
+ GError* _tmp7_ = NULL;
+#line 899 "/home/jens/Source/shotwell/src/Tag.vala"
+ err = _inner_error_;
+#line 899 "/home/jens/Source/shotwell/src/Tag.vala"
+ _inner_error_ = NULL;
+#line 902 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = err;
+#line 902 "/home/jens/Source/shotwell/src/Tag.vala"
+ app_window_database_error (_tmp7_);
+#line 899 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_error_free0 (err);
+#line 7104 "Tag.c"
+ }
+ __finally464:
+#line 899 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (G_UNLIKELY (_inner_error_ != NULL)) {
+#line 899 "/home/jens/Source/shotwell/src/Tag.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 899 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_clear_error (&_inner_error_);
+#line 899 "/home/jens/Source/shotwell/src/Tag.vala"
+ return NULL;
+#line 7115 "Tag.c"
+ }
+#line 905 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = row;
+#line 905 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = object_id;
+#line 905 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = tag_new (_tmp8_, _tmp9_);
+#line 905 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag = _tmp10_;
+#line 906 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = tag_global;
+#line 906 "/home/jens/Source/shotwell/src/Tag.vala"
+ data_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp11_, TYPE_DATA_COLLECTION, DataCollection), G_TYPE_CHECK_INSTANCE_CAST (tag, TYPE_DATA_OBJECT, DataObject));
+#line 908 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = data_object_to_string (G_TYPE_CHECK_INSTANCE_CAST (tag, TYPE_DATA_OBJECT, DataObject));
+#line 908 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = _tmp12_;
+#line 908 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_debug ("Tag.vala:908: Reconstituted %s", _tmp13_);
+#line 908 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp13_);
+#line 910 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = tag;
+#line 910 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 7141 "Tag.c"
+}
+
+
+static gboolean tag_real_has_links (ContainerSource* base) {
+ Tag * self;
+ gboolean result = FALSE;
+ LibraryPhotoSourceCollection* _tmp0_ = NULL;
+ SourceBacklink* _tmp1_ = NULL;
+ SourceBacklink* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+ gboolean _tmp4_ = FALSE;
+#line 913 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_TAG, Tag);
+#line 914 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = library_photo_global;
+#line 914 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = container_source_get_backlink (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_CONTAINER_SOURCE, ContainerSource));
+#line 914 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = _tmp1_;
+#line 914 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = source_collection_has_backlink (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_SOURCE_COLLECTION, SourceCollection), _tmp2_);
+#line 914 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = _tmp3_;
+#line 914 "/home/jens/Source/shotwell/src/Tag.vala"
+ _source_backlink_unref0 (_tmp2_);
+#line 914 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = _tmp4_;
+#line 914 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 7171 "Tag.c"
+}
+
+
+static SourceBacklink* tag_real_get_backlink (ContainerSource* base) {
+ Tag * self;
+ SourceBacklink* result = NULL;
+ SourceBacklink* _tmp0_ = NULL;
+#line 917 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_TAG, Tag);
+#line 918 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = source_backlink_new_from_source (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_SOURCE, DataSource));
+#line 918 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = _tmp0_;
+#line 918 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 7187 "Tag.c"
+}
+
+
+static void tag_real_break_link (ContainerSource* base, DataSource* source) {
+ Tag * self;
+ DataSource* _tmp0_ = NULL;
+ GeeList* _tmp1_ = NULL;
+ GeeList* _tmp2_ = NULL;
+#line 921 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_TAG, Tag);
+#line 921 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (IS_DATA_SOURCE (source));
+#line 922 "/home/jens/Source/shotwell/src/Tag.vala"
+ self->priv->unlinking = TRUE;
+#line 924 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = source;
+#line 924 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = tag_detach (self, G_TYPE_CHECK_INSTANCE_CAST (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_LIBRARY_PHOTO, LibraryPhoto), TYPE_MEDIA_SOURCE, MediaSource));
+#line 924 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = _tmp1_;
+#line 924 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp2_);
+#line 926 "/home/jens/Source/shotwell/src/Tag.vala"
+ self->priv->unlinking = FALSE;
+#line 7212 "Tag.c"
+}
+
+
+static void tag_real_break_link_many (ContainerSource* base, GeeCollection* sources) {
+ Tag * self;
+ GeeCollection* _tmp0_ = NULL;
+ GeeMultiMap* _tmp1_ = NULL;
+ GeeMultiMap* _tmp2_ = NULL;
+#line 929 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_TAG, Tag);
+#line 929 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (sources));
+#line 930 "/home/jens/Source/shotwell/src/Tag.vala"
+ self->priv->unlinking = TRUE;
+#line 932 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = sources;
+#line 932 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = tag_detach_many (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 932 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = _tmp1_;
+#line 932 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp2_);
+#line 934 "/home/jens/Source/shotwell/src/Tag.vala"
+ self->priv->unlinking = FALSE;
+#line 7237 "Tag.c"
+}
+
+
+static void tag_real_establish_link (ContainerSource* base, DataSource* source) {
+ Tag * self;
+ DataSource* _tmp0_ = NULL;
+#line 937 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_TAG, Tag);
+#line 937 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (IS_DATA_SOURCE (source));
+#line 938 "/home/jens/Source/shotwell/src/Tag.vala"
+ self->priv->relinking = TRUE;
+#line 940 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = source;
+#line 940 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_attach (self, G_TYPE_CHECK_INSTANCE_CAST (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_LIBRARY_PHOTO, LibraryPhoto), TYPE_MEDIA_SOURCE, MediaSource));
+#line 942 "/home/jens/Source/shotwell/src/Tag.vala"
+ self->priv->relinking = FALSE;
+#line 7256 "Tag.c"
+}
+
+
+static void tag_real_establish_link_many (ContainerSource* base, GeeCollection* sources) {
+ Tag * self;
+ GeeCollection* _tmp0_ = NULL;
+#line 945 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_TAG, Tag);
+#line 945 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (sources));
+#line 946 "/home/jens/Source/shotwell/src/Tag.vala"
+ self->priv->relinking = TRUE;
+#line 948 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = sources;
+#line 948 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_attach_many (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 950 "/home/jens/Source/shotwell/src/Tag.vala"
+ self->priv->relinking = FALSE;
+#line 7275 "Tag.c"
+}
+
+
+static void tag_update_indexable_keywords (Tag* self) {
+ gchar* _tmp0_ = NULL;
+ gchar* _tmp1_ = NULL;
+ gchar* _tmp2_ = NULL;
+#line 953 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (IS_TAG (self));
+#line 954 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = tag_get_searchable_name (self);
+#line 954 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = _tmp0_;
+#line 954 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = indexable_prepare_indexable_string (_tmp1_);
+#line 954 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (self->priv->indexable_keywords);
+#line 954 "/home/jens/Source/shotwell/src/Tag.vala"
+ self->priv->indexable_keywords = _tmp2_;
+#line 954 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp1_);
+#line 7297 "Tag.c"
+}
+
+
+static const gchar* tag_real_get_indexable_keywords (Indexable* base) {
+ Tag * self;
+ const gchar* result = NULL;
+ const gchar* _tmp0_ = NULL;
+#line 957 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_TAG, Tag);
+#line 958 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = self->priv->indexable_keywords;
+#line 958 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = _tmp0_;
+#line 958 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 7313 "Tag.c"
+}
+
+
+void tag_attach (Tag* self, MediaSource* source) {
+ Tag* attach_to = NULL;
+ Tag* _tmp0_ = NULL;
+#line 961 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (IS_TAG (self));
+#line 961 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (IS_MEDIA_SOURCE (source));
+#line 962 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = _g_object_ref0 (self);
+#line 962 "/home/jens/Source/shotwell/src/Tag.vala"
+ attach_to = _tmp0_;
+#line 963 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 7330 "Tag.c"
+ Tag* _tmp1_ = NULL;
+ Tag* _tmp2_ = NULL;
+ ViewCollection* _tmp3_ = NULL;
+ MediaSource* _tmp4_ = NULL;
+ gboolean _tmp5_ = FALSE;
+ Tag* _tmp11_ = NULL;
+ Tag* _tmp12_ = NULL;
+#line 963 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = attach_to;
+#line 963 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!(_tmp1_ != NULL)) {
+#line 963 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 7344 "Tag.c"
+ }
+#line 964 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = attach_to;
+#line 964 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = _tmp2_->priv->media_views;
+#line 964 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = source;
+#line 964 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = view_collection_has_view_for_source (_tmp3_, G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, TYPE_DATA_SOURCE, DataSource));
+#line 964 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp5_) {
+#line 7356 "Tag.c"
+ Tag* _tmp6_ = NULL;
+ ViewCollection* _tmp7_ = NULL;
+ MediaSource* _tmp8_ = NULL;
+ ThumbnailView* _tmp9_ = NULL;
+ ThumbnailView* _tmp10_ = NULL;
+#line 965 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = attach_to;
+#line 965 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = _tmp6_->priv->media_views;
+#line 965 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = source;
+#line 965 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = thumbnail_view_new (G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, TYPE_THUMBNAIL_SOURCE, ThumbnailSource));
+#line 965 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = _tmp9_;
+#line 965 "/home/jens/Source/shotwell/src/Tag.vala"
+ data_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, TYPE_DATA_COLLECTION, DataCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, TYPE_DATA_OBJECT, DataObject));
+#line 965 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp10_);
+#line 7376 "Tag.c"
+ }
+#line 968 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = attach_to;
+#line 968 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = tag_get_hierarchical_parent (_tmp11_);
+#line 968 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (attach_to);
+#line 968 "/home/jens/Source/shotwell/src/Tag.vala"
+ attach_to = _tmp12_;
+#line 7386 "Tag.c"
+ }
+#line 961 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (attach_to);
+#line 7390 "Tag.c"
+}
+
+
+void tag_attach_many (Tag* self, GeeCollection* sources) {
+ Tag* attach_to = NULL;
+ Tag* _tmp0_ = NULL;
+#line 972 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (IS_TAG (self));
+#line 972 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (sources));
+#line 973 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = _g_object_ref0 (self);
+#line 973 "/home/jens/Source/shotwell/src/Tag.vala"
+ attach_to = _tmp0_;
+#line 974 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 7407 "Tag.c"
+ Tag* _tmp1_ = NULL;
+ GeeArrayList* view_list = NULL;
+ GeeArrayList* _tmp2_ = NULL;
+ GeeArrayList* _tmp17_ = NULL;
+ gint _tmp18_ = 0;
+ gint _tmp19_ = 0;
+ Tag* _tmp25_ = NULL;
+ Tag* _tmp26_ = NULL;
+#line 974 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = attach_to;
+#line 974 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!(_tmp1_ != NULL)) {
+#line 974 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 7422 "Tag.c"
+ }
+#line 975 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = gee_array_list_new (TYPE_THUMBNAIL_VIEW, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 975 "/home/jens/Source/shotwell/src/Tag.vala"
+ view_list = _tmp2_;
+#line 7428 "Tag.c"
+ {
+ GeeIterator* _source_it = NULL;
+ GeeCollection* _tmp3_ = NULL;
+ GeeIterator* _tmp4_ = NULL;
+#line 976 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = sources;
+#line 976 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 976 "/home/jens/Source/shotwell/src/Tag.vala"
+ _source_it = _tmp4_;
+#line 976 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 7441 "Tag.c"
+ GeeIterator* _tmp5_ = NULL;
+ gboolean _tmp6_ = FALSE;
+ MediaSource* source = NULL;
+ GeeIterator* _tmp7_ = NULL;
+ gpointer _tmp8_ = NULL;
+ Tag* _tmp9_ = NULL;
+ ViewCollection* _tmp10_ = NULL;
+ MediaSource* _tmp11_ = NULL;
+ gboolean _tmp12_ = FALSE;
+#line 976 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = _source_it;
+#line 976 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = gee_iterator_next (_tmp5_);
+#line 976 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp6_) {
+#line 976 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 7459 "Tag.c"
+ }
+#line 976 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = _source_it;
+#line 976 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = gee_iterator_get (_tmp7_);
+#line 976 "/home/jens/Source/shotwell/src/Tag.vala"
+ source = (MediaSource*) _tmp8_;
+#line 977 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = attach_to;
+#line 977 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = _tmp9_->priv->media_views;
+#line 977 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = source;
+#line 977 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = view_collection_has_view_for_source (_tmp10_, G_TYPE_CHECK_INSTANCE_CAST (_tmp11_, TYPE_DATA_SOURCE, DataSource));
+#line 977 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp12_) {
+#line 7477 "Tag.c"
+ GeeArrayList* _tmp13_ = NULL;
+ MediaSource* _tmp14_ = NULL;
+ ThumbnailView* _tmp15_ = NULL;
+ ThumbnailView* _tmp16_ = NULL;
+#line 978 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = view_list;
+#line 978 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp14_ = source;
+#line 978 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp15_ = thumbnail_view_new (G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, TYPE_THUMBNAIL_SOURCE, ThumbnailSource));
+#line 978 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp16_ = _tmp15_;
+#line 978 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp13_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp16_);
+#line 978 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp16_);
+#line 7494 "Tag.c"
+ }
+#line 976 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (source);
+#line 7498 "Tag.c"
+ }
+#line 976 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_source_it);
+#line 7502 "Tag.c"
+ }
+#line 981 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp17_ = view_list;
+#line 981 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp18_ = gee_abstract_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp17_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 981 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp19_ = _tmp18_;
+#line 981 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp19_ > 0) {
+#line 7512 "Tag.c"
+ Tag* _tmp20_ = NULL;
+ ViewCollection* _tmp21_ = NULL;
+ GeeArrayList* _tmp22_ = NULL;
+ GeeCollection* _tmp23_ = NULL;
+ GeeCollection* _tmp24_ = NULL;
+#line 982 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp20_ = attach_to;
+#line 982 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp21_ = _tmp20_->priv->media_views;
+#line 982 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp22_ = view_list;
+#line 982 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp23_ = data_collection_add_many (G_TYPE_CHECK_INSTANCE_CAST (_tmp21_, TYPE_DATA_COLLECTION, DataCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp22_, GEE_TYPE_COLLECTION, GeeCollection), NULL, NULL);
+#line 982 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp24_ = _tmp23_;
+#line 982 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp24_);
+#line 7530 "Tag.c"
+ }
+#line 984 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp25_ = attach_to;
+#line 984 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp26_ = tag_get_hierarchical_parent (_tmp25_);
+#line 984 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (attach_to);
+#line 984 "/home/jens/Source/shotwell/src/Tag.vala"
+ attach_to = _tmp26_;
+#line 974 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (view_list);
+#line 7542 "Tag.c"
+ }
+#line 972 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (attach_to);
+#line 7546 "Tag.c"
+}
+
+
+GeeList* tag_detach (Tag* self, MediaSource* source) {
+ GeeList* result = NULL;
+ DataView* this_view = NULL;
+ ViewCollection* _tmp0_ = NULL;
+ MediaSource* _tmp1_ = NULL;
+ DataView* _tmp2_ = NULL;
+ DataView* _tmp3_ = NULL;
+ GeeList* detached_from = NULL;
+ GeeArrayList* _tmp4_ = NULL;
+ ViewCollection* _tmp29_ = NULL;
+ ViewCollection* _tmp30_ = NULL;
+ DataView* _tmp31_ = NULL;
+ Marker* _tmp32_ = NULL;
+ Marker* _tmp33_ = NULL;
+ GeeList* _tmp34_ = NULL;
+#line 991 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_TAG (self), NULL);
+#line 991 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_MEDIA_SOURCE (source), NULL);
+#line 992 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = self->priv->media_views;
+#line 992 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = source;
+#line 992 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = view_collection_get_view_for_source (_tmp0_, G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, TYPE_DATA_SOURCE, DataSource));
+#line 992 "/home/jens/Source/shotwell/src/Tag.vala"
+ this_view = _tmp2_;
+#line 993 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = this_view;
+#line 993 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp3_ == NULL) {
+#line 994 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = NULL;
+#line 994 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (this_view);
+#line 994 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 7587 "Tag.c"
+ }
+#line 996 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = gee_array_list_new (TYPE_TAG, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 996 "/home/jens/Source/shotwell/src/Tag.vala"
+ detached_from = G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, GEE_TYPE_LIST, GeeList);
+#line 7593 "Tag.c"
+ {
+ GeeList* _child_tag_list = NULL;
+ GeeList* _tmp5_ = NULL;
+ gint _child_tag_size = 0;
+ GeeList* _tmp6_ = NULL;
+ gint _tmp7_ = 0;
+ gint _tmp8_ = 0;
+ gint _child_tag_index = 0;
+#line 998 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = tag_get_hierarchical_children (self);
+#line 998 "/home/jens/Source/shotwell/src/Tag.vala"
+ _child_tag_list = _tmp5_;
+#line 998 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = _child_tag_list;
+#line 998 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 998 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = _tmp7_;
+#line 998 "/home/jens/Source/shotwell/src/Tag.vala"
+ _child_tag_size = _tmp8_;
+#line 998 "/home/jens/Source/shotwell/src/Tag.vala"
+ _child_tag_index = -1;
+#line 998 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 7618 "Tag.c"
+ gint _tmp9_ = 0;
+ gint _tmp10_ = 0;
+ gint _tmp11_ = 0;
+ Tag* child_tag = NULL;
+ GeeList* _tmp12_ = NULL;
+ gint _tmp13_ = 0;
+ gpointer _tmp14_ = NULL;
+ DataView* child_view = NULL;
+ Tag* _tmp15_ = NULL;
+ ViewCollection* _tmp16_ = NULL;
+ MediaSource* _tmp17_ = NULL;
+ DataView* _tmp18_ = NULL;
+ DataView* _tmp19_ = NULL;
+#line 998 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = _child_tag_index;
+#line 998 "/home/jens/Source/shotwell/src/Tag.vala"
+ _child_tag_index = _tmp9_ + 1;
+#line 998 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = _child_tag_index;
+#line 998 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = _child_tag_size;
+#line 998 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!(_tmp10_ < _tmp11_)) {
+#line 998 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 7644 "Tag.c"
+ }
+#line 998 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = _child_tag_list;
+#line 998 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = _child_tag_index;
+#line 998 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp14_ = gee_list_get (_tmp12_, _tmp13_);
+#line 998 "/home/jens/Source/shotwell/src/Tag.vala"
+ child_tag = (Tag*) _tmp14_;
+#line 999 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp15_ = child_tag;
+#line 999 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp16_ = _tmp15_->priv->media_views;
+#line 999 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp17_ = source;
+#line 999 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp18_ = view_collection_get_view_for_source (_tmp16_, G_TYPE_CHECK_INSTANCE_CAST (_tmp17_, TYPE_DATA_SOURCE, DataSource));
+#line 999 "/home/jens/Source/shotwell/src/Tag.vala"
+ child_view = _tmp18_;
+#line 1000 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp19_ = child_view;
+#line 1000 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp19_ != NULL) {
+#line 7668 "Tag.c"
+ Tag* _tmp20_ = NULL;
+ ViewCollection* _tmp21_ = NULL;
+ Tag* _tmp22_ = NULL;
+ ViewCollection* _tmp23_ = NULL;
+ DataView* _tmp24_ = NULL;
+ Marker* _tmp25_ = NULL;
+ Marker* _tmp26_ = NULL;
+ GeeList* _tmp27_ = NULL;
+ Tag* _tmp28_ = NULL;
+#line 1001 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp20_ = child_tag;
+#line 1001 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp21_ = _tmp20_->priv->media_views;
+#line 1001 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp22_ = child_tag;
+#line 1001 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp23_ = _tmp22_->priv->media_views;
+#line 1001 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp24_ = child_view;
+#line 1001 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp25_ = data_collection_mark (G_TYPE_CHECK_INSTANCE_CAST (_tmp23_, TYPE_DATA_COLLECTION, DataCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp24_, TYPE_DATA_OBJECT, DataObject));
+#line 1001 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp26_ = _tmp25_;
+#line 1001 "/home/jens/Source/shotwell/src/Tag.vala"
+ data_collection_remove_marked (G_TYPE_CHECK_INSTANCE_CAST (_tmp21_, TYPE_DATA_COLLECTION, DataCollection), _tmp26_);
+#line 1001 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp26_);
+#line 1002 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp27_ = detached_from;
+#line 1002 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp28_ = child_tag;
+#line 1002 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp27_, GEE_TYPE_COLLECTION, GeeCollection), _tmp28_);
+#line 7702 "Tag.c"
+ }
+#line 998 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (child_view);
+#line 998 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (child_tag);
+#line 7708 "Tag.c"
+ }
+#line 998 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_child_tag_list);
+#line 7712 "Tag.c"
+ }
+#line 1006 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp29_ = self->priv->media_views;
+#line 1006 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp30_ = self->priv->media_views;
+#line 1006 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp31_ = this_view;
+#line 1006 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp32_ = data_collection_mark (G_TYPE_CHECK_INSTANCE_CAST (_tmp30_, TYPE_DATA_COLLECTION, DataCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp31_, TYPE_DATA_OBJECT, DataObject));
+#line 1006 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp33_ = _tmp32_;
+#line 1006 "/home/jens/Source/shotwell/src/Tag.vala"
+ data_collection_remove_marked (G_TYPE_CHECK_INSTANCE_CAST (_tmp29_, TYPE_DATA_COLLECTION, DataCollection), _tmp33_);
+#line 1006 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp33_);
+#line 1007 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp34_ = detached_from;
+#line 1007 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp34_, GEE_TYPE_COLLECTION, GeeCollection), self);
+#line 1009 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = detached_from;
+#line 1009 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (this_view);
+#line 1009 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 7738 "Tag.c"
+}
+
+
+GeeMultiMap* tag_detach_many (Tag* self, GeeCollection* sources) {
+ GeeMultiMap* result = NULL;
+ GeeMultiMap* detached_from = NULL;
+ GeeHashMultiMap* _tmp0_ = NULL;
+ Marker* marker = NULL;
+ ViewCollection* _tmp1_ = NULL;
+ Marker* _tmp2_ = NULL;
+ ViewCollection* _tmp42_ = NULL;
+ Marker* _tmp43_ = NULL;
+ GeeMultiMap* _tmp44_ = NULL;
+ GeeMultiMap* _tmp45_ = NULL;
+ gint _tmp46_ = 0;
+ gint _tmp47_ = 0;
+ GeeMultiMap* _tmp49_ = NULL;
+#line 1015 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_TAG (self), NULL);
+#line 1015 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (GEE_IS_COLLECTION (sources), NULL);
+#line 1016 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = gee_hash_multi_map_new (TYPE_TAG, (GBoxedCopyFunc) g_object_ref, g_object_unref, TYPE_MEDIA_SOURCE, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 1016 "/home/jens/Source/shotwell/src/Tag.vala"
+ detached_from = G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_MULTI_MAP, GeeMultiMap);
+#line 1018 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = self->priv->media_views;
+#line 1018 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = data_collection_start_marking (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, TYPE_DATA_COLLECTION, DataCollection));
+#line 1018 "/home/jens/Source/shotwell/src/Tag.vala"
+ marker = _tmp2_;
+#line 7770 "Tag.c"
+ {
+ GeeIterator* _source_it = NULL;
+ GeeCollection* _tmp3_ = NULL;
+ GeeIterator* _tmp4_ = NULL;
+#line 1019 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = sources;
+#line 1019 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 1019 "/home/jens/Source/shotwell/src/Tag.vala"
+ _source_it = _tmp4_;
+#line 1019 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 7783 "Tag.c"
+ GeeIterator* _tmp5_ = NULL;
+ gboolean _tmp6_ = FALSE;
+ MediaSource* source = NULL;
+ GeeIterator* _tmp7_ = NULL;
+ gpointer _tmp8_ = NULL;
+ DataView* view = NULL;
+ ViewCollection* _tmp9_ = NULL;
+ MediaSource* _tmp10_ = NULL;
+ DataView* _tmp11_ = NULL;
+ DataView* _tmp12_ = NULL;
+ Marker* _tmp38_ = NULL;
+ DataView* _tmp39_ = NULL;
+ GeeMultiMap* _tmp40_ = NULL;
+ MediaSource* _tmp41_ = NULL;
+#line 1019 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = _source_it;
+#line 1019 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = gee_iterator_next (_tmp5_);
+#line 1019 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp6_) {
+#line 1019 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 7806 "Tag.c"
+ }
+#line 1019 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = _source_it;
+#line 1019 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = gee_iterator_get (_tmp7_);
+#line 1019 "/home/jens/Source/shotwell/src/Tag.vala"
+ source = (MediaSource*) _tmp8_;
+#line 1020 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = self->priv->media_views;
+#line 1020 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = source;
+#line 1020 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = view_collection_get_view_for_source (_tmp9_, G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, TYPE_DATA_SOURCE, DataSource));
+#line 1020 "/home/jens/Source/shotwell/src/Tag.vala"
+ view = _tmp11_;
+#line 1021 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = view;
+#line 1021 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp12_ == NULL) {
+#line 1022 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (view);
+#line 1022 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (source);
+#line 1022 "/home/jens/Source/shotwell/src/Tag.vala"
+ continue;
+#line 7832 "Tag.c"
+ }
+ {
+ GeeList* _child_tag_list = NULL;
+ GeeList* _tmp13_ = NULL;
+ gint _child_tag_size = 0;
+ GeeList* _tmp14_ = NULL;
+ gint _tmp15_ = 0;
+ gint _tmp16_ = 0;
+ gint _child_tag_index = 0;
+#line 1024 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = tag_get_hierarchical_children (self);
+#line 1024 "/home/jens/Source/shotwell/src/Tag.vala"
+ _child_tag_list = _tmp13_;
+#line 1024 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp14_ = _child_tag_list;
+#line 1024 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp15_ = gee_collection_get_size (G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 1024 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp16_ = _tmp15_;
+#line 1024 "/home/jens/Source/shotwell/src/Tag.vala"
+ _child_tag_size = _tmp16_;
+#line 1024 "/home/jens/Source/shotwell/src/Tag.vala"
+ _child_tag_index = -1;
+#line 1024 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 7858 "Tag.c"
+ gint _tmp17_ = 0;
+ gint _tmp18_ = 0;
+ gint _tmp19_ = 0;
+ Tag* child_tag = NULL;
+ GeeList* _tmp20_ = NULL;
+ gint _tmp21_ = 0;
+ gpointer _tmp22_ = NULL;
+ DataView* child_view = NULL;
+ Tag* _tmp23_ = NULL;
+ ViewCollection* _tmp24_ = NULL;
+ MediaSource* _tmp25_ = NULL;
+ DataView* _tmp26_ = NULL;
+ DataView* _tmp27_ = NULL;
+#line 1024 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp17_ = _child_tag_index;
+#line 1024 "/home/jens/Source/shotwell/src/Tag.vala"
+ _child_tag_index = _tmp17_ + 1;
+#line 1024 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp18_ = _child_tag_index;
+#line 1024 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp19_ = _child_tag_size;
+#line 1024 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!(_tmp18_ < _tmp19_)) {
+#line 1024 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 7884 "Tag.c"
+ }
+#line 1024 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp20_ = _child_tag_list;
+#line 1024 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp21_ = _child_tag_index;
+#line 1024 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp22_ = gee_list_get (_tmp20_, _tmp21_);
+#line 1024 "/home/jens/Source/shotwell/src/Tag.vala"
+ child_tag = (Tag*) _tmp22_;
+#line 1025 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp23_ = child_tag;
+#line 1025 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp24_ = _tmp23_->priv->media_views;
+#line 1025 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp25_ = source;
+#line 1025 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp26_ = view_collection_get_view_for_source (_tmp24_, G_TYPE_CHECK_INSTANCE_CAST (_tmp25_, TYPE_DATA_SOURCE, DataSource));
+#line 1025 "/home/jens/Source/shotwell/src/Tag.vala"
+ child_view = _tmp26_;
+#line 1026 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp27_ = child_view;
+#line 1026 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp27_ != NULL) {
+#line 7908 "Tag.c"
+ Tag* _tmp28_ = NULL;
+ ViewCollection* _tmp29_ = NULL;
+ Tag* _tmp30_ = NULL;
+ ViewCollection* _tmp31_ = NULL;
+ DataView* _tmp32_ = NULL;
+ Marker* _tmp33_ = NULL;
+ Marker* _tmp34_ = NULL;
+ GeeMultiMap* _tmp35_ = NULL;
+ Tag* _tmp36_ = NULL;
+ MediaSource* _tmp37_ = NULL;
+#line 1027 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp28_ = child_tag;
+#line 1027 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp29_ = _tmp28_->priv->media_views;
+#line 1027 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp30_ = child_tag;
+#line 1027 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp31_ = _tmp30_->priv->media_views;
+#line 1027 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp32_ = child_view;
+#line 1027 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp33_ = data_collection_mark (G_TYPE_CHECK_INSTANCE_CAST (_tmp31_, TYPE_DATA_COLLECTION, DataCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp32_, TYPE_DATA_OBJECT, DataObject));
+#line 1027 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp34_ = _tmp33_;
+#line 1027 "/home/jens/Source/shotwell/src/Tag.vala"
+ data_collection_remove_marked (G_TYPE_CHECK_INSTANCE_CAST (_tmp29_, TYPE_DATA_COLLECTION, DataCollection), _tmp34_);
+#line 1027 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp34_);
+#line 1028 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp35_ = detached_from;
+#line 1028 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp36_ = child_tag;
+#line 1028 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp37_ = source;
+#line 1028 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_multi_map_set (_tmp35_, _tmp36_, _tmp37_);
+#line 7945 "Tag.c"
+ }
+#line 1024 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (child_view);
+#line 1024 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (child_tag);
+#line 7951 "Tag.c"
+ }
+#line 1024 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_child_tag_list);
+#line 7955 "Tag.c"
+ }
+#line 1032 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp38_ = marker;
+#line 1032 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp39_ = view;
+#line 1032 "/home/jens/Source/shotwell/src/Tag.vala"
+ marker_mark (_tmp38_, G_TYPE_CHECK_INSTANCE_CAST (_tmp39_, TYPE_DATA_OBJECT, DataObject));
+#line 1033 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp40_ = detached_from;
+#line 1033 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp41_ = source;
+#line 1033 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_multi_map_set (_tmp40_, self, _tmp41_);
+#line 1019 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (view);
+#line 1019 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (source);
+#line 7973 "Tag.c"
+ }
+#line 1019 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_source_it);
+#line 7977 "Tag.c"
+ }
+#line 1036 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp42_ = self->priv->media_views;
+#line 1036 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp43_ = marker;
+#line 1036 "/home/jens/Source/shotwell/src/Tag.vala"
+ data_collection_remove_marked (G_TYPE_CHECK_INSTANCE_CAST (_tmp42_, TYPE_DATA_COLLECTION, DataCollection), _tmp43_);
+#line 1038 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp45_ = detached_from;
+#line 1038 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp46_ = gee_multi_map_get_size (_tmp45_);
+#line 1038 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp47_ = _tmp46_;
+#line 1038 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp47_ > 0) {
+#line 7993 "Tag.c"
+ GeeMultiMap* _tmp48_ = NULL;
+#line 1038 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp48_ = detached_from;
+#line 1038 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp44_ = _tmp48_;
+#line 7999 "Tag.c"
+ } else {
+#line 1038 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp44_ = NULL;
+#line 8003 "Tag.c"
+ }
+#line 1038 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp49_ = _g_object_ref0 (_tmp44_);
+#line 1038 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = _tmp49_;
+#line 1038 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (marker);
+#line 1038 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (detached_from);
+#line 1038 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 8015 "Tag.c"
+}
+
+
+static gint string_index_of (const gchar* self, const gchar* needle, gint start_index) {
+ gint result = 0;
+ gchar* _result_ = NULL;
+ gint _tmp0_ = 0;
+ const gchar* _tmp1_ = NULL;
+ gchar* _tmp2_ = NULL;
+ gchar* _tmp3_ = NULL;
+#line 987 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ g_return_val_if_fail (self != NULL, 0);
+#line 987 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ g_return_val_if_fail (needle != NULL, 0);
+#line 988 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp0_ = start_index;
+#line 988 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp1_ = needle;
+#line 988 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp2_ = strstr (((gchar*) self) + _tmp0_, (gchar*) _tmp1_);
+#line 988 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _result_ = _tmp2_;
+#line 990 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp3_ = _result_;
+#line 990 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ if (_tmp3_ != NULL) {
+#line 8042 "Tag.c"
+ gchar* _tmp4_ = NULL;
+#line 991 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp4_ = _result_;
+#line 991 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ result = (gint) (_tmp4_ - ((gchar*) self));
+#line 991 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ return result;
+#line 8050 "Tag.c"
+ } else {
+#line 993 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ result = -1;
+#line 993 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ return result;
+#line 8056 "Tag.c"
+ }
+}
+
+
+static glong string_strnlen (gchar* str, glong maxlen) {
+ glong result = 0L;
+ gchar* end = NULL;
+ gchar* _tmp0_ = NULL;
+ glong _tmp1_ = 0L;
+ gchar* _tmp2_ = NULL;
+ gchar* _tmp3_ = NULL;
+#line 1295 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp0_ = str;
+#line 1295 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp1_ = maxlen;
+#line 1295 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp2_ = memchr (_tmp0_, 0, (gsize) _tmp1_);
+#line 1295 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ end = _tmp2_;
+#line 1296 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp3_ = end;
+#line 1296 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ if (_tmp3_ == NULL) {
+#line 8080 "Tag.c"
+ glong _tmp4_ = 0L;
+#line 1297 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp4_ = maxlen;
+#line 1297 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ result = _tmp4_;
+#line 1297 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ return result;
+#line 8088 "Tag.c"
+ } else {
+ gchar* _tmp5_ = NULL;
+ gchar* _tmp6_ = NULL;
+#line 1299 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp5_ = end;
+#line 1299 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp6_ = str;
+#line 1299 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ result = (glong) (_tmp5_ - _tmp6_);
+#line 1299 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ return result;
+#line 8100 "Tag.c"
+ }
+}
+
+
+static gchar* string_substring (const gchar* self, glong offset, glong len) {
+ gchar* result = NULL;
+ glong string_length = 0L;
+ gboolean _tmp0_ = FALSE;
+ glong _tmp1_ = 0L;
+ glong _tmp8_ = 0L;
+ glong _tmp14_ = 0L;
+ glong _tmp17_ = 0L;
+ glong _tmp18_ = 0L;
+ glong _tmp19_ = 0L;
+ glong _tmp20_ = 0L;
+ glong _tmp21_ = 0L;
+ gchar* _tmp22_ = NULL;
+#line 1306 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ g_return_val_if_fail (self != NULL, NULL);
+#line 1308 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp1_ = offset;
+#line 1308 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ if (_tmp1_ >= ((glong) 0)) {
+#line 8124 "Tag.c"
+ glong _tmp2_ = 0L;
+#line 1308 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp2_ = len;
+#line 1308 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp0_ = _tmp2_ >= ((glong) 0);
+#line 8130 "Tag.c"
+ } else {
+#line 1308 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp0_ = FALSE;
+#line 8134 "Tag.c"
+ }
+#line 1308 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ if (_tmp0_) {
+#line 8138 "Tag.c"
+ glong _tmp3_ = 0L;
+ glong _tmp4_ = 0L;
+ glong _tmp5_ = 0L;
+#line 1310 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp3_ = offset;
+#line 1310 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp4_ = len;
+#line 1310 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp5_ = string_strnlen ((gchar*) self, _tmp3_ + _tmp4_);
+#line 1310 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ string_length = _tmp5_;
+#line 8150 "Tag.c"
+ } else {
+ gint _tmp6_ = 0;
+ gint _tmp7_ = 0;
+#line 1312 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp6_ = strlen (self);
+#line 1312 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp7_ = _tmp6_;
+#line 1312 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ string_length = (glong) _tmp7_;
+#line 8160 "Tag.c"
+ }
+#line 1315 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp8_ = offset;
+#line 1315 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ if (_tmp8_ < ((glong) 0)) {
+#line 8166 "Tag.c"
+ glong _tmp9_ = 0L;
+ glong _tmp10_ = 0L;
+ glong _tmp11_ = 0L;
+#line 1316 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp9_ = string_length;
+#line 1316 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp10_ = offset;
+#line 1316 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ offset = _tmp9_ + _tmp10_;
+#line 1317 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp11_ = offset;
+#line 1317 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ g_return_val_if_fail (_tmp11_ >= ((glong) 0), NULL);
+#line 8180 "Tag.c"
+ } else {
+ glong _tmp12_ = 0L;
+ glong _tmp13_ = 0L;
+#line 1319 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp12_ = offset;
+#line 1319 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp13_ = string_length;
+#line 1319 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ g_return_val_if_fail (_tmp12_ <= _tmp13_, NULL);
+#line 8190 "Tag.c"
+ }
+#line 1321 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp14_ = len;
+#line 1321 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ if (_tmp14_ < ((glong) 0)) {
+#line 8196 "Tag.c"
+ glong _tmp15_ = 0L;
+ glong _tmp16_ = 0L;
+#line 1322 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp15_ = string_length;
+#line 1322 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp16_ = offset;
+#line 1322 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ len = _tmp15_ - _tmp16_;
+#line 8205 "Tag.c"
+ }
+#line 1324 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp17_ = offset;
+#line 1324 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp18_ = len;
+#line 1324 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp19_ = string_length;
+#line 1324 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ g_return_val_if_fail ((_tmp17_ + _tmp18_) <= _tmp19_, NULL);
+#line 1325 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp20_ = offset;
+#line 1325 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp21_ = len;
+#line 1325 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ _tmp22_ = g_strndup (((gchar*) self) + _tmp20_, (gsize) _tmp21_);
+#line 1325 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ result = _tmp22_;
+#line 1325 "/usr/share/vala-0.32/vapi/glib-2.0.vapi"
+ return result;
+#line 8225 "Tag.c"
+}
+
+
+gboolean tag_rename (Tag* self, const gchar* name) {
+ gboolean result = FALSE;
+ const gchar* _tmp0_ = NULL;
+ gchar* _tmp1_ = NULL;
+ gchar* _tmp2_ = NULL;
+ gboolean _tmp3_ = FALSE;
+ gchar* new_name = NULL;
+ const gchar* _tmp4_ = NULL;
+ gchar* _tmp5_ = NULL;
+ const gchar* _tmp6_ = NULL;
+ gchar* _tmp7_ = NULL;
+ gchar* _tmp8_ = NULL;
+ gboolean _tmp9_ = FALSE;
+ gboolean _tmp10_ = FALSE;
+#line 1042 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_TAG (self), FALSE);
+#line 1042 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (name != NULL, FALSE);
+#line 1043 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = name;
+#line 1043 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = tag_get_user_visible_name (self);
+#line 1043 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = _tmp1_;
+#line 1043 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = g_strcmp0 (_tmp0_, _tmp2_) == 0;
+#line 1043 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp2_);
+#line 1043 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp3_) {
+#line 1044 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = TRUE;
+#line 1044 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 8263 "Tag.c"
+ }
+#line 1046 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = name;
+#line 1046 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = tag_prep_tag_name (_tmp4_);
+#line 1046 "/home/jens/Source/shotwell/src/Tag.vala"
+ new_name = _tmp5_;
+#line 1047 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = new_name;
+#line 1047 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp6_ == NULL) {
+#line 1048 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = FALSE;
+#line 1048 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (new_name);
+#line 1048 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 8281 "Tag.c"
+ }
+#line 1051 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = tag_get_path (self);
+#line 1051 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = _tmp7_;
+#line 1051 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = g_str_has_prefix (_tmp8_, TAG_PATH_SEPARATOR_STRING);
+#line 1051 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = _tmp9_;
+#line 1051 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp8_);
+#line 1051 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp10_) {
+#line 8295 "Tag.c"
+ gchar* new_path = NULL;
+ const gchar* _tmp11_ = NULL;
+ gchar* _tmp12_ = NULL;
+ gchar* old_path = NULL;
+ gchar* _tmp13_ = NULL;
+ Tag* parent = NULL;
+ Tag* _tmp14_ = NULL;
+ Tag* _tmp15_ = NULL;
+ TagSourceCollection* _tmp25_ = NULL;
+ const gchar* _tmp26_ = NULL;
+ gboolean _tmp27_ = FALSE;
+ GeeCollection* children = NULL;
+ GeeList* _tmp28_ = NULL;
+ const gchar* _tmp29_ = NULL;
+ Alteration* _tmp53_ = NULL;
+ Alteration* _tmp54_ = NULL;
+#line 1052 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = new_name;
+#line 1052 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = g_strdup (_tmp11_);
+#line 1052 "/home/jens/Source/shotwell/src/Tag.vala"
+ new_path = _tmp12_;
+#line 1053 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = tag_get_path (self);
+#line 1053 "/home/jens/Source/shotwell/src/Tag.vala"
+ old_path = _tmp13_;
+#line 1055 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp14_ = tag_get_hierarchical_parent (self);
+#line 1055 "/home/jens/Source/shotwell/src/Tag.vala"
+ parent = _tmp14_;
+#line 1056 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp15_ = parent;
+#line 1056 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp15_ != NULL) {
+#line 8330 "Tag.c"
+ Tag* _tmp16_ = NULL;
+ gchar* _tmp17_ = NULL;
+ gchar* _tmp18_ = NULL;
+ gchar* _tmp19_ = NULL;
+ gchar* _tmp20_ = NULL;
+ const gchar* _tmp21_ = NULL;
+ gchar* _tmp22_ = NULL;
+#line 1057 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp16_ = parent;
+#line 1057 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp17_ = tag_get_path (_tmp16_);
+#line 1057 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp18_ = _tmp17_;
+#line 1057 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp19_ = g_strconcat (_tmp18_, TAG_PATH_SEPARATOR_STRING, NULL);
+#line 1057 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp20_ = _tmp19_;
+#line 1057 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp21_ = new_path;
+#line 1057 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp22_ = g_strconcat (_tmp20_, _tmp21_, NULL);
+#line 1057 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (new_path);
+#line 1057 "/home/jens/Source/shotwell/src/Tag.vala"
+ new_path = _tmp22_;
+#line 1057 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp20_);
+#line 1057 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp18_);
+#line 8360 "Tag.c"
+ } else {
+ const gchar* _tmp23_ = NULL;
+ gchar* _tmp24_ = NULL;
+#line 1059 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp23_ = new_path;
+#line 1059 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp24_ = g_strconcat (TAG_PATH_SEPARATOR_STRING, _tmp23_, NULL);
+#line 1059 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (new_path);
+#line 1059 "/home/jens/Source/shotwell/src/Tag.vala"
+ new_path = _tmp24_;
+#line 8372 "Tag.c"
+ }
+#line 1062 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp25_ = tag_global;
+#line 1062 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp26_ = new_path;
+#line 1062 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp27_ = tag_source_collection_exists (_tmp25_, _tmp26_, TRUE);
+#line 1062 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp27_) {
+#line 1063 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = FALSE;
+#line 1063 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (parent);
+#line 1063 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (old_path);
+#line 1063 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (new_path);
+#line 1063 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (new_name);
+#line 1063 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 8394 "Tag.c"
+ }
+#line 1065 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp28_ = tag_get_hierarchical_children (self);
+#line 1065 "/home/jens/Source/shotwell/src/Tag.vala"
+ children = G_TYPE_CHECK_INSTANCE_CAST (_tmp28_, GEE_TYPE_COLLECTION, GeeCollection);
+#line 1067 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp29_ = new_path;
+#line 1067 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_set_raw_path (self, _tmp29_, TRUE);
+#line 8404 "Tag.c"
+ {
+ GeeIterator* _child_it = NULL;
+ GeeCollection* _tmp30_ = NULL;
+ GeeIterator* _tmp31_ = NULL;
+#line 1069 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp30_ = children;
+#line 1069 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp31_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp30_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 1069 "/home/jens/Source/shotwell/src/Tag.vala"
+ _child_it = _tmp31_;
+#line 1069 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 8417 "Tag.c"
+ GeeIterator* _tmp32_ = NULL;
+ gboolean _tmp33_ = FALSE;
+ Tag* child = NULL;
+ GeeIterator* _tmp34_ = NULL;
+ gpointer _tmp35_ = NULL;
+ gchar* old_child_path = NULL;
+ Tag* _tmp36_ = NULL;
+ gchar* _tmp37_ = NULL;
+ gint old_path_index = 0;
+ const gchar* _tmp38_ = NULL;
+ const gchar* _tmp39_ = NULL;
+ gint _tmp40_ = 0;
+ gint _tmp41_ = 0;
+ gchar* child_subpath = NULL;
+ const gchar* _tmp42_ = NULL;
+ gint _tmp43_ = 0;
+ const gchar* _tmp44_ = NULL;
+ gint _tmp45_ = 0;
+ gint _tmp46_ = 0;
+ gchar* _tmp47_ = NULL;
+ gchar* new_child_path = NULL;
+ const gchar* _tmp48_ = NULL;
+ const gchar* _tmp49_ = NULL;
+ gchar* _tmp50_ = NULL;
+ Tag* _tmp51_ = NULL;
+ const gchar* _tmp52_ = NULL;
+#line 1069 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp32_ = _child_it;
+#line 1069 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp33_ = gee_iterator_next (_tmp32_);
+#line 1069 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp33_) {
+#line 1069 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 8452 "Tag.c"
+ }
+#line 1069 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp34_ = _child_it;
+#line 1069 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp35_ = gee_iterator_get (_tmp34_);
+#line 1069 "/home/jens/Source/shotwell/src/Tag.vala"
+ child = (Tag*) _tmp35_;
+#line 1072 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp36_ = child;
+#line 1072 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp37_ = tag_get_path (_tmp36_);
+#line 1072 "/home/jens/Source/shotwell/src/Tag.vala"
+ old_child_path = _tmp37_;
+#line 1076 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp38_ = old_child_path;
+#line 1076 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp39_ = old_path;
+#line 1076 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp40_ = string_index_of (_tmp38_, _tmp39_, 0);
+#line 1076 "/home/jens/Source/shotwell/src/Tag.vala"
+ old_path_index = _tmp40_;
+#line 1077 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp41_ = old_path_index;
+#line 1077 "/home/jens/Source/shotwell/src/Tag.vala"
+ _vala_assert (_tmp41_ != -1, "old_path_index != -1");
+#line 1079 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp42_ = old_child_path;
+#line 1079 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp43_ = old_path_index;
+#line 1079 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp44_ = old_path;
+#line 1079 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp45_ = strlen (_tmp44_);
+#line 1079 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp46_ = _tmp45_;
+#line 1079 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp47_ = string_substring (_tmp42_, (glong) (_tmp43_ + _tmp46_), (glong) -1);
+#line 1079 "/home/jens/Source/shotwell/src/Tag.vala"
+ child_subpath = _tmp47_;
+#line 1081 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp48_ = new_path;
+#line 1081 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp49_ = child_subpath;
+#line 1081 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp50_ = g_strconcat (_tmp48_, _tmp49_, NULL);
+#line 1081 "/home/jens/Source/shotwell/src/Tag.vala"
+ new_child_path = _tmp50_;
+#line 1083 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp51_ = child;
+#line 1083 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp52_ = new_child_path;
+#line 1083 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_set_raw_path (_tmp51_, _tmp52_, TRUE);
+#line 1069 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (new_child_path);
+#line 1069 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (child_subpath);
+#line 1069 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (old_child_path);
+#line 1069 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (child);
+#line 8514 "Tag.c"
+ }
+#line 1069 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_child_it);
+#line 8518 "Tag.c"
+ }
+#line 1086 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_update_indexable_keywords (self);
+#line 1087 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp53_ = alteration_new_from_list ("metadata:name, indexable:keywords");
+#line 1087 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp54_ = _tmp53_;
+#line 1087 "/home/jens/Source/shotwell/src/Tag.vala"
+ data_object_notify_altered (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_OBJECT, DataObject), _tmp54_);
+#line 1087 "/home/jens/Source/shotwell/src/Tag.vala"
+ _alteration_unref0 (_tmp54_);
+#line 8530 "Tag.c"
+ {
+ GeeIterator* _child_it = NULL;
+ GeeCollection* _tmp55_ = NULL;
+ GeeIterator* _tmp56_ = NULL;
+#line 1088 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp55_ = children;
+#line 1088 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp56_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp55_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 1088 "/home/jens/Source/shotwell/src/Tag.vala"
+ _child_it = _tmp56_;
+#line 1088 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 8543 "Tag.c"
+ GeeIterator* _tmp57_ = NULL;
+ gboolean _tmp58_ = FALSE;
+ Tag* child = NULL;
+ GeeIterator* _tmp59_ = NULL;
+ gpointer _tmp60_ = NULL;
+ Tag* _tmp61_ = NULL;
+ Alteration* _tmp62_ = NULL;
+ Alteration* _tmp63_ = NULL;
+#line 1088 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp57_ = _child_it;
+#line 1088 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp58_ = gee_iterator_next (_tmp57_);
+#line 1088 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp58_) {
+#line 1088 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 8560 "Tag.c"
+ }
+#line 1088 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp59_ = _child_it;
+#line 1088 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp60_ = gee_iterator_get (_tmp59_);
+#line 1088 "/home/jens/Source/shotwell/src/Tag.vala"
+ child = (Tag*) _tmp60_;
+#line 1089 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp61_ = child;
+#line 1089 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp62_ = alteration_new_from_list ("metadata:name, indexable:keywords");
+#line 1089 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp63_ = _tmp62_;
+#line 1089 "/home/jens/Source/shotwell/src/Tag.vala"
+ data_object_notify_altered (G_TYPE_CHECK_INSTANCE_CAST (_tmp61_, TYPE_DATA_OBJECT, DataObject), _tmp63_);
+#line 1089 "/home/jens/Source/shotwell/src/Tag.vala"
+ _alteration_unref0 (_tmp63_);
+#line 1088 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (child);
+#line 8580 "Tag.c"
+ }
+#line 1088 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_child_it);
+#line 8584 "Tag.c"
+ }
+#line 1051 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (children);
+#line 1051 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (parent);
+#line 1051 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (old_path);
+#line 1051 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (new_path);
+#line 8594 "Tag.c"
+ } else {
+ TagSourceCollection* _tmp64_ = NULL;
+ const gchar* _tmp65_ = NULL;
+ gboolean _tmp66_ = FALSE;
+ const gchar* _tmp67_ = NULL;
+#line 1093 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp64_ = tag_global;
+#line 1093 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp65_ = new_name;
+#line 1093 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp66_ = tag_source_collection_exists (_tmp64_, _tmp65_, TRUE);
+#line 1093 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp66_) {
+#line 1094 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = FALSE;
+#line 1094 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (new_name);
+#line 1094 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 8614 "Tag.c"
+ }
+#line 1096 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp67_ = new_name;
+#line 1096 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_set_raw_flat_name (self, _tmp67_);
+#line 8620 "Tag.c"
+ }
+#line 1099 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = TRUE;
+#line 1099 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (new_name);
+#line 1099 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 8628 "Tag.c"
+}
+
+
+gboolean tag_contains (Tag* self, MediaSource* source) {
+ gboolean result = FALSE;
+ ViewCollection* _tmp0_ = NULL;
+ MediaSource* _tmp1_ = NULL;
+ gboolean _tmp2_ = FALSE;
+#line 1102 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_TAG (self), FALSE);
+#line 1102 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_MEDIA_SOURCE (source), FALSE);
+#line 1103 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = self->priv->media_views;
+#line 1103 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = source;
+#line 1103 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = view_collection_has_view_for_source (_tmp0_, G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, TYPE_DATA_SOURCE, DataSource));
+#line 1103 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = _tmp2_;
+#line 1103 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 8651 "Tag.c"
+}
+
+
+gint tag_get_sources_count (Tag* self) {
+ gint result = 0;
+ ViewCollection* _tmp0_ = NULL;
+ gint _tmp1_ = 0;
+#line 1106 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_TAG (self), 0);
+#line 1107 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = self->priv->media_views;
+#line 1107 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = data_collection_get_count (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_DATA_COLLECTION, DataCollection));
+#line 1107 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = _tmp1_;
+#line 1107 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 8669 "Tag.c"
+}
+
+
+GeeCollection* tag_get_sources (Tag* self) {
+ GeeCollection* result = NULL;
+ ViewCollection* _tmp0_ = NULL;
+ GeeCollection* _tmp1_ = NULL;
+#line 1110 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_TAG (self), NULL);
+#line 1111 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = self->priv->media_views;
+#line 1111 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = view_collection_get_sources (_tmp0_);
+#line 1111 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_COLLECTION, GeeCollection);
+#line 1111 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 8687 "Tag.c"
+}
+
+
+void tag_mirror_sources (Tag* self, ViewCollection* view, CreateView mirroring_ctor, void* mirroring_ctor_target) {
+ ViewCollection* _tmp0_ = NULL;
+ ViewCollection* _tmp1_ = NULL;
+ CreateView _tmp2_ = NULL;
+ void* _tmp2__target = NULL;
+#line 1114 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (IS_TAG (self));
+#line 1114 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (IS_VIEW_COLLECTION (view));
+#line 1115 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = view;
+#line 1115 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = self->priv->media_views;
+#line 1115 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = mirroring_ctor;
+#line 1115 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2__target = mirroring_ctor_target;
+#line 1115 "/home/jens/Source/shotwell/src/Tag.vala"
+ view_collection_mirror (_tmp0_, _tmp1_, _tmp2_, _tmp2__target, NULL, NULL);
+#line 8710 "Tag.c"
+}
+
+
+static void tag_on_media_views_contents_altered (Tag* self, GeeIterable* added, GeeIterable* removed) {
+ GeeCollection* added_sources = NULL;
+ GeeIterable* _tmp0_ = NULL;
+ GeeCollection* removed_sources = NULL;
+ GeeIterable* _tmp29_ = NULL;
+ GeeCollection* _tmp58_ = NULL;
+ GeeCollection* _tmp62_ = NULL;
+ gboolean _tmp66_ = FALSE;
+ GeeCollection* _tmp67_ = NULL;
+ GError * _inner_error_ = NULL;
+#line 1118 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (IS_TAG (self));
+#line 1118 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail ((added == NULL) || GEE_IS_ITERABLE (added));
+#line 1118 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail ((removed == NULL) || GEE_IS_ITERABLE (removed));
+#line 1120 "/home/jens/Source/shotwell/src/Tag.vala"
+ added_sources = NULL;
+#line 1121 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = added;
+#line 1121 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp0_ != NULL) {
+#line 8736 "Tag.c"
+ GeeArrayList* _tmp1_ = NULL;
+#line 1122 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = gee_array_list_new (TYPE_MEDIA_SOURCE, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 1122 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (added_sources);
+#line 1122 "/home/jens/Source/shotwell/src/Tag.vala"
+ added_sources = G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_COLLECTION, GeeCollection);
+#line 8744 "Tag.c"
+ {
+ GeeIterator* _view_it = NULL;
+ GeeIterable* _tmp2_ = NULL;
+ GeeIterator* _tmp3_ = NULL;
+#line 1123 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = added;
+#line 1123 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = gee_iterable_iterator (_tmp2_);
+#line 1123 "/home/jens/Source/shotwell/src/Tag.vala"
+ _view_it = _tmp3_;
+#line 1123 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 8757 "Tag.c"
+ GeeIterator* _tmp4_ = NULL;
+ gboolean _tmp5_ = FALSE;
+ DataView* view = NULL;
+ GeeIterator* _tmp6_ = NULL;
+ gpointer _tmp7_ = NULL;
+ MediaSource* source = NULL;
+ DataView* _tmp8_ = NULL;
+ DataSource* _tmp9_ = NULL;
+ TagRow* _tmp10_ = NULL;
+ GeeSet* _tmp11_ = NULL;
+ MediaSource* _tmp12_ = NULL;
+ gchar* _tmp13_ = NULL;
+ gchar* _tmp14_ = NULL;
+ gboolean _tmp15_ = FALSE;
+ gboolean _tmp16_ = FALSE;
+ gboolean is_added = FALSE;
+ GeeCollection* _tmp25_ = NULL;
+ MediaSource* _tmp26_ = NULL;
+ gboolean _tmp27_ = FALSE;
+ gboolean _tmp28_ = FALSE;
+#line 1123 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = _view_it;
+#line 1123 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = gee_iterator_next (_tmp4_);
+#line 1123 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp5_) {
+#line 1123 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 8786 "Tag.c"
+ }
+#line 1123 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = _view_it;
+#line 1123 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = gee_iterator_get (_tmp6_);
+#line 1123 "/home/jens/Source/shotwell/src/Tag.vala"
+ view = (DataView*) _tmp7_;
+#line 1124 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = view;
+#line 1124 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = data_view_get_source (_tmp8_);
+#line 1124 "/home/jens/Source/shotwell/src/Tag.vala"
+ source = G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, TYPE_MEDIA_SOURCE, MediaSource);
+#line 1128 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = self->priv->row;
+#line 1128 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = _tmp10_->source_id_list;
+#line 1128 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = source;
+#line 1128 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = data_source_get_source_id (G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, TYPE_DATA_SOURCE, DataSource));
+#line 1128 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp14_ = _tmp13_;
+#line 1128 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp15_ = gee_collection_contains (G_TYPE_CHECK_INSTANCE_CAST (_tmp11_, GEE_TYPE_COLLECTION, GeeCollection), _tmp14_);
+#line 1128 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp16_ = !_tmp15_;
+#line 1128 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp14_);
+#line 1128 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp16_) {
+#line 8818 "Tag.c"
+ gboolean is_added = FALSE;
+ TagRow* _tmp17_ = NULL;
+ GeeSet* _tmp18_ = NULL;
+ MediaSource* _tmp19_ = NULL;
+ gchar* _tmp20_ = NULL;
+ gchar* _tmp21_ = NULL;
+ gboolean _tmp22_ = FALSE;
+ gboolean _tmp23_ = FALSE;
+ gboolean _tmp24_ = FALSE;
+#line 1129 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp17_ = self->priv->row;
+#line 1129 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp18_ = _tmp17_->source_id_list;
+#line 1129 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp19_ = source;
+#line 1129 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp20_ = data_source_get_source_id (G_TYPE_CHECK_INSTANCE_CAST (_tmp19_, TYPE_DATA_SOURCE, DataSource));
+#line 1129 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp21_ = _tmp20_;
+#line 1129 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp22_ = gee_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp18_, GEE_TYPE_COLLECTION, GeeCollection), _tmp21_);
+#line 1129 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp23_ = _tmp22_;
+#line 1129 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp21_);
+#line 1129 "/home/jens/Source/shotwell/src/Tag.vala"
+ is_added = _tmp23_;
+#line 1130 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp24_ = is_added;
+#line 1130 "/home/jens/Source/shotwell/src/Tag.vala"
+ _vala_assert (_tmp24_, "is_added");
+#line 8850 "Tag.c"
+ }
+#line 1133 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp25_ = added_sources;
+#line 1133 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp26_ = source;
+#line 1133 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp27_ = gee_collection_add (_tmp25_, _tmp26_);
+#line 1133 "/home/jens/Source/shotwell/src/Tag.vala"
+ is_added = _tmp27_;
+#line 1134 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp28_ = is_added;
+#line 1134 "/home/jens/Source/shotwell/src/Tag.vala"
+ _vala_assert (_tmp28_, "is_added");
+#line 1123 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (source);
+#line 1123 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (view);
+#line 8868 "Tag.c"
+ }
+#line 1123 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_view_it);
+#line 8872 "Tag.c"
+ }
+ }
+#line 1138 "/home/jens/Source/shotwell/src/Tag.vala"
+ removed_sources = NULL;
+#line 1139 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp29_ = removed;
+#line 1139 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp29_ != NULL) {
+#line 8881 "Tag.c"
+ GeeArrayList* _tmp30_ = NULL;
+#line 1140 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp30_ = gee_array_list_new (TYPE_MEDIA_SOURCE, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 1140 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (removed_sources);
+#line 1140 "/home/jens/Source/shotwell/src/Tag.vala"
+ removed_sources = G_TYPE_CHECK_INSTANCE_CAST (_tmp30_, GEE_TYPE_COLLECTION, GeeCollection);
+#line 8889 "Tag.c"
+ {
+ GeeIterator* _view_it = NULL;
+ GeeIterable* _tmp31_ = NULL;
+ GeeIterator* _tmp32_ = NULL;
+#line 1141 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp31_ = removed;
+#line 1141 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp32_ = gee_iterable_iterator (_tmp31_);
+#line 1141 "/home/jens/Source/shotwell/src/Tag.vala"
+ _view_it = _tmp32_;
+#line 1141 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 8902 "Tag.c"
+ GeeIterator* _tmp33_ = NULL;
+ gboolean _tmp34_ = FALSE;
+ DataView* view = NULL;
+ GeeIterator* _tmp35_ = NULL;
+ gpointer _tmp36_ = NULL;
+ MediaSource* source = NULL;
+ DataView* _tmp37_ = NULL;
+ DataSource* _tmp38_ = NULL;
+ gboolean is_removed = FALSE;
+ TagRow* _tmp39_ = NULL;
+ GeeSet* _tmp40_ = NULL;
+ MediaSource* _tmp41_ = NULL;
+ gchar* _tmp42_ = NULL;
+ gchar* _tmp43_ = NULL;
+ gboolean _tmp44_ = FALSE;
+ gboolean _tmp45_ = FALSE;
+ gboolean _tmp46_ = FALSE;
+ gboolean is_added = FALSE;
+ GeeCollection* _tmp47_ = NULL;
+ MediaSource* _tmp48_ = NULL;
+ gboolean _tmp49_ = FALSE;
+ gboolean _tmp50_ = FALSE;
+#line 1141 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp33_ = _view_it;
+#line 1141 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp34_ = gee_iterator_next (_tmp33_);
+#line 1141 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp34_) {
+#line 1141 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 8933 "Tag.c"
+ }
+#line 1141 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp35_ = _view_it;
+#line 1141 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp36_ = gee_iterator_get (_tmp35_);
+#line 1141 "/home/jens/Source/shotwell/src/Tag.vala"
+ view = (DataView*) _tmp36_;
+#line 1142 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp37_ = view;
+#line 1142 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp38_ = data_view_get_source (_tmp37_);
+#line 1142 "/home/jens/Source/shotwell/src/Tag.vala"
+ source = G_TYPE_CHECK_INSTANCE_CAST (_tmp38_, TYPE_MEDIA_SOURCE, MediaSource);
+#line 1144 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp39_ = self->priv->row;
+#line 1144 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp40_ = _tmp39_->source_id_list;
+#line 1144 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp41_ = source;
+#line 1144 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp42_ = data_source_get_source_id (G_TYPE_CHECK_INSTANCE_CAST (_tmp41_, TYPE_DATA_SOURCE, DataSource));
+#line 1144 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp43_ = _tmp42_;
+#line 1144 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp44_ = gee_collection_remove (G_TYPE_CHECK_INSTANCE_CAST (_tmp40_, GEE_TYPE_COLLECTION, GeeCollection), _tmp43_);
+#line 1144 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp45_ = _tmp44_;
+#line 1144 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (_tmp43_);
+#line 1144 "/home/jens/Source/shotwell/src/Tag.vala"
+ is_removed = _tmp45_;
+#line 1145 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp46_ = is_removed;
+#line 1145 "/home/jens/Source/shotwell/src/Tag.vala"
+ _vala_assert (_tmp46_, "is_removed");
+#line 1147 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp47_ = removed_sources;
+#line 1147 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp48_ = source;
+#line 1147 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp49_ = gee_collection_add (_tmp47_, _tmp48_);
+#line 1147 "/home/jens/Source/shotwell/src/Tag.vala"
+ is_added = _tmp49_;
+#line 1148 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp50_ = is_added;
+#line 1148 "/home/jens/Source/shotwell/src/Tag.vala"
+ _vala_assert (_tmp50_, "is_added");
+#line 1141 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (source);
+#line 1141 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (view);
+#line 8985 "Tag.c"
+ }
+#line 1141 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_view_it);
+#line 8989 "Tag.c"
+ }
+ }
+ {
+ TagTable* _tmp51_ = NULL;
+ TagTable* _tmp52_ = NULL;
+ TagRow* _tmp53_ = NULL;
+ TagID _tmp54_ = {0};
+ TagRow* _tmp55_ = NULL;
+ GeeSet* _tmp56_ = NULL;
+#line 1153 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp51_ = tag_table_get_instance ();
+#line 1153 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp52_ = _tmp51_;
+#line 1153 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp53_ = self->priv->row;
+#line 1153 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp54_ = _tmp53_->tag_id;
+#line 1153 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp55_ = self->priv->row;
+#line 1153 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp56_ = _tmp55_->source_id_list;
+#line 1153 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_table_set_tagged_sources (_tmp52_, &_tmp54_, G_TYPE_CHECK_INSTANCE_CAST (_tmp56_, GEE_TYPE_COLLECTION, GeeCollection), &_inner_error_);
+#line 1153 "/home/jens/Source/shotwell/src/Tag.vala"
+ _database_table_unref0 (_tmp52_);
+#line 1153 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (G_UNLIKELY (_inner_error_ != NULL)) {
+#line 1153 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_inner_error_->domain == DATABASE_ERROR) {
+#line 9019 "Tag.c"
+ goto __catch465_database_error;
+ }
+#line 1153 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (removed_sources);
+#line 1153 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (added_sources);
+#line 1153 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+#line 1153 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_clear_error (&_inner_error_);
+#line 1153 "/home/jens/Source/shotwell/src/Tag.vala"
+ return;
+#line 9032 "Tag.c"
+ }
+ }
+ goto __finally465;
+ __catch465_database_error:
+ {
+ GError* err = NULL;
+ GError* _tmp57_ = NULL;
+#line 1152 "/home/jens/Source/shotwell/src/Tag.vala"
+ err = _inner_error_;
+#line 1152 "/home/jens/Source/shotwell/src/Tag.vala"
+ _inner_error_ = NULL;
+#line 1155 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp57_ = err;
+#line 1155 "/home/jens/Source/shotwell/src/Tag.vala"
+ app_window_database_error (_tmp57_);
+#line 1152 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_error_free0 (err);
+#line 9050 "Tag.c"
+ }
+ __finally465:
+#line 1152 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (G_UNLIKELY (_inner_error_ != NULL)) {
+#line 1152 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (removed_sources);
+#line 1152 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (added_sources);
+#line 1152 "/home/jens/Source/shotwell/src/Tag.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 1152 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_clear_error (&_inner_error_);
+#line 1152 "/home/jens/Source/shotwell/src/Tag.vala"
+ return;
+#line 9065 "Tag.c"
+ }
+#line 1159 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp58_ = added_sources;
+#line 1159 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp58_ != NULL) {
+#line 9071 "Tag.c"
+ TagSourceCollection* _tmp59_ = NULL;
+ GeeCollection* _tmp60_ = NULL;
+ gboolean _tmp61_ = FALSE;
+#line 1160 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp59_ = tag_global;
+#line 1160 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp60_ = added_sources;
+#line 1160 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp61_ = self->priv->relinking;
+#line 1160 "/home/jens/Source/shotwell/src/Tag.vala"
+ container_source_collection_notify_container_contents_added (G_TYPE_CHECK_INSTANCE_CAST (_tmp59_, TYPE_CONTAINER_SOURCE_COLLECTION, ContainerSourceCollection), G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_CONTAINER_SOURCE, ContainerSource), _tmp60_, _tmp61_);
+#line 9083 "Tag.c"
+ }
+#line 1162 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp62_ = removed_sources;
+#line 1162 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp62_ != NULL) {
+#line 9089 "Tag.c"
+ TagSourceCollection* _tmp63_ = NULL;
+ GeeCollection* _tmp64_ = NULL;
+ gboolean _tmp65_ = FALSE;
+#line 1163 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp63_ = tag_global;
+#line 1163 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp64_ = removed_sources;
+#line 1163 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp65_ = self->priv->unlinking;
+#line 1163 "/home/jens/Source/shotwell/src/Tag.vala"
+ container_source_collection_notify_container_contents_removed (G_TYPE_CHECK_INSTANCE_CAST (_tmp63_, TYPE_CONTAINER_SOURCE_COLLECTION, ContainerSourceCollection), G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_CONTAINER_SOURCE, ContainerSource), _tmp64_, _tmp65_);
+#line 9101 "Tag.c"
+ }
+#line 1165 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp67_ = added_sources;
+#line 1165 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp67_ != NULL) {
+#line 1165 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp66_ = TRUE;
+#line 9109 "Tag.c"
+ } else {
+ GeeCollection* _tmp68_ = NULL;
+#line 1165 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp68_ = removed_sources;
+#line 1165 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp66_ = _tmp68_ != NULL;
+#line 9116 "Tag.c"
+ }
+#line 1165 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp66_) {
+#line 9120 "Tag.c"
+ TagSourceCollection* _tmp69_ = NULL;
+ GeeCollection* _tmp70_ = NULL;
+ gboolean _tmp71_ = FALSE;
+ GeeCollection* _tmp72_ = NULL;
+ gboolean _tmp73_ = FALSE;
+#line 1166 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp69_ = tag_global;
+#line 1166 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp70_ = added_sources;
+#line 1166 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp71_ = self->priv->relinking;
+#line 1166 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp72_ = removed_sources;
+#line 1166 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp73_ = self->priv->unlinking;
+#line 1166 "/home/jens/Source/shotwell/src/Tag.vala"
+ container_source_collection_notify_container_contents_altered (G_TYPE_CHECK_INSTANCE_CAST (_tmp69_, TYPE_CONTAINER_SOURCE_COLLECTION, ContainerSourceCollection), G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_CONTAINER_SOURCE, ContainerSource), _tmp70_, _tmp71_, _tmp72_, _tmp73_);
+#line 9138 "Tag.c"
+ }
+#line 1118 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (removed_sources);
+#line 1118 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (added_sources);
+#line 9144 "Tag.c"
+}
+
+
+static void tag_on_sources_destroyed (Tag* self, GeeCollection* sources) {
+ GeeCollection* _tmp0_ = NULL;
+ GeeMultiMap* _tmp1_ = NULL;
+ GeeMultiMap* _tmp2_ = NULL;
+#line 1171 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (IS_TAG (self));
+#line 1171 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (GEE_IS_COLLECTION (sources));
+#line 1172 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = sources;
+#line 1172 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = tag_detach_many (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_COLLECTION, GeeCollection));
+#line 1172 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = _tmp1_;
+#line 1172 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp2_);
+#line 9164 "Tag.c"
+}
+
+
+static void tag_real_destroy (DataSource* base) {
+ Tag * self;
+ ViewCollection* _tmp0_ = NULL;
+ gint _tmp1_ = 0;
+ GError * _inner_error_ = NULL;
+#line 1175 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_TAG, Tag);
+#line 1179 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = self->priv->media_views;
+#line 1179 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = data_collection_get_count (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_DATA_COLLECTION, DataCollection));
+#line 1179 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp1_ > 0) {
+#line 9181 "Tag.c"
+ ViewCollection* _tmp2_ = NULL;
+ guint _tmp3_ = 0U;
+ GeeArrayList* removed = NULL;
+ GeeArrayList* _tmp4_ = NULL;
+ GeeArrayList* _tmp5_ = NULL;
+ ViewCollection* _tmp6_ = NULL;
+ GeeCollection* _tmp7_ = NULL;
+ GeeCollection* _tmp8_ = NULL;
+ ViewCollection* _tmp9_ = NULL;
+ TagSourceCollection* _tmp10_ = NULL;
+ GeeArrayList* _tmp11_ = NULL;
+ TagSourceCollection* _tmp12_ = NULL;
+ GeeArrayList* _tmp13_ = NULL;
+ ViewCollection* _tmp14_ = NULL;
+#line 1180 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = self->priv->media_views;
+#line 1180 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_signal_parse_name ("contents-altered", TYPE_DATA_COLLECTION, &_tmp3_, NULL, FALSE);
+#line 1180 "/home/jens/Source/shotwell/src/Tag.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) _tag_on_media_views_contents_altered_data_collection_contents_altered, self);
+#line 1182 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = gee_array_list_new (TYPE_MEDIA_SOURCE, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL);
+#line 1182 "/home/jens/Source/shotwell/src/Tag.vala"
+ removed = _tmp4_;
+#line 1183 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = removed;
+#line 1183 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = self->priv->media_views;
+#line 1183 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = view_collection_get_sources (_tmp6_);
+#line 1183 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, GEE_TYPE_COLLECTION, GeeCollection);
+#line 1183 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_array_list_add_all (_tmp5_, _tmp8_);
+#line 1183 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp8_);
+#line 1185 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = self->priv->media_views;
+#line 1185 "/home/jens/Source/shotwell/src/Tag.vala"
+ data_collection_clear (G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, TYPE_DATA_COLLECTION, DataCollection));
+#line 1187 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = tag_global;
+#line 1187 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = removed;
+#line 1187 "/home/jens/Source/shotwell/src/Tag.vala"
+ container_source_collection_notify_container_contents_removed (G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, TYPE_CONTAINER_SOURCE_COLLECTION, ContainerSourceCollection), G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_CONTAINER_SOURCE, ContainerSource), G_TYPE_CHECK_INSTANCE_CAST (_tmp11_, GEE_TYPE_COLLECTION, GeeCollection), FALSE);
+#line 1188 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = tag_global;
+#line 1188 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = removed;
+#line 1188 "/home/jens/Source/shotwell/src/Tag.vala"
+ container_source_collection_notify_container_contents_altered (G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, TYPE_CONTAINER_SOURCE_COLLECTION, ContainerSourceCollection), G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_CONTAINER_SOURCE, ContainerSource), NULL, FALSE, G_TYPE_CHECK_INSTANCE_CAST (_tmp13_, GEE_TYPE_COLLECTION, GeeCollection), FALSE);
+#line 1190 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp14_ = self->priv->media_views;
+#line 1190 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_signal_connect_object (G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, TYPE_DATA_COLLECTION, DataCollection), "contents-altered", (GCallback) _tag_on_media_views_contents_altered_data_collection_contents_altered, self, 0);
+#line 1179 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (removed);
+#line 9240 "Tag.c"
+ }
+ {
+ TagTable* _tmp15_ = NULL;
+ TagTable* _tmp16_ = NULL;
+ TagRow* _tmp17_ = NULL;
+ TagID _tmp18_ = {0};
+#line 1194 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp15_ = tag_table_get_instance ();
+#line 1194 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp16_ = _tmp15_;
+#line 1194 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp17_ = self->priv->row;
+#line 1194 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp18_ = _tmp17_->tag_id;
+#line 1194 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_table_remove (_tmp16_, &_tmp18_, &_inner_error_);
+#line 1194 "/home/jens/Source/shotwell/src/Tag.vala"
+ _database_table_unref0 (_tmp16_);
+#line 1194 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (G_UNLIKELY (_inner_error_ != NULL)) {
+#line 1194 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_inner_error_->domain == DATABASE_ERROR) {
+#line 9263 "Tag.c"
+ goto __catch466_database_error;
+ }
+#line 1194 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+#line 1194 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_clear_error (&_inner_error_);
+#line 1194 "/home/jens/Source/shotwell/src/Tag.vala"
+ return;
+#line 9272 "Tag.c"
+ }
+ }
+ goto __finally466;
+ __catch466_database_error:
+ {
+ GError* err = NULL;
+ GError* _tmp19_ = NULL;
+#line 1193 "/home/jens/Source/shotwell/src/Tag.vala"
+ err = _inner_error_;
+#line 1193 "/home/jens/Source/shotwell/src/Tag.vala"
+ _inner_error_ = NULL;
+#line 1196 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp19_ = err;
+#line 1196 "/home/jens/Source/shotwell/src/Tag.vala"
+ app_window_database_error (_tmp19_);
+#line 1193 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_error_free0 (err);
+#line 9290 "Tag.c"
+ }
+ __finally466:
+#line 1193 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (G_UNLIKELY (_inner_error_ != NULL)) {
+#line 1193 "/home/jens/Source/shotwell/src/Tag.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 1193 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_clear_error (&_inner_error_);
+#line 1193 "/home/jens/Source/shotwell/src/Tag.vala"
+ return;
+#line 9301 "Tag.c"
+ }
+#line 1199 "/home/jens/Source/shotwell/src/Tag.vala"
+ DATA_SOURCE_CLASS (tag_parent_class)->destroy (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_DATA_SOURCE, DataSource));
+#line 9305 "Tag.c"
+}
+
+
+static void _tag_tag_snapshot_on_source_destroyed_source_collection_item_destroyed (SourceCollection* _sender, DataSource* source, gpointer self) {
+#line 292 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_tag_snapshot_on_source_destroyed ((TagTagSnapshot*) self, source);
+#line 9312 "Tag.c"
+}
+
+
+static TagTagSnapshot* tag_tag_snapshot_construct (GType object_type, Tag* tag) {
+ TagTagSnapshot* self = NULL;
+ Tag* _tmp0_ = NULL;
+ TagRow* _tmp1_ = NULL;
+ TagRow* _tmp2_ = NULL;
+ LibraryPhotoSourceCollection* _tmp14_ = NULL;
+ VideoSourceCollection* _tmp15_ = NULL;
+#line 278 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_TAG (tag), NULL);
+#line 278 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = (TagTagSnapshot*) source_snapshot_construct (object_type);
+#line 280 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = tag;
+#line 280 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = _tmp0_->priv->row;
+#line 280 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = _tag_row_ref0 (_tmp1_);
+#line 280 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tag_row_unref0 (self->priv->row);
+#line 280 "/home/jens/Source/shotwell/src/Tag.vala"
+ self->priv->row = _tmp2_;
+#line 9337 "Tag.c"
+ {
+ GeeIterator* _source_it = NULL;
+ Tag* _tmp3_ = NULL;
+ GeeCollection* _tmp4_ = NULL;
+ GeeCollection* _tmp5_ = NULL;
+ GeeIterator* _tmp6_ = NULL;
+ GeeIterator* _tmp7_ = NULL;
+#line 284 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = tag;
+#line 284 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = tag_get_sources (_tmp3_);
+#line 284 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = _tmp4_;
+#line 284 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp6_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp5_, GEE_TYPE_ITERABLE, GeeIterable));
+#line 284 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp7_ = _tmp6_;
+#line 284 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_tmp5_);
+#line 284 "/home/jens/Source/shotwell/src/Tag.vala"
+ _source_it = _tmp7_;
+#line 284 "/home/jens/Source/shotwell/src/Tag.vala"
+ while (TRUE) {
+#line 9361 "Tag.c"
+ GeeIterator* _tmp8_ = NULL;
+ gboolean _tmp9_ = FALSE;
+ MediaSource* source = NULL;
+ GeeIterator* _tmp10_ = NULL;
+ gpointer _tmp11_ = NULL;
+ GeeHashSet* _tmp12_ = NULL;
+ MediaSource* _tmp13_ = NULL;
+#line 284 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp8_ = _source_it;
+#line 284 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp9_ = gee_iterator_next (_tmp8_);
+#line 284 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (!_tmp9_) {
+#line 284 "/home/jens/Source/shotwell/src/Tag.vala"
+ break;
+#line 9377 "Tag.c"
+ }
+#line 284 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp10_ = _source_it;
+#line 284 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp11_ = gee_iterator_get (_tmp10_);
+#line 284 "/home/jens/Source/shotwell/src/Tag.vala"
+ source = (MediaSource*) _tmp11_;
+#line 285 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp12_ = self->priv->sources;
+#line 285 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp13_ = source;
+#line 285 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_abstract_collection_add (G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), _tmp13_);
+#line 284 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (source);
+#line 9393 "Tag.c"
+ }
+#line 284 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (_source_it);
+#line 9397 "Tag.c"
+ }
+#line 287 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp14_ = library_photo_global;
+#line 287 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_signal_connect (G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, TYPE_SOURCE_COLLECTION, SourceCollection), "item-destroyed", (GCallback) _tag_tag_snapshot_on_source_destroyed_source_collection_item_destroyed, self);
+#line 288 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp15_ = video_global;
+#line 288 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_signal_connect (G_TYPE_CHECK_INSTANCE_CAST (_tmp15_, TYPE_SOURCE_COLLECTION, SourceCollection), "item-destroyed", (GCallback) _tag_tag_snapshot_on_source_destroyed_source_collection_item_destroyed, self);
+#line 278 "/home/jens/Source/shotwell/src/Tag.vala"
+ return self;
+#line 9409 "Tag.c"
+}
+
+
+static TagTagSnapshot* tag_tag_snapshot_new (Tag* tag) {
+#line 278 "/home/jens/Source/shotwell/src/Tag.vala"
+ return tag_tag_snapshot_construct (TAG_TYPE_TAG_SNAPSHOT, tag);
+#line 9416 "Tag.c"
+}
+
+
+static TagRow* tag_tag_snapshot_get_row (TagTagSnapshot* self) {
+ TagRow* result = NULL;
+ TagRow* _tmp0_ = NULL;
+ TagRow* _tmp1_ = NULL;
+#line 296 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (TAG_IS_TAG_SNAPSHOT (self), NULL);
+#line 297 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = self->priv->row;
+#line 297 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = _tag_row_ref0 (_tmp0_);
+#line 297 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = _tmp1_;
+#line 297 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 9434 "Tag.c"
+}
+
+
+static void tag_tag_snapshot_real_notify_broken (SourceSnapshot* base) {
+ TagTagSnapshot * self;
+ TagRow* _tmp0_ = NULL;
+ GeeHashSet* _tmp1_ = NULL;
+#line 300 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TAG_TYPE_TAG_SNAPSHOT, TagTagSnapshot);
+#line 301 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = tag_row_new ();
+#line 301 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tag_row_unref0 (self->priv->row);
+#line 301 "/home/jens/Source/shotwell/src/Tag.vala"
+ self->priv->row = _tmp0_;
+#line 302 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = self->priv->sources;
+#line 302 "/home/jens/Source/shotwell/src/Tag.vala"
+ gee_abstract_collection_clear (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection));
+#line 304 "/home/jens/Source/shotwell/src/Tag.vala"
+ SOURCE_SNAPSHOT_CLASS (tag_tag_snapshot_parent_class)->notify_broken (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_SOURCE_SNAPSHOT, SourceSnapshot));
+#line 9456 "Tag.c"
+}
+
+
+static void tag_tag_snapshot_on_source_destroyed (TagTagSnapshot* self, DataSource* source) {
+ GeeHashSet* _tmp0_ = NULL;
+ DataSource* _tmp1_ = NULL;
+ gboolean _tmp2_ = FALSE;
+#line 307 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (TAG_IS_TAG_SNAPSHOT (self));
+#line 307 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_if_fail (IS_DATA_SOURCE (source));
+#line 308 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = self->priv->sources;
+#line 308 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = source;
+#line 308 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = gee_abstract_collection_contains (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_ABSTRACT_COLLECTION, GeeAbstractCollection), G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, TYPE_MEDIA_SOURCE, MediaSource));
+#line 308 "/home/jens/Source/shotwell/src/Tag.vala"
+ if (_tmp2_) {
+#line 309 "/home/jens/Source/shotwell/src/Tag.vala"
+ source_snapshot_notify_broken (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_SOURCE_SNAPSHOT, SourceSnapshot));
+#line 9478 "Tag.c"
+ }
+}
+
+
+static void tag_tag_snapshot_class_init (TagTagSnapshotClass * klass) {
+#line 274 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_tag_snapshot_parent_class = g_type_class_peek_parent (klass);
+#line 274 "/home/jens/Source/shotwell/src/Tag.vala"
+ ((SourceSnapshotClass *) klass)->finalize = tag_tag_snapshot_finalize;
+#line 274 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_type_class_add_private (klass, sizeof (TagTagSnapshotPrivate));
+#line 274 "/home/jens/Source/shotwell/src/Tag.vala"
+ ((SourceSnapshotClass *) klass)->notify_broken = tag_tag_snapshot_real_notify_broken;
+#line 9492 "Tag.c"
+}
+
+
+static void tag_tag_snapshot_instance_init (TagTagSnapshot * self) {
+ GeeHashSet* _tmp0_ = NULL;
+#line 274 "/home/jens/Source/shotwell/src/Tag.vala"
+ self->priv = TAG_TAG_SNAPSHOT_GET_PRIVATE (self);
+#line 276 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = gee_hash_set_new (TYPE_MEDIA_SOURCE, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL, NULL, NULL, NULL, NULL);
+#line 276 "/home/jens/Source/shotwell/src/Tag.vala"
+ self->priv->sources = _tmp0_;
+#line 9504 "Tag.c"
+}
+
+
+static void tag_tag_snapshot_finalize (SourceSnapshot* obj) {
+ TagTagSnapshot * self;
+ LibraryPhotoSourceCollection* _tmp0_ = NULL;
+ guint _tmp1_ = 0U;
+ VideoSourceCollection* _tmp2_ = NULL;
+ guint _tmp3_ = 0U;
+#line 274 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, TAG_TYPE_TAG_SNAPSHOT, TagTagSnapshot);
+#line 292 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = library_photo_global;
+#line 292 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_signal_parse_name ("item-destroyed", TYPE_SOURCE_COLLECTION, &_tmp1_, NULL, FALSE);
+#line 292 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_signal_handlers_disconnect_matched (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_SOURCE_COLLECTION, SourceCollection), G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp1_, 0, NULL, (GCallback) _tag_tag_snapshot_on_source_destroyed_source_collection_item_destroyed, self);
+#line 293 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = video_global;
+#line 293 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_signal_parse_name ("item-destroyed", TYPE_SOURCE_COLLECTION, &_tmp3_, NULL, FALSE);
+#line 293 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_signal_handlers_disconnect_matched (G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, TYPE_SOURCE_COLLECTION, SourceCollection), G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp3_, 0, NULL, (GCallback) _tag_tag_snapshot_on_source_destroyed_source_collection_item_destroyed, self);
+#line 275 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tag_row_unref0 (self->priv->row);
+#line 276 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_object_unref0 (self->priv->sources);
+#line 274 "/home/jens/Source/shotwell/src/Tag.vala"
+ SOURCE_SNAPSHOT_CLASS (tag_tag_snapshot_parent_class)->finalize (obj);
+#line 9534 "Tag.c"
+}
+
+
+static GType tag_tag_snapshot_get_type (void) {
+ static volatile gsize tag_tag_snapshot_type_id__volatile = 0;
+ if (g_once_init_enter (&tag_tag_snapshot_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (TagTagSnapshotClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) tag_tag_snapshot_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (TagTagSnapshot), 0, (GInstanceInitFunc) tag_tag_snapshot_instance_init, NULL };
+ GType tag_tag_snapshot_type_id;
+ tag_tag_snapshot_type_id = g_type_register_static (TYPE_SOURCE_SNAPSHOT, "TagTagSnapshot", &g_define_type_info, 0);
+ g_once_init_leave (&tag_tag_snapshot_type_id__volatile, tag_tag_snapshot_type_id);
+ }
+ return tag_tag_snapshot_type_id__volatile;
+}
+
+
+static TagTagProxy* tag_tag_proxy_construct (GType object_type, Tag* tag) {
+ TagTagProxy* self = NULL;
+ Tag* _tmp0_ = NULL;
+#line 314 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_TAG (tag), NULL);
+#line 315 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = tag;
+#line 315 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = (TagTagProxy*) source_proxy_construct (object_type, G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_DATA_SOURCE, DataSource));
+#line 314 "/home/jens/Source/shotwell/src/Tag.vala"
+ return self;
+#line 9561 "Tag.c"
+}
+
+
+static TagTagProxy* tag_tag_proxy_new (Tag* tag) {
+#line 314 "/home/jens/Source/shotwell/src/Tag.vala"
+ return tag_tag_proxy_construct (TAG_TYPE_TAG_PROXY, tag);
+#line 9568 "Tag.c"
+}
+
+
+static DataSource* tag_tag_proxy_real_reconstitute (SourceProxy* base, gint64 object_id, SourceSnapshot* snapshot) {
+ TagTagProxy * self;
+ DataSource* result = NULL;
+ gint64 _tmp0_ = 0LL;
+ SourceSnapshot* _tmp1_ = NULL;
+ TagRow* _tmp2_ = NULL;
+ TagRow* _tmp3_ = NULL;
+ Tag* _tmp4_ = NULL;
+ DataSource* _tmp5_ = NULL;
+#line 318 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (base, TAG_TYPE_TAG_PROXY, TagTagProxy);
+#line 318 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_return_val_if_fail (IS_SOURCE_SNAPSHOT (snapshot), NULL);
+#line 319 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = object_id;
+#line 319 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp1_ = snapshot;
+#line 319 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = tag_tag_snapshot_get_row (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, TAG_TYPE_TAG_SNAPSHOT, TagTagSnapshot));
+#line 319 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp3_ = _tmp2_;
+#line 319 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = tag_reconstitute (_tmp0_, _tmp3_);
+#line 319 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp5_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, TYPE_DATA_SOURCE, DataSource);
+#line 319 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tag_row_unref0 (_tmp3_);
+#line 319 "/home/jens/Source/shotwell/src/Tag.vala"
+ result = _tmp5_;
+#line 319 "/home/jens/Source/shotwell/src/Tag.vala"
+ return result;
+#line 9603 "Tag.c"
+}
+
+
+static void tag_tag_proxy_class_init (TagTagProxyClass * klass) {
+#line 313 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_tag_proxy_parent_class = g_type_class_peek_parent (klass);
+#line 313 "/home/jens/Source/shotwell/src/Tag.vala"
+ ((SourceProxyClass *) klass)->reconstitute = tag_tag_proxy_real_reconstitute;
+#line 9612 "Tag.c"
+}
+
+
+static void tag_tag_proxy_instance_init (TagTagProxy * self) {
+}
+
+
+static GType tag_tag_proxy_get_type (void) {
+ static volatile gsize tag_tag_proxy_type_id__volatile = 0;
+ if (g_once_init_enter (&tag_tag_proxy_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (TagTagProxyClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) tag_tag_proxy_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (TagTagProxy), 0, (GInstanceInitFunc) tag_tag_proxy_instance_init, NULL };
+ GType tag_tag_proxy_type_id;
+ tag_tag_proxy_type_id = g_type_register_static (TYPE_SOURCE_PROXY, "TagTagProxy", &g_define_type_info, 0);
+ g_once_init_leave (&tag_tag_proxy_type_id__volatile, tag_tag_proxy_type_id);
+ }
+ return tag_tag_proxy_type_id__volatile;
+}
+
+
+static void tag_class_init (TagClass * klass) {
+#line 269 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_parent_class = g_type_class_peek_parent (klass);
+#line 269 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_type_class_add_private (klass, sizeof (TagPrivate));
+#line 269 "/home/jens/Source/shotwell/src/Tag.vala"
+ ((DataSourceClass *) klass)->get_typename = tag_real_get_typename;
+#line 269 "/home/jens/Source/shotwell/src/Tag.vala"
+ ((DataSourceClass *) klass)->get_instance_id = tag_real_get_instance_id;
+#line 269 "/home/jens/Source/shotwell/src/Tag.vala"
+ ((DataObjectClass *) klass)->get_name = tag_real_get_name;
+#line 269 "/home/jens/Source/shotwell/src/Tag.vala"
+ ((DataObjectClass *) klass)->to_string = tag_real_to_string;
+#line 269 "/home/jens/Source/shotwell/src/Tag.vala"
+ ((DataSourceClass *) klass)->equals = tag_real_equals;
+#line 269 "/home/jens/Source/shotwell/src/Tag.vala"
+ ((DataSourceClass *) klass)->save_snapshot = tag_real_save_snapshot;
+#line 269 "/home/jens/Source/shotwell/src/Tag.vala"
+ ((DataSourceClass *) klass)->destroy = tag_real_destroy;
+#line 269 "/home/jens/Source/shotwell/src/Tag.vala"
+ G_OBJECT_CLASS (klass)->finalize = tag_finalize;
+#line 9653 "Tag.c"
+}
+
+
+static void tag_container_source_interface_init (ContainerSourceIface * iface) {
+#line 269 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_container_source_parent_iface = g_type_interface_peek_parent (iface);
+#line 269 "/home/jens/Source/shotwell/src/Tag.vala"
+ iface->has_links = (gboolean (*)(ContainerSource*)) tag_real_has_links;
+#line 269 "/home/jens/Source/shotwell/src/Tag.vala"
+ iface->get_backlink = (SourceBacklink* (*)(ContainerSource*)) tag_real_get_backlink;
+#line 269 "/home/jens/Source/shotwell/src/Tag.vala"
+ iface->break_link = (void (*)(ContainerSource*, DataSource*)) tag_real_break_link;
+#line 269 "/home/jens/Source/shotwell/src/Tag.vala"
+ iface->break_link_many = (void (*)(ContainerSource*, GeeCollection*)) tag_real_break_link_many;
+#line 269 "/home/jens/Source/shotwell/src/Tag.vala"
+ iface->establish_link = (void (*)(ContainerSource*, DataSource*)) tag_real_establish_link;
+#line 269 "/home/jens/Source/shotwell/src/Tag.vala"
+ iface->establish_link_many = (void (*)(ContainerSource*, GeeCollection*)) tag_real_establish_link_many;
+#line 9672 "Tag.c"
+}
+
+
+static void tag_proxyable_interface_init (ProxyableIface * iface) {
+#line 269 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_proxyable_parent_iface = g_type_interface_peek_parent (iface);
+#line 269 "/home/jens/Source/shotwell/src/Tag.vala"
+ iface->get_proxy = (SourceProxy* (*)(Proxyable*)) tag_real_get_proxy;
+#line 9681 "Tag.c"
+}
+
+
+static void tag_indexable_interface_init (IndexableIface * iface) {
+#line 269 "/home/jens/Source/shotwell/src/Tag.vala"
+ tag_indexable_parent_iface = g_type_interface_peek_parent (iface);
+#line 269 "/home/jens/Source/shotwell/src/Tag.vala"
+ iface->get_indexable_keywords = (const gchar* (*)(Indexable*)) tag_real_get_indexable_keywords;
+#line 9690 "Tag.c"
+}
+
+
+static void tag_instance_init (Tag * self) {
+#line 269 "/home/jens/Source/shotwell/src/Tag.vala"
+ self->priv = TAG_GET_PRIVATE (self);
+#line 327 "/home/jens/Source/shotwell/src/Tag.vala"
+ self->priv->name_collation_key = NULL;
+#line 328 "/home/jens/Source/shotwell/src/Tag.vala"
+ self->priv->unlinking = FALSE;
+#line 329 "/home/jens/Source/shotwell/src/Tag.vala"
+ self->priv->relinking = FALSE;
+#line 330 "/home/jens/Source/shotwell/src/Tag.vala"
+ self->priv->indexable_keywords = NULL;
+#line 9705 "Tag.c"
+}
+
+
+static void tag_finalize (GObject* obj) {
+ Tag * self;
+ ViewCollection* _tmp0_ = NULL;
+ guint _tmp1_ = 0U;
+ LibraryPhotoSourceCollection* _tmp2_ = NULL;
+ guint _tmp3_ = 0U;
+ VideoSourceCollection* _tmp4_ = NULL;
+ guint _tmp5_ = 0U;
+#line 269 "/home/jens/Source/shotwell/src/Tag.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_TAG, Tag);
+#line 382 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp0_ = self->priv->media_views;
+#line 382 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_signal_parse_name ("contents-altered", TYPE_DATA_COLLECTION, &_tmp1_, NULL, FALSE);
+#line 382 "/home/jens/Source/shotwell/src/Tag.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) _tag_on_media_views_contents_altered_data_collection_contents_altered, self);
+#line 383 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp2_ = library_photo_global;
+#line 383 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_signal_parse_name ("items-destroyed", TYPE_SOURCE_COLLECTION, &_tmp3_, NULL, FALSE);
+#line 383 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_signal_handlers_disconnect_matched (G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, TYPE_SOURCE_COLLECTION, SourceCollection), G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp3_, 0, NULL, (GCallback) _tag_on_sources_destroyed_source_collection_items_destroyed, self);
+#line 384 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tmp4_ = video_global;
+#line 384 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_signal_parse_name ("items-destroyed", TYPE_SOURCE_COLLECTION, &_tmp5_, NULL, FALSE);
+#line 384 "/home/jens/Source/shotwell/src/Tag.vala"
+ g_signal_handlers_disconnect_matched (G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, TYPE_SOURCE_COLLECTION, SourceCollection), G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp5_, 0, NULL, (GCallback) _tag_on_sources_destroyed_source_collection_items_destroyed, self);
+#line 325 "/home/jens/Source/shotwell/src/Tag.vala"
+ _tag_row_unref0 (self->priv->row);
+#line 326 "/home/jens/Source/shotwell/src/Tag.vala"
+ _data_collection_unref0 (self->priv->media_views);
+#line 327 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (self->priv->name_collation_key);
+#line 330 "/home/jens/Source/shotwell/src/Tag.vala"
+ _g_free0 (self->priv->indexable_keywords);
+#line 269 "/home/jens/Source/shotwell/src/Tag.vala"
+ G_OBJECT_CLASS (tag_parent_class)->finalize (obj);
+#line 9747 "Tag.c"
+}
+
+
+GType tag_get_type (void) {
+ static volatile gsize tag_type_id__volatile = 0;
+ if (g_once_init_enter (&tag_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (TagClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) tag_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (Tag), 0, (GInstanceInitFunc) tag_instance_init, NULL };
+ static const GInterfaceInfo container_source_info = { (GInterfaceInitFunc) tag_container_source_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
+ static const GInterfaceInfo proxyable_info = { (GInterfaceInitFunc) tag_proxyable_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
+ static const GInterfaceInfo indexable_info = { (GInterfaceInitFunc) tag_indexable_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
+ GType tag_type_id;
+ tag_type_id = g_type_register_static (TYPE_DATA_SOURCE, "Tag", &g_define_type_info, 0);
+ g_type_add_interface_static (tag_type_id, TYPE_CONTAINER_SOURCE, &container_source_info);
+ g_type_add_interface_static (tag_type_id, TYPE_PROXYABLE, &proxyable_info);
+ g_type_add_interface_static (tag_type_id, TYPE_INDEXABLE, &indexable_info);
+ g_once_init_leave (&tag_type_id__volatile, tag_type_id);
+ }
+ return tag_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);
+}
+
+
+