static void photos_application_set_bg_download (GObject *source_object, GAsyncResult *res, gpointer user_data) { PhotosApplication *self = PHOTOS_APPLICATION (user_data); PhotosApplicationPrivate *priv = self->priv; PhotosBaseItem *item = PHOTOS_BASE_ITEM (source_object); GError *error; gchar *filename = NULL; error = NULL; filename = photos_base_item_download_finish (item, res, &error); if (error != NULL) { const gchar *uri; uri = photos_base_item_get_uri (item); g_warning ("Unable to extract the local filename for %s", uri); g_error_free (error); goto out; } g_settings_set_string (priv->settings, "picture-uri", filename); g_settings_set_enum (priv->settings, "picture-options", G_DESKTOP_BACKGROUND_STYLE_ZOOM); g_settings_set_enum (priv->settings, "color-shading-type", G_DESKTOP_BACKGROUND_SHADING_SOLID); g_settings_set_string (priv->settings, "primary-color", "#000000000000"); g_settings_set_string (priv->settings, "secondary-color", "#000000000000"); out: g_free (filename); g_object_unref (self); }
static gchar * photos_local_item_download (PhotosBaseItem *item, GCancellable *cancellable, GError **error) { const gchar *uri; gchar *path; uri = photos_base_item_get_uri (item); path = g_filename_from_uri (uri, NULL, error); return path; }
static gboolean photos_facebook_item_create_thumbnail (PhotosBaseItem *item, GCancellable *cancellable, GError **error) { GFBGraphPhoto *photo; const GFBGraphPhotoImage *thumbnail_image; gchar *local_path, *local_dir; GFile *local_file, *remote_file; gboolean ret_val = FALSE; photo = photos_facebook_get_gfbgraph_photo (item, cancellable, error); if (photo == NULL) { g_error ("Can't get the photo from the Facebook Graph\n"); } else { thumbnail_image = gfbgraph_photo_get_image_near_width (photo, photos_utils_get_icon_size ()); if (thumbnail_image == NULL) { g_error ("Can't get a photo size to create the thumbnail.\n"); } else { remote_file = g_file_new_for_uri (thumbnail_image->source); local_path = gnome_desktop_thumbnail_path_for_uri (photos_base_item_get_uri (item), GNOME_DESKTOP_THUMBNAIL_SIZE_NORMAL); local_file = g_file_new_for_path (local_path); local_dir = g_path_get_dirname (local_path); g_mkdir_with_parents (local_dir, 0700); g_debug ("Downloading %s from Facebook to %s", thumbnail_image->source, local_path); if (g_file_copy (remote_file, local_file, G_FILE_COPY_ALL_METADATA | G_FILE_COPY_OVERWRITE, cancellable, NULL, NULL, error)) ret_val = TRUE; g_free (local_path); g_free (local_dir); g_clear_object (&local_file); g_clear_object (&remote_file); } } return ret_val; }
static gboolean photos_local_item_create_thumbnail (PhotosBaseItem *item, GCancellable *cancellable, GError **error) { GFile *file; gboolean ret_val; const gchar *uri; uri = photos_base_item_get_uri (item); file = g_file_new_for_uri (uri); ret_val = photos_utils_create_thumbnail (file, cancellable, error); g_object_unref (file); return ret_val; }
/* TODO */ static void photos_facebook_item_open (PhotosBaseItem *item, GdkScreen *screen, guint32 timestamp) { GError *error; const gchar *facebook_uri; facebook_uri = photos_base_item_get_uri (item); error = NULL; gtk_show_uri (screen, facebook_uri, timestamp, &error); if (error != NULL) { g_warning ("Unable to show URI %s: %s", facebook_uri, error->message); g_error_free (error); } }
static void photos_print_operation_constructed (GObject *object) { PhotosPrintOperation *self = PHOTOS_PRINT_OPERATION (object); GeglRectangle bbox; GtkPageSetup *page_setup; gchar *name; G_OBJECT_CLASS (photos_print_operation_parent_class)->constructed (object); page_setup = gtk_page_setup_new (); gtk_print_operation_set_default_page_setup (GTK_PRINT_OPERATION (self), page_setup); bbox = gegl_node_get_bounding_box (self->node); if (bbox.height >= bbox.width) gtk_page_setup_set_orientation (page_setup, GTK_PAGE_ORIENTATION_PORTRAIT); else gtk_page_setup_set_orientation (page_setup, GTK_PAGE_ORIENTATION_LANDSCAPE); g_object_unref (page_setup); name = g_strdup (photos_base_item_get_name (self->item)); if (name == NULL || name[0] == '\0') { GFile *file; const gchar *uri; gchar *basename; uri = photos_base_item_get_uri (self->item); file = g_file_new_for_uri (uri); basename = g_file_get_basename (file); if (g_utf8_validate (basename, -1, NULL)) name = g_strdup (basename); else name = g_filename_to_utf8 (basename, -1, NULL, NULL, NULL); g_free (basename); g_object_unref (file); } gtk_print_operation_set_job_name (GTK_PRINT_OPERATION (self), name); g_free (name); }
static GIcon * photos_utils_get_thumbnail_icon (PhotosBaseItem *item) { g_autoptr (GFile) thumb_file = NULL; g_autoptr (GFileInfo) info = NULL; GIcon *icon = NULL; const gchar *thumb_path; const gchar *uri; uri = photos_base_item_get_uri (item); if (uri == NULL || uri[0] == '\0') goto out; { g_autoptr (GError) error = NULL; info = photos_base_item_query_info (item, G_FILE_ATTRIBUTE_THUMBNAIL_PATH, G_FILE_QUERY_INFO_NONE, NULL, &error); if (error != NULL) { g_warning ("Unable to fetch thumbnail path for %s: %s", uri, error->message); goto out; } } thumb_path = g_file_info_get_attribute_byte_string (info, G_FILE_ATTRIBUTE_THUMBNAIL_PATH); if (thumb_path == NULL) goto out; thumb_file = g_file_new_for_path (thumb_path); icon = g_file_icon_new (thumb_file); out: return icon; }
static gboolean photos_item_manager_set_active_object (PhotosBaseManager *manager, GObject *object) { PhotosItemManager *self = PHOTOS_ITEM_MANAGER (manager); PhotosItemManagerPrivate *priv = self->priv; GtkRecentManager *recent; gboolean ret_val; const gchar *uri; g_return_val_if_fail (PHOTOS_IS_BASE_ITEM (object) || object == NULL, FALSE); ret_val = PHOTOS_BASE_MANAGER_CLASS (photos_item_manager_parent_class)->set_active_object (manager, object); if (!ret_val) goto out; if (object == NULL) goto out; if (photos_base_item_is_collection (PHOTOS_BASE_ITEM (object))) { GObject *collection; collection = photos_base_manager_get_active_object (priv->col_mngr); g_queue_push_head (priv->collection_path, (collection != NULL) ? g_object_ref (collection) : NULL); photos_base_manager_set_active_object (priv->col_mngr, object); goto out; } recent = gtk_recent_manager_get_default (); uri = photos_base_item_get_uri (PHOTOS_BASE_ITEM (object)); gtk_recent_manager_add_item (recent, uri); out: return ret_val; }
static void photos_properties_dialog_constructed (GObject *object) { PhotosPropertiesDialog *self = PHOTOS_PROPERTIES_DIALOG (object); PhotosPropertiesDialogPrivate *priv = self->priv; GDateTime *date_modified; GtkStyleContext *context; GtkWidget *author_w = NULL; GtkWidget *content_area; GtkWidget *date_created_w = NULL; GtkWidget *date_modified_data; GtkWidget *date_modified_w; GtkWidget *exposure_time_w = NULL; GtkWidget *flash_w = NULL; GtkWidget *fnumber_w = NULL; GtkWidget *focal_length_w = NULL; GtkWidget *height_w = NULL; GtkWidget *iso_speed_w = NULL; GtkWidget *item_type; GtkWidget *item_type_data; GtkWidget *source; GtkWidget *source_data; GtkWidget *title; GtkWidget *width_w = NULL; GQuark equipment; GQuark flash; PhotosBaseItem *item; const gchar *author; const gchar *name; const gchar *type_description; gchar *date_created_str = NULL; gchar *date_modified_str; gdouble exposure_time; gdouble fnumber; gdouble focal_length; gdouble iso_speed; gint64 ctime; gint64 height; gint64 mtime; gint64 width; G_OBJECT_CLASS (photos_properties_dialog_parent_class)->constructed (object); item = PHOTOS_BASE_ITEM (photos_base_manager_get_object_by_id (priv->item_mngr, priv->urn)); mtime = photos_base_item_get_mtime (item); date_modified = g_date_time_new_from_unix_local (mtime); date_modified_str = g_date_time_format (date_modified, "%c"); g_date_time_unref (date_modified); ctime = photos_base_item_get_date_created (item); if (ctime != -1) { GDateTime *date_created; date_created = g_date_time_new_from_unix_local (ctime); date_created_str = g_date_time_format (date_created, "%c"); g_date_time_unref (date_created); } priv->grid = gtk_grid_new (); gtk_widget_set_halign (priv->grid, GTK_ALIGN_CENTER); gtk_widget_set_margin_start (priv->grid, 24); gtk_widget_set_margin_end (priv->grid, 24); gtk_widget_set_margin_bottom (priv->grid, 12); gtk_widget_set_margin_top (priv->grid, 12); gtk_orientable_set_orientation (GTK_ORIENTABLE (priv->grid), GTK_ORIENTATION_VERTICAL); gtk_grid_set_column_homogeneous (GTK_GRID (priv->grid), TRUE); gtk_grid_set_column_spacing (GTK_GRID (priv->grid), 24); gtk_grid_set_row_homogeneous (GTK_GRID (priv->grid), TRUE); gtk_grid_set_row_spacing (GTK_GRID (priv->grid), 6); content_area = gtk_dialog_get_content_area (GTK_DIALOG (self)); gtk_box_pack_start (GTK_BOX (content_area), priv->grid, TRUE, TRUE, 2); /* Translators: this is the label next to the photo title in the * properties dialog */ title = gtk_label_new (C_("Document Title", "Title")); gtk_widget_set_halign (title, GTK_ALIGN_END); context = gtk_widget_get_style_context (title); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (priv->grid), title); author = photos_base_item_get_author (item); if (author != NULL && author[0] != '\0') { /* Translators: this is the label next to the photo author in * the properties dialog */ author_w = gtk_label_new (C_("Document Author", "Author")); gtk_widget_set_halign (author_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (author_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (priv->grid), author_w); } source = gtk_label_new (_("Source")); gtk_widget_set_halign (source, GTK_ALIGN_END); context = gtk_widget_get_style_context (source); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (priv->grid), source); date_modified_w = gtk_label_new (_("Date Modified")); gtk_widget_set_halign (date_modified_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (date_modified_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (priv->grid), date_modified_w); if (date_created_str != NULL) { date_created_w = gtk_label_new (_("Date Created")); gtk_widget_set_halign (date_created_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (date_created_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (priv->grid), date_created_w); } /* Translators: this is the label next to the photo type in the * properties dialog */ item_type = gtk_label_new (C_("Document Type", "Type")); gtk_widget_set_halign (item_type, GTK_ALIGN_END); context = gtk_widget_get_style_context (item_type); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (priv->grid), item_type); width = photos_base_item_get_width (item); if (width > 0) { width_w = gtk_label_new (_("Width")); gtk_widget_set_halign (width_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (width_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (priv->grid), width_w); } height = photos_base_item_get_height (item); if (height > 0) { height_w = gtk_label_new (_("Height")); gtk_widget_set_halign (height_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (height_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (priv->grid), height_w); } equipment = photos_base_item_get_equipment (item); photos_camera_cache_get_camera_async (priv->camera_cache, equipment, priv->cancellable, photos_properties_dialog_get_camera, self); if (equipment != 0) { priv->camera_w = gtk_label_new (_("Camera")); gtk_widget_set_halign (priv->camera_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (priv->camera_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (priv->grid), priv->camera_w); } exposure_time = photos_base_item_get_exposure_time (item); if (exposure_time > 0.0) { exposure_time_w = gtk_label_new (_("Exposure")); gtk_widget_set_halign (exposure_time_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (exposure_time_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (priv->grid), exposure_time_w); } fnumber = photos_base_item_get_fnumber (item); if (fnumber > 0.0) { fnumber_w = gtk_label_new (_("Aperture")); gtk_widget_set_halign (fnumber_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (fnumber_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (priv->grid), fnumber_w); } focal_length = photos_base_item_get_focal_length (item); if (focal_length > 0.0) { focal_length_w = gtk_label_new (_("Focal Length")); gtk_widget_set_halign (focal_length_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (focal_length_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (priv->grid), focal_length_w); } iso_speed = photos_base_item_get_iso_speed (item); if (iso_speed > 0.0) { iso_speed_w = gtk_label_new (_("ISO Speed")); gtk_widget_set_halign (iso_speed_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (iso_speed_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (priv->grid), iso_speed_w); } flash = photos_base_item_get_flash (item); if (flash != 0) { flash_w = gtk_label_new (_("Flash")); gtk_widget_set_halign (flash_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (flash_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (priv->grid), flash_w); } name = photos_base_item_get_name (item); if (PHOTOS_IS_LOCAL_ITEM (item)) { priv->title_entry = gtk_entry_new (); gtk_widget_set_halign (priv->title_entry, GTK_ALIGN_START); gtk_widget_set_hexpand (priv->title_entry, TRUE); gtk_entry_set_activates_default (GTK_ENTRY (priv->title_entry), TRUE); gtk_entry_set_text (GTK_ENTRY (priv->title_entry), name); gtk_entry_set_width_chars (GTK_ENTRY (priv->title_entry), 40); gtk_editable_set_editable (GTK_EDITABLE (priv->title_entry), TRUE); g_signal_connect (priv->title_entry, "changed", G_CALLBACK (photos_properties_dialog_title_entry_changed), self); } else { priv->title_entry = gtk_label_new (name); gtk_widget_set_halign (priv->title_entry, GTK_ALIGN_START); } gtk_grid_attach_next_to (GTK_GRID (priv->grid), priv->title_entry, title, GTK_POS_RIGHT, 2, 1); if (author_w != NULL) { GtkWidget *author_data; author_data = gtk_label_new (author); gtk_widget_set_halign (author_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (priv->grid), author_data, author_w, GTK_POS_RIGHT, 2, 1); } if (PHOTOS_IS_FACEBOOK_ITEM (item)) { const gchar *source_name; source_name = photos_base_item_get_source_name (item); source_data = gtk_link_button_new_with_label ("https://www.facebook.com/", source_name); gtk_widget_set_halign (source_data, GTK_ALIGN_START); } else if (PHOTOS_IS_FLICKR_ITEM (item)) { const gchar *source_name; source_name = photos_base_item_get_source_name (item); source_data = gtk_link_button_new_with_label ("https://www.flickr.com/", source_name); gtk_widget_set_halign (source_data, GTK_ALIGN_START); } else /* local item */ { if (photos_base_item_is_collection (item)) { const gchar *source_name; source_name = photos_base_item_get_source_name (item); source_data = gtk_label_new (source_name); gtk_widget_set_halign (source_data, GTK_ALIGN_START); } else { GFile *file; GFile *source_link; GtkWidget *label; const gchar *uri; gchar *source_path; gchar *source_uri; uri = photos_base_item_get_uri (item); file = g_file_new_for_uri (uri); source_link = g_file_get_parent (file); source_path = g_file_get_path (source_link); source_uri = g_file_get_uri (source_link); source_data = gtk_link_button_new_with_label (source_uri, source_path); gtk_widget_set_halign (source_data, GTK_ALIGN_START); label = gtk_bin_get_child (GTK_BIN (source_data)); gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END); g_object_unref (source_link); g_object_unref (file); } } gtk_grid_attach_next_to (GTK_GRID (priv->grid), source_data, source, GTK_POS_RIGHT, 2, 1); date_modified_data = gtk_label_new (date_modified_str); gtk_widget_set_halign (date_modified_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (priv->grid), date_modified_data, date_modified_w, GTK_POS_RIGHT, 2, 1); if (date_created_w != NULL) { GtkWidget *date_created_data; date_created_data = gtk_label_new (date_created_str); gtk_widget_set_halign (date_created_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (priv->grid), date_created_data, date_created_w, GTK_POS_RIGHT, 2, 1); } type_description = photos_base_item_get_type_description (item); item_type_data = gtk_label_new (type_description); gtk_widget_set_halign (item_type_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (priv->grid), item_type_data, item_type, GTK_POS_RIGHT, 2, 1); if (width_w != NULL) { GtkWidget *width_data; gchar *width_str; width_str = g_strdup_printf ("%"G_GINT64_FORMAT" pixels", width); width_data = gtk_label_new (width_str); gtk_widget_set_halign (width_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (priv->grid), width_data, width_w, GTK_POS_RIGHT, 2, 1); g_free (width_str); } if (height_w != NULL) { GtkWidget *height_data; gchar *height_str; height_str = g_strdup_printf ("%"G_GINT64_FORMAT" pixels", height); height_data = gtk_label_new (height_str); gtk_widget_set_halign (height_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (priv->grid), height_data, height_w, GTK_POS_RIGHT, 2, 1); g_free (height_str); } if (exposure_time_w != NULL) { GtkWidget *exposure_time_data; gchar *exposure_time_str; exposure_time_str = g_strdup_printf ("%.3lf sec", exposure_time); exposure_time_data = gtk_label_new (exposure_time_str); gtk_widget_set_halign (exposure_time_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (priv->grid), exposure_time_data, exposure_time_w, GTK_POS_RIGHT, 2, 1); g_free (exposure_time_str); } if (fnumber_w != NULL) { GtkWidget *fnumber_data; gchar *fnumber_str; fnumber_str = g_strdup_printf ("f/%.1lf", fnumber); fnumber_data = gtk_label_new (fnumber_str); gtk_widget_set_halign (fnumber_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (priv->grid), fnumber_data, fnumber_w, GTK_POS_RIGHT, 2, 1); g_free (fnumber_str); } if (focal_length_w != NULL) { GtkWidget *focal_length_data; gchar *focal_length_str; focal_length_str = g_strdup_printf ("%.0lf mm", focal_length); focal_length_data = gtk_label_new (focal_length_str); gtk_widget_set_halign (focal_length_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (priv->grid), focal_length_data, focal_length_w, GTK_POS_RIGHT, 2, 1); g_free (focal_length_str); } if (iso_speed_w != NULL) { GtkWidget *iso_speed_data; gchar *iso_speed_str; iso_speed_str = g_strdup_printf ("%.0lf", iso_speed); iso_speed_data = gtk_label_new (iso_speed_str); gtk_widget_set_halign (iso_speed_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (priv->grid), iso_speed_data, iso_speed_w, GTK_POS_RIGHT, 2, 1); g_free (iso_speed_str); } if (flash_w != NULL) { GtkWidget *flash_data; gchar *flash_str; if (flash == PHOTOS_FLASH_OFF) flash_str = g_strdup (_("Off, did not fire")); else if (flash == PHOTOS_FLASH_ON) flash_str = g_strdup (_("On, fired")); else g_assert_not_reached (); flash_data = gtk_label_new (flash_str); gtk_widget_set_halign (flash_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (priv->grid), flash_data, flash_w, GTK_POS_RIGHT, 2, 1); g_free (flash_str); } g_free (date_created_str); g_free (date_modified_str); }
static gboolean photos_item_manager_set_active_object (PhotosBaseManager *manager, GObject *object) { PhotosItemManager *self = PHOTOS_ITEM_MANAGER (manager); GObject *active_item; PhotosWindowMode old_mode; gboolean active_collection_changed = FALSE; gboolean ret_val = FALSE; gboolean start_loading = FALSE; gboolean window_mode_changed = FALSE; g_return_val_if_fail (object != NULL, FALSE); g_return_val_if_fail (PHOTOS_IS_BASE_ITEM (object), FALSE); active_item = photos_base_manager_get_active_object (manager); if (object == active_item) goto out; photos_item_manager_clear_active_item_load (self); if (photos_base_item_is_collection (PHOTOS_BASE_ITEM (object))) { g_queue_push_head (self->collection_path, (self->active_collection != NULL) ? g_object_ref (self->active_collection) : NULL); g_clear_object (&self->active_collection); self->active_collection = g_object_ref (object); self->load_state = PHOTOS_LOAD_STATE_NONE; active_collection_changed = TRUE; } else { window_mode_changed = photos_item_manager_set_window_mode_internal (self, PHOTOS_WINDOW_MODE_PREVIEW, &old_mode); photos_item_manager_update_fullscreen (self); self->load_state = PHOTOS_LOAD_STATE_STARTED; start_loading = TRUE; } ret_val = PHOTOS_BASE_MANAGER_CLASS (photos_item_manager_parent_class)->set_active_object (manager, object); /* We have already eliminated the possibility of failure. */ g_assert (ret_val == TRUE); active_item = photos_base_manager_get_active_object (manager); g_assert (active_item == object); if (active_collection_changed) { g_signal_emit (self, signals[ACTIVE_COLLECTION_CHANGED], 0, self->active_collection); g_assert (active_item == (GObject *) self->active_collection); } if (start_loading) { GtkRecentManager *recent; const gchar *uri; recent = gtk_recent_manager_get_default (); uri = photos_base_item_get_uri (PHOTOS_BASE_ITEM (object)); gtk_recent_manager_add_item (recent, uri); self->loader_cancellable = g_cancellable_new (); photos_base_item_load_async (PHOTOS_BASE_ITEM (object), self->loader_cancellable, photos_item_manager_item_load, g_object_ref (self)); g_signal_emit (self, signals[LOAD_STARTED], 0, PHOTOS_BASE_ITEM (object)); if (window_mode_changed) g_signal_emit (self, signals[WINDOW_MODE_CHANGED], 0, PHOTOS_WINDOW_MODE_PREVIEW, old_mode); g_assert (active_item != (GObject *) self->active_collection); } out: return ret_val; }