static GTokenType gimp_color_profile_store_load_profile (GimpColorProfileStore *store, GScanner *scanner, gint index) { GtkTreeIter iter; gchar *label = NULL; gchar *uri = NULL; if (gimp_scanner_parse_string (scanner, &label) && gimp_scanner_parse_string (scanner, &uri)) { gchar *filename = g_filename_from_uri (uri, NULL, NULL); if (filename && g_file_test (filename, G_FILE_TEST_IS_REGULAR)) { gimp_color_profile_store_history_insert (store, &iter, filename, label, index); } g_free (filename); g_free (label); g_free (uri); return G_TOKEN_RIGHT_PAREN; } g_free (label); g_free (uri); return G_TOKEN_STRING; }
static GTokenType gimp_color_profile_store_load_profile (GimpColorProfileStore *store, GScanner *scanner, gint index) { GtkTreeIter iter; gchar *label = NULL; gchar *uri = NULL; if (gimp_scanner_parse_string (scanner, &label) && gimp_scanner_parse_string (scanner, &uri)) { GFile *file = g_file_new_for_uri (uri); if (file) { if (g_file_query_file_type (file, 0, NULL) == G_FILE_TYPE_REGULAR) { gimp_color_profile_store_history_insert (store, &iter, file, label, index); } g_object_unref (file); } g_free (label); g_free (uri); return G_TOKEN_RIGHT_PAREN; } g_free (label); g_free (uri); return G_TOKEN_STRING; }
/** * _gimp_color_profile_store_history_add: * @store: a #GimpColorProfileStore * @file: file of the profile to add (or %NULL) * @label: label to use for the profile (or %NULL) * @iter: a #GtkTreeIter * * Return value: %TRUE if the iter is valid and pointing to the item * * Since: 2.4 **/ gboolean _gimp_color_profile_store_history_add (GimpColorProfileStore *store, GFile *file, const gchar *label, GtkTreeIter *iter) { GtkTreeModel *model; gboolean iter_valid; gint max = -1; g_return_val_if_fail (GIMP_IS_COLOR_PROFILE_STORE (store), FALSE); g_return_val_if_fail (iter != NULL, FALSE); model = GTK_TREE_MODEL (store); for (iter_valid = gtk_tree_model_get_iter_first (model, iter); iter_valid; iter_valid = gtk_tree_model_iter_next (model, iter)) { gint type; gint index; GFile *this; gtk_tree_model_get (model, iter, GIMP_COLOR_PROFILE_STORE_ITEM_TYPE, &type, GIMP_COLOR_PROFILE_STORE_INDEX, &index, -1); if (type != GIMP_COLOR_PROFILE_STORE_ITEM_FILE) continue; if (index > max) max = index; /* check if we found a filename match */ gtk_tree_model_get (model, iter, GIMP_COLOR_PROFILE_STORE_FILE, &this, -1); if ((this && file && g_file_equal (this, file)) || (! this && ! file)) { /* update the label */ if (label && *label) gtk_list_store_set (GTK_LIST_STORE (store), iter, GIMP_COLOR_PROFILE_STORE_LABEL, label, -1); if (this) g_object_unref (this); return TRUE; } if (this) g_object_unref (this); } if (! file) return FALSE; if (label && *label) { iter_valid = gimp_color_profile_store_history_insert (store, iter, file, label, ++max); } else { const gchar *utf8 = gimp_file_get_utf8_name (file); gchar *basename = g_path_get_basename (utf8); iter_valid = gimp_color_profile_store_history_insert (store, iter, file, basename, ++max); g_free (basename); } return iter_valid; }