summaryrefslogtreecommitdiff
path: root/pango/pangowin32-fontmap.c
diff options
context:
space:
mode:
authorTor Lillqvist <tml@novell.com>2008-05-26 21:30:59 +0000
committerTor Lillqvist <tml@src.gnome.org>2008-05-26 21:30:59 +0000
commit3c3df8f0f19f6fb87931bd68b8dbb61bc3af0de0 (patch)
tree6a69f8ad6f512e8b08ab4049d7a32beed36d56f1 /pango/pangowin32-fontmap.c
parentc72e69c91322e2b76521baabac154dcea6692160 (diff)
downloadpango-3c3df8f0f19f6fb87931bd68b8dbb61bc3af0de0.tar.gz
Prune duplicated face names. Makes the GTK+ font selector look a bit saner
2008-05-27 Tor Lillqvist <tml@novell.com> * pango/pangowin32-fontmap.c (pango_win32_family_list_faces): Prune duplicated face names. Makes the GTK+ font selector look a bit saner for the "sans", "serif" and "monospace" standard pseudo font families with just one instance of each style. That we get duplicated styles in the first place is because of the magic code snippet in pango_win32_insert_font() that sets up the list of faces for the standard pseudo font families. I don't like that code but without it these families wouldn't currently show up in the font selector at all. A problem is still that the magic code blindly adds all random fonts that claim to be FF_ROMAN to the list of faces for the "serif" family, etc. I think it would be preferrable to do it only for well-known sensible fonts. That would be those that are listed in builtin_aliases in pango-utils.c, I guess. svn path=/trunk/; revision=2638
Diffstat (limited to 'pango/pangowin32-fontmap.c')
-rw-r--r--pango/pangowin32-fontmap.c45
1 files changed, 37 insertions, 8 deletions
diff --git a/pango/pangowin32-fontmap.c b/pango/pangowin32-fontmap.c
index cff43126..3ee1d1d1 100644
--- a/pango/pangowin32-fontmap.c
+++ b/pango/pangowin32-fontmap.c
@@ -357,22 +357,51 @@ pango_win32_family_list_faces (PangoFontFamily *family,
int *n_faces)
{
PangoWin32Family *win32family = PANGO_WIN32_FAMILY (family);
+ GSList *p;
+ int n;
+
+ p = win32family->faces;
+ n = 0;
+ while (p)
+ {
+ GSList *q;
+ q = win32family->faces;
+ while (q != p)
+ {
+ if (strcmp (pango_win32_face_get_face_name ((PangoFontFace *) q->data),
+ pango_win32_face_get_face_name ((PangoFontFace *) p->data)) == 0)
+ break;
+ q = q->next;
+ }
+ if (q == p)
+ n++;
+ p = p->next;
+ }
- *n_faces = g_slist_length (win32family->faces);
if (faces)
{
- GSList *tmp_list;
- int i = 0;
+ int i;
- *faces = g_new (PangoFontFace *, *n_faces);
+ *faces = g_new (PangoFontFace *, n);
- tmp_list = win32family->faces;
- while (tmp_list)
+ p = win32family->faces;
+ i = 0;
+ while (p)
{
- (*faces)[i++] = tmp_list->data;
- tmp_list = tmp_list->next;
+ int j;
+ for (j = 0; j < i; j++)
+ {
+ if (strcmp (pango_win32_face_get_face_name ((*faces)[j]),
+ pango_win32_face_get_face_name ((PangoFontFace *) p->data)) == 0)
+ break;
+ }
+ if (j == i)
+ (*faces)[i++] = p->data;
+ p = p->next;
}
}
+ if (n_faces)
+ *n_faces = n;
}
static const char *