# HG changeset patch # User Chong Yidong # Date 1260044202 0 # Node ID de4084d806f6a94325254a13610bea533d96e472 # Parent 7c2192f52cb68ff92c1c59acfd87e62d4f9a5f16 * xfaces.c (Fx_family_fonts): Handle 2009-07-14 change to return value of font_list_entities (Bug#5085). diff -r 7c2192f52cb6 -r de4084d806f6 src/ChangeLog --- a/src/ChangeLog Sat Dec 05 20:09:49 2009 +0000 +++ b/src/ChangeLog Sat Dec 05 20:16:42 2009 +0000 @@ -1,3 +1,8 @@ +2009-12-05 Chong Yidong + + * xfaces.c (Fx_family_fonts): Handle 2009-07-14 change to return + value of font_list_entities (Bug#5085). + 2009-12-04 Juanma Barranquero Fix `string-to-number' to deal consistently with integers and floats. diff -r 7c2192f52cb6 -r de4084d806f6 src/xfaces.c --- a/src/xfaces.c Sat Dec 05 20:09:49 2009 +0000 +++ b/src/xfaces.c Sat Dec 05 20:16:42 2009 +0000 @@ -1745,8 +1745,8 @@ (family, frame) Lisp_Object family, frame; { - Lisp_Object font_spec, vec; - int i, nfonts; + Lisp_Object font_spec, list, *drivers, vec; + int i, nfonts, ndrivers; Lisp_Object result; if (NILP (frame)) @@ -1759,32 +1759,38 @@ CHECK_STRING (family); font_parse_family_registry (family, Qnil, font_spec); } - vec = font_list_entities (frame, font_spec); - nfonts = ASIZE (vec); - if (nfonts == 0) + + list = font_list_entities (frame, font_spec); + if (NILP (list)) return Qnil; - if (nfonts > 1) - { - for (i = 0; i < 4; i++) - switch (font_sort_order[i]) - { - case XLFD_SWIDTH: - font_props_for_sorting[i] = FONT_WIDTH_INDEX; break; - case XLFD_POINT_SIZE: - font_props_for_sorting[i] = FONT_SIZE_INDEX; break; - case XLFD_WEIGHT: - font_props_for_sorting[i] = FONT_WEIGHT_INDEX; break; - default: - font_props_for_sorting[i] = FONT_SLANT_INDEX; break; - } - font_props_for_sorting[i++] = FONT_FAMILY_INDEX; - font_props_for_sorting[i++] = FONT_FOUNDRY_INDEX; - font_props_for_sorting[i++] = FONT_ADSTYLE_INDEX; - font_props_for_sorting[i++] = FONT_REGISTRY_INDEX; - - qsort (XVECTOR (vec)->contents, nfonts, sizeof (Lisp_Object), - compare_fonts_by_sort_order); - } + + /* Sort the font entities. */ + for (i = 0; i < 4; i++) + switch (font_sort_order[i]) + { + case XLFD_SWIDTH: + font_props_for_sorting[i] = FONT_WIDTH_INDEX; break; + case XLFD_POINT_SIZE: + font_props_for_sorting[i] = FONT_SIZE_INDEX; break; + case XLFD_WEIGHT: + font_props_for_sorting[i] = FONT_WEIGHT_INDEX; break; + default: + font_props_for_sorting[i] = FONT_SLANT_INDEX; break; + } + font_props_for_sorting[i++] = FONT_FAMILY_INDEX; + font_props_for_sorting[i++] = FONT_FOUNDRY_INDEX; + font_props_for_sorting[i++] = FONT_ADSTYLE_INDEX; + font_props_for_sorting[i++] = FONT_REGISTRY_INDEX; + + ndrivers = XINT (Flength (list)); + drivers = alloca (sizeof (Lisp_Object) * ndrivers); + for (i = 0; i < ndrivers; i++, list = XCDR (list)) + drivers[i] = XCAR (list); + vec = Fvconcat (ndrivers, drivers); + nfonts = ASIZE (vec); + + qsort (XVECTOR (vec)->contents, nfonts, sizeof (Lisp_Object), + compare_fonts_by_sort_order); result = Qnil; for (i = nfonts - 1; i >= 0; --i)