diff options
author | Thierry Crozat | 2018-04-10 23:41:10 +0100 |
---|---|---|
committer | Thierry Crozat | 2018-04-29 21:47:10 +0100 |
commit | 3fe0e3c38ee63534486a4353cdab1cfc76dab74f (patch) | |
tree | 99511156232ea131938e8fa83807c675862f23e3 /backends | |
parent | a23216fbfcbe5b345f27d648775e6da6780e4dbd (diff) | |
download | scummvm-rg350-3fe0e3c38ee63534486a4353cdab1cfc76dab74f.tar.gz scummvm-rg350-3fe0e3c38ee63534486a4353cdab1cfc76dab74f.tar.bz2 scummvm-rg350-3fe0e3c38ee63534486a4353cdab1cfc76dab74f.zip |
OSYSTEM: Add API to copy text to clipboard
This has also been implemented for the SDL2 and macOS backends.
Diffstat (limited to 'backends')
-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 | 8 | ||||
-rw-r--r-- | backends/platform/sdl/sdl.cpp | 9 | ||||
-rw-r--r-- | backends/platform/sdl/sdl.h | 1 |
6 files changed, 23 insertions, 1 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..0a1478fe59 100644 --- a/backends/platform/sdl/macosx/macosx_wrapper.mm +++ b/backends/platform/sdl/macosx/macosx_wrapper.mm @@ -40,7 +40,7 @@ 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. @@ -49,6 +49,12 @@ Common::String getTextFromClipboardMacOSX() { return Common::String([str cStringUsingEncoding:NSASCIIStringEncoding]); } +bool setTextInClipboardMacOSX(const Common::String &text) { + NSPasteboard *pb = [NSPasteboard generalPasteboard]; + [pb declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil]; + return [pb setString:[NSString stringWithCString:text.c_str() encoding:NSASCIIStringEncoding] forType:NSStringPboardType]; +} + Common::String getDesktopPathMacOSX() { // The recommanded method is to use NSFileManager. // NSUrl *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDesktopDirectory inDomains:NSUserDomainMask] firstObject]; diff --git a/backends/platform/sdl/sdl.cpp b/backends/platform/sdl/sdl.cpp index 3082a69ebf..8a60e9231b 100644 --- a/backends/platform/sdl/sdl.cpp +++ b/backends/platform/sdl/sdl.cpp @@ -513,6 +513,15 @@ Common::String OSystem_SDL::getTextFromClipboard() { #endif } +bool OSystem_SDL::setTextInClipboard(const Common::String &text) { +#if SDL_VERSION_ATLEAST(2, 0, 0) + // FIXME: The string we get from SDL is in UTF-8 and should probably be converted. + return SDL_SetClipboardText(text.c_str()) == 0; +#else + return false; +#endif +} + uint32 OSystem_SDL::getMillis(bool skipRecord) { uint32 millis = SDL_GetTicks(); diff --git a/backends/platform/sdl/sdl.h b/backends/platform/sdl/sdl.h index 61513fa65f..c746d2d2dd 100644 --- a/backends/platform/sdl/sdl.h +++ b/backends/platform/sdl/sdl.h @@ -72,6 +72,7 @@ public: // Clipboard virtual bool hasTextInClipboard(); virtual Common::String getTextFromClipboard(); + virtual bool setTextInClipboard(const Common::String &text); virtual void setWindowCaption(const char *caption); virtual void addSysArchivesToSearchSet(Common::SearchSet &s, int priority = 0); |