Commit 4fdebc01 authored by Alan Third's avatar Alan Third
Browse files

Fix incorrect resizing behaviour on macOS (bug#48157, bug#48162)



* src/nsterm.m ([EmacsView viewDidResize:]): The drawing buffer can be
resized independently of Emacs's idea of the frame size.
Co-authored-by: default avatarmartin rudalics <rudalics@gmx.at>
parent 1dafab89
Pipeline #10614 failed with stages
in 13 minutes
......@@ -7303,16 +7303,34 @@ - (void)viewDidResize:(NSNotification *)notification
NSTRACE ("[EmacsView viewDidResize]");
#ifdef NS_DRAW_TO_BUFFER
/* If the buffer size doesn't match the view's backing size, destroy
the buffer and let it be recreated at the correct size later. */
if ([self wantsUpdateLayer] && surface)
{
NSRect surfaceRect = {{0, 0}, [surface getSize]};
NSRect frameRect = [[self window] convertRectToBacking:frame];
if (!NSEqualRects (frameRect, surfaceRect))
{
[surface release];
surface = nil;
[self setNeedsDisplay:YES];
}
}
#endif
neww = (int)NSWidth (frame);
newh = (int)NSHeight (frame);
oldw = FRAME_PIXEL_WIDTH (emacsframe);
oldh = FRAME_PIXEL_HEIGHT (emacsframe);
/* Don't want to do anything when the view size hasn't changed. */
if ((oldh == newh && oldw == neww)
|| (emacsframe->new_size_p
&& newh == emacsframe->new_height
&& neww == emacsframe->new_width))
if (emacsframe->new_size_p
? (newh == emacsframe->new_height
&& neww == emacsframe->new_width)
: (oldh == newh && oldw == neww))
{
NSTRACE_MSG ("No change");
return;
......@@ -7321,16 +7339,6 @@ - (void)viewDidResize:(NSNotification *)notification
NSTRACE_SIZE ("New size", NSMakeSize (neww, newh));
NSTRACE_SIZE ("Original size", NSMakeSize (oldw, oldh));
#ifdef NS_DRAW_TO_BUFFER
if ([self wantsUpdateLayer])
{
[surface release];
surface = nil;
[self setNeedsDisplay:YES];
}
#endif
change_frame_size (emacsframe, neww, newh, false, YES, false);
SET_FRAME_GARBAGED (emacsframe);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment