[Python-checkins] python/dist/src/Lib/lib-tk Tkinter.py,1.160.10.2,1.160.10.3

loewis@users.sourceforge.net loewis@users.sourceforge.net
Sat, 29 Mar 2003 01:48:16 -0800


Update of /cvsroot/python/python/dist/src/Lib/lib-tk
In directory sc8-pr-cvs1:/tmp/cvs-serv21105

Modified Files:
      Tag: release22-maint
	Tkinter.py 
Log Message:
Patch #707701: Expect '??' in events. Fixes #698517.


Index: Tkinter.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/lib-tk/Tkinter.py,v
retrieving revision 1.160.10.2
retrieving revision 1.160.10.3
diff -C2 -d -r1.160.10.2 -r1.160.10.3
*** Tkinter.py	23 Aug 2002 15:27:52 -0000	1.160.10.2
--- Tkinter.py	29 Mar 2003 09:48:12 -0000	1.160.10.3
***************
*** 1025,1053 ****
          if len(args) != len(self._subst_format): return args
          getboolean = self.tk.getboolean
          getint = int
          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()
          e.serial = getint(nsign)
!         e.num = getint(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.char = A
          try: e.send_event = getboolean(E)
          except TclError: pass
          e.keysym = K
!         e.keysym_num = getint(N)
          e.type = T
          try:
--- 1025,1069 ----
          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_event(b)
          try: e.focus = getboolean(f)
          except TclError: pass
!         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_event(N)
          e.type = T
          try:
***************
*** 1055,1060 ****
          except KeyError:
              e.widget = W
!         e.x_root = getint(X)
!         e.y_root = getint(Y)
          try:
              e.delta = getint(D)
--- 1071,1076 ----
          except KeyError:
              e.widget = W
!         e.x_root = getint_event(X)
!         e.y_root = getint_event(Y)
          try:
              e.delta = getint(D)