summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ChangeLog5
-rw-r--r--src/fontset.c13
2 files changed, 18 insertions, 0 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index b46ba5ba392..7c09394cbf8 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
+2013-09-01 Jan Djärv <jan.h.d@swipnet.se>
+
+ * fontset.c (face_for_char): Check char in the current face font first
+ if HAVE_NS (Bug#15138).
+
2013-08-31 Martin Rudalics <rudalics@gmx.at>
* window.c (temp_output_buffer_show): Make sure window returned
diff --git a/src/fontset.c b/src/fontset.c
index 0bf716bf1b2..a6277b050d5 100644
--- a/src/fontset.c
+++ b/src/fontset.c
@@ -944,6 +944,19 @@ face_for_char (struct frame *f, struct face *face, int c, int pos, Lisp_Object o
if (ASCII_CHAR_P (c) || face->fontset < 0)
return face->ascii_face->id;
+#ifdef HAVE_NS
+ if (face->font)
+ {
+ /* Fonts often have characters in other scripts, like symbol, even if they
+ don't match script: symbol. So check if the character is present
+ in the current face first. Only enable for NS for now, but should
+ perhaps be general? */
+ Lisp_Object font_object;
+ XSETFONT (font_object, face->font);
+ if (font_has_char (f, font_object, c)) return face->id;
+ }
+#endif
+
eassert (fontset_id_valid_p (face->fontset));
fontset = FONTSET_FROM_ID (face->fontset);
eassert (!BASE_FONTSET_P (fontset));