aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsfan5 <sfan5@live.de>2021-08-30 21:51:24 +0200
committersfan5 <sfan5@live.de>2021-08-30 21:51:24 +0200
commit34f1f8d089ab1f7958c874265ff37cced54d18ed (patch)
tree9efc0cc71cab9feadbc515dd0a14f710e1c44bea
parent9c4b6f25ab73c413730f9c8d35f34ef7db7e2b33 (diff)
downloadirrlicht-34f1f8d089ab1f7958c874265ff37cced54d18ed.tar.xz
Make clipboard UTF-8 on Windows too
-rw-r--r--source/Irrlicht/COSOperator.cpp26
-rw-r--r--source/Irrlicht/COSOperator.h4
2 files changed, 21 insertions, 9 deletions
diff --git a/source/Irrlicht/COSOperator.cpp b/source/Irrlicht/COSOperator.cpp
index 64f841f..9ff4a0e 100644
--- a/source/Irrlicht/COSOperator.cpp
+++ b/source/Irrlicht/COSOperator.cpp
@@ -70,16 +70,20 @@ void COSOperator::copyToClipboard(const c8 *text) const
EmptyClipboard();
+ core::stringw tempbuffer;
+ core::multibyteToWString(tempbuffer, text);
+ const u32 size = (tempbuffer.size() + 1) * sizeof(wchar_t);
+
HGLOBAL clipbuffer;
- char * buffer;
+ void * buffer;
- clipbuffer = GlobalAlloc(GMEM_DDESHARE, strlen(text)+1);
- buffer = (char*)GlobalLock(clipbuffer);
+ clipbuffer = GlobalAlloc(GMEM_MOVEABLE, size);
+ buffer = GlobalLock(clipbuffer);
- strcpy(buffer, text);
+ memcpy(buffer, tempbuffer.c_str(), size);
GlobalUnlock(clipbuffer);
- SetClipboardData(CF_TEXT, clipbuffer);
+ SetClipboardData(CF_UNICODETEXT, clipbuffer);
CloseClipboard();
#elif defined(_IRR_COMPILE_WITH_OSX_DEVICE_)
@@ -113,13 +117,17 @@ const c8* COSOperator::getTextFromClipboard() const
if (!OpenClipboard(NULL))
return 0;
- char * buffer = 0;
+ wchar_t * buffer = 0;
+
+ HANDLE hData = GetClipboardData( CF_UNICODETEXT );
+ buffer = (wchar_t*) GlobalLock( hData );
+
+ core::wStringToMultibyte(ClipboardBuf, buffer);
- HANDLE hData = GetClipboardData( CF_TEXT );
- buffer = (char*)GlobalLock( hData );
GlobalUnlock( hData );
CloseClipboard();
- return buffer;
+
+ return ClipboardBuf.c_str();
#elif defined(_IRR_COMPILE_WITH_OSX_DEVICE_)
NSString* str = nil;
diff --git a/source/Irrlicht/COSOperator.h b/source/Irrlicht/COSOperator.h
index 2d47695..bdf4d1d 100644
--- a/source/Irrlicht/COSOperator.h
+++ b/source/Irrlicht/COSOperator.h
@@ -48,6 +48,10 @@ private:
CIrrDeviceLinux * IrrDeviceLinux;
#endif
+#ifdef _IRR_WINDOWS_API_
+ mutable core::stringc ClipboardBuf;
+#endif
+
};
} // end namespace