diff options
author | Martin v. Löwis <martin@v.loewis.de> | 2003-03-29 09:47:21 (GMT) |
---|---|---|
committer | Martin v. Löwis <martin@v.loewis.de> | 2003-03-29 09:47:21 (GMT) |
commit | 043bbc7da387f613f3ce60c20063e2a29baff372 (patch) | |
tree | 88d0ab81717efbdd9ebd22b8eb9bca41c346f803 /Lib/lib-tk | |
parent | 694570efcfce29878b5984a1861772791a1a3602 (diff) | |
download | cpython-043bbc7da387f613f3ce60c20063e2a29baff372.zip cpython-043bbc7da387f613f3ce60c20063e2a29baff372.tar.gz cpython-043bbc7da387f613f3ce60c20063e2a29baff372.tar.bz2 |
Patch #707701: Expect '??' in event fields. Fixes #698517.
Will backport to 2.2.
Diffstat (limited to 'Lib/lib-tk')
-rw-r--r-- | Lib/lib-tk/Tkinter.py | 48 |
1 files changed, 32 insertions, 16 deletions
diff --git a/Lib/lib-tk/Tkinter.py b/Lib/lib-tk/Tkinter.py index bd80c3b..6db671a 100644 --- a/Lib/lib-tk/Tkinter.py +++ b/Lib/lib-tk/Tkinter.py @@ -1035,38 +1035,54 @@ class Misc: """Internal function.""" if len(args) != len(self._subst_format): return args getboolean = self.tk.getboolean + getint = int + def getint_event(s): + """Tk changed behavior in 8.4.2, returning "??" rather more often.""" + try: + return int(s) + except ValueError: + return s + nsign, b, f, h, k, s, t, w, x, y, A, E, K, N, W, T, X, Y, D = args # Missing: (a, c, d, m, o, v, B, R) e = Event() + # serial field: valid vor all events + # number of button: ButtonPress and ButtonRelease events only + # height field: Configure, ConfigureRequest, Create, + # ResizeRequest, and Expose events only + # keycode field: KeyPress and KeyRelease events only + # time field: "valid for events that contain a time field" + # width field: Configure, ConfigureRequest, Create, ResizeRequest, + # and Expose events only + # x field: "valid for events that contain a x field" + # y field: "valid for events that contain a y field" + # keysym as decimal: KeyPress and KeyRelease events only + # x_root, y_root fields: ButtonPress, ButtonRelease, KeyPress, + # KeyRelease,and Motion events e.serial = getint(nsign) - e.num = getint(b) + e.num = getint_event(b) try: e.focus = getboolean(f) except TclError: pass - e.height = getint(h) - e.keycode = getint(k) - # For Visibility events, event state is a string and - # not an integer: - try: - e.state = getint(s) - except ValueError: - e.state = s - e.time = getint(t) - e.width = getint(w) - e.x = getint(x) - e.y = getint(y) + e.height = getint_event(h) + e.keycode = getint_event(k) + e.state = getint_event(s) + e.time = getint_event(t) + e.width = getint_event(w) + e.x = getint_event(x) + e.y = getint_event(y) e.char = A try: e.send_event = getboolean(E) except TclError: pass e.keysym = K - e.keysym_num = getint(N) + e.keysym_num = getint_event(N) e.type = T try: e.widget = self._nametowidget(W) except KeyError: e.widget = W - e.x_root = getint(X) - e.y_root = getint(Y) + e.x_root = getint_event(X) + e.y_root = getint_event(Y) try: e.delta = getint(D) except ValueError: |