From 605601636fd4c1d440a85b3d0adb4270428b8616 Mon Sep 17 00:00:00 2001 From: akshayaurora Date: Sun, 14 Dec 2014 01:04:23 +0530 Subject: [PATCH] clipboard_winctype fixes for windows --- kivy/core/clipboard/__init__.py | 12 ++++---- kivy/core/clipboard/clipboard_winctypes.py | 33 ++++++++-------------- 2 files changed, 17 insertions(+), 28 deletions(-) diff --git a/kivy/core/clipboard/__init__.py b/kivy/core/clipboard/__init__.py index 304cbbb41..8caee16d8 100644 --- a/kivy/core/clipboard/__init__.py +++ b/kivy/core/clipboard/__init__.py @@ -1,3 +1,4 @@ + ''' Clipboard ========= @@ -119,11 +120,6 @@ _platform = platform if _platform == 'android': _clipboards.append( ('android', 'clipboard_android', 'ClipboardAndroid')) - _clipboards.append( - ('sdl2', 'clipboard_sdl2', 'ClipboardSDL2')) -elif _platform == 'ios': - _clipboards.append( - ('sdl2', 'clipboard_sdl2', 'ClipboardSDL2')) elif _platform in ('macosx', 'linux', 'win'): if _platform == 'macosx': _clipboards.append( @@ -136,8 +132,9 @@ elif _platform in ('macosx', 'linux', 'win'): _clipboards.append( ('pygame', 'clipboard_pygame', 'ClipboardPygame')) - _clipboards.append( - ('sdl2', 'clipboard_sdl2', 'ClipboardSDL2')) + +_clipboards.append( + ('sdl2', 'clipboard_sdl2', 'ClipboardSDL2')) _clipboards.append( ('dummy', 'clipboard_dummy', 'ClipboardDummy')) @@ -145,3 +142,4 @@ Clipboard = core_select_lib('clipboard', _clipboards, True) del _clipboards del _platform + diff --git a/kivy/core/clipboard/clipboard_winctypes.py b/kivy/core/clipboard/clipboard_winctypes.py index 58d1f5c43..ebbcd1b63 100644 --- a/kivy/core/clipboard/clipboard_winctypes.py +++ b/kivy/core/clipboard/clipboard_winctypes.py @@ -10,10 +10,12 @@ from kivy.core.clipboard import ClipboardBase if platform != 'win': raise SystemError('unsupported platform for Windows clipboard') +import ctypes user32 = ctypes.windll.user32 kernel32 = ctypes.windll.kernel32 msvcrt = ctypes.cdll.msvcrt c_char_p = ctypes.c_char_p +c_wchar_p = ctypes.c_wchar_p class ClipboardWindows(ClipboardBase): @@ -21,37 +23,26 @@ class ClipboardWindows(ClipboardBase): def get(self, mimetype='text/plain'): user32.OpenClipboard(0) # 1 is CF_TEXT - pcontents = user32.GetClipboardData(1) - data = c_char_p(pcontents).value + pcontents = user32.GetClipboardData(13) + data = c_wchar_p(pcontents).value.encode('utf-16') #ctypes.windll.kernel32.GlobalUnlock(pcontents) user32.CloseClipboard() return data - def put(self, data, mimetype='text/plain'): + def put(self, text, mimetype='text/plain'): + print text, type(text) GMEM_DDESHARE = 0x2000 - user32.OpenClipboard(0) + CF_UNICODETEXT = 13 + user32.OpenClipboard(None) user32.EmptyClipboard() - try: - # works on Python 2 (bytes() only takes one argument) - hCd = kernel32.GlobalAlloc( - GMEM_DDESHARE, len(bytes(text)) + 1) - except TypeError: - # works on Python 3 (bytes() requires an encoding) - hCd = kernel32.GlobalAlloc( - GMEM_DDESHARE, len(bytes(text, 'ascii')) + 1) + hCd = kernel32.GlobalAlloc(GMEM_DDESHARE, len(text) + 2) pchData = kernel32.GlobalLock(hCd) - try: - # works on Python 2 (bytes() only takes one argument) - msvcrt.strcpy( - c_char_p(pchData), bytes(text)) - except TypeError: - # works on Python 3 (bytes() requires an encoding) - msvcrt.strcpy( - c_char_p(pchData), bytes(text, 'ascii')) + msvcrt.wcscpy(c_wchar_p(pchData), text) kernel32.GlobalUnlock(hCd) - user32.SetClipboardData(1, hCd) + user32.SetClipboardData(CF_UNICODETEXT, hCd) user32.CloseClipboard() def get_types(self): return list('text/plain',) +