summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Rumney <jasonr@gnu.org>2011-11-06 02:50:59 +0800
committerJason Rumney <jasonr@gnu.org>2011-11-06 02:50:59 +0800
commit226109108e955113828a46b1fe761a1164d1b12e (patch)
tree9c3085dc315363346b281b65658f07cca954cbc5
parent1e8110e753937138b7b6265a1da3617931083adc (diff)
downloademacs-226109108e955113828a46b1fe761a1164d1b12e.tar.gz
* src/w32font.c (font_matches_spec): Filter out non-Japanese kana fonts.
(add_font_entity_to_list): Filter out non-Japanese Shift-JIS fonts. (add_font_entity_to_list): Fix logic errors in mixed boolean and bitwise arithmetic preventing use of unicode-sip and non-truetype opentype fonts. Fixes: debbugs:6029
-rw-r--r--src/ChangeLog12
-rw-r--r--src/w32font.c27
-rw-r--r--src/w32term.c16
3 files changed, 42 insertions, 13 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 07f622a2cc5..c14eb42983e 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,12 @@
+2011-11-05 Jason Rumney <jasonr@gnu.org>
+
+ * w32font.c (font_matches_spec): Filter out non-Japanese kana fonts.
+ (add_font_entity_to_list): Filter out non-Japanese Shift-JIS
+ fonts (Bug#6029).
+ (add_font_entity_to_list): Fix logic errors in mixed boolean and
+ bitwise arithmetic preventing use of unicode-sip and non-truetype
+ opentype fonts.
+
2011-11-05 Eli Zaretskii <eliz@gnu.org>
* s/ms-w32.h (fstat, stat, utime): Move redirections to
@@ -2812,6 +2821,9 @@
2011-07-08 Jason Rumney <jasonr@gnu.org>
+ * w32term.c (x_make_frame_visible): Use SH_SHOWNORMAL rather than
+ SH_SHOW for hidden windows (Bug#5482).
+
* w32fns.c (w32_wnd_proc) [WM_TIMER, WM_SET_CURSOR]: Avoid using
frame struct members of non-existent frames (Bug#6284).
diff --git a/src/w32font.c b/src/w32font.c
index 6c1b4d0bc20..26bf4207de5 100644
--- a/src/w32font.c
+++ b/src/w32font.c
@@ -1292,6 +1292,15 @@ font_matches_spec (DWORD type, NEWTEXTMETRICEX *font,
= font_supported_scripts (&font->ntmFontSig);
if (! memq_no_quit (val, support))
return 0;
+
+ /* Avoid using non-Japanese fonts for Japanese, even
+ if they claim they are capable, due to known
+ breakage in Vista and Windows 7 fonts
+ (bug#6029). */
+ if (EQ (val, Qkana)
+ && (font->ntmTm.tmCharSet != SHIFTJIS_CHARSET
+ || !(font->ntmFontSig.fsCsb[0] & CSB_JAPANESE)))
+ return 0;
}
else
{
@@ -1507,7 +1516,7 @@ add_font_entity_to_list (ENUMLOGFONTEX *logical_font,
/* For uniscribe backend, consider only truetype or opentype fonts
that have some unicode coverage. */
if (match_data->opentype_only
- && ((!physical_font->ntmTm.ntmFlags & NTMFLAGS_OPENTYPE
+ && ((!(physical_font->ntmTm.ntmFlags & NTMFLAGS_OPENTYPE)
&& !(font_type & TRUETYPE_FONTTYPE))
|| !is_unicode))
return 1;
@@ -1568,8 +1577,8 @@ add_font_entity_to_list (ENUMLOGFONTEX *logical_font,
the bits for CJK ranges that include those characters. */
else if (EQ (spec_charset, Qunicode_sip))
{
- if (!physical_font->ntmFontSig.fsUsb[1] & 0x02000000
- || !physical_font->ntmFontSig.fsUsb[1] & 0x28000000)
+ if (!(physical_font->ntmFontSig.fsUsb[1] & 0x02000000)
+ || !(physical_font->ntmFontSig.fsUsb[1] & 0x28000000))
return 1;
}
@@ -1577,8 +1586,16 @@ add_font_entity_to_list (ENUMLOGFONTEX *logical_font,
/* If registry was specified, ensure it is reported as the same. */
if (!NILP (spec_charset))
- ASET (entity, FONT_REGISTRY_INDEX, spec_charset);
-
+ {
+ /* Avoid using non-Japanese fonts for Japanese, even if they
+ claim they are capable, due to known breakage in Vista
+ and Windows 7 fonts (bug#6029). */
+ if (logical_font->elfLogFont.lfCharSet == SHIFTJIS_CHARSET
+ && !(physical_font->ntmFontSig.fsCsb[0] & CSB_JAPANESE))
+ return 1;
+ else
+ ASET (entity, FONT_REGISTRY_INDEX, spec_charset);
+ }
/* Otherwise if using the uniscribe backend, report ANSI and DEFAULT
fonts as unicode and skip other charsets. */
else if (match_data->opentype_only)
diff --git a/src/w32term.c b/src/w32term.c
index 39f1e245e18..f876cff0363 100644
--- a/src/w32term.c
+++ b/src/w32term.c
@@ -5690,15 +5690,15 @@ x_make_frame_visible (struct frame *f)
f->output_data.w32->asked_for_visible = 1;
- /* The first of these seems to give more expected behavior, but
- was added as a commented out line in Sept 1997, with the
- second version remaining uncommented. There may have been
- some problem with it that led to it not being enabled,
- so the old version remains commented out below in case we
- decide we need to go back to it [23.0.60 2008-06-09]. */
+ /* According to a report in emacs-devel 2008-06-03, SW_SHOWNORMAL
+ causes unexpected behaviour when unminimizing frames that were
+ previously maximised. But only SW_SHOWNORMAL works properly for
+ frames that were truely hidden (using make-frame-invisible), so
+ we need it to avoid Bug#5482. It seems that async_iconified
+ is only set for minimised windows that are still visible, so
+ use that to determine the appropriate flag to pass ShowWindow. */
my_show_window (f, FRAME_W32_WINDOW (f),
- f->async_iconified ? SW_RESTORE : SW_SHOW);
- /* my_show_window (f, FRAME_W32_WINDOW (f), SW_SHOWNORMAL); */
+ f->async_iconified ? SW_RESTORE : SW_SHOWNORMAL);
}
/* Synchronize to ensure Emacs knows the frame is visible