# HG changeset patch # User Olaf Wintermann # Date 1756035496 -7200 # Node ID e9f655afc7ed15b08174749c3f821c2c4155f8d4 # Parent 6fa3c629000f0feb2fa11b96d7617484ef0080a4 implement ui_call_mainthread (Cocoa) diff -r 6fa3c629000f -r e9f655afc7ed make/xcode/toolkit/toolkit.xcodeproj/project.pbxproj --- a/make/xcode/toolkit/toolkit.xcodeproj/project.pbxproj Sun Aug 24 13:30:56 2025 +0200 +++ b/make/xcode/toolkit/toolkit.xcodeproj/project.pbxproj Sun Aug 24 13:38:16 2025 +0200 @@ -37,7 +37,6 @@ ED6581312CFF1A8800F5402F /* toolkit.m in Sources */ = {isa = PBXBuildFile; fileRef = ED6581302CFF1A8800F5402F /* toolkit.m */; }; ED6581342CFF1F1900F5402F /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = ED6581332CFF1F1900F5402F /* AppDelegate.m */; }; ED6581392CFF287300F5402F /* EventData.m in Sources */ = {isa = PBXBuildFile; fileRef = ED6581362CFF287300F5402F /* EventData.m */; }; - ED65813A2CFF287300F5402F /* UiJob.m in Sources */ = {isa = PBXBuildFile; fileRef = ED6581382CFF287300F5402F /* UiJob.m */; }; ED6581432CFF3BCE00F5402F /* window.m in Sources */ = {isa = PBXBuildFile; fileRef = ED6581422CFF3BCE00F5402F /* window.m */; }; ED6581442CFF3BCE00F5402F /* button.m in Sources */ = {isa = PBXBuildFile; fileRef = ED65813C2CFF3BCE00F5402F /* button.m */; }; ED6581452CFF3BCE00F5402F /* Container.m in Sources */ = {isa = PBXBuildFile; fileRef = ED65813E2CFF3BCE00F5402F /* Container.m */; }; @@ -45,6 +44,7 @@ ED65815C2CFF3EE900F5402F /* MainWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = ED65815B2CFF3EE900F5402F /* MainWindow.m */; }; ED65815F2CFF4BF200F5402F /* WindowManager.m in Sources */ = {isa = PBXBuildFile; fileRef = ED65815E2CFF4BF200F5402F /* WindowManager.m */; }; ED679B0A2E5B266C001D4F71 /* label.m in Sources */ = {isa = PBXBuildFile; fileRef = ED679B092E5B266C001D4F71 /* label.m */; }; + ED679B0D2E5B2FB0001D4F71 /* UiThread.m in Sources */ = {isa = PBXBuildFile; fileRef = ED679B0C2E5B2FB0001D4F71 /* UiThread.m */; }; ED8687E52D999CF3002F3EC2 /* menu.m in Sources */ = {isa = PBXBuildFile; fileRef = ED8687E42D999CF3002F3EC2 /* menu.m */; }; EDB452C32E302C65006FB12D /* image.m in Sources */ = {isa = PBXBuildFile; fileRef = EDB452C22E302C65006FB12D /* image.m */; }; EDCD22272E59EEF5000612AF /* list.m in Sources */ = {isa = PBXBuildFile; fileRef = EDCD22262E59EEF5000612AF /* list.m */; }; @@ -117,8 +117,6 @@ ED6581332CFF1F1900F5402F /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = /Users/olaf/Projekte/toolkit/ui/cocoa/AppDelegate.m; sourceTree = ""; }; ED6581352CFF287300F5402F /* EventData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = EventData.h; path = /Users/olaf/Projekte/toolkit/ui/cocoa/EventData.h; sourceTree = ""; }; ED6581362CFF287300F5402F /* EventData.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = EventData.m; path = /Users/olaf/Projekte/toolkit/ui/cocoa/EventData.m; sourceTree = ""; }; - ED6581372CFF287300F5402F /* UiJob.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = UiJob.h; path = /Users/olaf/Projekte/toolkit/ui/cocoa/UiJob.h; sourceTree = ""; }; - ED6581382CFF287300F5402F /* UiJob.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = UiJob.m; path = /Users/olaf/Projekte/toolkit/ui/cocoa/UiJob.m; sourceTree = ""; }; ED65813B2CFF3BCE00F5402F /* button.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = button.h; path = /Users/olaf/Projekte/toolkit/ui/cocoa/button.h; sourceTree = ""; }; ED65813C2CFF3BCE00F5402F /* button.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = button.m; path = /Users/olaf/Projekte/toolkit/ui/cocoa/button.m; sourceTree = ""; }; ED65813D2CFF3BCE00F5402F /* Container.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Container.h; path = /Users/olaf/Projekte/toolkit/ui/cocoa/Container.h; sourceTree = ""; }; @@ -151,6 +149,8 @@ ED65815E2CFF4BF200F5402F /* WindowManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = WindowManager.m; path = /Users/olaf/Projekte/toolkit/ui/cocoa/WindowManager.m; sourceTree = ""; }; ED679B082E5B266C001D4F71 /* label.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = label.h; path = /Users/olaf/Projekte/toolkit/ui/cocoa/label.h; sourceTree = ""; }; ED679B092E5B266C001D4F71 /* label.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = label.m; path = /Users/olaf/Projekte/toolkit/ui/cocoa/label.m; sourceTree = ""; }; + ED679B0B2E5B2FB0001D4F71 /* UiThread.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = UiThread.h; path = /Users/olaf/Projekte/toolkit/ui/cocoa/UiThread.h; sourceTree = ""; }; + ED679B0C2E5B2FB0001D4F71 /* UiThread.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = UiThread.m; path = /Users/olaf/Projekte/toolkit/ui/cocoa/UiThread.m; sourceTree = ""; }; ED8687E32D999CF3002F3EC2 /* menu.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = menu.h; path = ../../../ui/cocoa/menu.h; sourceTree = SOURCE_ROOT; }; ED8687E42D999CF3002F3EC2 /* menu.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = menu.m; path = ../../../ui/cocoa/menu.m; sourceTree = SOURCE_ROOT; }; EDB452C12E302C65006FB12D /* image.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = image.h; path = /Users/olaf/Projekte/toolkit/ui/cocoa/image.h; sourceTree = ""; }; @@ -281,6 +281,8 @@ ED65812E2CFF1A7200F5402F /* cocoa */ = { isa = PBXGroup; children = ( + ED679B0B2E5B2FB0001D4F71 /* UiThread.h */, + ED679B0C2E5B2FB0001D4F71 /* UiThread.m */, ED679B082E5B266C001D4F71 /* label.h */, ED679B092E5B266C001D4F71 /* label.m */, EDCD22362E5A160A000612AF /* ListDelegate.h */, @@ -311,8 +313,6 @@ ED6581422CFF3BCE00F5402F /* window.m */, ED6581352CFF287300F5402F /* EventData.h */, ED6581362CFF287300F5402F /* EventData.m */, - ED6581372CFF287300F5402F /* UiJob.h */, - ED6581382CFF287300F5402F /* UiJob.m */, ED6581322CFF1F1900F5402F /* AppDelegate.h */, ED6581332CFF1F1900F5402F /* AppDelegate.m */, ED65812F2CFF1A8800F5402F /* toolkit.h */, @@ -445,6 +445,7 @@ ED6581282CFF1A3000F5402F /* string.c in Sources */, ED6581312CFF1A8800F5402F /* toolkit.m in Sources */, ED6581342CFF1F1900F5402F /* AppDelegate.m in Sources */, + ED679B0D2E5B2FB0001D4F71 /* UiThread.m in Sources */, ED6581292CFF1A3000F5402F /* allocator.c in Sources */, ED52BFB02D86FC5D00FD8BE5 /* text.m in Sources */, ED6581432CFF3BCE00F5402F /* window.m in Sources */, @@ -452,7 +453,6 @@ ED6581452CFF3BCE00F5402F /* Container.m in Sources */, ED6581462CFF3BCE00F5402F /* GridLayout.m in Sources */, ED6581392CFF287300F5402F /* EventData.m in Sources */, - ED65813A2CFF287300F5402F /* UiJob.m in Sources */, ED65812B2CFF1A3000F5402F /* buffer.c in Sources */, ED65812C2CFF1A3000F5402F /* printf.c in Sources */, ED6580F32CFF19F900F5402F /* object.c in Sources */, diff -r 6fa3c629000f -r e9f655afc7ed ui/cocoa/UiThread.m --- a/ui/cocoa/UiThread.m Sun Aug 24 13:30:56 2025 +0200 +++ b/ui/cocoa/UiThread.m Sun Aug 24 13:38:16 2025 +0200 @@ -26,7 +26,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ -#import "UiJob.h" +#import "UiThread.h" @implementation UiThread diff -r 6fa3c629000f -r e9f655afc7ed ui/cocoa/toolkit.h --- a/ui/cocoa/toolkit.h Sun Aug 24 13:30:56 2025 +0200 +++ b/ui/cocoa/toolkit.h Sun Aug 24 13:38:16 2025 +0200 @@ -31,6 +31,19 @@ #include "../common/context.h" #include "../common/object.h" +@interface UiAppCallback : NSObject { + ui_threadfunc callback; + void *userdata; +} + +- (id) initWithCallback:(ui_threadfunc)func userdata:(void*)userdata; + +- (void) callMainThread; + +- (void) mainThread:(id)n; + +@end + void ui_cocoa_onstartup(void); void ui_cocoa_onopen(const char *file); void ui_cocoa_onexit(void); diff -r 6fa3c629000f -r e9f655afc7ed ui/cocoa/toolkit.m --- a/ui/cocoa/toolkit.m Sun Aug 24 13:30:56 2025 +0200 +++ b/ui/cocoa/toolkit.m Sun Aug 24 13:38:16 2025 +0200 @@ -37,7 +37,7 @@ #import "image.h" #import "menu.h" #import "Toolbar.h" -#import "UiJob.h" +#import "UiThread.h" #import "AppDelegate.h" @@ -167,6 +167,27 @@ [thread start]; } -void ui_call_mainthread(ui_threadfunc tf, void* td) { +@implementation UiAppCallback + +- (id) initWithCallback:(ui_threadfunc)func userdata:(void*)userdata { + self->callback = func; + self->userdata = userdata; + return self; +} +- (void) callMainThread { + [self performSelectorOnMainThread:@selector(mainThread:) + withObject:nil + waitUntilDone:NO]; } + +- (void) mainThread:(id)n { + callback(userdata); +} + +@end + +void ui_call_mainthread(ui_threadfunc tf, void* td) { + UiAppCallback *cb = [[UiAppCallback alloc]initWithCallback:tf userdata:td]; + [cb callMainThread]; +}