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 /Lib/tkinter | |
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.
Diffstat (limited to 'Lib/tkinter')
-rw-r--r-- | Lib/tkinter/__init__.py | 28 |
1 files changed, 26 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: |