diff options
author | Ned Deily <nad@acm.org> | 2012-05-16 01:08:11 (GMT) |
---|---|---|
committer | Ned Deily <nad@acm.org> | 2012-05-16 01:08:11 (GMT) |
commit | 4d377d98a1b4ab115bcd816553600e603e388831 (patch) | |
tree | c7f71b285f862bc9f3d51e0945659e9f5cd019ee | |
parent | a790c9b6d6b5b706f1b29be316f2e41d24eeb295 (diff) | |
download | cpython-4d377d98a1b4ab115bcd816553600e603e388831.zip cpython-4d377d98a1b4ab115bcd816553600e603e388831.tar.gz cpython-4d377d98a1b4ab115bcd816553600e603e388831.tar.bz2 |
Issue #14777: In an X11 windowing environment, tkinter may return
undecoded UTF-8 bytes as a string when accessing the Tk clipboard.
Modify clipboad_get() to first request type UTF8_STRING when no
specific type is requested in an X11 windowing environment, falling
back to the current default type STRING if that fails.
Original patch by Thomas Kluyver.
-rw-r--r-- | Lib/tkinter/__init__.py | 28 | ||||
-rw-r--r-- | Misc/NEWS | 6 |
2 files changed, 32 insertions, 2 deletions
diff --git a/Lib/tkinter/__init__.py b/Lib/tkinter/__init__.py index 8af5065..de85bf9 100644 --- a/Lib/tkinter/__init__.py +++ b/Lib/tkinter/__init__.py @@ -526,12 +526,19 @@ class Misc: The type keyword specifies the form in which the data is to be returned and should be an atom name such as STRING - or FILE_NAME. Type defaults to STRING. + or FILE_NAME. Type defaults to STRING, except on X11, where the default + is to try UTF8_STRING and fall back to STRING. This command is equivalent to: selection_get(CLIPBOARD) """ + if 'type' not in kw and self._windowingsystem == 'x11': + try: + kw['type'] = 'UTF8_STRING' + return self.tk.call(('clipboard', 'get') + self._options(kw)) + except TclError: + del kw['type'] return self.tk.call(('clipboard', 'get') + self._options(kw)) def clipboard_clear(self, **kw): @@ -613,8 +620,16 @@ class Misc: A keyword parameter selection specifies the name of the selection and defaults to PRIMARY. A keyword parameter displayof specifies a widget on the display - to use.""" + to use. A keyword parameter type specifies the form of data to be + fetched, defaulting to STRING except on X11, where UTF8_STRING is tried + before STRING.""" if 'displayof' not in kw: kw['displayof'] = self._w + if 'type' not in kw and self._windowingsystem == 'x11': + try: + kw['type'] = 'UTF8_STRING' + return self.tk.call(('selection', 'get') + self._options(kw)) + except TclError: + del kw['type'] return self.tk.call(('selection', 'get') + self._options(kw)) def selection_handle(self, command, **kw): """Specify a function COMMAND to call if the X @@ -1029,6 +1044,15 @@ class Misc: if displayof is None: return ('-displayof', self._w) return () + @property + def _windowingsystem(self): + """Internal function.""" + try: + return self._root()._windowingsystem_cached + except AttributeError: + ws = self._root()._windowingsystem_cached = \ + self.tk.call('tk', 'windowingsystem') + return ws def _options(self, cnf, kw = None): """Internal function.""" if kw: @@ -63,6 +63,12 @@ Core and Builtins Library ------- +- Issue #14777: tkinter may return undecoded UTF-8 bytes as a string when + accessing the Tk clipboard. Modify clipboad_get() to first request type + UTF8_STRING when no specific type is requested in an X11 windowing + environment, falling back to the current default type STRING if that fails. + Original patch by Thomas Kluyver. + - Issue #12541: Be lenient with quotes around Realm field of HTTP Basic Authentation in urllib2. |