diff -r 9d9495fabeb9 Lib/tkinter/__init__.py --- a/Lib/tkinter/__init__.py Sat May 12 15:51:51 2012 +0200 +++ b/Lib/tkinter/__init__.py Sun May 13 22:24:41 2012 +0100 @@ -152,6 +152,8 @@ """Internal function. Calling it will throw the exception SystemExit.""" raise SystemExit(code) +_windowingsystem_cached = None + _varnum = 0 class Variable: """Class to define value holders for e.g. buttons. @@ -540,12 +542,19 @@ 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): @@ -627,8 +636,16 @@ 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 @@ -1043,6 +1060,13 @@ if displayof is None: return ('-displayof', self._w) return () + @property + def _windowingsystem(self): + """Internal function.""" + global _windowingsystem_cached + if _windowingsystem_cached is None: + _windowingsystem_cached = self.tk.call('tk', 'windowingsystem') + return _windowingsystem_cached def _options(self, cnf, kw = None): """Internal function.""" if kw: