Mercurial > foo_out_sdl
comparison foosdk/sdk/foobar2000/shared/shared-apple.mm @ 1:20d02a178406 default tip
*: check in everything else
yay
| author | Paper <paper@tflc.us> |
|---|---|
| date | Mon, 05 Jan 2026 02:15:46 -0500 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 0:e9bb126753e7 | 1:20d02a178406 |
|---|---|
| 1 #include "shared.h" | |
| 2 #include "shared-apple.h" | |
| 3 | |
| 4 #import <Cocoa/Cocoa.h> | |
| 5 | |
| 6 bool uSetClipboardString(const char * str) { | |
| 7 @autoreleasepool { | |
| 8 @try { | |
| 9 NSPasteboard * pb = [NSPasteboard generalPasteboard]; | |
| 10 [pb clearContents]; | |
| 11 [pb setString: [NSString stringWithUTF8String: str] forType:NSPasteboardTypeString]; | |
| 12 return true; | |
| 13 } @catch (NSException *) { | |
| 14 | |
| 15 } | |
| 16 } | |
| 17 return false; | |
| 18 } | |
| 19 | |
| 20 bool uGetClipboardString(pfc::string_base & out) { | |
| 21 bool rv = false; | |
| 22 @autoreleasepool { | |
| 23 NSPasteboard * pb = [NSPasteboard generalPasteboard]; | |
| 24 NSString * str = [pb stringForType: NSPasteboardTypeString]; | |
| 25 if ( str != nil ) { | |
| 26 out = str.UTF8String; | |
| 27 rv = true; | |
| 28 } | |
| 29 } | |
| 30 return rv; | |
| 31 } | |
| 32 | |
| 33 static void wrapNoExcept(std::function<void()> f) noexcept {f();} | |
| 34 | |
| 35 void fb2k::crashOnException(std::function<void()> f, const char * context) { | |
| 36 #if 0 | |
| 37 auto fail = [context] ( const char * msg ) { | |
| 38 if (context) { | |
| 39 fb2k::crashWithMessage(pfc::format(context, ": ", msg)); | |
| 40 } else { | |
| 41 fb2k::crashWithMessage(msg); | |
| 42 } | |
| 43 }; | |
| 44 try { | |
| 45 @autoreleasepool { | |
| 46 @try { | |
| 47 f(); | |
| 48 } @catch(NSException * e) { | |
| 49 auto header = pfc::format("NSException: ", e.name.UTF8String, " reason: ", e.reason.UTF8String ); | |
| 50 uAddDebugEvent( header ); | |
| 51 uAddDebugEvent("Stack:"); | |
| 52 for(NSString * str in e.callStackSymbols ) { | |
| 53 uAddDebugEvent(str.UTF8String); | |
| 54 } | |
| 55 fail(header); | |
| 56 } | |
| 57 } | |
| 58 } catch(std::exception const & e) { | |
| 59 fail(pfc::format("C++ exception: ", e.what())); | |
| 60 } catch(...) { | |
| 61 fail("Invalid exception"); | |
| 62 } | |
| 63 #else | |
| 64 wrapNoExcept(f); | |
| 65 #endif | |
| 66 } |
