Skip to content

Commit

Permalink
app: [macOS] move destruction to NSView.dealloc
Browse files Browse the repository at this point in the history
The dealloc method is where we're guaranteed the NSView is no longer
used anywhere.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
  • Loading branch information
eliasnaur committed Feb 8, 2024
1 parent 1527e91 commit 5e5d164
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 6 deletions.
7 changes: 4 additions & 3 deletions app/os_macos.go
Original file line number Diff line number Diff line change
Expand Up @@ -869,14 +869,13 @@ func gio_onAttached(h C.uintptr_t, attached C.int) {
}
}

//export gio_onClose
func gio_onClose(h C.uintptr_t) {
//export gio_onDestroy
func gio_onDestroy(h C.uintptr_t) {
w := windowFor(h)
w.ProcessEvent(DestroyEvent{})
w.displayLink.Close()
w.displayLink = nil
cgo.Handle(h).Delete()
C.CFRelease(w.view)
w.view = 0
}

Expand Down Expand Up @@ -927,6 +926,8 @@ func newWindow(win *callbacks, options []Option) {
return
}
window := C.gio_createWindow(w.view, 0, 0, 0, 0, 0, 0)
// Release our reference now that the NSWindow has it.
C.CFRelease(w.view)
w.updateWindowMode()
w.Configure(options)
if nextTopLeft.x == 0 && nextTopLeft.y == 0 {
Expand Down
6 changes: 3 additions & 3 deletions app/os_macos.m
Original file line number Diff line number Diff line change
Expand Up @@ -90,9 +90,6 @@ - (CALayer *)makeBackingLayer {
}
- (void)viewDidMoveToWindow {
gio_onAttached(self.handle, self.window != nil ? 1 : 0);
if (self.window == nil) {
gio_onClose(self.handle);
}
}
- (void)mouseDown:(NSEvent *)event {
handleMouse(self, event, MOUSE_DOWN, 0, 0);
Expand Down Expand Up @@ -205,6 +202,9 @@ - (void)applicationWillUnhide:(NSNotification *)notification {
- (void)applicationDidHide:(NSNotification *)notification {
gio_onHide(self.handle);
}
- (void)dealloc {
gio_onDestroy(self.handle);
}
@end

// Delegates are weakly referenced from their peers. Nothing
Expand Down

0 comments on commit 5e5d164

Please sign in to comment.