From c93457a4911ee4225702a9b50b703fdc71d2cba4 Mon Sep 17 00:00:00 2001 From: Robert Lillack Date: Tue, 14 May 2024 09:14:39 +0200 Subject: [PATCH] application: Add RunOnMainLoop --- application.go | 14 ++++++++++++++ application.h | 4 +++- application.m | 7 +++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/application.go b/application.go index 6e503d2..2aa03a9 100644 --- a/application.go +++ b/application.go @@ -4,6 +4,7 @@ package gocoa // #cgo LDFLAGS: -framework Cocoa // #include "application.h" import "C" +import "runtime/cgo" var appDidFinishLaunchingFunc func() @@ -34,3 +35,16 @@ func callOnApplicationDidFinishLaunchingHandler() { appDidFinishLaunchingFunc() } } + +//export go_callback +func go_callback(h C.uintptr_t) { + hnd := cgo.Handle(h) + fn := hnd.Value().(func()) + fn() + hnd.Delete() +} + +func RunOnMainLoop(fn func()) { + h := cgo.NewHandle(fn) + C.RunOnMainLoop(C.uintptr_t(h)) +} diff --git a/application.h b/application.h index 01dbfd1..876e7fb 100644 --- a/application.h +++ b/application.h @@ -1,5 +1,7 @@ +#include #import void InitSharedApplication(); void RunApplication(); -void TerminateApplication(); \ No newline at end of file +void TerminateApplication(); +void RunOnMainLoop(uintptr_t h); \ No newline at end of file diff --git a/application.m b/application.m index 7e05f56..572b03b 100644 --- a/application.m +++ b/application.m @@ -31,4 +31,11 @@ void RunApplication() { void TerminateApplication() { [NSApp terminate:nil]; +} + +extern void go_callback(uintptr_t h); +void RunOnMainLoop(uintptr_t h) { + dispatch_async(dispatch_get_main_queue(), ^{ + go_callback(h); + }); } \ No newline at end of file