summaryrefslogtreecommitdiff
path: root/font-viewer/font-model.c
diff options
context:
space:
mode:
Diffstat (limited to 'font-viewer/font-model.c')
-rw-r--r--font-viewer/font-model.c67
1 files changed, 22 insertions, 45 deletions
diff --git a/font-viewer/font-model.c b/font-viewer/font-model.c
index d5243f34..c89c0144 100644
--- a/font-viewer/font-model.c
+++ b/font-viewer/font-model.c
@@ -75,32 +75,26 @@ typedef struct {
FT_Face face;
GtkTreeIter iter;
gboolean found;
-} IterForFileData;
+} IterForFaceData;
static gboolean
-iter_for_file_foreach (GtkTreeModel *model,
+iter_for_face_foreach (GtkTreeModel *model,
GtkTreePath *path,
GtkTreeIter *iter,
gpointer user_data)
{
- IterForFileData *data = user_data;
- gchar *font_path, *font_name, *match_name;
+ IterForFaceData *data = user_data;
+ gchar *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);
- }
+ match_name = font_utils_get_font_name (data->face);
+ retval = (g_strcmp0 (font_name, match_name) == 0);
- g_free (font_path);
+ g_free (match_name);
g_free (font_name);
if (retval) {
@@ -111,55 +105,36 @@ iter_for_file_foreach (GtkTreeModel *model,
return retval;
}
-static gboolean
-font_view_model_get_iter_internal (FontViewModel *self,
- const gchar *file,
+gboolean
+font_view_model_get_iter_for_face (FontViewModel *self,
FT_Face face,
GtkTreeIter *iter)
{
- IterForFileData *data = g_slice_new0 (IterForFileData);
+ IterForFaceData *data = g_slice_new0 (IterForFaceData);
gboolean found;
- data->file = file;
data->face = face;
data->found = FALSE;
gtk_tree_model_foreach (GTK_TREE_MODEL (self),
- iter_for_file_foreach,
+ iter_for_face_foreach,
data);
found = data->found;
if (found && iter)
*iter = data->iter;
- g_slice_free (IterForFileData, data);
+ g_slice_free (IterForFaceData, data);
return found;
}
-gboolean
-font_view_model_get_iter_for_file (FontViewModel *self,
- const gchar *file,
- GtkTreeIter *iter)
-{
- return font_view_model_get_iter_internal
- (self, file, NULL, iter);
-}
-
-gboolean
-font_view_model_get_iter_for_face (FontViewModel *self,
- FT_Face face,
- GtkTreeIter *iter)
-{
- return font_view_model_get_iter_internal
- (self, NULL, face, iter);
-}
-
typedef struct {
FontViewModel *self;
GFile *font_file;
gchar *font_path;
GdkPixbuf *pixbuf;
+ GtkTreeIter iter;
} LoadThumbnailData;
static void
@@ -177,11 +152,9 @@ static gboolean
ensure_thumbnail_job_done (gpointer user_data)
{
LoadThumbnailData *data = user_data;
- GtkTreeIter iter;
- if ((data->pixbuf != NULL) &&
- (font_view_model_get_iter_for_file (data->self, data->font_path, &iter)))
- gtk_list_store_set (GTK_LIST_STORE (data->self), &iter,
+ if (data->pixbuf != NULL)
+ gtk_list_store_set (GTK_LIST_STORE (data->self), &(data->iter),
COLUMN_ICON, data->pixbuf,
-1);
@@ -299,7 +272,8 @@ ensure_thumbnail_job (GIOSchedulerJob *job,
static void
ensure_thumbnail (FontViewModel *self,
- const gchar *path)
+ const gchar *path,
+ GtkTreeIter *iter)
{
LoadThumbnailData *data;
@@ -307,6 +281,7 @@ ensure_thumbnail (FontViewModel *self,
data->self = g_object_ref (self);
data->font_file = g_file_new_for_path (path);
data->font_path = g_strdup (path);
+ data->iter = *iter;
g_io_scheduler_push_job (ensure_thumbnail_job, data,
NULL, G_PRIORITY_DEFAULT, NULL);
@@ -345,6 +320,8 @@ ensure_font_list (FontViewModel *self)
return;
for (i = 0; i < self->priv->font_list->nfont; i++) {
+ GtkTreeIter iter;
+
FcPatternGetString (self->priv->font_list->fonts[i], FC_FILE, 0, &file);
font_name = font_utils_get_font_name_for_file (self->priv->library, (const gchar *) file);
@@ -353,7 +330,7 @@ ensure_font_list (FontViewModel *self)
collation_key = g_utf8_collate_key (font_name, -1);
- gtk_list_store_insert_with_values (GTK_LIST_STORE (self), NULL, -1,
+ gtk_list_store_insert_with_values (GTK_LIST_STORE (self), &iter, -1,
COLUMN_NAME, font_name,
COLUMN_POINTER, self->priv->font_list->fonts[i],
COLUMN_PATH, file,
@@ -361,7 +338,7 @@ ensure_font_list (FontViewModel *self)
COLUMN_COLLATION_KEY, collation_key,
-1);
- ensure_thumbnail (self, (const gchar *) file);
+ ensure_thumbnail (self, (const gchar *) file, &iter);
g_free (font_name);
g_free (collation_key);