]> git.eshelyaron.com Git - emacs.git/commitdiff
* src/w32font.c (font_matches_spec): Filter out non-Japanese kana fonts.
authorJason Rumney <jasonr@gnu.org>
Sat, 5 Nov 2011 18:50:59 +0000 (02:50 +0800)
committerJason Rumney <jasonr@gnu.org>
Sat, 5 Nov 2011 18:50:59 +0000 (02:50 +0800)
(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
src/ChangeLog
src/w32font.c
src/w32term.c

index 07f622a2cc59ed127b0204a5278710be78e479cf..c14eb42983eff23613067b73c0445cc231008f6e 100644 (file)
@@ -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
 
 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).
 
index 6c1b4d0bc20a32c5f6ac86b947eefb5f034e787b..26bf4207de519d87921ed2796e47e634ba43aa17 100644 (file)
@@ -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)
index 39f1e245e18722acf85e8b2dc13392d8e178f61d..f876cff036315f39278425eda9e1fdf8c1b8cc3f 100644 (file)
@@ -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