Fix freeze on older macOS's (bug#46687)

* src/nsterm.m ([EmacsView windowDidChangeBackingProperties:]):
([EmacsView viewWillDraw]): Only run this code when actually drawing
to an offscreen bitmap.
This commit is contained in:
Alan Third 2021-02-24 09:52:42 +00:00
parent 90ac405702
commit 056b468f74

View file

@ -8411,13 +8411,16 @@ - (void)windowDidChangeBackingProperties:(NSNotification *)notification
{
NSTRACE ("EmacsView windowDidChangeBackingProperties:]");
NSRect frame = [self frame];
if ([self wantsUpdateLayer])
{
NSRect frame = [self frame];
[surface release];
surface = nil;
[surface release];
surface = nil;
ns_clear_frame (emacsframe);
expose_frame (emacsframe, 0, 0, NSWidth (frame), NSHeight (frame));
ns_clear_frame (emacsframe);
expose_frame (emacsframe, 0, 0, NSWidth (frame), NSHeight (frame));
}
}
#endif /* NS_DRAW_TO_BUFFER */
@ -8480,7 +8483,7 @@ - (void)copyRect:(NSRect)srcRect to:(NSRect)dstRect
}
#ifdef NS_IMPL_COCOA
#ifdef NS_DRAW_TO_BUFFER
/* If the frame has been garbaged but the toolkit wants to draw, for
example when resizing the frame, we end up with a blank screen.
Sometimes this results in an unpleasant flicker, so try to
@ -8488,7 +8491,8 @@ - (void)copyRect:(NSRect)srcRect to:(NSRect)dstRect
- (void)viewWillDraw
{
if (FRAME_GARBAGED_P (emacsframe)
&& !redisplaying_p)
&& !redisplaying_p
&& [self wantsUpdateLayer])
{
/* If there is IO going on when redisplay is run here Emacs
crashes. I think it's because this code will always be run
@ -8505,10 +8509,8 @@ - (void)viewWillDraw
waiting_for_input = owfi;
}
}
#endif
#ifdef NS_DRAW_TO_BUFFER
- (BOOL)wantsUpdateLayer
{
#if MAC_OS_X_VERSION_MIN_REQUIRED < 101400