static gboolean iter_for_file_foreach (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer user_data) { IterForFileData *data = user_data; gchar *font_path, *font_name, *match_name; gboolean retval; gtk_tree_model_get (GTK_TREE_MODEL (model), iter, COLUMN_NAME, &font_name, COLUMN_PATH, &font_path, -1); if (data->file) { retval = (g_strcmp0 (font_path, data->file) == 0); } else if (data->face) { match_name = font_utils_get_font_name (data->face); retval = (g_strcmp0 (font_name, match_name) == 0); g_free (match_name); } g_free (font_path); g_free (font_name); if (retval) { data->iter = *iter; data->found = TRUE; } return retval; }
gchar * font_utils_get_font_name_for_file (FT_Library library, const gchar *path, gint face_index) { GFile *file; gchar *uri, *contents = NULL, *name = NULL; GError *error = NULL; FT_Face face; file = g_file_new_for_path (path); uri = g_file_get_uri (file); face = sushi_new_ft_face_from_uri (library, uri, face_index, &contents, &error); if (face != NULL) { name = font_utils_get_font_name (face); FT_Done_Face (face); } else if (error != NULL) { g_warning ("Can't get font name: %s\n", error->message); g_error_free (error); } g_free (uri); g_object_unref (file); g_free (contents); return name; }