]> code.delx.au - gnu-emacs/commitdiff
Fix redisplay of frame after loading new fonts
authorEli Zaretskii <eliz@gnu.org>
Mon, 27 Apr 2015 15:15:52 +0000 (18:15 +0300)
committerEli Zaretskii <eliz@gnu.org>
Mon, 27 Apr 2015 15:15:52 +0000 (18:15 +0300)
* src/xdisp.c (redisplay_internal): When retrying redisplay of a
frame because new fonts were loaded, disable all redisplay
optimizations on that frame by calling SET_FRAME_GARBAGED.
(Bug#20410)

src/xdisp.c

index 5a27adc2b18494421fc529b369029d7fb9522e08..c2f0b747c6ea2bc72fa3f999de035299053de237 100644 (file)
@@ -13359,6 +13359,13 @@ redisplay_internal (void)
          if (f->fonts_changed)
            {
              adjust_frame_glyphs (f);
+             /* Disable all redisplay optimizations for this frame.
+                This is because adjust_frame_glyphs resets the
+                enabled_p flag for all glyph rows of all windows, so
+                many optimizations will fail anyway, and some might
+                fail to test that flag and do bogus things as
+                result.  */
+             SET_FRAME_GARBAGED (f);
              f->fonts_changed = false;
            }
          /* If cursor type has been changed on the frame
@@ -13753,6 +13760,10 @@ redisplay_internal (void)
                  if (f->fonts_changed)
                    {
                      adjust_frame_glyphs (f);
+                     /* Disable all redisplay optimizations for this
+                        frame.  For the reasons, see the comment near
+                        the previous call to adjust_frame_glyphs above.  */
+                     SET_FRAME_GARBAGED (f);
                      f->fonts_changed = false;
                      goto retry_frame;
                    }