From 77fddfc7ea28b8e2946317735fef4ba92757b16c Mon Sep 17 00:00:00 2001 From: remmah Date: Wed, 3 Oct 2018 12:56:16 -0400 Subject: [PATCH] Modernized copy/paste APIs on macOS #7185 --- platform/osx/os_osx.mm | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/platform/osx/os_osx.mm b/platform/osx/os_osx.mm index 886ff4b3321..798a42fd2e0 100644 --- a/platform/osx/os_osx.mm +++ b/platform/osx/os_osx.mm @@ -1864,28 +1864,30 @@ bool OS_OSX::can_draw() const { void OS_OSX::set_clipboard(const String &p_text) { - NSArray *types = [NSArray arrayWithObjects:NSStringPboardType, nil]; + NSString *copiedString = [NSString stringWithUTF8String:p_text.utf8().get_data()]; + NSArray *copiedStringArray = [NSArray arrayWithObject:copiedString]; NSPasteboard *pasteboard = [NSPasteboard generalPasteboard]; - [pasteboard declareTypes:types owner:nil]; - [pasteboard setString:[NSString stringWithUTF8String:p_text.utf8().get_data()] - forType:NSStringPboardType]; + [pasteboard clearContents]; + [pasteboard writeObjects:copiedStringArray]; } String OS_OSX::get_clipboard() const { NSPasteboard *pasteboard = [NSPasteboard generalPasteboard]; + NSArray *classArray = [NSArray arrayWithObject:[NSString class]]; + NSDictionary *options = [NSDictionary dictionary]; - if (![[pasteboard types] containsObject:NSStringPboardType]) { + BOOL ok = [pasteboard canReadObjectForClasses:classArray options:options]; + + if (!ok) { return ""; } - NSString *object = [pasteboard stringForType:NSStringPboardType]; - if (!object) { - return ""; - } + NSArray *objectsToPaste = [pasteboard readObjectsForClasses:classArray options:options]; + NSString *string = [objectsToPaste objectAtIndex:0]; - char *utfs = strdup([object UTF8String]); + char *utfs = strdup([string UTF8String]); String ret; ret.parse_utf8(utfs); free(utfs);