mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-12-14 09:39:42 +00:00
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: martin rudalics <rudalics@gmx.at>
This commit is contained in:
parent
1dafab8936
commit
4fdebc016c
36
src/nsterm.m
36
src/nsterm.m
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user