diff options
author | Alan Third <alan@idiocy.org> | 2019-01-11 16:52:59 +0000 |
---|---|---|
committer | Alan Third <alan@idiocy.org> | 2019-01-15 16:03:06 +0000 |
commit | c9f6f86814165ae277fe1618135151d0cdf84b8e (patch) | |
tree | 9a2b269d14f80c6bf7f245ff8d96b92d29adf8f7 | |
parent | 00ba2267ede311da0cd53261780fb0b781ca42dd (diff) | |
download | emacs-c9f6f86814165ae277fe1618135151d0cdf84b8e.tar.gz |
Prevent redrawing if frame is garbaged
* src/nsterm.m ([EmacsView viewWillDraw]): Cancel drawing if the frame
has been garbaged.
* src/xdisp.c (expose_window_tree, expose_frame): Remove NS only
exceptions.
-rw-r--r-- | src/nsterm.m | 8 | ||||
-rw-r--r-- | src/xdisp.c | 14 |
2 files changed, 9 insertions, 13 deletions
diff --git a/src/nsterm.m b/src/nsterm.m index c09f684daf4..bbd2c84214c 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -8077,6 +8077,14 @@ not_in_argv (NSString *arg) } +- (void)viewWillDraw +{ + /* If the frame has been garbaged there's no point in redrawing + anything. */ + if (FRAME_GARBAGED_P (emacsframe)) + [self setNeedsDisplay:NO]; +} + - (void)drawRect: (NSRect)rect { const NSRect *rectList; diff --git a/src/xdisp.c b/src/xdisp.c index 94ce1c29a0c..0c3754a338f 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -32266,14 +32266,7 @@ expose_window_tree (struct window *w, XRectangle *r) struct frame *f = XFRAME (w->frame); bool mouse_face_overwritten_p = false; - /* NS toolkits may have aleady modified the frame in expectation of - a successful redraw, so don't bail out here if the frame is - garbaged. */ - while (w -#if !defined (HAVE_NS) - && !FRAME_GARBAGED_P (f) -#endif - ) + while (w && !FRAME_GARBAGED_P (f)) { mouse_face_overwritten_p |= (WINDOWP (w->contents) @@ -32301,16 +32294,11 @@ expose_frame (struct frame *f, int x, int y, int w, int h) TRACE ((stderr, "expose_frame ")); -#if !defined (HAVE_NS) - /* No need to redraw if frame will be redrawn soon except under NS - where the toolkit may have already modified the frame in - expectation of us redrawing it. */ if (FRAME_GARBAGED_P (f)) { TRACE ((stderr, " garbaged\n")); return; } -#endif /* If basic faces haven't been realized yet, there is no point in trying to redraw anything. This can happen when we get an expose |