summaryrefslogtreecommitdiff
path: root/src/nsterm.m
diff options
context:
space:
mode:
authorAlan Third <alan@idiocy.org>2023-09-08 19:33:06 +0100
committerAlan Third <alan@idiocy.org>2023-09-11 17:22:01 +0100
commitc19a2dff5ab0d16a1aed62c68baf1d23dd1649b5 (patch)
tree8d5a557d9fa0320948446a679097510055e10380 /src/nsterm.m
parentfa24bbb631fce7c5110dc322264224842cbb28d8 (diff)
downloademacs-c19a2dff5ab0d16a1aed62c68baf1d23dd1649b5.tar.gz
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.
Diffstat (limited to 'src/nsterm.m')
-rw-r--r--src/nsterm.m27
1 files changed, 15 insertions, 12 deletions
diff --git a/src/nsterm.m b/src/nsterm.m
index 28502ad1a2a..c0b5e1b898f 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -7921,8 +7921,6 @@ ns_in_echo_area (void)
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 @@ ns_in_echo_area (void)
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 @@ ns_in_echo_area (void)
- (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 @@ nswindow_orderedIndex_sort (id w1, id w2, void *c)
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];
}