diff options
Diffstat (limited to 'intern')
-rw-r--r-- | intern/ghost/intern/GHOST_SystemWin32.cpp | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/intern/ghost/intern/GHOST_SystemWin32.cpp b/intern/ghost/intern/GHOST_SystemWin32.cpp index 8e07bf4ea3d..28c86db53e2 100644 --- a/intern/ghost/intern/GHOST_SystemWin32.cpp +++ b/intern/ghost/intern/GHOST_SystemWin32.cpp @@ -2211,31 +2211,28 @@ char *GHOST_SystemWin32::getClipboard(bool selection) const void GHOST_SystemWin32::putClipboard(const char *buffer, bool selection) const { - if (selection) { + if (selection || !buffer) { return; } // for copying the selection, used on X11 if (OpenClipboard(NULL)) { - HLOCAL clipbuffer; - wchar_t *data; + EmptyClipboard(); - if (buffer) { - size_t len = count_utf_16_from_8(buffer); - EmptyClipboard(); + // Get length of buffer including the terminating null + size_t len = count_utf_16_from_8(buffer); - clipbuffer = LocalAlloc(LMEM_FIXED, sizeof(wchar_t) * len); - data = (wchar_t *)GlobalLock(clipbuffer); + HGLOBAL clipbuffer = GlobalAlloc(GMEM_MOVEABLE, sizeof(wchar_t) * len); + if (clipbuffer) { + wchar_t *data = (wchar_t *)GlobalLock(clipbuffer); conv_utf_8_to_16(buffer, data, len); - LocalUnlock(clipbuffer); + GlobalUnlock(clipbuffer); SetClipboardData(CF_UNICODETEXT, clipbuffer); } + CloseClipboard(); } - else { - return; - } } /* -------------------------------------------------------------------- */ |