diff options
Diffstat (limited to 'backends/platform/sdl/macosx')
-rw-r--r-- | backends/platform/sdl/macosx/macosx.cpp | 4 | ||||
-rw-r--r-- | backends/platform/sdl/macosx/macosx.h | 1 | ||||
-rw-r--r-- | backends/platform/sdl/macosx/macosx_wrapper.h | 1 | ||||
-rw-r--r-- | backends/platform/sdl/macosx/macosx_wrapper.mm | 32 |
4 files changed, 33 insertions, 5 deletions
diff --git a/backends/platform/sdl/macosx/macosx.cpp b/backends/platform/sdl/macosx/macosx.cpp index 8ecbe7306c..62037200ea 100644 --- a/backends/platform/sdl/macosx/macosx.cpp +++ b/backends/platform/sdl/macosx/macosx.cpp @@ -124,6 +124,10 @@ Common::String OSystem_MacOSX::getTextFromClipboard() { return getTextFromClipboardMacOSX(); } +bool OSystem_MacOSX::setTextInClipboard(const Common::String &text) { + return setTextInClipboardMacOSX(text); +} + bool OSystem_MacOSX::openUrl(const Common::String &url) { CFURLRef urlRef = CFURLCreateWithBytes (NULL, (UInt8*)url.c_str(), url.size(), kCFStringEncodingASCII, NULL); OSStatus err = LSOpenCFURLRef(urlRef, NULL); diff --git a/backends/platform/sdl/macosx/macosx.h b/backends/platform/sdl/macosx/macosx.h index ba07364681..5ef30baa64 100644 --- a/backends/platform/sdl/macosx/macosx.h +++ b/backends/platform/sdl/macosx/macosx.h @@ -35,6 +35,7 @@ public: virtual bool hasTextInClipboard(); virtual Common::String getTextFromClipboard(); + virtual bool setTextInClipboard(const Common::String &text); virtual bool openUrl(const Common::String &url); diff --git a/backends/platform/sdl/macosx/macosx_wrapper.h b/backends/platform/sdl/macosx/macosx_wrapper.h index 84f0c1b2ba..ca4e433890 100644 --- a/backends/platform/sdl/macosx/macosx_wrapper.h +++ b/backends/platform/sdl/macosx/macosx_wrapper.h @@ -27,6 +27,7 @@ bool hasTextInClipboardMacOSX(); Common::String getTextFromClipboardMacOSX(); +bool setTextInClipboardMacOSX(const Common::String &text); Common::String getDesktopPathMacOSX(); #endif diff --git a/backends/platform/sdl/macosx/macosx_wrapper.mm b/backends/platform/sdl/macosx/macosx_wrapper.mm index 02516e5ffe..32dfa040cc 100644 --- a/backends/platform/sdl/macosx/macosx_wrapper.mm +++ b/backends/platform/sdl/macosx/macosx_wrapper.mm @@ -24,11 +24,13 @@ #define FORBIDDEN_SYMBOL_ALLOW_ALL #include "backends/platform/sdl/macosx/macosx_wrapper.h" +#include "common/translation.h" #include <AppKit/NSPasteboard.h> #include <Foundation/NSArray.h> #include <Foundation/NSPathUtilities.h> #include <AvailabilityMacros.h> +#include <CoreFoundation/CFString.h> bool hasTextInClipboardMacOSX() { return [[NSPasteboard generalPasteboard] availableTypeFromArray:[NSArray arrayWithObject:NSStringPboardType]] != nil; @@ -40,13 +42,33 @@ Common::String getTextFromClipboardMacOSX() { // Note: on OS X 10.6 and above it is recommanded to use NSPasteboardTypeString rather than NSStringPboardType. // But since we still target older version use NSStringPboardType. NSPasteboard *pb = [NSPasteboard generalPasteboard]; - NSString* str = [pb stringForType:NSStringPboardType]; + NSString *str = [pb stringForType:NSStringPboardType]; if (str == nil) return Common::String(); - // If the string cannot be represented using the requested encoding we get a null pointer below. - // This is fine as ScummVM would not know what to do with non-ASCII characters (although maybe - // we should use NSISOLatin1StringEncoding?). - return Common::String([str cStringUsingEncoding:NSASCIIStringEncoding]); + + // If translations are supported, use the current TranslationManager charset and otherwise + // use ASCII. If the string cannot be represented using the requested encoding we get a null + // pointer below, which is fine as ScummVM would not know what to do with the string anyway. +#ifdef USE_TRANSLATION + NSString* encStr = [NSString stringWithCString:TransMan.getCurrentCharset().c_str() encoding:NSASCIIStringEncoding]; + NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(CFStringConvertIANACharSetNameToEncoding((CFStringRef)encStr)); +#else + NSStringEncoding encoding = NSISOLatin1StringEncoding; +#endif + return Common::String([str cStringUsingEncoding:encoding]); +} + +bool setTextInClipboardMacOSX(const Common::String &text) { + NSPasteboard *pb = [NSPasteboard generalPasteboard]; + [pb declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil]; + +#ifdef USE_TRANSLATION + NSString* encStr = [NSString stringWithCString:TransMan.getCurrentCharset().c_str() encoding:NSASCIIStringEncoding]; + NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(CFStringConvertIANACharSetNameToEncoding((CFStringRef)encStr)); +#else + NSStringEncoding encoding = NSISOLatin1StringEncoding; +#endif + return [pb setString:[NSString stringWithCString:text.c_str() encoding:encoding] forType:NSStringPboardType]; } Common::String getDesktopPathMacOSX() { |