Make GTK font chooser respect face-ignored-fonts
* src/font.c (font_delete_unmatched): Move Vface_ignored_fonts matching to... (font_is_ignored): ..Here. New function. * src/gtkutil.c (xg_font_filter): New function, uses font_is_ignored to filter fonts. (xg_get_font): Set GTK font chooser filter to xg_font_filter. * src/gtkutil.h: Add prototype for font_is_ignored.
This commit is contained in:
parent
4f45e89852
commit
ca44f33be2
3 changed files with 45 additions and 14 deletions
36
src/font.c
36
src/font.c
|
@ -2655,6 +2655,26 @@ font_clear_cache (struct frame *f, Lisp_Object cache,
|
|||
}
|
||||
|
||||
|
||||
/* 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
|
||||
|
@ -2677,22 +2697,10 @@ font_delete_unmatched (Lisp_Object vec, Lisp_Object spec, int size)
|
|||
{
|
||||
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))
|
||||
{
|
||||
|
|
|
@ -2228,6 +2228,21 @@ xg_get_file_name (struct frame *f,
|
|||
|
||||
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:
|
||||
|
@ -2247,6 +2262,9 @@ xg_get_font (struct frame *f, const char *default_name)
|
|||
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
|
||||
|
|
|
@ -203,5 +203,10 @@ extern void xg_initialize (void);
|
|||
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 */
|
||||
|
|
Loading…
Add table
Reference in a new issue