Fix crash on child frame creation (bug#65817)

* src/nsterm.m ([EmacsView initFrameFromEmacs:]): Reorder the way the
frame and layers are created.
([EmacsView makeBackingLayer]): Change to the newly renamed method
below.
([EmacsLayer initWithColorSpace:doubleBuffered:]):
([EmacsLayer initWithDoubleBuffered:]): Rename the method and remove
the colorspace argument as it's no longer able to be set on initial
creation.
* src/nsterm.h: Use new method prototype.
This commit is contained in:
Alan Third 2023-09-08 19:33:06 +01:00
parent fa24bbb631
commit c19a2dff5a
2 changed files with 16 additions and 13 deletions

View file

@ -748,7 +748,7 @@ enum ns_return_frame_mode
CGContextRef context;
bool doubleBuffered;
}
- (id) initWithColorSpace: (CGColorSpaceRef)cs doubleBuffered: (bool)db;
- (id) initWithDoubleBuffered: (bool)db;
- (void) setColorSpace: (CGColorSpaceRef)cs;
- (void) setDoubleBuffered: (bool)db;
- (CGContextRef) getContext;

View file

@ -7921,8 +7921,6 @@ - (instancetype) initFrameFromEmacs: (struct frame *)f
maximizing_resize = NO;
#endif
[[EmacsWindow alloc] initWithEmacsFrame:f];
#if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MIN_REQUIRED >= 101400
/* These settings mean AppKit will retain the contents of the frame
on resize. Unfortunately it also means the frame will not be
@ -7933,9 +7931,16 @@ - (instancetype) initFrameFromEmacs: (struct frame *)f
NSViewLayerContentsRedrawOnSetNeedsDisplay];
[self setLayerContentsPlacement:NSViewLayerContentsPlacementTopLeft];
/* initWithEmacsFrame can't create the toolbar before the layer is
set, so have another go at creating the toolbar here. */
[(EmacsWindow*)[self window] createToolbar:f];
[[EmacsWindow alloc] initWithEmacsFrame:f];
/* Now the NSWindow has been created, we can finish up configuring
the layer. */
[(EmacsLayer *)[self layer] setColorSpace:
[[[self window] colorSpace] CGColorSpace]];
[(EmacsLayer *)[self layer] setContentsScale:
[[self window] backingScaleFactor]];
#else
[[EmacsWindow alloc] initWithEmacsFrame:f];
#endif
if (ns_drag_types)
@ -8606,10 +8611,9 @@ - (instancetype)toggleToolbar: (id)sender
- (CALayer *)makeBackingLayer
{
EmacsLayer *l = [[EmacsLayer alloc]
initWithColorSpace:[[[self window] colorSpace] CGColorSpace]
doubleBuffered:FRAME_DOUBLE_BUFFERED (emacsframe)];
initWithDoubleBuffered:FRAME_DOUBLE_BUFFERED (emacsframe)];
[l setDelegate:(id)self];
[l setContentsScale:[[self window] backingScaleFactor]];
return l;
}
@ -10437,15 +10441,14 @@ @implementation EmacsLayer
cache. If no free surfaces are found in the cache then a new one
is created. */
- (id) initWithColorSpace: (CGColorSpaceRef)cs
doubleBuffered: (bool)db
- (id) initWithDoubleBuffered: (bool)db
{
NSTRACE ("[EmacsLayer initWithColorSpace:doubleBuffered:]");
NSTRACE ("[EmacsLayer initWithDoubleBuffered:]");
self = [super init];
if (self)
{
[self setColorSpace:cs];
[self setColorSpace:nil];
[self setDoubleBuffered:db];
cache = [[NSMutableArray arrayWithCapacity:(doubleBuffered ? 2 : 1)] retain];
}