}
\f
+/* Check whether NAME should be ignored based on Vface_ignored_fonts.
+ This is reused by xg_font_filter to apply the same checks to the
+ GTK font chooser. */
+
+bool
+font_is_ignored (const char *name, ptrdiff_t namelen)
+{
+ Lisp_Object tail = Vface_ignored_fonts;
+ Lisp_Object regexp;
+
+ FOR_EACH_TAIL_SAFE (tail)
+ {
+ regexp = XCAR (tail);
+ if (STRINGP (regexp)
+ && fast_c_string_match_ignore_case (regexp, name,
+ namelen) >= 0)
+ return true;
+ }
+ return false;
+}
static Lisp_Object scratch_font_spec, scratch_font_prefer;
/* Check each font-entity in VEC, and return a list of font-entities
{
char name[256];
ptrdiff_t namelen;
- Lisp_Object tail, regexp;
-
namelen = font_unparse_xlfd (entity, 0, name, 256);
if (namelen >= 0)
- {
- for (tail = Vface_ignored_fonts; CONSP (tail); tail = XCDR (tail))
- {
- regexp = XCAR (tail);
- if (STRINGP (regexp)
- && fast_c_string_match_ignore_case (regexp, name,
- namelen) >= 0)
- break;
- }
- if (CONSP (tail))
- continue;
- }
+ if (font_is_ignored (name, namelen))
+ continue;
}
if (NILP (spec))
{
static char *x_last_font_name;
+#if GTK_CHECK_VERSION (3, 2, 0)
+static gboolean
+xg_font_filter (const PangoFontFamily *family,
+ const PangoFontFace *face,
+ gpointer data)
+{
+ const char *name = pango_font_family_get_name ((PangoFontFamily *)family);
+ ptrdiff_t namelen = strlen (name);
+
+ if (font_is_ignored (name, namelen))
+ return FALSE;
+ return TRUE;
+}
+#endif
+
/* Pop up a GTK font selector and return the name of the font the user
selects, as a C string. The returned font name follows GTK's own
format:
w = gtk_font_chooser_dialog_new
("Pick a font", GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)));
+#if GTK_CHECK_VERSION (3, 2, 0)
+ gtk_font_chooser_set_filter_func (GTK_FONT_CHOOSER (w), xg_font_filter, NULL, NULL);
+#endif
if (default_name)
{
/* Convert fontconfig names to Gtk names, i.e. remove - before
extern bool xg_ignore_gtk_scrollbar;
extern bool xg_gtk_initialized;
+
+#if GTK_CHECK_VERSION (3, 2, 0)
+extern bool font_is_ignored (const char *, ptrdiff_t);
+#endif
+
#endif /* USE_GTK */
#endif /* GTKUTIL_H */