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:
parent
fa24bbb631
commit
c19a2dff5a
2 changed files with 16 additions and 13 deletions
|
@ -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;
|
||||
|
|
27
src/nsterm.m
27
src/nsterm.m
|
@ -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];
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue