]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix redrawing non-selected frame after resize on MS-Windows
authorEli Zaretskii <eliz@gnu.org>
Sun, 20 Nov 2016 17:28:37 +0000 (19:28 +0200)
committerEli Zaretskii <eliz@gnu.org>
Sun, 20 Nov 2016 17:28:37 +0000 (19:28 +0200)
* src/xdisp.c (redisplay_internal): If all the frames were
successfully updated, reset the "garbaged" flag of each frame, to
make sure it doesn't stay set.

* src/w32term.c (w32_read_socket): Don't clear the frame if it's
"garbaged", since expose_frame won't redraw the foreground then.
(Bug#24642)

src/w32term.c
src/xdisp.c

index e8d66c9e5a1f31306af9ed00b7133f3d970f2bbf..ae0f741f24ca8330e72931d955d821814bf2be1f 100644 (file)
@@ -4628,11 +4628,18 @@ w32_read_socket (struct terminal *terminal,
                }
              else
                {
-                 HDC hdc = get_frame_dc (f);
+                 /* Erase background again for safety.  But don't do
+                    that if the frame's 'garbaged' flag is set, since
+                    in that case expose_frame will do nothing, and if
+                    the various redisplay flags happen to be unset,
+                    we are left with a blank frame.  */
+                 if (!FRAME_GARBAGED_P (f))
+                   {
+                     HDC hdc = get_frame_dc (f);
 
-                 /* Erase background again for safety.  */
-                 w32_clear_rect (f, hdc, &msg.rect);
-                 release_frame_dc (f, hdc);
+                     w32_clear_rect (f, hdc, &msg.rect);
+                     release_frame_dc (f, hdc);
+                   }
                  expose_frame (f,
                                msg.rect.left,
                                msg.rect.top,
index c045ced000b180ef7e33b9292de1edb4bb3e6f72..1420a4a7e36e242ea7f60c2e5236df702bc20346 100644 (file)
@@ -14116,6 +14116,7 @@ redisplay_internal (void)
               if (f->updated_p)
                 {
                  f->redisplay = false;
+                 f->garbaged = false;
                   mark_window_display_accurate (f->root_window, true);
                   if (FRAME_TERMINAL (f)->frame_up_to_date_hook)
                     FRAME_TERMINAL (f)->frame_up_to_date_hook (f);