From cd6107aa1acc242f71da80d53dae06f8909c0180 Mon Sep 17 00:00:00 2001 From: Sergey Fedorov Date: Mon, 13 Jul 2026 11:08:18 +0800 Subject: [PATCH 2/6] Cocoa: support 10.5 --- uitoolkit/quartz/cocoa.m | 39 +++++++++++++++++++++--- uitoolkit/quartz/ui_event_source-cocoa.m | 4 +++ 2 files changed, 38 insertions(+), 5 deletions(-) diff --git uitoolkit/quartz/cocoa.m uitoolkit/quartz/cocoa.m index 02409cd4..9caca702 100644 --- uitoolkit/quartz/cocoa.m +++ uitoolkit/quartz/cocoa.m @@ -18,6 +18,16 @@ #define USE_CGLAYER #endif +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1060 +#define STRING_PBOARD_TYPE NSPasteboardTypeString +#else +#define STRING_PBOARD_TYPE NSStringPboardType +#endif + +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 +#include +#endif + @interface MLTermView : NSView { ui_window_t *uiwindow; CGContextRef ctx; @@ -117,9 +127,22 @@ static void exit_program_dispatch(void *context) { static void monitor_pty_dispatch(void *context) { ui_event_source_process(); +#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 dispatch_sync_f(dispatch_get_main_queue(), NULL, exit_program_dispatch); +#else + exit_program_dispatch(NULL); +#endif } +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 +static void *monitor_pty_thread(void *arg) { + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + monitor_pty_dispatch(NULL); + [pool release]; + return NULL; +} +#endif + static void monitor_pty(void) { #if 0 /* normal user (Don't call before NSApplicationMain()) */ @@ -127,8 +150,14 @@ static void monitor_pty(void) { bl_priv_change_egid(bl_getgid()); #endif +#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 dispatch_async_f(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), NULL, monitor_pty_dispatch); +#else + pthread_t thread; + pthread_create(&thread, NULL, monitor_pty_thread, NULL); + pthread_detach(thread); +#endif } /* Undocumented */ @@ -1687,7 +1716,7 @@ u_int cocoa_font_get_advance(CGFontRef cg_font, u_int fontsize, int size_attr, void cocoa_clipboard_own(MLTermView *view) { NSPasteboard *pasteboard = [NSPasteboard generalPasteboard]; - [pasteboard declareTypes:[NSArray arrayWithObject:NSPasteboardTypeString] + [pasteboard declareTypes:[NSArray arrayWithObject:STRING_PBOARD_TYPE] owner:view]; } @@ -1698,7 +1727,7 @@ void cocoa_clipboard_set(const u_char *utf8, size_t len) { length:len encoding:NSUTF8StringEncoding]; - [pasteboard setString:str forType:NSPasteboardTypeString]; + [pasteboard setString:str forType:STRING_PBOARD_TYPE]; [str release]; } } @@ -1708,9 +1737,9 @@ const char *cocoa_clipboard_get(void) { NSString *available; available = [pasteboard - availableTypeFromArray:[NSArray arrayWithObject:NSPasteboardTypeString]]; - if ([available isEqualToString:NSPasteboardTypeString]) { - NSString *str = [pasteboard stringForType:NSPasteboardTypeString]; + availableTypeFromArray:[NSArray arrayWithObject:STRING_PBOARD_TYPE]]; + if ([available isEqualToString:STRING_PBOARD_TYPE]) { + NSString *str = [pasteboard stringForType:STRING_PBOARD_TYPE]; if (str != nil) { return [str UTF8String]; } diff --git uitoolkit/quartz/ui_event_source-cocoa.m uitoolkit/quartz/ui_event_source-cocoa.m index 7e0fa5bf..db9e7a13 100644 --- uitoolkit/quartz/ui_event_source-cocoa.m +++ uitoolkit/quartz/ui_event_source-cocoa.m @@ -123,7 +123,11 @@ int ui_event_source_process(void) { tval.tv_usec = 100000; /* 0.1 sec */ tval.tv_sec = 0; +#if defined(COCOA_TOUCH) || MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 dispatch_sync_f(dispatch_get_main_queue(), &ctx, ui_event_source_process_main); +#else + ui_event_source_process_main(&ctx); +#endif if (maxfd == -1 || ((ret = select(maxfd + 1, &read_fds, NULL, NULL, &tval)) < 0 && -- 2.54.0