This commit is contained in:
Camilla Berglund 2016-06-23 17:40:30 +02:00
parent 0ee8159f6c
commit 66149a29da

View File

@ -1546,8 +1546,8 @@ void _glfwPlatformSetCursor(_GLFWwindow* window, _GLFWcursor* cursor)
void _glfwPlatformSetClipboardString(_GLFWwindow* window, const char* string)
{
int characterCount;
HANDLE stringHandle;
void* clipboardBuffer;
HANDLE object;
WCHAR* buffer;
characterCount = MultiByteToWideChar(CP_UTF8, 0, string, -1, NULL, 0);
if (!characterCount)
@ -1557,42 +1557,43 @@ void _glfwPlatformSetClipboardString(_GLFWwindow* window, const char* string)
return;
}
stringHandle = GlobalAlloc(GMEM_MOVEABLE, characterCount * sizeof(WCHAR));
if (!stringHandle)
object = GlobalAlloc(GMEM_MOVEABLE, characterCount * sizeof(WCHAR));
if (!object)
{
_glfwInputError(GLFW_PLATFORM_ERROR,
"Win32: Failed to allocate global handle for clipboard");
return;
}
clipboardBuffer = GlobalLock(stringHandle);
if (!clipboardBuffer)
buffer = GlobalLock(object);
if (!buffer)
{
GlobalFree(stringHandle);
GlobalFree(object);
_glfwInputError(GLFW_PLATFORM_ERROR, "Win32: Failed to lock global handle");
return;
}
MultiByteToWideChar(CP_UTF8, 0, string, -1, clipboardBuffer, characterCount);
GlobalUnlock(stringHandle);
MultiByteToWideChar(CP_UTF8, 0, string, -1, buffer, characterCount);
GlobalUnlock(object);
if (!OpenClipboard(_glfw.win32.helperWindowHandle))
{
GlobalFree(stringHandle);
GlobalFree(object);
_glfwInputError(GLFW_PLATFORM_ERROR, "Win32: Failed to open clipboard");
return;
}
EmptyClipboard();
SetClipboardData(CF_UNICODETEXT, stringHandle);
SetClipboardData(CF_UNICODETEXT, object);
CloseClipboard();
}
const char* _glfwPlatformGetClipboardString(_GLFWwindow* window)
{
HANDLE stringHandle;
HANDLE object;
WCHAR* buffer;
if (!OpenClipboard(_glfw.win32.helperWindowHandle))
{
@ -1600,8 +1601,8 @@ const char* _glfwPlatformGetClipboardString(_GLFWwindow* window)
return NULL;
}
stringHandle = GetClipboardData(CF_UNICODETEXT);
if (!stringHandle)
object = GetClipboardData(CF_UNICODETEXT);
if (!object)
{
CloseClipboard();
@ -1610,11 +1611,20 @@ const char* _glfwPlatformGetClipboardString(_GLFWwindow* window)
return NULL;
}
buffer = GlobalLock(object);
if (!buffer)
{
CloseClipboard();
_glfwInputError(GLFW_PLATFORM_ERROR, "Win32: Failed to lock global handle");
return NULL;
}
free(_glfw.win32.clipboardString);
_glfw.win32.clipboardString =
_glfwCreateUTF8FromWideStringWin32(GlobalLock(stringHandle));
_glfwCreateUTF8FromWideStringWin32(buffer);
GlobalUnlock(stringHandle);
GlobalUnlock(object);
CloseClipboard();
if (!_glfw.win32.clipboardString)