Tk Source Code

Hex Artifact Content
Login
Bounty program for improvements to Tcl and certain Tcl packages.
Tcl 2019 Conference, Houston/TX, US, Nov 4-8
Send your abstracts to [email protected]
or submit via the online form by Sep 9.

Artifact 6377cb0d762b7261e1a0e9a144b18a844ab1444f7e2af3584a85a3ee22ba3a14:


0000: 23 20 54 68 69 73 20 66 69 6c 65 20 69 73 20 61  # This file is a
0010: 20 54 63 6c 20 73 63 72 69 70 74 20 74 6f 20 74   Tcl script to t
0020: 65 73 74 20 6f 75 74 20 54 6b 27 73 20 22 62 69  est out Tk's "bi
0030: 6e 64 22 20 61 6e 64 20 22 62 69 6e 64 74 61 67  nd" and "bindtag
0040: 73 22 0a 23 20 63 6f 6d 6d 61 6e 64 73 20 70 6c  s".# commands pl
0050: 75 73 20 74 68 65 20 70 72 6f 63 65 64 75 72 65  us the procedure
0060: 73 20 69 6e 20 74 6b 42 69 6e 64 2e 63 2e 20 20  s in tkBind.c.  
0070: 49 74 20 69 73 20 6f 72 67 61 6e 69 7a 65 64 20  It is organized 
0080: 69 6e 20 74 68 65 0a 23 20 73 74 61 6e 64 61 72  in the.# standar
0090: 64 20 66 61 73 68 69 6f 6e 20 66 6f 72 20 54 63  d fashion for Tc
00a0: 6c 20 74 65 73 74 73 2e 0a 23 0a 23 20 43 6f 70  l tests..#.# Cop
00b0: 79 72 69 67 68 74 20 28 63 29 20 31 39 39 34 20  yright (c) 1994 
00c0: 54 68 65 20 52 65 67 65 6e 74 73 20 6f 66 20 74  The Regents of t
00d0: 68 65 20 55 6e 69 76 65 72 73 69 74 79 20 6f 66  he University of
00e0: 20 43 61 6c 69 66 6f 72 6e 69 61 2e 0a 23 20 43   California..# C
00f0: 6f 70 79 72 69 67 68 74 20 28 63 29 20 31 39 39  opyright (c) 199
0100: 34 2d 31 39 39 35 20 53 75 6e 20 4d 69 63 72 6f  4-1995 Sun Micro
0110: 73 79 73 74 65 6d 73 2c 20 49 6e 63 2e 0a 23 20  systems, Inc..# 
0120: 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 31 39  Copyright (c) 19
0130: 39 38 2d 31 39 39 39 20 62 79 20 53 63 72 69 70  98-1999 by Scrip
0140: 74 69 63 73 20 43 6f 72 70 6f 72 61 74 69 6f 6e  tics Corporation
0150: 2e 0a 23 20 41 6c 6c 20 72 69 67 68 74 73 20 72  ..# All rights r
0160: 65 73 65 72 76 65 64 2e 0a 0a 70 61 63 6b 61 67  eserved...packag
0170: 65 20 72 65 71 75 69 72 65 20 74 63 6c 74 65 73  e require tcltes
0180: 74 20 32 2e 32 0a 6e 61 6d 65 73 70 61 63 65 20  t 2.2.namespace 
0190: 69 6d 70 6f 72 74 20 3a 3a 74 63 6c 74 65 73 74  import ::tcltest
01a0: 3a 3a 2a 0a 65 76 61 6c 20 74 63 6c 74 65 73 74  ::*.eval tcltest
01b0: 3a 3a 63 6f 6e 66 69 67 75 72 65 20 24 61 72 67  ::configure $arg
01c0: 76 0a 74 63 6c 74 65 73 74 3a 3a 6c 6f 61 64 54  v.tcltest::loadT
01d0: 65 73 74 65 64 43 6f 6d 6d 61 6e 64 73 0a 74 6b  estedCommands.tk
01e0: 20 75 73 65 69 6e 70 75 74 6d 65 74 68 6f 64 73   useinputmethods
01f0: 20 30 0a 0a 74 6f 70 6c 65 76 65 6c 20 2e 74 20   0..toplevel .t 
0200: 2d 77 69 64 74 68 20 31 30 30 20 2d 68 65 69 67  -width 100 -heig
0210: 68 74 20 35 30 0a 77 6d 20 67 65 6f 6d 20 2e 74  ht 50.wm geom .t
0220: 20 2b 30 2b 30 0a 75 70 64 61 74 65 20 69 64 6c   +0+0.update idl
0230: 65 74 61 73 6b 73 0a 0a 66 6f 72 65 61 63 68 20  etasks..foreach 
0240: 70 20 5b 65 76 65 6e 74 20 69 6e 66 6f 5d 20 7b  p [event info] {
0250: 65 76 65 6e 74 20 64 65 6c 65 74 65 20 24 70 7d  event delete $p}
0260: 0a 66 6f 72 65 61 63 68 20 65 76 65 6e 74 20 5b  .foreach event [
0270: 62 69 6e 64 20 54 65 73 74 5d 20 7b 0a 20 20 20  bind Test] {.   
0280: 20 62 69 6e 64 20 54 65 73 74 20 24 65 76 65 6e   bind Test $even
0290: 74 20 7b 7d 0a 7d 0a 66 6f 72 65 61 63 68 20 65  t {}.}.foreach e
02a0: 76 65 6e 74 20 5b 62 69 6e 64 20 61 6c 6c 5d 20  vent [bind all] 
02b0: 7b 0a 20 20 20 20 62 69 6e 64 20 61 6c 6c 20 24  {.    bind all $
02c0: 65 76 65 6e 74 20 7b 7d 0a 7d 0a 0a 70 72 6f 63  event {}.}..proc
02d0: 20 75 6e 73 65 74 42 69 6e 64 69 6e 67 73 20 7b   unsetBindings {
02e0: 7d 20 7b 0a 20 20 20 20 62 69 6e 64 20 61 6c 6c  } {.    bind all
02f0: 20 3c 45 6e 74 65 72 3e 20 7b 7d 0a 20 20 20 20   <Enter> {}.    
0300: 62 69 6e 64 20 54 65 73 74 20 3c 45 6e 74 65 72  bind Test <Enter
0310: 3e 20 7b 7d 0a 20 20 20 20 62 69 6e 64 20 54 6f  > {}.    bind To
0320: 70 6c 65 76 65 6c 20 3c 45 6e 74 65 72 3e 20 7b  plevel <Enter> {
0330: 7d 0a 20 20 20 20 62 69 6e 64 20 78 79 7a 20 3c  }.    bind xyz <
0340: 45 6e 74 65 72 3e 20 7b 7d 0a 20 20 20 20 62 69  Enter> {}.    bi
0350: 6e 64 20 7b 61 20 62 7d 20 3c 45 6e 74 65 72 3e  nd {a b} <Enter>
0360: 20 7b 7d 0a 20 20 20 20 62 69 6e 64 20 2e 74 20   {}.    bind .t 
0370: 3c 45 6e 74 65 72 3e 20 7b 7d 0a 7d 0a 0a 23 20  <Enter> {}.}..# 
0380: 6d 6f 76 65 20 74 68 65 20 6d 6f 75 73 65 20 70  move the mouse p
0390: 6f 69 6e 74 65 72 20 61 77 61 79 20 6f 66 20 74  ointer away of t
03a0: 68 65 20 74 65 73 74 69 6e 67 20 61 72 65 61 0a  he testing area.
03b0: 23 20 6f 74 68 65 72 77 69 73 65 20 73 6f 6d 65  # otherwise some
03c0: 20 73 70 75 72 69 6f 75 73 20 65 76 65 6e 74 73   spurious events
03d0: 20 6d 61 79 20 70 6f 6c 6c 75 74 65 20 74 68 65   may pollute the
03e0: 20 74 65 73 74 73 0a 74 6f 70 6c 65 76 65 6c 20   tests.toplevel 
03f0: 2e 74 6f 70 0a 77 6d 20 67 65 6f 6d 65 74 72 79  .top.wm geometry
0400: 20 2e 74 6f 70 20 35 30 78 35 30 2d 35 30 2d 35   .top 50x50-50-5
0410: 30 0a 75 70 64 61 74 65 0a 65 76 65 6e 74 20 67  0.update.event g
0420: 65 6e 65 72 61 74 65 20 2e 74 6f 70 20 3c 42 75  enerate .top <Bu
0430: 74 74 6f 6e 2d 31 3e 20 2d 77 61 72 70 20 31 0a  tton-1> -warp 1.
0440: 75 70 64 61 74 65 0a 64 65 73 74 72 6f 79 20 2e  update.destroy .
0450: 74 6f 70 0a 0a 74 65 73 74 20 62 69 6e 64 2d 31  top..test bind-1
0460: 2e 31 20 7b 62 69 6e 64 20 63 6f 6d 6d 61 6e 64  .1 {bind command
0470: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
0480: 6e 64 0a 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65  nd.} -returnCode
0490: 73 20 65 72 72 6f 72 20 2d 72 65 73 75 6c 74 20  s error -result 
04a0: 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  {wrong # args: s
04b0: 68 6f 75 6c 64 20 62 65 20 22 62 69 6e 64 20 77  hould be "bind w
04c0: 69 6e 64 6f 77 20 3f 70 61 74 74 65 72 6e 3f 20  indow ?pattern? 
04d0: 3f 63 6f 6d 6d 61 6e 64 3f 22 7d 0a 74 65 73 74  ?command?"}.test
04e0: 20 62 69 6e 64 2d 31 2e 32 20 7b 62 69 6e 64 20   bind-1.2 {bind 
04f0: 63 6f 6d 6d 61 6e 64 7d 20 2d 62 6f 64 79 20 7b  command} -body {
0500: 0a 20 20 20 20 62 69 6e 64 20 61 20 62 20 63 20  .    bind a b c 
0510: 64 0a 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73  d.} -returnCodes
0520: 20 65 72 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b   error -result {
0530: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
0540: 6f 75 6c 64 20 62 65 20 22 62 69 6e 64 20 77 69  ould be "bind wi
0550: 6e 64 6f 77 20 3f 70 61 74 74 65 72 6e 3f 20 3f  ndow ?pattern? ?
0560: 63 6f 6d 6d 61 6e 64 3f 22 7d 0a 74 65 73 74 20  command?"}.test 
0570: 62 69 6e 64 2d 31 2e 33 20 7b 62 69 6e 64 20 63  bind-1.3 {bind c
0580: 6f 6d 6d 61 6e 64 7d 20 2d 62 6f 64 79 20 7b 0a  ommand} -body {.
0590: 20 20 20 20 62 69 6e 64 20 2e 67 6f 72 70 0a 7d      bind .gorp.}
05a0: 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65 72   -returnCodes er
05b0: 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 62 61 64  ror -result {bad
05c0: 20 77 69 6e 64 6f 77 20 70 61 74 68 20 6e 61 6d   window path nam
05d0: 65 20 22 2e 67 6f 72 70 22 7d 0a 74 65 73 74 20  e ".gorp"}.test 
05e0: 62 69 6e 64 2d 31 2e 34 20 7b 62 69 6e 64 20 63  bind-1.4 {bind c
05f0: 6f 6d 6d 61 6e 64 7d 20 2d 62 6f 64 79 20 7b 0a  ommand} -body {.
0600: 20 20 20 20 62 69 6e 64 20 66 6f 6f 0a 7d 20 2d      bind foo.} -
0610: 72 65 74 75 72 6e 43 6f 64 65 73 20 6f 6b 20 2d  returnCodes ok -
0620: 72 65 73 75 6c 74 20 7b 7d 0a 74 65 73 74 20 62  result {}.test b
0630: 69 6e 64 2d 31 2e 35 20 7b 62 69 6e 64 20 63 6f  ind-1.5 {bind co
0640: 6d 6d 61 6e 64 7d 20 2d 62 6f 64 79 20 7b 0a 20  mmand} -body {. 
0650: 20 20 20 62 69 6e 64 20 2e 74 20 3c 67 6f 72 70     bind .t <gorp
0660: 2d 3e 20 7b 7d 0a 7d 20 2d 72 65 74 75 72 6e 43  -> {}.} -returnC
0670: 6f 64 65 73 20 6f 6b 20 2d 72 65 73 75 6c 74 20  odes ok -result 
0680: 7b 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31 2e 36  {}.test bind-1.6
0690: 20 7b 62 69 6e 64 20 63 6f 6d 6d 61 6e 64 7d 20   {bind command} 
06a0: 2d 62 6f 64 79 20 7b 0a 20 20 20 20 66 72 61 6d  -body {.    fram
06b0: 65 20 2e 74 2e 66 0a 20 20 20 20 62 69 6e 64 20  e .t.f.    bind 
06c0: 2e 74 2e 66 20 3c 45 6e 74 65 72 3e 20 7b 74 65  .t.f <Enter> {te
06d0: 73 74 20 73 63 72 69 70 74 7d 0a 20 20 20 20 73  st script}.    s
06e0: 65 74 20 72 65 73 75 6c 74 20 5b 62 69 6e 64 20  et result [bind 
06f0: 2e 74 2e 66 20 3c 45 6e 74 65 72 3e 5d 0a 20 20  .t.f <Enter>].  
0700: 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 45 6e 74    bind .t.f <Ent
0710: 65 72 3e 20 7b 7d 0a 20 20 20 20 6c 69 73 74 20  er> {}.    list 
0720: 24 72 65 73 75 6c 74 20 5b 62 69 6e 64 20 2e 74  $result [bind .t
0730: 2e 66 20 3c 45 6e 74 65 72 3e 5d 0a 7d 20 2d 63  .f <Enter>].} -c
0740: 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73  leanup {.    des
0750: 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73  troy .t.f.} -res
0760: 75 6c 74 20 7b 7b 74 65 73 74 20 73 63 72 69 70  ult {{test scrip
0770: 74 7d 20 7b 7d 7d 0a 74 65 73 74 20 62 69 6e 64  t} {}}.test bind
0780: 2d 31 2e 37 20 7b 62 69 6e 64 20 63 6f 6d 6d 61  -1.7 {bind comma
0790: 6e 64 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  nd} -body {.    
07a0: 66 72 61 6d 65 20 2e 74 2e 66 0a 20 20 20 20 62  frame .t.f.    b
07b0: 69 6e 64 20 2e 74 2e 66 20 3c 45 6e 74 65 72 3e  ind .t.f <Enter>
07c0: 20 7b 74 65 73 74 20 73 63 72 69 70 74 7d 0a 20   {test script}. 
07d0: 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 45 6e     bind .t.f <En
07e0: 74 65 72 3e 20 7b 2b 6d 6f 72 65 20 74 65 78 74  ter> {+more text
07f0: 7d 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20  }.    bind .t.f 
0800: 3c 45 6e 74 65 72 3e 0a 7d 20 2d 63 6c 65 61 6e  <Enter>.} -clean
0810: 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79  up {.    destroy
0820: 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20   .t.f.} -result 
0830: 7b 74 65 73 74 20 73 63 72 69 70 74 0a 6d 6f 72  {test script.mor
0840: 65 20 74 65 78 74 7d 0a 74 65 73 74 20 62 69 6e  e text}.test bin
0850: 64 2d 31 2e 38 20 7b 62 69 6e 64 20 63 6f 6d 6d  d-1.8 {bind comm
0860: 61 6e 64 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20  and} -body {.   
0870: 20 62 69 6e 64 20 2e 74 20 3c 67 6f 72 70 2d 3e   bind .t <gorp->
0880: 20 7b 74 65 73 74 20 73 63 72 69 70 74 7d 20 0a   {test script} .
0890: 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65  } -returnCodes e
08a0: 72 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 62 61  rror -result {ba
08b0: 64 20 65 76 65 6e 74 20 74 79 70 65 20 6f 72 20  d event type or 
08c0: 6b 65 79 73 79 6d 20 22 67 6f 72 70 22 7d 0a 74  keysym "gorp"}.t
08d0: 65 73 74 20 62 69 6e 64 2d 31 2e 39 20 7b 62 69  est bind-1.9 {bi
08e0: 6e 64 20 63 6f 6d 6d 61 6e 64 7d 20 2d 62 6f 64  nd command} -bod
08f0: 79 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 62  y {.    catch {b
0900: 69 6e 64 20 2e 74 20 3c 67 6f 72 70 2d 3e 20 7b  ind .t <gorp-> {
0910: 74 65 73 74 20 73 63 72 69 70 74 7d 7d 20 0a 20  test script}} . 
0920: 20 20 20 62 69 6e 64 20 2e 74 0a 7d 20 2d 72 65     bind .t.} -re
0930: 73 75 6c 74 20 7b 7d 0a 74 65 73 74 20 62 69 6e  sult {}.test bin
0940: 64 2d 31 2e 31 30 20 7b 62 69 6e 64 20 63 6f 6d  d-1.10 {bind com
0950: 6d 61 6e 64 7d 20 2d 62 6f 64 79 20 7b 0a 20 20  mand} -body {.  
0960: 20 20 62 69 6e 64 20 2e 74 20 3c 67 6f 72 70 2d    bind .t <gorp-
0970: 3e 0a 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73  >.} -returnCodes
0980: 20 6f 6b 20 2d 72 65 73 75 6c 74 20 7b 7d 0a 74   ok -result {}.t
0990: 65 73 74 20 62 69 6e 64 2d 31 2e 31 31 20 7b 62  est bind-1.11 {b
09a0: 69 6e 64 20 63 6f 6d 6d 61 6e 64 7d 20 2d 62 6f  ind command} -bo
09b0: 64 79 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e  dy {.    frame .
09c0: 74 2e 66 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  t.f.    bind .t.
09d0: 66 20 3c 45 6e 74 65 72 3e 20 7b 73 63 72 69 70  f <Enter> {scrip
09e0: 74 20 31 7d 0a 20 20 20 20 62 69 6e 64 20 2e 74  t 1}.    bind .t
09f0: 2e 66 20 3c 4c 65 61 76 65 3e 20 7b 73 63 72 69  .f <Leave> {scri
0a00: 70 74 20 32 7d 0a 20 20 20 20 62 69 6e 64 20 2e  pt 2}.    bind .
0a10: 74 2e 66 20 61 20 7b 73 63 72 69 70 74 20 66 6f  t.f a {script fo
0a20: 72 20 61 7d 0a 20 20 20 20 62 69 6e 64 20 2e 74  r a}.    bind .t
0a30: 2e 66 20 62 20 7b 73 63 72 69 70 74 20 66 6f 72  .f b {script for
0a40: 20 62 7d 0a 20 20 20 20 6c 73 6f 72 74 20 5b 62   b}.    lsort [b
0a50: 69 6e 64 20 2e 74 2e 66 5d 0a 7d 20 2d 63 6c 65  ind .t.f].} -cle
0a60: 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72  anup {.    destr
0a70: 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c  oy .t.f.} -resul
0a80: 74 20 7b 3c 45 6e 74 65 72 3e 20 3c 4c 65 61 76  t {<Enter> <Leav
0a90: 65 3e 20 61 20 62 7d 0a 0a 74 65 73 74 20 62 69  e> a b}..test bi
0aa0: 6e 64 2d 32 2e 31 20 7b 62 69 6e 64 74 61 67 73  nd-2.1 {bindtags
0ab0: 20 63 6f 6d 6d 61 6e 64 7d 20 2d 62 6f 64 79 20   command} -body 
0ac0: 7b 0a 20 20 20 20 62 69 6e 64 74 61 67 73 0a 7d  {.    bindtags.}
0ad0: 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65 72   -returnCodes er
0ae0: 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 77 72 6f  ror -result {wro
0af0: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
0b00: 64 20 62 65 20 22 62 69 6e 64 74 61 67 73 20 77  d be "bindtags w
0b10: 69 6e 64 6f 77 20 3f 74 61 67 6c 69 73 74 3f 22  indow ?taglist?"
0b20: 7d 0a 74 65 73 74 20 62 69 6e 64 2d 32 2e 32 20  }.test bind-2.2 
0b30: 7b 62 69 6e 64 74 61 67 73 20 63 6f 6d 6d 61 6e  {bindtags comman
0b40: 64 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62  d} -body {.    b
0b50: 69 6e 64 74 61 67 73 20 61 20 62 20 63 0a 7d 20  indtags a b c.} 
0b60: 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65 72 72  -returnCodes err
0b70: 6f 72 20 2d 72 65 73 75 6c 74 20 7b 77 72 6f 6e  or -result {wron
0b80: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
0b90: 20 62 65 20 22 62 69 6e 64 74 61 67 73 20 77 69   be "bindtags wi
0ba0: 6e 64 6f 77 20 3f 74 61 67 6c 69 73 74 3f 22 7d  ndow ?taglist?"}
0bb0: 0a 74 65 73 74 20 62 69 6e 64 2d 32 2e 33 20 7b  .test bind-2.3 {
0bc0: 62 69 6e 64 74 61 67 73 20 63 6f 6d 6d 61 6e 64  bindtags command
0bd0: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
0be0: 6e 64 74 61 67 73 20 2e 66 6f 6f 0a 7d 20 2d 72  ndtags .foo.} -r
0bf0: 65 74 75 72 6e 43 6f 64 65 73 20 65 72 72 6f 72  eturnCodes error
0c00: 20 2d 72 65 73 75 6c 74 20 7b 62 61 64 20 77 69   -result {bad wi
0c10: 6e 64 6f 77 20 70 61 74 68 20 6e 61 6d 65 20 22  ndow path name "
0c20: 2e 66 6f 6f 22 7d 0a 74 65 73 74 20 62 69 6e 64  .foo"}.test bind
0c30: 2d 32 2e 34 20 7b 62 69 6e 64 74 61 67 73 20 63  -2.4 {bindtags c
0c40: 6f 6d 6d 61 6e 64 7d 20 2d 62 6f 64 79 20 7b 0a  ommand} -body {.
0c50: 20 20 20 20 62 69 6e 64 74 61 67 73 20 2e 74 0a      bindtags .t.
0c60: 7d 20 2d 72 65 73 75 6c 74 20 7b 2e 74 20 54 6f  } -result {.t To
0c70: 70 6c 65 76 65 6c 20 61 6c 6c 7d 0a 74 65 73 74  plevel all}.test
0c80: 20 62 69 6e 64 2d 32 2e 35 20 7b 62 69 6e 64 74   bind-2.5 {bindt
0c90: 61 67 73 20 63 6f 6d 6d 61 6e 64 7d 20 2d 62 6f  ags command} -bo
0ca0: 64 79 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e  dy {.    frame .
0cb0: 74 2e 66 0a 20 20 20 20 62 69 6e 64 74 61 67 73  t.f.    bindtags
0cc0: 20 2e 74 2e 66 0a 7d 20 2d 63 6c 65 61 6e 75 70   .t.f.} -cleanup
0cd0: 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
0ce0: 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 2e  t.f.} -result {.
0cf0: 74 2e 66 20 46 72 61 6d 65 20 2e 74 20 61 6c 6c  t.f Frame .t all
0d00: 7d 0a 74 65 73 74 20 62 69 6e 64 2d 32 2e 36 20  }.test bind-2.6 
0d10: 7b 62 69 6e 64 74 61 67 73 20 63 6f 6d 6d 61 6e  {bindtags comman
0d20: 64 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 66  d} -body {.    f
0d30: 72 61 6d 65 20 2e 74 2e 66 0a 20 20 20 20 62 69  rame .t.f.    bi
0d40: 6e 64 74 61 67 73 20 2e 74 2e 66 20 7b 7b 78 20  ndtags .t.f {{x 
0d50: 79 20 7a 7d 20 62 20 63 20 64 7d 0a 20 20 20 20  y z} b c d}.    
0d60: 62 69 6e 64 74 61 67 73 20 2e 74 2e 66 0a 7d 20  bindtags .t.f.} 
0d70: 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64  -cleanup {.    d
0d80: 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72  estroy .t.f.} -r
0d90: 65 73 75 6c 74 20 7b 7b 78 20 79 20 7a 7d 20 62  esult {{x y z} b
0da0: 20 63 20 64 7d 0a 74 65 73 74 20 62 69 6e 64 2d   c d}.test bind-
0db0: 32 2e 37 20 7b 62 69 6e 64 74 61 67 73 20 63 6f  2.7 {bindtags co
0dc0: 6d 6d 61 6e 64 7d 20 2d 62 6f 64 79 20 7b 0a 20  mmand} -body {. 
0dd0: 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 0a 20 20     frame .t.f.  
0de0: 20 20 62 69 6e 64 74 61 67 73 20 2e 74 2e 66 20    bindtags .t.f 
0df0: 7b 78 20 79 20 7a 7d 0a 20 20 20 20 62 69 6e 64  {x y z}.    bind
0e00: 74 61 67 73 20 2e 74 2e 66 20 7b 7d 0a 20 20 20  tags .t.f {}.   
0e10: 20 62 69 6e 64 74 61 67 73 20 2e 74 2e 66 0a 7d   bindtags .t.f.}
0e20: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
0e30: 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d  destroy .t.f.} -
0e40: 72 65 73 75 6c 74 20 7b 2e 74 2e 66 20 46 72 61  result {.t.f Fra
0e50: 6d 65 20 2e 74 20 61 6c 6c 7d 0a 74 65 73 74 20  me .t all}.test 
0e60: 62 69 6e 64 2d 32 2e 38 20 7b 62 69 6e 64 74 61  bind-2.8 {bindta
0e70: 67 73 20 63 6f 6d 6d 61 6e 64 7d 20 2d 62 6f 64  gs command} -bod
0e80: 79 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74  y {.    frame .t
0e90: 2e 66 0a 20 20 20 20 62 69 6e 64 74 61 67 73 20  .f.    bindtags 
0ea0: 2e 74 2e 66 20 7b 78 20 79 20 7a 7d 0a 20 20 20  .t.f {x y z}.   
0eb0: 20 62 69 6e 64 74 61 67 73 20 2e 74 2e 66 20 7b   bindtags .t.f {
0ec0: 61 20 62 20 63 20 64 7d 0a 20 20 20 20 62 69 6e  a b c d}.    bin
0ed0: 64 74 61 67 73 20 2e 74 2e 66 0a 7d 20 2d 63 6c  dtags .t.f.} -cl
0ee0: 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74  eanup {.    dest
0ef0: 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75  roy .t.f.} -resu
0f00: 6c 74 20 7b 61 20 62 20 63 20 64 7d 0a 74 65 73  lt {a b c d}.tes
0f10: 74 20 62 69 6e 64 2d 32 2e 39 20 7b 62 69 6e 64  t bind-2.9 {bind
0f20: 74 61 67 73 20 63 6f 6d 6d 61 6e 64 7d 20 2d 62  tags command} -b
0f30: 6f 64 79 20 7b 0a 20 20 20 20 66 72 61 6d 65 20  ody {.    frame 
0f40: 2e 74 2e 66 0a 20 20 20 20 62 69 6e 64 74 61 67  .t.f.    bindtag
0f50: 73 20 2e 74 2e 66 20 7b 61 20 62 20 63 7d 0a 20  s .t.f {a b c}. 
0f60: 20 20 20 62 69 6e 64 74 61 67 73 20 2e 74 2e 66     bindtags .t.f
0f70: 20 22 5c 7b 22 20 0a 7d 20 2d 63 6c 65 61 6e 75   "\{" .} -cleanu
0f80: 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20  p {.    destroy 
0f90: 2e 74 2e 66 0a 7d 20 2d 72 65 74 75 72 6e 43 6f  .t.f.} -returnCo
0fa0: 64 65 73 20 65 72 72 6f 72 20 2d 72 65 73 75 6c  des error -resul
0fb0: 74 20 7b 75 6e 6d 61 74 63 68 65 64 20 6f 70 65  t {unmatched ope
0fc0: 6e 20 62 72 61 63 65 20 69 6e 20 6c 69 73 74 7d  n brace in list}
0fd0: 20 0a 74 65 73 74 20 62 69 6e 64 2d 32 2e 31 30   .test bind-2.10
0fe0: 20 7b 62 69 6e 64 74 61 67 73 20 63 6f 6d 6d 61   {bindtags comma
0ff0: 6e 64 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  nd} -body {.    
1000: 66 72 61 6d 65 20 2e 74 2e 66 0a 20 20 20 20 62  frame .t.f.    b
1010: 69 6e 64 74 61 67 73 20 2e 74 2e 66 20 7b 61 20  indtags .t.f {a 
1020: 62 20 63 7d 0a 20 20 20 20 63 61 74 63 68 20 7b  b c}.    catch {
1030: 62 69 6e 64 74 61 67 73 20 2e 74 2e 66 20 22 5c  bindtags .t.f "\
1040: 7b 22 7d 0a 20 20 20 20 62 69 6e 64 74 61 67 73  {"}.    bindtags
1050: 20 2e 74 2e 66 0a 7d 20 2d 63 6c 65 61 6e 75 70   .t.f.} -cleanup
1060: 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
1070: 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 2e  t.f.} -result {.
1080: 74 2e 66 20 46 72 61 6d 65 20 2e 74 20 61 6c 6c  t.f Frame .t all
1090: 7d 0a 74 65 73 74 20 62 69 6e 64 2d 32 2e 31 31  }.test bind-2.11
10a0: 20 7b 62 69 6e 64 74 61 67 73 20 63 6f 6d 6d 61   {bindtags comma
10b0: 6e 64 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  nd} -body {.    
10c0: 66 72 61 6d 65 20 2e 74 2e 66 0a 20 20 20 20 62  frame .t.f.    b
10d0: 69 6e 64 74 61 67 73 20 2e 74 2e 66 20 7b 61 20  indtags .t.f {a 
10e0: 62 20 63 7d 0a 20 20 20 20 62 69 6e 64 74 61 67  b c}.    bindtag
10f0: 73 20 2e 74 2e 66 20 22 61 20 2e 67 6f 72 70 20  s .t.f "a .gorp 
1100: 62 22 20 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  b" .} -cleanup {
1110: 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e  .    destroy .t.
1120: 66 0a 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73  f.} -returnCodes
1130: 20 6f 6b 20 20 0a 74 65 73 74 20 62 69 6e 64 2d   ok  .test bind-
1140: 32 2e 31 32 20 7b 62 69 6e 64 74 61 67 73 20 63  2.12 {bindtags c
1150: 6f 6d 6d 61 6e 64 7d 20 2d 62 6f 64 79 20 7b 0a  ommand} -body {.
1160: 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 0a 20      frame .t.f. 
1170: 20 20 20 62 69 6e 64 74 61 67 73 20 2e 74 2e 66     bindtags .t.f
1180: 20 7b 61 20 62 20 63 7d 0a 20 20 20 20 63 61 74   {a b c}.    cat
1190: 63 68 20 7b 62 69 6e 64 74 61 67 73 20 2e 74 2e  ch {bindtags .t.
11a0: 66 20 22 61 20 2e 67 6f 72 70 20 62 22 7d 0a 20  f "a .gorp b"}. 
11b0: 20 20 20 62 69 6e 64 74 61 67 73 20 2e 74 2e 66     bindtags .t.f
11c0: 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
11d0: 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d    destroy .t.f.}
11e0: 20 2d 72 65 73 75 6c 74 20 7b 61 20 2e 67 6f 72   -result {a .gor
11f0: 70 20 62 7d 0a 0a 0a 74 65 73 74 20 62 69 6e 64  p b}...test bind
1200: 2d 33 2e 31 20 7b 54 6b 46 72 65 65 42 69 6e 64  -3.1 {TkFreeBind
1210: 69 6e 67 54 61 67 73 20 70 72 6f 63 65 64 75 72  ingTags procedur
1220: 65 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 66  e} -body {.    f
1230: 72 61 6d 65 20 2e 74 2e 66 0a 20 20 20 20 62 69  rame .t.f.    bi
1240: 6e 64 74 61 67 73 20 2e 74 2e 66 20 22 61 20 62  ndtags .t.f "a b
1250: 20 63 20 64 22 0a 20 20 20 20 64 65 73 74 72 6f   c d".    destro
1260: 79 20 2e 74 2e 66 0a 7d 20 2d 63 6c 65 61 6e 75  y .t.f.} -cleanu
1270: 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20  p {.    destroy 
1280: 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b  .t.f.} -result {
1290: 7d 0a 74 65 73 74 20 62 69 6e 64 2d 33 2e 32 20  }.test bind-3.2 
12a0: 7b 54 6b 46 72 65 65 42 69 6e 64 69 6e 67 54 61  {TkFreeBindingTa
12b0: 67 73 20 70 72 6f 63 65 64 75 72 65 7d 20 2d 62  gs procedure} -b
12c0: 6f 64 79 20 7b 0a 20 20 20 20 66 72 61 6d 65 20  ody {.    frame 
12d0: 2e 74 2e 66 0a 20 20 20 20 63 61 74 63 68 20 7b  .t.f.    catch {
12e0: 62 69 6e 64 74 61 67 73 20 2e 74 2e 66 20 22 61  bindtags .t.f "a
12f0: 20 2e 67 6f 72 70 20 62 20 2e 74 2e 66 22 7d 0a   .gorp b .t.f"}.
1300: 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66      destroy .t.f
1310: 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
1320: 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d    destroy .t.f.}
1330: 20 2d 72 65 73 75 6c 74 20 7b 7d 0a 0a 0a 74 65   -result {}...te
1340: 73 74 20 62 69 6e 64 2d 34 2e 31 20 7b 54 6b 42  st bind-4.1 {TkB
1350: 69 6e 64 45 76 65 6e 74 50 72 6f 63 20 70 72 6f  indEventProc pro
1360: 63 65 64 75 72 65 7d 20 2d 73 65 74 75 70 20 7b  cedure} -setup {
1370: 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
1380: 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
1390: 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
13a0: 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
13b0: 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20  .    update.    
13c0: 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79  set x {}.} -body
13d0: 20 7b 0a 20 20 20 20 62 69 6e 64 20 61 6c 6c 20   {.    bind all 
13e0: 3c 45 6e 74 65 72 3e 20 7b 6c 61 70 70 65 6e 64  <Enter> {lappend
13f0: 20 78 20 22 25 57 20 65 6e 74 65 72 20 61 6c 6c   x "%W enter all
1400: 22 7d 0a 20 20 20 20 62 69 6e 64 20 54 65 73 74  "}.    bind Test
1410: 20 3c 45 6e 74 65 72 3e 20 7b 6c 61 70 70 65 6e   <Enter> {lappen
1420: 64 20 78 20 22 25 57 20 65 6e 74 65 72 20 66 72  d x "%W enter fr
1430: 61 6d 65 22 7d 0a 20 20 20 20 62 69 6e 64 20 54  ame"}.    bind T
1440: 6f 70 6c 65 76 65 6c 20 3c 45 6e 74 65 72 3e 20  oplevel <Enter> 
1450: 7b 6c 61 70 70 65 6e 64 20 78 20 22 25 57 20 65  {lappend x "%W e
1460: 6e 74 65 72 20 74 6f 70 6c 65 76 65 6c 22 7d 0a  nter toplevel"}.
1470: 20 20 20 20 62 69 6e 64 20 78 79 7a 20 3c 45 6e      bind xyz <En
1480: 74 65 72 3e 20 7b 6c 61 70 70 65 6e 64 20 78 20  ter> {lappend x 
1490: 22 25 57 20 65 6e 74 65 72 20 78 79 7a 22 7d 0a  "%W enter xyz"}.
14a0: 20 20 20 20 62 69 6e 64 20 7b 61 20 62 7d 20 3c      bind {a b} <
14b0: 45 6e 74 65 72 3e 20 7b 6c 61 70 70 65 6e 64 20  Enter> {lappend 
14c0: 78 20 22 25 57 20 65 6e 74 65 72 20 7b 61 20 62  x "%W enter {a b
14d0: 7d 22 7d 0a 20 20 20 20 62 69 6e 64 20 2e 74 20  }"}.    bind .t 
14e0: 3c 45 6e 74 65 72 3e 20 20 7b 6c 61 70 70 65 6e  <Enter>  {lappen
14f0: 64 20 78 20 22 25 57 20 65 6e 74 65 72 20 2e 74  d x "%W enter .t
1500: 22 7d 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66  "}.    bind .t.f
1510: 20 3c 45 6e 74 65 72 3e 20 7b 6c 61 70 70 65 6e   <Enter> {lappen
1520: 64 20 78 20 22 25 57 20 65 6e 74 65 72 20 2e 74  d x "%W enter .t
1530: 2e 66 22 7d 0a 20 20 20 20 0a 20 20 20 20 65 76  .f"}.    .    ev
1540: 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
1550: 66 20 3c 45 6e 74 65 72 3e 0a 20 20 20 20 72 65  f <Enter>.    re
1560: 74 75 72 6e 20 24 78 0a 7d 20 2d 63 6c 65 61 6e  turn $x.} -clean
1570: 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79  up {.    destroy
1580: 20 2e 74 2e 66 0a 20 20 20 20 75 6e 73 65 74 42   .t.f.    unsetB
1590: 69 6e 64 69 6e 67 73 0a 7d 20 2d 72 65 73 75 6c  indings.} -resul
15a0: 74 20 7b 7b 2e 74 2e 66 20 65 6e 74 65 72 20 2e  t {{.t.f enter .
15b0: 74 2e 66 7d 20 7b 2e 74 2e 66 20 65 6e 74 65 72  t.f} {.t.f enter
15c0: 20 66 72 61 6d 65 7d 20 7b 2e 74 2e 66 20 65 6e   frame} {.t.f en
15d0: 74 65 72 20 2e 74 7d 20 7b 2e 74 2e 66 20 65 6e  ter .t} {.t.f en
15e0: 74 65 72 20 61 6c 6c 7d 7d 0a 74 65 73 74 20 62  ter all}}.test b
15f0: 69 6e 64 2d 34 2e 32 20 7b 54 6b 42 69 6e 64 45  ind-4.2 {TkBindE
1600: 76 65 6e 74 50 72 6f 63 20 70 72 6f 63 65 64 75  ventProc procedu
1610: 72 65 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20  re} -setup {.   
1620: 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61   frame .t.f -cla
1630: 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
1640: 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20  50 -height 100. 
1650: 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20     pack .t.f.   
1660: 20 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20   update.    set 
1670: 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20  x {}.} -body {. 
1680: 20 20 20 62 69 6e 64 20 61 6c 6c 20 3c 45 6e 74     bind all <Ent
1690: 65 72 3e 20 7b 6c 61 70 70 65 6e 64 20 78 20 22  er> {lappend x "
16a0: 25 57 20 65 6e 74 65 72 20 61 6c 6c 22 7d 0a 20  %W enter all"}. 
16b0: 20 20 20 62 69 6e 64 20 54 65 73 74 20 3c 45 6e     bind Test <En
16c0: 74 65 72 3e 20 7b 6c 61 70 70 65 6e 64 20 78 20  ter> {lappend x 
16d0: 22 25 57 20 65 6e 74 65 72 20 66 72 61 6d 65 22  "%W enter frame"
16e0: 7d 0a 20 20 20 20 62 69 6e 64 20 54 6f 70 6c 65  }.    bind Tople
16f0: 76 65 6c 20 3c 45 6e 74 65 72 3e 20 7b 6c 61 70  vel <Enter> {lap
1700: 70 65 6e 64 20 78 20 22 25 57 20 65 6e 74 65 72  pend x "%W enter
1710: 20 74 6f 70 6c 65 76 65 6c 22 7d 0a 20 20 20 20   toplevel"}.    
1720: 62 69 6e 64 20 78 79 7a 20 3c 45 6e 74 65 72 3e  bind xyz <Enter>
1730: 20 7b 6c 61 70 70 65 6e 64 20 78 20 22 25 57 20   {lappend x "%W 
1740: 65 6e 74 65 72 20 78 79 7a 22 7d 0a 20 20 20 20  enter xyz"}.    
1750: 62 69 6e 64 20 7b 61 20 62 7d 20 3c 45 6e 74 65  bind {a b} <Ente
1760: 72 3e 20 7b 6c 61 70 70 65 6e 64 20 78 20 22 25  r> {lappend x "%
1770: 57 20 65 6e 74 65 72 20 7b 61 20 62 7d 22 7d 0a  W enter {a b}"}.
1780: 20 20 20 20 62 69 6e 64 20 2e 74 20 3c 45 6e 74      bind .t <Ent
1790: 65 72 3e 20 20 7b 6c 61 70 70 65 6e 64 20 78 20  er>  {lappend x 
17a0: 22 25 57 20 65 6e 74 65 72 20 2e 74 22 7d 0a 20  "%W enter .t"}. 
17b0: 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 45 6e     bind .t.f <En
17c0: 74 65 72 3e 20 7b 6c 61 70 70 65 6e 64 20 78 20  ter> {lappend x 
17d0: 22 25 57 20 65 6e 74 65 72 20 2e 74 2e 66 22 7d  "%W enter .t.f"}
17e0: 0a 20 20 20 20 0a 20 20 20 20 62 69 6e 64 74 61  .    .    bindta
17f0: 67 73 20 2e 74 2e 66 20 7b 2e 74 2e 66 20 7b 61  gs .t.f {.t.f {a
1800: 20 62 7d 20 78 79 7a 7d 0a 20 20 20 20 65 76 65   b} xyz}.    eve
1810: 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
1820: 20 3c 45 6e 74 65 72 3e 20 0a 20 20 20 20 72 65   <Enter> .    re
1830: 74 75 72 6e 20 24 78 0a 7d 20 2d 63 6c 65 61 6e  turn $x.} -clean
1840: 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79  up {.    destroy
1850: 20 2e 74 2e 66 0a 20 20 20 20 75 6e 73 65 74 42   .t.f.    unsetB
1860: 69 6e 64 69 6e 67 73 0a 7d 20 2d 72 65 73 75 6c  indings.} -resul
1870: 74 20 7b 7b 2e 74 2e 66 20 65 6e 74 65 72 20 2e  t {{.t.f enter .
1880: 74 2e 66 7d 20 7b 2e 74 2e 66 20 65 6e 74 65 72  t.f} {.t.f enter
1890: 20 7b 61 20 62 7d 7d 20 7b 2e 74 2e 66 20 65 6e   {a b}} {.t.f en
18a0: 74 65 72 20 78 79 7a 7d 7d 0a 74 65 73 74 20 62  ter xyz}}.test b
18b0: 69 6e 64 2d 34 2e 33 20 7b 54 6b 42 69 6e 64 45  ind-4.3 {TkBindE
18c0: 76 65 6e 74 50 72 6f 63 20 70 72 6f 63 65 64 75  ventProc procedu
18d0: 72 65 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  re} -body {.    
18e0: 73 65 74 20 78 20 7b 7d 0a 20 20 20 20 62 69 6e  set x {}.    bin
18f0: 64 20 61 6c 6c 20 3c 45 6e 74 65 72 3e 20 7b 6c  d all <Enter> {l
1900: 61 70 70 65 6e 64 20 78 20 22 25 57 20 65 6e 74  append x "%W ent
1910: 65 72 20 61 6c 6c 22 7d 0a 20 20 20 20 62 69 6e  er all"}.    bin
1920: 64 20 54 65 73 74 20 3c 45 6e 74 65 72 3e 20 7b  d Test <Enter> {
1930: 6c 61 70 70 65 6e 64 20 78 20 22 25 57 20 65 6e  lappend x "%W en
1940: 74 65 72 20 66 72 61 6d 65 22 7d 0a 20 20 20 20  ter frame"}.    
1950: 62 69 6e 64 20 54 6f 70 6c 65 76 65 6c 20 3c 45  bind Toplevel <E
1960: 6e 74 65 72 3e 20 7b 6c 61 70 70 65 6e 64 20 78  nter> {lappend x
1970: 20 22 25 57 20 65 6e 74 65 72 20 74 6f 70 6c 65   "%W enter tople
1980: 76 65 6c 22 7d 0a 20 20 20 20 62 69 6e 64 20 78  vel"}.    bind x
1990: 79 7a 20 3c 45 6e 74 65 72 3e 20 7b 6c 61 70 70  yz <Enter> {lapp
19a0: 65 6e 64 20 78 20 22 25 57 20 65 6e 74 65 72 20  end x "%W enter 
19b0: 78 79 7a 22 7d 0a 20 20 20 20 62 69 6e 64 20 7b  xyz"}.    bind {
19c0: 61 20 62 7d 20 3c 45 6e 74 65 72 3e 20 7b 6c 61  a b} <Enter> {la
19d0: 70 70 65 6e 64 20 78 20 22 25 57 20 65 6e 74 65  ppend x "%W ente
19e0: 72 20 7b 61 20 62 7d 22 7d 0a 20 20 20 20 62 69  r {a b}"}.    bi
19f0: 6e 64 20 2e 74 20 3c 45 6e 74 65 72 3e 20 20 7b  nd .t <Enter>  {
1a00: 6c 61 70 70 65 6e 64 20 78 20 22 25 57 20 65 6e  lappend x "%W en
1a10: 74 65 72 20 2e 74 22 7d 0a 20 20 20 20 0a 20 20  ter .t"}.    .  
1a20: 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
1a30: 20 2e 74 20 3c 45 6e 74 65 72 3e 0a 20 20 20 20   .t <Enter>.    
1a40: 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d 63 6c 65  return $x.} -cle
1a50: 61 6e 75 70 20 7b 0a 20 20 20 20 75 6e 73 65 74  anup {.    unset
1a60: 42 69 6e 64 69 6e 67 73 0a 7d 20 20 2d 72 65 73  Bindings.}  -res
1a70: 75 6c 74 20 7b 7b 2e 74 20 65 6e 74 65 72 20 2e  ult {{.t enter .
1a80: 74 7d 20 7b 2e 74 20 65 6e 74 65 72 20 74 6f 70  t} {.t enter top
1a90: 6c 65 76 65 6c 7d 20 7b 2e 74 20 65 6e 74 65 72  level} {.t enter
1aa0: 20 61 6c 6c 7d 7d 0a 74 65 73 74 20 62 69 6e 64   all}}.test bind
1ab0: 2d 34 2e 34 20 7b 54 6b 42 69 6e 64 45 76 65 6e  -4.4 {TkBindEven
1ac0: 74 50 72 6f 63 20 70 72 6f 63 65 64 75 72 65 7d  tProc procedure}
1ad0: 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72   -setup {.    fr
1ae0: 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20  ame .t.f -class 
1af0: 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20  Test -width 150 
1b00: 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20  -height 100.    
1b10: 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 72  pack .t.f.    fr
1b20: 61 6d 65 20 2e 74 2e 66 33 20 2d 77 69 64 74 68  ame .t.f3 -width
1b30: 20 35 30 20 2d 68 65 69 67 68 74 20 35 30 0a 20   50 -height 50. 
1b40: 20 20 20 70 61 63 6b 20 2e 74 2e 66 33 0a 20 20     pack .t.f3.  
1b50: 20 20 75 70 64 61 74 65 0a 20 20 20 20 73 65 74    update.    set
1b60: 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a   x {}.} -body {.
1b70: 20 20 20 20 62 69 6e 64 20 61 6c 6c 20 3c 45 6e      bind all <En
1b80: 74 65 72 3e 20 7b 6c 61 70 70 65 6e 64 20 78 20  ter> {lappend x 
1b90: 22 25 57 20 65 6e 74 65 72 20 61 6c 6c 22 7d 0a  "%W enter all"}.
1ba0: 20 20 20 20 62 69 6e 64 20 54 65 73 74 20 3c 45      bind Test <E
1bb0: 6e 74 65 72 3e 20 7b 6c 61 70 70 65 6e 64 20 78  nter> {lappend x
1bc0: 20 22 25 57 20 65 6e 74 65 72 20 66 72 61 6d 65   "%W enter frame
1bd0: 22 7d 0a 20 20 20 20 62 69 6e 64 20 54 6f 70 6c  "}.    bind Topl
1be0: 65 76 65 6c 20 3c 45 6e 74 65 72 3e 20 7b 6c 61  evel <Enter> {la
1bf0: 70 70 65 6e 64 20 78 20 22 25 57 20 65 6e 74 65  ppend x "%W ente
1c00: 72 20 74 6f 70 6c 65 76 65 6c 22 7d 0a 20 20 20  r toplevel"}.   
1c10: 20 62 69 6e 64 20 78 79 7a 20 3c 45 6e 74 65 72   bind xyz <Enter
1c20: 3e 20 7b 6c 61 70 70 65 6e 64 20 78 20 22 25 57  > {lappend x "%W
1c30: 20 65 6e 74 65 72 20 78 79 7a 22 7d 0a 20 20 20   enter xyz"}.   
1c40: 20 62 69 6e 64 20 7b 61 20 62 7d 20 3c 45 6e 74   bind {a b} <Ent
1c50: 65 72 3e 20 7b 6c 61 70 70 65 6e 64 20 78 20 22  er> {lappend x "
1c60: 25 57 20 65 6e 74 65 72 20 7b 61 20 62 7d 22 7d  %W enter {a b}"}
1c70: 0a 20 20 20 20 62 69 6e 64 20 2e 74 20 3c 45 6e  .    bind .t <En
1c80: 74 65 72 3e 20 20 7b 6c 61 70 70 65 6e 64 20 78  ter>  {lappend x
1c90: 20 22 25 57 20 65 6e 74 65 72 20 2e 74 22 7d 0a   "%W enter .t"}.
1ca0: 20 20 20 20 0a 20 20 20 20 62 69 6e 64 74 61 67      .    bindtag
1cb0: 73 20 2e 74 2e 66 20 7b 2e 74 2e 66 20 2e 74 2e  s .t.f {.t.f .t.
1cc0: 66 32 20 2e 74 2e 66 33 7d 0a 20 20 20 20 62 69  f2 .t.f3}.    bi
1cd0: 6e 64 20 2e 74 2e 66 20 3c 45 6e 74 65 72 3e 20  nd .t.f <Enter> 
1ce0: 7b 6c 61 70 70 65 6e 64 20 78 20 22 25 57 20 65  {lappend x "%W e
1cf0: 6e 74 65 72 20 2e 74 2e 66 22 7d 0a 20 20 20 20  nter .t.f"}.    
1d00: 62 69 6e 64 20 2e 74 2e 66 33 20 3c 45 6e 74 65  bind .t.f3 <Ente
1d10: 72 3e 20 7b 6c 61 70 70 65 6e 64 20 78 20 22 25  r> {lappend x "%
1d20: 57 20 65 6e 74 65 72 20 2e 74 2e 66 33 22 7d 0a  W enter .t.f3"}.
1d30: 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
1d40: 74 65 20 2e 74 2e 66 20 3c 45 6e 74 65 72 3e 0a  te .t.f <Enter>.
1d50: 20 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 20      return $x.} 
1d60: 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64  -cleanup {.    d
1d70: 65 73 74 72 6f 79 20 2e 74 2e 66 20 2e 74 2e 66  estroy .t.f .t.f
1d80: 33 0a 20 20 20 20 75 6e 73 65 74 42 69 6e 64 69  3.    unsetBindi
1d90: 6e 67 73 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 7b  ngs.} -result {{
1da0: 2e 74 2e 66 20 65 6e 74 65 72 20 2e 74 2e 66 7d  .t.f enter .t.f}
1db0: 20 7b 2e 74 2e 66 20 65 6e 74 65 72 20 2e 74 2e   {.t.f enter .t.
1dc0: 66 33 7d 7d 0a 74 65 73 74 20 62 69 6e 64 2d 34  f3}}.test bind-4
1dd0: 2e 35 20 7b 54 6b 42 69 6e 64 45 76 65 6e 74 50  .5 {TkBindEventP
1de0: 72 6f 63 20 70 72 6f 63 65 64 75 72 65 7d 20 2d  roc procedure} -
1df0: 73 65 74 75 70 20 7b 0a 20 20 20 20 23 20 54 68  setup {.    # Th
1e00: 69 73 20 74 65 73 74 73 20 6d 65 6d 6f 72 79 20  is tests memory 
1e10: 61 6c 6c 6f 63 61 74 69 6f 6e 20 66 6f 72 20 6f  allocation for o
1e20: 62 6a 50 74 72 3b 20 20 69 74 20 77 6f 6e 27 74  bjPtr;  it won't
1e30: 20 73 65 72 76 65 20 61 6e 79 20 75 73 65 66 75   serve any usefu
1e40: 6c 0a 20 20 20 20 23 20 70 75 72 70 6f 73 65 20  l.    # purpose 
1e50: 75 6e 6c 65 73 73 20 72 75 6e 20 77 69 74 68 20  unless run with 
1e60: 73 6f 6d 65 20 73 6f 72 74 20 6f 66 20 61 6c 6c  some sort of all
1e70: 6f 63 61 74 69 6f 6e 20 63 68 65 63 6b 65 72 20  ocation checker 
1e80: 74 75 72 6e 65 64 20 6f 6e 2e 0a 20 20 20 20 66  turned on..    f
1e90: 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73  rame .t.f -class
1ea0: 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30   Test -width 150
1eb0: 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20   -height 100.   
1ec0: 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 75   pack .t.f.    u
1ed0: 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20 7b 0a  pdate.} -body {.
1ee0: 20 20 20 20 62 69 6e 64 20 61 6c 6c 20 3c 45 6e      bind all <En
1ef0: 74 65 72 3e 20 7b 6c 61 70 70 65 6e 64 20 78 20  ter> {lappend x 
1f00: 22 25 57 20 65 6e 74 65 72 20 61 6c 6c 22 7d 0a  "%W enter all"}.
1f10: 20 20 20 20 62 69 6e 64 20 54 65 73 74 20 3c 45      bind Test <E
1f20: 6e 74 65 72 3e 20 7b 6c 61 70 70 65 6e 64 20 78  nter> {lappend x
1f30: 20 22 25 57 20 65 6e 74 65 72 20 66 72 61 6d 65   "%W enter frame
1f40: 22 7d 0a 20 20 20 20 62 69 6e 64 20 54 6f 70 6c  "}.    bind Topl
1f50: 65 76 65 6c 20 3c 45 6e 74 65 72 3e 20 7b 6c 61  evel <Enter> {la
1f60: 70 70 65 6e 64 20 78 20 22 25 57 20 65 6e 74 65  ppend x "%W ente
1f70: 72 20 74 6f 70 6c 65 76 65 6c 22 7d 0a 20 20 20  r toplevel"}.   
1f80: 20 62 69 6e 64 20 78 79 7a 20 3c 45 6e 74 65 72   bind xyz <Enter
1f90: 3e 20 7b 6c 61 70 70 65 6e 64 20 78 20 22 25 57  > {lappend x "%W
1fa0: 20 65 6e 74 65 72 20 78 79 7a 22 7d 0a 20 20 20   enter xyz"}.   
1fb0: 20 62 69 6e 64 20 7b 61 20 62 7d 20 3c 45 6e 74   bind {a b} <Ent
1fc0: 65 72 3e 20 7b 6c 61 70 70 65 6e 64 20 78 20 22  er> {lappend x "
1fd0: 25 57 20 65 6e 74 65 72 20 7b 61 20 62 7d 22 7d  %W enter {a b}"}
1fe0: 0a 20 20 20 20 62 69 6e 64 20 2e 74 20 3c 45 6e  .    bind .t <En
1ff0: 74 65 72 3e 20 20 7b 6c 61 70 70 65 6e 64 20 78  ter>  {lappend x
2000: 20 22 25 57 20 65 6e 74 65 72 20 2e 74 22 7d 0a   "%W enter .t"}.
2010: 20 20 20 20 62 69 6e 64 74 61 67 73 20 2e 74 2e      bindtags .t.
2020: 66 20 7b 61 20 62 20 63 20 64 20 65 20 66 20 67  f {a b c d e f g
2030: 20 68 20 69 20 6a 20 6b 20 6c 20 6d 20 6e 20 6f   h i j k l m n o
2040: 20 70 20 71 20 72 20 73 20 74 20 75 20 76 20 77   p q r s t u v w
2050: 20 78 20 79 20 7a 7d 0a 20 20 20 20 0a 20 20 20   x y z}.    .   
2060: 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
2070: 2e 74 2e 66 20 3c 45 6e 74 65 72 3e 0a 7d 20 2d  .t.f <Enter>.} -
2080: 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
2090: 73 74 72 6f 79 20 2e 74 2e 66 0a 20 20 20 20 75  stroy .t.f.    u
20a0: 6e 73 65 74 42 69 6e 64 69 6e 67 73 0a 7d 20 2d  nsetBindings.} -
20b0: 72 65 73 75 6c 74 20 7b 7d 0a 0a 0a 74 65 73 74  result {}...test
20c0: 20 62 69 6e 64 2d 35 2e 31 20 7b 54 6b 5f 43 72   bind-5.1 {Tk_Cr
20d0: 65 61 74 65 42 69 6e 64 69 6e 67 54 61 62 6c 65  eateBindingTable
20e0: 20 70 72 6f 63 65 64 75 72 65 7d 20 2d 62 6f 64   procedure} -bod
20f0: 79 20 7b 0a 20 20 20 20 63 61 6e 76 61 73 20 2e  y {.    canvas .
2100: 74 2e 63 0a 20 20 20 20 2e 74 2e 63 20 62 69 6e  t.c.    .t.c bin
2110: 64 20 66 6f 6f 0a 7d 20 2d 63 6c 65 61 6e 75 70  d foo.} -cleanup
2120: 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
2130: 74 2e 63 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 7d  t.c.} -result {}
2140: 0a 0a 0a 74 65 73 74 20 62 69 6e 64 2d 36 2e 31  ...test bind-6.1
2150: 20 7b 54 6b 5f 44 65 6c 65 74 65 42 69 6e 64 54   {Tk_DeleteBindT
2160: 61 62 6c 65 20 70 72 6f 63 65 64 75 72 65 7d 20  able procedure} 
2170: 2d 62 6f 64 79 20 7b 0a 20 20 20 20 63 61 6e 76  -body {.    canv
2180: 61 73 20 2e 74 2e 63 0a 20 20 20 20 2e 74 2e 63  as .t.c.    .t.c
2190: 20 62 69 6e 64 20 66 6f 6f 20 3c 31 3e 20 7b 73   bind foo <1> {s
21a0: 74 72 69 6e 67 20 31 7d 0a 20 20 20 20 2e 74 2e  tring 1}.    .t.
21b0: 63 20 63 72 65 61 74 65 20 72 65 63 74 61 6e 67  c create rectang
21c0: 6c 65 20 30 20 30 20 31 30 30 20 31 30 30 0a 20  le 0 0 100 100. 
21d0: 20 20 20 2e 74 2e 63 20 62 69 6e 64 20 31 20 3c     .t.c bind 1 <
21e0: 32 3e 20 7b 73 74 72 69 6e 67 20 32 7d 0a 20 20  2> {string 2}.  
21f0: 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 63 0a 7d    destroy .t.c.}
2200: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
2210: 64 65 73 74 72 6f 79 20 2e 74 2e 63 0a 7d 20 2d  destroy .t.c.} -
2220: 72 65 73 75 6c 74 20 7b 7d 0a 74 65 73 74 20 62  result {}.test b
2230: 69 6e 64 2d 37 2e 31 20 7b 54 6b 5f 43 72 65 61  ind-7.1 {Tk_Crea
2240: 74 65 42 69 6e 64 69 6e 67 20 70 72 6f 63 65 64  teBinding proced
2250: 75 72 65 3a 20 62 61 64 20 62 69 6e 64 69 6e 67  ure: bad binding
2260: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 63 61  } -body {.    ca
2270: 6e 76 61 73 20 2e 74 2e 63 0a 20 20 20 20 2e 74  nvas .t.c.    .t
2280: 2e 63 20 62 69 6e 64 20 66 6f 6f 20 3c 0a 7d 20  .c bind foo <.} 
2290: 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64  -cleanup {.    d
22a0: 65 73 74 72 6f 79 20 2e 74 2e 63 0a 7d 20 2d 72  estroy .t.c.} -r
22b0: 65 74 75 72 6e 43 6f 64 65 73 20 65 72 72 6f 72  eturnCodes error
22c0: 20 2d 72 65 73 75 6c 74 20 7b 6e 6f 20 65 76 65   -result {no eve
22d0: 6e 74 20 74 79 70 65 20 6f 72 20 62 75 74 74 6f  nt type or butto
22e0: 6e 20 23 20 6f 72 20 6b 65 79 73 79 6d 7d 0a 74  n # or keysym}.t
22f0: 65 73 74 20 62 69 6e 64 2d 37 2e 33 20 7b 54 6b  est bind-7.3 {Tk
2300: 5f 43 72 65 61 74 65 42 69 6e 64 69 6e 67 20 70  _CreateBinding p
2310: 72 6f 63 65 64 75 72 65 3a 20 61 70 70 65 6e 64  rocedure: append
2320: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 63 61  } -body {.    ca
2330: 6e 76 61 73 20 2e 74 2e 63 0a 20 20 20 20 2e 74  nvas .t.c.    .t
2340: 2e 63 20 62 69 6e 64 20 66 6f 6f 20 3c 31 3e 20  .c bind foo <1> 
2350: 22 62 75 74 74 6f 6e 20 31 22 0a 20 20 20 20 2e  "button 1".    .
2360: 74 2e 63 20 62 69 6e 64 20 66 6f 6f 20 3c 31 3e  t.c bind foo <1>
2370: 20 22 2b 6d 6f 72 65 20 62 75 74 74 6f 6e 20 31   "+more button 1
2380: 22 0a 20 20 20 20 2e 74 2e 63 20 62 69 6e 64 20  ".    .t.c bind 
2390: 66 6f 6f 20 3c 31 3e 0a 7d 20 2d 63 6c 65 61 6e  foo <1>.} -clean
23a0: 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79  up {.    destroy
23b0: 20 2e 74 2e 63 0a 7d 20 2d 72 65 73 75 6c 74 20   .t.c.} -result 
23c0: 7b 62 75 74 74 6f 6e 20 31 0a 6d 6f 72 65 20 62  {button 1.more b
23d0: 75 74 74 6f 6e 20 31 7d 0a 74 65 73 74 20 62 69  utton 1}.test bi
23e0: 6e 64 2d 37 2e 34 20 7b 54 6b 5f 43 72 65 61 74  nd-7.4 {Tk_Creat
23f0: 65 42 69 6e 64 69 6e 67 20 70 72 6f 63 65 64 75  eBinding procedu
2400: 72 65 3a 20 61 70 70 65 6e 64 20 74 6f 20 6e 6f  re: append to no
2410: 6e 2d 65 78 69 73 74 69 6e 67 7d 20 2d 62 6f 64  n-existing} -bod
2420: 79 20 7b 0a 20 20 20 20 63 61 6e 76 61 73 20 2e  y {.    canvas .
2430: 74 2e 63 0a 20 20 20 20 2e 74 2e 63 20 62 69 6e  t.c.    .t.c bin
2440: 64 20 66 6f 6f 20 3c 31 3e 20 22 2b 62 75 74 74  d foo <1> "+butt
2450: 6f 6e 20 31 22 0a 20 20 20 20 2e 74 2e 63 20 62  on 1".    .t.c b
2460: 69 6e 64 20 66 6f 6f 20 3c 31 3e 0a 7d 20 2d 63  ind foo <1>.} -c
2470: 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73  leanup {.    des
2480: 74 72 6f 79 20 2e 74 2e 63 0a 7d 20 2d 72 65 73  troy .t.c.} -res
2490: 75 6c 74 20 7b 62 75 74 74 6f 6e 20 31 7d 0a 0a  ult {button 1}..
24a0: 74 65 73 74 20 62 69 6e 64 2d 38 2e 31 20 7b 54  test bind-8.1 {T
24b0: 6b 5f 43 72 65 61 74 65 42 69 6e 64 69 6e 67 3a  k_CreateBinding:
24c0: 20 65 72 72 6f 72 7d 20 2d 62 6f 64 79 20 7b 0a   error} -body {.
24d0: 20 20 20 20 62 69 6e 64 20 2e 20 3c 78 79 7a 3e      bind . <xyz>
24e0: 20 22 78 79 7a 22 0a 7d 20 2d 72 65 74 75 72 6e   "xyz".} -return
24f0: 43 6f 64 65 73 20 65 72 72 6f 72 20 2d 72 65 73  Codes error -res
2500: 75 6c 74 20 7b 62 61 64 20 65 76 65 6e 74 20 74  ult {bad event t
2510: 79 70 65 20 6f 72 20 6b 65 79 73 79 6d 20 22 78  ype or keysym "x
2520: 79 7a 22 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d  yz"}..test bind-
2530: 39 2e 31 20 7b 54 6b 5f 44 65 6c 65 74 65 42 69  9.1 {Tk_DeleteBi
2540: 6e 64 69 6e 67 20 70 72 6f 63 65 64 75 72 65 7d  nding procedure}
2550: 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 66 72 61   -body {.    fra
2560: 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54  me .t.f -class T
2570: 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d  est -width 150 -
2580: 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 62  height 100.    b
2590: 69 6e 64 20 2e 74 2e 66 20 3c 0a 7d 20 2d 63 6c  ind .t.f <.} -cl
25a0: 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74  eanup {.    dest
25b0: 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 74 75  roy .t.f.} -retu
25c0: 72 6e 43 6f 64 65 73 20 6f 6b 0a 74 65 73 74 20  rnCodes ok.test 
25d0: 62 69 6e 64 2d 39 2e 32 20 7b 54 6b 5f 44 65 6c  bind-9.2 {Tk_Del
25e0: 65 74 65 42 69 6e 64 69 6e 67 20 70 72 6f 63 65  eteBinding proce
25f0: 64 75 72 65 7d 20 2d 73 65 74 75 70 20 7b 0a 20  dure} -setup {. 
2600: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 7b 7d     set result {}
2610: 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 66  .} -body {.    f
2620: 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73  rame .t.f -class
2630: 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30   Test -width 150
2640: 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20   -height 100.   
2650: 20 66 6f 72 65 61 63 68 20 69 20 7b 61 20 62 20   foreach i {a b 
2660: 63 20 64 7d 20 7b 0a 20 20 20 20 20 20 20 20 62  c d} {.        b
2670: 69 6e 64 20 2e 74 2e 66 20 24 69 20 22 62 69 6e  ind .t.f $i "bin
2680: 64 69 6e 67 20 66 6f 72 20 24 69 22 0a 20 20 20  ding for $i".   
2690: 20 7d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 69   }.    foreach i
26a0: 20 7b 62 20 64 20 61 20 63 7d 20 7b 0a 20 20 20   {b d a c} {.   
26b0: 20 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 24       bind .t.f $
26c0: 69 20 7b 7d 0a 20 20 20 20 20 20 20 20 6c 61 70  i {}.        lap
26d0: 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 6c 73 6f  pend result [lso
26e0: 72 74 20 5b 62 69 6e 64 20 2e 74 2e 66 5d 5d 0a  rt [bind .t.f]].
26f0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
2700: 20 24 72 65 73 75 6c 74 0a 7d 20 2d 63 6c 65 61   $result.} -clea
2710: 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f  nup {.    destro
2720: 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74  y .t.f.} -result
2730: 20 7b 7b 61 20 63 20 64 7d 20 7b 61 20 63 7d 20   {{a c d} {a c} 
2740: 63 20 7b 7d 7d 0a 74 65 73 74 20 62 69 6e 64 2d  c {}}.test bind-
2750: 39 2e 33 20 7b 54 6b 5f 44 65 6c 65 74 65 42 69  9.3 {Tk_DeleteBi
2760: 6e 64 69 6e 67 20 70 72 6f 63 65 64 75 72 65 7d  nding procedure}
2770: 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 73 65   -setup {.    se
2780: 74 20 72 65 73 75 6c 74 20 7b 7d 0a 7d 20 2d 62  t result {}.} -b
2790: 6f 64 79 20 7b 0a 20 20 20 20 66 72 61 6d 65 20  ody {.    frame 
27a0: 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74  .t.f -class Test
27b0: 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69   -width 150 -hei
27c0: 67 68 74 20 31 30 30 0a 20 20 20 20 66 6f 72 65  ght 100.    fore
27d0: 61 63 68 20 69 20 7b 3c 31 3e 20 3c 4d 65 74 61  ach i {<1> <Meta
27e0: 2d 31 3e 20 3c 43 6f 6e 74 72 6f 6c 2d 31 3e 20  -1> <Control-1> 
27f0: 3c 44 6f 75 62 6c 65 2d 41 6c 74 2d 31 3e 7d 20  <Double-Alt-1>} 
2800: 7b 0a 20 20 20 20 20 20 20 20 62 69 6e 64 20 2e  {.        bind .
2810: 74 2e 66 20 24 69 20 22 62 69 6e 64 69 6e 67 20  t.f $i "binding 
2820: 66 6f 72 20 24 69 22 0a 20 20 20 20 7d 0a 20 20  for $i".    }.  
2830: 20 20 66 6f 72 65 61 63 68 20 69 20 7b 3c 43 6f    foreach i {<Co
2840: 6e 74 72 6f 6c 2d 31 3e 20 3c 44 6f 75 62 6c 65  ntrol-1> <Double
2850: 2d 41 6c 74 2d 31 3e 20 3c 31 3e 20 3c 4d 65 74  -Alt-1> <1> <Met
2860: 61 2d 31 3e 7d 20 7b 0a 20 20 20 20 20 20 20 20  a-1>} {.        
2870: 62 69 6e 64 20 2e 74 2e 66 20 24 69 20 7b 7d 0a  bind .t.f $i {}.
2880: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend 
2890: 72 65 73 75 6c 74 20 5b 6c 73 6f 72 74 20 5b 62  result [lsort [b
28a0: 69 6e 64 20 2e 74 2e 66 5d 5d 0a 20 20 20 20 7d  ind .t.f]].    }
28b0: 0a 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73  .    return $res
28c0: 75 6c 74 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  ult.} -cleanup {
28d0: 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e  .    destroy .t.
28e0: 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 7b 3c 42  f.} -result {{<B
28f0: 75 74 74 6f 6e 2d 31 3e 20 3c 44 6f 75 62 6c 65  utton-1> <Double
2900: 2d 41 6c 74 2d 42 75 74 74 6f 6e 2d 31 3e 20 3c  -Alt-Button-1> <
2910: 4d 65 74 61 2d 42 75 74 74 6f 6e 2d 31 3e 7d 20  Meta-Button-1>} 
2920: 7b 3c 42 75 74 74 6f 6e 2d 31 3e 20 3c 4d 65 74  {<Button-1> <Met
2930: 61 2d 42 75 74 74 6f 6e 2d 31 3e 7d 20 3c 4d 65  a-Button-1>} <Me
2940: 74 61 2d 42 75 74 74 6f 6e 2d 31 3e 20 7b 7d 7d  ta-Button-1> {}}
2950: 0a 0a 74 65 73 74 20 62 69 6e 64 2d 31 30 2e 31  ..test bind-10.1
2960: 20 7b 54 6b 5f 47 65 74 42 69 6e 64 69 6e 67 20   {Tk_GetBinding 
2970: 70 72 6f 63 65 64 75 72 65 7d 20 2d 62 6f 64 79  procedure} -body
2980: 20 7b 0a 20 20 20 20 63 61 6e 76 61 73 20 2e 74   {.    canvas .t
2990: 2e 63 0a 20 20 20 20 2e 74 2e 63 20 62 69 6e 64  .c.    .t.c bind
29a0: 20 66 6f 6f 20 3c 0a 7d 20 2d 63 6c 65 61 6e 75   foo <.} -cleanu
29b0: 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20  p {.    destroy 
29c0: 2e 74 2e 63 0a 7d 20 2d 72 65 74 75 72 6e 43 6f  .t.c.} -returnCo
29d0: 64 65 73 20 65 72 72 6f 72 20 2d 72 65 73 75 6c  des error -resul
29e0: 74 20 7b 6e 6f 20 65 76 65 6e 74 20 74 79 70 65  t {no event type
29f0: 20 6f 72 20 62 75 74 74 6f 6e 20 23 20 6f 72 20   or button # or 
2a00: 6b 65 79 73 79 6d 7d 0a 74 65 73 74 20 62 69 6e  keysym}.test bin
2a10: 64 2d 31 30 2e 32 20 7b 54 6b 5f 47 65 74 42 69  d-10.2 {Tk_GetBi
2a20: 6e 64 69 6e 67 20 70 72 6f 63 65 64 75 72 65 7d  nding procedure}
2a30: 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 63 61 6e   -body {.    can
2a40: 76 61 73 20 2e 74 2e 63 0a 20 20 20 20 2e 74 2e  vas .t.c.    .t.
2a50: 63 20 62 69 6e 64 20 66 6f 6f 20 61 20 54 65 73  c bind foo a Tes
2a60: 74 0a 20 20 20 20 2e 74 2e 63 20 62 69 6e 64 20  t.    .t.c bind 
2a70: 66 6f 6f 20 61 0a 7d 20 2d 63 6c 65 61 6e 75 70  foo a.} -cleanup
2a80: 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
2a90: 74 2e 63 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 54  t.c.} -result {T
2aa0: 65 73 74 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d  est}..test bind-
2ab0: 31 31 2e 31 20 7b 54 6b 5f 47 65 74 41 6c 6c 42  11.1 {Tk_GetAllB
2ac0: 69 6e 64 69 6e 67 73 20 70 72 6f 63 65 64 75 72  indings procedur
2ad0: 65 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 66  e} -body {.    f
2ae0: 72 61 6d 65 20 2e 74 2e 66 20 0a 20 20 20 20 66  rame .t.f .    f
2af0: 6f 72 65 61 63 68 20 69 20 22 21 20 61 20 5c 5c  oreach i "! a \\
2b00: 5c 7b 20 7e 20 3c 44 65 6c 65 74 65 3e 20 3c 73  \{ ~ <Delete> <s
2b10: 70 61 63 65 3e 20 3c 3c 50 61 73 74 65 3e 3e 20  pace> <<Paste>> 
2b20: 3c 54 61 62 3e 20 3c 4c 69 6e 65 66 65 65 64 3e  <Tab> <Linefeed>
2b30: 20 3c 6c 65 73 73 3e 20 3c 4d 65 74 61 2d 61 3e   <less> <Meta-a>
2b40: 20 3c 41 63 69 72 63 75 6d 66 6c 65 78 3e 22 20   <Acircumflex>" 
2b50: 7b 0a 20 20 20 20 20 20 20 20 62 69 6e 64 20 2e  {.        bind .
2b60: 74 2e 66 20 24 69 20 54 65 73 74 0a 20 20 20 20  t.f $i Test.    
2b70: 7d 0a 20 20 20 20 6c 73 6f 72 74 20 5b 62 69 6e  }.    lsort [bin
2b80: 64 20 2e 74 2e 66 5d 0a 7d 20 2d 63 6c 65 61 6e  d .t.f].} -clean
2b90: 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79  up {.    destroy
2ba0: 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20   .t.f.} -result 
2bb0: 7b 21 20 3c 3c 50 61 73 74 65 3e 3e 20 3c 4b 65  {! <<Paste>> <Ke
2bc0: 79 2d 41 63 69 72 63 75 6d 66 6c 65 78 3e 20 3c  y-Acircumflex> <
2bd0: 4b 65 79 2d 44 65 6c 65 74 65 3e 20 3c 4b 65 79  Key-Delete> <Key
2be0: 2d 4c 69 6e 65 66 65 65 64 3e 20 3c 4b 65 79 2d  -Linefeed> <Key-
2bf0: 54 61 62 3e 20 3c 4b 65 79 2d 6c 65 73 73 3e 20  Tab> <Key-less> 
2c00: 3c 4b 65 79 2d 73 70 61 63 65 3e 20 3c 4d 65 74  <Key-space> <Met
2c10: 61 2d 4b 65 79 2d 61 3e 20 61 20 5c 7b 20 7e 7d  a-Key-a> a \{ ~}
2c20: 0a 74 65 73 74 20 62 69 6e 64 2d 31 31 2e 32 20  .test bind-11.2 
2c30: 7b 54 6b 5f 47 65 74 41 6c 6c 42 69 6e 64 69 6e  {Tk_GetAllBindin
2c40: 67 73 20 70 72 6f 63 65 64 75 72 65 7d 20 2d 62  gs procedure} -b
2c50: 6f 64 79 20 7b 0a 20 20 20 20 66 72 61 6d 65 20  ody {.    frame 
2c60: 2e 74 2e 66 20 0a 20 20 20 20 66 6f 72 65 61 63  .t.f .    foreac
2c70: 68 20 69 20 22 3c 44 6f 75 62 6c 65 2d 31 3e 20  h i "<Double-1> 
2c80: 3c 54 72 69 70 6c 65 2d 31 3e 20 3c 4d 65 74 61  <Triple-1> <Meta
2c90: 2d 43 6f 6e 74 72 6f 6c 2d 61 3e 20 3c 44 6f 75  -Control-a> <Dou
2ca0: 62 6c 65 2d 41 6c 74 2d 45 6e 74 65 72 3e 20 3c  ble-Alt-Enter> <
2cb0: 31 3e 22 20 7b 0a 20 20 20 20 20 20 20 20 62 69  1>" {.        bi
2cc0: 6e 64 20 2e 74 2e 66 20 24 69 20 54 65 73 74 0a  nd .t.f $i Test.
2cd0: 20 20 20 20 7d 0a 20 20 20 20 6c 73 6f 72 74 20      }.    lsort 
2ce0: 5b 62 69 6e 64 20 2e 74 2e 66 5d 0a 7d 20 2d 63  [bind .t.f].} -c
2cf0: 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73  leanup {.    des
2d00: 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73  troy .t.f.} -res
2d10: 75 6c 74 20 7b 3c 42 75 74 74 6f 6e 2d 31 3e 20  ult {<Button-1> 
2d20: 3c 43 6f 6e 74 72 6f 6c 2d 4d 65 74 61 2d 4b 65  <Control-Meta-Ke
2d30: 79 2d 61 3e 20 3c 44 6f 75 62 6c 65 2d 41 6c 74  y-a> <Double-Alt
2d40: 2d 45 6e 74 65 72 3e 20 3c 44 6f 75 62 6c 65 2d  -Enter> <Double-
2d50: 42 75 74 74 6f 6e 2d 31 3e 20 3c 54 72 69 70 6c  Button-1> <Tripl
2d60: 65 2d 42 75 74 74 6f 6e 2d 31 3e 7d 0a 74 65 73  e-Button-1>}.tes
2d70: 74 20 62 69 6e 64 2d 31 31 2e 33 20 7b 54 6b 5f  t bind-11.3 {Tk_
2d80: 47 65 74 41 6c 6c 42 69 6e 64 69 6e 67 73 20 70  GetAllBindings p
2d90: 72 6f 63 65 64 75 72 65 7d 20 2d 62 6f 64 79 20  rocedure} -body 
2da0: 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66  {.    frame .t.f
2db0: 20 0a 20 20 20 20 66 6f 72 65 61 63 68 20 69 20   .    foreach i 
2dc0: 22 3c 44 6f 75 62 6c 65 2d 54 72 69 70 6c 65 2d  "<Double-Triple-
2dd0: 31 3e 20 61 62 63 64 20 61 3c 4c 65 61 76 65 3e  1> abcd a<Leave>
2de0: 62 22 20 7b 0a 20 20 20 20 20 20 20 20 62 69 6e  b" {.        bin
2df0: 64 20 2e 74 2e 66 20 24 69 20 54 65 73 74 0a 20  d .t.f $i Test. 
2e00: 20 20 20 7d 0a 20 20 20 20 6c 73 6f 72 74 20 5b     }.    lsort [
2e10: 62 69 6e 64 20 2e 74 2e 66 5d 0a 7d 20 2d 63 6c  bind .t.f].} -cl
2e20: 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74  eanup {.    dest
2e30: 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75  roy .t.f.} -resu
2e40: 6c 74 20 7b 3c 54 72 69 70 6c 65 2d 42 75 74 74  lt {<Triple-Butt
2e50: 6f 6e 2d 31 3e 20 61 3c 4c 65 61 76 65 3e 62 20  on-1> a<Leave>b 
2e60: 61 62 63 64 7d 0a 0a 0a 74 65 73 74 20 62 69 6e  abcd}...test bin
2e70: 64 2d 31 32 2e 31 20 7b 54 6b 5f 44 65 6c 65 74  d-12.1 {Tk_Delet
2e80: 65 41 6c 6c 42 69 6e 64 69 6e 67 73 20 70 72 6f  eAllBindings pro
2e90: 63 65 64 75 72 65 7d 20 2d 62 6f 64 79 20 7b 0a  cedure} -body {.
2ea0: 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d      frame .t.f -
2eb0: 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74  class Test -widt
2ec0: 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30  h 150 -height 10
2ed0: 30 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74  0.    destroy .t
2ee0: 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 7d 0a  .f.} -result {}.
2ef0: 74 65 73 74 20 62 69 6e 64 2d 31 32 2e 32 20 7b  test bind-12.2 {
2f00: 54 6b 5f 44 65 6c 65 74 65 41 6c 6c 42 69 6e 64  Tk_DeleteAllBind
2f10: 69 6e 67 73 20 70 72 6f 63 65 64 75 72 65 7d 20  ings procedure} 
2f20: 2d 62 6f 64 79 20 7b 0a 20 20 20 20 66 72 61 6d  -body {.    fram
2f30: 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65  e .t.f -class Te
2f40: 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68  st -width 150 -h
2f50: 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 66 6f  eight 100.    fo
2f60: 72 65 61 63 68 20 69 20 22 61 20 62 20 63 20 3c  reach i "a b c <
2f70: 4d 65 74 61 2d 31 3e 20 3c 41 6c 74 2d 61 3e 20  Meta-1> <Alt-a> 
2f80: 3c 43 6f 6e 74 72 6f 6c 2d 61 3e 22 20 7b 0a 20  <Control-a>" {. 
2f90: 20 20 20 20 20 20 20 62 69 6e 64 20 2e 74 2e 66         bind .t.f
2fa0: 20 24 69 20 78 0a 20 20 20 20 7d 0a 20 20 20 20   $i x.    }.    
2fb0: 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d  destroy .t.f.} -
2fc0: 72 65 73 75 6c 74 20 7b 7d 0a 0a 74 65 73 74 20  result {}..test 
2fd0: 62 69 6e 64 2d 31 33 2e 31 20 7b 54 6b 5f 42 69  bind-13.1 {Tk_Bi
2fe0: 6e 64 45 76 65 6e 74 20 70 72 6f 63 65 64 75 72  ndEvent procedur
2ff0: 65 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20  e} -setup {.    
3000: 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73  frame .t.f -clas
3010: 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35  s Test -width 15
3020: 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20  0 -height 100.  
3030: 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20    pack .t.f.    
3040: 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e  focus -force .t.
3050: 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20 20  f.    update.   
3060: 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64   set x {}.} -bod
3070: 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 54 65 73  y {.    bind Tes
3080: 74 20 3c 4b 65 79 50 72 65 73 73 3e 20 7b 6c 61  t <KeyPress> {la
3090: 70 70 65 6e 64 20 78 20 22 25 57 20 25 4b 20 54  ppend x "%W %K T
30a0: 65 73 74 20 4b 65 79 50 72 65 73 73 22 7d 0a 20  est KeyPress"}. 
30b0: 20 20 20 62 69 6e 64 20 61 6c 6c 20 3c 4b 65 79     bind all <Key
30c0: 50 72 65 73 73 3e 20 7b 6c 61 70 70 65 6e 64 20  Press> {lappend 
30d0: 78 20 22 25 57 20 25 4b 20 61 6c 6c 20 4b 65 79  x "%W %K all Key
30e0: 50 72 65 73 73 22 7d 0a 20 20 20 20 62 69 6e 64  Press"}.    bind
30f0: 20 54 65 73 74 20 3a 20 7b 6c 61 70 70 65 6e 64   Test : {lappend
3100: 20 78 20 22 25 57 20 25 4b 20 54 65 73 74 20 3a   x "%W %K Test :
3110: 22 7d 0a 20 20 20 20 62 69 6e 64 20 61 6c 6c 20  "}.    bind all 
3120: 20 5f 20 7b 6c 61 70 70 65 6e 64 20 78 20 22 25   _ {lappend x "%
3130: 57 20 25 4b 20 61 6c 6c 20 5f 22 7d 0a 20 20 20  W %K all _"}.   
3140: 20 62 69 6e 64 20 2e 74 2e 66 20 3a 20 7b 6c 61   bind .t.f : {la
3150: 70 70 65 6e 64 20 78 20 22 25 57 20 25 4b 20 2e  ppend x "%W %K .
3160: 74 2e 66 20 3a 22 7d 0a 20 20 20 20 0a 20 20 20  t.f :"}.    .   
3170: 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
3180: 2e 74 2e 66 20 3c 4b 65 79 2d 63 6f 6c 6f 6e 3e  .t.f <Key-colon>
3190: 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
31a0: 61 74 65 20 2e 74 2e 66 20 3c 4b 65 79 2d 70 6c  ate .t.f <Key-pl
31b0: 75 73 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65  us>.    event ge
31c0: 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 4b 65 79  nerate .t.f <Key
31d0: 2d 75 6e 64 65 72 73 63 6f 72 65 3e 0a 20 20 20  -underscore>.   
31e0: 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d 63 6c   return $x.} -cl
31f0: 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74  eanup {.    dest
3200: 72 6f 79 20 2e 74 2e 66 0a 20 20 20 20 62 69 6e  roy .t.f.    bin
3210: 64 20 61 6c 6c 20 3c 4b 65 79 50 72 65 73 73 3e  d all <KeyPress>
3220: 20 7b 7d 0a 20 20 20 20 62 69 6e 64 20 54 65 73   {}.    bind Tes
3230: 74 20 3c 4b 65 79 50 72 65 73 73 3e 20 7b 7d 0a  t <KeyPress> {}.
3240: 20 20 20 20 62 69 6e 64 20 61 6c 6c 20 5f 20 7b      bind all _ {
3250: 7d 0a 20 20 20 20 62 69 6e 64 20 54 65 73 74 20  }.    bind Test 
3260: 3a 20 7b 7d 0a 7d 20 2d 72 65 73 75 6c 74 20 7b  : {}.} -result {
3270: 7b 2e 74 2e 66 20 63 6f 6c 6f 6e 20 2e 74 2e 66  {.t.f colon .t.f
3280: 20 3a 7d 20 7b 2e 74 2e 66 20 63 6f 6c 6f 6e 20   :} {.t.f colon 
3290: 54 65 73 74 20 3a 7d 20 7b 2e 74 2e 66 20 63 6f  Test :} {.t.f co
32a0: 6c 6f 6e 20 61 6c 6c 20 4b 65 79 50 72 65 73 73  lon all KeyPress
32b0: 7d 20 7b 2e 74 2e 66 20 70 6c 75 73 20 54 65 73  } {.t.f plus Tes
32c0: 74 20 4b 65 79 50 72 65 73 73 7d 20 7b 2e 74 2e  t KeyPress} {.t.
32d0: 66 20 70 6c 75 73 20 61 6c 6c 20 4b 65 79 50 72  f plus all KeyPr
32e0: 65 73 73 7d 20 7b 2e 74 2e 66 20 75 6e 64 65 72  ess} {.t.f under
32f0: 73 63 6f 72 65 20 54 65 73 74 20 4b 65 79 50 72  score Test KeyPr
3300: 65 73 73 7d 20 7b 2e 74 2e 66 20 75 6e 64 65 72  ess} {.t.f under
3310: 73 63 6f 72 65 20 61 6c 6c 20 5f 7d 7d 0a 0a 74  score all _}}..t
3320: 65 73 74 20 62 69 6e 64 2d 31 33 2e 32 20 7b 54  est bind-13.2 {T
3330: 6b 5f 42 69 6e 64 45 76 65 6e 74 20 70 72 6f 63  k_BindEvent proc
3340: 65 64 75 72 65 7d 20 2d 73 65 74 75 70 20 7b 0a  edure} -setup {.
3350: 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d      frame .t.f -
3360: 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74  class Test -widt
3370: 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30  h 150 -height 10
3380: 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a  0.    pack .t.f.
3390: 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65      focus -force
33a0: 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65   .t.f.    update
33b0: 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20  .    set x {}.} 
33c0: 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64  -body {.    bind
33d0: 20 54 65 73 74 20 3c 4b 65 79 50 72 65 73 73 3e   Test <KeyPress>
33e0: 20 7b 6c 61 70 70 65 6e 64 20 78 20 22 25 57 20   {lappend x "%W 
33f0: 25 4b 20 54 65 73 74 20 70 72 65 73 73 20 61 6e  %K Test press an
3400: 79 22 3b 20 62 72 65 61 6b 7d 0a 20 20 20 20 62  y"; break}.    b
3410: 69 6e 64 20 61 6c 6c 20 3c 4b 65 79 50 72 65 73  ind all <KeyPres
3420: 73 3e 20 7b 63 6f 6e 74 69 6e 75 65 3b 20 6c 61  s> {continue; la
3430: 70 70 65 6e 64 20 78 20 22 25 57 20 25 4b 20 61  ppend x "%W %K a
3440: 6c 6c 20 70 72 65 73 73 20 61 6e 79 22 7d 0a 20  ll press any"}. 
3450: 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3a 20 7b     bind .t.f : {
3460: 6c 61 70 70 65 6e 64 20 78 20 22 25 57 20 25 4b  lappend x "%W %K
3470: 20 2e 74 2e 66 20 70 72 65 73 73 65 64 20 63 6f   .t.f pressed co
3480: 6c 6f 6e 22 7d 0a 20 20 20 20 0a 20 20 20 20 65  lon"}.    .    e
3490: 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
34a0: 2e 66 20 3c 4b 65 79 2d 63 6f 6c 6f 6e 3e 0a 20  .f <Key-colon>. 
34b0: 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d     return $x.} -
34c0: 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
34d0: 73 74 72 6f 79 20 2e 74 2e 66 0a 20 20 20 20 62  stroy .t.f.    b
34e0: 69 6e 64 20 61 6c 6c 20 3c 4b 65 79 50 72 65 73  ind all <KeyPres
34f0: 73 3e 20 7b 7d 0a 20 20 20 20 62 69 6e 64 20 54  s> {}.    bind T
3500: 65 73 74 20 3c 4b 65 79 50 72 65 73 73 3e 20 7b  est <KeyPress> {
3510: 7d 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 7b 2e 74  }.} -result {{.t
3520: 2e 66 20 63 6f 6c 6f 6e 20 2e 74 2e 66 20 70 72  .f colon .t.f pr
3530: 65 73 73 65 64 20 63 6f 6c 6f 6e 7d 20 7b 2e 74  essed colon} {.t
3540: 2e 66 20 63 6f 6c 6f 6e 20 54 65 73 74 20 70 72  .f colon Test pr
3550: 65 73 73 20 61 6e 79 7d 7d 0a 0a 74 65 73 74 20  ess any}}..test 
3560: 62 69 6e 64 2d 31 33 2e 33 20 7b 54 6b 5f 42 69  bind-13.3 {Tk_Bi
3570: 6e 64 45 76 65 6e 74 20 70 72 6f 63 65 64 75 72  ndEvent procedur
3580: 65 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20  e} -setup {.    
3590: 70 72 6f 63 20 62 67 65 72 72 6f 72 20 61 72 67  proc bgerror arg
35a0: 73 20 7b 7d 0a 20 20 20 20 66 72 61 6d 65 20 2e  s {}.    frame .
35b0: 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20  t.f -class Test 
35c0: 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67  -width 150 -heig
35d0: 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20  ht 100.    pack 
35e0: 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d  .t.f.    focus -
35f0: 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75  force .t.f.    u
3600: 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20  pdate.    set x 
3610: 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20  {}.} -body {.   
3620: 20 62 69 6e 64 20 54 65 73 74 20 3c 4b 65 79 50   bind Test <KeyP
3630: 72 65 73 73 3e 20 7b 6c 61 70 70 65 6e 64 20 78  ress> {lappend x
3640: 20 22 25 57 20 25 4b 20 54 65 73 74 20 70 72 65   "%W %K Test pre
3650: 73 73 20 61 6e 79 22 3b 20 65 72 72 6f 72 20 54  ss any"; error T
3660: 65 73 74 7d 0a 20 20 20 20 62 69 6e 64 20 2e 74  est}.    bind .t
3670: 2e 66 20 3a 20 7b 6c 61 70 70 65 6e 64 20 78 20  .f : {lappend x 
3680: 22 25 57 20 25 4b 20 2e 74 2e 66 20 70 72 65 73  "%W %K .t.f pres
3690: 73 65 64 20 63 6f 6c 6f 6e 22 7d 0a 20 20 20 20  sed colon"}.    
36a0: 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
36b0: 74 2e 66 20 3c 4b 65 79 2d 63 6f 6c 6f 6e 3e 0a  t.f <Key-colon>.
36c0: 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 6c      update.    l
36d0: 69 73 74 20 24 78 20 24 65 72 72 6f 72 49 6e 66  ist $x $errorInf
36e0: 6f 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  o.} -cleanup {. 
36f0: 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
3700: 20 20 20 20 62 69 6e 64 20 54 65 73 74 20 3c 4b      bind Test <K
3710: 65 79 50 72 65 73 73 3e 20 7b 7d 0a 20 20 20 20  eyPress> {}.    
3720: 72 65 6e 61 6d 65 20 62 67 65 72 72 6f 72 20 7b  rename bgerror {
3730: 7d 0a 7d 20 20 2d 72 65 73 75 6c 74 20 7b 7b 7b  }.}  -result {{{
3740: 2e 74 2e 66 20 63 6f 6c 6f 6e 20 2e 74 2e 66 20  .t.f colon .t.f 
3750: 70 72 65 73 73 65 64 20 63 6f 6c 6f 6e 7d 20 7b  pressed colon} {
3760: 2e 74 2e 66 20 63 6f 6c 6f 6e 20 54 65 73 74 20  .t.f colon Test 
3770: 70 72 65 73 73 20 61 6e 79 7d 7d 20 7b 54 65 73  press any}} {Tes
3780: 74 0a 20 20 20 20 77 68 69 6c 65 20 65 78 65 63  t.    while exec
3790: 75 74 69 6e 67 0a 22 65 72 72 6f 72 20 54 65 73  uting."error Tes
37a0: 74 22 0a 20 20 20 20 28 63 6f 6d 6d 61 6e 64 20  t".    (command 
37b0: 62 6f 75 6e 64 20 74 6f 20 65 76 65 6e 74 29 7d  bound to event)}
37c0: 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31 33 2e 34  }.test bind-13.4
37d0: 20 7b 54 6b 5f 42 69 6e 64 45 76 65 6e 74 20 70   {Tk_BindEvent p
37e0: 72 6f 63 65 64 75 72 65 7d 20 2d 73 65 74 75 70  rocedure} -setup
37f0: 20 7b 0a 20 20 20 20 70 72 6f 63 20 66 6f 6f 20   {.    proc foo 
3800: 7b 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  {} {.        set
3810: 20 78 20 34 34 0a 20 20 20 20 20 20 20 20 65 76   x 44.        ev
3820: 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
3830: 66 20 3c 4b 65 79 2d 63 6f 6c 6f 6e 3e 0a 20 20  f <Key-colon>.  
3840: 20 20 7d 0a 20 20 20 20 66 72 61 6d 65 20 2e 74    }.    frame .t
3850: 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d  .f -class Test -
3860: 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68  width 150 -heigh
3870: 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e  t 100.    pack .
3880: 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66  t.f.    focus -f
3890: 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70  orce .t.f.    up
38a0: 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b  date.    set x {
38b0: 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  }.} -body {.    
38c0: 62 69 6e 64 20 54 65 73 74 20 3a 20 7b 6c 61 70  bind Test : {lap
38d0: 70 65 6e 64 20 78 20 22 25 57 20 25 4b 20 54 65  pend x "%W %K Te
38e0: 73 74 22 7d 0a 20 20 20 20 62 69 6e 64 20 2e 74  st"}.    bind .t
38f0: 2e 66 20 3a 20 7b 6c 61 70 70 65 6e 64 20 78 20  .f : {lappend x 
3900: 22 25 57 20 25 4b 20 2e 74 2e 66 22 7d 0a 20 20  "%W %K .t.f"}.  
3910: 20 20 66 6f 6f 0a 20 20 20 20 72 65 74 75 72 6e    foo.    return
3920: 20 24 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b   $x.} -cleanup {
3930: 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e  .    destroy .t.
3940: 66 0a 20 20 20 20 62 69 6e 64 20 54 65 73 74 20  f.    bind Test 
3950: 3a 20 7b 7d 0a 7d 20 2d 72 65 73 75 6c 74 20 7b  : {}.} -result {
3960: 7b 2e 74 2e 66 20 63 6f 6c 6f 6e 20 2e 74 2e 66  {.t.f colon .t.f
3970: 7d 20 7b 2e 74 2e 66 20 63 6f 6c 6f 6e 20 54 65  } {.t.f colon Te
3980: 73 74 7d 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d  st}}..test bind-
3990: 31 33 2e 35 20 7b 54 6b 5f 42 69 6e 64 45 76 65  13.5 {Tk_BindEve
39a0: 6e 74 20 70 72 6f 63 65 64 75 72 65 7d 20 2d 62  nt procedure} -b
39b0: 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 61  ody {.    bind a
39c0: 6c 6c 20 3c 44 65 73 74 72 6f 79 3e 20 7b 6c 61  ll <Destroy> {la
39d0: 70 70 65 6e 64 20 78 20 22 25 57 20 64 65 73 74  ppend x "%W dest
39e0: 72 6f 79 65 64 22 7d 0a 20 20 20 20 73 65 74 20  royed"}.    set 
39f0: 78 20 7b 7d 0a 20 20 20 20 66 72 61 6d 65 20 2e  x {}.    frame .
3a00: 74 2e 67 20 2d 67 6f 72 70 20 66 6f 6f 0a 7d 20  t.g -gorp foo.} 
3a10: 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 62  -cleanup {.    b
3a20: 69 6e 64 20 61 6c 6c 20 3c 44 65 73 74 72 6f 79  ind all <Destroy
3a30: 3e 20 7b 7d 0a 7d 20 2d 72 65 74 75 72 6e 43 6f  > {}.} -returnCo
3a40: 64 65 73 20 65 72 72 6f 72 20 2d 72 65 73 75 6c  des error -resul
3a50: 74 20 7b 75 6e 6b 6e 6f 77 6e 20 6f 70 74 69 6f  t {unknown optio
3a60: 6e 20 22 2d 67 6f 72 70 22 7d 20 0a 74 65 73 74  n "-gorp"} .test
3a70: 20 62 69 6e 64 2d 31 33 2e 36 20 7b 54 6b 5f 42   bind-13.6 {Tk_B
3a80: 69 6e 64 45 76 65 6e 74 20 70 72 6f 63 65 64 75  indEvent procedu
3a90: 72 65 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  re} -body {.    
3aa0: 62 69 6e 64 20 61 6c 6c 20 3c 44 65 73 74 72 6f  bind all <Destro
3ab0: 79 3e 20 7b 6c 61 70 70 65 6e 64 20 78 20 22 25  y> {lappend x "%
3ac0: 57 20 64 65 73 74 72 6f 79 65 64 22 7d 0a 20 20  W destroyed"}.  
3ad0: 20 20 73 65 74 20 78 20 7b 7d 0a 20 20 20 20 63    set x {}.    c
3ae0: 61 74 63 68 20 7b 66 72 61 6d 65 20 2e 74 2e 67  atch {frame .t.g
3af0: 20 2d 67 6f 72 70 20 66 6f 6f 7d 20 0a 20 20 20   -gorp foo} .   
3b00: 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d 63 6c   return $x.} -cl
3b10: 65 61 6e 75 70 20 7b 0a 20 20 20 20 62 69 6e 64  eanup {.    bind
3b20: 20 61 6c 6c 20 3c 44 65 73 74 72 6f 79 3e 20 7b   all <Destroy> {
3b30: 7d 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 7b 2e 74  }.} -result {{.t
3b40: 2e 67 20 64 65 73 74 72 6f 79 65 64 7d 7d 0a 0a  .g destroyed}}..
3b50: 74 65 73 74 20 62 69 6e 64 2d 31 33 2e 37 20 7b  test bind-13.7 {
3b60: 54 6b 5f 42 69 6e 64 45 76 65 6e 74 20 70 72 6f  Tk_BindEvent pro
3b70: 63 65 64 75 72 65 7d 20 2d 73 65 74 75 70 20 7b  cedure} -setup {
3b80: 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
3b90: 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
3ba0: 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
3bb0: 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
3bc0: 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
3bd0: 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
3be0: 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d  e.    set x {}.}
3bf0: 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
3c00: 64 20 2e 74 2e 66 20 3a 20 7b 6c 61 70 70 65 6e  d .t.f : {lappen
3c10: 64 20 78 20 22 25 57 20 28 2e 74 2e 66 20 62 69  d x "%W (.t.f bi
3c20: 6e 64 69 6e 67 29 22 7d 0a 20 20 20 20 62 69 6e  nding)"}.    bin
3c30: 64 20 54 65 73 74 20 3a 20 7b 6c 61 70 70 65 6e  d Test : {lappen
3c40: 64 20 78 20 22 25 57 20 28 54 65 73 74 20 62 69  d x "%W (Test bi
3c50: 6e 64 69 6e 67 29 22 7d 0a 20 20 20 20 62 69 6e  nding)"}.    bin
3c60: 64 20 61 6c 6c 20 3a 20 7b 62 69 6e 64 20 2e 74  d all : {bind .t
3c70: 2e 66 20 3a 20 7b 7d 3b 20 6c 61 70 70 65 6e 64  .f : {}; lappend
3c80: 20 78 20 22 25 57 20 28 61 6c 6c 20 62 69 6e 64   x "%W (all bind
3c90: 69 6e 67 29 22 7d 0a 20 20 20 20 65 76 65 6e 74  ing)"}.    event
3ca0: 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
3cb0: 4b 65 79 2d 63 6f 6c 6f 6e 3e 0a 20 20 20 20 72  Key-colon>.    r
3cc0: 65 74 75 72 6e 20 24 78 0a 7d 20 2d 63 6c 65 61  eturn $x.} -clea
3cd0: 6e 75 70 20 7b 0a 20 20 20 20 62 69 6e 64 20 54  nup {.    bind T
3ce0: 65 73 74 20 3a 20 7b 7d 0a 20 20 20 20 62 69 6e  est : {}.    bin
3cf0: 64 20 61 6c 6c 20 3a 20 7b 7d 0a 20 20 20 20 64  d all : {}.    d
3d00: 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72  estroy .t.f.} -r
3d10: 65 73 75 6c 74 20 7b 7b 2e 74 2e 66 20 28 2e 74  esult {{.t.f (.t
3d20: 2e 66 20 62 69 6e 64 69 6e 67 29 7d 20 7b 2e 74  .f binding)} {.t
3d30: 2e 66 20 28 54 65 73 74 20 62 69 6e 64 69 6e 67  .f (Test binding
3d40: 29 7d 20 7b 2e 74 2e 66 20 28 61 6c 6c 20 62 69  )} {.t.f (all bi
3d50: 6e 64 69 6e 67 29 7d 7d 0a 74 65 73 74 20 62 69  nding)}}.test bi
3d60: 6e 64 2d 31 33 2e 38 20 7b 54 6b 5f 42 69 6e 64  nd-13.8 {Tk_Bind
3d70: 45 76 65 6e 74 20 70 72 6f 63 65 64 75 72 65 7d  Event procedure}
3d80: 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72   -setup {.    fr
3d90: 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20  ame .t.f -class 
3da0: 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20  Test -width 150 
3db0: 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20  -height 100.    
3dc0: 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f  pack .t.f.    fo
3dd0: 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a  cus -force .t.f.
3de0: 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73      update.    s
3df0: 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20  et x {}.} -body 
3e00: 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20  {.    bind .t.f 
3e10: 3a 20 7b 6c 61 70 70 65 6e 64 20 78 20 22 25 57  : {lappend x "%W
3e20: 20 28 2e 74 2e 66 20 62 69 6e 64 69 6e 67 29 22   (.t.f binding)"
3e30: 7d 0a 20 20 20 20 62 69 6e 64 20 54 65 73 74 20  }.    bind Test 
3e40: 3a 20 7b 6c 61 70 70 65 6e 64 20 78 20 22 25 57  : {lappend x "%W
3e50: 20 28 54 65 73 74 20 62 69 6e 64 69 6e 67 29 22   (Test binding)"
3e60: 7d 0a 20 20 20 20 62 69 6e 64 20 61 6c 6c 20 3a  }.    bind all :
3e70: 20 7b 64 65 73 74 72 6f 79 20 2e 74 2e 66 3b 20   {destroy .t.f; 
3e80: 6c 61 70 70 65 6e 64 20 78 20 22 25 57 20 28 61  lappend x "%W (a
3e90: 6c 6c 20 62 69 6e 64 69 6e 67 29 22 7d 0a 20 20  ll binding)"}.  
3ea0: 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
3eb0: 20 2e 74 2e 66 20 3c 4b 65 79 2d 63 6f 6c 6f 6e   .t.f <Key-colon
3ec0: 3e 0a 20 20 20 20 72 65 74 75 72 6e 20 24 78 0a  >.    return $x.
3ed0: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20  } -cleanup {.   
3ee0: 20 62 69 6e 64 20 54 65 73 74 20 3a 20 7b 7d 0a   bind Test : {}.
3ef0: 20 20 20 20 62 69 6e 64 20 61 6c 6c 20 3a 20 7b      bind all : {
3f00: 7d 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74  }.    destroy .t
3f10: 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 7b 2e  .f.} -result {{.
3f20: 74 2e 66 20 28 2e 74 2e 66 20 62 69 6e 64 69 6e  t.f (.t.f bindin
3f30: 67 29 7d 20 7b 2e 74 2e 66 20 28 54 65 73 74 20  g)} {.t.f (Test 
3f40: 62 69 6e 64 69 6e 67 29 7d 20 7b 2e 74 2e 66 20  binding)} {.t.f 
3f50: 28 61 6c 6c 20 62 69 6e 64 69 6e 67 29 7d 7d 0a  (all binding)}}.
3f60: 0a 74 65 73 74 20 62 69 6e 64 2d 31 33 2e 39 20  .test bind-13.9 
3f70: 7b 54 6b 5f 42 69 6e 64 45 76 65 6e 74 20 70 72  {Tk_BindEvent pr
3f80: 6f 63 65 64 75 72 65 7d 20 2d 73 65 74 75 70 20  ocedure} -setup 
3f90: 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66  {.    frame .t.f
3fa0: 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69   -class Test -wi
3fb0: 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20  dth 150 -height 
3fc0: 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e  100.    pack .t.
3fd0: 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72  f.    focus -for
3fe0: 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61  ce .t.f.    upda
3ff0: 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a  te.    set x {}.
4000: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
4010: 6e 64 20 2e 74 2e 66 20 3c 31 3e 20 7b 6c 61 70  nd .t.f <1> {lap
4020: 70 65 6e 64 20 78 20 22 25 57 20 7a 20 28 2e 74  pend x "%W z (.t
4030: 2e 66 20 3c 31 3e 20 62 69 6e 64 69 6e 67 29 22  .f <1> binding)"
4040: 7d 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20  }.    bind .t.f 
4050: 3c 42 75 74 74 6f 6e 50 72 65 73 73 3e 20 7b 6c  <ButtonPress> {l
4060: 61 70 70 65 6e 64 20 78 20 22 25 57 20 7a 20 28  append x "%W z (
4070: 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 50 72 65 73  .t.f <ButtonPres
4080: 73 3e 20 62 69 6e 64 69 6e 67 29 22 7d 0a 20 20  s> binding)"}.  
4090: 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
40a0: 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 31 3e   .t.f <Button-1>
40b0: 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
40c0: 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e  ate .t.f <Button
40d0: 2d 32 3e 0a 20 20 20 20 72 65 74 75 72 6e 20 24  -2>.    return $
40e0: 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  x.} -cleanup {. 
40f0: 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
4100: 7d 20 2d 72 65 73 75 6c 74 20 7b 7b 2e 74 2e 66  } -result {{.t.f
4110: 20 7a 20 28 2e 74 2e 66 20 3c 31 3e 20 62 69 6e   z (.t.f <1> bin
4120: 64 69 6e 67 29 7d 20 7b 2e 74 2e 66 20 7a 20 28  ding)} {.t.f z (
4130: 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 50 72 65 73  .t.f <ButtonPres
4140: 73 3e 20 62 69 6e 64 69 6e 67 29 7d 7d 0a 74 65  s> binding)}}.te
4150: 73 74 20 62 69 6e 64 2d 31 33 2e 31 30 20 7b 54  st bind-13.10 {T
4160: 6b 5f 42 69 6e 64 45 76 65 6e 74 20 70 72 6f 63  k_BindEvent proc
4170: 65 64 75 72 65 3a 20 69 67 6e 6f 72 65 20 4e 6f  edure: ignore No
4180: 74 69 66 79 49 6e 66 65 72 69 6f 72 7d 20 2d 73  tifyInferior} -s
4190: 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65  etup {.    frame
41a0: 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73   .t.f -class Tes
41b0: 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65  t -width 150 -he
41c0: 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63  ight 100.    pac
41d0: 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73  k .t.f.    focus
41e0: 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20   -force .t.f.   
41f0: 20 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20   update.    set 
4200: 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20  x {}.} -body {. 
4210: 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 45 6e     bind .t.f <En
4220: 74 65 72 3e 20 22 6c 61 70 70 65 6e 64 20 78 20  ter> "lappend x 
4230: 45 6e 74 65 72 25 23 22 0a 20 20 20 20 62 69 6e  Enter%#".    bin
4240: 64 20 2e 74 2e 66 20 3c 4c 65 61 76 65 3e 20 22  d .t.f <Leave> "
4250: 6c 61 70 70 65 6e 64 20 78 20 4c 65 61 76 65 25  lappend x Leave%
4260: 23 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e  #".    event gen
4270: 65 72 61 74 65 20 2e 74 2e 66 20 3c 45 6e 74 65  erate .t.f <Ente
4280: 72 3e 20 2d 73 65 72 69 61 6c 20 31 30 30 20 2d  r> -serial 100 -
4290: 64 65 74 61 69 6c 20 4e 6f 74 69 66 79 41 6e 63  detail NotifyAnc
42a0: 65 73 74 6f 72 0a 20 20 20 20 65 76 65 6e 74 20  estor.    event 
42b0: 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 45  generate .t.f <E
42c0: 6e 74 65 72 3e 20 2d 73 65 72 69 61 6c 20 31 30  nter> -serial 10
42d0: 31 20 2d 64 65 74 61 69 6c 20 4e 6f 74 69 66 79  1 -detail Notify
42e0: 49 6e 66 65 72 69 6f 72 0a 20 20 20 20 65 76 65  Inferior.    eve
42f0: 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
4300: 20 3c 4c 65 61 76 65 3e 20 2d 73 65 72 69 61 6c   <Leave> -serial
4310: 20 31 30 32 20 2d 64 65 74 61 69 6c 20 4e 6f 74   102 -detail Not
4320: 69 66 79 41 6e 63 65 73 74 6f 72 0a 20 20 20 20  ifyAncestor.    
4330: 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
4340: 74 2e 66 20 3c 4c 65 61 76 65 3e 20 2d 73 65 72  t.f <Leave> -ser
4350: 69 61 6c 20 31 30 33 20 2d 64 65 74 61 69 6c 20  ial 103 -detail 
4360: 4e 6f 74 69 66 79 49 6e 66 65 72 69 6f 72 0a 20  NotifyInferior. 
4370: 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d     return $x.} -
4380: 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
4390: 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
43a0: 73 75 6c 74 20 7b 45 6e 74 65 72 31 30 30 20 4c  sult {Enter100 L
43b0: 65 61 76 65 31 30 32 7d 0a 74 65 73 74 20 62 69  eave102}.test bi
43c0: 6e 64 2d 31 33 2e 31 31 20 7b 54 6b 5f 42 69 6e  nd-13.11 {Tk_Bin
43d0: 64 45 76 65 6e 74 20 70 72 6f 63 65 64 75 72 65  dEvent procedure
43e0: 3a 20 63 6f 6c 6c 61 70 73 65 20 4d 6f 74 69 6f  : collapse Motio
43f0: 6e 73 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20  ns} -setup {.   
4400: 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61   frame .t.f -cla
4410: 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
4420: 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20  50 -height 100. 
4430: 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20     pack .t.f.   
4440: 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74   focus -force .t
4450: 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20  .f.    update.  
4460: 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f    set x {}.} -bo
4470: 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74  dy {.    bind .t
4480: 2e 66 20 3c 4d 6f 74 69 6f 6e 3e 20 22 6c 61 70  .f <Motion> "lap
4490: 70 65 6e 64 20 78 20 4d 6f 74 69 6f 6e 25 23 28  pend x Motion%#(
44a0: 25 78 2c 25 79 29 22 0a 20 20 20 20 65 76 65 6e  %x,%y)".    even
44b0: 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
44c0: 3c 4d 6f 74 69 6f 6e 3e 20 2d 73 65 72 69 61 6c  <Motion> -serial
44d0: 20 31 30 30 20 2d 78 20 31 30 30 20 2d 79 20 32   100 -x 100 -y 2
44e0: 30 30 20 2d 77 68 65 6e 20 74 61 69 6c 20 0a 20  00 -when tail . 
44f0: 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 65 76     update.    ev
4500: 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
4510: 66 20 3c 4d 6f 74 69 6f 6e 3e 20 2d 73 65 72 69  f <Motion> -seri
4520: 61 6c 20 31 30 31 20 2d 78 20 32 30 30 20 2d 79  al 101 -x 200 -y
4530: 20 33 30 30 20 2d 77 68 65 6e 20 74 61 69 6c 0a   300 -when tail.
4540: 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
4550: 74 65 20 2e 74 2e 66 20 3c 4d 6f 74 69 6f 6e 3e  te .t.f <Motion>
4560: 20 2d 73 65 72 69 61 6c 20 31 30 32 20 2d 78 20   -serial 102 -x 
4570: 33 30 30 20 2d 79 20 34 30 30 20 2d 77 68 65 6e  300 -y 400 -when
4580: 20 74 61 69 6c 20 0a 20 20 20 20 75 70 64 61 74   tail .    updat
4590: 65 0a 20 20 20 20 72 65 74 75 72 6e 20 24 78 0a  e.    return $x.
45a0: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20  } -cleanup {.   
45b0: 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20   destroy .t.f.} 
45c0: 2d 72 65 73 75 6c 74 20 7b 4d 6f 74 69 6f 6e 31  -result {Motion1
45d0: 30 30 28 31 30 30 2c 32 30 30 29 20 4d 6f 74 69  00(100,200) Moti
45e0: 6f 6e 31 30 32 28 33 30 30 2c 34 30 30 29 7d 0a  on102(300,400)}.
45f0: 74 65 73 74 20 62 69 6e 64 2d 31 33 2e 31 32 20  test bind-13.12 
4600: 7b 54 6b 5f 42 69 6e 64 45 76 65 6e 74 20 70 72  {Tk_BindEvent pr
4610: 6f 63 65 64 75 72 65 3a 20 63 6f 6c 6c 61 70 73  ocedure: collaps
4620: 65 20 72 65 70 65 61 74 69 6e 67 20 6d 6f 64 69  e repeating modi
4630: 66 69 65 72 73 7d 20 2d 73 65 74 75 70 20 7b 0a  fiers} -setup {.
4640: 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d      frame .t.f -
4650: 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74  class Test -widt
4660: 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30  h 150 -height 10
4670: 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a  0.    pack .t.f.
4680: 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65      focus -force
4690: 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65   .t.f.    update
46a0: 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62  .} -body {.    b
46b0: 69 6e 64 20 2e 74 2e 66 20 3c 4b 65 79 3e 20 22  ind .t.f <Key> "
46c0: 6c 61 70 70 65 6e 64 20 78 20 25 4b 25 23 22 0a  lappend x %K%#".
46d0: 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 4b      bind .t.f <K
46e0: 65 79 52 65 6c 65 61 73 65 3e 20 22 6c 61 70 70  eyRelease> "lapp
46f0: 65 6e 64 20 78 20 25 4b 25 23 22 0a 20 20 20 20  end x %K%#".    
4700: 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
4710: 74 2e 66 20 3c 4b 65 79 2d 53 68 69 66 74 5f 4c  t.f <Key-Shift_L
4720: 3e 20 2d 73 65 72 69 61 6c 20 31 30 30 20 2d 77  > -serial 100 -w
4730: 68 65 6e 20 74 61 69 6c 20 0a 20 20 20 20 65 76  hen tail .    ev
4740: 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
4750: 66 20 3c 4b 65 79 52 65 6c 65 61 73 65 2d 53 68  f <KeyRelease-Sh
4760: 69 66 74 5f 4c 3e 20 2d 73 65 72 69 61 6c 20 31  ift_L> -serial 1
4770: 30 31 20 2d 77 68 65 6e 20 74 61 69 6c 20 0a 20  01 -when tail . 
4780: 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
4790: 65 20 2e 74 2e 66 20 3c 4b 65 79 2d 53 68 69 66  e .t.f <Key-Shif
47a0: 74 5f 4c 3e 20 2d 73 65 72 69 61 6c 20 31 30 32  t_L> -serial 102
47b0: 20 2d 77 68 65 6e 20 74 61 69 6c 20 0a 20 20 20   -when tail .   
47c0: 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
47d0: 2e 74 2e 66 20 3c 4b 65 79 52 65 6c 65 61 73 65  .t.f <KeyRelease
47e0: 2d 53 68 69 66 74 5f 4c 3e 20 2d 73 65 72 69 61  -Shift_L> -seria
47f0: 6c 20 31 30 33 20 2d 77 68 65 6e 20 74 61 69 6c  l 103 -when tail
4800: 20 0a 20 20 20 20 75 70 64 61 74 65 0a 7d 20 2d   .    update.} -
4810: 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
4820: 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
4830: 73 75 6c 74 20 7b 7d 0a 74 65 73 74 20 62 69 6e  sult {}.test bin
4840: 64 2d 31 33 2e 31 33 20 7b 54 6b 5f 42 69 6e 64  d-13.13 {Tk_Bind
4850: 45 76 65 6e 74 20 70 72 6f 63 65 64 75 72 65 3a  Event procedure:
4860: 20 76 61 6c 69 64 20 6b 65 79 20 64 65 74 61 69   valid key detai
4870: 6c 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20  l} -setup {.    
4880: 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73  frame .t.f -clas
4890: 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35  s Test -width 15
48a0: 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20  0 -height 100.  
48b0: 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20    pack .t.f.    
48c0: 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e  focus -force .t.
48d0: 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20 20  f.    update.   
48e0: 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64   set x {}.} -bod
48f0: 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  y {.    bind .t.
4900: 66 20 3c 4b 65 79 3e 20 22 6c 61 70 70 65 6e 64  f <Key> "lappend
4910: 20 78 20 4b 65 79 25 4b 22 0a 20 20 20 20 62 69   x Key%K".    bi
4920: 6e 64 20 2e 74 2e 66 20 3c 4b 65 79 52 65 6c 65  nd .t.f <KeyRele
4930: 61 73 65 3e 20 22 6c 61 70 70 65 6e 64 20 78 20  ase> "lappend x 
4940: 52 65 6c 65 61 73 65 25 4b 22 0a 20 20 20 20 65  Release%K".    e
4950: 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
4960: 2e 66 20 3c 4b 65 79 3e 20 2d 6b 65 79 73 79 6d  .f <Key> -keysym
4970: 20 63 6f 6c 6f 6e 0a 20 20 20 20 65 76 65 6e 74   colon.    event
4980: 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
4990: 4b 65 79 52 65 6c 65 61 73 65 3e 20 2d 6b 65 79  KeyRelease> -key
49a0: 73 79 6d 20 63 6f 6c 6f 6e 0a 20 20 20 20 72 65  sym colon.    re
49b0: 74 75 72 6e 20 24 78 0a 7d 20 2d 63 6c 65 61 6e  turn $x.} -clean
49c0: 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79  up {.    destroy
49d0: 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20   .t.f.} -result 
49e0: 7b 4b 65 79 63 6f 6c 6f 6e 20 52 65 6c 65 61 73  {Keycolon Releas
49f0: 65 63 6f 6c 6f 6e 7d 0a 74 65 73 74 20 62 69 6e  ecolon}.test bin
4a00: 64 2d 31 33 2e 31 34 20 7b 54 6b 5f 42 69 6e 64  d-13.14 {Tk_Bind
4a10: 45 76 65 6e 74 20 70 72 6f 63 65 64 75 72 65 3a  Event procedure:
4a20: 20 69 6e 76 61 6c 69 64 20 6b 65 79 20 64 65 74   invalid key det
4a30: 61 69 6c 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20  ail} -setup {.  
4a40: 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c    frame .t.f -cl
4a50: 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20  ass Test -width 
4a60: 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a  150 -height 100.
4a70: 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20      pack .t.f.  
4a80: 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e    focus -force .
4a90: 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20  t.f.    update. 
4aa0: 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62     set x {}.} -b
4ab0: 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e  ody {.    bind .
4ac0: 74 2e 66 20 3c 4b 65 79 3e 20 22 6c 61 70 70 65  t.f <Key> "lappe
4ad0: 6e 64 20 78 20 4b 65 79 25 4b 22 0a 20 20 20 20  nd x Key%K".    
4ae0: 62 69 6e 64 20 2e 74 2e 66 20 3c 4b 65 79 52 65  bind .t.f <KeyRe
4af0: 6c 65 61 73 65 3e 20 22 6c 61 70 70 65 6e 64 20  lease> "lappend 
4b00: 78 20 52 65 6c 65 61 73 65 25 4b 22 0a 20 20 20  x Release%K".   
4b10: 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
4b20: 2e 74 2e 66 20 3c 4b 65 79 3e 20 2d 6b 65 79 63  .t.f <Key> -keyc
4b30: 6f 64 65 20 2d 31 0a 20 20 20 20 65 76 65 6e 74  ode -1.    event
4b40: 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
4b50: 4b 65 79 52 65 6c 65 61 73 65 3e 20 2d 6b 65 79  KeyRelease> -key
4b60: 63 6f 64 65 20 2d 31 0a 20 20 20 20 72 65 74 75  code -1.    retu
4b70: 72 6e 20 24 78 0a 7d 20 2d 63 6c 65 61 6e 75 70  rn $x.} -cleanup
4b80: 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
4b90: 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 4b  t.f.} -result {K
4ba0: 65 79 3f 3f 20 52 65 6c 65 61 73 65 3f 3f 7d 0a  ey?? Release??}.
4bb0: 74 65 73 74 20 62 69 6e 64 2d 31 33 2e 31 35 20  test bind-13.15 
4bc0: 7b 54 6b 5f 42 69 6e 64 45 76 65 6e 74 20 70 72  {Tk_BindEvent pr
4bd0: 6f 63 65 64 75 72 65 3a 20 62 75 74 74 6f 6e 20  ocedure: button 
4be0: 64 65 74 61 69 6c 7d 20 2d 73 65 74 75 70 20 7b  detail} -setup {
4bf0: 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
4c00: 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
4c10: 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
4c20: 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
4c30: 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
4c40: 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
4c50: 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d  e.    set x {}.}
4c60: 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
4c70: 64 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 3e 20  d .t.f <Button> 
4c80: 22 6c 61 70 70 65 6e 64 20 78 20 42 75 74 74 6f  "lappend x Butto
4c90: 6e 25 62 22 0a 20 20 20 20 62 69 6e 64 20 2e 74  n%b".    bind .t
4ca0: 2e 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73  .f <ButtonReleas
4cb0: 65 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 52 65  e> "lappend x Re
4cc0: 6c 65 61 73 65 25 62 22 0a 20 20 20 20 65 76 65  lease%b".    eve
4cd0: 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
4ce0: 20 3c 42 75 74 74 6f 6e 3e 20 2d 62 75 74 74 6f   <Button> -butto
4cf0: 6e 20 31 0a 20 20 20 20 65 76 65 6e 74 20 67 65  n 1.    event ge
4d00: 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74  nerate .t.f <But
4d10: 74 6f 6e 52 65 6c 65 61 73 65 3e 20 2d 62 75 74  tonRelease> -but
4d20: 74 6f 6e 20 33 0a 20 20 20 20 73 65 74 20 78 0a  ton 3.    set x.
4d30: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20  } -cleanup {.   
4d40: 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20   destroy .t.f.} 
4d50: 2d 72 65 73 75 6c 74 20 7b 42 75 74 74 6f 6e 31  -result {Button1
4d60: 20 52 65 6c 65 61 73 65 33 7d 0a 74 65 73 74 20   Release3}.test 
4d70: 62 69 6e 64 2d 31 33 2e 31 36 20 7b 54 6b 5f 42  bind-13.16 {Tk_B
4d80: 69 6e 64 45 76 65 6e 74 20 70 72 6f 63 65 64 75  indEvent procedu
4d90: 72 65 3a 20 76 69 72 74 75 61 6c 20 64 65 74 61  re: virtual deta
4da0: 69 6c 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20  il} -setup {.   
4db0: 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61   frame .t.f -cla
4dc0: 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
4dd0: 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20  50 -height 100. 
4de0: 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20     pack .t.f.   
4df0: 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74   focus -force .t
4e00: 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20  .f.    update.  
4e10: 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f    set x {}.} -bo
4e20: 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74  dy {.    bind .t
4e30: 2e 66 20 3c 3c 50 61 73 74 65 3e 3e 20 22 6c 61  .f <<Paste>> "la
4e40: 70 70 65 6e 64 20 78 20 50 61 73 74 65 22 0a 20  ppend x Paste". 
4e50: 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
4e60: 65 20 2e 74 2e 66 20 3c 3c 50 61 73 74 65 3e 3e  e .t.f <<Paste>>
4e70: 0a 20 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d  .    return $x.}
4e80: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
4e90: 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d  destroy .t.f.} -
4ea0: 72 65 73 75 6c 74 20 7b 50 61 73 74 65 7d 0a 74  result {Paste}.t
4eb0: 65 73 74 20 62 69 6e 64 2d 31 33 2e 31 37 20 7b  est bind-13.17 {
4ec0: 54 6b 5f 42 69 6e 64 45 76 65 6e 74 20 70 72 6f  Tk_BindEvent pro
4ed0: 63 65 64 75 72 65 3a 20 76 69 72 74 75 61 6c 20  cedure: virtual 
4ee0: 65 76 65 6e 74 20 69 6e 20 65 76 65 6e 74 20 73  event in event s
4ef0: 74 72 65 61 6d 7d 20 2d 73 65 74 75 70 20 7b 0a  tream} -setup {.
4f00: 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d      frame .t.f -
4f10: 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74  class Test -widt
4f20: 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30  h 150 -height 10
4f30: 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a  0.    pack .t.f.
4f40: 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65      focus -force
4f50: 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65   .t.f.    update
4f60: 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20  .    set x {}.} 
4f70: 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64  -body {.    bind
4f80: 20 2e 74 2e 66 20 3c 3c 50 61 73 74 65 3e 3e 20   .t.f <<Paste>> 
4f90: 22 6c 61 70 70 65 6e 64 20 78 20 50 61 73 74 65  "lappend x Paste
4fa0: 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  ".    event gene
4fb0: 72 61 74 65 20 2e 74 2e 66 20 3c 3c 50 61 73 74  rate .t.f <<Past
4fc0: 65 3e 3e 0a 20 20 20 20 72 65 74 75 72 6e 20 24  e>>.    return $
4fd0: 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  x.} -cleanup {. 
4fe0: 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
4ff0: 7d 20 2d 72 65 73 75 6c 74 20 7b 50 61 73 74 65  } -result {Paste
5000: 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31 33 2e 31  }.test bind-13.1
5010: 38 20 7b 54 6b 5f 42 69 6e 64 45 76 65 6e 74 20  8 {Tk_BindEvent 
5020: 70 72 6f 63 65 64 75 72 65 3a 20 6d 61 74 63 68  procedure: match
5030: 20 64 65 74 61 69 6c 20 70 68 79 73 69 63 61 6c   detail physical
5040: 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66  } -setup {.    f
5050: 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73  rame .t.f -class
5060: 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30   Test -width 150
5070: 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20   -height 100.   
5080: 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66   pack .t.f.    f
5090: 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66  ocus -force .t.f
50a0: 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20  .    update.    
50b0: 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79  set x {}.} -body
50c0: 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66   {.    bind .t.f
50d0: 20 3c 42 75 74 74 6f 6e 2d 32 3e 20 7b 73 65 74   <Button-2> {set
50e0: 20 78 20 42 75 74 74 6f 6e 2d 32 7d 0a 20 20 20   x Button-2}.   
50f0: 20 65 76 65 6e 74 20 61 64 64 20 3c 3c 50 61 73   event add <<Pas
5100: 74 65 3e 3e 20 3c 42 75 74 74 6f 6e 2d 32 3e 0a  te>> <Button-2>.
5110: 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 3c      bind .t.f <<
5120: 50 61 73 74 65 3e 3e 20 7b 73 65 74 20 78 20 50  Paste>> {set x P
5130: 61 73 74 65 7d 0a 20 20 20 20 65 76 65 6e 74 20  aste}.    event 
5140: 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42  generate .t.f <B
5150: 75 74 74 6f 6e 2d 32 3e 0a 20 20 20 20 72 65 74  utton-2>.    ret
5160: 75 72 6e 20 24 78 0a 7d 20 2d 63 6c 65 61 6e 75  urn $x.} -cleanu
5170: 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20  p {.    destroy 
5180: 2e 74 2e 66 0a 20 20 20 20 65 76 65 6e 74 20 64  .t.f.    event d
5190: 65 6c 65 74 65 20 3c 3c 50 61 73 74 65 3e 3e 20  elete <<Paste>> 
51a0: 3c 42 75 74 74 6f 6e 2d 32 3e 0a 7d 20 2d 72 65  <Button-2>.} -re
51b0: 73 75 6c 74 20 7b 42 75 74 74 6f 6e 2d 32 7d 0a  sult {Button-2}.
51c0: 0a 74 65 73 74 20 62 69 6e 64 2d 31 33 2e 31 39  .test bind-13.19
51d0: 20 7b 54 6b 5f 42 69 6e 64 45 76 65 6e 74 20 70   {Tk_BindEvent p
51e0: 72 6f 63 65 64 75 72 65 3a 20 6e 6f 20 6d 61 74  rocedure: no mat
51f0: 63 68 20 64 65 74 61 69 6c 20 70 68 79 73 69 63  ch detail physic
5200: 61 6c 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20  al} -setup {.   
5210: 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61   frame .t.f -cla
5220: 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
5230: 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20  50 -height 100. 
5240: 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20     pack .t.f.   
5250: 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74   focus -force .t
5260: 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20  .f.    update.  
5270: 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f    set x {}.} -bo
5280: 64 79 20 7b 0a 20 20 20 20 65 76 65 6e 74 20 61  dy {.    event a
5290: 64 64 20 3c 3c 50 61 73 74 65 3e 3e 20 3c 42 75  dd <<Paste>> <Bu
52a0: 74 74 6f 6e 2d 32 3e 0a 20 20 20 20 62 69 6e 64  tton-2>.    bind
52b0: 20 2e 74 2e 66 20 3c 3c 50 61 73 74 65 3e 3e 20   .t.f <<Paste>> 
52c0: 7b 73 65 74 20 78 20 50 61 73 74 65 7d 0a 20 20  {set x Paste}.  
52d0: 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
52e0: 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 32 3e   .t.f <Button-2>
52f0: 0a 20 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d  .    return $x.}
5300: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
5310: 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 20 20 20  destroy .t.f.   
5320: 20 65 76 65 6e 74 20 64 65 6c 65 74 65 20 3c 3c   event delete <<
5330: 50 61 73 74 65 3e 3e 20 3c 42 75 74 74 6f 6e 2d  Paste>> <Button-
5340: 32 3e 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 50 61  2>.} -result {Pa
5350: 73 74 65 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31  ste}.test bind-1
5360: 33 2e 32 30 20 7b 54 6b 5f 42 69 6e 64 45 76 65  3.20 {Tk_BindEve
5370: 6e 74 20 70 72 6f 63 65 64 75 72 65 3a 20 6d 61  nt procedure: ma
5380: 74 63 68 20 64 65 74 61 69 6c 20 76 69 72 74 75  tch detail virtu
5390: 61 6c 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20  al} -setup {.   
53a0: 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61   frame .t.f -cla
53b0: 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
53c0: 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20  50 -height 100. 
53d0: 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20     pack .t.f.   
53e0: 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74   focus -force .t
53f0: 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20  .f.    update.  
5400: 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f    set x {}.} -bo
5410: 64 79 20 7b 0a 20 20 20 20 65 76 65 6e 74 20 61  dy {.    event a
5420: 64 64 20 3c 3c 50 61 73 74 65 3e 3e 20 3c 42 75  dd <<Paste>> <Bu
5430: 74 74 6f 6e 2d 32 3e 0a 20 20 20 20 62 69 6e 64  tton-2>.    bind
5440: 20 2e 74 2e 66 20 3c 3c 50 61 73 74 65 3e 3e 20   .t.f <<Paste>> 
5450: 22 6c 61 70 70 65 6e 64 20 78 20 50 61 73 74 65  "lappend x Paste
5460: 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  ".    event gene
5470: 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f  rate .t.f <Butto
5480: 6e 2d 32 3e 0a 20 20 20 20 72 65 74 75 72 6e 20  n-2>.    return 
5490: 24 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a  $x.} -cleanup {.
54a0: 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66      destroy .t.f
54b0: 0a 20 20 20 20 65 76 65 6e 74 20 64 65 6c 65 74  .    event delet
54c0: 65 20 3c 3c 50 61 73 74 65 3e 3e 20 3c 42 75 74  e <<Paste>> <But
54d0: 74 6f 6e 2d 32 3e 0a 7d 20 2d 72 65 73 75 6c 74  ton-2>.} -result
54e0: 20 7b 50 61 73 74 65 7d 0a 74 65 73 74 20 62 69   {Paste}.test bi
54f0: 6e 64 2d 31 33 2e 32 31 20 7b 54 6b 5f 42 69 6e  nd-13.21 {Tk_Bin
5500: 64 45 76 65 6e 74 20 70 72 6f 63 65 64 75 72 65  dEvent procedure
5510: 3a 20 6e 6f 20 6d 61 74 63 68 20 64 65 74 61 69  : no match detai
5520: 6c 20 76 69 72 74 75 61 6c 7d 20 2d 73 65 74 75  l virtual} -setu
5530: 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74  p {.    frame .t
5540: 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d  .f -class Test -
5550: 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68  width 150 -heigh
5560: 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e  t 100.    pack .
5570: 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66  t.f.    focus -f
5580: 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70  orce .t.f.    up
5590: 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b  date.    set x {
55a0: 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  }.} -body {.    
55b0: 65 76 65 6e 74 20 61 64 64 20 3c 3c 50 61 73 74  event add <<Past
55c0: 65 3e 3e 20 3c 42 75 74 74 6f 6e 2d 32 3e 0a 20  e>> <Button-2>. 
55d0: 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 3c 50     bind .t.f <<P
55e0: 61 73 74 65 3e 3e 20 22 6c 61 70 70 65 6e 64 20  aste>> "lappend 
55f0: 78 20 50 61 73 74 65 22 0a 20 20 20 20 65 76 65  x Paste".    eve
5600: 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
5610: 20 3c 42 75 74 74 6f 6e 3e 0a 20 20 20 20 72 65   <Button>.    re
5620: 74 75 72 6e 20 24 78 0a 7d 20 2d 63 6c 65 61 6e  turn $x.} -clean
5630: 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79  up {.    destroy
5640: 20 2e 74 2e 66 0a 20 20 20 20 65 76 65 6e 74 20   .t.f.    event 
5650: 64 65 6c 65 74 65 20 3c 3c 50 61 73 74 65 3e 3e  delete <<Paste>>
5660: 20 3c 42 75 74 74 6f 6e 2d 32 3e 0a 7d 20 2d 72   <Button-2>.} -r
5670: 65 73 75 6c 74 20 7b 7d 0a 74 65 73 74 20 62 69  esult {}.test bi
5680: 6e 64 2d 31 33 2e 32 32 20 7b 54 6b 5f 42 69 6e  nd-13.22 {Tk_Bin
5690: 64 45 76 65 6e 74 20 70 72 6f 63 65 64 75 72 65  dEvent procedure
56a0: 3a 20 6d 61 74 63 68 20 6e 6f 2d 64 65 74 61 69  : match no-detai
56b0: 6c 20 70 68 79 73 69 63 61 6c 7d 20 2d 73 65 74  l physical} -set
56c0: 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e  up {.    frame .
56d0: 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20  t.f -class Test 
56e0: 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67  -width 150 -heig
56f0: 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20  ht 100.    pack 
5700: 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d  .t.f.    focus -
5710: 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75  force .t.f.    u
5720: 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20  pdate.    set x 
5730: 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20  {}.} -body {.   
5740: 20 62 69 6e 64 20 2e 74 2e 66 20 3c 42 75 74 74   bind .t.f <Butt
5750: 6f 6e 3e 20 7b 73 65 74 20 78 20 42 75 74 74 6f  on> {set x Butto
5760: 6e 7d 0a 20 20 20 20 65 76 65 6e 74 20 61 64 64  n}.    event add
5770: 20 3c 3c 50 61 73 74 65 3e 3e 20 3c 42 75 74 74   <<Paste>> <Butt
5780: 6f 6e 3e 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  on>.    bind .t.
5790: 66 20 3c 3c 50 61 73 74 65 3e 3e 20 7b 73 65 74  f <<Paste>> {set
57a0: 20 78 20 50 61 73 74 65 7d 0a 20 20 20 20 65 76   x Paste}.    ev
57b0: 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
57c0: 66 20 3c 42 75 74 74 6f 6e 2d 32 3e 0a 20 20 20  f <Button-2>.   
57d0: 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d 63 6c   return $x.} -cl
57e0: 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74  eanup {.    dest
57f0: 72 6f 79 20 2e 74 2e 66 0a 20 20 20 20 65 76 65  roy .t.f.    eve
5800: 6e 74 20 64 65 6c 65 74 65 20 3c 3c 50 61 73 74  nt delete <<Past
5810: 65 3e 3e 20 3c 42 75 74 74 6f 6e 3e 0a 7d 20 2d  e>> <Button>.} -
5820: 72 65 73 75 6c 74 20 7b 42 75 74 74 6f 6e 7d 0a  result {Button}.
5830: 74 65 73 74 20 62 69 6e 64 2d 31 33 2e 32 33 20  test bind-13.23 
5840: 7b 54 6b 5f 42 69 6e 64 45 76 65 6e 74 20 70 72  {Tk_BindEvent pr
5850: 6f 63 65 64 75 72 65 3a 20 6e 6f 20 6d 61 74 63  ocedure: no matc
5860: 68 20 6e 6f 2d 64 65 74 61 69 6c 20 70 68 79 73  h no-detail phys
5870: 69 63 61 6c 7d 20 2d 73 65 74 75 70 20 7b 0a 20  ical} -setup {. 
5880: 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63     frame .t.f -c
5890: 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
58a0: 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
58b0: 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20  .    pack .t.f. 
58c0: 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20     focus -force 
58d0: 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a  .t.f.    update.
58e0: 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d      set x {}.} -
58f0: 62 6f 64 79 20 7b 0a 20 20 20 20 65 76 65 6e 74  body {.    event
5900: 20 61 64 64 20 3c 3c 50 61 73 74 65 3e 3e 20 3c   add <<Paste>> <
5910: 42 75 74 74 6f 6e 3e 0a 20 20 20 20 62 69 6e 64  Button>.    bind
5920: 20 2e 74 2e 66 20 3c 3c 50 61 73 74 65 3e 3e 20   .t.f <<Paste>> 
5930: 7b 73 65 74 20 78 20 50 61 73 74 65 7d 0a 20 20  {set x Paste}.  
5940: 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
5950: 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 32 3e   .t.f <Button-2>
5960: 0a 20 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d  .    return $x.}
5970: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
5980: 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 20 20 20  destroy .t.f.   
5990: 20 65 76 65 6e 74 20 64 65 6c 65 74 65 20 3c 3c   event delete <<
59a0: 50 61 73 74 65 3e 3e 20 3c 42 75 74 74 6f 6e 3e  Paste>> <Button>
59b0: 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 50 61 73 74  .} -result {Past
59c0: 65 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31 33 2e  e}.test bind-13.
59d0: 32 34 20 7b 54 6b 5f 42 69 6e 64 45 76 65 6e 74  24 {Tk_BindEvent
59e0: 20 70 72 6f 63 65 64 75 72 65 3a 20 6d 61 74 63   procedure: matc
59f0: 68 20 6e 6f 2d 64 65 74 61 69 6c 20 76 69 72 74  h no-detail virt
5a00: 75 61 6c 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20  ual} -setup {.  
5a10: 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c    frame .t.f -cl
5a20: 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20  ass Test -width 
5a30: 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a  150 -height 100.
5a40: 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20      pack .t.f.  
5a50: 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e    focus -force .
5a60: 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20  t.f.    update. 
5a70: 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62     set x {}.} -b
5a80: 6f 64 79 20 7b 0a 20 20 20 20 65 76 65 6e 74 20  ody {.    event 
5a90: 61 64 64 20 3c 3c 50 61 73 74 65 3e 3e 20 3c 42  add <<Paste>> <B
5aa0: 75 74 74 6f 6e 3e 0a 20 20 20 20 62 69 6e 64 20  utton>.    bind 
5ab0: 2e 74 2e 66 20 3c 3c 50 61 73 74 65 3e 3e 20 22  .t.f <<Paste>> "
5ac0: 6c 61 70 70 65 6e 64 20 78 20 50 61 73 74 65 22  lappend x Paste"
5ad0: 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
5ae0: 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e  ate .t.f <Button
5af0: 2d 32 3e 0a 20 20 20 20 72 65 74 75 72 6e 20 24  -2>.    return $
5b00: 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  x.} -cleanup {. 
5b10: 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
5b20: 20 20 20 20 65 76 65 6e 74 20 64 65 6c 65 74 65      event delete
5b30: 20 3c 3c 50 61 73 74 65 3e 3e 20 3c 42 75 74 74   <<Paste>> <Butt
5b40: 6f 6e 3e 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 50  on>.} -result {P
5b50: 61 73 74 65 7d 0a 74 65 73 74 20 62 69 6e 64 2d  aste}.test bind-
5b60: 31 33 2e 32 35 20 7b 54 6b 5f 42 69 6e 64 45 76  13.25 {Tk_BindEv
5b70: 65 6e 74 20 70 72 6f 63 65 64 75 72 65 3a 20 6e  ent procedure: n
5b80: 6f 20 6d 61 74 63 68 20 6e 6f 2d 64 65 74 61 69  o match no-detai
5b90: 6c 20 76 69 72 74 75 61 6c 7d 20 2d 73 65 74 75  l virtual} -setu
5ba0: 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74  p {.    frame .t
5bb0: 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d  .f -class Test -
5bc0: 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68  width 150 -heigh
5bd0: 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e  t 100.    pack .
5be0: 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66  t.f.    focus -f
5bf0: 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70  orce .t.f.    up
5c00: 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b  date.    set x {
5c10: 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  }.} -body {.    
5c20: 65 76 65 6e 74 20 61 64 64 20 3c 3c 50 61 73 74  event add <<Past
5c30: 65 3e 3e 20 3c 4b 65 79 3e 0a 20 20 20 20 62 69  e>> <Key>.    bi
5c40: 6e 64 20 2e 74 2e 66 20 3c 3c 50 61 73 74 65 3e  nd .t.f <<Paste>
5c50: 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 50 61 73  > "lappend x Pas
5c60: 74 65 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65  te".    event ge
5c70: 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74  nerate .t.f <But
5c80: 74 6f 6e 3e 0a 20 20 20 20 72 65 74 75 72 6e 20  ton>.    return 
5c90: 24 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a  $x.} -cleanup {.
5ca0: 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66      destroy .t.f
5cb0: 0a 20 20 20 20 65 76 65 6e 74 20 64 65 6c 65 74  .    event delet
5cc0: 65 20 3c 3c 50 61 73 74 65 3e 3e 20 3c 4b 65 79  e <<Paste>> <Key
5cd0: 3e 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 7d 0a 74  >.} -result {}.t
5ce0: 65 73 74 20 62 69 6e 64 2d 31 33 2e 32 36 20 7b  est bind-13.26 {
5cf0: 54 6b 5f 42 69 6e 64 45 76 65 6e 74 20 70 72 6f  Tk_BindEvent pro
5d00: 63 65 64 75 72 65 3a 20 70 72 65 63 65 64 65 6e  cedure: preceden
5d10: 63 65 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20  ce} -setup {.   
5d20: 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61   frame .t.f -cla
5d30: 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
5d40: 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20  50 -height 100. 
5d50: 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20     pack .t.f.   
5d60: 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74   focus -force .t
5d70: 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20  .f.    update.  
5d80: 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f    set x {}.} -bo
5d90: 64 79 20 7b 0a 20 20 20 20 65 76 65 6e 74 20 61  dy {.    event a
5da0: 64 64 20 3c 3c 50 61 73 74 65 3e 3e 20 3c 42 75  dd <<Paste>> <Bu
5db0: 74 74 6f 6e 2d 32 3e 0a 20 20 20 20 65 76 65 6e  tton-2>.    even
5dc0: 74 20 61 64 64 20 3c 3c 43 6f 70 79 3e 3e 20 3c  t add <<Copy>> <
5dd0: 42 75 74 74 6f 6e 3e 0a 20 20 20 20 62 69 6e 64  Button>.    bind
5de0: 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 32 3e   .t.f <Button-2>
5df0: 20 22 6c 61 70 70 65 6e 64 20 78 20 42 75 74 74   "lappend x Butt
5e00: 6f 6e 2d 32 22 0a 20 20 20 20 62 69 6e 64 20 2e  on-2".    bind .
5e10: 74 2e 66 20 3c 3c 50 61 73 74 65 3e 3e 20 22 6c  t.f <<Paste>> "l
5e20: 61 70 70 65 6e 64 20 78 20 50 61 73 74 65 22 0a  append x Paste".
5e30: 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 42      bind .t.f <B
5e40: 75 74 74 6f 6e 3e 20 22 6c 61 70 70 65 6e 64 20  utton> "lappend 
5e50: 78 20 42 75 74 74 6f 6e 22 0a 20 20 20 20 62 69  x Button".    bi
5e60: 6e 64 20 2e 74 2e 66 20 3c 3c 43 6f 70 79 3e 3e  nd .t.f <<Copy>>
5e70: 20 22 6c 61 70 70 65 6e 64 20 78 20 43 6f 70 79   "lappend x Copy
5e80: 22 0a 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e  "..    event gen
5e90: 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74  erate .t.f <Butt
5ea0: 6f 6e 2d 32 3e 0a 20 20 20 20 62 69 6e 64 20 2e  on-2>.    bind .
5eb0: 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 32 3e 20 7b  t.f <Button-2> {
5ec0: 7d 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  }.    event gene
5ed0: 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f  rate .t.f <Butto
5ee0: 6e 2d 32 3e 0a 20 20 20 20 62 69 6e 64 20 2e 74  n-2>.    bind .t
5ef0: 2e 66 20 3c 3c 50 61 73 74 65 3e 3e 20 7b 7d 0a  .f <<Paste>> {}.
5f00: 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
5f10: 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d  te .t.f <Button-
5f20: 32 3e 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66  2>.    bind .t.f
5f30: 20 3c 42 75 74 74 6f 6e 3e 20 7b 7d 0a 20 20 20   <Button> {}.   
5f40: 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
5f50: 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 32 3e 0a  .t.f <Button-2>.
5f60: 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 3c      bind .t.f <<
5f70: 43 6f 70 79 3e 3e 20 7b 7d 0a 20 20 20 20 65 76  Copy>> {}.    ev
5f80: 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
5f90: 66 20 3c 42 75 74 74 6f 6e 2d 32 3e 0a 20 20 20  f <Button-2>.   
5fa0: 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d 63 6c   return $x.} -cl
5fb0: 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74  eanup {.    dest
5fc0: 72 6f 79 20 2e 74 2e 66 0a 20 20 20 20 65 76 65  roy .t.f.    eve
5fd0: 6e 74 20 64 65 6c 65 74 65 20 3c 3c 50 61 73 74  nt delete <<Past
5fe0: 65 3e 3e 20 3c 42 75 74 74 6f 6e 2d 32 3e 0a 20  e>> <Button-2>. 
5ff0: 20 20 20 65 76 65 6e 74 20 64 65 6c 65 74 65 20     event delete 
6000: 3c 3c 43 6f 70 79 3e 3e 20 3c 42 75 74 74 6f 6e  <<Copy>> <Button
6010: 3e 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 42 75 74  >.} -result {But
6020: 74 6f 6e 2d 32 20 50 61 73 74 65 20 42 75 74 74  ton-2 Paste Butt
6030: 6f 6e 20 43 6f 70 79 7d 0a 74 65 73 74 20 62 69  on Copy}.test bi
6040: 6e 64 2d 31 33 2e 32 37 20 7b 54 6b 5f 42 69 6e  nd-13.27 {Tk_Bin
6050: 64 45 76 65 6e 74 20 70 72 6f 63 65 64 75 72 65  dEvent procedure
6060: 3a 20 6e 6f 20 64 65 74 61 69 6c 20 76 69 72 74  : no detail virt
6070: 75 61 6c 20 70 61 74 74 65 72 6e 20 6c 69 73 74  ual pattern list
6080: 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66  } -setup {.    f
6090: 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73  rame .t.f -class
60a0: 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30   Test -width 150
60b0: 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20   -height 100.   
60c0: 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66   pack .t.f.    f
60d0: 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66  ocus -force .t.f
60e0: 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20  .    update.    
60f0: 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79  set x {}.} -body
6100: 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66   {.    bind .t.f
6110: 20 3c 42 75 74 74 6f 6e 2d 32 3e 20 7b 73 65 74   <Button-2> {set
6120: 20 78 20 42 75 74 74 6f 6e 2d 32 7d 0a 20 20 20   x Button-2}.   
6130: 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
6140: 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 32 3e 20  .t.f <Button-2> 
6150: 0a 20 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d  .    return $x.}
6160: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
6170: 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d  destroy .t.f.} -
6180: 72 65 73 75 6c 74 20 7b 42 75 74 74 6f 6e 2d 32  result {Button-2
6190: 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31 33 2e 32  }.test bind-13.2
61a0: 38 20 7b 54 6b 5f 42 69 6e 64 45 76 65 6e 74 20  8 {Tk_BindEvent 
61b0: 70 72 6f 63 65 64 75 72 65 3a 20 64 65 74 61 69  procedure: detai
61c0: 6c 20 76 69 72 74 75 61 6c 20 70 61 74 74 65 72  l virtual patter
61d0: 6e 20 6c 69 73 74 7d 20 2d 73 65 74 75 70 20 7b  n list} -setup {
61e0: 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
61f0: 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
6200: 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
6210: 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
6220: 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
6230: 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
6240: 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d  e.    set x {}.}
6250: 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 65 76 65   -body {.    eve
6260: 6e 74 20 61 64 64 20 3c 3c 50 61 73 74 65 3e 3e  nt add <<Paste>>
6270: 20 3c 42 75 74 74 6f 6e 2d 32 3e 0a 20 20 20 20   <Button-2>.    
6280: 62 69 6e 64 20 2e 74 2e 66 20 3c 3c 50 61 73 74  bind .t.f <<Past
6290: 65 3e 3e 20 7b 73 65 74 20 78 20 50 61 73 74 65  e>> {set x Paste
62a0: 7d 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  }.    event gene
62b0: 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f  rate .t.f <Butto
62c0: 6e 2d 32 3e 0a 20 20 20 20 72 65 74 75 72 6e 20  n-2>.    return 
62d0: 24 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a  $x.} -cleanup {.
62e0: 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66      destroy .t.f
62f0: 0a 20 20 20 20 65 76 65 6e 74 20 64 65 6c 65 74  .    event delet
6300: 65 20 3c 3c 50 61 73 74 65 3e 3e 20 3c 42 75 74  e <<Paste>> <But
6310: 74 6f 6e 2d 32 3e 0a 7d 20 2d 72 65 73 75 6c 74  ton-2>.} -result
6320: 20 7b 50 61 73 74 65 7d 0a 74 65 73 74 20 62 69   {Paste}.test bi
6330: 6e 64 2d 31 33 2e 32 39 20 7b 54 6b 5f 42 69 6e  nd-13.29 {Tk_Bin
6340: 64 45 76 65 6e 74 20 70 72 6f 63 65 64 75 72 65  dEvent procedure
6350: 3a 20 6e 6f 20 6e 6f 2d 64 65 74 61 69 6c 20 76  : no no-detail v
6360: 69 72 74 75 61 6c 20 70 61 74 74 65 72 6e 20 6c  irtual pattern l
6370: 69 73 74 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20  ist} -setup {.  
6380: 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c    frame .t.f -cl
6390: 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20  ass Test -width 
63a0: 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a  150 -height 100.
63b0: 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20      pack .t.f.  
63c0: 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e    focus -force .
63d0: 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20  t.f.    update. 
63e0: 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62     set x {}.} -b
63f0: 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e  ody {.    bind .
6400: 74 2e 66 20 3c 42 75 74 74 6f 6e 3e 20 7b 73 65  t.f <Button> {se
6410: 74 20 78 20 42 75 74 74 6f 6e 7d 0a 20 20 20 20  t x Button}.    
6420: 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
6430: 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 32 3e 0a 20  t.f <Button-2>. 
6440: 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d     return $x.} -
6450: 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
6460: 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
6470: 73 75 6c 74 20 7b 42 75 74 74 6f 6e 7d 0a 74 65  sult {Button}.te
6480: 73 74 20 62 69 6e 64 2d 31 33 2e 33 30 20 7b 54  st bind-13.30 {T
6490: 6b 5f 42 69 6e 64 45 76 65 6e 74 20 70 72 6f 63  k_BindEvent proc
64a0: 65 64 75 72 65 3a 20 6e 6f 2d 64 65 74 61 69 6c  edure: no-detail
64b0: 20 76 69 72 74 75 61 6c 20 70 61 74 74 65 72 6e   virtual pattern
64c0: 20 6c 69 73 74 7d 20 2d 73 65 74 75 70 20 7b 0a   list} -setup {.
64d0: 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d      frame .t.f -
64e0: 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74  class Test -widt
64f0: 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30  h 150 -height 10
6500: 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a  0.    pack .t.f.
6510: 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65      focus -force
6520: 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65   .t.f.    update
6530: 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20  .    set x {}.} 
6540: 2d 62 6f 64 79 20 7b 0a 20 20 20 20 65 76 65 6e  -body {.    even
6550: 74 20 61 64 64 20 3c 3c 50 61 73 74 65 3e 3e 20  t add <<Paste>> 
6560: 3c 42 75 74 74 6f 6e 3e 0a 20 20 20 20 62 69 6e  <Button>.    bin
6570: 64 20 2e 74 2e 66 20 3c 3c 50 61 73 74 65 3e 3e  d .t.f <<Paste>>
6580: 20 7b 73 65 74 20 78 20 50 61 73 74 65 7d 0a 20   {set x Paste}. 
6590: 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
65a0: 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 32  e .t.f <Button-2
65b0: 3e 0a 20 20 20 20 72 65 74 75 72 6e 20 24 78 0a  >.    return $x.
65c0: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20  } -cleanup {.   
65d0: 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 20 20   destroy .t.f.  
65e0: 20 20 65 76 65 6e 74 20 64 65 6c 65 74 65 20 3c    event delete <
65f0: 3c 50 61 73 74 65 3e 3e 20 3c 42 75 74 74 6f 6e  <Paste>> <Button
6600: 3e 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 50 61 73  >.} -result {Pas
6610: 74 65 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31 33  te}.test bind-13
6620: 2e 33 31 20 7b 54 6b 5f 42 69 6e 64 45 76 65 6e  .31 {Tk_BindEven
6630: 74 20 70 72 6f 63 65 64 75 72 65 3a 20 6e 6f 20  t procedure: no 
6640: 6d 61 74 63 68 7d 20 2d 73 65 74 75 70 20 7b 0a  match} -setup {.
6650: 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d      frame .t.f -
6660: 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74  class Test -widt
6670: 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30  h 150 -height 10
6680: 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a  0.    pack .t.f.
6690: 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65      focus -force
66a0: 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65   .t.f.    update
66b0: 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 65  .} -body {.    e
66c0: 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
66d0: 2e 66 20 3c 42 75 74 74 6f 6e 2d 32 3e 0a 7d 20  .f <Button-2>.} 
66e0: 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64  -cleanup {.    d
66f0: 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72  estroy .t.f.} -r
6700: 65 73 75 6c 74 20 7b 7d 0a 74 65 73 74 20 62 69  esult {}.test bi
6710: 6e 64 2d 31 33 2e 33 32 20 7b 54 6b 5f 42 69 6e  nd-13.32 {Tk_Bin
6720: 64 45 76 65 6e 74 20 70 72 6f 63 65 64 75 72 65  dEvent procedure
6730: 3a 20 6d 61 74 63 68 7d 20 2d 73 65 74 75 70 20  : match} -setup 
6740: 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66  {.    frame .t.f
6750: 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69   -class Test -wi
6760: 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20  dth 150 -height 
6770: 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e  100.    pack .t.
6780: 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72  f.    focus -for
6790: 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61  ce .t.f.    upda
67a0: 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a  te.    set x {}.
67b0: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
67c0: 6e 64 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d  nd .t.f <Button-
67d0: 32 3e 20 7b 73 65 74 20 78 20 42 75 74 74 6f 6e  2> {set x Button
67e0: 2d 32 7d 0a 20 20 20 20 65 76 65 6e 74 20 67 65  -2}.    event ge
67f0: 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74  nerate .t.f <But
6800: 74 6f 6e 2d 32 3e 0a 20 20 20 20 72 65 74 75 72  ton-2>.    retur
6810: 6e 20 24 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  n $x.} -cleanup 
6820: 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74  {.    destroy .t
6830: 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 42 75  .f.} -result {Bu
6840: 74 74 6f 6e 2d 32 7d 0a 74 65 73 74 20 62 69 6e  tton-2}.test bin
6850: 64 2d 31 33 2e 33 33 20 7b 54 6b 5f 42 69 6e 64  d-13.33 {Tk_Bind
6860: 45 76 65 6e 74 20 70 72 6f 63 65 64 75 72 65 3a  Event procedure:
6870: 20 6d 61 6e 79 20 43 20 62 69 6e 64 69 6e 67 73   many C bindings
6880: 20 63 61 75 73 65 20 72 65 61 6c 6c 6f 63 7d 20   cause realloc} 
6890: 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 23 20 74  -setup {.    # t
68a0: 68 69 73 20 74 65 73 74 20 6d 69 67 68 74 20 6e  his test might n
68b0: 6f 74 20 62 65 20 75 73 65 66 75 6c 20 61 6e 79  ot be useful any
68c0: 6d 6f 72 65 20 5b 23 33 30 30 39 39 39 38 5d 0a  more [#3009998].
68d0: 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d      frame .t.f -
68e0: 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74  class Test -widt
68f0: 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30  h 150 -height 10
6900: 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a  0.    pack .t.f.
6910: 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65      focus -force
6920: 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65   .t.f.    update
6930: 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20  .    set x {}.} 
6940: 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64  -body {.    bind
6950: 74 61 67 73 20 2e 74 2e 66 20 7b 61 20 62 20 63  tags .t.f {a b c
6960: 20 64 20 65 20 66 20 67 20 68 20 69 20 6a 20 6b   d e f g h i j k
6970: 20 6c 20 6d 20 6e 20 6f 20 70 7d 0a 20 20 20 20   l m n o p}.    
6980: 66 6f 72 65 61 63 68 20 70 20 5b 62 69 6e 64 74  foreach p [bindt
6990: 61 67 73 20 2e 74 2e 66 5d 20 7b 0a 20 20 20 20  ags .t.f] {.    
69a0: 20 20 20 20 62 69 6e 64 20 24 70 20 3c 31 3e 20      bind $p <1> 
69b0: 22 6c 61 70 70 65 6e 64 20 78 20 24 70 22 0a 20  "lappend x $p". 
69c0: 20 20 20 7d 0a 20 20 20 20 65 76 65 6e 74 20 67     }.    event g
69d0: 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 31 3e  enerate .t.f <1>
69e0: 0a 20 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d  .    return $x.}
69f0: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
6a00: 66 6f 72 65 61 63 68 20 70 20 5b 62 69 6e 64 74  foreach p [bindt
6a10: 61 67 73 20 2e 74 2e 66 5d 20 7b 62 69 6e 64 20  ags .t.f] {bind 
6a20: 24 70 20 3c 31 3e 20 7b 7d 7d 0a 20 20 20 20 64  $p <1> {}}.    d
6a30: 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72  estroy .t.f.} -r
6a40: 65 73 75 6c 74 20 7b 61 20 62 20 63 20 64 20 65  esult {a b c d e
6a50: 20 66 20 67 20 68 20 69 20 6a 20 6b 20 6c 20 6d   f g h i j k l m
6a60: 20 6e 20 6f 20 70 7d 0a 74 65 73 74 20 62 69 6e   n o p}.test bin
6a70: 64 2d 31 33 2e 33 34 20 7b 54 6b 5f 42 69 6e 64  d-13.34 {Tk_Bind
6a80: 45 76 65 6e 74 20 70 72 6f 63 65 64 75 72 65 3a  Event procedure:
6a90: 20 6d 75 6c 74 69 70 6c 65 20 74 61 67 73 7d 20   multiple tags} 
6aa0: 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61  -setup {.    fra
6ab0: 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54  me .t.f -class T
6ac0: 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d  est -width 150 -
6ad0: 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70  height 100.    p
6ae0: 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63  ack .t.f.    foc
6af0: 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20  us -force .t.f. 
6b00: 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73 65     update.    se
6b10: 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b  t x {}.} -body {
6b20: 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c  .    bind .t.f <
6b30: 42 75 74 74 6f 6e 2d 32 3e 20 7b 6c 61 70 70 65  Button-2> {lappe
6b40: 6e 64 20 78 20 2e 74 2e 66 7d 0a 20 20 20 20 62  nd x .t.f}.    b
6b50: 69 6e 64 20 54 65 73 74 20 3c 42 75 74 74 6f 6e  ind Test <Button
6b60: 2d 32 3e 20 7b 6c 61 70 70 65 6e 64 20 78 20 42  -2> {lappend x B
6b70: 75 74 74 6f 6e 7d 0a 20 20 20 20 65 76 65 6e 74  utton}.    event
6b80: 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
6b90: 42 75 74 74 6f 6e 2d 32 3e 0a 20 20 20 20 72 65  Button-2>.    re
6ba0: 74 75 72 6e 20 24 78 0a 7d 20 2d 63 6c 65 61 6e  turn $x.} -clean
6bb0: 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79  up {.    destroy
6bc0: 20 2e 74 2e 66 0a 20 20 20 20 62 69 6e 64 20 54   .t.f.    bind T
6bd0: 65 73 74 20 3c 42 75 74 74 6f 6e 2d 32 3e 20 7b  est <Button-2> {
6be0: 7d 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 2e 74 2e  }.} -result {.t.
6bf0: 66 20 42 75 74 74 6f 6e 7d 0a 74 65 73 74 20 62  f Button}.test b
6c00: 69 6e 64 2d 31 33 2e 33 35 20 7b 54 6b 5f 42 69  ind-13.35 {Tk_Bi
6c10: 6e 64 45 76 65 6e 74 20 70 72 6f 63 65 64 75 72  ndEvent procedur
6c20: 65 3a 20 65 78 65 63 75 74 65 20 62 69 6e 64 69  e: execute bindi
6c30: 6e 67 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20  ng} -setup {.   
6c40: 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61   frame .t.f -cla
6c50: 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
6c60: 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20  50 -height 100. 
6c70: 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20     pack .t.f.   
6c80: 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74   focus -force .t
6c90: 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20  .f.    update.  
6ca0: 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f    set x {}.} -bo
6cb0: 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74  dy {.    bind .t
6cc0: 2e 66 20 3c 31 3e 20 7b 6c 61 70 70 65 6e 64 20  .f <1> {lappend 
6cd0: 78 20 31 7d 0a 20 20 20 20 65 76 65 6e 74 20 67  x 1}.    event g
6ce0: 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 31 3e  enerate .t.f <1>
6cf0: 0a 20 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d  .    return $x.}
6d00: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
6d10: 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d  destroy .t.f.} -
6d20: 72 65 73 75 6c 74 20 7b 31 7d 0a 74 65 73 74 20  result {1}.test 
6d30: 62 69 6e 64 2d 31 33 2e 33 38 20 7b 54 6b 5f 42  bind-13.38 {Tk_B
6d40: 69 6e 64 45 76 65 6e 74 20 70 72 6f 63 65 64 75  indEvent procedu
6d50: 72 65 3a 20 62 69 6e 64 69 6e 67 20 67 65 74 73  re: binding gets
6d60: 20 74 6f 20 72 75 6e 7d 20 2d 73 65 74 75 70 20   to run} -setup 
6d70: 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66  {.    frame .t.f
6d80: 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69   -class Test -wi
6d90: 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20  dth 150 -height 
6da0: 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e  100.    pack .t.
6db0: 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72  f.    focus -for
6dc0: 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61  ce .t.f.    upda
6dd0: 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a  te.    set x {}.
6de0: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
6df0: 6e 64 20 54 65 73 74 20 3c 31 3e 20 7b 6c 61 70  nd Test <1> {lap
6e00: 70 65 6e 64 20 78 20 54 65 73 74 7d 0a 20 20 20  pend x Test}.   
6e10: 20 62 69 6e 64 20 2e 74 2e 66 20 3c 31 3e 20 7b   bind .t.f <1> {
6e20: 6c 61 70 70 65 6e 64 20 78 20 2e 74 2e 66 7d 0a  lappend x .t.f}.
6e30: 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
6e40: 74 65 20 2e 74 2e 66 20 3c 31 3e 0a 20 20 20 20  te .t.f <1>.    
6e50: 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d 63 6c 65  return $x.} -cle
6e60: 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72  anup {.    destr
6e70: 6f 79 20 2e 74 2e 66 0a 20 20 20 20 62 69 6e 64  oy .t.f.    bind
6e80: 20 54 65 73 74 20 3c 31 3e 20 7b 7d 0a 7d 20 2d   Test <1> {}.} -
6e90: 72 65 73 75 6c 74 20 7b 2e 74 2e 66 20 54 65 73  result {.t.f Tes
6ea0: 74 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31 33 2e  t}.test bind-13.
6eb0: 34 31 20 7b 54 6b 5f 42 69 6e 64 45 76 65 6e 74  41 {Tk_BindEvent
6ec0: 20 70 72 6f 63 65 64 75 72 65 3a 20 63 6f 6e 74   procedure: cont
6ed0: 69 6e 75 65 20 69 6e 20 73 63 72 69 70 74 7d 20  inue in script} 
6ee0: 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61  -setup {.    fra
6ef0: 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54  me .t.f -class T
6f00: 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d  est -width 150 -
6f10: 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70  height 100.    p
6f20: 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63  ack .t.f.    foc
6f30: 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20  us -force .t.f. 
6f40: 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73 65     update.    se
6f50: 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b  t x {}.} -body {
6f60: 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c  .    bind .t.f <
6f70: 42 75 74 74 6f 6e 2d 32 3e 20 7b 6c 61 70 70 65  Button-2> {lappe
6f80: 6e 64 20 78 20 62 31 3b 20 63 6f 6e 74 69 6e 75  nd x b1; continu
6f90: 65 3b 20 6c 61 70 70 65 6e 64 20 78 20 62 32 7d  e; lappend x b2}
6fa0: 0a 20 20 20 20 62 69 6e 64 20 54 65 73 74 20 3c  .    bind Test <
6fb0: 42 75 74 74 6f 6e 2d 32 3e 20 7b 6c 61 70 70 65  Button-2> {lappe
6fc0: 6e 64 20 78 20 42 31 3b 20 63 6f 6e 74 69 6e 75  nd x B1; continu
6fd0: 65 3b 20 6c 61 70 70 65 6e 64 20 78 20 42 32 7d  e; lappend x B2}
6fe0: 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
6ff0: 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e  ate .t.f <Button
7000: 2d 32 3e 0a 20 20 20 20 72 65 74 75 72 6e 20 24  -2>.    return $
7010: 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  x.} -cleanup {. 
7020: 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
7030: 20 20 20 20 62 69 6e 64 20 54 65 73 74 20 3c 42      bind Test <B
7040: 75 74 74 6f 6e 2d 32 3e 20 7b 7d 0a 7d 20 2d 72  utton-2> {}.} -r
7050: 65 73 75 6c 74 20 7b 62 31 20 42 31 7d 0a 74 65  esult {b1 B1}.te
7060: 73 74 20 62 69 6e 64 2d 31 33 2e 34 33 20 7b 54  st bind-13.43 {T
7070: 6b 5f 42 69 6e 64 45 76 65 6e 74 20 70 72 6f 63  k_BindEvent proc
7080: 65 64 75 72 65 3a 20 62 72 65 61 6b 20 69 6e 20  edure: break in 
7090: 73 63 72 69 70 74 7d 20 2d 73 65 74 75 70 20 7b  script} -setup {
70a0: 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
70b0: 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
70c0: 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
70d0: 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
70e0: 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
70f0: 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
7100: 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d  e.    set x {}.}
7110: 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
7120: 64 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 32  d .t.f <Button-2
7130: 3e 20 7b 6c 61 70 70 65 6e 64 20 78 20 62 31 3b  > {lappend x b1;
7140: 20 62 72 65 61 6b 3b 20 6c 61 70 70 65 6e 64 20   break; lappend 
7150: 78 20 62 32 7d 0a 20 20 20 20 62 69 6e 64 20 54  x b2}.    bind T
7160: 65 73 74 20 3c 42 75 74 74 6f 6e 2d 32 3e 20 7b  est <Button-2> {
7170: 6c 61 70 70 65 6e 64 20 78 20 42 31 3b 20 62 72  lappend x B1; br
7180: 65 61 6b 3b 20 6c 61 70 70 65 6e 64 20 78 20 42  eak; lappend x B
7190: 32 7d 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e  2}.    event gen
71a0: 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74  erate .t.f <Butt
71b0: 6f 6e 2d 32 3e 0a 20 20 20 20 72 65 74 75 72 6e  on-2>.    return
71c0: 20 24 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b   $x.} -cleanup {
71d0: 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e  .    destroy .t.
71e0: 66 0a 20 20 20 20 62 69 6e 64 20 54 65 73 74 20  f.    bind Test 
71f0: 3c 42 75 74 74 6f 6e 2d 32 3e 20 7b 7d 0a 7d 20  <Button-2> {}.} 
7200: 2d 72 65 73 75 6c 74 20 20 7b 62 31 7d 0a 74 65  -result  {b1}.te
7210: 73 74 20 62 69 6e 64 2d 31 33 2e 34 35 20 7b 54  st bind-13.45 {T
7220: 6b 5f 42 69 6e 64 45 76 65 6e 74 20 70 72 6f 63  k_BindEvent proc
7230: 65 64 75 72 65 3a 20 65 72 72 6f 72 20 69 6e 20  edure: error in 
7240: 73 63 72 69 70 74 7d 20 2d 73 65 74 75 70 20 7b  script} -setup {
7250: 0a 20 20 20 20 70 72 6f 63 20 62 67 65 72 72 6f  .    proc bgerro
7260: 72 20 6d 73 67 20 7b 0a 20 20 20 20 20 20 20 20  r msg {.        
7270: 67 6c 6f 62 61 6c 20 78 20 0a 20 20 20 20 20 20  global x .      
7280: 20 20 6c 61 70 70 65 6e 64 20 78 20 24 6d 73 67    lappend x $msg
7290: 0a 20 20 20 20 7d 0a 20 20 20 20 66 72 61 6d 65  .    }.    frame
72a0: 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73   .t.f -class Tes
72b0: 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65  t -width 150 -he
72c0: 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63  ight 100.    pac
72d0: 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73  k .t.f.    focus
72e0: 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20   -force .t.f.   
72f0: 20 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20   update.    set 
7300: 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20  x {}.} -body {. 
7310: 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 42 75     bind .t.f <Bu
7320: 74 74 6f 6e 2d 32 3e 20 7b 6c 61 70 70 65 6e 64  tton-2> {lappend
7330: 20 78 20 62 31 3b 20 62 6c 61 70 7d 0a 20 20 20   x b1; blap}.   
7340: 20 62 69 6e 64 20 54 65 73 74 20 3c 42 75 74 74   bind Test <Butt
7350: 6f 6e 2d 32 3e 20 7b 6c 61 70 70 65 6e 64 20 78  on-2> {lappend x
7360: 20 42 31 7d 0a 20 20 20 20 65 76 65 6e 74 20 67   B1}.    event g
7370: 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75  enerate .t.f <Bu
7380: 74 74 6f 6e 2d 32 3e 0a 20 20 20 20 75 70 64 61  tton-2>.    upda
7390: 74 65 0a 20 20 20 20 72 65 74 75 72 6e 20 24 78  te.    return $x
73a0: 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
73b0: 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 20    destroy .t.f. 
73c0: 20 20 20 62 69 6e 64 20 54 65 73 74 20 3c 42 75     bind Test <Bu
73d0: 74 74 6f 6e 2d 32 3e 20 7b 7d 0a 20 20 20 20 70  tton-2> {}.    p
73e0: 72 6f 63 20 62 67 65 72 72 6f 72 20 61 72 67 73  roc bgerror args
73f0: 20 7b 7d 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 62   {}.} -result {b
7400: 31 20 7b 69 6e 76 61 6c 69 64 20 63 6f 6d 6d 61  1 {invalid comma
7410: 6e 64 20 6e 61 6d 65 20 22 62 6c 61 70 22 7d 7d  nd name "blap"}}
7420: 0a 0a 74 65 73 74 20 62 69 6e 64 2d 31 35 2e 31  ..test bind-15.1
7430: 20 7b 4d 61 74 63 68 50 61 74 74 65 72 6e 73 20   {MatchPatterns 
7440: 70 72 6f 63 65 64 75 72 65 2c 20 69 67 6e 6f 72  procedure, ignor
7450: 69 6e 67 20 74 79 70 65 20 6d 69 73 6d 61 74 63  ing type mismatc
7460: 68 65 73 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20  hes} -setup {.  
7470: 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c    frame .t.f -cl
7480: 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20  ass Test -width 
7490: 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a  150 -height 100.
74a0: 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20      pack .t.f.  
74b0: 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e    focus -force .
74c0: 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 7d  t.f.    update.}
74d0: 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
74e0: 64 20 2e 74 2e 66 20 31 32 20 7b 73 65 74 20 78  d .t.f 12 {set x
74f0: 20 31 7d 0a 20 20 20 20 73 65 74 20 78 20 30 0a   1}.    set x 0.
7500: 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
7510: 74 65 20 2e 74 2e 66 20 3c 4b 65 79 2d 31 3e 0a  te .t.f <Key-1>.
7520: 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
7530: 74 65 20 2e 74 2e 66 20 3c 4b 65 79 52 65 6c 65  te .t.f <KeyRele
7540: 61 73 65 2d 31 3e 0a 20 20 20 20 65 76 65 6e 74  ase-1>.    event
7550: 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
7560: 4b 65 79 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74  Key-2>.    event
7570: 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
7580: 4b 65 79 52 65 6c 65 61 73 65 2d 32 3e 0a 20 20  KeyRelease-2>.  
7590: 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d 63    return $x.} -c
75a0: 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73  leanup {.    des
75b0: 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73  troy .t.f.} -res
75c0: 75 6c 74 20 7b 31 7d 0a 74 65 73 74 20 62 69 6e  ult {1}.test bin
75d0: 64 2d 31 35 2e 32 20 7b 4d 61 74 63 68 50 61 74  d-15.2 {MatchPat
75e0: 74 65 72 6e 73 20 70 72 6f 63 65 64 75 72 65 2c  terns procedure,
75f0: 20 69 67 6e 6f 72 69 6e 67 20 74 79 70 65 20 6d   ignoring type m
7600: 69 73 6d 61 74 63 68 65 73 7d 20 2d 73 65 74 75  ismatches} -setu
7610: 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74  p {.    frame .t
7620: 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d  .f -class Test -
7630: 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68  width 150 -heigh
7640: 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e  t 100.    pack .
7650: 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66  t.f.    focus -f
7660: 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70  orce .t.f.    up
7670: 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20  date.} -body {. 
7680: 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 31 32 20     bind .t.f 12 
7690: 7b 73 65 74 20 78 20 31 7d 0a 20 20 20 20 73 65  {set x 1}.    se
76a0: 74 20 78 20 30 0a 20 20 20 20 65 76 65 6e 74 20  t x 0.    event 
76b0: 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 4b  generate .t.f <K
76c0: 65 79 2d 31 3e 0a 20 20 20 20 65 76 65 6e 74 20  ey-1>.    event 
76d0: 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 45  generate .t.f <E
76e0: 6e 74 65 72 3e 0a 20 20 20 20 65 76 65 6e 74 20  nter>.    event 
76f0: 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 4b  generate .t.f <K
7700: 65 79 52 65 6c 65 61 73 65 2d 31 3e 0a 20 20 20  eyRelease-1>.   
7710: 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
7720: 2e 74 2e 66 20 3c 4c 65 61 76 65 3e 0a 20 20 20  .t.f <Leave>.   
7730: 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
7740: 2e 74 2e 66 20 3c 4b 65 79 2d 32 3e 0a 20 20 20  .t.f <Key-2>.   
7750: 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
7760: 2e 74 2e 66 20 3c 4b 65 79 52 65 6c 65 61 73 65  .t.f <KeyRelease
7770: 2d 32 3e 0a 20 20 20 20 72 65 74 75 72 6e 20 24  -2>.    return $
7780: 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  x.} -cleanup {. 
7790: 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
77a0: 7d 20 2d 72 65 73 75 6c 74 20 7b 31 7d 0a 74 65  } -result {1}.te
77b0: 73 74 20 62 69 6e 64 2d 31 35 2e 33 20 7b 4d 61  st bind-15.3 {Ma
77c0: 74 63 68 50 61 74 74 65 72 6e 73 20 70 72 6f 63  tchPatterns proc
77d0: 65 64 75 72 65 2c 20 69 67 6e 6f 72 69 6e 67 20  edure, ignoring 
77e0: 74 79 70 65 20 6d 69 73 6d 61 74 63 68 65 73 7d  type mismatches}
77f0: 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72   -setup {.    fr
7800: 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20  ame .t.f -class 
7810: 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20  Test -width 150 
7820: 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20  -height 100.    
7830: 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f  pack .t.f.    fo
7840: 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a  cus -force .t.f.
7850: 20 20 20 20 75 70 64 61 74 65 0a 7d 20 2d 62 6f      update.} -bo
7860: 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74  dy {.    bind .t
7870: 2e 66 20 31 32 20 7b 73 65 74 20 78 20 31 7d 0a  .f 12 {set x 1}.
7880: 20 20 20 20 73 65 74 20 78 20 30 0a 20 20 20 20      set x 0.    
7890: 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
78a0: 74 2e 66 20 3c 4b 65 79 2d 31 3e 0a 20 20 20 20  t.f <Key-1>.    
78b0: 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
78c0: 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 31 3e 0a 20  t.f <Button-1>. 
78d0: 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
78e0: 65 20 2e 74 2e 66 20 3c 4b 65 79 2d 32 3e 0a 20  e .t.f <Key-2>. 
78f0: 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d     return $x.} -
7900: 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
7910: 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
7920: 73 75 6c 74 20 7b 30 7d 0a 74 65 73 74 20 62 69  sult {0}.test bi
7930: 6e 64 2d 31 35 2e 34 20 7b 4d 61 74 63 68 50 61  nd-15.4 {MatchPa
7940: 74 74 65 72 6e 73 20 70 72 6f 63 65 64 75 72 65  tterns procedure
7950: 2c 20 69 67 6e 6f 72 69 6e 67 20 74 79 70 65 20  , ignoring type 
7960: 6d 69 73 6d 61 74 63 68 65 73 7d 20 2d 73 65 74  mismatches} -set
7970: 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e  up {.    frame .
7980: 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20  t.f -class Test 
7990: 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67  -width 150 -heig
79a0: 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20  ht 100.    pack 
79b0: 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d  .t.f.    focus -
79c0: 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75  force .t.f.    u
79d0: 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20 7b 0a  pdate.} -body {.
79e0: 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 44      bind .t.f <D
79f0: 6f 75 62 6c 65 2d 31 3e 20 7b 73 65 74 20 78 20  ouble-1> {set x 
7a00: 31 7d 0a 20 20 20 20 73 65 74 20 78 20 30 0a 20  1}.    set x 0. 
7a10: 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
7a20: 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 31  e .t.f <Button-1
7a30: 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  >.    event gene
7a40: 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f  rate .t.f <Butto
7a50: 6e 52 65 6c 65 61 73 65 2d 31 3e 0a 20 20 20 20  nRelease-1>.    
7a60: 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
7a70: 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 31 3e 0a 20  t.f <Button-1>. 
7a80: 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
7a90: 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65  e .t.f <ButtonRe
7aa0: 6c 65 61 73 65 2d 31 3e 0a 20 20 20 20 72 65 74  lease-1>.    ret
7ab0: 75 72 6e 20 24 78 0a 7d 20 2d 63 6c 65 61 6e 75  urn $x.} -cleanu
7ac0: 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20  p {.    destroy 
7ad0: 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b  .t.f.} -result {
7ae0: 31 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31 35 2e  1}.test bind-15.
7af0: 35 20 7b 4d 61 74 63 68 50 61 74 74 65 72 6e 73  5 {MatchPatterns
7b00: 20 70 72 6f 63 65 64 75 72 65 2c 20 69 67 6e 6f   procedure, igno
7b10: 72 69 6e 67 20 74 79 70 65 20 6d 69 73 6d 61 74  ring type mismat
7b20: 63 68 65 73 7d 20 2d 73 65 74 75 70 20 7b 0a 20  ches} -setup {. 
7b30: 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63     frame .t.f -c
7b40: 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
7b50: 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
7b60: 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20  .    pack .t.f. 
7b70: 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20     focus -force 
7b80: 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a  .t.f.    update.
7b90: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
7ba0: 6e 64 20 2e 74 2e 66 20 3c 44 6f 75 62 6c 65 2d  nd .t.f <Double-
7bb0: 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 3e 20 7b  ButtonRelease> {
7bc0: 73 65 74 20 78 20 31 7d 0a 20 20 20 20 73 65 74  set x 1}.    set
7bd0: 20 78 20 30 0a 20 20 20 20 65 76 65 6e 74 20 67   x 0.    event g
7be0: 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75  enerate .t.f <Bu
7bf0: 74 74 6f 6e 2d 31 3e 0a 20 20 20 20 65 76 65 6e  tton-1>.    even
7c00: 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
7c10: 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 2d 31  <ButtonRelease-1
7c20: 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  >.    event gene
7c30: 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f  rate .t.f <Butto
7c40: 6e 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74 20 67  n-2>.    event g
7c50: 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75  enerate .t.f <Bu
7c60: 74 74 6f 6e 52 65 6c 65 61 73 65 2d 32 3e 0a 20  ttonRelease-2>. 
7c70: 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d     return $x.} -
7c80: 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
7c90: 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
7ca0: 73 75 6c 74 20 7b 31 7d 0a 74 65 73 74 20 62 69  sult {1}.test bi
7cb0: 6e 64 2d 31 35 2e 36 20 7b 4d 61 74 63 68 50 61  nd-15.6 {MatchPa
7cc0: 74 74 65 72 6e 73 20 70 72 6f 63 65 64 75 72 65  tterns procedure
7cd0: 2c 20 69 67 6e 6f 72 69 6e 67 20 74 79 70 65 20  , ignoring type 
7ce0: 6d 69 73 6d 61 74 63 68 65 73 7d 20 2d 73 65 74  mismatches} -set
7cf0: 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e  up {.    frame .
7d00: 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20  t.f -class Test 
7d10: 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67  -width 150 -heig
7d20: 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20  ht 100.    pack 
7d30: 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d  .t.f.    focus -
7d40: 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75  force .t.f.    u
7d50: 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20 7b 0a  pdate.} -body {.
7d60: 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 44      bind .t.f <D
7d70: 6f 75 62 6c 65 2d 31 3e 20 7b 73 65 74 20 78 20  ouble-1> {set x 
7d80: 31 7d 0a 20 20 20 20 73 65 74 20 78 20 30 0a 20  1}.    set x 0. 
7d90: 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
7da0: 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 31  e .t.f <Button-1
7db0: 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  >.    event gene
7dc0: 72 61 74 65 20 2e 74 2e 66 20 3c 4b 65 79 2d 61  rate .t.f <Key-a
7dd0: 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  >.    event gene
7de0: 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f  rate .t.f <Butto
7df0: 6e 52 65 6c 65 61 73 65 2d 31 3e 0a 20 20 20 20  nRelease-1>.    
7e00: 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
7e10: 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 31 3e 0a 20  t.f <Button-1>. 
7e20: 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
7e30: 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65  e .t.f <ButtonRe
7e40: 6c 65 61 73 65 2d 31 3e 0a 20 20 20 20 72 65 74  lease-1>.    ret
7e50: 75 72 6e 20 24 78 0a 7d 20 2d 63 6c 65 61 6e 75  urn $x.} -cleanu
7e60: 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20  p {.    destroy 
7e70: 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b  .t.f.} -result {
7e80: 30 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31 35 2e  0}.test bind-15.
7e90: 37 20 7b 4d 61 74 63 68 50 61 74 74 65 72 6e 73  7 {MatchPatterns
7ea0: 20 70 72 6f 63 65 64 75 72 65 2c 20 69 67 6e 6f   procedure, igno
7eb0: 72 69 6e 67 20 74 79 70 65 20 6d 69 73 6d 61 74  ring type mismat
7ec0: 63 68 65 73 7d 20 2d 73 65 74 75 70 20 7b 0a 20  ches} -setup {. 
7ed0: 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63     frame .t.f -c
7ee0: 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
7ef0: 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
7f00: 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20  .    pack .t.f. 
7f10: 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20     focus -force 
7f20: 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a  .t.f.    update.
7f30: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
7f40: 6e 64 20 2e 74 2e 66 20 3c 44 6f 75 62 6c 65 2d  nd .t.f <Double-
7f50: 31 3e 20 7b 73 65 74 20 78 20 31 7d 0a 20 20 20  1> {set x 1}.   
7f60: 20 73 65 74 20 78 20 30 0a 20 20 20 20 65 76 65   set x 0.    eve
7f70: 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
7f80: 20 3c 42 75 74 74 6f 6e 2d 31 3e 0a 20 20 20 20   <Button-1>.    
7f90: 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
7fa0: 74 2e 66 20 3c 4b 65 79 2d 53 68 69 66 74 5f 4c  t.f <Key-Shift_L
7fb0: 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  >.    event gene
7fc0: 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f  rate .t.f <Butto
7fd0: 6e 52 65 6c 65 61 73 65 2d 31 3e 0a 20 20 20 20  nRelease-1>.    
7fe0: 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
7ff0: 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 31 3e 0a 20  t.f <Button-1>. 
8000: 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
8010: 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65  e .t.f <ButtonRe
8020: 6c 65 61 73 65 2d 31 3e 0a 20 20 20 20 72 65 74  lease-1>.    ret
8030: 75 72 6e 20 24 78 0a 7d 20 2d 63 6c 65 61 6e 75  urn $x.} -cleanu
8040: 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20  p {.    destroy 
8050: 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b  .t.f.} -result {
8060: 31 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31 35 2e  1}.test bind-15.
8070: 38 20 7b 4d 61 74 63 68 50 61 74 74 65 72 6e 73  8 {MatchPatterns
8080: 20 70 72 6f 63 65 64 75 72 65 2c 20 69 67 6e 6f   procedure, igno
8090: 72 69 6e 67 20 74 79 70 65 20 6d 69 73 6d 61 74  ring type mismat
80a0: 63 68 65 73 7d 20 2d 73 65 74 75 70 20 7b 0a 20  ches} -setup {. 
80b0: 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63     frame .t.f -c
80c0: 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
80d0: 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
80e0: 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20  .    pack .t.f. 
80f0: 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20     focus -force 
8100: 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a  .t.f.    update.
8110: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
8120: 6e 64 20 2e 74 2e 66 20 61 62 20 7b 73 65 74 20  nd .t.f ab {set 
8130: 78 20 31 7d 0a 20 20 20 20 73 65 74 20 78 20 30  x 1}.    set x 0
8140: 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
8150: 61 74 65 20 2e 74 2e 66 20 3c 4b 65 79 2d 61 3e  ate .t.f <Key-a>
8160: 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
8170: 61 74 65 20 2e 74 2e 66 20 3c 4b 65 79 2d 63 3e  ate .t.f <Key-c>
8180: 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
8190: 61 74 65 20 2e 74 2e 66 20 3c 4b 65 79 2d 62 3e  ate .t.f <Key-b>
81a0: 0a 20 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d  .    return $x.}
81b0: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
81c0: 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d  destroy .t.f.} -
81d0: 72 65 73 75 6c 74 20 7b 30 7d 0a 74 65 73 74 20  result {0}.test 
81e0: 62 69 6e 64 2d 31 35 2e 39 20 7b 4d 61 74 63 68  bind-15.9 {Match
81f0: 50 61 74 74 65 72 6e 73 20 70 72 6f 63 65 64 75  Patterns procedu
8200: 72 65 2c 20 6d 6f 64 69 66 69 65 72 20 63 68 65  re, modifier che
8210: 63 6b 73 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20  cks} -setup {.  
8220: 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c    frame .t.f -cl
8230: 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20  ass Test -width 
8240: 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a  150 -height 100.
8250: 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20      pack .t.f.  
8260: 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e    focus -force .
8270: 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 7d  t.f.    update.}
8280: 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
8290: 64 20 2e 74 2e 66 20 3c 4d 31 2d 4d 32 2d 4b 65  d .t.f <M1-M2-Ke
82a0: 79 3e 20 7b 73 65 74 20 78 20 31 7d 0a 20 20 20  y> {set x 1}.   
82b0: 20 73 65 74 20 78 20 30 0a 20 20 20 20 65 76 65   set x 0.    eve
82c0: 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
82d0: 20 3c 4b 65 79 2d 61 3e 20 2d 73 74 61 74 65 20   <Key-a> -state 
82e0: 30 78 31 38 0a 20 20 20 20 72 65 74 75 72 6e 20  0x18.    return 
82f0: 24 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a  $x.} -cleanup {.
8300: 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66      destroy .t.f
8310: 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 31 7d 0a 74  .} -result {1}.t
8320: 65 73 74 20 62 69 6e 64 2d 31 35 2e 31 30 20 7b  est bind-15.10 {
8330: 4d 61 74 63 68 50 61 74 74 65 72 6e 73 20 70 72  MatchPatterns pr
8340: 6f 63 65 64 75 72 65 2c 20 6d 6f 64 69 66 69 65  ocedure, modifie
8350: 72 20 63 68 65 63 6b 73 7d 20 2d 73 65 74 75 70  r checks} -setup
8360: 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e   {.    frame .t.
8370: 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77  f -class Test -w
8380: 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74  idth 150 -height
8390: 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74   100.    pack .t
83a0: 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f  .f.    focus -fo
83b0: 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64  rce .t.f.    upd
83c0: 61 74 65 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20  ate.} -body {.  
83d0: 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 4d 31 2d    bind .t.f <M1-
83e0: 4d 32 2d 4b 65 79 3e 20 7b 73 65 74 20 78 20 31  M2-Key> {set x 1
83f0: 7d 0a 20 20 20 20 73 65 74 20 78 20 30 0a 20 20  }.    set x 0.  
8400: 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
8410: 20 2e 74 2e 66 20 3c 4b 65 79 2d 61 3e 20 2d 73   .t.f <Key-a> -s
8420: 74 61 74 65 20 30 78 66 63 0a 20 20 20 20 72 65  tate 0xfc.    re
8430: 74 75 72 6e 20 24 78 0a 7d 20 2d 63 6c 65 61 6e  turn $x.} -clean
8440: 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79  up {.    destroy
8450: 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20   .t.f.} -result 
8460: 7b 31 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31 35  {1}.test bind-15
8470: 2e 31 31 20 7b 4d 61 74 63 68 50 61 74 74 65 72  .11 {MatchPatter
8480: 6e 73 20 70 72 6f 63 65 64 75 72 65 2c 20 6d 6f  ns procedure, mo
8490: 64 69 66 69 65 72 20 63 68 65 63 6b 73 7d 20 2d  difier checks} -
84a0: 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d  setup {.    fram
84b0: 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65  e .t.f -class Te
84c0: 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68  st -width 150 -h
84d0: 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61  eight 100.    pa
84e0: 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75  ck .t.f.    focu
84f0: 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20  s -force .t.f.  
8500: 20 20 75 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79    update.} -body
8510: 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66   {.    bind .t.f
8520: 20 3c 4d 31 2d 4d 32 2d 4b 65 79 3e 20 7b 73 65   <M1-M2-Key> {se
8530: 74 20 78 20 31 7d 0a 20 20 20 20 73 65 74 20 78  t x 1}.    set x
8540: 20 30 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e   0.    event gen
8550: 65 72 61 74 65 20 2e 74 2e 66 20 3c 4b 65 79 2d  erate .t.f <Key-
8560: 61 3e 20 2d 73 74 61 74 65 20 30 78 38 0a 20 20  a> -state 0x8.  
8570: 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d 63    return $x.} -c
8580: 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73  leanup {.    des
8590: 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73  troy .t.f.} -res
85a0: 75 6c 74 20 7b 30 7d 0a 74 65 73 74 20 62 69 6e  ult {0}.test bin
85b0: 64 2d 31 35 2e 31 32 20 7b 4d 61 74 63 68 50 61  d-15.12 {MatchPa
85c0: 74 74 65 72 6e 73 20 70 72 6f 63 65 64 75 72 65  tterns procedure
85d0: 2c 20 69 67 6e 6f 72 65 20 6d 6f 64 69 66 69 65  , ignore modifie
85e0: 72 20 70 72 65 73 73 65 73 20 61 6e 64 20 72 65  r presses and re
85f0: 6c 65 61 73 65 73 7d 20 2d 63 6f 6e 73 74 72 61  leases} -constra
8600: 69 6e 74 73 20 7b 20 0a 20 20 20 20 6e 6f 6e 50  ints { .    nonP
8610: 6f 72 74 61 62 6c 65 0a 7d 20 2d 73 65 74 75 70  ortable.} -setup
8620: 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e   {.    frame .t.
8630: 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77  f -class Test -w
8640: 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74  idth 150 -height
8650: 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74   100.    pack .t
8660: 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f  .f.    focus -fo
8670: 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64  rce .t.f.    upd
8680: 61 74 65 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20  ate.} -body {.  
8690: 20 20 23 20 54 68 69 73 20 74 65 73 74 20 69 73    # This test is
86a0: 20 6e 6f 6e 2d 70 6f 72 74 61 62 6c 65 20 62 65   non-portable be
86b0: 63 61 75 73 65 20 74 68 65 20 53 68 69 66 74 5f  cause the Shift_
86c0: 4c 20 6b 65 79 73 79 6d 20 6d 61 79 20 62 65 68  L keysym may beh
86d0: 61 76 65 0a 20 20 20 20 23 20 64 69 66 66 65 72  ave.    # differ
86e0: 65 6e 74 6c 79 20 6f 6e 20 73 6f 6d 65 20 70 6c  ently on some pl
86f0: 61 74 66 6f 72 6d 73 2e 0a 20 20 20 20 62 69 6e  atforms..    bin
8700: 64 20 2e 74 2e 66 20 61 42 20 7b 73 65 74 20 78  d .t.f aB {set x
8710: 20 31 7d 0a 20 20 20 20 73 65 74 20 78 20 30 0a   1}.    set x 0.
8720: 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
8730: 74 65 20 2e 74 2e 66 20 3c 4b 65 79 2d 61 3e 0a  te .t.f <Key-a>.
8740: 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
8750: 74 65 20 2e 74 2e 66 20 3c 4b 65 79 2d 53 68 69  te .t.f <Key-Shi
8760: 66 74 5f 4c 3e 0a 20 20 20 20 65 76 65 6e 74 20  ft_L>.    event 
8770: 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 4b  generate .t.f <K
8780: 65 79 2d 62 3e 20 2d 73 74 61 74 65 20 31 0a 20  ey-b> -state 1. 
8790: 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d     return $x.} -
87a0: 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
87b0: 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
87c0: 73 75 6c 74 20 7b 31 7d 0a 74 65 73 74 20 62 69  sult {1}.test bi
87d0: 6e 64 2d 31 35 2e 31 33 20 7b 4d 61 74 63 68 50  nd-15.13 {MatchP
87e0: 61 74 74 65 72 6e 73 20 70 72 6f 63 65 64 75 72  atterns procedur
87f0: 65 2c 20 63 68 65 63 6b 69 6e 67 20 64 65 74 61  e, checking deta
8800: 69 6c 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20  il} -setup {.   
8810: 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61   frame .t.f -cla
8820: 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
8830: 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20  50 -height 100. 
8840: 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20     pack .t.f.   
8850: 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74   focus -force .t
8860: 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 7d 20  .f.    update.} 
8870: 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64  -body {.    bind
8880: 20 2e 74 2e 66 20 61 62 20 7b 73 65 74 20 78 20   .t.f ab {set x 
8890: 31 7d 0a 20 20 20 20 73 65 74 20 78 20 30 0a 20  1}.    set x 0. 
88a0: 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
88b0: 65 20 2e 74 2e 66 20 3c 4b 65 79 2d 61 3e 0a 20  e .t.f <Key-a>. 
88c0: 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
88d0: 65 20 2e 74 2e 66 20 3c 4b 65 79 2d 63 3e 0a 20  e .t.f <Key-c>. 
88e0: 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d     return $x.} -
88f0: 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
8900: 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
8910: 73 75 6c 74 20 7b 30 7d 0a 74 65 73 74 20 62 69  sult {0}.test bi
8920: 6e 64 2d 31 35 2e 31 34 20 7b 4d 61 74 63 68 50  nd-15.14 {MatchP
8930: 61 74 74 65 72 6e 73 20 70 72 6f 63 65 64 75 72  atterns procedur
8940: 65 2c 20 63 68 65 63 6b 69 6e 67 20 22 6e 65 61  e, checking "nea
8950: 72 62 79 22 7d 20 2d 73 65 74 75 70 20 7b 0a 20  rby"} -setup {. 
8960: 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63     frame .t.f -c
8970: 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
8980: 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
8990: 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20  .    pack .t.f. 
89a0: 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20     focus -force 
89b0: 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a  .t.f.    update.
89c0: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
89d0: 6e 64 20 2e 74 2e 66 20 3c 44 6f 75 62 6c 65 2d  nd .t.f <Double-
89e0: 31 3e 20 7b 73 65 74 20 78 20 31 7d 0a 20 20 20  1> {set x 1}.   
89f0: 20 73 65 74 20 78 20 30 0a 20 20 20 20 65 76 65   set x 0.    eve
8a00: 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
8a10: 20 3c 42 75 74 74 6f 6e 2d 32 3e 20 0a 20 20 20   <Button-2> .   
8a20: 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
8a30: 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65  .t.f <ButtonRele
8a40: 61 73 65 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74  ase-2>.    event
8a50: 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
8a60: 42 75 74 74 6f 6e 2d 31 3e 20 2d 78 20 33 30 20  Button-1> -x 30 
8a70: 2d 79 20 34 30 0a 20 20 20 20 65 76 65 6e 74 20  -y 40.    event 
8a80: 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42  generate .t.f <B
8a90: 75 74 74 6f 6e 2d 31 3e 20 2d 78 20 33 31 20 2d  utton-1> -x 31 -
8aa0: 79 20 33 39 0a 20 20 20 20 65 76 65 6e 74 20 67  y 39.    event g
8ab0: 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75  enerate .t.f <Bu
8ac0: 74 74 6f 6e 52 65 6c 65 61 73 65 2d 31 3e 0a 20  ttonRelease-1>. 
8ad0: 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d     return $x.} -
8ae0: 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
8af0: 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
8b00: 73 75 6c 74 20 7b 31 7d 0a 74 65 73 74 20 62 69  sult {1}.test bi
8b10: 6e 64 2d 31 35 2e 31 35 20 7b 4d 61 74 63 68 50  nd-15.15 {MatchP
8b20: 61 74 74 65 72 6e 73 20 70 72 6f 63 65 64 75 72  atterns procedur
8b30: 65 2c 20 63 68 65 63 6b 69 6e 67 20 22 6e 65 61  e, checking "nea
8b40: 72 62 79 22 7d 20 2d 73 65 74 75 70 20 7b 0a 20  rby"} -setup {. 
8b50: 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63     frame .t.f -c
8b60: 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
8b70: 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
8b80: 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20  .    pack .t.f. 
8b90: 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20     focus -force 
8ba0: 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a  .t.f.    update.
8bb0: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
8bc0: 6e 64 20 2e 74 2e 66 20 3c 44 6f 75 62 6c 65 2d  nd .t.f <Double-
8bd0: 31 3e 20 7b 73 65 74 20 78 20 31 7d 0a 20 20 20  1> {set x 1}.   
8be0: 20 73 65 74 20 78 20 30 0a 20 20 20 20 65 76 65   set x 0.    eve
8bf0: 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
8c00: 20 3c 42 75 74 74 6f 6e 2d 32 3e 20 0a 20 20 20   <Button-2> .   
8c10: 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
8c20: 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65  .t.f <ButtonRele
8c30: 61 73 65 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74  ase-2>.    event
8c40: 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
8c50: 42 75 74 74 6f 6e 2d 31 3e 20 2d 78 20 33 30 20  Button-1> -x 30 
8c60: 2d 79 20 34 30 0a 20 20 20 20 65 76 65 6e 74 20  -y 40.    event 
8c70: 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42  generate .t.f <B
8c80: 75 74 74 6f 6e 2d 31 3e 20 2d 78 20 32 39 20 2d  utton-1> -x 29 -
8c90: 79 20 34 31 0a 20 20 20 20 65 76 65 6e 74 20 67  y 41.    event g
8ca0: 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75  enerate .t.f <Bu
8cb0: 74 74 6f 6e 52 65 6c 65 61 73 65 2d 31 3e 0a 20  ttonRelease-1>. 
8cc0: 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d     return $x.} -
8cd0: 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
8ce0: 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
8cf0: 73 75 6c 74 20 7b 31 7d 0a 74 65 73 74 20 62 69  sult {1}.test bi
8d00: 6e 64 2d 31 35 2e 31 36 20 7b 4d 61 74 63 68 50  nd-15.16 {MatchP
8d10: 61 74 74 65 72 6e 73 20 70 72 6f 63 65 64 75 72  atterns procedur
8d20: 65 2c 20 63 68 65 63 6b 69 6e 67 20 22 6e 65 61  e, checking "nea
8d30: 72 62 79 22 7d 20 2d 73 65 74 75 70 20 7b 0a 20  rby"} -setup {. 
8d40: 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63     frame .t.f -c
8d50: 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
8d60: 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
8d70: 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20  .    pack .t.f. 
8d80: 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20     focus -force 
8d90: 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a  .t.f.    update.
8da0: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
8db0: 6e 64 20 2e 74 2e 66 20 3c 44 6f 75 62 6c 65 2d  nd .t.f <Double-
8dc0: 31 3e 20 7b 73 65 74 20 78 20 31 7d 0a 20 20 20  1> {set x 1}.   
8dd0: 20 73 65 74 20 78 20 30 0a 20 20 20 20 65 76 65   set x 0.    eve
8de0: 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
8df0: 20 3c 42 75 74 74 6f 6e 2d 32 3e 20 0a 20 20 20   <Button-2> .   
8e00: 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
8e10: 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65  .t.f <ButtonRele
8e20: 61 73 65 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74  ase-2>.    event
8e30: 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
8e40: 42 75 74 74 6f 6e 2d 31 3e 20 2d 78 20 33 30 20  Button-1> -x 30 
8e50: 2d 79 20 34 30 0a 20 20 20 20 65 76 65 6e 74 20  -y 40.    event 
8e60: 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42  generate .t.f <B
8e70: 75 74 74 6f 6e 2d 31 3e 20 2d 78 20 34 30 20 2d  utton-1> -x 40 -
8e80: 79 20 34 30 0a 20 20 20 20 65 76 65 6e 74 20 67  y 40.    event g
8e90: 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75  enerate .t.f <Bu
8ea0: 74 74 6f 6e 52 65 6c 65 61 73 65 2d 32 3e 0a 20  ttonRelease-2>. 
8eb0: 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d     return $x.} -
8ec0: 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
8ed0: 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
8ee0: 73 75 6c 74 20 7b 30 7d 0a 74 65 73 74 20 62 69  sult {0}.test bi
8ef0: 6e 64 2d 31 35 2e 31 37 20 7b 4d 61 74 63 68 50  nd-15.17 {MatchP
8f00: 61 74 74 65 72 6e 73 20 70 72 6f 63 65 64 75 72  atterns procedur
8f10: 65 2c 20 63 68 65 63 6b 69 6e 67 20 22 6e 65 61  e, checking "nea
8f20: 72 62 79 22 7d 20 2d 73 65 74 75 70 20 7b 0a 20  rby"} -setup {. 
8f30: 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63     frame .t.f -c
8f40: 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
8f50: 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
8f60: 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20  .    pack .t.f. 
8f70: 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20     focus -force 
8f80: 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a  .t.f.    update.
8f90: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
8fa0: 6e 64 20 2e 74 2e 66 20 3c 44 6f 75 62 6c 65 2d  nd .t.f <Double-
8fb0: 31 3e 20 7b 73 65 74 20 78 20 31 7d 0a 20 20 20  1> {set x 1}.   
8fc0: 20 73 65 74 20 78 20 30 0a 20 20 20 20 65 76 65   set x 0.    eve
8fd0: 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
8fe0: 20 3c 42 75 74 74 6f 6e 2d 32 3e 20 0a 20 20 20   <Button-2> .   
8ff0: 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
9000: 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65  .t.f <ButtonRele
9010: 61 73 65 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74  ase-2>.    event
9020: 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
9030: 42 75 74 74 6f 6e 2d 31 3e 20 2d 78 20 33 30 20  Button-1> -x 30 
9040: 2d 79 20 34 30 0a 20 20 20 20 65 76 65 6e 74 20  -y 40.    event 
9050: 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42  generate .t.f <B
9060: 75 74 74 6f 6e 2d 31 3e 20 2d 78 20 32 30 20 2d  utton-1> -x 20 -
9070: 79 20 34 30 0a 20 20 20 20 65 76 65 6e 74 20 67  y 40.    event g
9080: 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75  enerate .t.f <Bu
9090: 74 74 6f 6e 52 65 6c 65 61 73 65 2d 31 3e 0a 20  ttonRelease-1>. 
90a0: 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d     return $x.} -
90b0: 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
90c0: 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
90d0: 73 75 6c 74 20 7b 30 7d 0a 74 65 73 74 20 62 69  sult {0}.test bi
90e0: 6e 64 2d 31 35 2e 31 38 20 7b 4d 61 74 63 68 50  nd-15.18 {MatchP
90f0: 61 74 74 65 72 6e 73 20 70 72 6f 63 65 64 75 72  atterns procedur
9100: 65 2c 20 63 68 65 63 6b 69 6e 67 20 22 6e 65 61  e, checking "nea
9110: 72 62 79 22 7d 20 2d 73 65 74 75 70 20 7b 0a 20  rby"} -setup {. 
9120: 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63     frame .t.f -c
9130: 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
9140: 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
9150: 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20  .    pack .t.f. 
9160: 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20     focus -force 
9170: 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a  .t.f.    update.
9180: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
9190: 6e 64 20 2e 74 2e 66 20 3c 44 6f 75 62 6c 65 2d  nd .t.f <Double-
91a0: 31 3e 20 7b 73 65 74 20 78 20 31 7d 0a 20 20 20  1> {set x 1}.   
91b0: 20 73 65 74 20 78 20 30 0a 20 20 20 20 65 76 65   set x 0.    eve
91c0: 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
91d0: 20 3c 42 75 74 74 6f 6e 2d 32 3e 20 0a 20 20 20   <Button-2> .   
91e0: 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
91f0: 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65  .t.f <ButtonRele
9200: 61 73 65 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74  ase-2>.    event
9210: 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
9220: 42 75 74 74 6f 6e 2d 31 3e 20 2d 78 20 33 30 20  Button-1> -x 30 
9230: 2d 79 20 34 30 0a 20 20 20 20 65 76 65 6e 74 20  -y 40.    event 
9240: 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42  generate .t.f <B
9250: 75 74 74 6f 6e 2d 31 3e 20 2d 78 20 33 30 20 2d  utton-1> -x 30 -
9260: 79 20 33 30 0a 20 20 20 20 65 76 65 6e 74 20 67  y 30.    event g
9270: 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75  enerate .t.f <Bu
9280: 74 74 6f 6e 52 65 6c 65 61 73 65 2d 31 3e 0a 20  ttonRelease-1>. 
9290: 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d     return $x.} -
92a0: 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
92b0: 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
92c0: 73 75 6c 74 20 7b 30 7d 0a 74 65 73 74 20 62 69  sult {0}.test bi
92d0: 6e 64 2d 31 35 2e 31 39 20 7b 4d 61 74 63 68 50  nd-15.19 {MatchP
92e0: 61 74 74 65 72 6e 73 20 70 72 6f 63 65 64 75 72  atterns procedur
92f0: 65 2c 20 63 68 65 63 6b 69 6e 67 20 22 6e 65 61  e, checking "nea
9300: 72 62 79 22 7d 20 2d 73 65 74 75 70 20 7b 0a 20  rby"} -setup {. 
9310: 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63     frame .t.f -c
9320: 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
9330: 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
9340: 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20  .    pack .t.f. 
9350: 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20     focus -force 
9360: 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a  .t.f.    update.
9370: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
9380: 6e 64 20 2e 74 2e 66 20 3c 44 6f 75 62 6c 65 2d  nd .t.f <Double-
9390: 31 3e 20 7b 73 65 74 20 78 20 31 7d 0a 20 20 20  1> {set x 1}.   
93a0: 20 73 65 74 20 78 20 30 0a 20 20 20 20 65 76 65   set x 0.    eve
93b0: 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
93c0: 20 3c 42 75 74 74 6f 6e 2d 32 3e 20 0a 20 20 20   <Button-2> .   
93d0: 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
93e0: 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65  .t.f <ButtonRele
93f0: 61 73 65 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74  ase-2>.    event
9400: 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
9410: 42 75 74 74 6f 6e 2d 31 3e 20 2d 78 20 33 30 20  Button-1> -x 30 
9420: 2d 79 20 34 30 0a 20 20 20 20 65 76 65 6e 74 20  -y 40.    event 
9430: 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42  generate .t.f <B
9440: 75 74 74 6f 6e 2d 31 3e 20 2d 78 20 33 30 20 2d  utton-1> -x 30 -
9450: 79 20 35 30 0a 20 20 20 20 65 76 65 6e 74 20 67  y 50.    event g
9460: 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75  enerate .t.f <Bu
9470: 74 74 6f 6e 52 65 6c 65 61 73 65 2d 31 3e 0a 20  ttonRelease-1>. 
9480: 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d     return $x.} -
9490: 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
94a0: 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
94b0: 73 75 6c 74 20 7b 30 7d 0a 74 65 73 74 20 62 69  sult {0}.test bi
94c0: 6e 64 2d 31 35 2e 32 30 20 7b 4d 61 74 63 68 50  nd-15.20 {MatchP
94d0: 61 74 74 65 72 6e 73 20 70 72 6f 63 65 64 75 72  atterns procedur
94e0: 65 2c 20 63 68 65 63 6b 69 6e 67 20 22 6e 65 61  e, checking "nea
94f0: 72 62 79 22 7d 20 2d 73 65 74 75 70 20 7b 0a 20  rby"} -setup {. 
9500: 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63     frame .t.f -c
9510: 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
9520: 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
9530: 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20  .    pack .t.f. 
9540: 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20     focus -force 
9550: 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a  .t.f.    update.
9560: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
9570: 6e 64 20 2e 74 2e 66 20 3c 44 6f 75 62 6c 65 2d  nd .t.f <Double-
9580: 31 3e 20 7b 73 65 74 20 78 20 31 7d 0a 20 20 20  1> {set x 1}.   
9590: 20 73 65 74 20 78 20 30 0a 20 20 20 20 65 76 65   set x 0.    eve
95a0: 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
95b0: 20 3c 42 75 74 74 6f 6e 2d 32 3e 20 0a 20 20 20   <Button-2> .   
95c0: 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
95d0: 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65  .t.f <ButtonRele
95e0: 61 73 65 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74  ase-2>.    event
95f0: 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
9600: 42 75 74 74 6f 6e 2d 31 3e 20 2d 74 69 6d 65 20  Button-1> -time 
9610: 33 30 30 0a 20 20 20 20 65 76 65 6e 74 20 67 65  300.    event ge
9620: 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74  nerate .t.f <But
9630: 74 6f 6e 2d 31 3e 20 2d 74 69 6d 65 20 37 30 30  ton-1> -time 700
9640: 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
9650: 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e  ate .t.f <Button
9660: 52 65 6c 65 61 73 65 2d 31 3e 0a 20 20 20 20 72  Release-1>.    r
9670: 65 74 75 72 6e 20 24 78 0a 7d 20 2d 63 6c 65 61  eturn $x.} -clea
9680: 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f  nup {.    destro
9690: 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74  y .t.f.} -result
96a0: 20 7b 31 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31   {1}.test bind-1
96b0: 35 2e 32 31 20 7b 4d 61 74 63 68 50 61 74 74 65  5.21 {MatchPatte
96c0: 72 6e 73 20 70 72 6f 63 65 64 75 72 65 2c 20 63  rns procedure, c
96d0: 68 65 63 6b 69 6e 67 20 22 6e 65 61 72 62 79 22  hecking "nearby"
96e0: 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66  } -setup {.    f
96f0: 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73  rame .t.f -class
9700: 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30   Test -width 150
9710: 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20   -height 100.   
9720: 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66   pack .t.f.    f
9730: 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66  ocus -force .t.f
9740: 0a 20 20 20 20 75 70 64 61 74 65 0a 7d 20 2d 62  .    update.} -b
9750: 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e  ody {.    bind .
9760: 74 2e 66 20 3c 44 6f 75 62 6c 65 2d 31 3e 20 7b  t.f <Double-1> {
9770: 73 65 74 20 78 20 31 7d 0a 20 20 20 20 73 65 74  set x 1}.    set
9780: 20 78 20 30 0a 20 20 20 20 65 76 65 6e 74 20 67   x 0.    event g
9790: 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75  enerate .t.f <Bu
97a0: 74 74 6f 6e 2d 32 3e 20 0a 20 20 20 20 65 76 65  tton-2> .    eve
97b0: 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
97c0: 20 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 2d   <ButtonRelease-
97d0: 32 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e  2>.    event gen
97e0: 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74  erate .t.f <Butt
97f0: 6f 6e 2d 31 3e 20 2d 74 69 6d 65 20 33 30 30 0a  on-1> -time 300.
9800: 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
9810: 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d  te .t.f <Button-
9820: 31 3e 20 2d 74 69 6d 65 20 39 30 30 0a 20 20 20  1> -time 900.   
9830: 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
9840: 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65  .t.f <ButtonRele
9850: 61 73 65 2d 31 3e 0a 20 20 20 20 72 65 74 75 72  ase-1>.    retur
9860: 6e 20 24 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  n $x.} -cleanup 
9870: 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74  {.    destroy .t
9880: 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 30 7d  .f.} -result {0}
9890: 0a 74 65 73 74 20 62 69 6e 64 2d 31 35 2e 32 32  .test bind-15.22
98a0: 20 7b 4d 61 74 63 68 50 61 74 74 65 72 6e 73 20   {MatchPatterns 
98b0: 70 72 6f 63 65 64 75 72 65 2c 20 74 69 6d 65 20  procedure, time 
98c0: 77 72 61 70 2d 61 72 6f 75 6e 64 7d 20 2d 73 65  wrap-around} -se
98d0: 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20  tup {.    frame 
98e0: 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74  .t.f -class Test
98f0: 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69   -width 150 -hei
9900: 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b  ght 100.    pack
9910: 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20   .t.f.    focus 
9920: 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20  -force .t.f.    
9930: 75 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20 7b  update.} -body {
9940: 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c  .    bind .t.f <
9950: 44 6f 75 62 6c 65 2d 31 3e 20 7b 73 65 74 20 78  Double-1> {set x
9960: 20 31 7d 0a 20 20 20 20 73 65 74 20 78 20 30 0a   1}.    set x 0.
9970: 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
9980: 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d  te .t.f <Button-
9990: 31 3e 20 2d 74 69 6d 65 20 2d 31 30 30 0a 20 20  1> -time -100.  
99a0: 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
99b0: 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 31 3e   .t.f <Button-1>
99c0: 20 2d 74 69 6d 65 20 32 30 30 0a 20 20 20 20 65   -time 200.    e
99d0: 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
99e0: 2e 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73  .f <ButtonReleas
99f0: 65 2d 31 3e 0a 20 20 20 20 72 65 74 75 72 6e 20  e-1>.    return 
9a00: 24 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a  $x.} -cleanup {.
9a10: 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66      destroy .t.f
9a20: 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 31 7d 0a 74  .} -result {1}.t
9a30: 65 73 74 20 62 69 6e 64 2d 31 35 2e 32 33 20 7b  est bind-15.23 {
9a40: 4d 61 74 63 68 50 61 74 74 65 72 6e 73 20 70 72  MatchPatterns pr
9a50: 6f 63 65 64 75 72 65 2c 20 74 69 6d 65 20 77 72  ocedure, time wr
9a60: 61 70 2d 61 72 6f 75 6e 64 7d 20 2d 73 65 74 75  ap-around} -setu
9a70: 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74  p {.    frame .t
9a80: 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d  .f -class Test -
9a90: 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68  width 150 -heigh
9aa0: 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e  t 100.    pack .
9ab0: 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66  t.f.    focus -f
9ac0: 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70  orce .t.f.    up
9ad0: 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20  date.} -body {. 
9ae0: 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 44 6f     bind .t.f <Do
9af0: 75 62 6c 65 2d 31 3e 20 7b 73 65 74 20 78 20 31  uble-1> {set x 1
9b00: 7d 0a 20 20 20 20 73 65 74 20 78 20 30 0a 20 20  }.    set x 0.  
9b10: 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
9b20: 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 31 3e   .t.f <Button-1>
9b30: 20 2d 74 69 6d 65 20 2d 31 30 30 0a 20 20 20 20   -time -100.    
9b40: 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
9b50: 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 31 3e 20 2d  t.f <Button-1> -
9b60: 74 69 6d 65 20 35 30 30 0a 20 20 20 20 65 76 65  time 500.    eve
9b70: 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
9b80: 20 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 2d   <ButtonRelease-
9b90: 31 3e 0a 20 20 20 20 72 65 74 75 72 6e 20 24 78  1>.    return $x
9ba0: 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
9bb0: 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d    destroy .t.f.}
9bc0: 20 2d 72 65 73 75 6c 74 20 7b 30 7d 0a 74 65 73   -result {0}.tes
9bd0: 74 20 62 69 6e 64 2d 31 35 2e 32 34 20 7b 4d 61  t bind-15.24 {Ma
9be0: 74 63 68 50 61 74 74 65 72 6e 73 20 70 72 6f 63  tchPatterns proc
9bf0: 65 64 75 72 65 2c 20 76 69 72 74 75 61 6c 20 65  edure, virtual e
9c00: 76 65 6e 74 7d 20 2d 73 65 74 75 70 20 7b 0a 20  vent} -setup {. 
9c10: 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63     frame .t.f -c
9c20: 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
9c30: 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
9c40: 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20  .    pack .t.f. 
9c50: 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20     focus -force 
9c60: 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a  .t.f.    update.
9c70: 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d      set x {}.} -
9c80: 62 6f 64 79 20 7b 0a 20 20 20 20 65 76 65 6e 74  body {.    event
9c90: 20 61 64 64 20 3c 3c 50 61 73 74 65 3e 3e 20 3c   add <<Paste>> <
9ca0: 42 75 74 74 6f 6e 2d 31 3e 0a 20 20 20 20 62 69  Button-1>.    bi
9cb0: 6e 64 20 2e 74 2e 66 20 3c 3c 50 61 73 74 65 3e  nd .t.f <<Paste>
9cc0: 3e 20 7b 6c 61 70 70 65 6e 64 20 78 20 70 61 73  > {lappend x pas
9cd0: 74 65 7d 0a 20 20 20 20 65 76 65 6e 74 20 67 65  te}.    event ge
9ce0: 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74  nerate .t.f <But
9cf0: 74 6f 6e 2d 31 3e 0a 20 20 20 20 65 76 65 6e 74  ton-1>.    event
9d00: 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
9d10: 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 2d 31 3e  ButtonRelease-1>
9d20: 0a 20 20 20 20 73 65 74 20 78 0a 7d 20 2d 63 6c  .    set x.} -cl
9d30: 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74  eanup {.    dest
9d40: 72 6f 79 20 2e 74 2e 66 0a 20 20 20 20 65 76 65  roy .t.f.    eve
9d50: 6e 74 20 64 65 6c 65 74 65 20 3c 3c 50 61 73 74  nt delete <<Past
9d60: 65 3e 3e 20 3c 42 75 74 74 6f 6e 2d 31 3e 0a 7d  e>> <Button-1>.}
9d70: 20 2d 72 65 73 75 6c 74 20 7b 70 61 73 74 65 7d   -result {paste}
9d80: 0a 74 65 73 74 20 62 69 6e 64 2d 31 35 2e 32 35  .test bind-15.25
9d90: 20 7b 4d 61 74 63 68 50 61 74 74 65 72 6e 73 20   {MatchPatterns 
9da0: 70 72 6f 63 65 64 75 72 65 2c 20 72 65 6a 65 63  procedure, rejec
9db0: 74 20 61 20 20 76 69 72 74 75 61 6c 20 65 76 65  t a  virtual eve
9dc0: 6e 74 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20  nt} -setup {.   
9dd0: 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61   frame .t.f -cla
9de0: 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
9df0: 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20  50 -height 100. 
9e00: 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20     pack .t.f.   
9e10: 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74   focus -force .t
9e20: 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20  .f.    update.  
9e30: 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f    set x {}.} -bo
9e40: 64 79 20 7b 0a 20 20 20 20 65 76 65 6e 74 20 61  dy {.    event a
9e50: 64 64 20 3c 3c 50 61 73 74 65 3e 3e 20 3c 53 68  dd <<Paste>> <Sh
9e60: 69 66 74 2d 42 75 74 74 6f 6e 2d 31 3e 0a 20 20  ift-Button-1>.  
9e70: 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 3c 50 61    bind .t.f <<Pa
9e80: 73 74 65 3e 3e 20 7b 6c 61 70 70 65 6e 64 20 78  ste>> {lappend x
9e90: 20 70 61 73 74 65 7d 0a 20 20 20 20 65 76 65 6e   paste}.    even
9ea0: 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
9eb0: 3c 42 75 74 74 6f 6e 2d 31 3e 0a 20 20 20 20 65  <Button-1>.    e
9ec0: 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
9ed0: 2e 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73  .f <ButtonReleas
9ee0: 65 2d 31 3e 0a 20 20 20 20 73 65 74 20 78 0a 7d  e-1>.    set x.}
9ef0: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
9f00: 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 20 20 20  destroy .t.f.   
9f10: 20 65 76 65 6e 74 20 64 65 6c 65 74 65 20 3c 3c   event delete <<
9f20: 50 61 73 74 65 3e 3e 20 3c 53 68 69 66 74 2d 42  Paste>> <Shift-B
9f30: 75 74 74 6f 6e 2d 31 3e 0a 7d 20 2d 72 65 73 75  utton-1>.} -resu
9f40: 6c 74 20 7b 7d 0a 74 65 73 74 20 62 69 6e 64 2d  lt {}.test bind-
9f50: 31 35 2e 32 36 20 7b 4d 61 74 63 68 50 61 74 74  15.26 {MatchPatt
9f60: 65 72 6e 73 20 70 72 6f 63 65 64 75 72 65 2c 20  erns procedure, 
9f70: 72 65 6a 65 63 74 20 61 20 76 69 72 74 75 61 6c  reject a virtual
9f80: 20 65 76 65 6e 74 7d 20 2d 73 65 74 75 70 20 7b   event} -setup {
9f90: 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
9fa0: 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
9fb0: 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
9fc0: 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
9fd0: 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
9fe0: 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
9ff0: 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d  e.    set x {}.}
a000: 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 65 76 65   -body {.    eve
a010: 6e 74 20 61 64 64 20 3c 3c 56 31 3e 3e 20 3c 42  nt add <<V1>> <B
a020: 75 74 74 6f 6e 3e 0a 20 20 20 20 65 76 65 6e 74  utton>.    event
a030: 20 61 64 64 20 3c 3c 56 32 3e 3e 20 3c 42 75 74   add <<V2>> <But
a040: 74 6f 6e 2d 31 3e 0a 20 20 20 20 65 76 65 6e 74  ton-1>.    event
a050: 20 61 64 64 20 3c 3c 56 33 3e 3e 20 3c 53 68 69   add <<V3>> <Shi
a060: 66 74 2d 42 75 74 74 6f 6e 2d 31 3e 0a 20 20 20  ft-Button-1>.   
a070: 20 62 69 6e 64 20 2e 74 2e 66 20 3c 3c 56 32 3e   bind .t.f <<V2>
a080: 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 56 32 25  > "lappend x V2%
a090: 23 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e  #".    event gen
a0a0: 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74  erate .t.f <Butt
a0b0: 6f 6e 3e 20 2d 73 65 72 69 61 6c 20 31 30 31 0a  on> -serial 101.
a0c0: 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
a0d0: 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d  te .t.f <Button-
a0e0: 31 3e 20 2d 73 65 72 69 61 6c 20 31 30 32 0a 20  1> -serial 102. 
a0f0: 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
a100: 65 20 2e 74 2e 66 20 3c 53 68 69 66 74 2d 42 75  e .t.f <Shift-Bu
a110: 74 74 6f 6e 2d 31 3e 20 2d 73 65 72 69 61 6c 20  tton-1> -serial 
a120: 31 30 33 0a 20 20 20 20 65 76 65 6e 74 20 67 65  103.    event ge
a130: 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74  nerate .t.f <But
a140: 74 6f 6e 52 65 6c 65 61 73 65 2d 31 3e 0a 20 20  tonRelease-1>.  
a150: 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 53 68 69    bind .t.f <Shi
a160: 66 74 2d 42 75 74 74 6f 6e 2d 31 3e 20 22 6c 61  ft-Button-1> "la
a170: 70 70 65 6e 64 20 78 20 53 68 69 66 74 2d 42 75  ppend x Shift-Bu
a180: 74 74 6f 6e 2d 31 22 0a 20 20 20 20 65 76 65 6e  tton-1".    even
a190: 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
a1a0: 3c 42 75 74 74 6f 6e 3e 20 2d 73 65 72 69 61 6c  <Button> -serial
a1b0: 20 31 30 34 0a 20 20 20 20 65 76 65 6e 74 20 67   104.    event g
a1c0: 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75  enerate .t.f <Bu
a1d0: 74 74 6f 6e 2d 31 3e 20 2d 73 65 72 69 61 6c 20  tton-1> -serial 
a1e0: 31 30 35 0a 20 20 20 20 65 76 65 6e 74 20 67 65  105.    event ge
a1f0: 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 53 68 69  nerate .t.f <Shi
a200: 66 74 2d 42 75 74 74 6f 6e 2d 31 3e 20 2d 73 65  ft-Button-1> -se
a210: 72 69 61 6c 20 31 30 36 0a 20 20 20 20 65 76 65  rial 106.    eve
a220: 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
a230: 20 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 2d   <ButtonRelease-
a240: 31 3e 0a 20 20 20 20 73 65 74 20 78 0a 7d 20 2d  1>.    set x.} -
a250: 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
a260: 73 74 72 6f 79 20 2e 74 2e 66 0a 20 20 20 20 65  stroy .t.f.    e
a270: 76 65 6e 74 20 64 65 6c 65 74 65 20 3c 3c 56 31  vent delete <<V1
a280: 3e 3e 20 3c 42 75 74 74 6f 6e 3e 0a 20 20 20 20  >> <Button>.    
a290: 65 76 65 6e 74 20 64 65 6c 65 74 65 20 3c 3c 56  event delete <<V
a2a0: 32 3e 3e 20 3c 42 75 74 74 6f 6e 2d 31 3e 0a 20  2>> <Button-1>. 
a2b0: 20 20 20 65 76 65 6e 74 20 64 65 6c 65 74 65 20     event delete 
a2c0: 3c 3c 56 33 3e 3e 20 3c 53 68 69 66 74 2d 42 75  <<V3>> <Shift-Bu
a2d0: 74 74 6f 6e 2d 31 3e 0a 7d 20 2d 72 65 73 75 6c  tton-1>.} -resul
a2e0: 74 20 7b 56 32 31 30 32 20 56 32 31 30 33 20 56  t {V2102 V2103 V
a2f0: 32 31 30 35 20 53 68 69 66 74 2d 42 75 74 74 6f  2105 Shift-Butto
a300: 6e 2d 31 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31  n-1}.test bind-1
a310: 35 2e 32 37 20 7b 4d 61 74 63 68 50 61 74 74 65  5.27 {MatchPatte
a320: 72 6e 73 20 70 72 6f 63 65 64 75 72 65 2c 20 63  rns procedure, c
a330: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
a340: 6f 6e 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20  on} -setup {.   
a350: 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61   frame .t.f -cla
a360: 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
a370: 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20  50 -height 100. 
a380: 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20     pack .t.f.   
a390: 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74   focus -force .t
a3a0: 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 7d 20  .f.    update.} 
a3b0: 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64  -body {.    bind
a3c0: 20 2e 74 2e 66 20 3c 4b 65 79 50 72 65 73 73 3e   .t.f <KeyPress>
a3d0: 20 7b 73 65 74 20 78 20 30 7d 0a 20 20 20 20 62   {set x 0}.    b
a3e0: 69 6e 64 20 2e 74 2e 66 20 31 20 7b 73 65 74 20  ind .t.f 1 {set 
a3f0: 78 20 31 7d 0a 20 20 20 20 73 65 74 20 78 20 6e  x 1}.    set x n
a400: 6f 6e 65 0a 20 20 20 20 65 76 65 6e 74 20 67 65  one.    event ge
a410: 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 4b 65 79  nerate .t.f <Key
a420: 2d 31 3e 0a 20 20 20 20 72 65 74 75 72 6e 20 24  -1>.    return $
a430: 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  x.} -cleanup {. 
a440: 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
a450: 7d 20 2d 72 65 73 75 6c 74 20 7b 31 7d 0a 74 65  } -result {1}.te
a460: 73 74 20 62 69 6e 64 2d 31 35 2e 32 38 20 7b 4d  st bind-15.28 {M
a470: 61 74 63 68 50 61 74 74 65 72 6e 73 20 70 72 6f  atchPatterns pro
a480: 63 65 64 75 72 65 2c 20 63 6f 6e 66 6c 69 63 74  cedure, conflict
a490: 20 72 65 73 6f 6c 75 74 69 6f 6e 7d 20 2d 73 65   resolution} -se
a4a0: 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20  tup {.    frame 
a4b0: 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74  .t.f -class Test
a4c0: 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69   -width 150 -hei
a4d0: 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b  ght 100.    pack
a4e0: 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20   .t.f.    focus 
a4f0: 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20  -force .t.f.    
a500: 75 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20 7b  update.} -body {
a510: 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c  .    bind .t.f <
a520: 4b 65 79 50 72 65 73 73 3e 20 7b 73 65 74 20 78  KeyPress> {set x
a530: 20 30 7d 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e   0}.    bind .t.
a540: 66 20 31 20 7b 73 65 74 20 78 20 31 7d 0a 20 20  f 1 {set x 1}.  
a550: 20 20 73 65 74 20 78 20 6e 6f 6e 65 0a 20 20 20    set x none.   
a560: 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
a570: 2e 74 2e 66 20 3c 4b 65 79 2d 32 3e 0a 20 20 20  .t.f <Key-2>.   
a580: 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d 63 6c   return $x.} -cl
a590: 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74  eanup {.    dest
a5a0: 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75  roy .t.f.} -resu
a5b0: 6c 74 20 7b 30 7d 0a 74 65 73 74 20 62 69 6e 64  lt {0}.test bind
a5c0: 2d 31 35 2e 32 39 20 7b 4d 61 74 63 68 50 61 74  -15.29 {MatchPat
a5d0: 74 65 72 6e 73 20 70 72 6f 63 65 64 75 72 65 2c  terns procedure,
a5e0: 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
a5f0: 74 69 6f 6e 7d 20 2d 73 65 74 75 70 20 7b 0a 20  tion} -setup {. 
a600: 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63     frame .t.f -c
a610: 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
a620: 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
a630: 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20  .    pack .t.f. 
a640: 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20     focus -force 
a650: 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a  .t.f.    update.
a660: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
a670: 6e 64 20 2e 74 2e 66 20 3c 4b 65 79 50 72 65 73  nd .t.f <KeyPres
a680: 73 3e 20 7b 6c 61 70 70 65 6e 64 20 78 20 30 7d  s> {lappend x 0}
a690: 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 31  .    bind .t.f 1
a6a0: 20 7b 6c 61 70 70 65 6e 64 20 78 20 31 7d 0a 20   {lappend x 1}. 
a6b0: 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 32 31 20     bind .t.f 21 
a6c0: 7b 6c 61 70 70 65 6e 64 20 78 20 32 7d 0a 20 20  {lappend x 2}.  
a6d0: 20 20 73 65 74 20 78 20 6e 6f 6e 65 0a 20 20 20    set x none.   
a6e0: 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
a6f0: 2e 74 2e 66 20 3c 4b 65 79 2d 32 3e 0a 20 20 20  .t.f <Key-2>.   
a700: 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
a710: 2e 74 2e 66 20 3c 4b 65 79 52 65 6c 65 61 73 65  .t.f <KeyRelease
a720: 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65  -2>.    event ge
a730: 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 4b 65 79  nerate .t.f <Key
a740: 2d 31 3e 0a 20 20 20 20 73 65 74 20 78 0a 7d 20  -1>.    set x.} 
a750: 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64  -cleanup {.    d
a760: 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72  estroy .t.f.} -r
a770: 65 73 75 6c 74 20 7b 6e 6f 6e 65 20 30 20 32 7d  esult {none 0 2}
a780: 0a 74 65 73 74 20 62 69 6e 64 2d 31 35 2e 33 30  .test bind-15.30
a790: 20 7b 4d 61 74 63 68 50 61 74 74 65 72 6e 73 20   {MatchPatterns 
a7a0: 70 72 6f 63 65 64 75 72 65 2c 20 63 6f 6e 66 6c  procedure, confl
a7b0: 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 7d 20  ict resolution} 
a7c0: 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61  -setup {.    fra
a7d0: 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54  me .t.f -class T
a7e0: 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d  est -width 150 -
a7f0: 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70  height 100.    p
a800: 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63  ack .t.f.    foc
a810: 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20  us -force .t.f. 
a820: 20 20 20 75 70 64 61 74 65 0a 7d 20 2d 62 6f 64     update.} -bod
a830: 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  y {.    bind .t.
a840: 66 20 3c 42 75 74 74 6f 6e 50 72 65 73 73 3e 20  f <ButtonPress> 
a850: 7b 73 65 74 20 78 20 30 7d 0a 20 20 20 20 62 69  {set x 0}.    bi
a860: 6e 64 20 2e 74 2e 66 20 3c 31 3e 20 7b 73 65 74  nd .t.f <1> {set
a870: 20 78 20 31 7d 0a 20 20 20 20 73 65 74 20 78 20   x 1}.    set x 
a880: 6e 6f 6e 65 0a 20 20 20 20 65 76 65 6e 74 20 67  none.    event g
a890: 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75  enerate .t.f <Bu
a8a0: 74 74 6f 6e 2d 31 3e 0a 20 20 20 20 65 76 65 6e  tton-1>.    even
a8b0: 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
a8c0: 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 2d 31  <ButtonRelease-1
a8d0: 3e 0a 20 20 20 20 72 65 74 75 72 6e 20 24 78 0a  >.    return $x.
a8e0: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20  } -cleanup {.   
a8f0: 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20   destroy .t.f.} 
a900: 2d 72 65 73 75 6c 74 20 7b 31 7d 0a 74 65 73 74  -result {1}.test
a910: 20 62 69 6e 64 2d 31 35 2e 33 31 20 7b 4d 61 74   bind-15.31 {Mat
a920: 63 68 50 61 74 74 65 72 6e 73 20 70 72 6f 63 65  chPatterns proce
a930: 64 75 72 65 2c 20 63 6f 6e 66 6c 69 63 74 20 72  dure, conflict r
a940: 65 73 6f 6c 75 74 69 6f 6e 7d 20 2d 73 65 74 75  esolution} -setu
a950: 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74  p {.    frame .t
a960: 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d  .f -class Test -
a970: 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68  width 150 -heigh
a980: 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e  t 100.    pack .
a990: 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66  t.f.    focus -f
a9a0: 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70  orce .t.f.    up
a9b0: 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b  date.    set x {
a9c0: 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  }.} -body {.    
a9d0: 62 69 6e 64 20 2e 74 2e 66 20 3c 4d 31 2d 4b 65  bind .t.f <M1-Ke
a9e0: 79 3e 20 7b 73 65 74 20 78 20 30 7d 0a 20 20 20  y> {set x 0}.   
a9f0: 20 62 69 6e 64 20 2e 74 2e 66 20 3c 4d 32 2d 4b   bind .t.f <M2-K
aa00: 65 79 3e 20 7b 73 65 74 20 78 20 31 7d 0a 20 20  ey> {set x 1}.  
aa10: 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
aa20: 20 2e 74 2e 66 20 3c 4b 65 79 2d 61 3e 20 2d 73   .t.f <Key-a> -s
aa30: 74 61 74 65 20 30 78 31 38 0a 20 20 20 20 72 65  tate 0x18.    re
aa40: 74 75 72 6e 20 24 78 0a 7d 20 2d 63 6c 65 61 6e  turn $x.} -clean
aa50: 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79  up {.    destroy
aa60: 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20   .t.f.} -result 
aa70: 7b 31 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31 35  {1}.test bind-15
aa80: 2e 33 32 20 7b 4d 61 74 63 68 50 61 74 74 65 72  .32 {MatchPatter
aa90: 6e 73 20 70 72 6f 63 65 64 75 72 65 2c 20 63 6f  ns procedure, co
aaa0: 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
aab0: 6e 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20  n} -setup {.    
aac0: 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73  frame .t.f -clas
aad0: 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35  s Test -width 15
aae0: 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20  0 -height 100.  
aaf0: 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20    pack .t.f.    
ab00: 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e  focus -force .t.
ab10: 66 0a 20 20 20 20 75 70 64 61 74 65 0a 7d 20 2d  f.    update.} -
ab20: 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20  body {.    bind 
ab30: 2e 74 2e 66 20 3c 4d 32 2d 4b 65 79 3e 20 7b 73  .t.f <M2-Key> {s
ab40: 65 74 20 78 20 30 7d 0a 20 20 20 20 62 69 6e 64  et x 0}.    bind
ab50: 20 2e 74 2e 66 20 3c 4d 31 2d 4b 65 79 3e 20 7b   .t.f <M1-Key> {
ab60: 73 65 74 20 78 20 31 7d 0a 20 20 20 20 73 65 74  set x 1}.    set
ab70: 20 78 20 6e 6f 6e 65 0a 20 20 20 20 65 76 65 6e   x none.    even
ab80: 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
ab90: 3c 4b 65 79 2d 61 3e 20 2d 73 74 61 74 65 20 30  <Key-a> -state 0
aba0: 78 31 38 0a 20 20 20 20 72 65 74 75 72 6e 20 24  x18.    return $
abb0: 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  x.} -cleanup {. 
abc0: 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
abd0: 7d 20 2d 72 65 73 75 6c 74 20 7b 31 7d 0a 74 65  } -result {1}.te
abe0: 73 74 20 62 69 6e 64 2d 31 35 2e 33 33 20 7b 4d  st bind-15.33 {M
abf0: 61 74 63 68 50 61 74 74 65 72 6e 73 20 70 72 6f  atchPatterns pro
ac00: 63 65 64 75 72 65 2c 20 63 6f 6e 66 6c 69 63 74  cedure, conflict
ac10: 20 72 65 73 6f 6c 75 74 69 6f 6e 7d 20 2d 73 65   resolution} -se
ac20: 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20  tup {.    frame 
ac30: 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74  .t.f -class Test
ac40: 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69   -width 150 -hei
ac50: 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b  ght 100.    pack
ac60: 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20   .t.f.    focus 
ac70: 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20  -force .t.f.    
ac80: 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78  update.    set x
ac90: 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20   {}.} -body {.  
aca0: 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 31 3e 20    bind .t.f <1> 
acb0: 7b 6c 61 70 70 65 6e 64 20 78 20 73 69 6e 67 6c  {lappend x singl
acc0: 65 7d 0a 20 20 20 20 62 69 6e 64 20 54 65 73 74  e}.    bind Test
acd0: 20 3c 31 3e 20 7b 6c 61 70 70 65 6e 64 20 78 20   <1> {lappend x 
ace0: 73 69 6e 67 6c 65 28 54 65 73 74 29 7d 0a 20 20  single(Test)}.  
acf0: 20 20 62 69 6e 64 20 54 65 73 74 20 3c 44 6f 75    bind Test <Dou
ad00: 62 6c 65 2d 31 3e 20 7b 6c 61 70 70 65 6e 64 20  ble-1> {lappend 
ad10: 78 20 64 6f 75 62 6c 65 28 54 65 73 74 29 7d 0a  x double(Test)}.
ad20: 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
ad30: 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d  te .t.f <Button-
ad40: 31 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e  1>.    event gen
ad50: 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74  erate .t.f <Butt
ad60: 6f 6e 2d 31 3e 0a 20 20 20 20 65 76 65 6e 74 20  on-1>.    event 
ad70: 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42  generate .t.f <B
ad80: 75 74 74 6f 6e 2d 31 3e 0a 20 20 20 20 65 76 65  utton-1>.    eve
ad90: 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
ada0: 20 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 2d   <ButtonRelease-
adb0: 31 3e 0a 20 20 20 20 73 65 74 20 78 0a 7d 20 2d  1>.    set x.} -
adc0: 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
add0: 73 74 72 6f 79 20 2e 74 2e 66 0a 20 20 20 20 62  stroy .t.f.    b
ade0: 69 6e 64 20 54 65 73 74 20 3c 31 3e 20 7b 7d 0a  ind Test <1> {}.
adf0: 20 20 20 20 62 69 6e 64 20 54 65 73 74 20 3c 44      bind Test <D
ae00: 6f 75 62 6c 65 2d 31 3e 20 7b 7d 0a 7d 20 2d 72  ouble-1> {}.} -r
ae10: 65 73 75 6c 74 20 7b 73 69 6e 67 6c 65 20 73 69  esult {single si
ae20: 6e 67 6c 65 28 54 65 73 74 29 20 73 69 6e 67 6c  ngle(Test) singl
ae30: 65 20 64 6f 75 62 6c 65 28 54 65 73 74 29 20 73  e double(Test) s
ae40: 69 6e 67 6c 65 20 64 6f 75 62 6c 65 28 54 65 73  ingle double(Tes
ae50: 74 29 7d 0a 0a 0a 74 65 73 74 20 62 69 6e 64 2d  t)}...test bind-
ae60: 31 36 2e 31 20 7b 45 78 70 61 6e 64 50 65 72 63  16.1 {ExpandPerc
ae70: 65 6e 74 73 20 70 72 6f 63 65 64 75 72 65 7d 20  ents procedure} 
ae80: 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61  -setup {.    fra
ae90: 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54  me .t.f -class T
aea0: 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d  est -width 150 -
aeb0: 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70  height 100.    p
aec0: 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63  ack .t.f.    foc
aed0: 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20  us -force .t.f. 
aee0: 20 20 20 75 70 64 61 74 65 0a 7d 20 2d 62 6f 64     update.} -bod
aef0: 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  y {.    bind .t.
af00: 66 20 3c 45 6e 74 65 72 3e 20 7b 73 65 74 20 78  f <Enter> {set x
af10: 20 61 62 63 64 7d 0a 20 20 20 20 73 65 74 20 78   abcd}.    set x
af20: 20 6e 6f 6e 65 0a 20 20 20 20 65 76 65 6e 74 20   none.    event 
af30: 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 45  generate .t.f <E
af40: 6e 74 65 72 3e 0a 20 20 20 20 73 65 74 20 78 0a  nter>.    set x.
af50: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20  } -cleanup {.   
af60: 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20   destroy .t.f.} 
af70: 2d 72 65 73 75 6c 74 20 7b 61 62 63 64 7d 0a 74  -result {abcd}.t
af80: 65 73 74 20 62 69 6e 64 2d 31 36 2e 32 20 7b 45  est bind-16.2 {E
af90: 78 70 61 6e 64 50 65 72 63 65 6e 74 73 20 70 72  xpandPercents pr
afa0: 6f 63 65 64 75 72 65 7d 20 2d 73 65 74 75 70 20  ocedure} -setup 
afb0: 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66  {.    frame .t.f
afc0: 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69   -class Test -wi
afd0: 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20  dth 150 -height 
afe0: 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e  100.    pack .t.
aff0: 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72  f.    focus -for
b000: 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61  ce .t.f.    upda
b010: 74 65 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20  te.} -body {.   
b020: 20 62 69 6e 64 20 2e 74 2e 66 20 3c 45 6e 74 65   bind .t.f <Ente
b030: 72 3e 20 7b 73 65 74 20 78 20 25 23 7d 0a 20 20  r> {set x %#}.  
b040: 20 20 73 65 74 20 78 20 6e 6f 6e 65 0a 20 20 20    set x none.   
b050: 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
b060: 2e 74 2e 66 20 3c 45 6e 74 65 72 3e 20 2d 73 65  .t.f <Enter> -se
b070: 72 69 61 6c 20 31 32 33 34 0a 20 20 20 20 73 65  rial 1234.    se
b080: 74 20 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  t x.} -cleanup {
b090: 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e  .    destroy .t.
b0a0: 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 31 32 33  f.} -result {123
b0b0: 34 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31 36 2e  4}.test bind-16.
b0c0: 33 20 7b 45 78 70 61 6e 64 50 65 72 63 65 6e 74  3 {ExpandPercent
b0d0: 73 20 70 72 6f 63 65 64 75 72 65 7d 20 2d 73 65  s procedure} -se
b0e0: 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20  tup {.    frame 
b0f0: 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74  .t.f -class Test
b100: 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69   -width 150 -hei
b110: 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b  ght 100.    pack
b120: 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20   .t.f.    focus 
b130: 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20  -force .t.f.    
b140: 75 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20 7b  update.} -body {
b150: 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c  .    bind .t.f <
b160: 43 6f 6e 66 69 67 75 72 65 3e 20 7b 73 65 74 20  Configure> {set 
b170: 78 20 25 61 7d 0a 20 20 20 20 73 65 74 20 78 20  x %a}.    set x 
b180: 6e 6f 6e 65 0a 20 20 20 20 65 76 65 6e 74 20 67  none.    event g
b190: 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 43 6f  enerate .t.f <Co
b1a0: 6e 66 69 67 75 72 65 3e 20 2d 61 62 6f 76 65 20  nfigure> -above 
b1b0: 2e 74 20 2d 77 69 6e 64 6f 77 20 2e 74 2e 66 0a  .t -window .t.f.
b1c0: 20 20 20 20 73 65 74 20 78 0a 7d 20 2d 63 6c 65      set x.} -cle
b1d0: 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72  anup {.    destr
b1e0: 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c  oy .t.f.} -resul
b1f0: 74 20 5b 77 69 6e 66 6f 20 69 64 20 2e 74 5d 0a  t [winfo id .t].
b200: 74 65 73 74 20 62 69 6e 64 2d 31 36 2e 34 20 7b  test bind-16.4 {
b210: 45 78 70 61 6e 64 50 65 72 63 65 6e 74 73 20 70  ExpandPercents p
b220: 72 6f 63 65 64 75 72 65 7d 20 2d 73 65 74 75 70  rocedure} -setup
b230: 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e   {.    frame .t.
b240: 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77  f -class Test -w
b250: 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74  idth 150 -height
b260: 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74   100.    pack .t
b270: 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f  .f.    focus -fo
b280: 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64  rce .t.f.    upd
b290: 61 74 65 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20  ate.} -body {.  
b2a0: 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 42 75 74    bind .t.f <But
b2b0: 74 6f 6e 3e 20 7b 73 65 74 20 78 20 25 62 7d 0a  ton> {set x %b}.
b2c0: 20 20 20 20 73 65 74 20 78 20 6e 6f 6e 65 0a 20      set x none. 
b2d0: 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
b2e0: 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 33  e .t.f <Button-3
b2f0: 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  >.    event gene
b300: 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f  rate .t.f <Butto
b310: 6e 52 65 6c 65 61 73 65 2d 33 3e 0a 20 20 20 20  nRelease-3>.    
b320: 73 65 74 20 78 0a 7d 20 2d 63 6c 65 61 6e 75 70  set x.} -cleanup
b330: 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
b340: 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 33  t.f.} -result {3
b350: 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31 36 2e 35  }.test bind-16.5
b360: 20 7b 45 78 70 61 6e 64 50 65 72 63 65 6e 74 73   {ExpandPercents
b370: 20 70 72 6f 63 65 64 75 72 65 7d 20 2d 73 65 74   procedure} -set
b380: 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e  up {.    frame .
b390: 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20  t.f -class Test 
b3a0: 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67  -width 150 -heig
b3b0: 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20  ht 100.    pack 
b3c0: 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d  .t.f.    focus -
b3d0: 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75  force .t.f.    u
b3e0: 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20 7b 0a  pdate.} -body {.
b3f0: 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 45      bind .t.f <E
b400: 78 70 6f 73 65 3e 20 7b 73 65 74 20 78 20 25 63  xpose> {set x %c
b410: 7d 0a 20 20 20 20 73 65 74 20 78 20 6e 6f 6e 65  }.    set x none
b420: 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
b430: 61 74 65 20 2e 74 2e 66 20 3c 45 78 70 6f 73 65  ate .t.f <Expose
b440: 3e 20 2d 63 6f 75 6e 74 20 34 37 0a 20 20 20 20  > -count 47.    
b450: 73 65 74 20 78 0a 7d 20 2d 63 6c 65 61 6e 75 70  set x.} -cleanup
b460: 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
b470: 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 34  t.f.} -result {4
b480: 37 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31 36 2e  7}.test bind-16.
b490: 36 20 7b 45 78 70 61 6e 64 50 65 72 63 65 6e 74  6 {ExpandPercent
b4a0: 73 20 70 72 6f 63 65 64 75 72 65 7d 20 2d 73 65  s procedure} -se
b4b0: 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20  tup {.    frame 
b4c0: 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74  .t.f -class Test
b4d0: 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69   -width 150 -hei
b4e0: 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b  ght 100.    pack
b4f0: 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20   .t.f.    focus 
b500: 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20  -force .t.f.    
b510: 75 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20 7b  update.} -body {
b520: 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c  .    bind .t.f <
b530: 45 6e 74 65 72 3e 20 7b 73 65 74 20 78 20 25 64  Enter> {set x %d
b540: 7d 0a 20 20 20 20 73 65 74 20 78 20 6e 6f 6e 65  }.    set x none
b550: 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
b560: 61 74 65 20 2e 74 2e 66 20 3c 45 6e 74 65 72 3e  ate .t.f <Enter>
b570: 20 2d 64 65 74 61 69 6c 20 4e 6f 74 69 66 79 41   -detail NotifyA
b580: 6e 63 65 73 74 6f 72 0a 20 20 20 20 73 65 74 20  ncestor.    set 
b590: 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  x.} -cleanup {. 
b5a0: 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
b5b0: 7d 20 2d 72 65 73 75 6c 74 20 7b 4e 6f 74 69 66  } -result {Notif
b5c0: 79 41 6e 63 65 73 74 6f 72 7d 0a 74 65 73 74 20  yAncestor}.test 
b5d0: 62 69 6e 64 2d 31 36 2e 37 20 7b 45 78 70 61 6e  bind-16.7 {Expan
b5e0: 64 50 65 72 63 65 6e 74 73 20 70 72 6f 63 65 64  dPercents proced
b5f0: 75 72 65 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20  ure} -setup {.  
b600: 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c    frame .t.f -cl
b610: 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20  ass Test -width 
b620: 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a  150 -height 100.
b630: 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20      pack .t.f.  
b640: 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e    focus -force .
b650: 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 7d  t.f.    update.}
b660: 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
b670: 64 20 2e 74 2e 66 20 3c 45 6e 74 65 72 3e 20 7b  d .t.f <Enter> {
b680: 73 65 74 20 78 20 25 64 7d 0a 20 20 20 20 73 65  set x %d}.    se
b690: 74 20 78 20 6e 6f 6e 65 0a 20 20 20 20 65 76 65  t x none.    eve
b6a0: 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
b6b0: 20 3c 45 6e 74 65 72 3e 20 2d 64 65 74 61 69 6c   <Enter> -detail
b6c0: 20 4e 6f 74 69 66 79 56 69 72 74 75 61 6c 0a 20   NotifyVirtual. 
b6d0: 20 20 20 73 65 74 20 78 0a 7d 20 2d 63 6c 65 61     set x.} -clea
b6e0: 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f  nup {.    destro
b6f0: 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74  y .t.f.} -result
b700: 20 7b 4e 6f 74 69 66 79 56 69 72 74 75 61 6c 7d   {NotifyVirtual}
b710: 0a 74 65 73 74 20 62 69 6e 64 2d 31 36 2e 38 20  .test bind-16.8 
b720: 7b 45 78 70 61 6e 64 50 65 72 63 65 6e 74 73 20  {ExpandPercents 
b730: 70 72 6f 63 65 64 75 72 65 7d 20 2d 73 65 74 75  procedure} -setu
b740: 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74  p {.    frame .t
b750: 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d  .f -class Test -
b760: 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68  width 150 -heigh
b770: 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e  t 100.    pack .
b780: 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66  t.f.    focus -f
b790: 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70  orce .t.f.    up
b7a0: 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20  date.} -body {. 
b7b0: 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 45 6e     bind .t.f <En
b7c0: 74 65 72 3e 20 7b 73 65 74 20 78 20 25 64 7d 0a  ter> {set x %d}.
b7d0: 20 20 20 20 73 65 74 20 78 20 6e 6f 6e 65 0a 20      set x none. 
b7e0: 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
b7f0: 65 20 2e 74 2e 66 20 3c 45 6e 74 65 72 3e 20 2d  e .t.f <Enter> -
b800: 64 65 74 61 69 6c 20 4e 6f 74 69 66 79 4e 6f 6e  detail NotifyNon
b810: 6c 69 6e 65 61 72 0a 20 20 20 20 73 65 74 20 78  linear.    set x
b820: 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
b830: 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d    destroy .t.f.}
b840: 20 2d 72 65 73 75 6c 74 20 7b 4e 6f 74 69 66 79   -result {Notify
b850: 4e 6f 6e 6c 69 6e 65 61 72 7d 0a 74 65 73 74 20  Nonlinear}.test 
b860: 62 69 6e 64 2d 31 36 2e 39 20 7b 45 78 70 61 6e  bind-16.9 {Expan
b870: 64 50 65 72 63 65 6e 74 73 20 70 72 6f 63 65 64  dPercents proced
b880: 75 72 65 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20  ure} -setup {.  
b890: 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c    frame .t.f -cl
b8a0: 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20  ass Test -width 
b8b0: 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a  150 -height 100.
b8c0: 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20      pack .t.f.  
b8d0: 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e    focus -force .
b8e0: 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 7d  t.f.    update.}
b8f0: 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
b900: 64 20 2e 74 2e 66 20 3c 45 6e 74 65 72 3e 20 7b  d .t.f <Enter> {
b910: 73 65 74 20 78 20 25 64 7d 0a 20 20 20 20 73 65  set x %d}.    se
b920: 74 20 78 20 6e 6f 6e 65 0a 20 20 20 20 65 76 65  t x none.    eve
b930: 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
b940: 20 3c 45 6e 74 65 72 3e 20 2d 64 65 74 61 69 6c   <Enter> -detail
b950: 20 4e 6f 74 69 66 79 4e 6f 6e 6c 69 6e 65 61 72   NotifyNonlinear
b960: 56 69 72 74 75 61 6c 0a 20 20 20 20 73 65 74 20  Virtual.    set 
b970: 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  x.} -cleanup {. 
b980: 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
b990: 7d 20 2d 72 65 73 75 6c 74 20 7b 4e 6f 74 69 66  } -result {Notif
b9a0: 79 4e 6f 6e 6c 69 6e 65 61 72 56 69 72 74 75 61  yNonlinearVirtua
b9b0: 6c 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31 36 2e  l}.test bind-16.
b9c0: 31 30 20 7b 45 78 70 61 6e 64 50 65 72 63 65 6e  10 {ExpandPercen
b9d0: 74 73 20 70 72 6f 63 65 64 75 72 65 7d 20 2d 73  ts procedure} -s
b9e0: 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65  etup {.    frame
b9f0: 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73   .t.f -class Tes
ba00: 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65  t -width 150 -he
ba10: 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63  ight 100.    pac
ba20: 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73  k .t.f.    focus
ba30: 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20   -force .t.f.   
ba40: 20 75 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20   update.} -body 
ba50: 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20  {.    bind .t.f 
ba60: 3c 45 6e 74 65 72 3e 20 7b 73 65 74 20 78 20 25  <Enter> {set x %
ba70: 64 7d 0a 20 20 20 20 73 65 74 20 78 20 6e 6f 6e  d}.    set x non
ba80: 65 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  e.    event gene
ba90: 72 61 74 65 20 2e 74 2e 66 20 3c 45 6e 74 65 72  rate .t.f <Enter
baa0: 3e 20 2d 64 65 74 61 69 6c 20 4e 6f 74 69 66 79  > -detail Notify
bab0: 50 6f 69 6e 74 65 72 0a 20 20 20 20 73 65 74 20  Pointer.    set 
bac0: 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  x.} -cleanup {. 
bad0: 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
bae0: 7d 20 2d 72 65 73 75 6c 74 20 7b 4e 6f 74 69 66  } -result {Notif
baf0: 79 50 6f 69 6e 74 65 72 7d 0a 74 65 73 74 20 62  yPointer}.test b
bb00: 69 6e 64 2d 31 36 2e 31 31 20 7b 45 78 70 61 6e  ind-16.11 {Expan
bb10: 64 50 65 72 63 65 6e 74 73 20 70 72 6f 63 65 64  dPercents proced
bb20: 75 72 65 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20  ure} -setup {.  
bb30: 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c    frame .t.f -cl
bb40: 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20  ass Test -width 
bb50: 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a  150 -height 100.
bb60: 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20      pack .t.f.  
bb70: 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e    focus -force .
bb80: 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 7d  t.f.    update.}
bb90: 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
bba0: 64 20 2e 74 2e 66 20 3c 45 6e 74 65 72 3e 20 7b  d .t.f <Enter> {
bbb0: 73 65 74 20 78 20 25 64 7d 0a 20 20 20 20 73 65  set x %d}.    se
bbc0: 74 20 78 20 6e 6f 6e 65 0a 20 20 20 20 65 76 65  t x none.    eve
bbd0: 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
bbe0: 20 3c 45 6e 74 65 72 3e 20 2d 64 65 74 61 69 6c   <Enter> -detail
bbf0: 20 4e 6f 74 69 66 79 50 6f 69 6e 74 65 72 52 6f   NotifyPointerRo
bc00: 6f 74 0a 20 20 20 20 73 65 74 20 78 0a 7d 20 2d  ot.    set x.} -
bc10: 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
bc20: 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
bc30: 73 75 6c 74 20 7b 4e 6f 74 69 66 79 50 6f 69 6e  sult {NotifyPoin
bc40: 74 65 72 52 6f 6f 74 7d 0a 74 65 73 74 20 62 69  terRoot}.test bi
bc50: 6e 64 2d 31 36 2e 31 32 20 7b 45 78 70 61 6e 64  nd-16.12 {Expand
bc60: 50 65 72 63 65 6e 74 73 20 70 72 6f 63 65 64 75  Percents procedu
bc70: 72 65 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20  re} -setup {.   
bc80: 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61   frame .t.f -cla
bc90: 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
bca0: 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20  50 -height 100. 
bcb0: 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20     pack .t.f.   
bcc0: 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74   focus -force .t
bcd0: 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 7d 20  .f.    update.} 
bce0: 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64  -body {.    bind
bcf0: 20 2e 74 2e 66 20 3c 45 6e 74 65 72 3e 20 7b 73   .t.f <Enter> {s
bd00: 65 74 20 78 20 25 64 7d 0a 20 20 20 20 73 65 74  et x %d}.    set
bd10: 20 78 20 6e 6f 6e 65 0a 20 20 20 20 65 76 65 6e   x none.    even
bd20: 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
bd30: 3c 45 6e 74 65 72 3e 20 2d 64 65 74 61 69 6c 20  <Enter> -detail 
bd40: 4e 6f 74 69 66 79 44 65 74 61 69 6c 4e 6f 6e 65  NotifyDetailNone
bd50: 0a 20 20 20 20 73 65 74 20 78 0a 7d 20 2d 63 6c  .    set x.} -cl
bd60: 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74  eanup {.    dest
bd70: 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75  roy .t.f.} -resu
bd80: 6c 74 20 7b 4e 6f 74 69 66 79 44 65 74 61 69 6c  lt {NotifyDetail
bd90: 4e 6f 6e 65 7d 0a 74 65 73 74 20 62 69 6e 64 2d  None}.test bind-
bda0: 31 36 2e 31 33 20 7b 45 78 70 61 6e 64 50 65 72  16.13 {ExpandPer
bdb0: 63 65 6e 74 73 20 70 72 6f 63 65 64 75 72 65 7d  cents procedure}
bdc0: 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72   -setup {.    fr
bdd0: 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20  ame .t.f -class 
bde0: 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20  Test -width 150 
bdf0: 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20  -height 100.    
be00: 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f  pack .t.f.    fo
be10: 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a  cus -force .t.f.
be20: 20 20 20 20 75 70 64 61 74 65 0a 7d 20 2d 62 6f      update.} -bo
be30: 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74  dy {.    bind .t
be40: 2e 66 20 3c 45 6e 74 65 72 3e 20 7b 73 65 74 20  .f <Enter> {set 
be50: 78 20 25 66 7d 0a 20 20 20 20 73 65 74 20 78 20  x %f}.    set x 
be60: 6e 6f 6e 65 0a 20 20 20 20 65 76 65 6e 74 20 67  none.    event g
be70: 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 45 6e  enerate .t.f <En
be80: 74 65 72 3e 20 2d 66 6f 63 75 73 20 31 0a 20 20  ter> -focus 1.  
be90: 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d 63    return $x.} -c
bea0: 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73  leanup {.    des
beb0: 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73  troy .t.f.} -res
bec0: 75 6c 74 20 7b 31 7d 0a 74 65 73 74 20 62 69 6e  ult {1}.test bin
bed0: 64 2d 31 36 2e 31 34 20 7b 45 78 70 61 6e 64 50  d-16.14 {ExpandP
bee0: 65 72 63 65 6e 74 73 20 70 72 6f 63 65 64 75 72  ercents procedur
bef0: 65 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20  e} -setup {.    
bf00: 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73  frame .t.f -clas
bf10: 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35  s Test -width 15
bf20: 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20  0 -height 100.  
bf30: 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20    pack .t.f.    
bf40: 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e  focus -force .t.
bf50: 66 0a 20 20 20 20 75 70 64 61 74 65 0a 7d 20 2d  f.    update.} -
bf60: 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20  body {.    bind 
bf70: 2e 74 2e 66 20 3c 45 78 70 6f 73 65 3e 20 7b 73  .t.f <Expose> {s
bf80: 65 74 20 78 20 22 25 78 20 25 79 20 25 77 20 25  et x "%x %y %w %
bf90: 68 22 7d 0a 20 20 20 20 73 65 74 20 78 20 6e 6f  h"}.    set x no
bfa0: 6e 65 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e  ne.    event gen
bfb0: 65 72 61 74 65 20 2e 74 2e 66 20 3c 45 78 70 6f  erate .t.f <Expo
bfc0: 73 65 3e 20 2d 78 20 32 34 20 2d 79 20 31 38 20  se> -x 24 -y 18 
bfd0: 2d 77 69 64 74 68 20 31 34 37 20 2d 68 65 69 67  -width 147 -heig
bfe0: 68 74 20 36 31 0a 20 20 20 20 73 65 74 20 78 0a  ht 61.    set x.
bff0: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20  } -cleanup {.   
c000: 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20   destroy .t.f.} 
c010: 2d 72 65 73 75 6c 74 20 7b 32 34 20 31 38 20 31  -result {24 18 1
c020: 34 37 20 36 31 7d 0a 74 65 73 74 20 62 69 6e 64  47 61}.test bind
c030: 2d 31 36 2e 31 35 20 7b 45 78 70 61 6e 64 50 65  -16.15 {ExpandPe
c040: 72 63 65 6e 74 73 20 70 72 6f 63 65 64 75 72 65  rcents procedure
c050: 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66  } -setup {.    f
c060: 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73  rame .t.f -class
c070: 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30   Test -width 150
c080: 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20   -height 100.   
c090: 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66   pack .t.f.    f
c0a0: 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66  ocus -force .t.f
c0b0: 0a 20 20 20 20 75 70 64 61 74 65 0a 7d 20 2d 62  .    update.} -b
c0c0: 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e  ody {.    bind .
c0d0: 74 2e 66 20 3c 43 6f 6e 66 69 67 75 72 65 3e 20  t.f <Configure> 
c0e0: 7b 73 65 74 20 78 20 22 25 78 20 25 79 20 25 77  {set x "%x %y %w
c0f0: 20 25 68 22 7d 0a 20 20 20 20 73 65 74 20 78 20   %h"}.    set x 
c100: 6e 6f 6e 65 0a 20 20 20 20 65 76 65 6e 74 20 67  none.    event g
c110: 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 43 6f  enerate .t.f <Co
c120: 6e 66 69 67 75 72 65 3e 20 2d 78 20 32 34 20 2d  nfigure> -x 24 -
c130: 79 20 31 38 20 2d 77 69 64 74 68 20 31 34 37 20  y 18 -width 147 
c140: 2d 68 65 69 67 68 74 20 36 31 20 2d 77 69 6e 64  -height 61 -wind
c150: 6f 77 20 2e 74 2e 66 0a 20 20 20 20 73 65 74 20  ow .t.f.    set 
c160: 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  x.} -cleanup {. 
c170: 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
c180: 7d 20 2d 72 65 73 75 6c 74 20 7b 32 34 20 31 38  } -result {24 18
c190: 20 31 34 37 20 36 31 7d 0a 74 65 73 74 20 62 69   147 61}.test bi
c1a0: 6e 64 2d 31 36 2e 31 36 20 7b 45 78 70 61 6e 64  nd-16.16 {Expand
c1b0: 50 65 72 63 65 6e 74 73 20 70 72 6f 63 65 64 75  Percents procedu
c1c0: 72 65 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20  re} -setup {.   
c1d0: 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61   frame .t.f -cla
c1e0: 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
c1f0: 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20  50 -height 100. 
c200: 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20     pack .t.f.   
c210: 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74   focus -force .t
c220: 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 7d 20  .f.    update.} 
c230: 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64  -body {.    bind
c240: 20 2e 74 2e 66 20 3c 4b 65 79 3e 20 7b 73 65 74   .t.f <Key> {set
c250: 20 78 20 22 25 6b 22 7d 0a 20 20 20 20 73 65 74   x "%k"}.    set
c260: 20 78 20 6e 6f 6e 65 0a 20 20 20 20 65 76 65 6e   x none.    even
c270: 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
c280: 3c 4b 65 79 3e 20 2d 6b 65 79 63 6f 64 65 20 31  <Key> -keycode 1
c290: 34 36 0a 20 20 20 20 73 65 74 20 78 0a 7d 20 2d  46.    set x.} -
c2a0: 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
c2b0: 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
c2c0: 73 75 6c 74 20 7b 31 34 36 7d 0a 74 65 73 74 20  sult {146}.test 
c2d0: 62 69 6e 64 2d 31 36 2e 31 37 20 7b 45 78 70 61  bind-16.17 {Expa
c2e0: 6e 64 50 65 72 63 65 6e 74 73 20 70 72 6f 63 65  ndPercents proce
c2f0: 64 75 72 65 7d 20 2d 73 65 74 75 70 20 7b 0a 20  dure} -setup {. 
c300: 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63     frame .t.f -c
c310: 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
c320: 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
c330: 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20  .    pack .t.f. 
c340: 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20     focus -force 
c350: 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a  .t.f.    update.
c360: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
c370: 6e 64 20 2e 74 2e 66 20 3c 45 6e 74 65 72 3e 20  nd .t.f <Enter> 
c380: 7b 73 65 74 20 78 20 22 25 6d 22 7d 0a 20 20 20  {set x "%m"}.   
c390: 20 73 65 74 20 78 20 6e 6f 6e 65 0a 20 20 20 20   set x none.    
c3a0: 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
c3b0: 74 2e 66 20 3c 45 6e 74 65 72 3e 20 2d 6d 6f 64  t.f <Enter> -mod
c3c0: 65 20 4e 6f 74 69 66 79 4e 6f 72 6d 61 6c 0a 20  e NotifyNormal. 
c3d0: 20 20 20 73 65 74 20 78 0a 7d 20 2d 63 6c 65 61     set x.} -clea
c3e0: 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f  nup {.    destro
c3f0: 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74  y .t.f.} -result
c400: 20 7b 4e 6f 74 69 66 79 4e 6f 72 6d 61 6c 7d 0a   {NotifyNormal}.
c410: 74 65 73 74 20 62 69 6e 64 2d 31 36 2e 31 38 20  test bind-16.18 
c420: 7b 45 78 70 61 6e 64 50 65 72 63 65 6e 74 73 20  {ExpandPercents 
c430: 70 72 6f 63 65 64 75 72 65 7d 20 2d 73 65 74 75  procedure} -setu
c440: 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74  p {.    frame .t
c450: 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d  .f -class Test -
c460: 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68  width 150 -heigh
c470: 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e  t 100.    pack .
c480: 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66  t.f.    focus -f
c490: 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70  orce .t.f.    up
c4a0: 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20  date.} -body {. 
c4b0: 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 45 6e     bind .t.f <En
c4c0: 74 65 72 3e 20 7b 73 65 74 20 78 20 22 25 6d 22  ter> {set x "%m"
c4d0: 7d 0a 20 20 20 20 73 65 74 20 78 20 6e 6f 6e 65  }.    set x none
c4e0: 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
c4f0: 61 74 65 20 2e 74 2e 66 20 3c 45 6e 74 65 72 3e  ate .t.f <Enter>
c500: 20 2d 6d 6f 64 65 20 4e 6f 74 69 66 79 47 72 61   -mode NotifyGra
c510: 62 0a 20 20 20 20 73 65 74 20 78 0a 7d 20 2d 63  b.    set x.} -c
c520: 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73  leanup {.    des
c530: 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73  troy .t.f.} -res
c540: 75 6c 74 20 7b 4e 6f 74 69 66 79 47 72 61 62 7d  ult {NotifyGrab}
c550: 0a 74 65 73 74 20 62 69 6e 64 2d 31 36 2e 31 39  .test bind-16.19
c560: 20 7b 45 78 70 61 6e 64 50 65 72 63 65 6e 74 73   {ExpandPercents
c570: 20 70 72 6f 63 65 64 75 72 65 7d 20 2d 73 65 74   procedure} -set
c580: 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e  up {.    frame .
c590: 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20  t.f -class Test 
c5a0: 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67  -width 150 -heig
c5b0: 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20  ht 100.    pack 
c5c0: 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d  .t.f.    focus -
c5d0: 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75  force .t.f.    u
c5e0: 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20 7b 0a  pdate.} -body {.
c5f0: 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 45      bind .t.f <E
c600: 6e 74 65 72 3e 20 7b 73 65 74 20 78 20 22 25 6d  nter> {set x "%m
c610: 22 7d 0a 20 20 20 20 73 65 74 20 78 20 6e 6f 6e  "}.    set x non
c620: 65 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  e.    event gene
c630: 72 61 74 65 20 2e 74 2e 66 20 3c 45 6e 74 65 72  rate .t.f <Enter
c640: 3e 20 2d 6d 6f 64 65 20 4e 6f 74 69 66 79 55 6e  > -mode NotifyUn
c650: 67 72 61 62 0a 20 20 20 20 73 65 74 20 78 0a 7d  grab.    set x.}
c660: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
c670: 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d  destroy .t.f.} -
c680: 72 65 73 75 6c 74 20 7b 4e 6f 74 69 66 79 55 6e  result {NotifyUn
c690: 67 72 61 62 7d 0a 74 65 73 74 20 62 69 6e 64 2d  grab}.test bind-
c6a0: 31 36 2e 32 30 20 7b 45 78 70 61 6e 64 50 65 72  16.20 {ExpandPer
c6b0: 63 65 6e 74 73 20 70 72 6f 63 65 64 75 72 65 7d  cents procedure}
c6c0: 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72   -setup {.    fr
c6d0: 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20  ame .t.f -class 
c6e0: 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20  Test -width 150 
c6f0: 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20  -height 100.    
c700: 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f  pack .t.f.    fo
c710: 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a  cus -force .t.f.
c720: 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73      update.    s
c730: 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20  et x {}.} -body 
c740: 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20  {.    bind .t.f 
c750: 3c 45 6e 74 65 72 3e 20 7b 73 65 74 20 78 20 22  <Enter> {set x "
c760: 25 6d 22 7d 0a 20 20 20 20 73 65 74 20 78 20 6e  %m"}.    set x n
c770: 6f 6e 65 0a 20 20 20 20 65 76 65 6e 74 20 67 65  one.    event ge
c780: 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 45 6e 74  nerate .t.f <Ent
c790: 65 72 3e 20 2d 6d 6f 64 65 20 4e 6f 74 69 66 79  er> -mode Notify
c7a0: 57 68 69 6c 65 47 72 61 62 62 65 64 0a 20 20 20  WhileGrabbed.   
c7b0: 20 73 65 74 20 78 0a 7d 20 2d 63 6c 65 61 6e 75   set x.} -cleanu
c7c0: 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20  p {.    destroy 
c7d0: 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b  .t.f.} -result {
c7e0: 4e 6f 74 69 66 79 57 68 69 6c 65 47 72 61 62 62  NotifyWhileGrabb
c7f0: 65 64 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31 36  ed}.test bind-16
c800: 2e 32 31 20 7b 45 78 70 61 6e 64 50 65 72 63 65  .21 {ExpandPerce
c810: 6e 74 73 20 70 72 6f 63 65 64 75 72 65 7d 20 2d  nts procedure} -
c820: 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d  setup {.    fram
c830: 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65  e .t.f -class Te
c840: 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68  st -width 150 -h
c850: 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61  eight 100.    pa
c860: 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75  ck .t.f.    focu
c870: 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20  s -force .t.f.  
c880: 20 20 75 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79    update.} -body
c890: 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66   {.    bind .t.f
c8a0: 20 3c 4d 61 70 3e 20 7b 73 65 74 20 78 20 22 25   <Map> {set x "%
c8b0: 6f 22 7d 0a 20 20 20 20 73 65 74 20 78 20 6e 6f  o"}.    set x no
c8c0: 6e 65 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e  ne.    event gen
c8d0: 65 72 61 74 65 20 2e 74 2e 66 20 3c 4d 61 70 3e  erate .t.f <Map>
c8e0: 20 2d 6f 76 65 72 72 69 64 65 20 31 20 2d 77 69   -override 1 -wi
c8f0: 6e 64 6f 77 20 2e 74 2e 66 0a 20 20 20 20 72 65  ndow .t.f.    re
c900: 74 75 72 6e 20 24 78 0a 7d 20 2d 63 6c 65 61 6e  turn $x.} -clean
c910: 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79  up {.    destroy
c920: 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20   .t.f.} -result 
c930: 7b 31 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31 36  {1}.test bind-16
c940: 2e 32 32 20 7b 45 78 70 61 6e 64 50 65 72 63 65  .22 {ExpandPerce
c950: 6e 74 73 20 70 72 6f 63 65 64 75 72 65 7d 20 2d  nts procedure} -
c960: 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d  setup {.    fram
c970: 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65  e .t.f -class Te
c980: 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68  st -width 150 -h
c990: 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61  eight 100.    pa
c9a0: 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75  ck .t.f.    focu
c9b0: 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20  s -force .t.f.  
c9c0: 20 20 75 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79    update.} -body
c9d0: 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66   {.    bind .t.f
c9e0: 20 3c 52 65 70 61 72 65 6e 74 3e 20 7b 73 65 74   <Reparent> {set
c9f0: 20 78 20 22 25 6f 22 7d 0a 20 20 20 20 73 65 74   x "%o"}.    set
ca00: 20 78 20 6e 6f 6e 65 0a 20 20 20 20 65 76 65 6e   x none.    even
ca10: 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
ca20: 3c 52 65 70 61 72 65 6e 74 3e 20 2d 6f 76 65 72  <Reparent> -over
ca30: 72 69 64 65 20 74 72 75 65 20 2d 77 69 6e 64 6f  ride true -windo
ca40: 77 20 2e 74 2e 66 0a 20 20 20 20 72 65 74 75 72  w .t.f.    retur
ca50: 6e 20 24 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  n $x.} -cleanup 
ca60: 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74  {.    destroy .t
ca70: 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 31 7d  .f.} -result {1}
ca80: 0a 74 65 73 74 20 62 69 6e 64 2d 31 36 2e 32 33  .test bind-16.23
ca90: 20 7b 45 78 70 61 6e 64 50 65 72 63 65 6e 74 73   {ExpandPercents
caa0: 20 70 72 6f 63 65 64 75 72 65 7d 20 2d 73 65 74   procedure} -set
cab0: 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e  up {.    frame .
cac0: 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20  t.f -class Test 
cad0: 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67  -width 150 -heig
cae0: 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20  ht 100.    pack 
caf0: 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d  .t.f.    focus -
cb00: 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75  force .t.f.    u
cb10: 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20 7b 0a  pdate.} -body {.
cb20: 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 43      bind .t.f <C
cb30: 6f 6e 66 69 67 75 72 65 3e 20 7b 73 65 74 20 78  onfigure> {set x
cb40: 20 22 25 6f 22 7d 0a 20 20 20 20 73 65 74 20 78   "%o"}.    set x
cb50: 20 6e 6f 6e 65 0a 20 20 20 20 65 76 65 6e 74 20   none.    event 
cb60: 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 43  generate .t.f <C
cb70: 6f 6e 66 69 67 75 72 65 3e 20 2d 6f 76 65 72 72  onfigure> -overr
cb80: 69 64 65 20 31 20 2d 77 69 6e 64 6f 77 20 2e 74  ide 1 -window .t
cb90: 2e 66 0a 20 20 20 20 72 65 74 75 72 6e 20 24 78  .f.    return $x
cba0: 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
cbb0: 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d    destroy .t.f.}
cbc0: 20 2d 72 65 73 75 6c 74 20 7b 31 7d 0a 74 65 73   -result {1}.tes
cbd0: 74 20 62 69 6e 64 2d 31 36 2e 32 34 20 7b 45 78  t bind-16.24 {Ex
cbe0: 70 61 6e 64 50 65 72 63 65 6e 74 73 20 70 72 6f  pandPercents pro
cbf0: 63 65 64 75 72 65 7d 20 2d 73 65 74 75 70 20 7b  cedure} -setup {
cc00: 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
cc10: 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
cc20: 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
cc30: 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
cc40: 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
cc50: 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
cc60: 65 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  e.} -body {.    
cc70: 62 69 6e 64 20 2e 74 2e 66 20 3c 43 69 72 63 75  bind .t.f <Circu
cc80: 6c 61 74 65 3e 20 7b 73 65 74 20 78 20 22 25 70  late> {set x "%p
cc90: 22 7d 0a 20 20 20 20 73 65 74 20 78 20 6e 6f 6e  "}.    set x non
cca0: 65 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  e.    event gene
ccb0: 72 61 74 65 20 2e 74 2e 66 20 3c 43 69 72 63 75  rate .t.f <Circu
ccc0: 6c 61 74 65 3e 20 2d 70 6c 61 63 65 20 50 6c 61  late> -place Pla
ccd0: 63 65 4f 6e 54 6f 70 20 2d 77 69 6e 64 6f 77 20  ceOnTop -window 
cce0: 2e 74 2e 66 0a 20 20 20 20 73 65 74 20 78 0a 7d  .t.f.    set x.}
ccf0: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
cd00: 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d  destroy .t.f.} -
cd10: 72 65 73 75 6c 74 20 7b 50 6c 61 63 65 4f 6e 54  result {PlaceOnT
cd20: 6f 70 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31 36  op}.test bind-16
cd30: 2e 32 35 20 7b 45 78 70 61 6e 64 50 65 72 63 65  .25 {ExpandPerce
cd40: 6e 74 73 20 70 72 6f 63 65 64 75 72 65 7d 20 2d  nts procedure} -
cd50: 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d  setup {.    fram
cd60: 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65  e .t.f -class Te
cd70: 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68  st -width 150 -h
cd80: 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61  eight 100.    pa
cd90: 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75  ck .t.f.    focu
cda0: 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20  s -force .t.f.  
cdb0: 20 20 75 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79    update.} -body
cdc0: 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66   {.    bind .t.f
cdd0: 20 3c 43 69 72 63 75 6c 61 74 65 3e 20 7b 73 65   <Circulate> {se
cde0: 74 20 78 20 22 25 70 22 7d 0a 20 20 20 20 73 65  t x "%p"}.    se
cdf0: 74 20 78 20 6e 6f 6e 65 0a 20 20 20 20 65 76 65  t x none.    eve
ce00: 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
ce10: 20 3c 43 69 72 63 75 6c 61 74 65 3e 20 2d 70 6c   <Circulate> -pl
ce20: 61 63 65 20 50 6c 61 63 65 4f 6e 42 6f 74 74 6f  ace PlaceOnBotto
ce30: 6d 20 2d 77 69 6e 64 6f 77 20 2e 74 2e 66 0a 20  m -window .t.f. 
ce40: 20 20 20 73 65 74 20 78 0a 7d 20 2d 63 6c 65 61     set x.} -clea
ce50: 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f  nup {.    destro
ce60: 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74  y .t.f.} -result
ce70: 20 7b 50 6c 61 63 65 4f 6e 42 6f 74 74 6f 6d 7d   {PlaceOnBottom}
ce80: 0a 74 65 73 74 20 62 69 6e 64 2d 31 36 2e 32 36  .test bind-16.26
ce90: 20 7b 45 78 70 61 6e 64 50 65 72 63 65 6e 74 73   {ExpandPercents
cea0: 20 70 72 6f 63 65 64 75 72 65 7d 20 2d 73 65 74   procedure} -set
ceb0: 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e  up {.    frame .
cec0: 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20  t.f -class Test 
ced0: 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67  -width 150 -heig
cee0: 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20  ht 100.    pack 
cef0: 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d  .t.f.    focus -
cf00: 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75  force .t.f.    u
cf10: 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20 7b 0a  pdate.} -body {.
cf20: 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 31      bind .t.f <1
cf30: 3e 20 7b 73 65 74 20 78 20 22 25 73 22 7d 0a 20  > {set x "%s"}. 
cf40: 20 20 20 73 65 74 20 78 20 6e 6f 6e 65 0a 20 20     set x none.  
cf50: 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
cf60: 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 31 3e   .t.f <Button-1>
cf70: 20 2d 73 74 61 74 65 20 31 34 30 32 0a 20 20 20   -state 1402.   
cf80: 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
cf90: 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65  .t.f <ButtonRele
cfa0: 61 73 65 2d 31 3e 0a 20 20 20 20 73 65 74 20 78  ase-1>.    set x
cfb0: 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
cfc0: 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d    destroy .t.f.}
cfd0: 20 2d 72 65 73 75 6c 74 20 7b 31 34 30 32 7d 0a   -result {1402}.
cfe0: 74 65 73 74 20 62 69 6e 64 2d 31 36 2e 32 37 20  test bind-16.27 
cff0: 7b 45 78 70 61 6e 64 50 65 72 63 65 6e 74 73 20  {ExpandPercents 
d000: 70 72 6f 63 65 64 75 72 65 7d 20 2d 73 65 74 75  procedure} -setu
d010: 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74  p {.    frame .t
d020: 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d  .f -class Test -
d030: 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68  width 150 -heigh
d040: 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e  t 100.    pack .
d050: 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66  t.f.    focus -f
d060: 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70  orce .t.f.    up
d070: 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20  date.} -body {. 
d080: 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 45 6e     bind .t.f <En
d090: 74 65 72 3e 20 7b 73 65 74 20 78 20 22 25 73 22  ter> {set x "%s"
d0a0: 7d 0a 20 20 20 20 73 65 74 20 78 20 6e 6f 6e 65  }.    set x none
d0b0: 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
d0c0: 61 74 65 20 2e 74 2e 66 20 3c 45 6e 74 65 72 3e  ate .t.f <Enter>
d0d0: 20 2d 73 74 61 74 65 20 30 78 33 66 66 0a 20 20   -state 0x3ff.  
d0e0: 20 20 73 65 74 20 78 0a 7d 20 2d 63 6c 65 61 6e    set x.} -clean
d0f0: 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79  up {.    destroy
d100: 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20   .t.f.} -result 
d110: 7b 31 30 32 33 7d 0a 74 65 73 74 20 62 69 6e 64  {1023}.test bind
d120: 2d 31 36 2e 32 38 20 7b 45 78 70 61 6e 64 50 65  -16.28 {ExpandPe
d130: 72 63 65 6e 74 73 20 70 72 6f 63 65 64 75 72 65  rcents procedure
d140: 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66  } -setup {.    f
d150: 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73  rame .t.f -class
d160: 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30   Test -width 150
d170: 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20   -height 100.   
d180: 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66   pack .t.f.    f
d190: 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66  ocus -force .t.f
d1a0: 0a 20 20 20 20 75 70 64 61 74 65 0a 7d 20 2d 62  .    update.} -b
d1b0: 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e  ody {.    bind .
d1c0: 74 2e 66 20 3c 56 69 73 69 62 69 6c 69 74 79 3e  t.f <Visibility>
d1d0: 20 7b 73 65 74 20 78 20 22 25 73 22 7d 0a 20 20   {set x "%s"}.  
d1e0: 20 20 73 65 74 20 78 20 6e 6f 6e 65 0a 20 20 20    set x none.   
d1f0: 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
d200: 2e 74 2e 66 20 3c 56 69 73 69 62 69 6c 69 74 79  .t.f <Visibility
d210: 3e 20 2d 73 74 61 74 65 20 56 69 73 69 62 69 6c  > -state Visibil
d220: 69 74 79 50 61 72 74 69 61 6c 6c 79 4f 62 73 63  ityPartiallyObsc
d230: 75 72 65 64 0a 20 20 20 20 73 65 74 20 78 0a 7d  ured.    set x.}
d240: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
d250: 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d  destroy .t.f.} -
d260: 72 65 73 75 6c 74 20 7b 56 69 73 69 62 69 6c 69  result {Visibili
d270: 74 79 50 61 72 74 69 61 6c 6c 79 4f 62 73 63 75  tyPartiallyObscu
d280: 72 65 64 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31  red}.test bind-1
d290: 36 2e 32 39 20 7b 45 78 70 61 6e 64 50 65 72 63  6.29 {ExpandPerc
d2a0: 65 6e 74 73 20 70 72 6f 63 65 64 75 72 65 7d 20  ents procedure} 
d2b0: 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61  -setup {.    fra
d2c0: 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54  me .t.f -class T
d2d0: 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d  est -width 150 -
d2e0: 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70  height 100.    p
d2f0: 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63  ack .t.f.    foc
d300: 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20  us -force .t.f. 
d310: 20 20 20 75 70 64 61 74 65 0a 7d 20 2d 62 6f 64     update.} -bod
d320: 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  y {.    bind .t.
d330: 66 20 3c 56 69 73 69 62 69 6c 69 74 79 3e 20 7b  f <Visibility> {
d340: 73 65 74 20 78 20 22 25 73 22 7d 0a 20 20 20 20  set x "%s"}.    
d350: 73 65 74 20 78 20 6e 6f 6e 65 0a 20 20 20 20 65  set x none.    e
d360: 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
d370: 2e 66 20 3c 56 69 73 69 62 69 6c 69 74 79 3e 20  .f <Visibility> 
d380: 2d 73 74 61 74 65 20 56 69 73 69 62 69 6c 69 74  -state Visibilit
d390: 79 55 6e 6f 62 73 63 75 72 65 64 0a 20 20 20 20  yUnobscured.    
d3a0: 73 65 74 20 78 0a 7d 20 2d 63 6c 65 61 6e 75 70  set x.} -cleanup
d3b0: 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
d3c0: 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 56  t.f.} -result {V
d3d0: 69 73 69 62 69 6c 69 74 79 55 6e 6f 62 73 63 75  isibilityUnobscu
d3e0: 72 65 64 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31  red}.test bind-1
d3f0: 36 2e 33 30 20 7b 45 78 70 61 6e 64 50 65 72 63  6.30 {ExpandPerc
d400: 65 6e 74 73 20 70 72 6f 63 65 64 75 72 65 7d 20  ents procedure} 
d410: 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61  -setup {.    fra
d420: 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54  me .t.f -class T
d430: 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d  est -width 150 -
d440: 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70  height 100.    p
d450: 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63  ack .t.f.    foc
d460: 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20  us -force .t.f. 
d470: 20 20 20 75 70 64 61 74 65 0a 7d 20 2d 62 6f 64     update.} -bod
d480: 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  y {.    bind .t.
d490: 66 20 3c 56 69 73 69 62 69 6c 69 74 79 3e 20 7b  f <Visibility> {
d4a0: 73 65 74 20 78 20 22 25 73 22 7d 0a 20 20 20 20  set x "%s"}.    
d4b0: 73 65 74 20 78 20 6e 6f 6e 65 0a 20 20 20 20 65  set x none.    e
d4c0: 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
d4d0: 2e 66 20 3c 56 69 73 69 62 69 6c 69 74 79 3e 20  .f <Visibility> 
d4e0: 2d 73 74 61 74 65 20 56 69 73 69 62 69 6c 69 74  -state Visibilit
d4f0: 79 46 75 6c 6c 79 4f 62 73 63 75 72 65 64 0a 20  yFullyObscured. 
d500: 20 20 20 73 65 74 20 78 0a 7d 20 2d 63 6c 65 61     set x.} -clea
d510: 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f  nup {.    destro
d520: 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74  y .t.f.} -result
d530: 20 7b 56 69 73 69 62 69 6c 69 74 79 46 75 6c 6c   {VisibilityFull
d540: 79 4f 62 73 63 75 72 65 64 7d 0a 74 65 73 74 20  yObscured}.test 
d550: 62 69 6e 64 2d 31 36 2e 33 31 20 7b 45 78 70 61  bind-16.31 {Expa
d560: 6e 64 50 65 72 63 65 6e 74 73 20 70 72 6f 63 65  ndPercents proce
d570: 64 75 72 65 7d 20 2d 73 65 74 75 70 20 7b 0a 20  dure} -setup {. 
d580: 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63     frame .t.f -c
d590: 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
d5a0: 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
d5b0: 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20  .    pack .t.f. 
d5c0: 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20     focus -force 
d5d0: 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a  .t.f.    update.
d5e0: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
d5f0: 6e 64 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 3e  nd .t.f <Button>
d600: 20 7b 73 65 74 20 78 20 22 25 74 22 7d 0a 20 20   {set x "%t"}.  
d610: 20 20 73 65 74 20 78 20 6e 6f 6e 65 0a 20 20 20    set x none.   
d620: 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
d630: 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 3e 20 2d 74  .t.f <Button> -t
d640: 69 6d 65 20 34 32 39 34 0a 20 20 20 20 65 76 65  ime 4294.    eve
d650: 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
d660: 20 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 3e   <ButtonRelease>
d670: 0a 20 20 20 20 73 65 74 20 78 0a 7d 20 2d 63 6c  .    set x.} -cl
d680: 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74  eanup {.    dest
d690: 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75  roy .t.f.} -resu
d6a0: 6c 74 20 7b 34 32 39 34 7d 0a 74 65 73 74 20 62  lt {4294}.test b
d6b0: 69 6e 64 2d 31 36 2e 33 32 20 7b 45 78 70 61 6e  ind-16.32 {Expan
d6c0: 64 50 65 72 63 65 6e 74 73 20 70 72 6f 63 65 64  dPercents proced
d6d0: 75 72 65 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20  ure} -setup {.  
d6e0: 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c    frame .t.f -cl
d6f0: 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20  ass Test -width 
d700: 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a  150 -height 100.
d710: 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20      pack .t.f.  
d720: 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e    focus -force .
d730: 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 7d  t.f.    update.}
d740: 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
d750: 64 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 3e 20  d .t.f <Button> 
d760: 7b 73 65 74 20 78 20 22 25 78 20 25 79 22 7d 0a  {set x "%x %y"}.
d770: 20 20 20 20 73 65 74 20 78 20 6e 6f 6e 65 0a 20      set x none. 
d780: 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
d790: 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 3e 20  e .t.f <Button> 
d7a0: 2d 78 20 38 38 31 20 2d 79 20 34 33 32 0a 20 20  -x 881 -y 432.  
d7b0: 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
d7c0: 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65 6c   .t.f <ButtonRel
d7d0: 65 61 73 65 3e 0a 20 20 20 20 73 65 74 20 78 0a  ease>.    set x.
d7e0: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20  } -cleanup {.   
d7f0: 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20   destroy .t.f.} 
d800: 2d 72 65 73 75 6c 74 20 7b 38 38 31 20 34 33 32  -result {881 432
d810: 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31 36 2e 33  }.test bind-16.3
d820: 33 20 7b 45 78 70 61 6e 64 50 65 72 63 65 6e 74  3 {ExpandPercent
d830: 73 20 70 72 6f 63 65 64 75 72 65 7d 20 2d 73 65  s procedure} -se
d840: 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20  tup {.    frame 
d850: 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74  .t.f -class Test
d860: 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69   -width 150 -hei
d870: 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b  ght 100.    pack
d880: 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20   .t.f.    focus 
d890: 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20  -force .t.f.    
d8a0: 75 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20 7b  update.} -body {
d8b0: 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c  .    bind .t.f <
d8c0: 52 65 70 61 72 65 6e 74 3e 20 7b 73 65 74 20 78  Reparent> {set x
d8d0: 20 22 25 78 20 25 79 22 7d 0a 20 20 20 20 73 65   "%x %y"}.    se
d8e0: 74 20 78 20 6e 6f 6e 65 0a 20 20 20 20 65 76 65  t x none.    eve
d8f0: 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
d900: 20 3c 52 65 70 61 72 65 6e 74 3e 20 2d 78 20 38   <Reparent> -x 8
d910: 38 32 20 2d 79 20 34 33 31 20 2d 77 69 6e 64 6f  82 -y 431 -windo
d920: 77 20 2e 74 2e 66 0a 20 20 20 20 73 65 74 20 78  w .t.f.    set x
d930: 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
d940: 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d    destroy .t.f.}
d950: 20 2d 72 65 73 75 6c 74 20 7b 38 38 32 20 34 33   -result {882 43
d960: 31 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31 36 2e  1}.test bind-16.
d970: 33 34 20 7b 45 78 70 61 6e 64 50 65 72 63 65 6e  34 {ExpandPercen
d980: 74 73 20 70 72 6f 63 65 64 75 72 65 7d 20 2d 73  ts procedure} -s
d990: 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65  etup {.    frame
d9a0: 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73   .t.f -class Tes
d9b0: 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65  t -width 150 -he
d9c0: 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63  ight 100.    pac
d9d0: 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73  k .t.f.    focus
d9e0: 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20   -force .t.f.   
d9f0: 20 75 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20   update.} -body 
da00: 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20  {.    bind .t.f 
da10: 3c 45 6e 74 65 72 3e 20 7b 73 65 74 20 78 20 22  <Enter> {set x "
da20: 25 78 20 25 79 22 7d 0a 20 20 20 20 73 65 74 20  %x %y"}.    set 
da30: 78 20 6e 6f 6e 65 0a 20 20 20 20 65 76 65 6e 74  x none.    event
da40: 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
da50: 45 6e 74 65 72 3e 20 2d 78 20 37 38 31 20 2d 79  Enter> -x 781 -y
da60: 20 36 33 32 0a 20 20 20 20 73 65 74 20 78 0a 7d   632.    set x.}
da70: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
da80: 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d  destroy .t.f.} -
da90: 72 65 73 75 6c 74 20 7b 37 38 31 20 36 33 32 7d  result {781 632}
daa0: 0a 74 65 73 74 20 62 69 6e 64 2d 31 36 2e 33 35  .test bind-16.35
dab0: 20 7b 45 78 70 61 6e 64 50 65 72 63 65 6e 74 73   {ExpandPercents
dac0: 20 70 72 6f 63 65 64 75 72 65 7d 20 2d 63 6f 6e   procedure} -con
dad0: 73 74 72 61 69 6e 74 73 20 7b 0a 20 20 20 20 6e  straints {.    n
dae0: 6f 6e 50 6f 72 74 61 62 6c 65 20 0a 7d 20 2d 73  onPortable .} -s
daf0: 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65  etup {.    frame
db00: 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73   .t.f -class Tes
db10: 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65  t -width 150 -he
db20: 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63  ight 100.    pac
db30: 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73  k .t.f.    focus
db40: 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20   -force .t.f.   
db50: 20 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20   update.    set 
db60: 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20  x {}.} -body {. 
db70: 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 4b 65     bind .t.f <Ke
db80: 79 3e 20 7b 6c 61 70 70 65 6e 64 20 78 20 22 25  y> {lappend x "%
db90: 41 22 7d 0a 20 20 20 20 65 76 65 6e 74 20 67 65  A"}.    event ge
dba0: 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 4b 65 79  nerate .t.f <Key
dbb0: 2d 61 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65  -a>.    event ge
dbc0: 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 4b 65 79  nerate .t.f <Key
dbd0: 2d 41 3e 20 2d 73 74 61 74 65 20 31 0a 20 20 20  -A> -state 1.   
dbe0: 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
dbf0: 2e 74 2e 66 20 3c 4b 65 79 2d 54 61 62 3e 0a 20  .t.f <Key-Tab>. 
dc00: 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
dc10: 65 20 2e 74 2e 66 20 3c 4b 65 79 2d 52 65 74 75  e .t.f <Key-Retu
dc20: 72 6e 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65  rn>.    event ge
dc30: 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 4b 65 79  nerate .t.f <Key
dc40: 2d 46 31 3e 0a 20 20 20 20 65 76 65 6e 74 20 67  -F1>.    event g
dc50: 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 4b 65  enerate .t.f <Ke
dc60: 79 2d 53 68 69 66 74 5f 4c 3e 0a 20 20 20 20 65  y-Shift_L>.    e
dc70: 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
dc80: 2e 66 20 3c 4b 65 79 2d 73 70 61 63 65 3e 0a 20  .f <Key-space>. 
dc90: 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
dca0: 65 20 2e 74 2e 66 20 3c 4b 65 79 2d 64 6f 6c 6c  e .t.f <Key-doll
dcb0: 61 72 3e 20 2d 73 74 61 74 65 20 31 0a 20 20 20  ar> -state 1.   
dcc0: 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
dcd0: 2e 74 2e 66 20 3c 4b 65 79 2d 62 72 61 63 65 6c  .t.f <Key-bracel
dce0: 65 66 74 3e 20 2d 73 74 61 74 65 20 31 0a 20 20  eft> -state 1.  
dcf0: 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
dd00: 20 2e 74 2e 66 20 3c 4b 65 79 2d 4d 75 6c 74 69   .t.f <Key-Multi
dd10: 5f 6b 65 79 3e 0a 20 20 20 20 65 76 65 6e 74 20  _key>.    event 
dd20: 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 4b  generate .t.f <K
dd30: 65 79 2d 65 3e 0a 20 20 20 20 65 76 65 6e 74 20  ey-e>.    event 
dd40: 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 4b  generate .t.f <K
dd50: 65 79 2d 61 70 6f 73 74 72 6f 70 68 65 3e 0a 20  ey-apostrophe>. 
dd60: 20 20 20 73 65 74 20 78 0a 7d 20 2d 63 6c 65 61     set x.} -clea
dd70: 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f  nup {.    destro
dd80: 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74  y .t.f.} -result
dd90: 20 7b 61 20 41 20 7b 09 7d 20 7b 5c 72 7d 20 7b   {a A {.} {\r} {
dda0: 7b 7d 7d 20 7b 7b 7d 7d 20 7b 20 7d 20 7b 5c 24  {}} {{}} { } {\$
ddb0: 7d 20 5c 5c 5c 7b 20 7b 7b 7d 7d 20 7b 7b 7d 7d  } \\\{ {{}} {{}}
ddc0: 20 5c 75 30 30 65 39 7d 0a 74 65 73 74 20 62 69   \u00e9}.test bi
ddd0: 6e 64 2d 31 36 2e 33 36 20 7b 45 78 70 61 6e 64  nd-16.36 {Expand
dde0: 50 65 72 63 65 6e 74 73 20 70 72 6f 63 65 64 75  Percents procedu
ddf0: 72 65 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20  re} -setup {.   
de00: 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61   frame .t.f -cla
de10: 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
de20: 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20  50 -height 100. 
de30: 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20     pack .t.f.   
de40: 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74   focus -force .t
de50: 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 7d 20  .f.    update.} 
de60: 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64  -body {.    bind
de70: 20 2e 74 2e 66 20 3c 43 6f 6e 66 69 67 75 72 65   .t.f <Configure
de80: 3e 20 7b 73 65 74 20 78 20 22 25 42 22 7d 0a 20  > {set x "%B"}. 
de90: 20 20 20 73 65 74 20 78 20 6e 6f 6e 65 0a 20 20     set x none.  
dea0: 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
deb0: 20 2e 74 2e 66 20 3c 43 6f 6e 66 69 67 75 72 65   .t.f <Configure
dec0: 3e 20 2d 62 6f 72 64 65 72 77 69 64 74 68 20 32  > -borderwidth 2
ded0: 34 20 2d 77 69 6e 64 6f 77 20 2e 74 2e 66 0a 20  4 -window .t.f. 
dee0: 20 20 20 73 65 74 20 78 0a 7d 20 2d 63 6c 65 61     set x.} -clea
def0: 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f  nup {.    destro
df00: 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74  y .t.f.} -result
df10: 20 7b 32 34 7d 0a 74 65 73 74 20 62 69 6e 64 2d   {24}.test bind-
df20: 31 36 2e 33 37 20 7b 45 78 70 61 6e 64 50 65 72  16.37 {ExpandPer
df30: 63 65 6e 74 73 20 70 72 6f 63 65 64 75 72 65 7d  cents procedure}
df40: 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72   -setup {.    fr
df50: 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20  ame .t.f -class 
df60: 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20  Test -width 150 
df70: 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20  -height 100.    
df80: 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f  pack .t.f.    fo
df90: 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a  cus -force .t.f.
dfa0: 20 20 20 20 75 70 64 61 74 65 0a 7d 20 2d 62 6f      update.} -bo
dfb0: 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74  dy {.    bind .t
dfc0: 2e 66 20 3c 45 6e 74 65 72 3e 20 7b 73 65 74 20  .f <Enter> {set 
dfd0: 78 20 22 25 45 22 7d 0a 20 20 20 20 73 65 74 20  x "%E"}.    set 
dfe0: 78 20 6e 6f 6e 65 0a 20 20 20 20 65 76 65 6e 74  x none.    event
dff0: 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
e000: 45 6e 74 65 72 3e 20 2d 73 65 6e 64 65 76 65 6e  Enter> -sendeven
e010: 74 20 31 0a 20 20 20 20 72 65 74 75 72 6e 20 24  t 1.    return $
e020: 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  x.} -cleanup {. 
e030: 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
e040: 7d 20 2d 72 65 73 75 6c 74 20 7b 31 7d 0a 74 65  } -result {1}.te
e050: 73 74 20 62 69 6e 64 2d 31 36 2e 33 38 20 7b 45  st bind-16.38 {E
e060: 78 70 61 6e 64 50 65 72 63 65 6e 74 73 20 70 72  xpandPercents pr
e070: 6f 63 65 64 75 72 65 7d 20 2d 63 6f 6e 73 74 72  ocedure} -constr
e080: 61 69 6e 74 73 20 7b 0a 20 20 20 20 6e 6f 6e 50  aints {.    nonP
e090: 6f 72 74 61 62 6c 65 0a 7d 20 2d 73 65 74 75 70  ortable.} -setup
e0a0: 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e   {.    frame .t.
e0b0: 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77  f -class Test -w
e0c0: 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74  idth 150 -height
e0d0: 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74   100.    pack .t
e0e0: 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f  .f.    focus -fo
e0f0: 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64  rce .t.f.    upd
e100: 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d  ate.    set x {}
e110: 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62  .} -body {.    b
e120: 69 6e 64 20 2e 74 2e 66 20 3c 4b 65 79 3e 20 7b  ind .t.f <Key> {
e130: 6c 61 70 70 65 6e 64 20 78 20 25 4b 7d 0a 20 20  lappend x %K}.  
e140: 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
e150: 20 2e 74 2e 66 20 3c 4b 65 79 2d 61 3e 0a 20 20   .t.f <Key-a>.  
e160: 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
e170: 20 2e 74 2e 66 20 3c 4b 65 79 2d 41 3e 20 2d 73   .t.f <Key-A> -s
e180: 74 61 74 65 20 31 0a 20 20 20 20 65 76 65 6e 74  tate 1.    event
e190: 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
e1a0: 4b 65 79 2d 54 61 62 3e 0a 20 20 20 20 65 76 65  Key-Tab>.    eve
e1b0: 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
e1c0: 20 3c 4b 65 79 2d 46 31 3e 0a 20 20 20 20 65 76   <Key-F1>.    ev
e1d0: 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
e1e0: 66 20 3c 4b 65 79 2d 53 68 69 66 74 5f 4c 3e 0a  f <Key-Shift_L>.
e1f0: 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
e200: 74 65 20 2e 74 2e 66 20 3c 4b 65 79 2d 73 70 61  te .t.f <Key-spa
e210: 63 65 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65  ce>.    event ge
e220: 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 4b 65 79  nerate .t.f <Key
e230: 2d 64 6f 6c 6c 61 72 3e 20 2d 73 74 61 74 65 20  -dollar> -state 
e240: 31 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  1.    event gene
e250: 72 61 74 65 20 2e 74 2e 66 20 3c 4b 65 79 2d 62  rate .t.f <Key-b
e260: 72 61 63 65 6c 65 66 74 3e 20 2d 73 74 61 74 65  raceleft> -state
e270: 20 31 0a 20 20 20 20 73 65 74 20 78 0a 7d 20 2d   1.    set x.} -
e280: 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
e290: 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
e2a0: 73 75 6c 74 20 7b 61 20 41 20 54 61 62 20 46 31  sult {a A Tab F1
e2b0: 20 53 68 69 66 74 5f 4c 20 73 70 61 63 65 20 64   Shift_L space d
e2c0: 6f 6c 6c 61 72 20 62 72 61 63 65 6c 65 66 74 7d  ollar braceleft}
e2d0: 0a 74 65 73 74 20 62 69 6e 64 2d 31 36 2e 33 39  .test bind-16.39
e2e0: 20 7b 45 78 70 61 6e 64 50 65 72 63 65 6e 74 73   {ExpandPercents
e2f0: 20 70 72 6f 63 65 64 75 72 65 7d 20 2d 73 65 74   procedure} -set
e300: 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e  up {.    frame .
e310: 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20  t.f -class Test 
e320: 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67  -width 150 -heig
e330: 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20  ht 100.    pack 
e340: 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d  .t.f.    focus -
e350: 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75  force .t.f.    u
e360: 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20 7b 0a  pdate.} -body {.
e370: 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 4b      bind .t.f <K
e380: 65 79 3e 20 7b 73 65 74 20 78 20 22 25 4e 22 7d  ey> {set x "%N"}
e390: 0a 20 20 20 20 73 65 74 20 78 20 6e 6f 6e 65 0a  .    set x none.
e3a0: 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
e3b0: 74 65 20 2e 74 2e 66 20 3c 4b 65 79 2d 73 70 61  te .t.f <Key-spa
e3c0: 63 65 3e 0a 20 20 20 20 73 65 74 20 78 0a 7d 20  ce>.    set x.} 
e3d0: 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64  -cleanup {.    d
e3e0: 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72  estroy .t.f.} -r
e3f0: 65 73 75 6c 74 20 7b 33 32 7d 0a 74 65 73 74 20  esult {32}.test 
e400: 62 69 6e 64 2d 31 36 2e 34 30 20 7b 45 78 70 61  bind-16.40 {Expa
e410: 6e 64 50 65 72 63 65 6e 74 73 20 70 72 6f 63 65  ndPercents proce
e420: 64 75 72 65 7d 20 2d 73 65 74 75 70 20 7b 0a 20  dure} -setup {. 
e430: 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63     frame .t.f -c
e440: 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
e450: 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
e460: 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20  .    pack .t.f. 
e470: 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20     focus -force 
e480: 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a  .t.f.    update.
e490: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
e4a0: 6e 64 20 2e 74 2e 66 20 3c 4b 65 79 3e 20 7b 73  nd .t.f <Key> {s
e4b0: 65 74 20 78 20 22 25 53 22 7d 0a 20 20 20 20 73  et x "%S"}.    s
e4c0: 65 74 20 78 20 6e 6f 6e 65 0a 20 20 20 20 65 76  et x none.    ev
e4d0: 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
e4e0: 66 20 3c 4b 65 79 2d 73 70 61 63 65 3e 20 2d 73  f <Key-space> -s
e4f0: 75 62 77 69 6e 64 6f 77 20 2e 74 0a 20 20 20 20  ubwindow .t.    
e500: 73 65 74 20 78 0a 7d 20 2d 63 6c 65 61 6e 75 70  set x.} -cleanup
e510: 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
e520: 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 5b 77  t.f.} -result [w
e530: 69 6e 66 6f 20 69 64 20 2e 74 5d 0a 74 65 73 74  info id .t].test
e540: 20 62 69 6e 64 2d 31 36 2e 34 31 20 7b 45 78 70   bind-16.41 {Exp
e550: 61 6e 64 50 65 72 63 65 6e 74 73 20 70 72 6f 63  andPercents proc
e560: 65 64 75 72 65 7d 20 2d 73 65 74 75 70 20 7b 0a  edure} -setup {.
e570: 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d      frame .t.f -
e580: 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74  class Test -widt
e590: 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30  h 150 -height 10
e5a0: 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a  0.    pack .t.f.
e5b0: 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65      focus -force
e5c0: 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65   .t.f.    update
e5d0: 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62  .} -body {.    b
e5e0: 69 6e 64 20 2e 74 2e 66 20 3c 4b 65 79 3e 20 7b  ind .t.f <Key> {
e5f0: 73 65 74 20 78 20 22 25 54 22 7d 0a 20 20 20 20  set x "%T"}.    
e600: 73 65 74 20 78 20 6e 6f 6e 65 0a 20 20 20 20 65  set x none.    e
e610: 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
e620: 2e 66 20 3c 4b 65 79 3e 0a 20 20 20 20 73 65 74  .f <Key>.    set
e630: 20 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a   x.} -cleanup {.
e640: 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66      destroy .t.f
e650: 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 32 7d 0a 74  .} -result {2}.t
e660: 65 73 74 20 62 69 6e 64 2d 31 36 2e 34 32 20 7b  est bind-16.42 {
e670: 45 78 70 61 6e 64 50 65 72 63 65 6e 74 73 20 70  ExpandPercents p
e680: 72 6f 63 65 64 75 72 65 7d 20 2d 73 65 74 75 70  rocedure} -setup
e690: 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e   {.    frame .t.
e6a0: 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77  f -class Test -w
e6b0: 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74  idth 150 -height
e6c0: 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74   100.    pack .t
e6d0: 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f  .f.    focus -fo
e6e0: 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64  rce .t.f.    upd
e6f0: 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d  ate.    set x {}
e700: 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62  .} -body {.    b
e710: 69 6e 64 20 2e 74 2e 66 20 3c 4b 65 79 3e 20 7b  ind .t.f <Key> {
e720: 73 65 74 20 78 20 22 25 57 22 7d 0a 20 20 20 20  set x "%W"}.    
e730: 73 65 74 20 78 20 6e 6f 6e 65 0a 20 20 20 20 65  set x none.    e
e740: 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
e750: 2e 66 20 3c 4b 65 79 3e 0a 20 20 20 20 73 65 74  .f <Key>.    set
e760: 20 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a   x.} -cleanup {.
e770: 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66      destroy .t.f
e780: 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 2e 74 2e 66  .} -result {.t.f
e790: 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31 36 2e 34  }.test bind-16.4
e7a0: 33 20 7b 45 78 70 61 6e 64 50 65 72 63 65 6e 74  3 {ExpandPercent
e7b0: 73 20 70 72 6f 63 65 64 75 72 65 7d 20 2d 73 65  s procedure} -se
e7c0: 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20  tup {.    frame 
e7d0: 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74  .t.f -class Test
e7e0: 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69   -width 150 -hei
e7f0: 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b  ght 100.    pack
e800: 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20   .t.f.    focus 
e810: 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20  -force .t.f.    
e820: 75 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20 7b  update.} -body {
e830: 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c  .    bind .t.f <
e840: 42 75 74 74 6f 6e 3e 20 7b 73 65 74 20 78 20 22  Button> {set x "
e850: 25 58 20 25 59 22 7d 0a 20 20 20 20 73 65 74 20  %X %Y"}.    set 
e860: 78 20 6e 6f 6e 65 0a 20 20 20 20 65 76 65 6e 74  x none.    event
e870: 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
e880: 42 75 74 74 6f 6e 3e 20 2d 72 6f 6f 74 78 20 34  Button> -rootx 4
e890: 32 32 20 2d 72 6f 6f 74 79 20 31 33 0a 20 20 20  22 -rooty 13.   
e8a0: 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
e8b0: 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65  .t.f <ButtonRele
e8c0: 61 73 65 3e 0a 20 20 20 20 73 65 74 20 78 0a 7d  ase>.    set x.}
e8d0: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
e8e0: 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d  destroy .t.f.} -
e8f0: 72 65 73 75 6c 74 20 7b 34 32 32 20 31 33 7d 0a  result {422 13}.
e900: 74 65 73 74 20 62 69 6e 64 2d 31 36 2e 34 34 20  test bind-16.44 
e910: 7b 45 78 70 61 6e 64 50 65 72 63 65 6e 74 73 20  {ExpandPercents 
e920: 70 72 6f 63 65 64 75 72 65 7d 20 2d 73 65 74 75  procedure} -setu
e930: 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74  p {.    frame .t
e940: 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d  .f -class Test -
e950: 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68  width 150 -heigh
e960: 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e  t 100.    pack .
e970: 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66  t.f.    focus -f
e980: 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70  orce .t.f.    up
e990: 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20  date.} -body {. 
e9a0: 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 47 72     bind .t.f <Gr
e9b0: 61 76 69 74 79 3e 20 7b 73 65 74 20 78 20 22 25  avity> {set x "%
e9c0: 52 20 25 53 22 7d 0a 20 20 20 20 73 65 74 20 78  R %S"}.    set x
e9d0: 20 6e 6f 6e 65 0a 20 20 20 20 65 76 65 6e 74 20   none.    event 
e9e0: 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 47  generate .t.f <G
e9f0: 72 61 76 69 74 79 3e 0a 20 20 20 20 73 65 74 20  ravity>.    set 
ea00: 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  x.} -cleanup {. 
ea10: 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
ea20: 7d 20 2d 72 65 73 75 6c 74 20 7b 3f 3f 20 3f 3f  } -result {?? ??
ea30: 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 31 36 2e  }..test bind-16.
ea40: 34 35 20 7b 45 78 70 61 6e 64 50 65 72 63 65 6e  45 {ExpandPercen
ea50: 74 73 20 70 72 6f 63 65 64 75 72 65 7d 20 2d 73  ts procedure} -s
ea60: 65 74 75 70 20 7b 0a 20 20 20 20 73 65 74 20 73  etup {.    set s
ea70: 61 76 65 64 42 69 6e 64 28 45 6e 74 72 79 29 20  avedBind(Entry) 
ea80: 5b 62 69 6e 64 20 45 6e 74 72 79 20 3c 4b 65 79  [bind Entry <Key
ea90: 3e 5d 0a 20 20 20 20 73 65 74 20 73 61 76 65 64  >].    set saved
eaa0: 42 69 6e 64 28 41 6c 6c 29 20 5b 62 69 6e 64 20  Bind(All) [bind 
eab0: 61 6c 6c 20 3c 4b 65 79 3e 5d 0a 20 20 20 20 65  all <Key>].    e
eac0: 6e 74 72 79 20 2e 74 2e 65 0a 20 20 20 20 70 61  ntry .t.e.    pa
ead0: 63 6b 20 2e 74 2e 65 0a 20 20 20 20 66 6f 63 75  ck .t.e.    focu
eae0: 73 20 2d 66 6f 72 63 65 20 2e 74 2e 65 0a 20 20  s -force .t.e.  
eaf0: 20 20 66 6f 72 65 61 63 68 20 70 20 5b 65 76 65    foreach p [eve
eb00: 6e 74 20 69 6e 66 6f 5d 20 7b 65 76 65 6e 74 20  nt info] {event 
eb10: 64 65 6c 65 74 65 20 24 70 7d 0a 20 20 20 20 75  delete $p}.    u
eb20: 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20 7b 0a  pdate.} -body {.
eb30: 20 20 20 20 62 69 6e 64 20 2e 74 2e 65 20 3c 4b      bind .t.e <K
eb40: 65 79 3e 20 7b 73 65 74 20 78 20 22 25 4d 22 7d  ey> {set x "%M"}
eb50: 0a 20 20 20 20 62 69 6e 64 20 45 6e 74 72 79 20  .    bind Entry 
eb60: 3c 4b 65 79 3e 20 7b 73 65 74 20 79 20 22 25 4d  <Key> {set y "%M
eb70: 22 7d 0a 20 20 20 20 62 69 6e 64 20 61 6c 6c 20  "}.    bind all 
eb80: 3c 4b 65 79 3e 20 7b 73 65 74 20 7a 20 22 25 4d  <Key> {set z "%M
eb90: 22 7d 0a 20 20 20 20 73 65 74 20 78 20 6e 6f 6e  "}.    set x non
eba0: 65 3b 20 73 65 74 20 79 20 6e 6f 6e 65 3b 20 73  e; set y none; s
ebb0: 65 74 20 7a 20 6e 6f 6e 65 0a 20 20 20 20 65 76  et z none.    ev
ebc0: 65 6e 74 20 67 65 6e 20 2e 74 2e 65 20 3c 4b 65  ent gen .t.e <Ke
ebd0: 79 2d 61 3e 0a 20 20 20 20 6c 69 73 74 20 24 78  y-a>.    list $x
ebe0: 20 24 79 20 24 7a 0a 7d 20 2d 63 6c 65 61 6e 75   $y $z.} -cleanu
ebf0: 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20  p {.    destroy 
ec00: 2e 74 2e 65 0a 20 20 20 20 62 69 6e 64 20 61 6c  .t.e.    bind al
ec10: 6c 20 3c 4b 65 79 3e 20 24 73 61 76 65 64 42 69  l <Key> $savedBi
ec20: 6e 64 28 41 6c 6c 29 0a 20 20 20 20 62 69 6e 64  nd(All).    bind
ec30: 20 45 6e 74 72 79 20 3c 4b 65 79 3e 20 24 73 61   Entry <Key> $sa
ec40: 76 65 64 42 69 6e 64 28 45 6e 74 72 79 29 0a 20  vedBind(Entry). 
ec50: 20 20 20 75 6e 73 65 74 20 73 61 76 65 64 42 69     unset savedBi
ec60: 6e 64 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 30 20  nd.} -result {0 
ec70: 31 20 32 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31  1 2}.test bind-1
ec80: 36 2e 34 36 20 7b 45 78 70 61 6e 64 50 65 72 63  6.46 {ExpandPerc
ec90: 65 6e 74 73 20 70 72 6f 63 65 64 75 72 65 7d 20  ents procedure} 
eca0: 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 73 65 74  -setup {.    set
ecb0: 20 73 61 76 65 64 42 69 6e 64 28 41 6c 6c 29 20   savedBind(All) 
ecc0: 5b 62 69 6e 64 20 61 6c 6c 20 3c 4b 65 79 3e 5d  [bind all <Key>]
ecd0: 0a 20 20 20 20 73 65 74 20 73 61 76 65 64 42 69  .    set savedBi
ece0: 6e 64 28 45 6e 74 72 79 29 20 5b 62 69 6e 64 20  nd(Entry) [bind 
ecf0: 45 6e 74 72 79 20 3c 4b 65 79 3e 5d 0a 20 20 20  Entry <Key>].   
ed00: 20 65 6e 74 72 79 20 2e 74 2e 65 0a 20 20 20 20   entry .t.e.    
ed10: 70 61 63 6b 20 2e 74 2e 65 0a 20 20 20 20 66 6f  pack .t.e.    fo
ed20: 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 65 0a  cus -force .t.e.
ed30: 20 20 20 20 66 6f 72 65 61 63 68 20 70 20 5b 65      foreach p [e
ed40: 76 65 6e 74 20 69 6e 66 6f 5d 20 7b 65 76 65 6e  vent info] {even
ed50: 74 20 64 65 6c 65 74 65 20 24 70 7d 0a 20 20 20  t delete $p}.   
ed60: 20 75 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20   update.} -body 
ed70: 7b 0a 20 20 20 20 62 69 6e 64 20 61 6c 6c 20 3c  {.    bind all <
ed80: 4b 65 79 3e 20 7b 73 65 74 20 7a 20 22 25 4d 22  Key> {set z "%M"
ed90: 7d 0a 20 20 20 20 62 69 6e 64 20 45 6e 74 72 79  }.    bind Entry
eda0: 20 3c 4b 65 79 3e 20 7b 73 65 74 20 79 20 22 25   <Key> {set y "%
edb0: 4d 22 7d 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  M"}.    bind .t.
edc0: 65 20 3c 4b 65 79 3e 20 7b 73 65 74 20 78 20 22  e <Key> {set x "
edd0: 25 4d 22 7d 0a 20 20 20 20 73 65 74 20 78 20 6e  %M"}.    set x n
ede0: 6f 6e 65 3b 20 73 65 74 20 79 20 6e 6f 6e 65 3b  one; set y none;
edf0: 20 73 65 74 20 7a 20 6e 6f 6e 65 0a 20 20 20 20   set z none.    
ee00: 65 76 65 6e 74 20 67 65 6e 20 2e 74 2e 65 20 3c  event gen .t.e <
ee10: 4b 65 79 2d 61 3e 0a 20 20 20 20 6c 69 73 74 20  Key-a>.    list 
ee20: 24 78 20 24 79 20 24 7a 0a 7d 20 2d 63 6c 65 61  $x $y $z.} -clea
ee30: 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f  nup {.    destro
ee40: 79 20 2e 74 2e 65 0a 20 20 20 20 62 69 6e 64 20  y .t.e.    bind 
ee50: 45 6e 74 72 79 20 3c 4b 65 79 3e 20 24 73 61 76  Entry <Key> $sav
ee60: 65 64 42 69 6e 64 28 45 6e 74 72 79 29 0a 20 20  edBind(Entry).  
ee70: 20 20 62 69 6e 64 20 61 6c 6c 20 3c 4b 65 79 3e    bind all <Key>
ee80: 20 24 73 61 76 65 64 42 69 6e 64 28 41 6c 6c 29   $savedBind(All)
ee90: 0a 20 20 20 20 75 6e 73 65 74 20 73 61 76 65 64  .    unset saved
eea0: 42 69 6e 64 0a 7d 20 2d 72 65 73 75 6c 74 20 7b  Bind.} -result {
eeb0: 30 20 31 20 32 7d 0a 0a 74 65 73 74 20 62 69 6e  0 1 2}..test bin
eec0: 64 2d 31 37 2e 31 20 7b 65 76 65 6e 74 20 63 6f  d-17.1 {event co
eed0: 6d 6d 61 6e 64 7d 20 2d 62 6f 64 79 20 7b 0a 20  mmand} -body {. 
eee0: 20 20 20 65 76 65 6e 74 0a 7d 20 2d 72 65 74 75     event.} -retu
eef0: 72 6e 43 6f 64 65 73 20 65 72 72 6f 72 20 2d 72  rnCodes error -r
ef00: 65 73 75 6c 74 20 7b 77 72 6f 6e 67 20 23 20 61  esult {wrong # a
ef10: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 22  rgs: should be "
ef20: 65 76 65 6e 74 20 6f 70 74 69 6f 6e 20 3f 61 72  event option ?ar
ef30: 67 3f 22 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31  g?"}.test bind-1
ef40: 37 2e 32 20 7b 65 76 65 6e 74 20 63 6f 6d 6d 61  7.2 {event comma
ef50: 6e 64 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  nd} -body {.    
ef60: 65 76 65 6e 74 20 78 79 7a 0a 7d 20 2d 72 65 74  event xyz.} -ret
ef70: 75 72 6e 43 6f 64 65 73 20 65 72 72 6f 72 20 2d  urnCodes error -
ef80: 72 65 73 75 6c 74 20 7b 62 61 64 20 6f 70 74 69  result {bad opti
ef90: 6f 6e 20 22 78 79 7a 22 3a 20 6d 75 73 74 20 62  on "xyz": must b
efa0: 65 20 61 64 64 2c 20 64 65 6c 65 74 65 2c 20 67  e add, delete, g
efb0: 65 6e 65 72 61 74 65 2c 20 6f 72 20 69 6e 66 6f  enerate, or info
efc0: 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31 37 2e 33  }.test bind-17.3
efd0: 20 7b 65 76 65 6e 74 20 63 6f 6d 6d 61 6e 64 3a   {event command:
efe0: 20 61 64 64 7d 20 2d 62 6f 64 79 20 7b 0a 20 20   add} -body {.  
eff0: 20 20 65 76 65 6e 74 20 61 64 64 0a 7d 20 2d 72    event add.} -r
f000: 65 74 75 72 6e 43 6f 64 65 73 20 65 72 72 6f 72  eturnCodes error
f010: 20 2d 72 65 73 75 6c 74 20 7b 77 72 6f 6e 67 20   -result {wrong 
f020: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
f030: 65 20 22 65 76 65 6e 74 20 61 64 64 20 76 69 72  e "event add vir
f040: 74 75 61 6c 20 73 65 71 75 65 6e 63 65 20 3f 73  tual sequence ?s
f050: 65 71 75 65 6e 63 65 20 2e 2e 2e 3f 22 7d 0a 74  equence ...?"}.t
f060: 65 73 74 20 62 69 6e 64 2d 31 37 2e 34 20 7b 65  est bind-17.4 {e
f070: 76 65 6e 74 20 63 6f 6d 6d 61 6e 64 3a 20 61 64  vent command: ad
f080: 64 20 31 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20  d 1} -body {.   
f090: 20 65 76 65 6e 74 20 64 65 6c 65 74 65 20 3c 3c   event delete <<
f0a0: 50 61 73 74 65 3e 3e 0a 20 20 20 20 65 76 65 6e  Paste>>.    even
f0b0: 74 20 61 64 64 20 3c 3c 50 61 73 74 65 3e 3e 20  t add <<Paste>> 
f0c0: 3c 43 6f 6e 74 72 6f 6c 2d 76 3e 0a 20 20 20 20  <Control-v>.    
f0d0: 65 76 65 6e 74 20 69 6e 66 6f 20 3c 3c 50 61 73  event info <<Pas
f0e0: 74 65 3e 3e 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  te>>.} -cleanup 
f0f0: 7b 0a 20 20 20 20 65 76 65 6e 74 20 64 65 6c 65  {.    event dele
f100: 74 65 20 3c 3c 50 61 73 74 65 3e 3e 20 3c 43 6f  te <<Paste>> <Co
f110: 6e 74 72 6f 6c 2d 76 3e 0a 7d 20 2d 72 65 73 75  ntrol-v>.} -resu
f120: 6c 74 20 7b 3c 43 6f 6e 74 72 6f 6c 2d 4b 65 79  lt {<Control-Key
f130: 2d 76 3e 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31  -v>}.test bind-1
f140: 37 2e 35 20 7b 65 76 65 6e 74 20 63 6f 6d 6d 61  7.5 {event comma
f150: 6e 64 3a 20 61 64 64 20 32 7d 20 2d 62 6f 64 79  nd: add 2} -body
f160: 20 7b 0a 20 20 20 20 65 76 65 6e 74 20 64 65 6c   {.    event del
f170: 65 74 65 20 3c 3c 50 61 73 74 65 3e 3e 0a 20 20  ete <<Paste>>.  
f180: 20 20 65 76 65 6e 74 20 61 64 64 20 3c 3c 50 61    event add <<Pa
f190: 73 74 65 3e 3e 20 3c 43 6f 6e 74 72 6f 6c 2d 76  ste>> <Control-v
f1a0: 3e 20 3c 42 75 74 74 6f 6e 2d 32 3e 0a 20 20 20  > <Button-2>.   
f1b0: 20 6c 73 6f 72 74 20 5b 65 76 65 6e 74 20 69 6e   lsort [event in
f1c0: 66 6f 20 3c 3c 50 61 73 74 65 3e 3e 5d 0a 7d 20  fo <<Paste>>].} 
f1d0: 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 65  -cleanup {.    e
f1e0: 76 65 6e 74 20 64 65 6c 65 74 65 20 3c 3c 50 61  vent delete <<Pa
f1f0: 73 74 65 3e 3e 20 3c 43 6f 6e 74 72 6f 6c 2d 76  ste>> <Control-v
f200: 3e 20 3c 42 75 74 74 6f 6e 2d 32 3e 0a 7d 20 2d  > <Button-2>.} -
f210: 72 65 73 75 6c 74 20 7b 3c 42 75 74 74 6f 6e 2d  result {<Button-
f220: 32 3e 20 3c 43 6f 6e 74 72 6f 6c 2d 4b 65 79 2d  2> <Control-Key-
f230: 76 3e 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 31  v>}..test bind-1
f240: 37 2e 36 20 7b 65 76 65 6e 74 20 63 6f 6d 6d 61  7.6 {event comma
f250: 6e 64 3a 20 61 64 64 20 77 69 74 68 20 65 72 72  nd: add with err
f260: 6f 72 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  or} -body {.    
f270: 65 76 65 6e 74 20 61 64 64 20 3c 3c 50 61 73 74  event add <<Past
f280: 65 3e 3e 20 3c 43 6f 6e 74 72 6f 6c 2d 76 3e 20  e>> <Control-v> 
f290: 3c 42 75 74 74 6f 6e 2d 32 3e 20 61 62 63 20 3c  <Button-2> abc <
f2a0: 78 79 7a 3e 20 3c 31 3e 0a 7d 20 2d 63 6c 65 61  xyz> <1>.} -clea
f2b0: 6e 75 70 20 7b 0a 20 20 20 20 65 76 65 6e 74 20  nup {.    event 
f2c0: 64 65 6c 65 74 65 20 3c 3c 50 61 73 74 65 3e 3e  delete <<Paste>>
f2d0: 0a 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20  .} -returnCodes 
f2e0: 65 72 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 62  error -result {b
f2f0: 61 64 20 65 76 65 6e 74 20 74 79 70 65 20 6f 72  ad event type or
f300: 20 6b 65 79 73 79 6d 20 22 78 79 7a 22 7d 20 0a   keysym "xyz"} .
f310: 74 65 73 74 20 62 69 6e 64 2d 31 37 2e 37 20 7b  test bind-17.7 {
f320: 65 76 65 6e 74 20 63 6f 6d 6d 61 6e 64 3a 20 61  event command: a
f330: 64 64 20 77 69 74 68 20 65 72 72 6f 72 7d 20 2d  dd with error} -
f340: 62 6f 64 79 20 7b 0a 20 20 20 20 65 76 65 6e 74  body {.    event
f350: 20 64 65 6c 65 74 65 20 3c 3c 50 61 73 74 65 3e   delete <<Paste>
f360: 3e 0a 20 20 20 20 63 61 74 63 68 20 7b 65 76 65  >.    catch {eve
f370: 6e 74 20 61 64 64 20 3c 3c 50 61 73 74 65 3e 3e  nt add <<Paste>>
f380: 20 3c 43 6f 6e 74 72 6f 6c 2d 76 3e 20 3c 42 75   <Control-v> <Bu
f390: 74 74 6f 6e 2d 32 3e 20 61 62 63 20 3c 78 79 7a  tton-2> abc <xyz
f3a0: 3e 20 3c 31 3e 7d 0a 20 20 20 20 6c 73 6f 72 74  > <1>}.    lsort
f3b0: 20 5b 65 76 65 6e 74 20 69 6e 66 6f 20 3c 3c 50   [event info <<P
f3c0: 61 73 74 65 3e 3e 5d 0a 7d 20 2d 63 6c 65 61 6e  aste>>].} -clean
f3d0: 75 70 20 7b 0a 20 20 20 20 65 76 65 6e 74 20 64  up {.    event d
f3e0: 65 6c 65 74 65 20 3c 3c 50 61 73 74 65 3e 3e 0a  elete <<Paste>>.
f3f0: 7d 20 2d 72 65 73 75 6c 74 20 7b 3c 42 75 74 74  } -result {<Butt
f400: 6f 6e 2d 32 3e 20 3c 43 6f 6e 74 72 6f 6c 2d 4b  on-2> <Control-K
f410: 65 79 2d 76 3e 20 61 62 63 7d 0a 0a 74 65 73 74  ey-v> abc}..test
f420: 20 62 69 6e 64 2d 31 37 2e 38 20 7b 65 76 65 6e   bind-17.8 {even
f430: 74 20 63 6f 6d 6d 61 6e 64 3a 20 64 65 6c 65 74  t command: delet
f440: 65 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 65  e} -body {.    e
f450: 76 65 6e 74 20 64 65 6c 65 74 65 0a 7d 20 2d 72  vent delete.} -r
f460: 65 74 75 72 6e 43 6f 64 65 73 20 65 72 72 6f 72  eturnCodes error
f470: 20 2d 72 65 73 75 6c 74 20 7b 77 72 6f 6e 67 20   -result {wrong 
f480: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
f490: 65 20 22 65 76 65 6e 74 20 64 65 6c 65 74 65 20  e "event delete 
f4a0: 76 69 72 74 75 61 6c 20 3f 73 65 71 75 65 6e 63  virtual ?sequenc
f4b0: 65 20 2e 2e 2e 3f 22 7d 0a 74 65 73 74 20 62 69  e ...?"}.test bi
f4c0: 6e 64 2d 31 37 2e 39 20 7b 65 76 65 6e 74 20 63  nd-17.9 {event c
f4d0: 6f 6d 6d 61 6e 64 3a 20 64 65 6c 65 74 65 20 6d  ommand: delete m
f4e0: 61 6e 79 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20  any} -body {.   
f4f0: 20 65 76 65 6e 74 20 64 65 6c 65 74 65 20 3c 3c   event delete <<
f500: 50 61 73 74 65 3e 3e 0a 20 20 20 20 65 76 65 6e  Paste>>.    even
f510: 74 20 61 64 64 20 3c 3c 50 61 73 74 65 3e 3e 20  t add <<Paste>> 
f520: 3c 33 3e 20 3c 31 3e 20 3c 32 3e 20 74 0a 20 20  <3> <1> <2> t.  
f530: 20 20 65 76 65 6e 74 20 64 65 6c 65 74 65 20 3c    event delete <
f540: 3c 50 61 73 74 65 3e 3e 20 3c 31 3e 20 3c 32 3e  <Paste>> <1> <2>
f550: 0a 20 20 20 20 6c 73 6f 72 74 20 5b 65 76 65 6e  .    lsort [even
f560: 74 20 69 6e 66 6f 20 3c 3c 50 61 73 74 65 3e 3e  t info <<Paste>>
f570: 5d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  ].} -cleanup {. 
f580: 20 20 20 65 76 65 6e 74 20 64 65 6c 65 74 65 20     event delete 
f590: 3c 3c 50 61 73 74 65 3e 3e 0a 20 20 20 20 65 76  <<Paste>>.    ev
f5a0: 65 6e 74 20 64 65 6c 65 74 65 20 3c 3c 50 61 73  ent delete <<Pas
f5b0: 74 65 3e 3e 20 3c 33 3e 20 74 0a 7d 20 2d 72 65  te>> <3> t.} -re
f5c0: 73 75 6c 74 20 7b 3c 42 75 74 74 6f 6e 2d 33 3e  sult {<Button-3>
f5d0: 20 74 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31 37   t}.test bind-17
f5e0: 2e 31 30 20 7b 65 76 65 6e 74 20 63 6f 6d 6d 61  .10 {event comma
f5f0: 6e 64 3a 20 64 65 6c 65 74 65 20 61 6c 6c 7d 20  nd: delete all} 
f600: 2d 62 6f 64 79 20 7b 0a 20 20 20 20 65 76 65 6e  -body {.    even
f610: 74 20 61 64 64 20 3c 3c 50 61 73 74 65 3e 3e 20  t add <<Paste>> 
f620: 61 20 62 0a 20 20 20 20 65 76 65 6e 74 20 64 65  a b.    event de
f630: 6c 65 74 65 20 3c 3c 50 61 73 74 65 3e 3e 0a 20  lete <<Paste>>. 
f640: 20 20 20 65 76 65 6e 74 20 69 6e 66 6f 20 3c 3c     event info <<
f650: 50 61 73 74 65 3e 3e 0a 7d 20 2d 63 6c 65 61 6e  Paste>>.} -clean
f660: 75 70 20 7b 0a 20 20 20 20 65 76 65 6e 74 20 64  up {.    event d
f670: 65 6c 65 74 65 20 3c 3c 50 61 73 74 65 3e 3e 20  elete <<Paste>> 
f680: 61 20 62 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 7d  a b.} -result {}
f690: 0a 74 65 73 74 20 62 69 6e 64 2d 31 37 2e 31 31  .test bind-17.11
f6a0: 20 7b 65 76 65 6e 74 20 63 6f 6d 6d 61 6e 64 3a   {event command:
f6b0: 20 64 65 6c 65 74 65 20 31 7d 20 2d 62 6f 64 79   delete 1} -body
f6c0: 20 7b 0a 20 20 20 20 65 76 65 6e 74 20 64 65 6c   {.    event del
f6d0: 65 74 65 20 3c 3c 50 61 73 74 65 3e 3e 0a 20 20  ete <<Paste>>.  
f6e0: 20 20 65 76 65 6e 74 20 61 64 64 20 3c 3c 50 61    event add <<Pa
f6f0: 73 74 65 3e 3e 20 61 20 62 20 63 0a 20 20 20 20  ste>> a b c.    
f700: 65 76 65 6e 74 20 64 65 6c 65 74 65 20 3c 3c 50  event delete <<P
f710: 61 73 74 65 3e 3e 20 62 0a 20 20 20 20 6c 73 6f  aste>> b.    lso
f720: 72 74 20 5b 65 76 65 6e 74 20 69 6e 66 6f 20 3c  rt [event info <
f730: 3c 50 61 73 74 65 3e 3e 5d 0a 7d 20 2d 63 6c 65  <Paste>>].} -cle
f740: 61 6e 75 70 20 7b 0a 20 20 20 20 65 76 65 6e 74  anup {.    event
f750: 20 64 65 6c 65 74 65 20 3c 3c 50 61 73 74 65 3e   delete <<Paste>
f760: 3e 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 61 20 63  >.} -result {a c
f770: 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31 37 2e 31  }.test bind-17.1
f780: 32 20 7b 65 76 65 6e 74 20 63 6f 6d 6d 61 6e 64  2 {event command
f790: 3a 20 69 6e 66 6f 20 6e 61 6d 65 7d 20 2d 62 6f  : info name} -bo
f7a0: 64 79 20 7b 0a 20 20 20 20 65 76 65 6e 74 20 64  dy {.    event d
f7b0: 65 6c 65 74 65 20 3c 3c 50 61 73 74 65 3e 3e 0a  elete <<Paste>>.
f7c0: 20 20 20 20 65 76 65 6e 74 20 61 64 64 20 3c 3c      event add <<
f7d0: 50 61 73 74 65 3e 3e 20 61 20 62 20 63 0a 20 20  Paste>> a b c.  
f7e0: 20 20 6c 73 6f 72 74 20 5b 65 76 65 6e 74 20 69    lsort [event i
f7f0: 6e 66 6f 20 3c 3c 50 61 73 74 65 3e 3e 5d 0a 7d  nfo <<Paste>>].}
f800: 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
f810: 65 76 65 6e 74 20 64 65 6c 65 74 65 20 3c 3c 50  event delete <<P
f820: 61 73 74 65 3e 3e 0a 7d 20 2d 72 65 73 75 6c 74  aste>>.} -result
f830: 20 7b 61 20 62 20 63 7d 0a 74 65 73 74 20 62 69   {a b c}.test bi
f840: 6e 64 2d 31 37 2e 31 33 20 7b 65 76 65 6e 74 20  nd-17.13 {event 
f850: 63 6f 6d 6d 61 6e 64 3a 20 69 6e 66 6f 20 61 6c  command: info al
f860: 6c 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 66  l} -body {.    f
f870: 6f 72 65 61 63 68 20 70 20 5b 65 76 65 6e 74 20  oreach p [event 
f880: 69 6e 66 6f 5d 20 7b 65 76 65 6e 74 20 64 65 6c  info] {event del
f890: 65 74 65 20 24 70 7d 0a 20 20 20 20 65 76 65 6e  ete $p}.    even
f8a0: 74 20 61 64 64 20 3c 3c 50 61 73 74 65 3e 3e 20  t add <<Paste>> 
f8b0: 61 0a 20 20 20 20 65 76 65 6e 74 20 61 64 64 20  a.    event add 
f8c0: 3c 3c 41 6c 69 76 65 3e 3e 20 62 0a 20 20 20 20  <<Alive>> b.    
f8d0: 6c 73 6f 72 74 20 5b 65 76 65 6e 74 20 69 6e 66  lsort [event inf
f8e0: 6f 5d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a  o].} -cleanup {.
f8f0: 20 20 20 20 65 76 65 6e 74 20 64 65 6c 65 74 65      event delete
f900: 20 3c 3c 50 61 73 74 65 3e 3e 0a 20 20 20 20 65   <<Paste>>.    e
f910: 76 65 6e 74 20 64 65 6c 65 74 65 20 3c 3c 41 6c  vent delete <<Al
f920: 69 76 65 3e 3e 0a 7d 20 2d 72 65 73 75 6c 74 20  ive>>.} -result 
f930: 7b 3c 3c 41 6c 69 76 65 3e 3e 20 3c 3c 50 61 73  {<<Alive>> <<Pas
f940: 74 65 3e 3e 7d 0a 0a 74 65 73 74 20 62 69 6e 64  te>>}..test bind
f950: 2d 31 37 2e 31 34 20 7b 65 76 65 6e 74 20 63 6f  -17.14 {event co
f960: 6d 6d 61 6e 64 3a 20 69 6e 66 6f 20 65 72 72 6f  mmand: info erro
f970: 72 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 65  r} -body {.    e
f980: 76 65 6e 74 20 69 6e 66 6f 20 3c 3c 50 61 73 74  vent info <<Past
f990: 65 3e 3e 20 3c 43 6f 6e 74 72 6f 6c 2d 76 3e 0a  e>> <Control-v>.
f9a0: 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65  } -returnCodes e
f9b0: 72 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 77 72  rror -result {wr
f9c0: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
f9d0: 6c 64 20 62 65 20 22 65 76 65 6e 74 20 69 6e 66  ld be "event inf
f9e0: 6f 20 3f 76 69 72 74 75 61 6c 3f 22 7d 0a 74 65  o ?virtual?"}.te
f9f0: 73 74 20 62 69 6e 64 2d 31 37 2e 31 35 20 7b 65  st bind-17.15 {e
fa00: 76 65 6e 74 20 63 6f 6d 6d 61 6e 64 3a 20 67 65  vent command: ge
fa10: 6e 65 72 61 74 65 7d 20 2d 62 6f 64 79 20 7b 0a  nerate} -body {.
fa20: 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
fa30: 74 65 0a 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65  te.} -returnCode
fa40: 73 20 65 72 72 6f 72 20 2d 72 65 73 75 6c 74 20  s error -result 
fa50: 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  {wrong # args: s
fa60: 68 6f 75 6c 64 20 62 65 20 22 65 76 65 6e 74 20  hould be "event 
fa70: 67 65 6e 65 72 61 74 65 20 77 69 6e 64 6f 77 20  generate window 
fa80: 65 76 65 6e 74 20 3f 2d 6f 70 74 69 6f 6e 20 76  event ?-option v
fa90: 61 6c 75 65 20 2e 2e 2e 3f 22 7d 0a 0a 74 65 73  alue ...?"}..tes
faa0: 74 20 62 69 6e 64 2d 31 37 2e 31 36 20 7b 65 76  t bind-17.16 {ev
fab0: 65 6e 74 20 63 6f 6d 6d 61 6e 64 3a 20 67 65 6e  ent command: gen
fac0: 65 72 61 74 65 7d 20 2d 73 65 74 75 70 20 7b 0a  erate} -setup {.
fad0: 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d      frame .t.f -
fae0: 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74  class Test -widt
faf0: 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30  h 150 -height 10
fb00: 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a  0.    pack .t.f.
fb10: 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65      focus -force
fb20: 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65   .t.f.    update
fb30: 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20  .    set x {}.} 
fb40: 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64  -body {.    bind
fb50: 20 2e 74 2e 66 20 3c 31 3e 20 22 6c 61 70 70 65   .t.f <1> "lappe
fb60: 6e 64 20 78 20 31 22 0a 20 20 20 20 65 76 65 6e  nd x 1".    even
fb70: 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
fb80: 3c 31 3e 0a 20 20 20 20 73 65 74 20 78 0a 7d 20  <1>.    set x.} 
fb90: 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64  -cleanup {.    d
fba0: 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72  estroy .t.f.} -r
fbb0: 65 73 75 6c 74 20 7b 31 7d 0a 74 65 73 74 20 62  esult {1}.test b
fbc0: 69 6e 64 2d 31 37 2e 31 37 20 7b 65 76 65 6e 74  ind-17.17 {event
fbd0: 20 63 6f 6d 6d 61 6e 64 3a 20 67 65 6e 65 72 61   command: genera
fbe0: 74 65 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20  te} -setup {.   
fbf0: 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61   frame .t.f -cla
fc00: 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
fc10: 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20  50 -height 100. 
fc20: 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20     pack .t.f.   
fc30: 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74   focus -force .t
fc40: 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 7d 20  .f.    update.} 
fc50: 2d 62 6f 64 79 20 7b 0a 20 20 20 20 65 76 65 6e  -body {.    even
fc60: 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
fc70: 3c 78 79 7a 3e 0a 7d 20 2d 63 6c 65 61 6e 75 70  <xyz>.} -cleanup
fc80: 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
fc90: 74 2e 66 0a 7d 20 20 2d 72 65 74 75 72 6e 43 6f  t.f.}  -returnCo
fca0: 64 65 73 20 65 72 72 6f 72 20 2d 72 65 73 75 6c  des error -resul
fcb0: 74 20 7b 62 61 64 20 65 76 65 6e 74 20 74 79 70  t {bad event typ
fcc0: 65 20 6f 72 20 6b 65 79 73 79 6d 20 22 78 79 7a  e or keysym "xyz
fcd0: 22 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31 37 2e  "}.test bind-17.
fce0: 31 38 20 7b 65 76 65 6e 74 20 63 6f 6d 6d 61 6e  18 {event comman
fcf0: 64 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 65  d} -body {.    e
fd00: 76 65 6e 74 20 66 6f 6f 0a 7d 20 2d 72 65 74 75  vent foo.} -retu
fd10: 72 6e 43 6f 64 65 73 20 65 72 72 6f 72 20 2d 72  rnCodes error -r
fd20: 65 73 75 6c 74 20 7b 62 61 64 20 6f 70 74 69 6f  esult {bad optio
fd30: 6e 20 22 66 6f 6f 22 3a 20 6d 75 73 74 20 62 65  n "foo": must be
fd40: 20 61 64 64 2c 20 64 65 6c 65 74 65 2c 20 67 65   add, delete, ge
fd50: 6e 65 72 61 74 65 2c 20 6f 72 20 69 6e 66 6f 7d  nerate, or info}
fd60: 0a 0a 0a 74 65 73 74 20 62 69 6e 64 2d 31 38 2e  ...test bind-18.
fd70: 31 20 7b 43 72 65 61 74 65 56 69 72 74 75 61 6c  1 {CreateVirtual
fd80: 45 76 65 6e 74 20 70 72 6f 63 65 64 75 72 65 3a  Event procedure:
fd90: 20 47 65 74 56 69 72 74 75 61 6c 45 76 65 6e 74   GetVirtualEvent
fda0: 55 69 64 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20  Uid} -body {.   
fdb0: 20 65 76 65 6e 74 20 61 64 64 20 61 73 64 20 3c   event add asd <
fdc0: 43 74 72 6c 2d 76 3e 0a 7d 20 2d 72 65 74 75 72  Ctrl-v>.} -retur
fdd0: 6e 43 6f 64 65 73 20 65 72 72 6f 72 20 2d 72 65  nCodes error -re
fde0: 73 75 6c 74 20 7b 76 69 72 74 75 61 6c 20 65 76  sult {virtual ev
fdf0: 65 6e 74 20 22 61 73 64 22 20 69 73 20 62 61 64  ent "asd" is bad
fe00: 6c 79 20 66 6f 72 6d 65 64 7d 0a 74 65 73 74 20  ly formed}.test 
fe10: 62 69 6e 64 2d 31 38 2e 32 20 7b 43 72 65 61 74  bind-18.2 {Creat
fe20: 65 56 69 72 74 75 61 6c 45 76 65 6e 74 20 70 72  eVirtualEvent pr
fe30: 6f 63 65 64 75 72 65 3a 20 46 69 6e 64 53 65 71  ocedure: FindSeq
fe40: 75 65 6e 63 65 7d 20 2d 62 6f 64 79 20 7b 0a 20  uence} -body {. 
fe50: 20 20 20 65 76 65 6e 74 20 61 64 64 20 3c 3c 61     event add <<a
fe60: 73 64 3e 3e 20 3c 43 74 72 6c 2d 76 3e 0a 7d 20  sd>> <Ctrl-v>.} 
fe70: 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65 72 72  -returnCodes err
fe80: 6f 72 20 2d 72 65 73 75 6c 74 20 7b 62 61 64 20  or -result {bad 
fe90: 65 76 65 6e 74 20 74 79 70 65 20 6f 72 20 6b 65  event type or ke
fea0: 79 73 79 6d 20 22 43 74 72 6c 22 7d 0a 74 65 73  ysym "Ctrl"}.tes
feb0: 74 20 62 69 6e 64 2d 31 38 2e 33 20 7b 43 72 65  t bind-18.3 {Cre
fec0: 61 74 65 56 69 72 74 75 61 6c 45 76 65 6e 74 20  ateVirtualEvent 
fed0: 70 72 6f 63 65 64 75 72 65 3a 20 6e 65 77 20 70  procedure: new p
fee0: 68 79 73 69 63 61 6c 7d 20 2d 62 6f 64 79 20 7b  hysical} -body {
fef0: 20 0a 20 20 20 20 65 76 65 6e 74 20 64 65 6c 65   .    event dele
ff00: 74 65 20 3c 3c 78 79 7a 3e 3e 0a 20 20 20 20 65  te <<xyz>>.    e
ff10: 76 65 6e 74 20 61 64 64 20 3c 3c 78 79 7a 3e 3e  vent add <<xyz>>
ff20: 20 3c 43 6f 6e 74 72 6f 6c 2d 76 3e 0a 20 20 20   <Control-v>.   
ff30: 20 65 76 65 6e 74 20 69 6e 66 6f 20 3c 3c 78 79   event info <<xy
ff40: 7a 3e 3e 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  z>>.} -cleanup {
ff50: 0a 20 20 20 20 65 76 65 6e 74 20 64 65 6c 65 74  .    event delet
ff60: 65 20 3c 3c 78 79 7a 3e 3e 0a 7d 20 2d 72 65 73  e <<xyz>>.} -res
ff70: 75 6c 74 20 7b 3c 43 6f 6e 74 72 6f 6c 2d 4b 65  ult {<Control-Ke
ff80: 79 2d 76 3e 7d 0a 74 65 73 74 20 62 69 6e 64 2d  y-v>}.test bind-
ff90: 31 38 2e 34 20 7b 43 72 65 61 74 65 56 69 72 74  18.4 {CreateVirt
ffa0: 75 61 6c 45 76 65 6e 74 20 70 72 6f 63 65 64 75  ualEvent procedu
ffb0: 72 65 3a 20 64 75 70 6c 69 63 61 74 65 20 70 68  re: duplicate ph
ffc0: 79 73 69 63 61 6c 7d 20 2d 62 6f 64 79 20 7b 0a  ysical} -body {.
ffd0: 20 20 20 20 65 76 65 6e 74 20 64 65 6c 65 74 65      event delete
ffe0: 20 3c 3c 78 79 7a 3e 3e 0a 20 20 20 20 65 76 65   <<xyz>>.    eve
fff0: 6e 74 20 61 64 64 20 3c 3c 78 79 7a 3e 3e 20 3c  nt add <<xyz>> <
10000 43 6f 6e 74 72 6f 6c 2d 76 3e 20 0a 20 20 20 20  Control-v> .    
10010 65 76 65 6e 74 20 61 64 64 20 3c 3c 78 79 7a 3e  event add <<xyz>
10020 3e 20 3c 43 6f 6e 74 72 6f 6c 2d 76 3e 0a 20 20  > <Control-v>.  
10030 20 20 65 76 65 6e 74 20 69 6e 66 6f 20 3c 3c 78    event info <<x
10040 79 7a 3e 3e 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  yz>>.} -cleanup 
10050 7b 0a 20 20 20 20 65 76 65 6e 74 20 64 65 6c 65  {.    event dele
10060 74 65 20 3c 3c 78 79 7a 3e 3e 0a 7d 20 2d 72 65  te <<xyz>>.} -re
10070 73 75 6c 74 20 7b 3c 43 6f 6e 74 72 6f 6c 2d 4b  sult {<Control-K
10080 65 79 2d 76 3e 7d 0a 74 65 73 74 20 62 69 6e 64  ey-v>}.test bind
10090 2d 31 38 2e 35 20 7b 43 72 65 61 74 65 56 69 72  -18.5 {CreateVir
100a0 74 75 61 6c 45 76 65 6e 74 20 70 72 6f 63 65 64  tualEvent proced
100b0 75 72 65 3a 20 65 78 69 73 74 69 6e 67 20 70 68  ure: existing ph
100c0 79 73 69 63 61 6c 7d 20 2d 62 6f 64 79 20 7b 0a  ysical} -body {.
100d0 20 20 20 20 66 6f 72 65 61 63 68 20 70 20 5b 65      foreach p [e
100e0 76 65 6e 74 20 69 6e 66 6f 5d 20 7b 65 76 65 6e  vent info] {even
100f0 74 20 64 65 6c 65 74 65 20 24 70 7d 0a 20 20 20  t delete $p}.   
10100 20 65 76 65 6e 74 20 61 64 64 20 3c 3c 78 79 7a   event add <<xyz
10110 3e 3e 20 3c 43 6f 6e 74 72 6f 6c 2d 76 3e 0a 20  >> <Control-v>. 
10120 20 20 20 65 76 65 6e 74 20 61 64 64 20 3c 3c 61     event add <<a
10130 62 63 3e 3e 20 3c 43 6f 6e 74 72 6f 6c 2d 76 3e  bc>> <Control-v>
10140 0a 20 20 20 20 6c 69 73 74 20 5b 6c 73 6f 72 74  .    list [lsort
10150 20 5b 65 76 65 6e 74 20 69 6e 66 6f 5d 5d 20 5b   [event info]] [
10160 65 76 65 6e 74 20 69 6e 66 6f 20 3c 3c 78 79 7a  event info <<xyz
10170 3e 3e 5d 20 5b 65 76 65 6e 74 20 69 6e 66 6f 20  >>] [event info 
10180 3c 3c 61 62 63 3e 3e 5d 0a 7d 20 2d 63 6c 65 61  <<abc>>].} -clea
10190 6e 75 70 20 7b 0a 20 20 20 20 65 76 65 6e 74 20  nup {.    event 
101a0 64 65 6c 65 74 65 20 3c 3c 78 79 7a 3e 3e 0a 20  delete <<xyz>>. 
101b0 20 20 20 65 76 65 6e 74 20 64 65 6c 65 74 65 20     event delete 
101c0 3c 3c 61 62 63 3e 3e 0a 7d 20 2d 72 65 73 75 6c  <<abc>>.} -resul
101d0 74 20 7b 7b 3c 3c 61 62 63 3e 3e 20 3c 3c 78 79  t {{<<abc>> <<xy
101e0 7a 3e 3e 7d 20 3c 43 6f 6e 74 72 6f 6c 2d 4b 65  z>>} <Control-Ke
101f0 79 2d 76 3e 20 3c 43 6f 6e 74 72 6f 6c 2d 4b 65  y-v> <Control-Ke
10200 79 2d 76 3e 7d 0a 74 65 73 74 20 62 69 6e 64 2d  y-v>}.test bind-
10210 31 38 2e 36 20 7b 43 72 65 61 74 65 56 69 72 74  18.6 {CreateVirt
10220 75 61 6c 45 76 65 6e 74 20 70 72 6f 63 65 64 75  ualEvent procedu
10230 72 65 3a 20 6e 65 77 20 76 69 72 74 75 61 6c 7d  re: new virtual}
10240 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 66 6f 72   -body {.    for
10250 65 61 63 68 20 70 20 5b 65 76 65 6e 74 20 69 6e  each p [event in
10260 66 6f 5d 20 7b 65 76 65 6e 74 20 64 65 6c 65 74  fo] {event delet
10270 65 20 24 70 7d 0a 20 20 20 20 65 76 65 6e 74 20  e $p}.    event 
10280 61 64 64 20 3c 3c 78 79 7a 3e 3e 20 3c 43 6f 6e  add <<xyz>> <Con
10290 74 72 6f 6c 2d 76 3e 0a 20 20 20 20 6c 69 73 74  trol-v>.    list
102a0 20 5b 65 76 65 6e 74 20 69 6e 66 6f 5d 20 5b 65   [event info] [e
102b0 76 65 6e 74 20 69 6e 66 6f 20 3c 3c 78 79 7a 3e  vent info <<xyz>
102c0 3e 5d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a  >].} -cleanup {.
102d0 20 20 20 20 65 76 65 6e 74 20 64 65 6c 65 74 65      event delete
102e0 20 3c 3c 61 62 63 3e 3e 0a 7d 20 2d 72 65 73 75   <<abc>>.} -resu
102f0 6c 74 20 7b 3c 3c 78 79 7a 3e 3e 20 3c 43 6f 6e  lt {<<xyz>> <Con
10300 74 72 6f 6c 2d 4b 65 79 2d 76 3e 7d 0a 74 65 73  trol-Key-v>}.tes
10310 74 20 62 69 6e 64 2d 31 38 2e 37 20 7b 43 72 65  t bind-18.7 {Cre
10320 61 74 65 56 69 72 74 75 61 6c 45 76 65 6e 74 20  ateVirtualEvent 
10330 70 72 6f 63 65 64 75 72 65 3a 20 65 78 69 73 74  procedure: exist
10340 69 6e 67 20 76 69 72 74 75 61 6c 7d 20 2d 62 6f  ing virtual} -bo
10350 64 79 20 7b 0a 20 20 20 20 66 6f 72 65 61 63 68  dy {.    foreach
10360 20 70 20 5b 65 76 65 6e 74 20 69 6e 66 6f 5d 20   p [event info] 
10370 7b 65 76 65 6e 74 20 64 65 6c 65 74 65 20 24 70  {event delete $p
10380 7d 0a 20 20 20 20 65 76 65 6e 74 20 61 64 64 20  }.    event add 
10390 3c 3c 78 79 7a 3e 3e 20 3c 43 6f 6e 74 72 6f 6c  <<xyz>> <Control
103a0 2d 76 3e 0a 20 20 20 20 65 76 65 6e 74 20 61 64  -v>.    event ad
103b0 64 20 3c 3c 78 79 7a 3e 3e 20 3c 42 75 74 74 6f  d <<xyz>> <Butto
103c0 6e 2d 32 3e 0a 20 20 20 20 6c 69 73 74 20 5b 65  n-2>.    list [e
103d0 76 65 6e 74 20 69 6e 66 6f 5d 20 5b 6c 73 6f 72  vent info] [lsor
103e0 74 20 5b 65 76 65 6e 74 20 69 6e 66 6f 20 3c 3c  t [event info <<
103f0 78 79 7a 3e 3e 5d 5d 0a 7d 20 2d 63 6c 65 61 6e  xyz>>]].} -clean
10400 75 70 20 7b 0a 20 20 20 20 65 76 65 6e 74 20 64  up {.    event d
10410 65 6c 65 74 65 20 3c 3c 78 79 7a 3e 3e 0a 7d 20  elete <<xyz>>.} 
10420 2d 72 65 73 75 6c 74 20 7b 3c 3c 78 79 7a 3e 3e  -result {<<xyz>>
10430 20 7b 3c 42 75 74 74 6f 6e 2d 32 3e 20 3c 43 6f   {<Button-2> <Co
10440 6e 74 72 6f 6c 2d 4b 65 79 2d 76 3e 7d 7d 0a 0a  ntrol-Key-v>}}..
10450 0a 74 65 73 74 20 62 69 6e 64 2d 31 39 2e 31 20  .test bind-19.1 
10460 7b 44 65 6c 65 74 65 56 69 72 74 75 61 6c 45 76  {DeleteVirtualEv
10470 65 6e 74 20 70 72 6f 63 65 64 75 72 65 3a 20 47  ent procedure: G
10480 65 74 56 69 72 74 75 61 6c 45 76 65 6e 74 55 69  etVirtualEventUi
10490 64 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 65  d} -body {.    e
104a0 76 65 6e 74 20 61 64 64 20 78 79 7a 20 7b 7d 0a  vent add xyz {}.
104b0 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65  } -returnCodes e
104c0 72 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 76 69  rror -result {vi
104d0 72 74 75 61 6c 20 65 76 65 6e 74 20 22 78 79 7a  rtual event "xyz
104e0 22 20 69 73 20 62 61 64 6c 79 20 66 6f 72 6d 65  " is badly forme
104f0 64 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31 39 2e  d}.test bind-19.
10500 32 20 7b 44 65 6c 65 74 65 56 69 72 74 75 61 6c  2 {DeleteVirtual
10510 45 76 65 6e 74 20 70 72 6f 63 65 64 75 72 65 3a  Event procedure:
10520 20 6e 6f 6e 2d 65 78 69 73 74 65 6e 74 20 76 69   non-existent vi
10530 72 74 75 61 6c 7d 20 2d 73 65 74 75 70 20 7b 0a  rtual} -setup {.
10540 20 20 20 20 66 6f 72 65 61 63 68 20 70 20 5b 65      foreach p [e
10550 76 65 6e 74 20 69 6e 66 6f 5d 20 7b 65 76 65 6e  vent info] {even
10560 74 20 64 65 6c 65 74 65 20 24 70 7d 0a 7d 20 2d  t delete $p}.} -
10570 62 6f 64 79 20 7b 0a 20 20 20 20 65 76 65 6e 74  body {.    event
10580 20 64 65 6c 65 74 65 20 3c 3c 78 79 7a 3e 3e 0a   delete <<xyz>>.
10590 20 20 20 20 65 76 65 6e 74 20 69 6e 66 6f 0a 7d      event info.}
105a0 20 2d 72 65 73 75 6c 74 20 7b 7d 0a 74 65 73 74   -result {}.test
105b0 20 62 69 6e 64 2d 31 39 2e 33 20 7b 44 65 6c 65   bind-19.3 {Dele
105c0 74 65 56 69 72 74 75 61 6c 45 76 65 6e 74 20 70  teVirtualEvent p
105d0 72 6f 63 65 64 75 72 65 3a 20 64 65 6c 65 74 65  rocedure: delete
105e0 20 31 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20   1} -setup {.   
105f0 20 65 76 65 6e 74 20 64 65 6c 65 74 65 20 3c 3c   event delete <<
10600 78 79 7a 3e 3e 0a 7d 20 2d 62 6f 64 79 20 7b 0a  xyz>>.} -body {.
10610 20 20 20 20 65 76 65 6e 74 20 61 64 64 20 3c 3c      event add <<
10620 78 79 7a 3e 3e 20 3c 43 6f 6e 74 72 6f 6c 2d 76  xyz>> <Control-v
10630 3e 0a 20 20 20 20 65 76 65 6e 74 20 64 65 6c 65  >.    event dele
10640 74 65 20 3c 3c 78 79 7a 3e 3e 20 3c 43 6f 6e 74  te <<xyz>> <Cont
10650 72 6f 6c 2d 76 3e 0a 20 20 20 20 65 76 65 6e 74  rol-v>.    event
10660 20 69 6e 66 6f 20 3c 3c 78 79 7a 3e 3e 0a 7d 20   info <<xyz>>.} 
10670 2d 72 65 73 75 6c 74 20 7b 7d 0a 74 65 73 74 20  -result {}.test 
10680 62 69 6e 64 2d 31 39 2e 34 20 7b 44 65 6c 65 74  bind-19.4 {Delet
10690 65 56 69 72 74 75 61 6c 45 76 65 6e 74 20 70 72  eVirtualEvent pr
106a0 6f 63 65 64 75 72 65 3a 20 64 65 6c 65 74 65 20  ocedure: delete 
106b0 31 2c 20 6e 6f 74 20 6f 77 6e 65 64 7d 20 2d 73  1, not owned} -s
106c0 65 74 75 70 20 7b 0a 20 20 20 20 65 76 65 6e 74  etup {.    event
106d0 20 64 65 6c 65 74 65 20 3c 3c 78 79 7a 3e 3e 0a   delete <<xyz>>.
106e0 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 65 76  } -body {.    ev
106f0 65 6e 74 20 61 64 64 20 3c 3c 78 79 7a 3e 3e 20  ent add <<xyz>> 
10700 3c 43 6f 6e 74 72 6f 6c 2d 76 3e 0a 20 20 20 20  <Control-v>.    
10710 65 76 65 6e 74 20 64 65 6c 65 74 65 20 3c 3c 78  event delete <<x
10720 79 7a 3e 3e 20 3c 42 75 74 74 6f 6e 2d 31 3e 0a  yz>> <Button-1>.
10730 20 20 20 20 65 76 65 6e 74 20 69 6e 66 6f 20 3c      event info <
10740 3c 78 79 7a 3e 3e 0a 7d 20 2d 72 65 73 75 6c 74  <xyz>>.} -result
10750 20 7b 3c 43 6f 6e 74 72 6f 6c 2d 4b 65 79 2d 76   {<Control-Key-v
10760 3e 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31 39 2e  >}.test bind-19.
10770 35 20 7b 44 65 6c 65 74 65 56 69 72 74 75 61 6c  5 {DeleteVirtual
10780 45 76 65 6e 74 20 70 72 6f 63 65 64 75 72 65 3a  Event procedure:
10790 20 64 65 6c 65 74 65 20 31 2c 20 62 61 64 6c 79   delete 1, badly
107a0 20 66 6f 72 6d 65 64 7d 20 2d 62 6f 64 79 20 7b   formed} -body {
107b0 0a 20 20 20 20 65 76 65 6e 74 20 61 64 64 20 3c  .    event add <
107c0 3c 78 79 7a 3e 3e 20 3c 43 6f 6e 74 72 6f 6c 2d  <xyz>> <Control-
107d0 76 3e 0a 20 20 20 20 65 76 65 6e 74 20 64 65 6c  v>.    event del
107e0 65 74 65 20 3c 3c 78 79 7a 3e 3e 20 3c 78 79 7a  ete <<xyz>> <xyz
107f0 3e 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  >.} -cleanup {. 
10800 20 20 20 65 76 65 6e 74 20 64 65 6c 65 74 65 20     event delete 
10810 3c 3c 78 79 7a 3e 3e 0a 7d 20 2d 72 65 74 75 72  <<xyz>>.} -retur
10820 6e 43 6f 64 65 73 20 65 72 72 6f 72 20 2d 72 65  nCodes error -re
10830 73 75 6c 74 20 7b 62 61 64 20 65 76 65 6e 74 20  sult {bad event 
10840 74 79 70 65 20 6f 72 20 6b 65 79 73 79 6d 20 22  type or keysym "
10850 78 79 7a 22 7d 0a 74 65 73 74 20 62 69 6e 64 2d  xyz"}.test bind-
10860 31 39 2e 36 20 7b 44 65 6c 65 74 65 56 69 72 74  19.6 {DeleteVirt
10870 75 61 6c 45 76 65 6e 74 20 70 72 6f 63 65 64 75  ualEvent procedu
10880 72 65 3a 20 64 65 6c 65 74 65 20 31 2c 20 62 61  re: delete 1, ba
10890 64 6c 79 20 66 6f 72 6d 65 64 7d 20 2d 62 6f 64  dly formed} -bod
108a0 79 20 7b 0a 20 20 20 20 65 76 65 6e 74 20 61 64  y {.    event ad
108b0 64 20 3c 3c 78 79 7a 3e 3e 20 3c 43 6f 6e 74 72  d <<xyz>> <Contr
108c0 6f 6c 2d 76 3e 0a 20 20 20 20 65 76 65 6e 74 20  ol-v>.    event 
108d0 64 65 6c 65 74 65 20 3c 3c 78 79 7a 3e 3e 20 3c  delete <<xyz>> <
108e0 3c 50 61 73 74 65 3e 3e 0a 7d 20 2d 63 6c 65 61  <Paste>>.} -clea
108f0 6e 75 70 20 7b 0a 20 20 20 20 65 76 65 6e 74 20  nup {.    event 
10900 64 65 6c 65 74 65 20 3c 3c 78 79 7a 3e 3e 0a 7d  delete <<xyz>>.}
10910 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65 72   -returnCodes er
10920 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 76 69 72  ror -result {vir
10930 74 75 61 6c 20 65 76 65 6e 74 20 6e 6f 74 20 61  tual event not a
10940 6c 6c 6f 77 65 64 20 69 6e 20 64 65 66 69 6e 69  llowed in defini
10950 74 69 6f 6e 20 6f 66 20 61 6e 6f 74 68 65 72 20  tion of another 
10960 76 69 72 74 75 61 6c 20 65 76 65 6e 74 7d 0a 74  virtual event}.t
10970 65 73 74 20 62 69 6e 64 2d 31 39 2e 37 20 7b 44  est bind-19.7 {D
10980 65 6c 65 74 65 56 69 72 74 75 61 6c 45 76 65 6e  eleteVirtualEven
10990 74 20 70 72 6f 63 65 64 75 72 65 3a 20 6f 77 6e  t procedure: own
109a0 73 20 31 2c 20 64 65 6c 65 74 65 20 61 6c 6c 7d  s 1, delete all}
109b0 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 66 6f 72   -body {.    for
109c0 65 61 63 68 20 70 20 5b 65 76 65 6e 74 20 69 6e  each p [event in
109d0 66 6f 5d 20 7b 65 76 65 6e 74 20 64 65 6c 65 74  fo] {event delet
109e0 65 20 24 70 7d 0a 20 20 20 20 65 76 65 6e 74 20  e $p}.    event 
109f0 61 64 64 20 3c 3c 78 79 7a 3e 3e 20 3c 43 6f 6e  add <<xyz>> <Con
10a00 74 72 6f 6c 2d 76 3e 0a 20 20 20 20 65 76 65 6e  trol-v>.    even
10a10 74 20 64 65 6c 65 74 65 20 3c 3c 78 79 7a 3e 3e  t delete <<xyz>>
10a20 0a 20 20 20 20 65 76 65 6e 74 20 69 6e 66 6f 20  .    event info 
10a30 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 7d 0a 74 65  .} -result {}.te
10a40 73 74 20 62 69 6e 64 2d 31 39 2e 38 20 7b 44 65  st bind-19.8 {De
10a50 6c 65 74 65 56 69 72 74 75 61 6c 45 76 65 6e 74  leteVirtualEvent
10a60 20 70 72 6f 63 65 64 75 72 65 3a 20 6f 77 6e 73   procedure: owns
10a70 20 31 2c 20 64 65 6c 65 74 65 20 31 7d 20 2d 62   1, delete 1} -b
10a80 6f 64 79 20 7b 0a 20 20 20 20 66 6f 72 65 61 63  ody {.    foreac
10a90 68 20 70 20 5b 65 76 65 6e 74 20 69 6e 66 6f 5d  h p [event info]
10aa0 20 7b 65 76 65 6e 74 20 64 65 6c 65 74 65 20 24   {event delete $
10ab0 70 7d 0a 20 20 20 20 65 76 65 6e 74 20 61 64 64  p}.    event add
10ac0 20 3c 3c 78 79 7a 3e 3e 20 3c 43 6f 6e 74 72 6f   <<xyz>> <Contro
10ad0 6c 2d 76 3e 0a 20 20 20 20 65 76 65 6e 74 20 64  l-v>.    event d
10ae0 65 6c 65 74 65 20 3c 3c 78 79 7a 3e 3e 20 3c 43  elete <<xyz>> <C
10af0 6f 6e 74 72 6f 6c 2d 76 3e 0a 20 20 20 20 65 76  ontrol-v>.    ev
10b00 65 6e 74 20 69 6e 66 6f 20 0a 7d 20 2d 72 65 73  ent info .} -res
10b10 75 6c 74 20 7b 7d 0a 74 65 73 74 20 62 69 6e 64  ult {}.test bind
10b20 2d 31 39 2e 39 20 7b 44 65 6c 65 74 65 56 69 72  -19.9 {DeleteVir
10b30 74 75 61 6c 45 76 65 6e 74 20 70 72 6f 63 65 64  tualEvent proced
10b40 75 72 65 3a 20 6f 77 6e 73 20 6d 61 6e 79 2c 20  ure: owns many, 
10b50 64 65 6c 65 74 65 20 61 6c 6c 7d 20 2d 62 6f 64  delete all} -bod
10b60 79 20 7b 0a 20 20 20 20 66 6f 72 65 61 63 68 20  y {.    foreach 
10b70 70 20 5b 65 76 65 6e 74 20 69 6e 66 6f 5d 20 7b  p [event info] {
10b80 65 76 65 6e 74 20 64 65 6c 65 74 65 20 24 70 7d  event delete $p}
10b90 0a 20 20 20 20 65 76 65 6e 74 20 61 64 64 20 3c  .    event add <
10ba0 3c 78 79 7a 3e 3e 20 3c 43 6f 6e 74 72 6f 6c 2d  <xyz>> <Control-
10bb0 76 3e 20 3c 43 6f 6e 74 72 6f 6c 2d 77 3e 20 3c  v> <Control-w> <
10bc0 43 6f 6e 74 72 6f 6c 2d 78 3e 0a 20 20 20 20 65  Control-x>.    e
10bd0 76 65 6e 74 20 64 65 6c 65 74 65 20 3c 3c 78 79  vent delete <<xy
10be0 7a 3e 3e 0a 20 20 20 20 65 76 65 6e 74 20 69 6e  z>>.    event in
10bf0 66 6f 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 7d 0a  fo.} -result {}.
10c00 74 65 73 74 20 62 69 6e 64 2d 31 39 2e 31 30 20  test bind-19.10 
10c10 7b 44 65 6c 65 74 65 56 69 72 74 75 61 6c 45 76  {DeleteVirtualEv
10c20 65 6e 74 20 70 72 6f 63 65 64 75 72 65 3a 20 6f  ent procedure: o
10c30 77 6e 73 20 6d 61 6e 79 2c 20 64 65 6c 65 74 65  wns many, delete
10c40 20 31 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20   1} -body {.    
10c50 65 76 65 6e 74 20 64 65 6c 65 74 65 20 3c 3c 78  event delete <<x
10c60 79 7a 3e 3e 0a 20 20 20 20 65 76 65 6e 74 20 61  yz>>.    event a
10c70 64 64 20 3c 3c 78 79 7a 3e 3e 20 3c 43 6f 6e 74  dd <<xyz>> <Cont
10c80 72 6f 6c 2d 76 3e 20 3c 43 6f 6e 74 72 6f 6c 2d  rol-v> <Control-
10c90 77 3e 20 3c 43 6f 6e 74 72 6f 6c 2d 78 3e 0a 20  w> <Control-x>. 
10ca0 20 20 20 65 76 65 6e 74 20 64 65 6c 65 74 65 20     event delete 
10cb0 3c 3c 78 79 7a 3e 3e 20 3c 43 6f 6e 74 72 6f 6c  <<xyz>> <Control
10cc0 2d 77 3e 0a 20 20 20 20 6c 73 6f 72 74 20 5b 65  -w>.    lsort [e
10cd0 76 65 6e 74 20 69 6e 66 6f 20 3c 3c 78 79 7a 3e  vent info <<xyz>
10ce0 3e 5d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a  >].} -cleanup {.
10cf0 20 20 20 20 65 76 65 6e 74 20 64 65 6c 65 74 65      event delete
10d00 20 3c 3c 78 79 7a 3e 3e 0a 7d 20 2d 72 65 73 75   <<xyz>>.} -resu
10d10 6c 74 20 7b 3c 43 6f 6e 74 72 6f 6c 2d 4b 65 79  lt {<Control-Key
10d20 2d 76 3e 20 3c 43 6f 6e 74 72 6f 6c 2d 4b 65 79  -v> <Control-Key
10d30 2d 78 3e 7d 0a 74 65 73 74 20 62 69 6e 64 2d 31  -x>}.test bind-1
10d40 39 2e 31 31 20 7b 44 65 6c 65 74 65 56 69 72 74  9.11 {DeleteVirt
10d50 75 61 6c 45 76 65 6e 74 20 70 72 6f 63 65 64 75  ualEvent procedu
10d60 72 65 3a 20 6f 77 6e 65 64 20 62 79 20 31 2c 20  re: owned by 1, 
10d70 6f 6e 6c 79 7d 20 2d 73 65 74 75 70 20 7b 0a 20  only} -setup {. 
10d80 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63     frame .t.f -c
10d90 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
10da0 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
10db0 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20  .    pack .t.f. 
10dc0 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20     focus -force 
10dd0 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a  .t.f.    update.
10de0 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 20 20 20      set x {}.   
10df0 20 65 76 65 6e 74 20 64 65 6c 65 74 65 20 3c 3c   event delete <<
10e00 78 79 7a 3e 3e 0a 7d 20 2d 62 6f 64 79 20 7b 0a  xyz>>.} -body {.
10e10 20 20 20 20 65 76 65 6e 74 20 61 64 64 20 3c 3c      event add <<
10e20 78 79 7a 3e 3e 20 3c 42 75 74 74 6f 6e 2d 32 3e  xyz>> <Button-2>
10e30 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c  .    bind .t.f <
10e40 3c 78 79 7a 3e 3e 20 7b 6c 61 70 70 65 6e 64 20  <xyz>> {lappend 
10e50 78 20 25 23 7d 0a 20 20 20 20 65 76 65 6e 74 20  x %#}.    event 
10e60 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42  generate .t.f <B
10e70 75 74 74 6f 6e 2d 32 3e 20 2d 73 65 72 69 61 6c  utton-2> -serial
10e80 20 31 30 31 0a 20 20 20 20 65 76 65 6e 74 20 67   101.    event g
10e90 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75  enerate .t.f <Bu
10ea0 74 74 6f 6e 52 65 6c 65 61 73 65 2d 32 3e 0a 20  ttonRelease-2>. 
10eb0 20 20 20 65 76 65 6e 74 20 64 65 6c 65 74 65 20     event delete 
10ec0 3c 3c 78 79 7a 3e 3e 0a 20 20 20 20 65 76 65 6e  <<xyz>>.    even
10ed0 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
10ee0 3c 42 75 74 74 6f 6e 2d 32 3e 20 2d 73 65 72 69  <Button-2> -seri
10ef0 61 6c 20 31 30 32 0a 20 20 20 20 65 76 65 6e 74  al 102.    event
10f00 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
10f10 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 2d 32 3e  ButtonRelease-2>
10f20 0a 20 20 20 20 73 65 74 20 78 0a 7d 20 2d 63 6c  .    set x.} -cl
10f30 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74  eanup {.    dest
10f40 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75  roy .t.f.} -resu
10f50 6c 74 20 7b 31 30 31 7d 0a 74 65 73 74 20 62 69  lt {101}.test bi
10f60 6e 64 2d 31 39 2e 31 32 20 7b 44 65 6c 65 74 65  nd-19.12 {Delete
10f70 56 69 72 74 75 61 6c 45 76 65 6e 74 20 70 72 6f  VirtualEvent pro
10f80 63 65 64 75 72 65 3a 20 6f 77 6e 65 64 20 62 79  cedure: owned by
10f90 20 31 2c 20 66 69 72 73 74 20 69 6e 20 63 68 61   1, first in cha
10fa0 69 6e 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20  in} -setup {.   
10fb0 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61   frame .t.f -cla
10fc0 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
10fd0 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20  50 -height 100. 
10fe0 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20     pack .t.f.   
10ff0 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74   focus -force .t
11000 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20  .f.    update.  
11010 20 20 73 65 74 20 78 20 7b 7d 0a 20 20 20 20 65    set x {}.    e
11020 76 65 6e 74 20 64 65 6c 65 74 65 20 3c 3c 78 79  vent delete <<xy
11030 7a 3e 3e 0a 20 20 20 20 65 76 65 6e 74 20 64 65  z>>.    event de
11040 6c 65 74 65 20 3c 3c 61 62 63 3e 3e 0a 7d 20 2d  lete <<abc>>.} -
11050 62 6f 64 79 20 7b 0a 20 20 20 20 65 76 65 6e 74  body {.    event
11060 20 61 64 64 20 3c 3c 61 62 63 3e 3e 20 3c 43 6f   add <<abc>> <Co
11070 6e 74 72 6f 6c 2d 42 75 74 74 6f 6e 2d 32 3e 0a  ntrol-Button-2>.
11080 20 20 20 20 65 76 65 6e 74 20 61 64 64 20 3c 3c      event add <<
11090 78 79 7a 3e 3e 20 3c 42 75 74 74 6f 6e 2d 32 3e  xyz>> <Button-2>
110a0 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c  .    bind .t.f <
110b0 3c 78 79 7a 3e 3e 20 7b 6c 61 70 70 65 6e 64 20  <xyz>> {lappend 
110c0 78 20 78 79 7a 7d 0a 20 20 20 20 62 69 6e 64 20  x xyz}.    bind 
110d0 2e 74 2e 66 20 3c 3c 61 62 63 3e 3e 20 7b 6c 61  .t.f <<abc>> {la
110e0 70 70 65 6e 64 20 78 20 61 62 63 7d 0a 20 20 20  ppend x abc}.   
110f0 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
11100 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 32 3e 0a  .t.f <Button-2>.
11110 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
11120 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52  te .t.f <ButtonR
11130 65 6c 65 61 73 65 2d 32 3e 0a 20 20 20 20 65 76  elease-2>.    ev
11140 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
11150 66 20 3c 43 6f 6e 74 72 6f 6c 2d 42 75 74 74 6f  f <Control-Butto
11160 6e 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74 20 67  n-2>.    event g
11170 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 43 6f  enerate .t.f <Co
11180 6e 74 72 6f 6c 2d 42 75 74 74 6f 6e 52 65 6c 65  ntrol-ButtonRele
11190 61 73 65 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74  ase-2>.    event
111a0 20 64 65 6c 65 74 65 20 3c 3c 78 79 7a 3e 3e 20   delete <<xyz>> 
111b0 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
111c0 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e  ate .t.f <Button
111d0 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65  -2>.    event ge
111e0 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74  nerate .t.f <But
111f0 74 6f 6e 52 65 6c 65 61 73 65 2d 32 3e 0a 20 20  tonRelease-2>.  
11200 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
11210 20 2e 74 2e 66 20 3c 43 6f 6e 74 72 6f 6c 2d 42   .t.f <Control-B
11220 75 74 74 6f 6e 2d 32 3e 0a 20 20 20 20 65 76 65  utton-2>.    eve
11230 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
11240 20 3c 43 6f 6e 74 72 6f 6c 2d 42 75 74 74 6f 6e   <Control-Button
11250 52 65 6c 65 61 73 65 2d 32 3e 0a 20 20 20 20 6c  Release-2>.    l
11260 69 73 74 20 24 78 20 5b 65 76 65 6e 74 20 69 6e  ist $x [event in
11270 66 6f 20 3c 3c 61 62 63 3e 3e 5d 0a 7d 20 2d 63  fo <<abc>>].} -c
11280 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73  leanup {.    des
11290 74 72 6f 79 20 2e 74 2e 66 0a 20 20 20 20 65 76  troy .t.f.    ev
112a0 65 6e 74 20 64 65 6c 65 74 65 20 3c 3c 61 62 63  ent delete <<abc
112b0 3e 3e 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 7b 78  >>.} -result {{x
112c0 79 7a 20 61 62 63 20 61 62 63 7d 20 3c 43 6f 6e  yz abc abc} <Con
112d0 74 72 6f 6c 2d 42 75 74 74 6f 6e 2d 32 3e 7d 0a  trol-Button-2>}.
112e0 74 65 73 74 20 62 69 6e 64 2d 31 39 2e 31 33 20  test bind-19.13 
112f0 7b 44 65 6c 65 74 65 56 69 72 74 75 61 6c 45 76  {DeleteVirtualEv
11300 65 6e 74 20 70 72 6f 63 65 64 75 72 65 3a 20 6f  ent procedure: o
11310 77 6e 65 64 20 62 79 20 31 2c 20 73 65 63 6f 6e  wned by 1, secon
11320 64 20 69 6e 20 63 68 61 69 6e 7d 20 2d 73 65 74  d in chain} -set
11330 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e  up {.    frame .
11340 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20  t.f -class Test 
11350 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67  -width 150 -heig
11360 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20  ht 100.    pack 
11370 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d  .t.f.    focus -
11380 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75  force .t.f.    u
11390 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20  pdate.    set x 
113a0 7b 7d 0a 20 20 20 20 65 76 65 6e 74 20 64 65 6c  {}.    event del
113b0 65 74 65 20 3c 3c 64 65 66 3e 3e 0a 20 20 20 20  ete <<def>>.    
113c0 65 76 65 6e 74 20 64 65 6c 65 74 65 20 3c 3c 78  event delete <<x
113d0 79 7a 3e 3e 0a 20 20 20 20 65 76 65 6e 74 20 64  yz>>.    event d
113e0 65 6c 65 74 65 20 3c 3c 61 62 63 3e 3e 0a 7d 20  elete <<abc>>.} 
113f0 2d 62 6f 64 79 20 7b 0a 20 20 20 20 65 76 65 6e  -body {.    even
11400 74 20 61 64 64 20 3c 3c 64 65 66 3e 3e 20 3c 53  t add <<def>> <S
11410 68 69 66 74 2d 42 75 74 74 6f 6e 2d 32 3e 0a 20  hift-Button-2>. 
11420 20 20 20 65 76 65 6e 74 20 61 64 64 20 3c 3c 78     event add <<x
11430 79 7a 3e 3e 20 3c 42 75 74 74 6f 6e 2d 32 3e 0a  yz>> <Button-2>.
11440 20 20 20 20 65 76 65 6e 74 20 61 64 64 20 3c 3c      event add <<
11450 61 62 63 3e 3e 20 3c 43 6f 6e 74 72 6f 6c 2d 42  abc>> <Control-B
11460 75 74 74 6f 6e 2d 32 3e 0a 20 20 20 20 62 69 6e  utton-2>.    bin
11470 64 20 2e 74 2e 66 20 3c 3c 78 79 7a 3e 3e 20 7b  d .t.f <<xyz>> {
11480 6c 61 70 70 65 6e 64 20 78 20 78 79 7a 7d 0a 20  lappend x xyz}. 
11490 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 3c 61     bind .t.f <<a
114a0 62 63 3e 3e 20 7b 6c 61 70 70 65 6e 64 20 78 20  bc>> {lappend x 
114b0 61 62 63 7d 0a 20 20 20 20 62 69 6e 64 20 2e 74  abc}.    bind .t
114c0 2e 66 20 3c 3c 64 65 66 3e 3e 20 7b 6c 61 70 70  .f <<def>> {lapp
114d0 65 6e 64 20 78 20 64 65 66 7d 0a 20 20 20 20 65  end x def}.    e
114e0 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
114f0 2e 66 20 3c 42 75 74 74 6f 6e 2d 32 3e 0a 20 20  .f <Button-2>.  
11500 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
11510 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65 6c   .t.f <ButtonRel
11520 65 61 73 65 2d 32 3e 0a 20 20 20 20 65 76 65 6e  ease-2>.    even
11530 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
11540 3c 43 6f 6e 74 72 6f 6c 2d 42 75 74 74 6f 6e 2d  <Control-Button-
11550 32 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e  2>.    event gen
11560 65 72 61 74 65 20 2e 74 2e 66 20 3c 43 6f 6e 74  erate .t.f <Cont
11570 72 6f 6c 2d 42 75 74 74 6f 6e 52 65 6c 65 61 73  rol-ButtonReleas
11580 65 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74 20 67  e-2>.    event g
11590 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 53 68  enerate .t.f <Sh
115a0 69 66 74 2d 42 75 74 74 6f 6e 2d 32 3e 0a 20 20  ift-Button-2>.  
115b0 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
115c0 20 2e 74 2e 66 20 3c 53 68 69 66 74 2d 42 75 74   .t.f <Shift-But
115d0 74 6f 6e 52 65 6c 65 61 73 65 2d 32 3e 0a 20 20  tonRelease-2>.  
115e0 20 20 65 76 65 6e 74 20 64 65 6c 65 74 65 20 3c    event delete <
115f0 3c 78 79 7a 3e 3e 0a 20 20 20 20 65 76 65 6e 74  <xyz>>.    event
11600 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
11610 42 75 74 74 6f 6e 2d 32 3e 0a 20 20 20 20 65 76  Button-2>.    ev
11620 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
11630 66 20 3c 43 6f 6e 74 72 6f 6c 2d 42 75 74 74 6f  f <Control-Butto
11640 6e 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74 20 67  n-2>.    event g
11650 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 53 68  enerate .t.f <Sh
11660 69 66 74 2d 42 75 74 74 6f 6e 2d 32 3e 0a 20 20  ift-Button-2>.  
11670 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
11680 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65 6c   .t.f <ButtonRel
11690 65 61 73 65 2d 32 3e 0a 20 20 20 20 65 76 65 6e  ease-2>.    even
116a0 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
116b0 3c 43 6f 6e 74 72 6f 6c 2d 42 75 74 74 6f 6e 52  <Control-ButtonR
116c0 65 6c 65 61 73 65 2d 32 3e 0a 20 20 20 20 65 76  elease-2>.    ev
116d0 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
116e0 66 20 3c 53 68 69 66 74 2d 42 75 74 74 6f 6e 52  f <Shift-ButtonR
116f0 65 6c 65 61 73 65 2d 32 3e 0a 20 20 20 20 6c 69  elease-2>.    li
11700 73 74 20 24 78 20 5b 65 76 65 6e 74 20 69 6e 66  st $x [event inf
11710 6f 20 3c 3c 64 65 66 3e 3e 5d 20 5b 65 76 65 6e  o <<def>>] [even
11720 74 20 69 6e 66 6f 20 3c 3c 78 79 7a 3e 3e 5d 20  t info <<xyz>>] 
11730 5b 65 76 65 6e 74 20 69 6e 66 6f 20 3c 3c 61 62  [event info <<ab
11740 63 3e 3e 5d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  c>>].} -cleanup 
11750 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74  {.    destroy .t
11760 2e 66 0a 20 20 20 20 65 76 65 6e 74 20 64 65 6c  .f.    event del
11770 65 74 65 20 3c 3c 61 62 63 3e 3e 0a 20 20 20 20  ete <<abc>>.    
11780 65 76 65 6e 74 20 64 65 6c 65 74 65 20 3c 3c 64  event delete <<d
11790 65 66 3e 3e 0a 7d 20 2d 72 65 73 75 6c 74 20 7b  ef>>.} -result {
117a0 7b 78 79 7a 20 61 62 63 20 64 65 66 20 61 62 63  {xyz abc def abc
117b0 20 64 65 66 7d 20 3c 53 68 69 66 74 2d 42 75 74   def} <Shift-But
117c0 74 6f 6e 2d 32 3e 20 7b 7d 20 3c 43 6f 6e 74 72  ton-2> {} <Contr
117d0 6f 6c 2d 42 75 74 74 6f 6e 2d 32 3e 7d 0a 74 65  ol-Button-2>}.te
117e0 73 74 20 62 69 6e 64 2d 31 39 2e 31 34 20 7b 44  st bind-19.14 {D
117f0 65 6c 65 74 65 56 69 72 74 75 61 6c 45 76 65 6e  eleteVirtualEven
11800 74 20 70 72 6f 63 65 64 75 72 65 3a 20 6f 77 6e  t procedure: own
11810 65 64 20 62 79 20 31 2c 20 6c 61 73 74 20 69 6e  ed by 1, last in
11820 20 63 68 61 69 6e 7d 20 2d 73 65 74 75 70 20 7b   chain} -setup {
11830 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
11840 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
11850 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
11860 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
11870 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
11880 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
11890 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 20  e.    set x {}. 
118a0 20 20 20 65 76 65 6e 74 20 64 65 6c 65 74 65 20     event delete 
118b0 3c 3c 64 65 66 3e 3e 0a 20 20 20 20 65 76 65 6e  <<def>>.    even
118c0 74 20 64 65 6c 65 74 65 20 3c 3c 78 79 7a 3e 3e  t delete <<xyz>>
118d0 0a 20 20 20 20 65 76 65 6e 74 20 64 65 6c 65 74  .    event delet
118e0 65 20 3c 3c 61 62 63 3e 3e 0a 7d 20 2d 62 6f 64  e <<abc>>.} -bod
118f0 79 20 7b 0a 20 20 20 20 65 76 65 6e 74 20 61 64  y {.    event ad
11900 64 20 3c 3c 78 79 7a 3e 3e 20 3c 42 75 74 74 6f  d <<xyz>> <Butto
11910 6e 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74 20 61  n-2>.    event a
11920 64 64 20 3c 3c 61 62 63 3e 3e 20 3c 43 6f 6e 74  dd <<abc>> <Cont
11930 72 6f 6c 2d 42 75 74 74 6f 6e 2d 32 3e 0a 20 20  rol-Button-2>.  
11940 20 20 65 76 65 6e 74 20 61 64 64 20 3c 3c 64 65    event add <<de
11950 66 3e 3e 20 3c 53 68 69 66 74 2d 42 75 74 74 6f  f>> <Shift-Butto
11960 6e 2d 32 3e 0a 20 20 20 20 62 69 6e 64 20 2e 74  n-2>.    bind .t
11970 2e 66 20 3c 3c 78 79 7a 3e 3e 20 7b 6c 61 70 70  .f <<xyz>> {lapp
11980 65 6e 64 20 78 20 78 79 7a 7d 0a 20 20 20 20 62  end x xyz}.    b
11990 69 6e 64 20 2e 74 2e 66 20 3c 3c 61 62 63 3e 3e  ind .t.f <<abc>>
119a0 20 7b 6c 61 70 70 65 6e 64 20 78 20 61 62 63 7d   {lappend x abc}
119b0 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c  .    bind .t.f <
119c0 3c 64 65 66 3e 3e 20 7b 6c 61 70 70 65 6e 64 20  <def>> {lappend 
119d0 78 20 64 65 66 7d 0a 20 20 20 20 65 76 65 6e 74  x def}.    event
119e0 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
119f0 42 75 74 74 6f 6e 2d 32 3e 0a 20 20 20 20 65 76  Button-2>.    ev
11a00 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
11a10 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73 65  f <ButtonRelease
11a20 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65  -2>.    event ge
11a30 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 43 6f 6e  nerate .t.f <Con
11a40 74 72 6f 6c 2d 42 75 74 74 6f 6e 2d 32 3e 0a 20  trol-Button-2>. 
11a50 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
11a60 65 20 2e 74 2e 66 20 3c 43 6f 6e 74 72 6f 6c 2d  e .t.f <Control-
11a70 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 2d 32 3e  ButtonRelease-2>
11a80 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
11a90 61 74 65 20 2e 74 2e 66 20 3c 53 68 69 66 74 2d  ate .t.f <Shift-
11aa0 42 75 74 74 6f 6e 2d 32 3e 0a 20 20 20 20 65 76  Button-2>.    ev
11ab0 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
11ac0 66 20 3c 53 68 69 66 74 2d 42 75 74 74 6f 6e 52  f <Shift-ButtonR
11ad0 65 6c 65 61 73 65 2d 32 3e 0a 20 20 20 20 65 76  elease-2>.    ev
11ae0 65 6e 74 20 64 65 6c 65 74 65 20 3c 3c 78 79 7a  ent delete <<xyz
11af0 3e 3e 20 0a 20 20 20 20 65 76 65 6e 74 20 67 65  >> .    event ge
11b00 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74  nerate .t.f <But
11b10 74 6f 6e 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74  ton-2>.    event
11b20 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
11b30 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 2d 32 3e  ButtonRelease-2>
11b40 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
11b50 61 74 65 20 2e 74 2e 66 20 3c 43 6f 6e 74 72 6f  ate .t.f <Contro
11b60 6c 2d 42 75 74 74 6f 6e 2d 32 3e 0a 20 20 20 20  l-Button-2>.    
11b70 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
11b80 74 2e 66 20 3c 43 6f 6e 74 72 6f 6c 2d 42 75 74  t.f <Control-But
11b90 74 6f 6e 52 65 6c 65 61 73 65 2d 32 3e 0a 20 20  tonRelease-2>.  
11ba0 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
11bb0 20 2e 74 2e 66 20 3c 53 68 69 66 74 2d 42 75 74   .t.f <Shift-But
11bc0 74 6f 6e 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74  ton-2>.    event
11bd0 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
11be0 53 68 69 66 74 2d 42 75 74 74 6f 6e 52 65 6c 65  Shift-ButtonRele
11bf0 61 73 65 2d 32 3e 0a 20 20 20 20 6c 69 73 74 20  ase-2>.    list 
11c00 24 78 20 5b 65 76 65 6e 74 20 69 6e 66 6f 20 3c  $x [event info <
11c10 3c 78 79 7a 3e 3e 5d 20 5b 65 76 65 6e 74 20 69  <xyz>>] [event i
11c20 6e 66 6f 20 3c 3c 61 62 63 3e 3e 5d 20 5b 65 76  nfo <<abc>>] [ev
11c30 65 6e 74 20 69 6e 66 6f 20 3c 3c 64 65 66 3e 3e  ent info <<def>>
11c40 5d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  ].} -cleanup {. 
11c50 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
11c60 20 20 20 20 65 76 65 6e 74 20 64 65 6c 65 74 65      event delete
11c70 20 3c 3c 64 65 66 3e 3e 0a 20 20 20 20 65 76 65   <<def>>.    eve
11c80 6e 74 20 64 65 6c 65 74 65 20 3c 3c 61 62 63 3e  nt delete <<abc>
11c90 3e 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 7b 78 79  >.} -result {{xy
11ca0 7a 20 61 62 63 20 64 65 66 20 61 62 63 20 64 65  z abc def abc de
11cb0 66 7d 20 7b 7d 20 3c 43 6f 6e 74 72 6f 6c 2d 42  f} {} <Control-B
11cc0 75 74 74 6f 6e 2d 32 3e 20 3c 53 68 69 66 74 2d  utton-2> <Shift-
11cd0 42 75 74 74 6f 6e 2d 32 3e 7d 0a 74 65 73 74 20  Button-2>}.test 
11ce0 62 69 6e 64 2d 31 39 2e 31 35 20 7b 44 65 6c 65  bind-19.15 {Dele
11cf0 74 65 56 69 72 74 75 61 6c 45 76 65 6e 74 20 70  teVirtualEvent p
11d00 72 6f 63 65 64 75 72 65 3a 20 6f 77 6e 65 64 20  rocedure: owned 
11d10 62 79 20 6d 61 6e 79 2c 20 66 69 72 73 74 7d 20  by many, first} 
11d20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 70 61 63  -setup {.    pac
11d30 6b 20 5b 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63  k [frame .t.f -c
11d40 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
11d50 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
11d60 5d 0a 20 20 20 20 70 61 63 6b 20 5b 66 72 61 6d  ].    pack [fram
11d70 65 20 2e 74 2e 67 20 2d 63 6c 61 73 73 20 54 65  e .t.g -class Te
11d80 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68  st -width 150 -h
11d90 65 69 67 68 74 20 31 30 30 5d 0a 20 20 20 20 70  eight 100].    p
11da0 61 63 6b 20 5b 66 72 61 6d 65 20 2e 74 2e 68 20  ack [frame .t.h 
11db0 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
11dc0 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
11dd0 30 30 5d 0a 20 20 20 20 61 66 74 65 72 20 32 35  00].    after 25
11de0 30 20 3b 23 20 77 65 20 6e 65 65 64 20 61 20 62  0 ;# we need a b
11df0 69 74 20 74 69 6d 65 20 74 6f 20 65 6e 73 75 72  it time to ensur
11e00 65 20 74 68 61 74 20 2e 74 2e 68 20 69 73 20 6d  e that .t.h is m
11e10 61 70 70 65 64 0a 20 20 20 20 66 6f 63 75 73 20  apped.    focus 
11e20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20  -force .t.f.    
11e30 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78  update.    set x
11e40 20 7b 7d 0a 20 20 20 20 65 76 65 6e 74 20 64 65   {}.    event de
11e50 6c 65 74 65 20 3c 3c 64 65 66 3e 3e 0a 20 20 20  lete <<def>>.   
11e60 20 65 76 65 6e 74 20 64 65 6c 65 74 65 20 3c 3c   event delete <<
11e70 78 79 7a 3e 3e 0a 20 20 20 20 65 76 65 6e 74 20  xyz>>.    event 
11e80 64 65 6c 65 74 65 20 3c 3c 61 62 63 3e 3e 0a 7d  delete <<abc>>.}
11e90 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 65 76 65   -body {.    eve
11ea0 6e 74 20 61 64 64 20 3c 3c 78 79 7a 3e 3e 20 3c  nt add <<xyz>> <
11eb0 42 75 74 74 6f 6e 2d 32 3e 0a 20 20 20 20 65 76  Button-2>.    ev
11ec0 65 6e 74 20 61 64 64 20 3c 3c 61 62 63 3e 3e 20  ent add <<abc>> 
11ed0 3c 42 75 74 74 6f 6e 2d 32 3e 0a 20 20 20 20 65  <Button-2>.    e
11ee0 76 65 6e 74 20 61 64 64 20 3c 3c 64 65 66 3e 3e  vent add <<def>>
11ef0 20 3c 42 75 74 74 6f 6e 2d 32 3e 0a 20 20 20 20   <Button-2>.    
11f00 62 69 6e 64 20 2e 74 2e 66 20 3c 3c 78 79 7a 3e  bind .t.f <<xyz>
11f10 3e 20 7b 6c 61 70 70 65 6e 64 20 78 20 78 79 7a  > {lappend x xyz
11f20 7d 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 67 20  }.    bind .t.g 
11f30 3c 3c 61 62 63 3e 3e 20 7b 6c 61 70 70 65 6e 64  <<abc>> {lappend
11f40 20 78 20 61 62 63 7d 0a 20 20 20 20 62 69 6e 64   x abc}.    bind
11f50 20 2e 74 2e 68 20 3c 3c 64 65 66 3e 3e 20 7b 6c   .t.h <<def>> {l
11f60 61 70 70 65 6e 64 20 78 20 64 65 66 7d 0a 20 20  append x def}.  
11f70 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
11f80 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 32 3e   .t.f <Button-2>
11f90 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
11fa0 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e  ate .t.f <Button
11fb0 52 65 6c 65 61 73 65 2d 32 3e 0a 20 20 20 20 65  Release-2>.    e
11fc0 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
11fd0 2e 67 20 3c 42 75 74 74 6f 6e 2d 32 3e 0a 20 20  .g <Button-2>.  
11fe0 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
11ff0 20 2e 74 2e 67 20 3c 42 75 74 74 6f 6e 52 65 6c   .t.g <ButtonRel
12000 65 61 73 65 2d 32 3e 0a 20 20 20 20 65 76 65 6e  ease-2>.    even
12010 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 68 20  t generate .t.h 
12020 3c 42 75 74 74 6f 6e 2d 32 3e 0a 20 20 20 20 65  <Button-2>.    e
12030 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
12040 2e 68 20 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73  .h <ButtonReleas
12050 65 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74 20 64  e-2>.    event d
12060 65 6c 65 74 65 20 3c 3c 78 79 7a 3e 3e 20 0a 20  elete <<xyz>> . 
12070 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
12080 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 32  e .t.f <Button-2
12090 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  >.    event gene
120a0 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f  rate .t.f <Butto
120b0 6e 52 65 6c 65 61 73 65 2d 32 3e 0a 20 20 20 20  nRelease-2>.    
120c0 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
120d0 74 2e 67 20 3c 42 75 74 74 6f 6e 2d 32 3e 0a 20  t.g <Button-2>. 
120e0 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
120f0 65 20 2e 74 2e 67 20 3c 42 75 74 74 6f 6e 52 65  e .t.g <ButtonRe
12100 6c 65 61 73 65 2d 32 3e 0a 20 20 20 20 65 76 65  lease-2>.    eve
12110 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 68  nt generate .t.h
12120 20 3c 42 75 74 74 6f 6e 2d 32 3e 0a 20 20 20 20   <Button-2>.    
12130 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
12140 74 2e 68 20 3c 42 75 74 74 6f 6e 52 65 6c 65 61  t.h <ButtonRelea
12150 73 65 2d 32 3e 0a 20 20 20 20 6c 69 73 74 20 24  se-2>.    list $
12160 78 20 5b 65 76 65 6e 74 20 69 6e 66 6f 20 3c 3c  x [event info <<
12170 78 79 7a 3e 3e 5d 20 5b 65 76 65 6e 74 20 69 6e  xyz>>] [event in
12180 66 6f 20 3c 3c 61 62 63 3e 3e 5d 20 5b 65 76 65  fo <<abc>>] [eve
12190 6e 74 20 69 6e 66 6f 20 3c 3c 64 65 66 3e 3e 5d  nt info <<def>>]
121a0 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
121b0 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 20 2e    destroy .t.f .
121c0 74 2e 67 20 2e 74 2e 68 0a 20 20 20 20 65 76 65  t.g .t.h.    eve
121d0 6e 74 20 64 65 6c 65 74 65 20 3c 3c 64 65 66 3e  nt delete <<def>
121e0 3e 0a 20 20 20 20 65 76 65 6e 74 20 64 65 6c 65  >.    event dele
121f0 74 65 20 3c 3c 61 62 63 3e 3e 0a 7d 20 2d 72 65  te <<abc>>.} -re
12200 73 75 6c 74 20 7b 7b 78 79 7a 20 61 62 63 20 64  sult {{xyz abc d
12210 65 66 20 61 62 63 20 64 65 66 7d 20 7b 7d 20 3c  ef abc def} {} <
12220 42 75 74 74 6f 6e 2d 32 3e 20 3c 42 75 74 74 6f  Button-2> <Butto
12230 6e 2d 32 3e 7d 0a 74 65 73 74 20 62 69 6e 64 2d  n-2>}.test bind-
12240 31 39 2e 31 36 20 7b 44 65 6c 65 74 65 56 69 72  19.16 {DeleteVir
12250 74 75 61 6c 45 76 65 6e 74 20 70 72 6f 63 65 64  tualEvent proced
12260 75 72 65 3a 20 6f 77 6e 65 64 20 62 79 20 6d 61  ure: owned by ma
12270 6e 79 2c 20 6d 69 64 64 6c 65 7d 20 2d 73 65 74  ny, middle} -set
12280 75 70 20 7b 0a 20 20 20 20 70 61 63 6b 20 5b 66  up {.    pack [f
12290 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73  rame .t.f -class
122a0 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30   Test -width 150
122b0 20 2d 68 65 69 67 68 74 20 31 30 30 5d 0a 20 20   -height 100].  
122c0 20 20 70 61 63 6b 20 5b 66 72 61 6d 65 20 2e 74    pack [frame .t
122d0 2e 67 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d  .g -class Test -
122e0 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68  width 150 -heigh
122f0 74 20 31 30 30 5d 0a 20 20 20 20 70 61 63 6b 20  t 100].    pack 
12300 5b 66 72 61 6d 65 20 2e 74 2e 68 20 2d 63 6c 61  [frame .t.h -cla
12310 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
12320 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 5d 0a  50 -height 100].
12330 20 20 20 20 61 66 74 65 72 20 32 35 30 20 3b 23      after 250 ;#
12340 20 77 65 20 6e 65 65 64 20 61 20 62 69 74 20 74   we need a bit t
12350 69 6d 65 20 74 6f 20 65 6e 73 75 72 65 20 74 68  ime to ensure th
12360 61 74 20 2e 74 2e 68 20 69 73 20 6d 61 70 70 65  at .t.h is mappe
12370 64 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72  d.    focus -for
12380 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61  ce .t.f.    upda
12390 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a  te.    set x {}.
123a0 20 20 20 20 65 76 65 6e 74 20 64 65 6c 65 74 65      event delete
123b0 20 3c 3c 64 65 66 3e 3e 0a 20 20 20 20 65 76 65   <<def>>.    eve
123c0 6e 74 20 64 65 6c 65 74 65 20 3c 3c 78 79 7a 3e  nt delete <<xyz>
123d0 3e 0a 20 20 20 20 65 76 65 6e 74 20 64 65 6c 65  >.    event dele
123e0 74 65 20 3c 3c 61 62 63 3e 3e 0a 7d 20 2d 62 6f  te <<abc>>.} -bo
123f0 64 79 20 7b 0a 20 20 20 20 65 76 65 6e 74 20 61  dy {.    event a
12400 64 64 20 3c 3c 78 79 7a 3e 3e 20 3c 42 75 74 74  dd <<xyz>> <Butt
12410 6f 6e 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74 20  on-2>.    event 
12420 61 64 64 20 3c 3c 61 62 63 3e 3e 20 3c 42 75 74  add <<abc>> <But
12430 74 6f 6e 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74  ton-2>.    event
12440 20 61 64 64 20 3c 3c 64 65 66 3e 3e 20 3c 42 75   add <<def>> <Bu
12450 74 74 6f 6e 2d 32 3e 0a 20 20 20 20 62 69 6e 64  tton-2>.    bind
12460 20 2e 74 2e 66 20 3c 3c 78 79 7a 3e 3e 20 7b 6c   .t.f <<xyz>> {l
12470 61 70 70 65 6e 64 20 78 20 78 79 7a 7d 0a 20 20  append x xyz}.  
12480 20 20 62 69 6e 64 20 2e 74 2e 67 20 3c 3c 61 62    bind .t.g <<ab
12490 63 3e 3e 20 7b 6c 61 70 70 65 6e 64 20 78 20 61  c>> {lappend x a
124a0 62 63 7d 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  bc}.    bind .t.
124b0 68 20 3c 3c 64 65 66 3e 3e 20 7b 6c 61 70 70 65  h <<def>> {lappe
124c0 6e 64 20 78 20 64 65 66 7d 0a 20 20 20 20 65 76  nd x def}.    ev
124d0 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
124e0 66 20 3c 42 75 74 74 6f 6e 2d 32 3e 0a 20 20 20  f <Button-2>.   
124f0 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
12500 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65  .t.f <ButtonRele
12510 61 73 65 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74  ase-2>.    event
12520 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 67 20 3c   generate .t.g <
12530 42 75 74 74 6f 6e 2d 32 3e 0a 20 20 20 20 65 76  Button-2>.    ev
12540 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
12550 67 20 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73 65  g <ButtonRelease
12560 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65  -2>.    event ge
12570 6e 65 72 61 74 65 20 2e 74 2e 68 20 3c 42 75 74  nerate .t.h <But
12580 74 6f 6e 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74  ton-2>.    event
12590 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 68 20 3c   generate .t.h <
125a0 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 2d 32 3e  ButtonRelease-2>
125b0 0a 20 20 20 20 65 76 65 6e 74 20 64 65 6c 65 74  .    event delet
125c0 65 20 3c 3c 61 62 63 3e 3e 0a 20 20 20 20 65 76  e <<abc>>.    ev
125d0 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
125e0 66 20 3c 42 75 74 74 6f 6e 2d 32 3e 0a 20 20 20  f <Button-2>.   
125f0 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
12600 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65  .t.f <ButtonRele
12610 61 73 65 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74  ase-2>.    event
12620 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 67 20 3c   generate .t.g <
12630 42 75 74 74 6f 6e 2d 32 3e 0a 20 20 20 20 65 76  Button-2>.    ev
12640 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
12650 67 20 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73 65  g <ButtonRelease
12660 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65  -2>.    event ge
12670 6e 65 72 61 74 65 20 2e 74 2e 68 20 3c 42 75 74  nerate .t.h <But
12680 74 6f 6e 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74  ton-2>.    event
12690 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 68 20 3c   generate .t.h <
126a0 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 2d 32 3e  ButtonRelease-2>
126b0 0a 20 20 20 20 6c 69 73 74 20 24 78 20 5b 65 76  .    list $x [ev
126c0 65 6e 74 20 69 6e 66 6f 20 3c 3c 78 79 7a 3e 3e  ent info <<xyz>>
126d0 5d 20 5b 65 76 65 6e 74 20 69 6e 66 6f 20 3c 3c  ] [event info <<
126e0 61 62 63 3e 3e 5d 20 5b 65 76 65 6e 74 20 69 6e  abc>>] [event in
126f0 66 6f 20 3c 3c 64 65 66 3e 3e 5d 0a 7d 20 2d 63  fo <<def>>].} -c
12700 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73  leanup {.    des
12710 74 72 6f 79 20 2e 74 2e 66 20 2e 74 2e 67 20 2e  troy .t.f .t.g .
12720 74 2e 68 0a 20 20 20 20 65 76 65 6e 74 20 64 65  t.h.    event de
12730 6c 65 74 65 20 3c 3c 64 65 66 3e 3e 0a 20 20 20  lete <<def>>.   
12740 20 65 76 65 6e 74 20 64 65 6c 65 74 65 20 3c 3c   event delete <<
12750 78 79 7a 3e 3e 0a 7d 20 2d 72 65 73 75 6c 74 20  xyz>>.} -result 
12760 7b 7b 78 79 7a 20 61 62 63 20 64 65 66 20 78 79  {{xyz abc def xy
12770 7a 20 64 65 66 7d 20 3c 42 75 74 74 6f 6e 2d 32  z def} <Button-2
12780 3e 20 7b 7d 20 3c 42 75 74 74 6f 6e 2d 32 3e 7d  > {} <Button-2>}
12790 0a 74 65 73 74 20 62 69 6e 64 2d 31 39 2e 31 37  .test bind-19.17
127a0 20 7b 44 65 6c 65 74 65 56 69 72 74 75 61 6c 45   {DeleteVirtualE
127b0 76 65 6e 74 20 70 72 6f 63 65 64 75 72 65 3a 20  vent procedure: 
127c0 6f 77 6e 65 64 20 62 79 20 6d 61 6e 79 2c 20 6c  owned by many, l
127d0 61 73 74 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20  ast} -setup {.  
127e0 20 20 70 61 63 6b 20 5b 66 72 61 6d 65 20 2e 74    pack [frame .t
127f0 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d  .f -class Test -
12800 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68  width 150 -heigh
12810 74 20 31 30 30 5d 0a 20 20 20 20 70 61 63 6b 20  t 100].    pack 
12820 5b 66 72 61 6d 65 20 2e 74 2e 67 20 2d 63 6c 61  [frame .t.g -cla
12830 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
12840 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 5d 0a  50 -height 100].
12850 20 20 20 20 70 61 63 6b 20 5b 66 72 61 6d 65 20      pack [frame 
12860 2e 74 2e 68 20 2d 63 6c 61 73 73 20 54 65 73 74  .t.h -class Test
12870 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69   -width 150 -hei
12880 67 68 74 20 31 30 30 5d 0a 20 20 20 20 61 66 74  ght 100].    aft
12890 65 72 20 32 35 30 20 3b 23 20 77 65 20 6e 65 65  er 250 ;# we nee
128a0 64 20 61 20 62 69 74 20 74 69 6d 65 20 74 6f 20  d a bit time to 
128b0 65 6e 73 75 72 65 20 74 68 61 74 20 2e 74 2e 68  ensure that .t.h
128c0 20 69 73 20 6d 61 70 70 65 64 0a 20 20 20 20 66   is mapped.    f
128d0 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66  ocus -force .t.f
128e0 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20  .    update.    
128f0 73 65 74 20 78 20 7b 7d 0a 20 20 20 20 65 76 65  set x {}.    eve
12900 6e 74 20 64 65 6c 65 74 65 20 3c 3c 64 65 66 3e  nt delete <<def>
12910 3e 0a 20 20 20 20 65 76 65 6e 74 20 64 65 6c 65  >.    event dele
12920 74 65 20 3c 3c 78 79 7a 3e 3e 0a 20 20 20 20 65  te <<xyz>>.    e
12930 76 65 6e 74 20 64 65 6c 65 74 65 20 3c 3c 61 62  vent delete <<ab
12940 63 3e 3e 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20  c>>.} -body {.  
12950 20 20 65 76 65 6e 74 20 61 64 64 20 3c 3c 78 79    event add <<xy
12960 7a 3e 3e 20 3c 42 75 74 74 6f 6e 2d 32 3e 0a 20  z>> <Button-2>. 
12970 20 20 20 65 76 65 6e 74 20 61 64 64 20 3c 3c 61     event add <<a
12980 62 63 3e 3e 20 3c 42 75 74 74 6f 6e 2d 32 3e 0a  bc>> <Button-2>.
12990 20 20 20 20 65 76 65 6e 74 20 61 64 64 20 3c 3c      event add <<
129a0 64 65 66 3e 3e 20 3c 42 75 74 74 6f 6e 2d 32 3e  def>> <Button-2>
129b0 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c  .    bind .t.f <
129c0 3c 78 79 7a 3e 3e 20 7b 6c 61 70 70 65 6e 64 20  <xyz>> {lappend 
129d0 78 20 78 79 7a 7d 0a 20 20 20 20 62 69 6e 64 20  x xyz}.    bind 
129e0 2e 74 2e 67 20 3c 3c 61 62 63 3e 3e 20 7b 6c 61  .t.g <<abc>> {la
129f0 70 70 65 6e 64 20 78 20 61 62 63 7d 0a 20 20 20  ppend x abc}.   
12a00 20 62 69 6e 64 20 2e 74 2e 68 20 3c 3c 64 65 66   bind .t.h <<def
12a10 3e 3e 20 7b 6c 61 70 70 65 6e 64 20 78 20 64 65  >> {lappend x de
12a20 66 7d 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e  f}.    event gen
12a30 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74  erate .t.f <Butt
12a40 6f 6e 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74 20  on-2>.    event 
12a50 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42  generate .t.f <B
12a60 75 74 74 6f 6e 52 65 6c 65 61 73 65 2d 32 3e 0a  uttonRelease-2>.
12a70 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
12a80 74 65 20 2e 74 2e 67 20 3c 42 75 74 74 6f 6e 2d  te .t.g <Button-
12a90 32 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e  2>.    event gen
12aa0 65 72 61 74 65 20 2e 74 2e 67 20 3c 42 75 74 74  erate .t.g <Butt
12ab0 6f 6e 52 65 6c 65 61 73 65 2d 32 3e 0a 20 20 20  onRelease-2>.   
12ac0 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
12ad0 2e 74 2e 68 20 3c 42 75 74 74 6f 6e 2d 32 3e 0a  .t.h <Button-2>.
12ae0 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
12af0 74 65 20 2e 74 2e 68 20 3c 42 75 74 74 6f 6e 52  te .t.h <ButtonR
12b00 65 6c 65 61 73 65 2d 32 3e 0a 20 20 20 20 65 76  elease-2>.    ev
12b10 65 6e 74 20 64 65 6c 65 74 65 20 3c 3c 64 65 66  ent delete <<def
12b20 3e 3e 20 0a 20 20 20 20 65 76 65 6e 74 20 67 65  >> .    event ge
12b30 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74  nerate .t.f <But
12b40 74 6f 6e 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74  ton-2>.    event
12b50 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
12b60 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 2d 32 3e  ButtonRelease-2>
12b70 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
12b80 61 74 65 20 2e 74 2e 67 20 3c 42 75 74 74 6f 6e  ate .t.g <Button
12b90 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65  -2>.    event ge
12ba0 6e 65 72 61 74 65 20 2e 74 2e 67 20 3c 42 75 74  nerate .t.g <But
12bb0 74 6f 6e 52 65 6c 65 61 73 65 2d 32 3e 0a 20 20  tonRelease-2>.  
12bc0 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
12bd0 20 2e 74 2e 68 20 3c 42 75 74 74 6f 6e 2d 32 3e   .t.h <Button-2>
12be0 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
12bf0 61 74 65 20 2e 74 2e 68 20 3c 42 75 74 74 6f 6e  ate .t.h <Button
12c00 52 65 6c 65 61 73 65 2d 32 3e 0a 20 20 20 20 6c  Release-2>.    l
12c10 69 73 74 20 24 78 20 5b 65 76 65 6e 74 20 69 6e  ist $x [event in
12c20 66 6f 20 3c 3c 78 79 7a 3e 3e 5d 20 5b 65 76 65  fo <<xyz>>] [eve
12c30 6e 74 20 69 6e 66 6f 20 3c 3c 61 62 63 3e 3e 5d  nt info <<abc>>]
12c40 20 5b 65 76 65 6e 74 20 69 6e 66 6f 20 3c 3c 64   [event info <<d
12c50 65 66 3e 3e 5d 0a 7d 20 2d 63 6c 65 61 6e 75 70  ef>>].} -cleanup
12c60 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
12c70 74 2e 66 20 2e 74 2e 67 20 2e 74 2e 68 0a 20 20  t.f .t.g .t.h.  
12c80 20 20 65 76 65 6e 74 20 64 65 6c 65 74 65 20 3c    event delete <
12c90 3c 78 79 7a 3e 3e 0a 20 20 20 20 65 76 65 6e 74  <xyz>>.    event
12ca0 20 64 65 6c 65 74 65 20 3c 3c 61 62 63 3e 3e 0a   delete <<abc>>.
12cb0 7d 20 2d 72 65 73 75 6c 74 20 7b 7b 78 79 7a 20  } -result {{xyz 
12cc0 61 62 63 20 64 65 66 20 78 79 7a 20 61 62 63 7d  abc def xyz abc}
12cd0 20 3c 42 75 74 74 6f 6e 2d 32 3e 20 3c 42 75 74   <Button-2> <But
12ce0 74 6f 6e 2d 32 3e 20 7b 7d 7d 0a 0a 0a 74 65 73  ton-2> {}}...tes
12cf0 74 20 62 69 6e 64 2d 32 30 2e 31 20 7b 47 65 74  t bind-20.1 {Get
12d00 56 69 72 74 75 61 6c 45 76 65 6e 74 20 70 72 6f  VirtualEvent pro
12d10 63 65 64 75 72 65 3a 20 47 65 74 56 69 72 74 75  cedure: GetVirtu
12d20 61 6c 45 76 65 6e 74 55 69 64 7d 20 2d 62 6f 64  alEventUid} -bod
12d30 79 20 7b 0a 20 20 20 20 65 76 65 6e 74 20 69 6e  y {.    event in
12d40 66 6f 20 61 73 64 0a 7d 20 2d 72 65 74 75 72 6e  fo asd.} -return
12d50 43 6f 64 65 73 20 65 72 72 6f 72 20 2d 72 65 73  Codes error -res
12d60 75 6c 74 20 7b 76 69 72 74 75 61 6c 20 65 76 65  ult {virtual eve
12d70 6e 74 20 22 61 73 64 22 20 69 73 20 62 61 64 6c  nt "asd" is badl
12d80 79 20 66 6f 72 6d 65 64 7d 0a 74 65 73 74 20 62  y formed}.test b
12d90 69 6e 64 2d 32 30 2e 32 20 7b 47 65 74 56 69 72  ind-20.2 {GetVir
12da0 74 75 61 6c 45 76 65 6e 74 20 70 72 6f 63 65 64  tualEvent proced
12db0 75 72 65 3a 20 6e 6f 6e 2d 65 78 69 73 74 65 6e  ure: non-existen
12dc0 74 20 65 76 65 6e 74 7d 20 2d 62 6f 64 79 20 7b  t event} -body {
12dd0 0a 20 20 20 20 65 76 65 6e 74 20 64 65 6c 65 74  .    event delet
12de0 65 20 3c 3c 61 73 64 3e 3e 0a 20 20 20 20 65 76  e <<asd>>.    ev
12df0 65 6e 74 20 69 6e 66 6f 20 3c 3c 61 73 64 3e 3e  ent info <<asd>>
12e00 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 7d 0a 74 65  .} -result {}.te
12e10 73 74 20 62 69 6e 64 2d 32 30 2e 33 20 7b 47 65  st bind-20.3 {Ge
12e20 74 56 69 72 74 75 61 6c 45 76 65 6e 74 20 70 72  tVirtualEvent pr
12e30 6f 63 65 64 75 72 65 3a 20 6f 77 6e 73 20 31 7d  ocedure: owns 1}
12e40 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 65 76   -setup {.    ev
12e50 65 6e 74 20 64 65 6c 65 74 65 20 3c 3c 78 79 7a  ent delete <<xyz
12e60 3e 3e 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20  >>.} -body {.   
12e70 20 65 76 65 6e 74 20 61 64 64 20 3c 3c 78 79 7a   event add <<xyz
12e80 3e 3e 20 3c 43 6f 6e 74 72 6f 6c 2d 4b 65 79 2d  >> <Control-Key-
12e90 76 3e 0a 20 20 20 20 65 76 65 6e 74 20 69 6e 66  v>.    event inf
12ea0 6f 20 3c 3c 78 79 7a 3e 3e 0a 7d 20 2d 63 6c 65  o <<xyz>>.} -cle
12eb0 61 6e 75 70 20 7b 0a 20 20 20 20 65 76 65 6e 74  anup {.    event
12ec0 20 64 65 6c 65 74 65 20 3c 3c 78 79 7a 3e 3e 0a   delete <<xyz>>.
12ed0 7d 20 2d 72 65 73 75 6c 74 20 7b 3c 43 6f 6e 74  } -result {<Cont
12ee0 72 6f 6c 2d 4b 65 79 2d 76 3e 7d 0a 74 65 73 74  rol-Key-v>}.test
12ef0 20 62 69 6e 64 2d 32 30 2e 34 20 7b 47 65 74 56   bind-20.4 {GetV
12f00 69 72 74 75 61 6c 45 76 65 6e 74 20 70 72 6f 63  irtualEvent proc
12f10 65 64 75 72 65 3a 20 6f 77 6e 73 20 6d 61 6e 79  edure: owns many
12f20 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 65  } -setup {.    e
12f30 76 65 6e 74 20 64 65 6c 65 74 65 20 3c 3c 78 79  vent delete <<xy
12f40 7a 3e 3e 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20  z>>.} -body {.  
12f50 20 20 65 76 65 6e 74 20 61 64 64 20 3c 3c 78 79    event add <<xy
12f60 7a 3e 3e 20 3c 43 6f 6e 74 72 6f 6c 2d 76 3e 20  z>> <Control-v> 
12f70 3c 42 75 74 74 6f 6e 2d 32 3e 20 73 70 61 63 6b  <Button-2> spack
12f80 0a 20 20 20 20 65 76 65 6e 74 20 69 6e 66 6f 20  .    event info 
12f90 3c 3c 78 79 7a 3e 3e 0a 7d 20 2d 63 6c 65 61 6e  <<xyz>>.} -clean
12fa0 75 70 20 7b 0a 20 20 20 20 65 76 65 6e 74 20 64  up {.    event d
12fb0 65 6c 65 74 65 20 3c 3c 78 79 7a 3e 3e 0a 7d 20  elete <<xyz>>.} 
12fc0 2d 72 65 73 75 6c 74 20 7b 3c 43 6f 6e 74 72 6f  -result {<Contro
12fd0 6c 2d 4b 65 79 2d 76 3e 20 3c 42 75 74 74 6f 6e  l-Key-v> <Button
12fe0 2d 32 3e 20 73 70 61 63 6b 7d 0a 0a 0a 74 65 73  -2> spack}...tes
12ff0 74 20 62 69 6e 64 2d 32 31 2e 31 20 7b 47 65 74  t bind-21.1 {Get
13000 41 6c 6c 56 69 72 74 75 61 6c 45 76 65 6e 74 73  AllVirtualEvents
13010 20 70 72 6f 63 65 64 75 72 65 3a 20 6e 6f 20 65   procedure: no e
13020 76 65 6e 74 73 7d 20 2d 62 6f 64 79 20 7b 0a 20  vents} -body {. 
13030 20 20 20 66 6f 72 65 61 63 68 20 70 20 5b 65 76     foreach p [ev
13040 65 6e 74 20 69 6e 66 6f 5d 20 7b 65 76 65 6e 74  ent info] {event
13050 20 64 65 6c 65 74 65 20 24 70 7d 0a 20 20 20 20   delete $p}.    
13060 65 76 65 6e 74 20 69 6e 66 6f 0a 7d 20 2d 72 65  event info.} -re
13070 73 75 6c 74 20 7b 7d 0a 74 65 73 74 20 62 69 6e  sult {}.test bin
13080 64 2d 32 31 2e 32 20 7b 47 65 74 41 6c 6c 56 69  d-21.2 {GetAllVi
13090 72 74 75 61 6c 45 76 65 6e 74 73 20 70 72 6f 63  rtualEvents proc
130a0 65 64 75 72 65 3a 20 31 20 65 76 65 6e 74 7d 20  edure: 1 event} 
130b0 2d 62 6f 64 79 20 7b 0a 20 20 20 20 66 6f 72 65  -body {.    fore
130c0 61 63 68 20 70 20 5b 65 76 65 6e 74 20 69 6e 66  ach p [event inf
130d0 6f 5d 20 7b 65 76 65 6e 74 20 64 65 6c 65 74 65  o] {event delete
130e0 20 24 70 7d 0a 20 20 20 20 65 76 65 6e 74 20 61   $p}.    event a
130f0 64 64 20 3c 3c 78 79 7a 3e 3e 20 3c 43 6f 6e 74  dd <<xyz>> <Cont
13100 72 6f 6c 2d 76 3e 0a 20 20 20 20 65 76 65 6e 74  rol-v>.    event
13110 20 69 6e 66 6f 0a 7d 20 2d 63 6c 65 61 6e 75 70   info.} -cleanup
13120 20 7b 0a 20 20 20 20 65 76 65 6e 74 20 64 65 6c   {.    event del
13130 65 74 65 20 3c 3c 78 79 7a 3e 3e 0a 7d 20 2d 72  ete <<xyz>>.} -r
13140 65 73 75 6c 74 20 7b 3c 3c 78 79 7a 3e 3e 7d 0a  esult {<<xyz>>}.
13150 74 65 73 74 20 62 69 6e 64 2d 32 31 2e 33 20 7b  test bind-21.3 {
13160 47 65 74 41 6c 6c 56 69 72 74 75 61 6c 45 76 65  GetAllVirtualEve
13170 6e 74 73 20 70 72 6f 63 65 64 75 72 65 3a 20 6d  nts procedure: m
13180 61 6e 79 20 65 76 65 6e 74 73 7d 20 2d 62 6f 64  any events} -bod
13190 79 20 7b 0a 20 20 20 20 66 6f 72 65 61 63 68 20  y {.    foreach 
131a0 70 20 5b 65 76 65 6e 74 20 69 6e 66 6f 5d 20 7b  p [event info] {
131b0 65 76 65 6e 74 20 64 65 6c 65 74 65 20 24 70 7d  event delete $p}
131c0 0a 20 20 20 20 65 76 65 6e 74 20 61 64 64 20 3c  .    event add <
131d0 3c 78 79 7a 3e 3e 20 3c 43 6f 6e 74 72 6f 6c 2d  <xyz>> <Control-
131e0 76 3e 0a 20 20 20 20 65 76 65 6e 74 20 61 64 64  v>.    event add
131f0 20 3c 3c 78 79 7a 3e 3e 20 3c 42 75 74 74 6f 6e   <<xyz>> <Button
13200 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74 20 61 64  -2>.    event ad
13210 64 20 3c 3c 61 62 63 3e 3e 20 3c 43 6f 6e 74 72  d <<abc>> <Contr
13220 6f 6c 2d 76 3e 0a 20 20 20 20 65 76 65 6e 74 20  ol-v>.    event 
13230 61 64 64 20 3c 3c 64 65 66 3e 3e 20 3c 4b 65 79  add <<def>> <Key
13240 2d 46 36 3e 0a 20 20 20 20 6c 73 6f 72 74 20 5b  -F6>.    lsort [
13250 65 76 65 6e 74 20 69 6e 66 6f 5d 0a 7d 20 2d 63  event info].} -c
13260 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 65 76 65  leanup {.    eve
13270 6e 74 20 64 65 6c 65 74 65 20 3c 3c 78 79 7a 3e  nt delete <<xyz>
13280 3e 0a 20 20 20 20 65 76 65 6e 74 20 64 65 6c 65  >.    event dele
13290 74 65 20 3c 3c 61 62 63 3e 3e 0a 20 20 20 20 65  te <<abc>>.    e
132a0 76 65 6e 74 20 64 65 6c 65 74 65 20 3c 3c 64 65  vent delete <<de
132b0 66 3e 3e 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 3c  f>>.} -result {<
132c0 3c 61 62 63 3e 3e 20 3c 3c 64 65 66 3e 3e 20 3c  <abc>> <<def>> <
132d0 3c 78 79 7a 3e 3e 7d 0a 0a 74 65 73 74 20 62 69  <xyz>>}..test bi
132e0 6e 64 2d 32 32 2e 31 20 7b 48 61 6e 64 6c 65 45  nd-22.1 {HandleE
132f0 76 65 6e 74 47 65 6e 65 72 61 74 65 7d 20 2d 73  ventGenerate} -s
13300 65 74 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72  etup {.    destr
13310 6f 79 20 2e 78 79 7a 0a 7d 20 2d 62 6f 64 79 20  oy .xyz.} -body 
13320 7b 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  {.    event gene
13330 72 61 74 65 20 2e 78 79 7a 20 3c 43 6f 6e 74 72  rate .xyz <Contr
13340 6f 6c 2d 76 3e 0a 7d 20 2d 72 65 74 75 72 6e 43  ol-v>.} -returnC
13350 6f 64 65 73 20 65 72 72 6f 72 20 2d 72 65 73 75  odes error -resu
13360 6c 74 20 7b 62 61 64 20 77 69 6e 64 6f 77 20 70  lt {bad window p
13370 61 74 68 20 6e 61 6d 65 20 22 2e 78 79 7a 22 7d  ath name ".xyz"}
13380 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e 32 20  .test bind-22.2 
13390 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65  {HandleEventGene
133a0 72 61 74 65 7d 20 2d 62 6f 64 79 20 7b 0a 20 20  rate} -body {.  
133b0 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
133c0 20 7a 7a 7a 20 3c 43 6f 6e 74 72 6f 6c 2d 76 3e   zzz <Control-v>
133d0 0a 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20  .} -returnCodes 
133e0 65 72 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 62  error -result {b
133f0 61 64 20 77 69 6e 64 6f 77 20 6e 61 6d 65 2f 69  ad window name/i
13400 64 65 6e 74 69 66 69 65 72 20 22 7a 7a 7a 22 7d  dentifier "zzz"}
13410 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e 33 20  .test bind-22.3 
13420 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65  {HandleEventGene
13430 72 61 74 65 7d 20 2d 62 6f 64 79 20 7b 0a 20 20  rate} -body {.  
13440 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
13450 20 34 37 20 3c 43 6f 6e 74 72 6f 6c 2d 76 3e 0a   47 <Control-v>.
13460 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65  } -returnCodes e
13470 72 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 62 61  rror -result {ba
13480 64 20 77 69 6e 64 6f 77 20 6e 61 6d 65 2f 69 64  d window name/id
13490 65 6e 74 69 66 69 65 72 20 22 34 37 22 7d 0a 74  entifier "47"}.t
134a0 65 73 74 20 62 69 6e 64 2d 32 32 2e 34 20 7b 48  est bind-22.4 {H
134b0 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61  andleEventGenera
134c0 74 65 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20  te} -setup {.   
134d0 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61   frame .t.f -cla
134e0 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
134f0 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20  50 -height 100. 
13500 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20     pack .t.f.   
13510 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74   focus -force .t
13520 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20  .f.    update.  
13530 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f    set x {}.} -bo
13540 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74  dy {.    bind .t
13550 2e 66 20 3c 42 75 74 74 6f 6e 3e 20 7b 73 65 74  .f <Button> {set
13560 20 78 20 22 25 73 20 25 62 22 7d 0a 20 20 20 20   x "%s %b"}.    
13570 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 5b  event generate [
13580 77 69 6e 66 6f 20 69 64 20 2e 74 2e 66 5d 20 3c  winfo id .t.f] <
13590 43 6f 6e 74 72 6f 6c 2d 42 75 74 74 6f 6e 2d 31  Control-Button-1
135a0 3e 20 2d 73 74 61 74 65 20 32 36 30 0a 20 20 20  > -state 260.   
135b0 20 73 65 74 20 78 0a 7d 20 2d 63 6c 65 61 6e 75   set x.} -cleanu
135c0 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20  p {.    destroy 
135d0 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b  .t.f.} -result {
135e0 32 36 30 20 31 7d 0a 74 65 73 74 20 62 69 6e 64  260 1}.test bind
135f0 2d 32 32 2e 35 20 7b 48 61 6e 64 6c 65 45 76 65  -22.5 {HandleEve
13600 6e 74 47 65 6e 65 72 61 74 65 7d 20 2d 62 6f 64  ntGenerate} -bod
13610 79 20 7b 0a 20 20 20 20 65 76 65 6e 74 20 67 65  y {.    event ge
13620 6e 65 72 61 74 65 20 2e 20 3c 78 79 7a 3e 0a 7d  nerate . <xyz>.}
13630 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65 72   -returnCodes er
13640 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 62 61 64  ror -result {bad
13650 20 65 76 65 6e 74 20 74 79 70 65 20 6f 72 20 6b   event type or k
13660 65 79 73 79 6d 20 22 78 79 7a 22 7d 0a 74 65 73  eysym "xyz"}.tes
13670 74 20 62 69 6e 64 2d 32 32 2e 36 20 7b 48 61 6e  t bind-22.6 {Han
13680 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61 74 65  dleEventGenerate
13690 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 65 76  } -body {.    ev
136a0 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 20 3c  ent generate . <
136b0 44 6f 75 62 6c 65 2d 42 75 74 74 6f 6e 2d 31 3e  Double-Button-1>
136c0 0a 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20  .} -returnCodes 
136d0 65 72 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 44  error -result {D
136e0 6f 75 62 6c 65 2c 20 54 72 69 70 6c 65 2c 20 6f  ouble, Triple, o
136f0 72 20 51 75 61 64 72 75 70 6c 65 20 6d 6f 64 69  r Quadruple modi
13700 66 69 65 72 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  fier not allowed
13710 7d 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e 37  }.test bind-22.7
13720 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e   {HandleEventGen
13730 65 72 61 74 65 7d 20 2d 62 6f 64 79 20 7b 0a 20  erate} -body {. 
13740 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
13750 65 20 2e 20 78 79 7a 0a 7d 20 2d 72 65 74 75 72  e . xyz.} -retur
13760 6e 43 6f 64 65 73 20 65 72 72 6f 72 20 2d 72 65  nCodes error -re
13770 73 75 6c 74 20 7b 6f 6e 6c 79 20 6f 6e 65 20 65  sult {only one e
13780 76 65 6e 74 20 73 70 65 63 69 66 69 63 61 74 69  vent specificati
13790 6f 6e 20 61 6c 6c 6f 77 65 64 7d 0a 74 65 73 74  on allowed}.test
137a0 20 62 69 6e 64 2d 32 32 2e 38 20 7b 48 61 6e 64   bind-22.8 {Hand
137b0 6c 65 45 76 65 6e 74 47 65 6e 65 72 61 74 65 7d  leEventGenerate}
137c0 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 65 76 65   -body {.    eve
137d0 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 20 3c 42  nt generate . <B
137e0 75 74 74 6f 6e 3e 20 2d 62 75 74 74 6f 6e 0a 7d  utton> -button.}
137f0 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65 72   -returnCodes er
13800 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 76 61 6c  ror -result {val
13810 75 65 20 66 6f 72 20 22 2d 62 75 74 74 6f 6e 22  ue for "-button"
13820 20 6d 69 73 73 69 6e 67 7d 0a 74 65 73 74 20 62   missing}.test b
13830 69 6e 64 2d 32 32 2e 39 20 7b 48 61 6e 64 6c 65  ind-22.9 {Handle
13840 45 76 65 6e 74 47 65 6e 65 72 61 74 65 7d 20 2d  EventGenerate} -
13850 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d  setup {.    fram
13860 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65  e .t.f -class Te
13870 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68  st -width 150 -h
13880 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61  eight 100.    pa
13890 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75  ck .t.f.    focu
138a0 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20  s -force .t.f.  
138b0 20 20 75 70 64 61 74 65 0a 20 20 20 20 73 65 74    update.    set
138c0 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a   x {}.} -body {.
138d0 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 42      bind .t.f <B
138e0 75 74 74 6f 6e 3e 20 7b 73 65 74 20 78 20 22 25  utton> {set x "%
138f0 73 20 25 62 22 7d 0a 20 20 20 20 65 76 65 6e 74  s %b"}.    event
13900 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
13910 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 2d 31 3e  ButtonRelease-1>
13920 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
13930 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e  ate .t.f <Button
13940 52 65 6c 65 61 73 65 2d 32 3e 0a 20 20 20 20 65  Release-2>.    e
13950 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
13960 2e 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73  .f <ButtonReleas
13970 65 2d 33 3e 0a 20 20 20 20 65 76 65 6e 74 20 67  e-3>.    event g
13980 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 43 6f  enerate .t.f <Co
13990 6e 74 72 6f 6c 2d 42 75 74 74 6f 6e 2d 31 3e 0a  ntrol-Button-1>.
139a0 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
139b0 74 65 20 2e 74 2e 66 20 3c 43 6f 6e 74 72 6f 6c  te .t.f <Control
139c0 2d 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 2d 31  -ButtonRelease-1
139d0 3e 0a 20 20 20 20 73 65 74 20 78 0a 7d 20 2d 63  >.    set x.} -c
139e0 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73  leanup {.    des
139f0 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73  troy .t.f.} -res
13a00 75 6c 74 20 7b 34 20 31 7d 0a 74 65 73 74 20 62  ult {4 1}.test b
13a10 69 6e 64 2d 32 32 2e 31 30 20 7b 48 61 6e 64 6c  ind-22.10 {Handl
13a20 65 45 76 65 6e 74 47 65 6e 65 72 61 74 65 7d 20  eEventGenerate} 
13a30 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61  -setup {.    fra
13a40 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54  me .t.f -class T
13a50 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d  est -width 150 -
13a60 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70  height 100.    p
13a70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63  ack .t.f.    foc
13a80 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20  us -force .t.f. 
13a90 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73 65     update.    se
13aa0 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b  t x {}.} -body {
13ab0 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c  .    bind .t.f <
13ac0 4b 65 79 3e 20 7b 73 65 74 20 78 20 22 25 73 20  Key> {set x "%s 
13ad0 25 4b 22 7d 0a 20 20 20 20 65 76 65 6e 74 20 67  %K"}.    event g
13ae0 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 43 6f  enerate .t.f <Co
13af0 6e 74 72 6f 6c 2d 4b 65 79 2d 73 70 61 63 65 3e  ntrol-Key-space>
13b00 0a 20 20 20 20 73 65 74 20 78 0a 7d 20 2d 63 6c  .    set x.} -cl
13b10 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74  eanup {.    dest
13b20 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75  roy .t.f.} -resu
13b30 6c 74 20 7b 34 20 73 70 61 63 65 7d 0a 74 65 73  lt {4 space}.tes
13b40 74 20 62 69 6e 64 2d 32 32 2e 31 31 20 7b 48 61  t bind-22.11 {Ha
13b50 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61 74  ndleEventGenerat
13b60 65 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20  e} -setup {.    
13b70 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73  frame .t.f -clas
13b80 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35  s Test -width 15
13b90 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20  0 -height 100.  
13ba0 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20    pack .t.f.    
13bb0 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e  focus -force .t.
13bc0 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20 20  f.    update.   
13bd0 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64   set x {}.} -bod
13be0 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  y {.    bind .t.
13bf0 66 20 3c 3c 50 61 73 74 65 3e 3e 20 7b 73 65 74  f <<Paste>> {set
13c00 20 78 20 22 25 73 22 7d 0a 20 20 20 20 65 76 65   x "%s"}.    eve
13c10 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
13c20 20 3c 3c 50 61 73 74 65 3e 3e 20 2d 73 74 61 74   <<Paste>> -stat
13c30 65 20 31 0a 20 20 20 20 73 65 74 20 78 0a 7d 20  e 1.    set x.} 
13c40 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64  -cleanup {.    d
13c50 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72  estroy .t.f.} -r
13c60 65 73 75 6c 74 20 7b 31 7d 0a 74 65 73 74 20 62  esult {1}.test b
13c70 69 6e 64 2d 32 32 2e 31 32 20 7b 48 61 6e 64 6c  ind-22.12 {Handl
13c80 65 45 76 65 6e 74 47 65 6e 65 72 61 74 65 7d 20  eEventGenerate} 
13c90 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61  -setup {.    fra
13ca0 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54  me .t.f -class T
13cb0 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d  est -width 150 -
13cc0 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70  height 100.    p
13cd0 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63  ack .t.f.    foc
13ce0 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20  us -force .t.f. 
13cf0 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73 65     update.    se
13d00 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b  t x {}.} -body {
13d10 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c  .    bind .t.f <
13d20 4d 6f 74 69 6f 6e 3e 20 7b 73 65 74 20 78 20 22  Motion> {set x "
13d30 25 73 22 7d 0a 20 20 20 20 65 76 65 6e 74 20 67  %s"}.    event g
13d40 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 43 6f  enerate .t.f <Co
13d50 6e 74 72 6f 6c 2d 4d 6f 74 69 6f 6e 3e 0a 20 20  ntrol-Motion>.  
13d60 20 20 73 65 74 20 78 0a 7d 20 2d 63 6c 65 61 6e    set x.} -clean
13d70 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79  up {.    destroy
13d80 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20   .t.f.} -result 
13d90 7b 34 7d 0a 74 65 73 74 20 62 69 6e 64 2d 32 32  {4}.test bind-22
13da0 2e 31 33 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74  .13 {HandleEvent
13db0 47 65 6e 65 72 61 74 65 7d 20 2d 73 65 74 75 70  Generate} -setup
13dc0 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e   {.    frame .t.
13dd0 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77  f -class Test -w
13de0 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74  idth 150 -height
13df0 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74   100.    pack .t
13e00 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f  .f.    focus -fo
13e10 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64  rce .t.f.    upd
13e20 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d  ate.    set x {}
13e30 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62  .} -body {.    b
13e40 69 6e 64 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e  ind .t.f <Button
13e50 3e 20 7b 6c 61 70 70 65 6e 64 20 78 20 25 23 7d  > {lappend x %#}
13e60 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
13e70 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e  ate .t.f <Button
13e80 3e 20 2d 77 68 65 6e 20 6e 6f 77 20 2d 73 65 72  > -when now -ser
13e90 69 61 6c 20 31 30 30 0a 20 20 20 20 65 76 65 6e  ial 100.    even
13ea0 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
13eb0 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 3e 20  <ButtonRelease> 
13ec0 2d 77 68 65 6e 20 6e 6f 77 0a 20 20 20 20 73 65  -when now.    se
13ed0 74 20 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  t x.} -cleanup {
13ee0 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e  .    destroy .t.
13ef0 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 31 30 30  f.} -result {100
13f00 7d 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e 31  }.test bind-22.1
13f10 34 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47 65  4 {HandleEventGe
13f20 6e 65 72 61 74 65 7d 20 2d 73 65 74 75 70 20 7b  nerate} -setup {
13f30 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
13f40 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
13f50 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
13f60 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
13f70 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
13f80 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
13f90 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d  e.    set x {}.}
13fa0 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
13fb0 64 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 3e 20  d .t.f <Button> 
13fc0 7b 6c 61 70 70 65 6e 64 20 78 20 25 23 7d 0a 20  {lappend x %#}. 
13fd0 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
13fe0 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 3e 20  e .t.f <Button> 
13ff0 2d 77 68 65 6e 20 68 65 61 64 20 2d 73 65 72 69  -when head -seri
14000 61 6c 20 31 30 30 0a 20 20 20 20 65 76 65 6e 74  al 100.    event
14010 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
14020 42 75 74 74 6f 6e 3e 20 2d 77 68 65 6e 20 68 65  Button> -when he
14030 61 64 20 2d 73 65 72 69 61 6c 20 31 30 31 0a 20  ad -serial 101. 
14040 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
14050 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 3e 20  e .t.f <Button> 
14060 2d 77 68 65 6e 20 68 65 61 64 20 2d 73 65 72 69  -when head -seri
14070 61 6c 20 31 30 32 0a 20 20 20 20 65 76 65 6e 74  al 102.    event
14080 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
14090 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 3e 20 2d  ButtonRelease> -
140a0 77 68 65 6e 20 74 61 69 6c 0a 20 20 20 20 6c 61  when tail.    la
140b0 70 70 65 6e 64 20 78 20 66 6f 6f 0a 20 20 20 20  ppend x foo.    
140c0 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78  update.    set x
140d0 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
140e0 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d    destroy .t.f.}
140f0 20 2d 72 65 73 75 6c 74 20 7b 66 6f 6f 20 31 30   -result {foo 10
14100 32 20 31 30 31 20 31 30 30 7d 0a 74 65 73 74 20  2 101 100}.test 
14110 62 69 6e 64 2d 32 32 2e 31 35 20 7b 48 61 6e 64  bind-22.15 {Hand
14120 6c 65 45 76 65 6e 74 47 65 6e 65 72 61 74 65 7d  leEventGenerate}
14130 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72   -setup {.    fr
14140 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20  ame .t.f -class 
14150 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20  Test -width 150 
14160 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20  -height 100.    
14170 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f  pack .t.f.    fo
14180 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a  cus -force .t.f.
14190 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73      update.    s
141a0 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20  et x {}.} -body 
141b0 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20  {.    bind .t.f 
141c0 3c 42 75 74 74 6f 6e 3e 20 7b 6c 61 70 70 65 6e  <Button> {lappen
141d0 64 20 78 20 25 23 7d 0a 20 20 20 20 65 76 65 6e  d x %#}.    even
141e0 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
141f0 3c 42 75 74 74 6f 6e 3e 20 2d 77 68 65 6e 20 68  <Button> -when h
14200 65 61 64 20 2d 73 65 72 69 61 6c 20 39 39 0a 20  ead -serial 99. 
14210 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
14220 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 3e 20  e .t.f <Button> 
14230 2d 77 68 65 6e 20 6d 61 72 6b 20 2d 73 65 72 69  -when mark -seri
14240 61 6c 20 31 30 30 0a 20 20 20 20 65 76 65 6e 74  al 100.    event
14250 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
14260 42 75 74 74 6f 6e 3e 20 2d 77 68 65 6e 20 6d 61  Button> -when ma
14270 72 6b 20 2d 73 65 72 69 61 6c 20 31 30 31 0a 20  rk -serial 101. 
14280 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
14290 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 3e 20  e .t.f <Button> 
142a0 2d 77 68 65 6e 20 6d 61 72 6b 20 2d 73 65 72 69  -when mark -seri
142b0 61 6c 20 31 30 32 0a 20 20 20 20 65 76 65 6e 74  al 102.    event
142c0 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
142d0 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 3e 20 2d  ButtonRelease> -
142e0 77 68 65 6e 20 74 61 69 6c 0a 20 20 20 20 6c 61  when tail.    la
142f0 70 70 65 6e 64 20 78 20 66 6f 6f 0a 20 20 20 20  ppend x foo.    
14300 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78  update.    set x
14310 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
14320 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d    destroy .t.f.}
14330 20 2d 72 65 73 75 6c 74 20 7b 66 6f 6f 20 31 30   -result {foo 10
14340 30 20 31 30 31 20 31 30 32 20 39 39 7d 0a 74 65  0 101 102 99}.te
14350 73 74 20 62 69 6e 64 2d 32 32 2e 31 36 20 7b 48  st bind-22.16 {H
14360 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61  andleEventGenera
14370 74 65 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20  te} -setup {.   
14380 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61   frame .t.f -cla
14390 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
143a0 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20  50 -height 100. 
143b0 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20     pack .t.f.   
143c0 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74   focus -force .t
143d0 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20  .f.    update.  
143e0 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f    set x {}.} -bo
143f0 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74  dy {.    bind .t
14400 2e 66 20 3c 42 75 74 74 6f 6e 3e 20 7b 6c 61 70  .f <Button> {lap
14410 70 65 6e 64 20 78 20 25 23 7d 0a 20 20 20 20 65  pend x %#}.    e
14420 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
14430 2e 66 20 3c 42 75 74 74 6f 6e 3e 20 2d 77 68 65  .f <Button> -whe
14440 6e 20 68 65 61 64 20 2d 73 65 72 69 61 6c 20 39  n head -serial 9
14450 39 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  9.    event gene
14460 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f  rate .t.f <Butto
14470 6e 3e 20 2d 77 68 65 6e 20 74 61 69 6c 20 2d 73  n> -when tail -s
14480 65 72 69 61 6c 20 31 30 30 0a 20 20 20 20 65 76  erial 100.    ev
14490 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
144a0 66 20 3c 42 75 74 74 6f 6e 3e 20 2d 77 68 65 6e  f <Button> -when
144b0 20 74 61 69 6c 20 2d 73 65 72 69 61 6c 20 31 30   tail -serial 10
144c0 31 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  1.    event gene
144d0 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f  rate .t.f <Butto
144e0 6e 3e 20 2d 77 68 65 6e 20 74 61 69 6c 20 2d 73  n> -when tail -s
144f0 65 72 69 61 6c 20 31 30 32 0a 20 20 20 20 65 76  erial 102.    ev
14500 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
14510 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73 65  f <ButtonRelease
14520 3e 20 2d 77 68 65 6e 20 74 61 69 6c 0a 20 20 20  > -when tail.   
14530 20 6c 61 70 70 65 6e 64 20 78 20 66 6f 6f 0a 20   lappend x foo. 
14540 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73 65     update.    se
14550 74 20 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  t x.} -cleanup {
14560 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e  .    destroy .t.
14570 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 66 6f 6f  f.} -result {foo
14580 20 39 39 20 31 30 30 20 31 30 31 20 31 30 32 7d   99 100 101 102}
14590 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e 31 37  .test bind-22.17
145a0 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e   {HandleEventGen
145b0 65 72 61 74 65 7d 20 2d 62 6f 64 79 20 7b 0a 20  erate} -body {. 
145c0 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
145d0 65 20 2e 20 3c 42 75 74 74 6f 6e 3e 20 2d 77 68  e . <Button> -wh
145e0 65 6e 20 78 79 7a 0a 7d 20 2d 72 65 74 75 72 6e  en xyz.} -return
145f0 43 6f 64 65 73 20 65 72 72 6f 72 20 2d 72 65 73  Codes error -res
14600 75 6c 74 20 7b 62 61 64 20 2d 77 68 65 6e 20 76  ult {bad -when v
14610 61 6c 75 65 20 22 78 79 7a 22 3a 20 6d 75 73 74  alue "xyz": must
14620 20 62 65 20 6e 6f 77 2c 20 68 65 61 64 2c 20 6d   be now, head, m
14630 61 72 6b 2c 20 6f 72 20 74 61 69 6c 7d 0a 74 65  ark, or tail}.te
14640 73 74 20 62 69 6e 64 2d 32 32 2e 31 38 20 7b 48  st bind-22.18 {H
14650 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61  andleEventGenera
14660 74 65 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  te} -body {.    
14670 23 20 42 75 67 20 34 31 31 33 30 37 0a 20 20 20  # Bug 411307.   
14680 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
14690 2e 20 3c 61 3e 20 2d 72 6f 6f 74 20 39 38 37 36  . <a> -root 9876
146a0 35 0a 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73  5.} -returnCodes
146b0 20 65 72 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b   error -result {
146c0 62 61 64 20 77 69 6e 64 6f 77 20 6e 61 6d 65 2f  bad window name/
146d0 69 64 65 6e 74 69 66 69 65 72 20 22 39 38 37 36  identifier "9876
146e0 35 22 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32  5"}..test bind-2
146f0 32 2e 31 39 20 7b 48 61 6e 64 6c 65 45 76 65 6e  2.19 {HandleEven
14700 74 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f  tGenerate: optio
14710 6e 73 20 3c 43 6f 6e 66 69 67 75 72 65 3e 20 2d  ns <Configure> -
14720 61 62 6f 76 65 20 2e 78 79 7a 7d 20 2d 73 65 74  above .xyz} -set
14730 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e  up {.    frame .
14740 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20  t.f -class Test 
14750 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67  -width 150 -heig
14760 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20  ht 100.    pack 
14770 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d  .t.f.    focus -
14780 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75  force .t.f.    u
14790 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20  pdate.    set x 
147a0 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20  {}.} -body {.   
147b0 20 62 69 6e 64 20 2e 74 2e 66 20 3c 43 6f 6e 66   bind .t.f <Conf
147c0 69 67 75 72 65 3e 20 22 6c 61 70 70 65 6e 64 20  igure> "lappend 
147d0 78 20 25 61 22 0a 20 20 20 20 65 76 65 6e 74 20  x %a".    event 
147e0 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 43  generate .t.f <C
147f0 6f 6e 66 69 67 75 72 65 3e 20 2d 61 62 6f 76 65  onfigure> -above
14800 20 2e 78 79 7a 0a 7d 20 2d 63 6c 65 61 6e 75 70   .xyz.} -cleanup
14810 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
14820 74 2e 66 0a 7d 20 2d 72 65 74 75 72 6e 43 6f 64  t.f.} -returnCod
14830 65 73 20 65 72 72 6f 72 20 2d 72 65 73 75 6c 74  es error -result
14840 20 7b 62 61 64 20 77 69 6e 64 6f 77 20 70 61 74   {bad window pat
14850 68 20 6e 61 6d 65 20 22 2e 78 79 7a 22 7d 0a 74  h name ".xyz"}.t
14860 65 73 74 20 62 69 6e 64 2d 32 32 2e 32 30 20 7b  est bind-22.20 {
14870 48 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72  HandleEventGener
14880 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 43 6f  ate: options <Co
14890 6e 66 69 67 75 72 65 3e 20 2d 61 62 6f 76 65 20  nfigure> -above 
148a0 2e 74 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20  .t} -setup {.   
148b0 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61   frame .t.f -cla
148c0 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
148d0 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20  50 -height 100. 
148e0 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20     pack .t.f.   
148f0 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74   focus -force .t
14900 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20  .f.    update.  
14910 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f    set x {}.} -bo
14920 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74  dy {.    bind .t
14930 2e 66 20 3c 43 6f 6e 66 69 67 75 72 65 3e 20 22  .f <Configure> "
14940 6c 61 70 70 65 6e 64 20 78 20 25 61 22 0a 20 20  lappend x %a".  
14950 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
14960 20 2e 74 2e 66 20 3c 43 6f 6e 66 69 67 75 72 65   .t.f <Configure
14970 3e 20 2d 61 62 6f 76 65 20 2e 74 0a 20 20 20 20  > -above .t.    
14980 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d 63 6c 65  return $x.} -cle
14990 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72  anup {.    destr
149a0 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c  oy .t.f.} -resul
149b0 74 20 5b 77 69 6e 66 6f 20 69 64 20 2e 74 5d 0a  t [winfo id .t].
149c0 74 65 73 74 20 62 69 6e 64 2d 32 32 2e 32 31 20  test bind-22.21 
149d0 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65  {HandleEventGene
149e0 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 43  rate: options <C
149f0 6f 6e 66 69 67 75 72 65 3e 20 2d 61 62 6f 76 65  onfigure> -above
14a00 20 78 79 7a 7d 20 2d 73 65 74 75 70 20 7b 0a 20   xyz} -setup {. 
14a10 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63     frame .t.f -c
14a20 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
14a30 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
14a40 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20  .    pack .t.f. 
14a50 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20     focus -force 
14a60 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a  .t.f.    update.
14a70 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d      set x {}.} -
14a80 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20  body {.    bind 
14a90 2e 74 2e 66 20 3c 43 6f 6e 66 69 67 75 72 65 3e  .t.f <Configure>
14aa0 20 22 6c 61 70 70 65 6e 64 20 78 20 25 61 22 0a   "lappend x %a".
14ab0 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
14ac0 74 65 20 2e 74 2e 66 20 3c 43 6f 6e 66 69 67 75  te .t.f <Configu
14ad0 72 65 3e 20 2d 61 62 6f 76 65 20 78 79 7a 0a 7d  re> -above xyz.}
14ae0 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
14af0 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d  destroy .t.f.} -
14b00 72 65 74 75 72 6e 43 6f 64 65 73 20 65 72 72 6f  returnCodes erro
14b10 72 20 2d 72 65 73 75 6c 74 20 7b 62 61 64 20 77  r -result {bad w
14b20 69 6e 64 6f 77 20 6e 61 6d 65 2f 69 64 65 6e 74  indow name/ident
14b30 69 66 69 65 72 20 22 78 79 7a 22 7d 0a 74 65 73  ifier "xyz"}.tes
14b40 74 20 62 69 6e 64 2d 32 32 2e 32 32 20 7b 48 61  t bind-22.22 {Ha
14b50 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61 74  ndleEventGenerat
14b60 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 43 6f 6e 66  e: options <Conf
14b70 69 67 75 72 65 3e 20 2d 61 62 6f 76 65 20 5b 77  igure> -above [w
14b80 69 6e 66 6f 20 69 64 20 2e 74 5d 7d 20 2d 73 65  info id .t]} -se
14b90 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20  tup {.    frame 
14ba0 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74  .t.f -class Test
14bb0 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69   -width 150 -hei
14bc0 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b  ght 100.    pack
14bd0 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20   .t.f.    focus 
14be0 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20  -force .t.f.    
14bf0 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78  update.    set x
14c00 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20   {}.} -body {.  
14c10 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 43 6f 6e    bind .t.f <Con
14c20 66 69 67 75 72 65 3e 20 22 6c 61 70 70 65 6e 64  figure> "lappend
14c30 20 78 20 25 61 22 0a 20 20 20 20 65 76 65 6e 74   x %a".    event
14c40 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
14c50 43 6f 6e 66 69 67 75 72 65 3e 20 2d 61 62 6f 76  Configure> -abov
14c60 65 20 5b 77 69 6e 66 6f 20 69 64 20 2e 74 5d 0a  e [winfo id .t].
14c70 20 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 20      return $x.} 
14c80 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64  -cleanup {.    d
14c90 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72  estroy .t.f.} -r
14ca0 65 73 75 6c 74 20 5b 77 69 6e 66 6f 20 69 64 20  esult [winfo id 
14cb0 2e 74 5d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32  .t]..test bind-2
14cc0 32 2e 32 33 20 7b 48 61 6e 64 6c 65 45 76 65 6e  2.23 {HandleEven
14cd0 74 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f  tGenerate: optio
14ce0 6e 73 20 3c 4b 65 79 3e 20 2d 61 62 6f 76 65 20  ns <Key> -above 
14cf0 2e 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20  .} -setup {.    
14d00 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73  frame .t.f -clas
14d10 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35  s Test -width 15
14d20 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20  0 -height 100.  
14d30 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20    pack .t.f.    
14d40 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e  focus -force .t.
14d50 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20 20  f.    update.   
14d60 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64   set x {}.} -bod
14d70 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  y {.    bind .t.
14d80 66 20 3c 4b 65 79 3e 20 22 6c 61 70 70 65 6e 64  f <Key> "lappend
14d90 20 78 20 25 62 22 0a 20 20 20 20 65 76 65 6e 74   x %b".    event
14da0 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
14db0 4b 65 79 3e 20 2d 61 62 6f 76 65 20 2e 0a 20 20  Key> -above ..  
14dc0 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d 63    return $x.} -c
14dd0 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73  leanup {.    des
14de0 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 74  troy .t.f.} -ret
14df0 75 72 6e 43 6f 64 65 73 20 65 72 72 6f 72 20 2d  urnCodes error -
14e00 72 65 73 75 6c 74 20 7b 3c 4b 65 79 3e 20 65 76  result {<Key> ev
14e10 65 6e 74 20 64 6f 65 73 6e 27 74 20 61 63 63 65  ent doesn't acce
14e20 70 74 20 22 2d 61 62 6f 76 65 22 20 6f 70 74 69  pt "-above" opti
14e30 6f 6e 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32  on}..test bind-2
14e40 32 2e 32 34 20 7b 48 61 6e 64 6c 65 45 76 65 6e  2.24 {HandleEven
14e50 74 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f  tGenerate: optio
14e60 6e 73 20 3c 43 6f 6e 66 69 67 75 72 65 3e 20 2d  ns <Configure> -
14e70 62 6f 72 64 65 72 77 69 64 74 68 20 78 79 7a 7d  borderwidth xyz}
14e80 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72   -setup {.    fr
14e90 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20  ame .t.f -class 
14ea0 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20  Test -width 150 
14eb0 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20  -height 100.    
14ec0 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f  pack .t.f.    fo
14ed0 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a  cus -force .t.f.
14ee0 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73      update.    s
14ef0 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20  et x {}.} -body 
14f00 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20  {.    bind .t.f 
14f10 3c 43 6f 6e 66 69 67 75 72 65 3e 20 22 6c 61 70  <Configure> "lap
14f20 70 65 6e 64 20 78 20 25 42 22 0a 20 20 20 20 65  pend x %B".    e
14f30 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
14f40 2e 66 20 3c 43 6f 6e 66 69 67 75 72 65 3e 20 2d  .f <Configure> -
14f50 62 6f 72 64 65 72 77 69 64 74 68 20 78 79 7a 0a  borderwidth xyz.
14f60 20 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 20      return $x.} 
14f70 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64  -cleanup {.    d
14f80 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72  estroy .t.f.} -r
14f90 65 74 75 72 6e 43 6f 64 65 73 20 65 72 72 6f 72  eturnCodes error
14fa0 20 2d 72 65 73 75 6c 74 20 7b 62 61 64 20 73 63   -result {bad sc
14fb0 72 65 65 6e 20 64 69 73 74 61 6e 63 65 20 22 78  reen distance "x
14fc0 79 7a 22 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d  yz"}..test bind-
14fd0 32 32 2e 32 35 20 7b 48 61 6e 64 6c 65 45 76 65  22.25 {HandleEve
14fe0 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69  ntGenerate: opti
14ff0 6f 6e 73 20 3c 43 6f 6e 66 69 67 75 72 65 3e 20  ons <Configure> 
15000 2d 62 6f 72 64 65 72 77 69 64 74 68 20 32 69 7d  -borderwidth 2i}
15010 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72   -setup {.    fr
15020 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20  ame .t.f -class 
15030 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20  Test -width 150 
15040 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20  -height 100.    
15050 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f  pack .t.f.    fo
15060 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a  cus -force .t.f.
15070 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73      update.    s
15080 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20  et x {}.} -body 
15090 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20  {.    bind .t.f 
150a0 3c 43 6f 6e 66 69 67 75 72 65 3e 20 22 6c 61 70  <Configure> "lap
150b0 70 65 6e 64 20 78 20 25 42 22 0a 20 20 20 20 65  pend x %B".    e
150c0 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
150d0 2e 66 20 3c 43 6f 6e 66 69 67 75 72 65 3e 20 2d  .f <Configure> -
150e0 62 6f 72 64 65 72 77 69 64 74 68 20 32 69 0a 20  borderwidth 2i. 
150f0 20 20 20 65 78 70 72 20 7b 5b 77 69 6e 66 6f 20     expr {[winfo 
15100 70 69 78 65 6c 73 20 2e 74 2e 66 20 32 69 5d 20  pixels .t.f 2i] 
15110 65 71 20 24 78 7d 0a 7d 20 2d 63 6c 65 61 6e 75  eq $x}.} -cleanu
15120 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20  p {.    destroy 
15130 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b  .t.f.} -result {
15140 31 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 32  1}..test bind-22
15150 2e 32 36 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74  .26 {HandleEvent
15160 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e  Generate: option
15170 73 20 3c 4b 65 79 3e 20 2d 62 6f 72 64 65 72 77  s <Key> -borderw
15180 69 64 74 68 20 32 69 7d 20 2d 73 65 74 75 70 20  idth 2i} -setup 
15190 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66  {.    frame .t.f
151a0 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69   -class Test -wi
151b0 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20  dth 150 -height 
151c0 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e  100.    pack .t.
151d0 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72  f.    focus -for
151e0 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61  ce .t.f.    upda
151f0 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a  te.    set x {}.
15200 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
15210 6e 64 20 2e 74 2e 66 20 3c 4b 65 79 3e 20 22 6c  nd .t.f <Key> "l
15220 61 70 70 65 6e 64 20 78 20 25 6b 22 0a 20 20 20  append x %k".   
15230 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
15240 2e 74 2e 66 20 3c 4b 65 79 3e 20 2d 62 6f 72 64  .t.f <Key> -bord
15250 65 72 77 69 64 74 68 20 32 69 0a 7d 20 2d 63 6c  erwidth 2i.} -cl
15260 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74  eanup {.    dest
15270 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 74 75  roy .t.f.} -retu
15280 72 6e 43 6f 64 65 73 20 65 72 72 6f 72 20 2d 72  rnCodes error -r
15290 65 73 75 6c 74 20 7b 3c 4b 65 79 3e 20 65 76 65  esult {<Key> eve
152a0 6e 74 20 64 6f 65 73 6e 27 74 20 61 63 63 65 70  nt doesn't accep
152b0 74 20 22 2d 62 6f 72 64 65 72 77 69 64 74 68 22  t "-borderwidth"
152c0 20 6f 70 74 69 6f 6e 7d 0a 0a 74 65 73 74 20 62   option}..test b
152d0 69 6e 64 2d 32 32 2e 32 37 20 7b 48 61 6e 64 6c  ind-22.27 {Handl
152e0 65 45 76 65 6e 74 47 65 6e 65 72 61 74 65 3a 20  eEventGenerate: 
152f0 6f 70 74 69 6f 6e 73 20 3c 42 75 74 74 6f 6e 3e  options <Button>
15300 20 2d 62 75 74 74 6f 6e 20 78 79 7a 7d 20 2d 73   -button xyz} -s
15310 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65  etup {.    frame
15320 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73   .t.f -class Tes
15330 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65  t -width 150 -he
15340 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63  ight 100.    pac
15350 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73  k .t.f.    focus
15360 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20   -force .t.f.   
15370 20 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20   update.    set 
15380 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20  x {}.} -body {. 
15390 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 42 75     bind .t.f <Bu
153a0 74 74 6f 6e 3e 20 22 6c 61 70 70 65 6e 64 20 78  tton> "lappend x
153b0 20 25 62 22 0a 20 20 20 20 65 76 65 6e 74 20 67   %b".    event g
153c0 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75  enerate .t.f <Bu
153d0 74 74 6f 6e 3e 20 2d 62 75 74 74 6f 6e 20 78 79  tton> -button xy
153e0 7a 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  z.} -cleanup {. 
153f0 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
15400 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65  } -returnCodes e
15410 72 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 65 78  rror -result {ex
15420 70 65 63 74 65 64 20 69 6e 74 65 67 65 72 20 62  pected integer b
15430 75 74 20 67 6f 74 20 22 78 79 7a 22 7d 0a 0a 74  ut got "xyz"}..t
15440 65 73 74 20 62 69 6e 64 2d 32 32 2e 32 38 20 7b  est bind-22.28 {
15450 48 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72  HandleEventGener
15460 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 42 75  ate: options <Bu
15470 74 74 6f 6e 3e 20 2d 62 75 74 74 6f 6e 20 31 7d  tton> -button 1}
15480 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72   -setup {.    fr
15490 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20  ame .t.f -class 
154a0 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20  Test -width 150 
154b0 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20  -height 100.    
154c0 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f  pack .t.f.    fo
154d0 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a  cus -force .t.f.
154e0 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73      update.    s
154f0 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20  et x {}.} -body 
15500 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20  {.    bind .t.f 
15510 3c 42 75 74 74 6f 6e 3e 20 22 6c 61 70 70 65 6e  <Button> "lappen
15520 64 20 78 20 25 62 22 0a 20 20 20 20 65 76 65 6e  d x %b".    even
15530 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
15540 3c 42 75 74 74 6f 6e 3e 20 2d 62 75 74 74 6f 6e  <Button> -button
15550 20 31 0a 20 20 20 20 72 65 74 75 72 6e 20 24 78   1.    return $x
15560 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
15570 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d    destroy .t.f.}
15580 20 2d 72 65 73 75 6c 74 20 31 0a 0a 74 65 73 74   -result 1..test
15590 20 62 69 6e 64 2d 32 32 2e 32 39 20 7b 48 61 6e   bind-22.29 {Han
155a0 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61 74 65  dleEventGenerate
155b0 3a 20 6f 70 74 69 6f 6e 73 20 3c 42 75 74 74 6f  : options <Butto
155c0 6e 52 65 6c 65 61 73 65 3e 20 2d 62 75 74 74 6f  nRelease> -butto
155d0 6e 20 31 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20  n 1} -setup {.  
155e0 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c    frame .t.f -cl
155f0 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20  ass Test -width 
15600 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a  150 -height 100.
15610 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20      pack .t.f.  
15620 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e    focus -force .
15630 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20  t.f.    update. 
15640 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62     set x {}.} -b
15650 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e  ody {.    bind .
15660 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65 61  t.f <ButtonRelea
15670 73 65 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25  se> "lappend x %
15680 62 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e  b".    event gen
15690 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74  erate .t.f <Butt
156a0 6f 6e 52 65 6c 65 61 73 65 3e 20 2d 62 75 74 74  onRelease> -butt
156b0 6f 6e 20 31 0a 20 20 20 20 72 65 74 75 72 6e 20  on 1.    return 
156c0 24 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a  $x.} -cleanup {.
156d0 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66      destroy .t.f
156e0 0a 7d 20 2d 72 65 73 75 6c 74 20 31 0a 0a 74 65  .} -result 1..te
156f0 73 74 20 62 69 6e 64 2d 32 32 2e 33 30 20 7b 48  st bind-22.30 {H
15700 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61  andleEventGenera
15710 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 4b 65 79  te: options <Key
15720 3e 20 2d 62 75 74 74 6f 6e 20 31 7d 20 2d 73 65  > -button 1} -se
15730 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20  tup {.    frame 
15740 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74  .t.f -class Test
15750 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69   -width 150 -hei
15760 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b  ght 100.    pack
15770 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20   .t.f.    focus 
15780 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20  -force .t.f.    
15790 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78  update.    set x
157a0 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20   {}.} -body {.  
157b0 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 4b 65 79    bind .t.f <Key
157c0 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25 6b 22  > "lappend x %k"
157d0 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
157e0 61 74 65 20 2e 74 2e 66 20 3c 4b 65 79 3e 20 2d  ate .t.f <Key> -
157f0 62 75 74 74 6f 6e 20 31 0a 7d 20 2d 63 6c 65 61  button 1.} -clea
15800 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f  nup {.    destro
15810 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 74 75 72 6e  y .t.f.} -return
15820 43 6f 64 65 73 20 65 72 72 6f 72 20 2d 72 65 73  Codes error -res
15830 75 6c 74 20 7b 3c 4b 65 79 3e 20 65 76 65 6e 74  ult {<Key> event
15840 20 64 6f 65 73 6e 27 74 20 61 63 63 65 70 74 20   doesn't accept 
15850 22 2d 62 75 74 74 6f 6e 22 20 6f 70 74 69 6f 6e  "-button" option
15860 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e  }..test bind-22.
15870 33 31 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47  31 {HandleEventG
15880 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73  enerate: options
15890 20 3c 45 78 70 6f 73 65 3e 20 2d 63 6f 75 6e 74   <Expose> -count
158a0 20 78 79 7a 7d 20 2d 73 65 74 75 70 20 7b 0a 20   xyz} -setup {. 
158b0 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63     frame .t.f -c
158c0 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
158d0 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
158e0 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20  .    pack .t.f. 
158f0 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20     focus -force 
15900 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a  .t.f.    update.
15910 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d      set x {}.} -
15920 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20  body {.    bind 
15930 2e 74 2e 66 20 3c 45 78 70 6f 73 65 3e 20 22 6c  .t.f <Expose> "l
15940 61 70 70 65 6e 64 20 78 20 25 63 22 0a 20 20 20  append x %c".   
15950 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
15960 2e 74 2e 66 20 3c 45 78 70 6f 73 65 3e 20 2d 63  .t.f <Expose> -c
15970 6f 75 6e 74 20 78 79 7a 0a 7d 20 2d 63 6c 65 61  ount xyz.} -clea
15980 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f  nup {.    destro
15990 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 74 75 72 6e  y .t.f.} -return
159a0 43 6f 64 65 73 20 65 72 72 6f 72 20 2d 72 65 73  Codes error -res
159b0 75 6c 74 20 7b 65 78 70 65 63 74 65 64 20 69 6e  ult {expected in
159c0 74 65 67 65 72 20 62 75 74 20 67 6f 74 20 22 78  teger but got "x
159d0 79 7a 22 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d  yz"}..test bind-
159e0 32 32 2e 33 32 20 7b 48 61 6e 64 6c 65 45 76 65  22.32 {HandleEve
159f0 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69  ntGenerate: opti
15a00 6f 6e 73 20 3c 45 78 70 6f 73 65 3e 20 2d 63 6f  ons <Expose> -co
15a10 75 6e 74 20 32 30 7d 20 2d 73 65 74 75 70 20 7b  unt 20} -setup {
15a20 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
15a30 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
15a40 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
15a50 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
15a60 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
15a70 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
15a80 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d  e.    set x {}.}
15a90 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
15aa0 64 20 2e 74 2e 66 20 3c 45 78 70 6f 73 65 3e 20  d .t.f <Expose> 
15ab0 22 6c 61 70 70 65 6e 64 20 78 20 25 63 22 0a 20  "lappend x %c". 
15ac0 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
15ad0 65 20 2e 74 2e 66 20 3c 45 78 70 6f 73 65 3e 20  e .t.f <Expose> 
15ae0 2d 63 6f 75 6e 74 20 32 30 0a 20 20 20 20 72 65  -count 20.    re
15af0 74 75 72 6e 20 24 78 0a 7d 20 2d 63 6c 65 61 6e  turn $x.} -clean
15b00 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79  up {.    destroy
15b10 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20   .t.f.} -result 
15b20 7b 32 30 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d  {20}..test bind-
15b30 32 32 2e 33 33 20 7b 48 61 6e 64 6c 65 45 76 65  22.33 {HandleEve
15b40 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69  ntGenerate: opti
15b50 6f 6e 73 20 3c 4b 65 79 3e 20 2d 63 6f 75 6e 74  ons <Key> -count
15b60 20 32 30 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20   20} -setup {.  
15b70 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c    frame .t.f -cl
15b80 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20  ass Test -width 
15b90 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a  150 -height 100.
15ba0 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20      pack .t.f.  
15bb0 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e    focus -force .
15bc0 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20  t.f.    update. 
15bd0 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62     set x {}.} -b
15be0 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e  ody {.    bind .
15bf0 74 2e 66 20 3c 4b 65 79 3e 20 22 6c 61 70 70 65  t.f <Key> "lappe
15c00 6e 64 20 78 20 25 62 22 0a 20 20 20 20 65 76 65  nd x %b".    eve
15c10 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
15c20 20 3c 4b 65 79 3e 20 2d 63 6f 75 6e 74 20 32 30   <Key> -count 20
15c30 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
15c40 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d    destroy .t.f.}
15c50 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65 72   -returnCodes er
15c60 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 3c 4b 65  ror -result {<Ke
15c70 79 3e 20 65 76 65 6e 74 20 64 6f 65 73 6e 27 74  y> event doesn't
15c80 20 61 63 63 65 70 74 20 22 2d 63 6f 75 6e 74 22   accept "-count"
15c90 20 6f 70 74 69 6f 6e 7d 0a 0a 74 65 73 74 20 62   option}..test b
15ca0 69 6e 64 2d 32 32 2e 33 34 20 7b 48 61 6e 64 6c  ind-22.34 {Handl
15cb0 65 45 76 65 6e 74 47 65 6e 65 72 61 74 65 3a 20  eEventGenerate: 
15cc0 6f 70 74 69 6f 6e 73 20 3c 45 6e 74 65 72 3e 20  options <Enter> 
15cd0 2d 64 65 74 61 69 6c 20 78 79 7a 7d 20 2d 73 65  -detail xyz} -se
15ce0 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20  tup {.    frame 
15cf0 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74  .t.f -class Test
15d00 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69   -width 150 -hei
15d10 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b  ght 100.    pack
15d20 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20   .t.f.    focus 
15d30 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20  -force .t.f.    
15d40 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78  update.    set x
15d50 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20   {}.} -body {.  
15d60 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 45 6e 74    bind .t.f <Ent
15d70 65 72 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25  er> "lappend x %
15d80 64 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e  d".    event gen
15d90 65 72 61 74 65 20 2e 74 2e 66 20 3c 45 6e 74 65  erate .t.f <Ente
15da0 72 3e 20 2d 64 65 74 61 69 6c 20 78 79 7a 0a 7d  r> -detail xyz.}
15db0 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
15dc0 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d  destroy .t.f.} -
15dd0 72 65 74 75 72 6e 43 6f 64 65 73 20 65 72 72 6f  returnCodes erro
15de0 72 20 2d 72 65 73 75 6c 74 20 7b 62 61 64 20 2d  r -result {bad -
15df0 64 65 74 61 69 6c 20 76 61 6c 75 65 20 22 78 79  detail value "xy
15e00 7a 22 3a 20 6d 75 73 74 20 62 65 20 4e 6f 74 69  z": must be Noti
15e10 66 79 41 6e 63 65 73 74 6f 72 2c 20 4e 6f 74 69  fyAncestor, Noti
15e20 66 79 56 69 72 74 75 61 6c 2c 20 4e 6f 74 69 66  fyVirtual, Notif
15e30 79 49 6e 66 65 72 69 6f 72 2c 20 4e 6f 74 69 66  yInferior, Notif
15e40 79 4e 6f 6e 6c 69 6e 65 61 72 2c 20 4e 6f 74 69  yNonlinear, Noti
15e50 66 79 4e 6f 6e 6c 69 6e 65 61 72 56 69 72 74 75  fyNonlinearVirtu
15e60 61 6c 2c 20 4e 6f 74 69 66 79 50 6f 69 6e 74 65  al, NotifyPointe
15e70 72 2c 20 4e 6f 74 69 66 79 50 6f 69 6e 74 65 72  r, NotifyPointer
15e80 52 6f 6f 74 2c 20 6f 72 20 4e 6f 74 69 66 79 44  Root, or NotifyD
15e90 65 74 61 69 6c 4e 6f 6e 65 7d 0a 0a 74 65 73 74  etailNone}..test
15ea0 20 62 69 6e 64 2d 32 32 2e 33 35 20 7b 48 61 6e   bind-22.35 {Han
15eb0 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61 74 65  dleEventGenerate
15ec0 3a 20 6f 70 74 69 6f 6e 73 20 3c 46 6f 63 75 73  : options <Focus
15ed0 49 6e 3e 20 2d 64 65 74 61 69 6c 20 4e 6f 74 69  In> -detail Noti
15ee0 66 79 56 69 72 74 75 61 6c 7d 20 2d 73 65 74 75  fyVirtual} -setu
15ef0 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74  p {.    frame .t
15f00 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d  .f -class Test -
15f10 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68  width 150 -heigh
15f20 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e  t 100.    pack .
15f30 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66  t.f.    focus -f
15f40 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70  orce .t.f.    up
15f50 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b  date.    set x {
15f60 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  }.} -body {.    
15f70 62 69 6e 64 20 2e 74 2e 66 20 3c 46 6f 63 75 73  bind .t.f <Focus
15f80 49 6e 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 46  In> "lappend x F
15f90 6f 63 75 73 49 6e 20 25 64 22 0a 20 20 20 20 65  ocusIn %d".    e
15fa0 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
15fb0 2e 66 20 3c 46 6f 63 75 73 49 6e 3e 20 2d 64 65  .f <FocusIn> -de
15fc0 74 61 69 6c 20 4e 6f 74 69 66 79 56 69 72 74 75  tail NotifyVirtu
15fd0 61 6c 0a 20 20 20 20 72 65 74 75 72 6e 20 24 78  al.    return $x
15fe0 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
15ff0 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d    destroy .t.f.}
16000 20 2d 72 65 73 75 6c 74 20 7b 46 6f 63 75 73 49   -result {FocusI
16010 6e 20 4e 6f 74 69 66 79 56 69 72 74 75 61 6c 7d  n NotifyVirtual}
16020 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e 33  ..test bind-22.3
16030 35 2e 31 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74  5.1 {HandleEvent
16040 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e  Generate: option
16050 73 20 3c 46 6f 63 75 73 4f 75 74 3e 20 2d 64 65  s <FocusOut> -de
16060 74 61 69 6c 20 4e 6f 74 69 66 79 56 69 72 74 75  tail NotifyVirtu
16070 61 6c 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20  al} -setup {.   
16080 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61   frame .t.f -cla
16090 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
160a0 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20  50 -height 100. 
160b0 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20     pack .t.f.   
160c0 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74   focus -force .t
160d0 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20  .f.    update.  
160e0 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f    set x {}.} -bo
160f0 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74  dy {.    bind .t
16100 2e 66 20 3c 46 6f 63 75 73 4f 75 74 3e 20 22 6c  .f <FocusOut> "l
16110 61 70 70 65 6e 64 20 78 20 46 6f 63 75 73 4f 75  append x FocusOu
16120 74 20 25 64 22 0a 20 20 20 20 65 76 65 6e 74 20  t %d".    event 
16130 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 46  generate .t.f <F
16140 6f 63 75 73 4f 75 74 3e 20 2d 64 65 74 61 69 6c  ocusOut> -detail
16150 20 4e 6f 74 69 66 79 56 69 72 74 75 61 6c 0a 20   NotifyVirtual. 
16160 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d     return $x.} -
16170 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
16180 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
16190 73 75 6c 74 20 7b 46 6f 63 75 73 4f 75 74 20 4e  sult {FocusOut N
161a0 6f 74 69 66 79 56 69 72 74 75 61 6c 7d 0a 0a 74  otifyVirtual}..t
161b0 65 73 74 20 62 69 6e 64 2d 32 32 2e 33 36 20 7b  est bind-22.36 {
161c0 48 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72  HandleEventGener
161d0 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 45 6e  ate: options <En
161e0 74 65 72 3e 20 2d 64 65 74 61 69 6c 20 4e 6f 74  ter> -detail Not
161f0 69 66 79 56 69 72 74 75 61 6c 7d 20 2d 73 65 74  ifyVirtual} -set
16200 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e  up {.    frame .
16210 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20  t.f -class Test 
16220 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67  -width 150 -heig
16230 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20  ht 100.    pack 
16240 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d  .t.f.    focus -
16250 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75  force .t.f.    u
16260 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20  pdate.    set x 
16270 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20  {}.} -body {.   
16280 20 62 69 6e 64 20 2e 74 2e 66 20 3c 45 6e 74 65   bind .t.f <Ente
16290 72 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25 64  r> "lappend x %d
162a0 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  ".    event gene
162b0 72 61 74 65 20 2e 74 2e 66 20 3c 45 6e 74 65 72  rate .t.f <Enter
162c0 3e 20 2d 64 65 74 61 69 6c 20 4e 6f 74 69 66 79  > -detail Notify
162d0 56 69 72 74 75 61 6c 0a 20 20 20 20 72 65 74 75  Virtual.    retu
162e0 72 6e 20 24 78 0a 7d 20 2d 63 6c 65 61 6e 75 70  rn $x.} -cleanup
162f0 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
16300 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 4e  t.f.} -result {N
16310 6f 74 69 66 79 56 69 72 74 75 61 6c 7d 0a 0a 74  otifyVirtual}..t
16320 65 73 74 20 62 69 6e 64 2d 32 32 2e 33 37 20 7b  est bind-22.37 {
16330 48 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72  HandleEventGener
16340 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 4b 65  ate: options <Ke
16350 79 3e 20 2d 64 65 74 61 69 6c 20 4e 6f 74 69 66  y> -detail Notif
16360 79 56 69 72 74 75 61 6c 7d 20 2d 73 65 74 75 70  yVirtual} -setup
16370 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e   {.    frame .t.
16380 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77  f -class Test -w
16390 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74  idth 150 -height
163a0 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74   100.    pack .t
163b0 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f  .f.    focus -fo
163c0 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64  rce .t.f.    upd
163d0 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d  ate.    set x {}
163e0 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62  .} -body {.    b
163f0 69 6e 64 20 2e 74 2e 66 20 3c 4b 65 79 3e 20 22  ind .t.f <Key> "
16400 6c 61 70 70 65 6e 64 20 78 20 25 6b 22 0a 20 20  lappend x %k".  
16410 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
16420 20 2e 74 2e 66 20 3c 4b 65 79 3e 20 2d 64 65 74   .t.f <Key> -det
16430 61 69 6c 20 4e 6f 74 69 66 79 56 69 72 74 75 61  ail NotifyVirtua
16440 6c 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  l.} -cleanup {. 
16450 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
16460 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65  } -returnCodes e
16470 72 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 3c 4b  rror -result {<K
16480 65 79 3e 20 65 76 65 6e 74 20 64 6f 65 73 6e 27  ey> event doesn'
16490 74 20 61 63 63 65 70 74 20 22 2d 64 65 74 61 69  t accept "-detai
164a0 6c 22 20 6f 70 74 69 6f 6e 7d 0a 0a 74 65 73 74  l" option}..test
164b0 20 62 69 6e 64 2d 32 32 2e 33 38 20 7b 48 61 6e   bind-22.38 {Han
164c0 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61 74 65  dleEventGenerate
164d0 3a 20 6f 70 74 69 6f 6e 73 20 3c 45 6e 74 65 72  : options <Enter
164e0 3e 20 2d 66 6f 63 75 73 20 78 79 7a 7d 20 2d 73  > -focus xyz} -s
164f0 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65  etup {.    frame
16500 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73   .t.f -class Tes
16510 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65  t -width 150 -he
16520 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63  ight 100.    pac
16530 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73  k .t.f.    focus
16540 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20   -force .t.f.   
16550 20 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20   update.    set 
16560 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20  x {}.} -body {. 
16570 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 45 6e     bind .t.f <En
16580 74 65 72 3e 20 22 6c 61 70 70 65 6e 64 20 78 20  ter> "lappend x 
16590 25 66 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65  %f".    event ge
165a0 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 45 6e 74  nerate .t.f <Ent
165b0 65 72 3e 20 2d 66 6f 63 75 73 20 78 79 7a 0a 7d  er> -focus xyz.}
165c0 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
165d0 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d  destroy .t.f.} -
165e0 72 65 74 75 72 6e 43 6f 64 65 73 20 65 72 72 6f  returnCodes erro
165f0 72 20 2d 72 65 73 75 6c 74 20 7b 65 78 70 65 63  r -result {expec
16600 74 65 64 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  ted boolean valu
16610 65 20 62 75 74 20 67 6f 74 20 22 78 79 7a 22 7d  e but got "xyz"}
16620 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e 33  ..test bind-22.3
16630 39 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47 65  9 {HandleEventGe
16640 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20  nerate: options 
16650 3c 45 6e 74 65 72 3e 20 2d 66 6f 63 75 73 20 31  <Enter> -focus 1
16660 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66  } -setup {.    f
16670 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73  rame .t.f -class
16680 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30   Test -width 150
16690 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20   -height 100.   
166a0 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66   pack .t.f.    f
166b0 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66  ocus -force .t.f
166c0 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20  .    update.    
166d0 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79  set x {}.} -body
166e0 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66   {.    bind .t.f
166f0 20 3c 45 6e 74 65 72 3e 20 22 6c 61 70 70 65 6e   <Enter> "lappen
16700 64 20 78 20 25 66 22 0a 20 20 20 20 65 76 65 6e  d x %f".    even
16710 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
16720 3c 45 6e 74 65 72 3e 20 2d 66 6f 63 75 73 20 31  <Enter> -focus 1
16730 0a 20 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d  .    return $x.}
16740 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
16750 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d  destroy .t.f.} -
16760 72 65 73 75 6c 74 20 7b 31 7d 0a 0a 74 65 73 74  result {1}..test
16770 20 62 69 6e 64 2d 32 32 2e 34 30 20 7b 48 61 6e   bind-22.40 {Han
16780 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61 74 65  dleEventGenerate
16790 3a 20 6f 70 74 69 6f 6e 73 20 3c 4b 65 79 3e 20  : options <Key> 
167a0 2d 66 6f 63 75 73 20 31 7d 20 2d 73 65 74 75 70  -focus 1} -setup
167b0 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e   {.    frame .t.
167c0 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77  f -class Test -w
167d0 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74  idth 150 -height
167e0 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74   100.    pack .t
167f0 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f  .f.    focus -fo
16800 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64  rce .t.f.    upd
16810 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d  ate.    set x {}
16820 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62  .} -body {.    b
16830 69 6e 64 20 2e 74 2e 66 20 3c 4b 65 79 3e 20 22  ind .t.f <Key> "
16840 6c 61 70 70 65 6e 64 20 78 20 25 6b 22 0a 20 20  lappend x %k".  
16850 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
16860 20 2e 74 2e 66 20 3c 4b 65 79 3e 20 2d 66 6f 63   .t.f <Key> -foc
16870 75 73 20 31 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  us 1.} -cleanup 
16880 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74  {.    destroy .t
16890 2e 66 0a 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65  .f.} -returnCode
168a0 73 20 65 72 72 6f 72 20 2d 72 65 73 75 6c 74 20  s error -result 
168b0 7b 3c 4b 65 79 3e 20 65 76 65 6e 74 20 64 6f 65  {<Key> event doe
168c0 73 6e 27 74 20 61 63 63 65 70 74 20 22 2d 66 6f  sn't accept "-fo
168d0 63 75 73 22 20 6f 70 74 69 6f 6e 7d 0a 0a 74 65  cus" option}..te
168e0 73 74 20 62 69 6e 64 2d 32 32 2e 34 31 20 7b 48  st bind-22.41 {H
168f0 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61  andleEventGenera
16900 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 45 78 70  te: options <Exp
16910 6f 73 65 3e 20 2d 68 65 69 67 68 74 20 78 79 7a  ose> -height xyz
16920 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66  } -setup {.    f
16930 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73  rame .t.f -class
16940 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30   Test -width 150
16950 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20   -height 100.   
16960 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66   pack .t.f.    f
16970 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66  ocus -force .t.f
16980 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20  .    update.    
16990 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79  set x {}.} -body
169a0 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66   {.    bind .t.f
169b0 20 3c 45 78 70 6f 73 65 3e 20 22 6c 61 70 70 65   <Expose> "lappe
169c0 6e 64 20 78 20 25 68 22 0a 20 20 20 20 65 76 65  nd x %h".    eve
169d0 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
169e0 20 3c 45 78 70 6f 73 65 3e 20 2d 68 65 69 67 68   <Expose> -heigh
169f0 74 20 78 79 7a 0a 7d 20 2d 63 6c 65 61 6e 75 70  t xyz.} -cleanup
16a00 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
16a10 74 2e 66 0a 7d 20 2d 72 65 74 75 72 6e 43 6f 64  t.f.} -returnCod
16a20 65 73 20 65 72 72 6f 72 20 2d 72 65 73 75 6c 74  es error -result
16a30 20 7b 62 61 64 20 73 63 72 65 65 6e 20 64 69 73   {bad screen dis
16a40 74 61 6e 63 65 20 22 78 79 7a 22 7d 0a 0a 74 65  tance "xyz"}..te
16a50 73 74 20 62 69 6e 64 2d 32 32 2e 34 32 20 7b 48  st bind-22.42 {H
16a60 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61  andleEventGenera
16a70 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 45 78 70  te: options <Exp
16a80 6f 73 65 3e 20 2d 68 65 69 67 68 74 20 32 69 7d  ose> -height 2i}
16a90 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72   -setup {.    fr
16aa0 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20  ame .t.f -class 
16ab0 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20  Test -width 150 
16ac0 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20  -height 100.    
16ad0 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f  pack .t.f.    fo
16ae0 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a  cus -force .t.f.
16af0 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73      update.    s
16b00 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20  et x {}.} -body 
16b10 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20  {.    bind .t.f 
16b20 3c 45 78 70 6f 73 65 3e 20 22 6c 61 70 70 65 6e  <Expose> "lappen
16b30 64 20 78 20 25 68 22 0a 20 20 20 20 65 76 65 6e  d x %h".    even
16b40 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
16b50 3c 45 78 70 6f 73 65 3e 20 2d 68 65 69 67 68 74  <Expose> -height
16b60 20 32 69 0a 20 20 20 20 65 78 70 72 20 7b 24 78   2i.    expr {$x
16b70 20 65 71 20 5b 77 69 6e 66 6f 20 70 69 78 65 6c   eq [winfo pixel
16b80 73 20 2e 74 2e 66 20 32 69 5d 7d 0a 7d 20 2d 63  s .t.f 2i]}.} -c
16b90 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73  leanup {.    des
16ba0 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73  troy .t.f.} -res
16bb0 75 6c 74 20 7b 31 7d 0a 0a 74 65 73 74 20 62 69  ult {1}..test bi
16bc0 6e 64 2d 32 32 2e 34 33 20 7b 48 61 6e 64 6c 65  nd-22.43 {Handle
16bd0 45 76 65 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f  EventGenerate: o
16be0 70 74 69 6f 6e 73 20 3c 43 6f 6e 66 69 67 75 72  ptions <Configur
16bf0 65 3e 20 2d 68 65 69 67 68 74 20 32 69 7d 20 2d  e> -height 2i} -
16c00 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d  setup {.    fram
16c10 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65  e .t.f -class Te
16c20 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68  st -width 150 -h
16c30 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61  eight 100.    pa
16c40 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75  ck .t.f.    focu
16c50 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20  s -force .t.f.  
16c60 20 20 75 70 64 61 74 65 0a 20 20 20 20 73 65 74    update.    set
16c70 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a   x {}.} -body {.
16c80 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 43      bind .t.f <C
16c90 6f 6e 66 69 67 75 72 65 3e 20 22 6c 61 70 70 65  onfigure> "lappe
16ca0 6e 64 20 78 20 25 68 22 0a 20 20 20 20 65 76 65  nd x %h".    eve
16cb0 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
16cc0 20 3c 43 6f 6e 66 69 67 75 72 65 3e 20 2d 68 65   <Configure> -he
16cd0 69 67 68 74 20 32 69 0a 20 20 20 20 65 78 70 72  ight 2i.    expr
16ce0 20 7b 24 78 20 65 71 20 5b 77 69 6e 66 6f 20 70   {$x eq [winfo p
16cf0 69 78 65 6c 73 20 2e 74 2e 66 20 32 69 5d 7d 0a  ixels .t.f 2i]}.
16d00 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20  } -cleanup {.   
16d10 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20   destroy .t.f.} 
16d20 2d 72 65 73 75 6c 74 20 7b 31 7d 0a 0a 74 65 73  -result {1}..tes
16d30 74 20 62 69 6e 64 2d 32 32 2e 34 34 20 7b 48 61  t bind-22.44 {Ha
16d40 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61 74  ndleEventGenerat
16d50 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 4b 65 79 3e  e: options <Key>
16d60 20 2d 68 65 69 67 68 74 20 32 69 7d 20 2d 73 65   -height 2i} -se
16d70 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20  tup {.    frame 
16d80 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74  .t.f -class Test
16d90 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69   -width 150 -hei
16da0 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b  ght 100.    pack
16db0 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20   .t.f.    focus 
16dc0 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20  -force .t.f.    
16dd0 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78  update.    set x
16de0 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20   {}.} -body {.  
16df0 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 4b 65 79    bind .t.f <Key
16e00 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25 6b 22  > "lappend x %k"
16e10 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
16e20 61 74 65 20 2e 74 2e 66 20 3c 4b 65 79 3e 20 2d  ate .t.f <Key> -
16e30 68 65 69 67 68 74 20 32 69 0a 7d 20 2d 63 6c 65  height 2i.} -cle
16e40 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72  anup {.    destr
16e50 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 74 75 72  oy .t.f.} -retur
16e60 6e 43 6f 64 65 73 20 65 72 72 6f 72 20 2d 72 65  nCodes error -re
16e70 73 75 6c 74 20 7b 3c 4b 65 79 3e 20 65 76 65 6e  sult {<Key> even
16e80 74 20 64 6f 65 73 6e 27 74 20 61 63 63 65 70 74  t doesn't accept
16e90 20 22 2d 68 65 69 67 68 74 22 20 6f 70 74 69 6f   "-height" optio
16ea0 6e 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 32  n}..test bind-22
16eb0 2e 34 35 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74  .45 {HandleEvent
16ec0 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e  Generate: option
16ed0 73 20 3c 4b 65 79 3e 20 2d 6b 65 79 63 6f 64 65  s <Key> -keycode
16ee0 20 78 79 7a 7d 20 2d 73 65 74 75 70 20 7b 0a 20   xyz} -setup {. 
16ef0 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63     frame .t.f -c
16f00 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
16f10 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
16f20 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20  .    pack .t.f. 
16f30 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20     focus -force 
16f40 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a  .t.f.    update.
16f50 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d      set x {}.} -
16f60 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20  body {.    bind 
16f70 2e 74 2e 66 20 3c 4b 65 79 3e 20 22 6c 61 70 70  .t.f <Key> "lapp
16f80 65 6e 64 20 78 20 25 6b 22 0a 20 20 20 20 65 76  end x %k".    ev
16f90 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
16fa0 66 20 3c 4b 65 79 3e 20 2d 6b 65 79 63 6f 64 65  f <Key> -keycode
16fb0 20 78 79 7a 0a 7d 20 2d 63 6c 65 61 6e 75 70 20   xyz.} -cleanup 
16fc0 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74  {.    destroy .t
16fd0 2e 66 0a 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65  .f.} -returnCode
16fe0 73 20 65 72 72 6f 72 20 2d 72 65 73 75 6c 74 20  s error -result 
16ff0 7b 65 78 70 65 63 74 65 64 20 69 6e 74 65 67 65  {expected intege
17000 72 20 62 75 74 20 67 6f 74 20 22 78 79 7a 22 7d  r but got "xyz"}
17010 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e 34  ..test bind-22.4
17020 36 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47 65  6 {HandleEventGe
17030 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20  nerate: options 
17040 3c 4b 65 79 3e 20 2d 6b 65 79 63 6f 64 65 20 32  <Key> -keycode 2
17050 30 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20  0} -setup {.    
17060 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73  frame .t.f -clas
17070 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35  s Test -width 15
17080 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20  0 -height 100.  
17090 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20    pack .t.f.    
170a0 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e  focus -force .t.
170b0 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20 20  f.    update.   
170c0 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64   set x {}.} -bod
170d0 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  y {.    bind .t.
170e0 66 20 3c 4b 65 79 3e 20 22 6c 61 70 70 65 6e 64  f <Key> "lappend
170f0 20 78 20 25 6b 22 0a 20 20 20 20 65 76 65 6e 74   x %k".    event
17100 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
17110 4b 65 79 3e 20 2d 6b 65 79 63 6f 64 65 20 32 30  Key> -keycode 20
17120 0a 20 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d  .    return $x.}
17130 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
17140 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d  destroy .t.f.} -
17150 72 65 73 75 6c 74 20 7b 32 30 7d 0a 0a 74 65 73  result {20}..tes
17160 74 20 62 69 6e 64 2d 32 32 2e 34 37 20 7b 48 61  t bind-22.47 {Ha
17170 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61 74  ndleEventGenerat
17180 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 42 75 74 74  e: options <Butt
17190 6f 6e 3e 20 2d 6b 65 79 63 6f 64 65 20 32 30 7d  on> -keycode 20}
171a0 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72   -setup {.    fr
171b0 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20  ame .t.f -class 
171c0 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20  Test -width 150 
171d0 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20  -height 100.    
171e0 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f  pack .t.f.    fo
171f0 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a  cus -force .t.f.
17200 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73      update.    s
17210 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20  et x {}.} -body 
17220 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20  {.    bind .t.f 
17230 3c 42 75 74 74 6f 6e 3e 20 22 6c 61 70 70 65 6e  <Button> "lappen
17240 64 20 78 20 25 62 22 0a 20 20 20 20 65 76 65 6e  d x %b".    even
17250 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
17260 3c 42 75 74 74 6f 6e 3e 20 2d 6b 65 79 63 6f 64  <Button> -keycod
17270 65 20 32 30 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  e 20.} -cleanup 
17280 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74  {.    destroy .t
17290 2e 66 0a 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65  .f.} -returnCode
172a0 73 20 65 72 72 6f 72 20 2d 72 65 73 75 6c 74 20  s error -result 
172b0 7b 3c 42 75 74 74 6f 6e 3e 20 65 76 65 6e 74 20  {<Button> event 
172c0 64 6f 65 73 6e 27 74 20 61 63 63 65 70 74 20 22  doesn't accept "
172d0 2d 6b 65 79 63 6f 64 65 22 20 6f 70 74 69 6f 6e  -keycode" option
172e0 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e  }..test bind-22.
172f0 34 38 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47  48 {HandleEventG
17300 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73  enerate: options
17310 20 3c 4b 65 79 3e 20 2d 6b 65 79 73 79 6d 20 78   <Key> -keysym x
17320 79 7a 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20  yz} -setup {.   
17330 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61   frame .t.f -cla
17340 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
17350 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20  50 -height 100. 
17360 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20     pack .t.f.   
17370 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74   focus -force .t
17380 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20  .f.    update.  
17390 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f    set x {}.} -bo
173a0 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74  dy {.    bind .t
173b0 2e 66 20 3c 4b 65 79 3e 20 22 6c 61 70 70 65 6e  .f <Key> "lappen
173c0 64 20 78 20 25 4b 22 0a 20 20 20 20 65 76 65 6e  d x %K".    even
173d0 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
173e0 3c 4b 65 79 3e 20 2d 6b 65 79 73 79 6d 20 78 79  <Key> -keysym xy
173f0 7a 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  z.} -cleanup {. 
17400 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
17410 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65  } -returnCodes e
17420 72 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 75 6e  rror -result {un
17430 6b 6e 6f 77 6e 20 6b 65 79 73 79 6d 20 22 78 79  known keysym "xy
17440 7a 22 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32  z"}..test bind-2
17450 32 2e 34 39 20 7b 48 61 6e 64 6c 65 45 76 65 6e  2.49 {HandleEven
17460 74 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f  tGenerate: optio
17470 6e 73 20 3c 4b 65 79 3e 20 2d 6b 65 79 73 79 6d  ns <Key> -keysym
17480 20 73 70 61 63 65 7d 20 2d 73 65 74 75 70 20 7b   space} -setup {
17490 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
174a0 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
174b0 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
174c0 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
174d0 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
174e0 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
174f0 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d  e.    set x {}.}
17500 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
17510 64 20 2e 74 2e 66 20 3c 4b 65 79 3e 20 22 6c 61  d .t.f <Key> "la
17520 70 70 65 6e 64 20 78 20 25 4b 22 0a 20 20 20 20  ppend x %K".    
17530 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
17540 74 2e 66 20 3c 4b 65 79 3e 20 2d 6b 65 79 73 79  t.f <Key> -keysy
17550 6d 20 73 70 61 63 65 0a 20 20 20 20 72 65 74 75  m space.    retu
17560 72 6e 20 24 78 0a 7d 20 2d 63 6c 65 61 6e 75 70  rn $x.} -cleanup
17570 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
17580 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 73  t.f.} -result {s
17590 70 61 63 65 7d 0a 0a 74 65 73 74 20 62 69 6e 64  pace}..test bind
175a0 2d 32 32 2e 35 30 20 7b 48 61 6e 64 6c 65 45 76  -22.50 {HandleEv
175b0 65 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f 70 74  entGenerate: opt
175c0 69 6f 6e 73 20 3c 42 75 74 74 6f 6e 3e 20 2d 6b  ions <Button> -k
175d0 65 79 73 79 6d 20 73 70 61 63 65 7d 20 2d 73 65  eysym space} -se
175e0 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20  tup {.    frame 
175f0 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74  .t.f -class Test
17600 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69   -width 150 -hei
17610 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b  ght 100.    pack
17620 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20   .t.f.    focus 
17630 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20  -force .t.f.    
17640 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78  update.    set x
17650 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20   {}.} -body {.  
17660 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 42 75 74    bind .t.f <But
17670 74 6f 6e 3e 20 22 6c 61 70 70 65 6e 64 20 78 20  ton> "lappend x 
17680 25 62 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65  %b".    event ge
17690 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74  nerate .t.f <But
176a0 74 6f 6e 3e 20 2d 6b 65 79 73 79 6d 20 73 70 61  ton> -keysym spa
176b0 63 65 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a  ce.} -cleanup {.
176c0 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66      destroy .t.f
176d0 0a 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20  .} -returnCodes 
176e0 65 72 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 3c  error -result {<
176f0 42 75 74 74 6f 6e 3e 20 65 76 65 6e 74 20 64 6f  Button> event do
17700 65 73 6e 27 74 20 61 63 63 65 70 74 20 22 2d 6b  esn't accept "-k
17710 65 79 73 79 6d 22 20 6f 70 74 69 6f 6e 7d 0a 0a  eysym" option}..
17720 74 65 73 74 20 62 69 6e 64 2d 32 32 2e 35 31 20  test bind-22.51 
17730 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65  {HandleEventGene
17740 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 45  rate: options <E
17750 6e 74 65 72 3e 20 2d 6d 6f 64 65 20 78 79 7a 7d  nter> -mode xyz}
17760 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72   -setup {.    fr
17770 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20  ame .t.f -class 
17780 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20  Test -width 150 
17790 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20  -height 100.    
177a0 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f  pack .t.f.    fo
177b0 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a  cus -force .t.f.
177c0 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73      update.    s
177d0 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20  et x {}.} -body 
177e0 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20  {.    bind .t.f 
177f0 3c 45 6e 74 65 72 3e 20 22 6c 61 70 70 65 6e 64  <Enter> "lappend
17800 20 78 20 25 6d 22 0a 20 20 20 20 65 76 65 6e 74   x %m".    event
17810 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
17820 45 6e 74 65 72 3e 20 2d 6d 6f 64 65 20 78 79 7a  Enter> -mode xyz
17830 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
17840 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d    destroy .t.f.}
17850 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65 72   -returnCodes er
17860 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 62 61 64  ror -result {bad
17870 20 2d 6d 6f 64 65 20 76 61 6c 75 65 20 22 78 79   -mode value "xy
17880 7a 22 3a 20 6d 75 73 74 20 62 65 20 4e 6f 74 69  z": must be Noti
17890 66 79 4e 6f 72 6d 61 6c 2c 20 4e 6f 74 69 66 79  fyNormal, Notify
178a0 47 72 61 62 2c 20 4e 6f 74 69 66 79 55 6e 67 72  Grab, NotifyUngr
178b0 61 62 2c 20 6f 72 20 4e 6f 74 69 66 79 57 68 69  ab, or NotifyWhi
178c0 6c 65 47 72 61 62 62 65 64 7d 0a 0a 74 65 73 74  leGrabbed}..test
178d0 20 62 69 6e 64 2d 32 32 2e 35 32 20 7b 48 61 6e   bind-22.52 {Han
178e0 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61 74 65  dleEventGenerate
178f0 3a 20 6f 70 74 69 6f 6e 73 20 3c 45 6e 74 65 72  : options <Enter
17900 3e 20 2d 6d 6f 64 65 20 4e 6f 74 69 66 79 4e 6f  > -mode NotifyNo
17910 72 6d 61 6c 7d 20 2d 73 65 74 75 70 20 7b 0a 20  rmal} -setup {. 
17920 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63     frame .t.f -c
17930 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
17940 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
17950 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20  .    pack .t.f. 
17960 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20     focus -force 
17970 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a  .t.f.    update.
17980 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d      set x {}.} -
17990 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20  body {.    bind 
179a0 2e 74 2e 66 20 3c 45 6e 74 65 72 3e 20 22 6c 61  .t.f <Enter> "la
179b0 70 70 65 6e 64 20 78 20 25 6d 22 0a 20 20 20 20  ppend x %m".    
179c0 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
179d0 74 2e 66 20 3c 45 6e 74 65 72 3e 20 2d 6d 6f 64  t.f <Enter> -mod
179e0 65 20 4e 6f 74 69 66 79 4e 6f 72 6d 61 6c 0a 20  e NotifyNormal. 
179f0 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d     return $x.} -
17a00 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
17a10 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
17a20 73 75 6c 74 20 7b 4e 6f 74 69 66 79 4e 6f 72 6d  sult {NotifyNorm
17a30 61 6c 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32  al}..test bind-2
17a40 32 2e 35 33 20 7b 48 61 6e 64 6c 65 45 76 65 6e  2.53 {HandleEven
17a50 74 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f  tGenerate: optio
17a60 6e 73 20 3c 46 6f 63 75 73 49 6e 3e 20 2d 6d 6f  ns <FocusIn> -mo
17a70 64 65 20 4e 6f 74 69 66 79 4e 6f 72 6d 61 6c 7d  de NotifyNormal}
17a80 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72   -setup {.    fr
17a90 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20  ame .t.f -class 
17aa0 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20  Test -width 150 
17ab0 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20  -height 100.    
17ac0 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f  pack .t.f.    fo
17ad0 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a  cus -force .t.f.
17ae0 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73      update.    s
17af0 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20  et x {}.} -body 
17b00 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20  {.    bind .t.f 
17b10 3c 46 6f 63 75 73 49 6e 3e 20 22 6c 61 70 70 65  <FocusIn> "lappe
17b20 6e 64 20 78 20 25 6d 22 0a 20 20 20 20 65 76 65  nd x %m".    eve
17b30 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
17b40 20 3c 46 6f 63 75 73 49 6e 3e 20 2d 6d 6f 64 65   <FocusIn> -mode
17b50 20 4e 6f 74 69 66 79 4e 6f 72 6d 61 6c 0a 20 20   NotifyNormal.  
17b60 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d 63    return $x.} -c
17b70 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73  leanup {.    des
17b80 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73  troy .t.f.} -res
17b90 75 6c 74 20 7b 4e 6f 74 69 66 79 4e 6f 72 6d 61  ult {NotifyNorma
17ba0 6c 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 32  l}..test bind-22
17bb0 2e 35 34 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74  .54 {HandleEvent
17bc0 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e  Generate: option
17bd0 73 20 3c 4b 65 79 3e 20 2d 6d 6f 64 65 20 4e 6f  s <Key> -mode No
17be0 74 69 66 79 4e 6f 72 6d 61 6c 7d 20 2d 73 65 74  tifyNormal} -set
17bf0 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e  up {.    frame .
17c00 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20  t.f -class Test 
17c10 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67  -width 150 -heig
17c20 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20  ht 100.    pack 
17c30 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d  .t.f.    focus -
17c40 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75  force .t.f.    u
17c50 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20  pdate.    set x 
17c60 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20  {}.} -body {.   
17c70 20 62 69 6e 64 20 2e 74 2e 66 20 3c 4b 65 79 3e   bind .t.f <Key>
17c80 20 22 6c 61 70 70 65 6e 64 20 78 20 25 6b 22 0a   "lappend x %k".
17c90 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
17ca0 74 65 20 2e 74 2e 66 20 3c 4b 65 79 3e 20 2d 6d  te .t.f <Key> -m
17cb0 6f 64 65 20 4e 6f 74 69 66 79 4e 6f 72 6d 61 6c  ode NotifyNormal
17cc0 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
17cd0 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d    destroy .t.f.}
17ce0 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65 72   -returnCodes er
17cf0 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 3c 4b 65  ror -result {<Ke
17d00 79 3e 20 65 76 65 6e 74 20 64 6f 65 73 6e 27 74  y> event doesn't
17d10 20 61 63 63 65 70 74 20 22 2d 6d 6f 64 65 22 20   accept "-mode" 
17d20 6f 70 74 69 6f 6e 7d 0a 74 65 73 74 20 62 69 6e  option}.test bin
17d30 64 2d 32 32 2e 35 35 20 7b 48 61 6e 64 6c 65 45  d-22.55 {HandleE
17d40 76 65 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f 70  ventGenerate: op
17d50 74 69 6f 6e 73 20 3c 4d 61 70 3e 20 2d 6f 76 65  tions <Map> -ove
17d60 72 72 69 64 65 20 78 79 7a 7d 20 2d 73 65 74 75  rride xyz} -setu
17d70 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74  p {.    frame .t
17d80 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d  .f -class Test -
17d90 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68  width 150 -heigh
17da0 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e  t 100.    pack .
17db0 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66  t.f.    focus -f
17dc0 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70  orce .t.f.    up
17dd0 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b  date.    set x {
17de0 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  }.} -body {.    
17df0 62 69 6e 64 20 2e 74 2e 66 20 3c 4d 61 70 3e 20  bind .t.f <Map> 
17e00 22 6c 61 70 70 65 6e 64 20 78 20 25 6f 22 0a 20  "lappend x %o". 
17e10 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
17e20 65 20 2e 74 2e 66 20 3c 4d 61 70 3e 20 2d 6f 76  e .t.f <Map> -ov
17e30 65 72 72 69 64 65 20 78 79 7a 20 0a 7d 20 2d 63  erride xyz .} -c
17e40 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73  leanup {.    des
17e50 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 74  troy .t.f.} -ret
17e60 75 72 6e 43 6f 64 65 73 20 65 72 72 6f 72 20 2d  urnCodes error -
17e70 72 65 73 75 6c 74 20 7b 65 78 70 65 63 74 65 64  result {expected
17e80 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 20 62   boolean value b
17e90 75 74 20 67 6f 74 20 22 78 79 7a 22 7d 0a 0a 74  ut got "xyz"}..t
17ea0 65 73 74 20 62 69 6e 64 2d 32 32 2e 35 36 20 7b  est bind-22.56 {
17eb0 48 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72  HandleEventGener
17ec0 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 4d 61  ate: options <Ma
17ed0 70 3e 20 2d 6f 76 65 72 72 69 64 65 20 31 7d 20  p> -override 1} 
17ee0 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61  -setup {.    fra
17ef0 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54  me .t.f -class T
17f00 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d  est -width 150 -
17f10 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70  height 100.    p
17f20 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63  ack .t.f.    foc
17f30 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20  us -force .t.f. 
17f40 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73 65     update.    se
17f50 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b  t x {}.} -body {
17f60 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c  .    bind .t.f <
17f70 4d 61 70 3e 20 22 6c 61 70 70 65 6e 64 20 78 20  Map> "lappend x 
17f80 25 6f 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65  %o".    event ge
17f90 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 4d 61 70  nerate .t.f <Map
17fa0 3e 20 2d 6f 76 65 72 72 69 64 65 20 31 20 0a 20  > -override 1 . 
17fb0 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d     return $x.} -
17fc0 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
17fd0 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
17fe0 73 75 6c 74 20 7b 31 7d 0a 0a 74 65 73 74 20 62  sult {1}..test b
17ff0 69 6e 64 2d 32 32 2e 35 37 20 7b 48 61 6e 64 6c  ind-22.57 {Handl
18000 65 45 76 65 6e 74 47 65 6e 65 72 61 74 65 3a 20  eEventGenerate: 
18010 6f 70 74 69 6f 6e 73 20 3c 52 65 70 61 72 65 6e  options <Reparen
18020 74 3e 20 2d 6f 76 65 72 72 69 64 65 20 31 7d 20  t> -override 1} 
18030 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61  -setup {.    fra
18040 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54  me .t.f -class T
18050 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d  est -width 150 -
18060 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70  height 100.    p
18070 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63  ack .t.f.    foc
18080 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20  us -force .t.f. 
18090 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73 65     update.    se
180a0 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b  t x {}.} -body {
180b0 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c  .    bind .t.f <
180c0 52 65 70 61 72 65 6e 74 3e 20 22 6c 61 70 70 65  Reparent> "lappe
180d0 6e 64 20 78 20 25 6f 22 0a 20 20 20 20 65 76 65  nd x %o".    eve
180e0 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
180f0 20 3c 52 65 70 61 72 65 6e 74 3e 20 2d 6f 76 65   <Reparent> -ove
18100 72 72 69 64 65 20 31 20 0a 20 20 20 20 72 65 74  rride 1 .    ret
18110 75 72 6e 20 24 78 0a 7d 20 2d 63 6c 65 61 6e 75  urn $x.} -cleanu
18120 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20  p {.    destroy 
18130 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b  .t.f.} -result {
18140 31 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 32  1}..test bind-22
18150 2e 35 38 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74  .58 {HandleEvent
18160 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e  Generate: option
18170 73 20 3c 43 6f 6e 66 69 67 75 72 65 3e 20 2d 6f  s <Configure> -o
18180 76 65 72 72 69 64 65 20 31 7d 20 2d 73 65 74 75  verride 1} -setu
18190 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74  p {.    frame .t
181a0 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d  .f -class Test -
181b0 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68  width 150 -heigh
181c0 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e  t 100.    pack .
181d0 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66  t.f.    focus -f
181e0 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70  orce .t.f.    up
181f0 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b  date.    set x {
18200 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  }.} -body {.    
18210 62 69 6e 64 20 2e 74 2e 66 20 3c 43 6f 6e 66 69  bind .t.f <Confi
18220 67 75 72 65 3e 20 22 6c 61 70 70 65 6e 64 20 78  gure> "lappend x
18230 20 25 6f 22 0a 20 20 20 20 65 76 65 6e 74 20 67   %o".    event g
18240 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 43 6f  enerate .t.f <Co
18250 6e 66 69 67 75 72 65 3e 20 2d 6f 76 65 72 72 69  nfigure> -overri
18260 64 65 20 31 20 0a 20 20 20 20 72 65 74 75 72 6e  de 1 .    return
18270 20 24 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b   $x.} -cleanup {
18280 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e  .    destroy .t.
18290 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 31 7d 0a  f.} -result {1}.
182a0 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e 35 39  .test bind-22.59
182b0 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e   {HandleEventGen
182c0 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c  erate: options <
182d0 4b 65 79 3e 20 2d 6f 76 65 72 72 69 64 65 20 31  Key> -override 1
182e0 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66  } -setup {.    f
182f0 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73  rame .t.f -class
18300 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30   Test -width 150
18310 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20   -height 100.   
18320 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66   pack .t.f.    f
18330 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66  ocus -force .t.f
18340 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20  .    update.    
18350 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79  set x {}.} -body
18360 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66   {.    bind .t.f
18370 20 3c 4b 65 79 3e 20 22 6c 61 70 70 65 6e 64 20   <Key> "lappend 
18380 78 20 25 6b 22 0a 20 20 20 20 65 76 65 6e 74 20  x %k".    event 
18390 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 4b  generate .t.f <K
183a0 65 79 3e 20 2d 6f 76 65 72 72 69 64 65 20 31 20  ey> -override 1 
183b0 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
183c0 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d    destroy .t.f.}
183d0 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65 72   -returnCodes er
183e0 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 3c 4b 65  ror -result {<Ke
183f0 79 3e 20 65 76 65 6e 74 20 64 6f 65 73 6e 27 74  y> event doesn't
18400 20 61 63 63 65 70 74 20 22 2d 6f 76 65 72 72 69   accept "-overri
18410 64 65 22 20 6f 70 74 69 6f 6e 7d 0a 0a 74 65 73  de" option}..tes
18420 74 20 62 69 6e 64 2d 32 32 2e 36 30 20 7b 48 61  t bind-22.60 {Ha
18430 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61 74  ndleEventGenerat
18440 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 43 69 72 63  e: options <Circ
18450 75 6c 61 74 65 3e 20 2d 70 6c 61 63 65 20 78 79  ulate> -place xy
18460 7a 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20  z} -setup {.    
18470 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73  frame .t.f -clas
18480 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35  s Test -width 15
18490 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20  0 -height 100.  
184a0 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20    pack .t.f.    
184b0 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e  focus -force .t.
184c0 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20 20  f.    update.   
184d0 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64   set x {}.} -bod
184e0 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  y {.    bind .t.
184f0 66 20 3c 43 69 72 63 75 6c 61 74 65 3e 20 22 6c  f <Circulate> "l
18500 61 70 70 65 6e 64 20 78 20 25 70 22 0a 20 20 20  append x %p".   
18510 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
18520 2e 74 2e 66 20 3c 43 69 72 63 75 6c 61 74 65 3e  .t.f <Circulate>
18530 20 2d 70 6c 61 63 65 20 78 79 7a 20 0a 7d 20 2d   -place xyz .} -
18540 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
18550 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
18560 74 75 72 6e 43 6f 64 65 73 20 65 72 72 6f 72 20  turnCodes error 
18570 2d 72 65 73 75 6c 74 20 7b 62 61 64 20 2d 70 6c  -result {bad -pl
18580 61 63 65 20 76 61 6c 75 65 20 22 78 79 7a 22 3a  ace value "xyz":
18590 20 6d 75 73 74 20 62 65 20 50 6c 61 63 65 4f 6e   must be PlaceOn
185a0 54 6f 70 2c 20 6f 72 20 50 6c 61 63 65 4f 6e 42  Top, or PlaceOnB
185b0 6f 74 74 6f 6d 7d 0a 0a 74 65 73 74 20 62 69 6e  ottom}..test bin
185c0 64 2d 32 32 2e 36 31 20 7b 48 61 6e 64 6c 65 45  d-22.61 {HandleE
185d0 76 65 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f 70  ventGenerate: op
185e0 74 69 6f 6e 73 20 3c 43 69 72 63 75 6c 61 74 65  tions <Circulate
185f0 3e 20 2d 70 6c 61 63 65 20 50 6c 61 63 65 4f 6e  > -place PlaceOn
18600 54 6f 70 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20  Top} -setup {.  
18610 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c    frame .t.f -cl
18620 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20  ass Test -width 
18630 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a  150 -height 100.
18640 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20      pack .t.f.  
18650 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e    focus -force .
18660 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20  t.f.    update. 
18670 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62     set x {}.} -b
18680 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e  ody {.    bind .
18690 74 2e 66 20 3c 43 69 72 63 75 6c 61 74 65 3e 20  t.f <Circulate> 
186a0 22 6c 61 70 70 65 6e 64 20 78 20 25 70 22 0a 20  "lappend x %p". 
186b0 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
186c0 65 20 2e 74 2e 66 20 3c 43 69 72 63 75 6c 61 74  e .t.f <Circulat
186d0 65 3e 20 2d 70 6c 61 63 65 20 50 6c 61 63 65 4f  e> -place PlaceO
186e0 6e 54 6f 70 20 0a 20 20 20 20 72 65 74 75 72 6e  nTop .    return
186f0 20 24 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b   $x.} -cleanup {
18700 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e  .    destroy .t.
18710 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 50 6c 61  f.} -result {Pla
18720 63 65 4f 6e 54 6f 70 7d 0a 0a 74 65 73 74 20 62  ceOnTop}..test b
18730 69 6e 64 2d 32 32 2e 36 32 20 7b 48 61 6e 64 6c  ind-22.62 {Handl
18740 65 45 76 65 6e 74 47 65 6e 65 72 61 74 65 3a 20  eEventGenerate: 
18750 6f 70 74 69 6f 6e 73 20 3c 4b 65 79 3e 20 2d 70  options <Key> -p
18760 6c 61 63 65 20 50 6c 61 63 65 4f 6e 54 6f 70 7d  lace PlaceOnTop}
18770 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72   -setup {.    fr
18780 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20  ame .t.f -class 
18790 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20  Test -width 150 
187a0 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20  -height 100.    
187b0 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f  pack .t.f.    fo
187c0 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a  cus -force .t.f.
187d0 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73      update.    s
187e0 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20  et x {}.} -body 
187f0 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20  {.    bind .t.f 
18800 3c 4b 65 79 3e 20 22 6c 61 70 70 65 6e 64 20 78  <Key> "lappend x
18810 20 25 6b 22 0a 20 20 20 20 65 76 65 6e 74 20 67   %k".    event g
18820 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 4b 65  enerate .t.f <Ke
18830 79 3e 20 2d 70 6c 61 63 65 20 50 6c 61 63 65 4f  y> -place PlaceO
18840 6e 54 6f 70 20 0a 7d 20 2d 63 6c 65 61 6e 75 70  nTop .} -cleanup
18850 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
18860 74 2e 66 0a 7d 20 2d 72 65 74 75 72 6e 43 6f 64  t.f.} -returnCod
18870 65 73 20 65 72 72 6f 72 20 2d 72 65 73 75 6c 74  es error -result
18880 20 7b 3c 4b 65 79 3e 20 65 76 65 6e 74 20 64 6f   {<Key> event do
18890 65 73 6e 27 74 20 61 63 63 65 70 74 20 22 2d 70  esn't accept "-p
188a0 6c 61 63 65 22 20 6f 70 74 69 6f 6e 7d 0a 0a 74  lace" option}..t
188b0 65 73 74 20 62 69 6e 64 2d 32 32 2e 36 33 20 7b  est bind-22.63 {
188c0 48 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72  HandleEventGener
188d0 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 4b 65  ate: options <Ke
188e0 79 3e 20 2d 72 6f 6f 74 20 2e 78 79 7a 7d 20 2d  y> -root .xyz} -
188f0 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d  setup {.    fram
18900 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65  e .t.f -class Te
18910 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68  st -width 150 -h
18920 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61  eight 100.    pa
18930 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75  ck .t.f.    focu
18940 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20  s -force .t.f.  
18950 20 20 75 70 64 61 74 65 0a 20 20 20 20 73 65 74    update.    set
18960 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a   x {}.} -body {.
18970 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 4b      bind .t.f <K
18980 65 79 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25  ey> "lappend x %
18990 52 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e  R".    event gen
189a0 65 72 61 74 65 20 2e 74 2e 66 20 3c 4b 65 79 3e  erate .t.f <Key>
189b0 20 2d 72 6f 6f 74 20 2e 78 79 7a 20 0a 7d 20 2d   -root .xyz .} -
189c0 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
189d0 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
189e0 74 75 72 6e 43 6f 64 65 73 20 65 72 72 6f 72 20  turnCodes error 
189f0 2d 72 65 73 75 6c 74 20 7b 62 61 64 20 77 69 6e  -result {bad win
18a00 64 6f 77 20 70 61 74 68 20 6e 61 6d 65 20 22 2e  dow path name ".
18a10 78 79 7a 22 7d 0a 0a 74 65 73 74 20 62 69 6e 64  xyz"}..test bind
18a20 2d 32 32 2e 36 34 20 7b 48 61 6e 64 6c 65 45 76  -22.64 {HandleEv
18a30 65 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f 70 74  entGenerate: opt
18a40 69 6f 6e 73 20 3c 4b 65 79 3e 20 2d 72 6f 6f 74  ions <Key> -root
18a50 20 2e 74 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20   .t} -setup {.  
18a60 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c    frame .t.f -cl
18a70 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20  ass Test -width 
18a80 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a  150 -height 100.
18a90 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20      pack .t.f.  
18aa0 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e    focus -force .
18ab0 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20  t.f.    update. 
18ac0 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62     set x {}.} -b
18ad0 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e  ody {.    bind .
18ae0 74 2e 66 20 3c 4b 65 79 3e 20 22 6c 61 70 70 65  t.f <Key> "lappe
18af0 6e 64 20 78 20 25 52 22 0a 20 20 20 20 65 76 65  nd x %R".    eve
18b00 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
18b10 20 3c 4b 65 79 3e 20 2d 72 6f 6f 74 20 2e 74 20   <Key> -root .t 
18b20 0a 20 20 20 20 65 78 70 72 20 7b 5b 77 69 6e 66  .    expr {[winf
18b30 6f 20 69 64 20 2e 74 5d 20 65 71 20 24 78 7d 0a  o id .t] eq $x}.
18b40 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20  } -cleanup {.   
18b50 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20   destroy .t.f.} 
18b60 2d 72 65 73 75 6c 74 20 7b 31 7d 0a 0a 74 65 73  -result {1}..tes
18b70 74 20 62 69 6e 64 2d 32 32 2e 36 35 20 7b 48 61  t bind-22.65 {Ha
18b80 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61 74  ndleEventGenerat
18b90 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 4b 65 79 3e  e: options <Key>
18ba0 20 2d 72 6f 6f 74 20 78 79 7a 7d 20 2d 73 65 74   -root xyz} -set
18bb0 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e  up {.    frame .
18bc0 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20  t.f -class Test 
18bd0 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67  -width 150 -heig
18be0 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20  ht 100.    pack 
18bf0 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d  .t.f.    focus -
18c00 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75  force .t.f.    u
18c10 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20  pdate.    set x 
18c20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20  {}.} -body {.   
18c30 20 62 69 6e 64 20 2e 74 2e 66 20 3c 4b 65 79 3e   bind .t.f <Key>
18c40 20 22 6c 61 70 70 65 6e 64 20 78 20 25 52 22 0a   "lappend x %R".
18c50 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
18c60 74 65 20 2e 74 2e 66 20 3c 4b 65 79 3e 20 2d 72  te .t.f <Key> -r
18c70 6f 6f 74 20 78 79 7a 20 0a 7d 20 2d 63 6c 65 61  oot xyz .} -clea
18c80 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f  nup {.    destro
18c90 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 74 75 72 6e  y .t.f.} -return
18ca0 43 6f 64 65 73 20 65 72 72 6f 72 20 2d 72 65 73  Codes error -res
18cb0 75 6c 74 20 7b 62 61 64 20 77 69 6e 64 6f 77 20  ult {bad window 
18cc0 6e 61 6d 65 2f 69 64 65 6e 74 69 66 69 65 72 20  name/identifier 
18cd0 22 78 79 7a 22 7d 0a 0a 74 65 73 74 20 62 69 6e  "xyz"}..test bin
18ce0 64 2d 32 32 2e 36 36 20 7b 48 61 6e 64 6c 65 45  d-22.66 {HandleE
18cf0 76 65 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f 70  ventGenerate: op
18d00 74 69 6f 6e 73 20 3c 4b 65 79 3e 20 2d 72 6f 6f  tions <Key> -roo
18d10 74 20 5b 77 69 6e 66 6f 20 69 64 20 2e 74 5d 7d  t [winfo id .t]}
18d20 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72   -setup {.    fr
18d30 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20  ame .t.f -class 
18d40 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20  Test -width 150 
18d50 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20  -height 100.    
18d60 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f  pack .t.f.    fo
18d70 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a  cus -force .t.f.
18d80 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73      update.    s
18d90 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20  et x {}.} -body 
18da0 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20  {.    bind .t.f 
18db0 3c 4b 65 79 3e 20 22 6c 61 70 70 65 6e 64 20 78  <Key> "lappend x
18dc0 20 25 52 22 0a 20 20 20 20 65 76 65 6e 74 20 67   %R".    event g
18dd0 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 4b 65  enerate .t.f <Ke
18de0 79 3e 20 2d 72 6f 6f 74 20 5b 77 69 6e 66 6f 20  y> -root [winfo 
18df0 69 64 20 2e 74 5d 20 0a 20 20 20 20 65 78 70 72  id .t] .    expr
18e00 20 7b 5b 77 69 6e 66 6f 20 69 64 20 2e 74 5d 20   {[winfo id .t] 
18e10 65 71 20 24 78 7d 0a 7d 20 2d 63 6c 65 61 6e 75  eq $x}.} -cleanu
18e20 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20  p {.    destroy 
18e30 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b  .t.f.} -result {
18e40 31 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 32  1}..test bind-22
18e50 2e 36 37 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74  .67 {HandleEvent
18e60 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e  Generate: option
18e70 73 20 3c 42 75 74 74 6f 6e 3e 20 2d 72 6f 6f 74  s <Button> -root
18e80 20 2e 74 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20   .t} -setup {.  
18e90 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c    frame .t.f -cl
18ea0 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20  ass Test -width 
18eb0 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a  150 -height 100.
18ec0 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20      pack .t.f.  
18ed0 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e    focus -force .
18ee0 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20  t.f.    update. 
18ef0 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62     set x {}.} -b
18f00 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e  ody {.    bind .
18f10 74 2e 66 20 3c 42 75 74 74 6f 6e 3e 20 22 6c 61  t.f <Button> "la
18f20 70 70 65 6e 64 20 78 20 25 52 22 0a 20 20 20 20  ppend x %R".    
18f30 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
18f40 74 2e 66 20 3c 42 75 74 74 6f 6e 3e 20 2d 72 6f  t.f <Button> -ro
18f50 6f 74 20 2e 74 20 0a 20 20 20 20 65 78 70 72 20  ot .t .    expr 
18f60 7b 5b 77 69 6e 66 6f 20 69 64 20 2e 74 5d 20 65  {[winfo id .t] e
18f70 71 20 24 78 7d 0a 7d 20 2d 63 6c 65 61 6e 75 70  q $x}.} -cleanup
18f80 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
18f90 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 31  t.f.} -result {1
18fa0 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e  }..test bind-22.
18fb0 36 38 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47  68 {HandleEventG
18fc0 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73  enerate: options
18fd0 20 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 3e   <ButtonRelease>
18fe0 20 2d 72 6f 6f 74 20 2e 74 7d 20 2d 73 65 74 75   -root .t} -setu
18ff0 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74  p {.    frame .t
19000 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d  .f -class Test -
19010 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68  width 150 -heigh
19020 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e  t 100.    pack .
19030 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66  t.f.    focus -f
19040 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70  orce .t.f.    up
19050 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b  date.    set x {
19060 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  }.} -body {.    
19070 62 69 6e 64 20 2e 74 2e 66 20 3c 42 75 74 74 6f  bind .t.f <Butto
19080 6e 52 65 6c 65 61 73 65 3e 20 22 6c 61 70 70 65  nRelease> "lappe
19090 6e 64 20 78 20 25 52 22 0a 20 20 20 20 65 76 65  nd x %R".    eve
190a0 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
190b0 20 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 3e   <ButtonRelease>
190c0 20 2d 72 6f 6f 74 20 2e 74 20 0a 20 20 20 20 65   -root .t .    e
190d0 78 70 72 20 7b 5b 77 69 6e 66 6f 20 69 64 20 2e  xpr {[winfo id .
190e0 74 5d 20 65 71 20 24 78 7d 0a 7d 20 2d 63 6c 65  t] eq $x}.} -cle
190f0 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72  anup {.    destr
19100 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c  oy .t.f.} -resul
19110 74 20 7b 31 7d 0a 0a 74 65 73 74 20 62 69 6e 64  t {1}..test bind
19120 2d 32 32 2e 36 39 20 7b 48 61 6e 64 6c 65 45 76  -22.69 {HandleEv
19130 65 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f 70 74  entGenerate: opt
19140 69 6f 6e 73 20 3c 4d 6f 74 69 6f 6e 3e 20 2d 72  ions <Motion> -r
19150 6f 6f 74 20 2e 74 7d 20 2d 73 65 74 75 70 20 7b  oot .t} -setup {
19160 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
19170 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
19180 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
19190 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
191a0 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
191b0 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
191c0 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d  e.    set x {}.}
191d0 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
191e0 64 20 2e 74 2e 66 20 3c 4d 6f 74 69 6f 6e 3e 20  d .t.f <Motion> 
191f0 22 6c 61 70 70 65 6e 64 20 78 20 25 52 22 0a 20  "lappend x %R". 
19200 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
19210 65 20 2e 74 2e 66 20 3c 4d 6f 74 69 6f 6e 3e 20  e .t.f <Motion> 
19220 2d 72 6f 6f 74 20 2e 74 20 0a 20 20 20 20 65 78  -root .t .    ex
19230 70 72 20 7b 5b 77 69 6e 66 6f 20 69 64 20 2e 74  pr {[winfo id .t
19240 5d 20 65 71 20 24 78 7d 0a 7d 20 2d 63 6c 65 61  ] eq $x}.} -clea
19250 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f  nup {.    destro
19260 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74  y .t.f.} -result
19270 20 7b 31 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d   {1}..test bind-
19280 32 32 2e 37 30 20 7b 48 61 6e 64 6c 65 45 76 65  22.70 {HandleEve
19290 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69  ntGenerate: opti
192a0 6f 6e 73 20 3c 3c 50 61 73 74 65 3e 3e 20 2d 72  ons <<Paste>> -r
192b0 6f 6f 74 20 2e 74 7d 20 2d 73 65 74 75 70 20 7b  oot .t} -setup {
192c0 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
192d0 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
192e0 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
192f0 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
19300 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
19310 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
19320 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d  e.    set x {}.}
19330 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
19340 64 20 2e 74 2e 66 20 3c 3c 50 61 73 74 65 3e 3e  d .t.f <<Paste>>
19350 20 22 6c 61 70 70 65 6e 64 20 78 20 25 52 22 0a   "lappend x %R".
19360 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
19370 74 65 20 2e 74 2e 66 20 3c 3c 50 61 73 74 65 3e  te .t.f <<Paste>
19380 3e 20 2d 72 6f 6f 74 20 2e 74 20 0a 20 20 20 20  > -root .t .    
19390 65 78 70 72 20 7b 5b 77 69 6e 66 6f 20 69 64 20  expr {[winfo id 
193a0 2e 74 5d 20 65 71 20 24 78 7d 0a 7d 20 2d 63 6c  .t] eq $x}.} -cl
193b0 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74  eanup {.    dest
193c0 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75  roy .t.f.} -resu
193d0 6c 74 20 7b 31 7d 0a 0a 74 65 73 74 20 62 69 6e  lt {1}..test bin
193e0 64 2d 32 32 2e 37 31 20 7b 48 61 6e 64 6c 65 45  d-22.71 {HandleE
193f0 76 65 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f 70  ventGenerate: op
19400 74 69 6f 6e 73 20 3c 45 6e 74 65 72 3e 20 2d 72  tions <Enter> -r
19410 6f 6f 74 20 2e 74 7d 20 2d 73 65 74 75 70 20 7b  oot .t} -setup {
19420 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
19430 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
19440 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
19450 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
19460 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
19470 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
19480 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d  e.    set x {}.}
19490 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
194a0 64 20 2e 74 2e 66 20 3c 45 6e 74 65 72 3e 20 22  d .t.f <Enter> "
194b0 6c 61 70 70 65 6e 64 20 78 20 25 52 22 0a 20 20  lappend x %R".  
194c0 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
194d0 20 2e 74 2e 66 20 3c 45 6e 74 65 72 3e 20 2d 72   .t.f <Enter> -r
194e0 6f 6f 74 20 2e 74 20 0a 20 20 20 20 65 78 70 72  oot .t .    expr
194f0 20 7b 5b 77 69 6e 66 6f 20 69 64 20 2e 74 5d 20   {[winfo id .t] 
19500 65 71 20 24 78 7d 0a 7d 20 2d 63 6c 65 61 6e 75  eq $x}.} -cleanu
19510 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20  p {.    destroy 
19520 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b  .t.f.} -result {
19530 31 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 32  1}..test bind-22
19540 2e 37 32 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74  .72 {HandleEvent
19550 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e  Generate: option
19560 73 20 3c 43 6f 6e 66 69 67 75 72 65 3e 20 2d 72  s <Configure> -r
19570 6f 6f 74 20 2e 74 7d 20 2d 73 65 74 75 70 20 7b  oot .t} -setup {
19580 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
19590 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
195a0 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
195b0 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
195c0 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
195d0 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
195e0 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d  e.    set x {}.}
195f0 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
19600 64 20 2e 74 2e 66 20 3c 43 6f 6e 66 69 67 75 72  d .t.f <Configur
19610 65 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25 52  e> "lappend x %R
19620 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  ".    event gene
19630 72 61 74 65 20 2e 74 2e 66 20 3c 43 6f 6e 66 69  rate .t.f <Confi
19640 67 75 72 65 3e 20 2d 72 6f 6f 74 20 2e 74 20 0a  gure> -root .t .
19650 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20  } -cleanup {.   
19660 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20   destroy .t.f.} 
19670 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65 72 72  -returnCodes err
19680 6f 72 20 2d 72 65 73 75 6c 74 20 7b 3c 43 6f 6e  or -result {<Con
19690 66 69 67 75 72 65 3e 20 65 76 65 6e 74 20 64 6f  figure> event do
196a0 65 73 6e 27 74 20 61 63 63 65 70 74 20 22 2d 72  esn't accept "-r
196b0 6f 6f 74 22 20 6f 70 74 69 6f 6e 7d 0a 0a 74 65  oot" option}..te
196c0 73 74 20 62 69 6e 64 2d 32 32 2e 37 33 20 7b 48  st bind-22.73 {H
196d0 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61  andleEventGenera
196e0 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 4b 65 79  te: options <Key
196f0 3e 20 2d 72 6f 6f 74 78 20 78 79 7a 7d 20 2d 73  > -rootx xyz} -s
19700 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65  etup {.    frame
19710 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73   .t.f -class Tes
19720 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65  t -width 150 -he
19730 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63  ight 100.    pac
19740 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73  k .t.f.    focus
19750 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20   -force .t.f.   
19760 20 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20   update.    set 
19770 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20  x {}.} -body {. 
19780 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 4b 65     bind .t.f <Ke
19790 79 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25 58  y> "lappend x %X
197a0 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  ".    event gene
197b0 72 61 74 65 20 2e 74 2e 66 20 3c 4b 65 79 3e 20  rate .t.f <Key> 
197c0 2d 72 6f 6f 74 78 20 78 79 7a 20 0a 7d 20 2d 63  -rootx xyz .} -c
197d0 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73  leanup {.    des
197e0 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 74  troy .t.f.} -ret
197f0 75 72 6e 43 6f 64 65 73 20 65 72 72 6f 72 20 2d  urnCodes error -
19800 72 65 73 75 6c 74 20 7b 62 61 64 20 73 63 72 65  result {bad scre
19810 65 6e 20 64 69 73 74 61 6e 63 65 20 22 78 79 7a  en distance "xyz
19820 22 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 32  "}..test bind-22
19830 2e 37 34 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74  .74 {HandleEvent
19840 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e  Generate: option
19850 73 20 3c 4b 65 79 3e 20 2d 72 6f 6f 74 78 20 32  s <Key> -rootx 2
19860 69 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20  i} -setup {.    
19870 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73  frame .t.f -clas
19880 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35  s Test -width 15
19890 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20  0 -height 100.  
198a0 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20    pack .t.f.    
198b0 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e  focus -force .t.
198c0 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20 20  f.    update.   
198d0 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64   set x {}.} -bod
198e0 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  y {.    bind .t.
198f0 66 20 3c 4b 65 79 3e 20 22 6c 61 70 70 65 6e 64  f <Key> "lappend
19900 20 78 20 25 58 22 0a 20 20 20 20 65 76 65 6e 74   x %X".    event
19910 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
19920 4b 65 79 3e 20 2d 72 6f 6f 74 78 20 32 69 20 0a  Key> -rootx 2i .
19930 20 20 20 20 65 78 70 72 20 7b 5b 77 69 6e 66 6f      expr {[winfo
19940 20 70 69 78 65 6c 73 20 2e 74 2e 66 20 32 69 5d   pixels .t.f 2i]
19950 20 65 71 20 24 78 7d 0a 7d 20 2d 63 6c 65 61 6e   eq $x}.} -clean
19960 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79  up {.    destroy
19970 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20   .t.f.} -result 
19980 7b 31 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32  {1}..test bind-2
19990 32 2e 37 35 20 7b 48 61 6e 64 6c 65 45 76 65 6e  2.75 {HandleEven
199a0 74 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f  tGenerate: optio
199b0 6e 73 20 3c 42 75 74 74 6f 6e 3e 20 2d 72 6f 6f  ns <Button> -roo
199c0 74 78 20 32 69 7d 20 2d 73 65 74 75 70 20 7b 0a  tx 2i} -setup {.
199d0 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d      frame .t.f -
199e0 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74  class Test -widt
199f0 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30  h 150 -height 10
19a00 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a  0.    pack .t.f.
19a10 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65      focus -force
19a20 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65   .t.f.    update
19a30 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20  .    set x {}.} 
19a40 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64  -body {.    bind
19a50 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 3e 20 22   .t.f <Button> "
19a60 6c 61 70 70 65 6e 64 20 78 20 25 58 22 0a 20 20  lappend x %X".  
19a70 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
19a80 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 3e 20 2d   .t.f <Button> -
19a90 72 6f 6f 74 78 20 32 69 20 0a 20 20 20 20 65 78  rootx 2i .    ex
19aa0 70 72 20 7b 5b 77 69 6e 66 6f 20 70 69 78 65 6c  pr {[winfo pixel
19ab0 73 20 2e 74 2e 66 20 32 69 5d 20 65 71 20 24 78  s .t.f 2i] eq $x
19ac0 7d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  }.} -cleanup {. 
19ad0 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
19ae0 7d 20 2d 72 65 73 75 6c 74 20 7b 31 7d 0a 0a 74  } -result {1}..t
19af0 65 73 74 20 62 69 6e 64 2d 32 32 2e 37 36 20 7b  est bind-22.76 {
19b00 48 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72  HandleEventGener
19b10 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 42 75  ate: options <Bu
19b20 74 74 6f 6e 52 65 6c 65 61 73 65 3e 20 2d 72 6f  ttonRelease> -ro
19b30 6f 74 78 20 32 69 7d 20 2d 73 65 74 75 70 20 7b  otx 2i} -setup {
19b40 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
19b50 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
19b60 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
19b70 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
19b80 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
19b90 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
19ba0 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d  e.    set x {}.}
19bb0 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
19bc0 64 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65  d .t.f <ButtonRe
19bd0 6c 65 61 73 65 3e 20 22 6c 61 70 70 65 6e 64 20  lease> "lappend 
19be0 78 20 25 58 22 0a 20 20 20 20 65 76 65 6e 74 20  x %X".    event 
19bf0 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42  generate .t.f <B
19c00 75 74 74 6f 6e 52 65 6c 65 61 73 65 3e 20 2d 72  uttonRelease> -r
19c10 6f 6f 74 78 20 32 69 20 0a 20 20 20 20 65 78 70  ootx 2i .    exp
19c20 72 20 7b 5b 77 69 6e 66 6f 20 70 69 78 65 6c 73  r {[winfo pixels
19c30 20 2e 74 2e 66 20 32 69 5d 20 65 71 20 24 78 7d   .t.f 2i] eq $x}
19c40 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
19c50 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d    destroy .t.f.}
19c60 20 2d 72 65 73 75 6c 74 20 7b 31 7d 0a 0a 74 65   -result {1}..te
19c70 73 74 20 62 69 6e 64 2d 32 32 2e 37 37 20 7b 48  st bind-22.77 {H
19c80 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61  andleEventGenera
19c90 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 4d 6f 74  te: options <Mot
19ca0 69 6f 6e 3e 20 2d 72 6f 6f 74 78 20 32 69 7d 20  ion> -rootx 2i} 
19cb0 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61  -setup {.    fra
19cc0 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54  me .t.f -class T
19cd0 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d  est -width 150 -
19ce0 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70  height 100.    p
19cf0 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63  ack .t.f.    foc
19d00 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20  us -force .t.f. 
19d10 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73 65     update.    se
19d20 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b  t x {}.} -body {
19d30 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c  .    bind .t.f <
19d40 4d 6f 74 69 6f 6e 3e 20 22 6c 61 70 70 65 6e 64  Motion> "lappend
19d50 20 78 20 25 58 22 0a 20 20 20 20 65 76 65 6e 74   x %X".    event
19d60 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
19d70 4d 6f 74 69 6f 6e 3e 20 2d 72 6f 6f 74 78 20 32  Motion> -rootx 2
19d80 69 20 0a 20 20 20 20 65 78 70 72 20 7b 5b 77 69  i .    expr {[wi
19d90 6e 66 6f 20 70 69 78 65 6c 73 20 2e 74 2e 66 20  nfo pixels .t.f 
19da0 32 69 5d 20 65 71 20 24 78 7d 0a 7d 20 2d 63 6c  2i] eq $x}.} -cl
19db0 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74  eanup {.    dest
19dc0 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75  roy .t.f.} -resu
19dd0 6c 74 20 7b 31 7d 0a 0a 74 65 73 74 20 62 69 6e  lt {1}..test bin
19de0 64 2d 32 32 2e 37 38 20 7b 48 61 6e 64 6c 65 45  d-22.78 {HandleE
19df0 76 65 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f 70  ventGenerate: op
19e00 74 69 6f 6e 73 20 3c 3c 50 61 73 74 65 3e 3e 20  tions <<Paste>> 
19e10 2d 72 6f 6f 74 78 20 32 69 7d 20 2d 73 65 74 75  -rootx 2i} -setu
19e20 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74  p {.    frame .t
19e30 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d  .f -class Test -
19e40 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68  width 150 -heigh
19e50 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e  t 100.    pack .
19e60 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66  t.f.    focus -f
19e70 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70  orce .t.f.    up
19e80 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b  date.    set x {
19e90 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  }.} -body {.    
19ea0 62 69 6e 64 20 2e 74 2e 66 20 3c 3c 50 61 73 74  bind .t.f <<Past
19eb0 65 3e 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25  e>> "lappend x %
19ec0 58 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e  X".    event gen
19ed0 65 72 61 74 65 20 2e 74 2e 66 20 3c 3c 50 61 73  erate .t.f <<Pas
19ee0 74 65 3e 3e 20 2d 72 6f 6f 74 78 20 32 69 20 0a  te>> -rootx 2i .
19ef0 20 20 20 20 65 78 70 72 20 7b 5b 77 69 6e 66 6f      expr {[winfo
19f00 20 70 69 78 65 6c 73 20 2e 74 2e 66 20 32 69 5d   pixels .t.f 2i]
19f10 20 65 71 20 24 78 7d 0a 7d 20 2d 63 6c 65 61 6e   eq $x}.} -clean
19f20 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79  up {.    destroy
19f30 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20   .t.f.} -result 
19f40 7b 31 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32  {1}..test bind-2
19f50 32 2e 37 39 20 7b 48 61 6e 64 6c 65 45 76 65 6e  2.79 {HandleEven
19f60 74 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f  tGenerate: optio
19f70 6e 73 20 3c 45 6e 74 65 72 3e 20 2d 72 6f 6f 74  ns <Enter> -root
19f80 78 20 32 69 7d 20 2d 73 65 74 75 70 20 7b 0a 20  x 2i} -setup {. 
19f90 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63     frame .t.f -c
19fa0 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
19fb0 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
19fc0 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20  .    pack .t.f. 
19fd0 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20     focus -force 
19fe0 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a  .t.f.    update.
19ff0 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d      set x {}.} -
1a000 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20  body {.    bind 
1a010 2e 74 2e 66 20 3c 45 6e 74 65 72 3e 20 22 6c 61  .t.f <Enter> "la
1a020 70 70 65 6e 64 20 78 20 25 58 22 0a 20 20 20 20  ppend x %X".    
1a030 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
1a040 74 2e 66 20 3c 45 6e 74 65 72 3e 20 2d 72 6f 6f  t.f <Enter> -roo
1a050 74 78 20 32 69 20 0a 20 20 20 20 65 78 70 72 20  tx 2i .    expr 
1a060 7b 5b 77 69 6e 66 6f 20 70 69 78 65 6c 73 20 2e  {[winfo pixels .
1a070 74 2e 66 20 32 69 5d 20 65 71 20 24 78 7d 0a 7d  t.f 2i] eq $x}.}
1a080 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
1a090 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d  destroy .t.f.} -
1a0a0 72 65 73 75 6c 74 20 7b 31 7d 0a 0a 74 65 73 74  result {1}..test
1a0b0 20 62 69 6e 64 2d 32 32 2e 38 30 20 7b 48 61 6e   bind-22.80 {Han
1a0c0 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61 74 65  dleEventGenerate
1a0d0 3a 20 6f 70 74 69 6f 6e 73 20 3c 43 6f 6e 66 69  : options <Confi
1a0e0 67 75 72 65 3e 20 2d 72 6f 6f 74 78 20 32 69 7d  gure> -rootx 2i}
1a0f0 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72   -setup {.    fr
1a100 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20  ame .t.f -class 
1a110 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20  Test -width 150 
1a120 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20  -height 100.    
1a130 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f  pack .t.f.    fo
1a140 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a  cus -force .t.f.
1a150 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73      update.    s
1a160 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20  et x {}.} -body 
1a170 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20  {.    bind .t.f 
1a180 3c 43 6f 6e 66 69 67 75 72 65 3e 20 22 6c 61 70  <Configure> "lap
1a190 70 65 6e 64 20 78 20 25 58 22 0a 20 20 20 20 65  pend x %X".    e
1a1a0 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
1a1b0 2e 66 20 3c 43 6f 6e 66 69 67 75 72 65 3e 20 2d  .f <Configure> -
1a1c0 72 6f 6f 74 78 20 32 69 20 0a 7d 20 2d 63 6c 65  rootx 2i .} -cle
1a1d0 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72  anup {.    destr
1a1e0 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 74 75 72  oy .t.f.} -retur
1a1f0 6e 43 6f 64 65 73 20 65 72 72 6f 72 20 2d 72 65  nCodes error -re
1a200 73 75 6c 74 20 7b 3c 43 6f 6e 66 69 67 75 72 65  sult {<Configure
1a210 3e 20 65 76 65 6e 74 20 64 6f 65 73 6e 27 74 20  > event doesn't 
1a220 61 63 63 65 70 74 20 22 2d 72 6f 6f 74 78 22 20  accept "-rootx" 
1a230 6f 70 74 69 6f 6e 7d 0a 0a 74 65 73 74 20 62 69  option}..test bi
1a240 6e 64 2d 32 32 2e 38 31 20 7b 48 61 6e 64 6c 65  nd-22.81 {Handle
1a250 45 76 65 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f  EventGenerate: o
1a260 70 74 69 6f 6e 73 20 3c 4b 65 79 3e 20 2d 72 6f  ptions <Key> -ro
1a270 6f 74 79 20 78 79 7a 7d 20 2d 73 65 74 75 70 20  oty xyz} -setup 
1a280 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66  {.    frame .t.f
1a290 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69   -class Test -wi
1a2a0 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20  dth 150 -height 
1a2b0 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e  100.    pack .t.
1a2c0 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72  f.    focus -for
1a2d0 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61  ce .t.f.    upda
1a2e0 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a  te.    set x {}.
1a2f0 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
1a300 6e 64 20 2e 74 2e 66 20 3c 4b 65 79 3e 20 22 6c  nd .t.f <Key> "l
1a310 61 70 70 65 6e 64 20 78 20 25 59 22 0a 20 20 20  append x %Y".   
1a320 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
1a330 2e 74 2e 66 20 3c 4b 65 79 3e 20 2d 72 6f 6f 74  .t.f <Key> -root
1a340 79 20 78 79 7a 20 0a 7d 20 2d 63 6c 65 61 6e 75  y xyz .} -cleanu
1a350 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20  p {.    destroy 
1a360 2e 74 2e 66 0a 7d 20 2d 72 65 74 75 72 6e 43 6f  .t.f.} -returnCo
1a370 64 65 73 20 65 72 72 6f 72 20 2d 72 65 73 75 6c  des error -resul
1a380 74 20 7b 62 61 64 20 73 63 72 65 65 6e 20 64 69  t {bad screen di
1a390 73 74 61 6e 63 65 20 22 78 79 7a 22 7d 0a 0a 74  stance "xyz"}..t
1a3a0 65 73 74 20 62 69 6e 64 2d 32 32 2e 38 32 20 7b  est bind-22.82 {
1a3b0 48 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72  HandleEventGener
1a3c0 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 4b 65  ate: options <Ke
1a3d0 79 3e 20 2d 72 6f 6f 74 79 20 32 69 7d 20 2d 73  y> -rooty 2i} -s
1a3e0 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65  etup {.    frame
1a3f0 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73   .t.f -class Tes
1a400 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65  t -width 150 -he
1a410 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63  ight 100.    pac
1a420 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73  k .t.f.    focus
1a430 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20   -force .t.f.   
1a440 20 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20   update.    set 
1a450 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20  x {}.} -body {. 
1a460 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 4b 65     bind .t.f <Ke
1a470 79 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25 59  y> "lappend x %Y
1a480 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  ".    event gene
1a490 72 61 74 65 20 2e 74 2e 66 20 3c 4b 65 79 3e 20  rate .t.f <Key> 
1a4a0 2d 72 6f 6f 74 79 20 32 69 20 0a 20 20 20 20 65  -rooty 2i .    e
1a4b0 78 70 72 20 7b 5b 77 69 6e 66 6f 20 70 69 78 65  xpr {[winfo pixe
1a4c0 6c 73 20 2e 74 2e 66 20 32 69 5d 20 65 71 20 24  ls .t.f 2i] eq $
1a4d0 78 7d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a  x}.} -cleanup {.
1a4e0 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66      destroy .t.f
1a4f0 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 31 7d 0a 0a  .} -result {1}..
1a500 74 65 73 74 20 62 69 6e 64 2d 32 32 2e 38 33 20  test bind-22.83 
1a510 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65  {HandleEventGene
1a520 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 42  rate: options <B
1a530 75 74 74 6f 6e 3e 20 2d 72 6f 6f 74 79 20 32 69  utton> -rooty 2i
1a540 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66  } -setup {.    f
1a550 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73  rame .t.f -class
1a560 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30   Test -width 150
1a570 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20   -height 100.   
1a580 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66   pack .t.f.    f
1a590 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66  ocus -force .t.f
1a5a0 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20  .    update.    
1a5b0 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79  set x {}.} -body
1a5c0 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66   {.    bind .t.f
1a5d0 20 3c 42 75 74 74 6f 6e 3e 20 22 6c 61 70 70 65   <Button> "lappe
1a5e0 6e 64 20 78 20 25 59 22 0a 20 20 20 20 65 76 65  nd x %Y".    eve
1a5f0 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
1a600 20 3c 42 75 74 74 6f 6e 3e 20 2d 72 6f 6f 74 79   <Button> -rooty
1a610 20 32 69 20 0a 20 20 20 20 65 78 70 72 20 7b 5b   2i .    expr {[
1a620 77 69 6e 66 6f 20 70 69 78 65 6c 73 20 2e 74 2e  winfo pixels .t.
1a630 66 20 32 69 5d 20 65 71 20 24 78 7d 0a 7d 20 2d  f 2i] eq $x}.} -
1a640 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
1a650 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
1a660 73 75 6c 74 20 7b 31 7d 0a 0a 74 65 73 74 20 62  sult {1}..test b
1a670 69 6e 64 2d 32 32 2e 38 34 20 7b 48 61 6e 64 6c  ind-22.84 {Handl
1a680 65 45 76 65 6e 74 47 65 6e 65 72 61 74 65 3a 20  eEventGenerate: 
1a690 6f 70 74 69 6f 6e 73 20 3c 42 75 74 74 6f 6e 52  options <ButtonR
1a6a0 65 6c 65 61 73 65 3e 20 2d 72 6f 6f 74 79 20 32  elease> -rooty 2
1a6b0 69 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20  i} -setup {.    
1a6c0 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73  frame .t.f -clas
1a6d0 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35  s Test -width 15
1a6e0 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20  0 -height 100.  
1a6f0 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20    pack .t.f.    
1a700 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e  focus -force .t.
1a710 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20 20  f.    update.   
1a720 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64   set x {}.} -bod
1a730 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  y {.    bind .t.
1a740 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73 65  f <ButtonRelease
1a750 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25 59 22  > "lappend x %Y"
1a760 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
1a770 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e  ate .t.f <Button
1a780 52 65 6c 65 61 73 65 3e 20 2d 72 6f 6f 74 79 20  Release> -rooty 
1a790 32 69 20 0a 20 20 20 20 65 78 70 72 20 7b 5b 77  2i .    expr {[w
1a7a0 69 6e 66 6f 20 70 69 78 65 6c 73 20 2e 74 2e 66  info pixels .t.f
1a7b0 20 32 69 5d 20 65 71 20 24 78 7d 0a 7d 20 2d 63   2i] eq $x}.} -c
1a7c0 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73  leanup {.    des
1a7d0 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73  troy .t.f.} -res
1a7e0 75 6c 74 20 7b 31 7d 0a 0a 74 65 73 74 20 62 69  ult {1}..test bi
1a7f0 6e 64 2d 32 32 2e 38 35 20 7b 48 61 6e 64 6c 65  nd-22.85 {Handle
1a800 45 76 65 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f  EventGenerate: o
1a810 70 74 69 6f 6e 73 20 3c 4d 6f 74 69 6f 6e 3e 20  ptions <Motion> 
1a820 2d 72 6f 6f 74 79 20 32 69 7d 20 2d 73 65 74 75  -rooty 2i} -setu
1a830 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74  p {.    frame .t
1a840 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d  .f -class Test -
1a850 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68  width 150 -heigh
1a860 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e  t 100.    pack .
1a870 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66  t.f.    focus -f
1a880 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70  orce .t.f.    up
1a890 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b  date.    set x {
1a8a0 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  }.} -body {.    
1a8b0 62 69 6e 64 20 2e 74 2e 66 20 3c 4d 6f 74 69 6f  bind .t.f <Motio
1a8c0 6e 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25 59  n> "lappend x %Y
1a8d0 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  ".    event gene
1a8e0 72 61 74 65 20 2e 74 2e 66 20 3c 4d 6f 74 69 6f  rate .t.f <Motio
1a8f0 6e 3e 20 2d 72 6f 6f 74 79 20 32 69 20 0a 20 20  n> -rooty 2i .  
1a900 20 20 65 78 70 72 20 7b 5b 77 69 6e 66 6f 20 70    expr {[winfo p
1a910 69 78 65 6c 73 20 2e 74 2e 66 20 32 69 5d 20 65  ixels .t.f 2i] e
1a920 71 20 24 78 7d 0a 7d 20 2d 63 6c 65 61 6e 75 70  q $x}.} -cleanup
1a930 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
1a940 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 31  t.f.} -result {1
1a950 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e  }..test bind-22.
1a960 38 36 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47  86 {HandleEventG
1a970 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73  enerate: options
1a980 20 3c 3c 50 61 73 74 65 3e 3e 20 2d 72 6f 6f 74   <<Paste>> -root
1a990 79 20 32 69 7d 20 2d 73 65 74 75 70 20 7b 0a 20  y 2i} -setup {. 
1a9a0 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63     frame .t.f -c
1a9b0 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
1a9c0 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
1a9d0 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20  .    pack .t.f. 
1a9e0 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20     focus -force 
1a9f0 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a  .t.f.    update.
1aa00 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d      set x {}.} -
1aa10 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20  body {.    bind 
1aa20 2e 74 2e 66 20 3c 3c 50 61 73 74 65 3e 3e 20 22  .t.f <<Paste>> "
1aa30 6c 61 70 70 65 6e 64 20 78 20 25 59 22 0a 20 20  lappend x %Y".  
1aa40 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
1aa50 20 2e 74 2e 66 20 3c 3c 50 61 73 74 65 3e 3e 20   .t.f <<Paste>> 
1aa60 2d 72 6f 6f 74 79 20 32 69 20 0a 20 20 20 20 65  -rooty 2i .    e
1aa70 78 70 72 20 7b 5b 77 69 6e 66 6f 20 70 69 78 65  xpr {[winfo pixe
1aa80 6c 73 20 2e 74 2e 66 20 32 69 5d 20 65 71 20 24  ls .t.f 2i] eq $
1aa90 78 7d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a  x}.} -cleanup {.
1aaa0 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66      destroy .t.f
1aab0 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 31 7d 0a 0a  .} -result {1}..
1aac0 74 65 73 74 20 62 69 6e 64 2d 32 32 2e 38 37 20  test bind-22.87 
1aad0 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65  {HandleEventGene
1aae0 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 45  rate: options <E
1aaf0 6e 74 65 72 3e 20 2d 72 6f 6f 74 79 20 32 69 7d  nter> -rooty 2i}
1ab00 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72   -setup {.    fr
1ab10 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20  ame .t.f -class 
1ab20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20  Test -width 150 
1ab30 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20  -height 100.    
1ab40 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f  pack .t.f.    fo
1ab50 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a  cus -force .t.f.
1ab60 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73      update.    s
1ab70 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20  et x {}.} -body 
1ab80 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20  {.    bind .t.f 
1ab90 3c 45 6e 74 65 72 3e 20 22 6c 61 70 70 65 6e 64  <Enter> "lappend
1aba0 20 78 20 25 59 22 0a 20 20 20 20 65 76 65 6e 74   x %Y".    event
1abb0 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
1abc0 45 6e 74 65 72 3e 20 2d 72 6f 6f 74 79 20 32 69  Enter> -rooty 2i
1abd0 20 0a 20 20 20 20 65 78 70 72 20 7b 5b 77 69 6e   .    expr {[win
1abe0 66 6f 20 70 69 78 65 6c 73 20 2e 74 2e 66 20 32  fo pixels .t.f 2
1abf0 69 5d 20 65 71 20 24 78 7d 0a 7d 20 2d 63 6c 65  i] eq $x}.} -cle
1ac00 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72  anup {.    destr
1ac10 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c  oy .t.f.} -resul
1ac20 74 20 7b 31 7d 0a 0a 74 65 73 74 20 62 69 6e 64  t {1}..test bind
1ac30 2d 32 32 2e 38 38 20 7b 48 61 6e 64 6c 65 45 76  -22.88 {HandleEv
1ac40 65 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f 70 74  entGenerate: opt
1ac50 69 6f 6e 73 20 3c 43 6f 6e 66 69 67 75 72 65 3e  ions <Configure>
1ac60 20 2d 72 6f 6f 74 79 20 32 69 7d 20 2d 73 65 74   -rooty 2i} -set
1ac70 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e  up {.    frame .
1ac80 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20  t.f -class Test 
1ac90 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67  -width 150 -heig
1aca0 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20  ht 100.    pack 
1acb0 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d  .t.f.    focus -
1acc0 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75  force .t.f.    u
1acd0 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20  pdate.    set x 
1ace0 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20  {}.} -body {.   
1acf0 20 62 69 6e 64 20 2e 74 2e 66 20 3c 43 6f 6e 66   bind .t.f <Conf
1ad00 69 67 75 72 65 3e 20 22 6c 61 70 70 65 6e 64 20  igure> "lappend 
1ad10 78 20 25 59 22 0a 20 20 20 20 65 76 65 6e 74 20  x %Y".    event 
1ad20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 43  generate .t.f <C
1ad30 6f 6e 66 69 67 75 72 65 3e 20 2d 72 6f 6f 74 79  onfigure> -rooty
1ad40 20 32 69 20 0a 7d 20 2d 63 6c 65 61 6e 75 70 20   2i .} -cleanup 
1ad50 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74  {.    destroy .t
1ad60 2e 66 0a 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65  .f.} -returnCode
1ad70 73 20 65 72 72 6f 72 20 2d 72 65 73 75 6c 74 20  s error -result 
1ad80 7b 3c 43 6f 6e 66 69 67 75 72 65 3e 20 65 76 65  {<Configure> eve
1ad90 6e 74 20 64 6f 65 73 6e 27 74 20 61 63 63 65 70  nt doesn't accep
1ada0 74 20 22 2d 72 6f 6f 74 79 22 20 6f 70 74 69 6f  t "-rooty" optio
1adb0 6e 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 32  n}..test bind-22
1adc0 2e 38 39 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74  .89 {HandleEvent
1add0 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e  Generate: option
1ade0 73 20 3c 4b 65 79 3e 20 2d 73 65 6e 64 65 76 65  s <Key> -sendeve
1adf0 6e 74 20 78 79 7a 7d 20 2d 73 65 74 75 70 20 7b  nt xyz} -setup {
1ae00 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
1ae10 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
1ae20 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
1ae30 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
1ae40 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
1ae50 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
1ae60 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d  e.    set x {}.}
1ae70 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
1ae80 64 20 2e 74 2e 66 20 3c 4b 65 79 3e 20 22 6c 61  d .t.f <Key> "la
1ae90 70 70 65 6e 64 20 78 20 25 45 22 0a 20 20 20 20  ppend x %E".    
1aea0 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
1aeb0 74 2e 66 20 3c 4b 65 79 3e 20 2d 73 65 6e 64 65  t.f <Key> -sende
1aec0 76 65 6e 74 20 78 79 7a 20 0a 7d 20 2d 63 6c 65  vent xyz .} -cle
1aed0 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72  anup {.    destr
1aee0 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 74 75 72  oy .t.f.} -retur
1aef0 6e 43 6f 64 65 73 20 65 72 72 6f 72 20 2d 72 65  nCodes error -re
1af00 73 75 6c 74 20 7b 65 78 70 65 63 74 65 64 20 62  sult {expected b
1af10 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 20 62 75 74  oolean value but
1af20 20 67 6f 74 20 22 78 79 7a 22 7d 0a 0a 74 65 73   got "xyz"}..tes
1af30 74 20 62 69 6e 64 2d 32 32 2e 39 30 20 7b 48 61  t bind-22.90 {Ha
1af40 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61 74  ndleEventGenerat
1af50 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 4b 65 79 3e  e: options <Key>
1af60 20 2d 73 65 6e 64 65 76 65 6e 74 20 31 7d 20 2d   -sendevent 1} -
1af70 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d  setup {.    fram
1af80 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65  e .t.f -class Te
1af90 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68  st -width 150 -h
1afa0 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61  eight 100.    pa
1afb0 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75  ck .t.f.    focu
1afc0 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20  s -force .t.f.  
1afd0 20 20 75 70 64 61 74 65 0a 20 20 20 20 73 65 74    update.    set
1afe0 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a   x {}.} -body {.
1aff0 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 4b      bind .t.f <K
1b000 65 79 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25  ey> "lappend x %
1b010 45 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e  E".    event gen
1b020 65 72 61 74 65 20 2e 74 2e 66 20 3c 4b 65 79 3e  erate .t.f <Key>
1b030 20 2d 73 65 6e 64 65 76 65 6e 74 20 31 20 0a 20   -sendevent 1 . 
1b040 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d     return $x.} -
1b050 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
1b060 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
1b070 73 75 6c 74 20 7b 31 7d 0a 0a 74 65 73 74 20 62  sult {1}..test b
1b080 69 6e 64 2d 32 32 2e 39 31 20 7b 48 61 6e 64 6c  ind-22.91 {Handl
1b090 65 45 76 65 6e 74 47 65 6e 65 72 61 74 65 3a 20  eEventGenerate: 
1b0a0 6f 70 74 69 6f 6e 73 20 3c 4b 65 79 3e 20 2d 73  options <Key> -s
1b0b0 65 6e 64 65 76 65 6e 74 20 79 65 73 7d 20 2d 73  endevent yes} -s
1b0c0 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65  etup {.    frame
1b0d0 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73   .t.f -class Tes
1b0e0 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65  t -width 150 -he
1b0f0 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63  ight 100.    pac
1b100 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73  k .t.f.    focus
1b110 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20   -force .t.f.   
1b120 20 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20   update.    set 
1b130 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20  x {}.} -body {. 
1b140 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 4b 65     bind .t.f <Ke
1b150 79 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25 45  y> "lappend x %E
1b160 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  ".    event gene
1b170 72 61 74 65 20 2e 74 2e 66 20 3c 4b 65 79 3e 20  rate .t.f <Key> 
1b180 2d 73 65 6e 64 65 76 65 6e 74 20 79 65 73 20 0a  -sendevent yes .
1b190 20 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 20      return $x.} 
1b1a0 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64  -cleanup {.    d
1b1b0 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72  estroy .t.f.} -r
1b1c0 65 73 75 6c 74 20 7b 31 7d 0a 0a 74 65 73 74 20  esult {1}..test 
1b1d0 62 69 6e 64 2d 32 32 2e 39 32 20 7b 48 61 6e 64  bind-22.92 {Hand
1b1e0 6c 65 45 76 65 6e 74 47 65 6e 65 72 61 74 65 3a  leEventGenerate:
1b1f0 20 6f 70 74 69 6f 6e 73 20 3c 4b 65 79 3e 20 2d   options <Key> -
1b200 73 65 6e 64 65 76 65 6e 74 20 34 33 7d 20 2d 73  sendevent 43} -s
1b210 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65  etup {.    frame
1b220 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73   .t.f -class Tes
1b230 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65  t -width 150 -he
1b240 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63  ight 100.    pac
1b250 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73  k .t.f.    focus
1b260 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20   -force .t.f.   
1b270 20 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20   update.    set 
1b280 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20  x {}.} -body {. 
1b290 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 4b 65     bind .t.f <Ke
1b2a0 79 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25 45  y> "lappend x %E
1b2b0 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  ".    event gene
1b2c0 72 61 74 65 20 2e 74 2e 66 20 3c 4b 65 79 3e 20  rate .t.f <Key> 
1b2d0 2d 73 65 6e 64 65 76 65 6e 74 20 34 33 20 0a 20  -sendevent 43 . 
1b2e0 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d     return $x.} -
1b2f0 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
1b300 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
1b310 73 75 6c 74 20 7b 31 7d 0a 0a 74 65 73 74 20 62  sult {1}..test b
1b320 69 6e 64 2d 32 32 2e 39 33 20 7b 48 61 6e 64 6c  ind-22.93 {Handl
1b330 65 45 76 65 6e 74 47 65 6e 65 72 61 74 65 3a 20  eEventGenerate: 
1b340 6f 70 74 69 6f 6e 73 20 3c 4b 65 79 3e 20 2d 73  options <Key> -s
1b350 65 72 69 61 6c 20 78 79 7a 7d 20 2d 73 65 74 75  erial xyz} -setu
1b360 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74  p {.    frame .t
1b370 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d  .f -class Test -
1b380 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68  width 150 -heigh
1b390 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e  t 100.    pack .
1b3a0 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66  t.f.    focus -f
1b3b0 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70  orce .t.f.    up
1b3c0 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b  date.    set x {
1b3d0 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  }.} -body {.    
1b3e0 62 69 6e 64 20 2e 74 2e 66 20 3c 4b 65 79 3e 20  bind .t.f <Key> 
1b3f0 22 6c 61 70 70 65 6e 64 20 78 20 25 23 22 0a 20  "lappend x %#". 
1b400 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
1b410 65 20 2e 74 2e 66 20 3c 4b 65 79 3e 20 2d 73 65  e .t.f <Key> -se
1b420 72 69 61 6c 20 78 79 7a 20 0a 7d 20 2d 63 6c 65  rial xyz .} -cle
1b430 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72  anup {.    destr
1b440 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 74 75 72  oy .t.f.} -retur
1b450 6e 43 6f 64 65 73 20 65 72 72 6f 72 20 2d 72 65  nCodes error -re
1b460 73 75 6c 74 20 7b 65 78 70 65 63 74 65 64 20 69  sult {expected i
1b470 6e 74 65 67 65 72 20 62 75 74 20 67 6f 74 20 22  nteger but got "
1b480 78 79 7a 22 7d 0a 0a 74 65 73 74 20 62 69 6e 64  xyz"}..test bind
1b490 2d 32 32 2e 39 34 20 7b 48 61 6e 64 6c 65 45 76  -22.94 {HandleEv
1b4a0 65 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f 70 74  entGenerate: opt
1b4b0 69 6f 6e 73 20 3c 4b 65 79 3e 20 2d 73 65 72 69  ions <Key> -seri
1b4c0 61 6c 20 31 30 30 7d 20 2d 73 65 74 75 70 20 7b  al 100} -setup {
1b4d0 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
1b4e0 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
1b4f0 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
1b500 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
1b510 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
1b520 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
1b530 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d  e.    set x {}.}
1b540 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
1b550 64 20 2e 74 2e 66 20 3c 4b 65 79 3e 20 22 6c 61  d .t.f <Key> "la
1b560 70 70 65 6e 64 20 78 20 25 23 22 0a 20 20 20 20  ppend x %#".    
1b570 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
1b580 74 2e 66 20 3c 4b 65 79 3e 20 2d 73 65 72 69 61  t.f <Key> -seria
1b590 6c 20 31 30 30 20 0a 20 20 20 20 72 65 74 75 72  l 100 .    retur
1b5a0 6e 20 24 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  n $x.} -cleanup 
1b5b0 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74  {.    destroy .t
1b5c0 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 31 30  .f.} -result {10
1b5d0 30 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 32  0}..test bind-22
1b5e0 2e 39 35 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74  .95 {HandleEvent
1b5f0 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e  Generate: option
1b600 73 20 3c 4b 65 79 3e 20 2d 73 74 61 74 65 20 78  s <Key> -state x
1b610 79 7a 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20  yz} -setup {.   
1b620 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61   frame .t.f -cla
1b630 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
1b640 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20  50 -height 100. 
1b650 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20     pack .t.f.   
1b660 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74   focus -force .t
1b670 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20  .f.    update.  
1b680 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f    set x {}.} -bo
1b690 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74  dy {.    bind .t
1b6a0 2e 66 20 3c 4b 65 79 3e 20 22 6c 61 70 70 65 6e  .f <Key> "lappen
1b6b0 64 20 78 20 25 73 22 0a 20 20 20 20 65 76 65 6e  d x %s".    even
1b6c0 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
1b6d0 3c 4b 65 79 3e 20 2d 73 74 61 74 65 20 78 79 7a  <Key> -state xyz
1b6e0 20 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20   .} -cleanup {. 
1b6f0 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
1b700 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65  } -returnCodes e
1b710 72 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 65 78  rror -result {ex
1b720 70 65 63 74 65 64 20 69 6e 74 65 67 65 72 20 62  pected integer b
1b730 75 74 20 67 6f 74 20 22 78 79 7a 22 7d 0a 0a 74  ut got "xyz"}..t
1b740 65 73 74 20 62 69 6e 64 2d 32 32 2e 39 36 20 7b  est bind-22.96 {
1b750 48 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72  HandleEventGener
1b760 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 4b 65  ate: options <Ke
1b770 79 3e 20 2d 73 74 61 74 65 20 31 7d 20 2d 73 65  y> -state 1} -se
1b780 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20  tup {.    frame 
1b790 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74  .t.f -class Test
1b7a0 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69   -width 150 -hei
1b7b0 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b  ght 100.    pack
1b7c0 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20   .t.f.    focus 
1b7d0 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20  -force .t.f.    
1b7e0 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78  update.    set x
1b7f0 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20   {}.} -body {.  
1b800 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 4b 65 79    bind .t.f <Key
1b810 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25 73 22  > "lappend x %s"
1b820 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
1b830 61 74 65 20 2e 74 2e 66 20 3c 4b 65 79 3e 20 2d  ate .t.f <Key> -
1b840 73 74 61 74 65 20 31 20 0a 20 20 20 20 72 65 74  state 1 .    ret
1b850 75 72 6e 20 24 78 0a 7d 20 2d 63 6c 65 61 6e 75  urn $x.} -cleanu
1b860 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20  p {.    destroy 
1b870 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b  .t.f.} -result {
1b880 31 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 32  1}..test bind-22
1b890 2e 39 37 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74  .97 {HandleEvent
1b8a0 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e  Generate: option
1b8b0 73 20 3c 42 75 74 74 6f 6e 3e 20 2d 73 74 61 74  s <Button> -stat
1b8c0 65 20 31 30 32 35 7d 20 2d 73 65 74 75 70 20 7b  e 1025} -setup {
1b8d0 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
1b8e0 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
1b8f0 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
1b900 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
1b910 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
1b920 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
1b930 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d  e.    set x {}.}
1b940 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
1b950 64 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 3e 20  d .t.f <Button> 
1b960 22 6c 61 70 70 65 6e 64 20 78 20 25 73 22 0a 20  "lappend x %s". 
1b970 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
1b980 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 3e 20  e .t.f <Button> 
1b990 2d 73 74 61 74 65 20 31 30 32 35 20 0a 20 20 20  -state 1025 .   
1b9a0 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d 63 6c   return $x.} -cl
1b9b0 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74  eanup {.    dest
1b9c0 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75  roy .t.f.} -resu
1b9d0 6c 74 20 7b 31 30 32 35 7d 0a 0a 74 65 73 74 20  lt {1025}..test 
1b9e0 62 69 6e 64 2d 32 32 2e 39 38 20 7b 48 61 6e 64  bind-22.98 {Hand
1b9f0 6c 65 45 76 65 6e 74 47 65 6e 65 72 61 74 65 3a  leEventGenerate:
1ba00 20 6f 70 74 69 6f 6e 73 20 3c 42 75 74 74 6f 6e   options <Button
1ba10 52 65 6c 65 61 73 65 3e 20 2d 73 74 61 74 65 20  Release> -state 
1ba20 31 30 32 35 7d 20 2d 73 65 74 75 70 20 7b 0a 20  1025} -setup {. 
1ba30 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63     frame .t.f -c
1ba40 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
1ba50 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
1ba60 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20  .    pack .t.f. 
1ba70 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20     focus -force 
1ba80 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a  .t.f.    update.
1ba90 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d      set x {}.} -
1baa0 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20  body {.    bind 
1bab0 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65  .t.f <ButtonRele
1bac0 61 73 65 3e 20 22 6c 61 70 70 65 6e 64 20 78 20  ase> "lappend x 
1bad0 25 73 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65  %s".    event ge
1bae0 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74  nerate .t.f <But
1baf0 74 6f 6e 52 65 6c 65 61 73 65 3e 20 2d 73 74 61  tonRelease> -sta
1bb00 74 65 20 31 30 32 35 20 0a 20 20 20 20 72 65 74  te 1025 .    ret
1bb10 75 72 6e 20 24 78 0a 7d 20 2d 63 6c 65 61 6e 75  urn $x.} -cleanu
1bb20 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20  p {.    destroy 
1bb30 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b  .t.f.} -result {
1bb40 31 30 32 35 7d 0a 0a 74 65 73 74 20 62 69 6e 64  1025}..test bind
1bb50 2d 32 32 2e 39 39 20 7b 48 61 6e 64 6c 65 45 76  -22.99 {HandleEv
1bb60 65 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f 70 74  entGenerate: opt
1bb70 69 6f 6e 73 20 3c 4d 6f 74 69 6f 6e 3e 20 2d 73  ions <Motion> -s
1bb80 74 61 74 65 20 31 7d 20 2d 73 65 74 75 70 20 7b  tate 1} -setup {
1bb90 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
1bba0 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
1bbb0 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
1bbc0 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
1bbd0 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
1bbe0 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
1bbf0 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d  e.    set x {}.}
1bc00 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
1bc10 64 20 2e 74 2e 66 20 3c 4d 6f 74 69 6f 6e 3e 20  d .t.f <Motion> 
1bc20 22 6c 61 70 70 65 6e 64 20 78 20 25 73 22 0a 20  "lappend x %s". 
1bc30 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
1bc40 65 20 2e 74 2e 66 20 3c 4d 6f 74 69 6f 6e 3e 20  e .t.f <Motion> 
1bc50 2d 73 74 61 74 65 20 31 20 0a 20 20 20 20 72 65  -state 1 .    re
1bc60 74 75 72 6e 20 24 78 0a 7d 20 2d 63 6c 65 61 6e  turn $x.} -clean
1bc70 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79  up {.    destroy
1bc80 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20   .t.f.} -result 
1bc90 7b 31 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32  {1}..test bind-2
1bca0 32 2e 31 30 30 20 7b 48 61 6e 64 6c 65 45 76 65  2.100 {HandleEve
1bcb0 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69  ntGenerate: opti
1bcc0 6f 6e 73 20 3c 3c 50 61 73 74 65 3e 3e 20 2d 73  ons <<Paste>> -s
1bcd0 74 61 74 65 20 31 7d 20 2d 73 65 74 75 70 20 7b  tate 1} -setup {
1bce0 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
1bcf0 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
1bd00 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
1bd10 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
1bd20 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
1bd30 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
1bd40 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d  e.    set x {}.}
1bd50 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
1bd60 64 20 2e 74 2e 66 20 3c 3c 50 61 73 74 65 3e 3e  d .t.f <<Paste>>
1bd70 20 22 6c 61 70 70 65 6e 64 20 78 20 25 73 22 0a   "lappend x %s".
1bd80 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
1bd90 74 65 20 2e 74 2e 66 20 3c 3c 50 61 73 74 65 3e  te .t.f <<Paste>
1bda0 3e 20 2d 73 74 61 74 65 20 31 20 0a 20 20 20 20  > -state 1 .    
1bdb0 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d 63 6c 65  return $x.} -cle
1bdc0 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72  anup {.    destr
1bdd0 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c  oy .t.f.} -resul
1bde0 74 20 7b 31 7d 0a 0a 74 65 73 74 20 62 69 6e 64  t {1}..test bind
1bdf0 2d 32 32 2e 31 30 31 20 7b 48 61 6e 64 6c 65 45  -22.101 {HandleE
1be00 76 65 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f 70  ventGenerate: op
1be10 74 69 6f 6e 73 20 3c 45 6e 74 65 72 3e 20 2d 73  tions <Enter> -s
1be20 74 61 74 65 20 31 7d 20 2d 73 65 74 75 70 20 7b  tate 1} -setup {
1be30 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
1be40 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
1be50 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
1be60 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
1be70 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
1be80 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
1be90 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d  e.    set x {}.}
1bea0 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
1beb0 64 20 2e 74 2e 66 20 3c 45 6e 74 65 72 3e 20 22  d .t.f <Enter> "
1bec0 6c 61 70 70 65 6e 64 20 78 20 25 73 22 0a 20 20  lappend x %s".  
1bed0 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
1bee0 20 2e 74 2e 66 20 3c 45 6e 74 65 72 3e 20 2d 73   .t.f <Enter> -s
1bef0 74 61 74 65 20 31 20 0a 20 20 20 20 72 65 74 75  tate 1 .    retu
1bf00 72 6e 20 24 78 0a 7d 20 2d 63 6c 65 61 6e 75 70  rn $x.} -cleanup
1bf10 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
1bf20 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 31  t.f.} -result {1
1bf30 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e  }..test bind-22.
1bf40 31 30 32 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74  102 {HandleEvent
1bf50 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e  Generate: option
1bf60 73 20 3c 56 69 73 69 62 69 6c 69 74 79 3e 20 2d  s <Visibility> -
1bf70 73 74 61 74 65 20 78 79 7a 7d 20 2d 73 65 74 75  state xyz} -setu
1bf80 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74  p {.    frame .t
1bf90 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d  .f -class Test -
1bfa0 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68  width 150 -heigh
1bfb0 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e  t 100.    pack .
1bfc0 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66  t.f.    focus -f
1bfd0 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70  orce .t.f.    up
1bfe0 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b  date.    set x {
1bff0 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  }.} -body {.    
1c000 62 69 6e 64 20 2e 74 2e 66 20 3c 56 69 73 69 62  bind .t.f <Visib
1c010 69 6c 69 74 79 3e 20 22 6c 61 70 70 65 6e 64 20  ility> "lappend 
1c020 78 20 25 73 22 0a 20 20 20 20 65 76 65 6e 74 20  x %s".    event 
1c030 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 56  generate .t.f <V
1c040 69 73 69 62 69 6c 69 74 79 3e 20 2d 73 74 61 74  isibility> -stat
1c050 65 20 78 79 7a 20 0a 7d 20 2d 63 6c 65 61 6e 75  e xyz .} -cleanu
1c060 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20  p {.    destroy 
1c070 2e 74 2e 66 0a 7d 20 2d 72 65 74 75 72 6e 43 6f  .t.f.} -returnCo
1c080 64 65 73 20 65 72 72 6f 72 20 2d 72 65 73 75 6c  des error -resul
1c090 74 20 7b 62 61 64 20 2d 73 74 61 74 65 20 76 61  t {bad -state va
1c0a0 6c 75 65 20 22 78 79 7a 22 3a 20 6d 75 73 74 20  lue "xyz": must 
1c0b0 62 65 20 56 69 73 69 62 69 6c 69 74 79 55 6e 6f  be VisibilityUno
1c0c0 62 73 63 75 72 65 64 2c 20 56 69 73 69 62 69 6c  bscured, Visibil
1c0d0 69 74 79 50 61 72 74 69 61 6c 6c 79 4f 62 73 63  ityPartiallyObsc
1c0e0 75 72 65 64 2c 20 6f 72 20 56 69 73 69 62 69 6c  ured, or Visibil
1c0f0 69 74 79 46 75 6c 6c 79 4f 62 73 63 75 72 65 64  ityFullyObscured
1c100 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e  }..test bind-22.
1c110 31 30 33 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74  103 {HandleEvent
1c120 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e  Generate: option
1c130 73 20 3c 56 69 73 69 62 69 6c 69 74 79 3e 20 2d  s <Visibility> -
1c140 73 74 61 74 65 20 56 69 73 69 62 69 6c 69 74 79  state Visibility
1c150 55 6e 6f 62 73 63 75 72 65 64 7d 20 2d 73 65 74  Unobscured} -set
1c160 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e  up {.    frame .
1c170 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20  t.f -class Test 
1c180 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67  -width 150 -heig
1c190 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20  ht 100.    pack 
1c1a0 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d  .t.f.    focus -
1c1b0 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75  force .t.f.    u
1c1c0 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20  pdate.    set x 
1c1d0 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20  {}.} -body {.   
1c1e0 20 62 69 6e 64 20 2e 74 2e 66 20 3c 56 69 73 69   bind .t.f <Visi
1c1f0 62 69 6c 69 74 79 3e 20 22 6c 61 70 70 65 6e 64  bility> "lappend
1c200 20 78 20 25 73 22 0a 20 20 20 20 65 76 65 6e 74   x %s".    event
1c210 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
1c220 56 69 73 69 62 69 6c 69 74 79 3e 20 2d 73 74 61  Visibility> -sta
1c230 74 65 20 56 69 73 69 62 69 6c 69 74 79 55 6e 6f  te VisibilityUno
1c240 62 73 63 75 72 65 64 20 0a 20 20 20 20 72 65 74  bscured .    ret
1c250 75 72 6e 20 24 78 0a 7d 20 2d 63 6c 65 61 6e 75  urn $x.} -cleanu
1c260 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20  p {.    destroy 
1c270 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b  .t.f.} -result {
1c280 56 69 73 69 62 69 6c 69 74 79 55 6e 6f 62 73 63  VisibilityUnobsc
1c290 75 72 65 64 7d 0a 0a 74 65 73 74 20 62 69 6e 64  ured}..test bind
1c2a0 2d 32 32 2e 31 30 34 20 7b 48 61 6e 64 6c 65 45  -22.104 {HandleE
1c2b0 76 65 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f 70  ventGenerate: op
1c2c0 74 69 6f 6e 73 20 3c 43 6f 6e 66 69 67 75 72 65  tions <Configure
1c2d0 3e 20 2d 73 74 61 74 65 20 78 79 7a 7d 20 2d 73  > -state xyz} -s
1c2e0 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65  etup {.    frame
1c2f0 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73   .t.f -class Tes
1c300 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65  t -width 150 -he
1c310 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63  ight 100.    pac
1c320 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73  k .t.f.    focus
1c330 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20   -force .t.f.   
1c340 20 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20   update.    set 
1c350 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20  x {}.} -body {. 
1c360 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 43 6f     bind .t.f <Co
1c370 6e 66 69 67 75 72 65 3e 20 22 6c 61 70 70 65 6e  nfigure> "lappen
1c380 64 20 78 20 25 73 22 0a 20 20 20 20 65 76 65 6e  d x %s".    even
1c390 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
1c3a0 3c 43 6f 6e 66 69 67 75 72 65 3e 20 2d 73 74 61  <Configure> -sta
1c3b0 74 65 20 78 79 7a 20 0a 7d 20 2d 63 6c 65 61 6e  te xyz .} -clean
1c3c0 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79  up {.    destroy
1c3d0 20 2e 74 2e 66 0a 7d 20 2d 72 65 74 75 72 6e 43   .t.f.} -returnC
1c3e0 6f 64 65 73 20 65 72 72 6f 72 20 2d 72 65 73 75  odes error -resu
1c3f0 6c 74 20 7b 3c 43 6f 6e 66 69 67 75 72 65 3e 20  lt {<Configure> 
1c400 65 76 65 6e 74 20 64 6f 65 73 6e 27 74 20 61 63  event doesn't ac
1c410 63 65 70 74 20 22 2d 73 74 61 74 65 22 20 6f 70  cept "-state" op
1c420 74 69 6f 6e 7d 0a 0a 74 65 73 74 20 62 69 6e 64  tion}..test bind
1c430 2d 32 32 2e 31 30 35 20 7b 48 61 6e 64 6c 65 45  -22.105 {HandleE
1c440 76 65 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f 70  ventGenerate: op
1c450 74 69 6f 6e 73 20 3c 4b 65 79 3e 20 2d 73 75 62  tions <Key> -sub
1c460 77 69 6e 64 6f 77 20 2e 78 79 7a 7d 20 2d 73 65  window .xyz} -se
1c470 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20  tup {.    frame 
1c480 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74  .t.f -class Test
1c490 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69   -width 150 -hei
1c4a0 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b  ght 100.    pack
1c4b0 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20   .t.f.    focus 
1c4c0 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20  -force .t.f.    
1c4d0 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78  update.    set x
1c4e0 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20   {}.} -body {.  
1c4f0 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 4b 65 79    bind .t.f <Key
1c500 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25 53 22  > "lappend x %S"
1c510 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
1c520 61 74 65 20 2e 74 2e 66 20 3c 4b 65 79 3e 20 2d  ate .t.f <Key> -
1c530 73 75 62 77 69 6e 64 6f 77 20 2e 78 79 7a 20 0a  subwindow .xyz .
1c540 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20  } -cleanup {.   
1c550 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20   destroy .t.f.} 
1c560 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65 72 72  -returnCodes err
1c570 6f 72 20 2d 72 65 73 75 6c 74 20 7b 62 61 64 20  or -result {bad 
1c580 77 69 6e 64 6f 77 20 70 61 74 68 20 6e 61 6d 65  window path name
1c590 20 22 2e 78 79 7a 22 7d 0a 0a 74 65 73 74 20 62   ".xyz"}..test b
1c5a0 69 6e 64 2d 32 32 2e 31 30 36 20 7b 48 61 6e 64  ind-22.106 {Hand
1c5b0 6c 65 45 76 65 6e 74 47 65 6e 65 72 61 74 65 3a  leEventGenerate:
1c5c0 20 6f 70 74 69 6f 6e 73 20 3c 4b 65 79 3e 20 2d   options <Key> -
1c5d0 73 75 62 77 69 6e 64 6f 77 20 2e 74 7d 20 2d 73  subwindow .t} -s
1c5e0 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65  etup {.    frame
1c5f0 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73   .t.f -class Tes
1c600 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65  t -width 150 -he
1c610 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63  ight 100.    pac
1c620 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73  k .t.f.    focus
1c630 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20   -force .t.f.   
1c640 20 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20   update.    set 
1c650 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20  x {}.} -body {. 
1c660 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 4b 65     bind .t.f <Ke
1c670 79 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25 53  y> "lappend x %S
1c680 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  ".    event gene
1c690 72 61 74 65 20 2e 74 2e 66 20 3c 4b 65 79 3e 20  rate .t.f <Key> 
1c6a0 2d 73 75 62 77 69 6e 64 6f 77 20 2e 74 20 0a 20  -subwindow .t . 
1c6b0 20 20 20 65 78 70 72 20 7b 5b 77 69 6e 66 6f 20     expr {[winfo 
1c6c0 69 64 20 2e 74 5d 20 65 71 20 24 78 7d 0a 7d 20  id .t] eq $x}.} 
1c6d0 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64  -cleanup {.    d
1c6e0 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72  estroy .t.f.} -r
1c6f0 65 73 75 6c 74 20 7b 31 7d 0a 0a 74 65 73 74 20  esult {1}..test 
1c700 62 69 6e 64 2d 32 32 2e 31 30 37 20 7b 48 61 6e  bind-22.107 {Han
1c710 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61 74 65  dleEventGenerate
1c720 3a 20 6f 70 74 69 6f 6e 73 20 3c 4b 65 79 3e 20  : options <Key> 
1c730 2d 73 75 62 77 69 6e 64 6f 77 20 78 79 7a 7d 20  -subwindow xyz} 
1c740 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61  -setup {.    fra
1c750 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54  me .t.f -class T
1c760 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d  est -width 150 -
1c770 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70  height 100.    p
1c780 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63  ack .t.f.    foc
1c790 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20  us -force .t.f. 
1c7a0 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73 65     update.    se
1c7b0 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b  t x {}.} -body {
1c7c0 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c  .    bind .t.f <
1c7d0 4b 65 79 3e 20 22 6c 61 70 70 65 6e 64 20 78 20  Key> "lappend x 
1c7e0 25 53 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65  %S".    event ge
1c7f0 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 4b 65 79  nerate .t.f <Key
1c800 3e 20 2d 73 75 62 77 69 6e 64 6f 77 20 78 79 7a  > -subwindow xyz
1c810 20 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20   .} -cleanup {. 
1c820 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
1c830 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65  } -returnCodes e
1c840 72 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 62 61  rror -result {ba
1c850 64 20 77 69 6e 64 6f 77 20 6e 61 6d 65 2f 69 64  d window name/id
1c860 65 6e 74 69 66 69 65 72 20 22 78 79 7a 22 7d 0a  entifier "xyz"}.
1c870 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e 31 30  .test bind-22.10
1c880 38 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47 65  8 {HandleEventGe
1c890 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20  nerate: options 
1c8a0 3c 4b 65 79 3e 20 2d 73 75 62 77 69 6e 64 6f 77  <Key> -subwindow
1c8b0 20 5b 77 69 6e 66 6f 20 69 64 20 2e 74 5d 7d 20   [winfo id .t]} 
1c8c0 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61  -setup {.    fra
1c8d0 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54  me .t.f -class T
1c8e0 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d  est -width 150 -
1c8f0 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70  height 100.    p
1c900 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63  ack .t.f.    foc
1c910 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20  us -force .t.f. 
1c920 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73 65     update.    se
1c930 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b  t x {}.} -body {
1c940 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c  .    bind .t.f <
1c950 4b 65 79 3e 20 22 6c 61 70 70 65 6e 64 20 78 20  Key> "lappend x 
1c960 25 53 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65  %S".    event ge
1c970 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 4b 65 79  nerate .t.f <Key
1c980 3e 20 2d 73 75 62 77 69 6e 64 6f 77 20 5b 77 69  > -subwindow [wi
1c990 6e 66 6f 20 69 64 20 2e 74 5d 20 0a 20 20 20 20  nfo id .t] .    
1c9a0 65 78 70 72 20 7b 5b 77 69 6e 66 6f 20 69 64 20  expr {[winfo id 
1c9b0 2e 74 5d 20 65 71 20 24 78 7d 0a 7d 20 2d 63 6c  .t] eq $x}.} -cl
1c9c0 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74  eanup {.    dest
1c9d0 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75  roy .t.f.} -resu
1c9e0 6c 74 20 7b 31 7d 0a 0a 74 65 73 74 20 62 69 6e  lt {1}..test bin
1c9f0 64 2d 32 32 2e 31 30 39 20 7b 48 61 6e 64 6c 65  d-22.109 {Handle
1ca00 45 76 65 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f  EventGenerate: o
1ca10 70 74 69 6f 6e 73 20 3c 42 75 74 74 6f 6e 3e 20  ptions <Button> 
1ca20 2d 73 75 62 77 69 6e 64 6f 77 20 2e 74 7d 20 2d  -subwindow .t} -
1ca30 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d  setup {.    fram
1ca40 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65  e .t.f -class Te
1ca50 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68  st -width 150 -h
1ca60 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61  eight 100.    pa
1ca70 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75  ck .t.f.    focu
1ca80 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20  s -force .t.f.  
1ca90 20 20 75 70 64 61 74 65 0a 20 20 20 20 73 65 74    update.    set
1caa0 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a   x {}.} -body {.
1cab0 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 42      bind .t.f <B
1cac0 75 74 74 6f 6e 3e 20 22 6c 61 70 70 65 6e 64 20  utton> "lappend 
1cad0 78 20 25 53 22 0a 20 20 20 20 65 76 65 6e 74 20  x %S".    event 
1cae0 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42  generate .t.f <B
1caf0 75 74 74 6f 6e 3e 20 2d 73 75 62 77 69 6e 64 6f  utton> -subwindo
1cb00 77 20 2e 74 20 0a 20 20 20 20 65 78 70 72 20 7b  w .t .    expr {
1cb10 5b 77 69 6e 66 6f 20 69 64 20 2e 74 5d 20 65 71  [winfo id .t] eq
1cb20 20 24 78 7d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20   $x}.} -cleanup 
1cb30 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74  {.    destroy .t
1cb40 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 31 7d  .f.} -result {1}
1cb50 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e 31  ..test bind-22.1
1cb60 31 30 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47  10 {HandleEventG
1cb70 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73  enerate: options
1cb80 20 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 3e   <ButtonRelease>
1cb90 20 2d 73 75 62 77 69 6e 64 6f 77 20 2e 74 7d 20   -subwindow .t} 
1cba0 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61  -setup {.    fra
1cbb0 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54  me .t.f -class T
1cbc0 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d  est -width 150 -
1cbd0 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70  height 100.    p
1cbe0 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63  ack .t.f.    foc
1cbf0 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20  us -force .t.f. 
1cc00 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73 65     update.    se
1cc10 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b  t x {}.} -body {
1cc20 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c  .    bind .t.f <
1cc30 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 3e 20 22  ButtonRelease> "
1cc40 6c 61 70 70 65 6e 64 20 78 20 25 53 22 0a 20 20  lappend x %S".  
1cc50 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
1cc60 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65 6c   .t.f <ButtonRel
1cc70 65 61 73 65 3e 20 2d 73 75 62 77 69 6e 64 6f 77  ease> -subwindow
1cc80 20 2e 74 20 0a 20 20 20 20 65 78 70 72 20 7b 5b   .t .    expr {[
1cc90 77 69 6e 66 6f 20 69 64 20 2e 74 5d 20 65 71 20  winfo id .t] eq 
1cca0 24 78 7d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  $x}.} -cleanup {
1ccb0 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e  .    destroy .t.
1ccc0 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 31 7d 0a  f.} -result {1}.
1ccd0 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e 31 31  .test bind-22.11
1cce0 31 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47 65  1 {HandleEventGe
1ccf0 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20  nerate: options 
1cd00 3c 4d 6f 74 69 6f 6e 3e 20 2d 73 75 62 77 69 6e  <Motion> -subwin
1cd10 64 6f 77 20 2e 74 7d 20 2d 73 65 74 75 70 20 7b  dow .t} -setup {
1cd20 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
1cd30 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
1cd40 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
1cd50 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
1cd60 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
1cd70 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
1cd80 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d  e.    set x {}.}
1cd90 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
1cda0 64 20 2e 74 2e 66 20 3c 4d 6f 74 69 6f 6e 3e 20  d .t.f <Motion> 
1cdb0 22 6c 61 70 70 65 6e 64 20 78 20 25 53 22 0a 20  "lappend x %S". 
1cdc0 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
1cdd0 65 20 2e 74 2e 66 20 3c 4d 6f 74 69 6f 6e 3e 20  e .t.f <Motion> 
1cde0 2d 73 75 62 77 69 6e 64 6f 77 20 2e 74 20 0a 20  -subwindow .t . 
1cdf0 20 20 20 65 78 70 72 20 7b 5b 77 69 6e 66 6f 20     expr {[winfo 
1ce00 69 64 20 2e 74 5d 20 65 71 20 24 78 7d 0a 7d 20  id .t] eq $x}.} 
1ce10 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64  -cleanup {.    d
1ce20 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72  estroy .t.f.} -r
1ce30 65 73 75 6c 74 20 7b 31 7d 0a 0a 74 65 73 74 20  esult {1}..test 
1ce40 62 69 6e 64 2d 32 32 2e 31 31 32 20 7b 48 61 6e  bind-22.112 {Han
1ce50 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61 74 65  dleEventGenerate
1ce60 3a 20 6f 70 74 69 6f 6e 73 20 3c 3c 50 61 73 74  : options <<Past
1ce70 65 3e 3e 20 2d 73 75 62 77 69 6e 64 6f 77 20 2e  e>> -subwindow .
1ce80 74 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20  t} -setup {.    
1ce90 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73  frame .t.f -clas
1cea0 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35  s Test -width 15
1ceb0 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20  0 -height 100.  
1cec0 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20    pack .t.f.    
1ced0 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e  focus -force .t.
1cee0 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20 20  f.    update.   
1cef0 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64   set x {}.} -bod
1cf00 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  y {.    bind .t.
1cf10 66 20 3c 3c 50 61 73 74 65 3e 3e 20 22 6c 61 70  f <<Paste>> "lap
1cf20 70 65 6e 64 20 78 20 25 53 22 0a 20 20 20 20 65  pend x %S".    e
1cf30 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
1cf40 2e 66 20 3c 3c 50 61 73 74 65 3e 3e 20 2d 73 75  .f <<Paste>> -su
1cf50 62 77 69 6e 64 6f 77 20 2e 74 20 0a 20 20 20 20  bwindow .t .    
1cf60 65 78 70 72 20 7b 5b 77 69 6e 66 6f 20 69 64 20  expr {[winfo id 
1cf70 2e 74 5d 20 65 71 20 24 78 7d 0a 7d 20 2d 63 6c  .t] eq $x}.} -cl
1cf80 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74  eanup {.    dest
1cf90 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75  roy .t.f.} -resu
1cfa0 6c 74 20 7b 31 7d 0a 0a 74 65 73 74 20 62 69 6e  lt {1}..test bin
1cfb0 64 2d 32 32 2e 31 31 33 20 7b 48 61 6e 64 6c 65  d-22.113 {Handle
1cfc0 45 76 65 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f  EventGenerate: o
1cfd0 70 74 69 6f 6e 73 20 3c 45 6e 74 65 72 3e 20 2d  ptions <Enter> -
1cfe0 73 75 62 77 69 6e 64 6f 77 20 2e 74 7d 20 2d 73  subwindow .t} -s
1cff0 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65  etup {.    frame
1d000 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73   .t.f -class Tes
1d010 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65  t -width 150 -he
1d020 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63  ight 100.    pac
1d030 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73  k .t.f.    focus
1d040 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20   -force .t.f.   
1d050 20 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20   update.    set 
1d060 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20  x {}.} -body {. 
1d070 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 45 6e     bind .t.f <En
1d080 74 65 72 3e 20 22 6c 61 70 70 65 6e 64 20 78 20  ter> "lappend x 
1d090 25 53 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65  %S".    event ge
1d0a0 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 45 6e 74  nerate .t.f <Ent
1d0b0 65 72 3e 20 2d 73 75 62 77 69 6e 64 6f 77 20 2e  er> -subwindow .
1d0c0 74 20 0a 20 20 20 20 65 78 70 72 20 7b 5b 77 69  t .    expr {[wi
1d0d0 6e 66 6f 20 69 64 20 2e 74 5d 20 65 71 20 24 78  nfo id .t] eq $x
1d0e0 7d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  }.} -cleanup {. 
1d0f0 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
1d100 7d 20 2d 72 65 73 75 6c 74 20 7b 31 7d 0a 0a 74  } -result {1}..t
1d110 65 73 74 20 62 69 6e 64 2d 32 32 2e 31 31 34 20  est bind-22.114 
1d120 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65  {HandleEventGene
1d130 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 43  rate: options <C
1d140 6f 6e 66 69 67 75 72 65 3e 20 2d 73 75 62 77 69  onfigure> -subwi
1d150 6e 64 6f 77 20 2e 74 7d 20 2d 73 65 74 75 70 20  ndow .t} -setup 
1d160 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66  {.    frame .t.f
1d170 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69   -class Test -wi
1d180 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20  dth 150 -height 
1d190 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e  100.    pack .t.
1d1a0 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72  f.    focus -for
1d1b0 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61  ce .t.f.    upda
1d1c0 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a  te.    set x {}.
1d1d0 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
1d1e0 6e 64 20 2e 74 2e 66 20 3c 43 6f 6e 66 69 67 75  nd .t.f <Configu
1d1f0 72 65 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25  re> "lappend x %
1d200 53 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e  S".    event gen
1d210 65 72 61 74 65 20 2e 74 2e 66 20 3c 43 6f 6e 66  erate .t.f <Conf
1d220 69 67 75 72 65 3e 20 2d 73 75 62 77 69 6e 64 6f  igure> -subwindo
1d230 77 20 2e 74 20 0a 7d 20 2d 63 6c 65 61 6e 75 70  w .t .} -cleanup
1d240 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
1d250 74 2e 66 0a 7d 20 2d 72 65 74 75 72 6e 43 6f 64  t.f.} -returnCod
1d260 65 73 20 65 72 72 6f 72 20 2d 72 65 73 75 6c 74  es error -result
1d270 20 7b 3c 43 6f 6e 66 69 67 75 72 65 3e 20 65 76   {<Configure> ev
1d280 65 6e 74 20 64 6f 65 73 6e 27 74 20 61 63 63 65  ent doesn't acce
1d290 70 74 20 22 2d 73 75 62 77 69 6e 64 6f 77 22 20  pt "-subwindow" 
1d2a0 6f 70 74 69 6f 6e 7d 0a 0a 74 65 73 74 20 62 69  option}..test bi
1d2b0 6e 64 2d 32 32 2e 31 31 35 20 7b 48 61 6e 64 6c  nd-22.115 {Handl
1d2c0 65 45 76 65 6e 74 47 65 6e 65 72 61 74 65 3a 20  eEventGenerate: 
1d2d0 6f 70 74 69 6f 6e 73 20 3c 4b 65 79 3e 20 2d 74  options <Key> -t
1d2e0 69 6d 65 20 78 79 7a 7d 20 2d 73 65 74 75 70 20  ime xyz} -setup 
1d2f0 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66  {.    frame .t.f
1d300 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69   -class Test -wi
1d310 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20  dth 150 -height 
1d320 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e  100.    pack .t.
1d330 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72  f.    focus -for
1d340 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61  ce .t.f.    upda
1d350 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a  te.    set x {}.
1d360 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
1d370 6e 64 20 2e 74 2e 66 20 3c 4b 65 79 3e 20 22 6c  nd .t.f <Key> "l
1d380 61 70 70 65 6e 64 20 78 20 25 74 22 0a 20 20 20  append x %t".   
1d390 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
1d3a0 2e 74 2e 66 20 3c 4b 65 79 3e 20 2d 74 69 6d 65  .t.f <Key> -time
1d3b0 20 78 79 7a 20 0a 7d 20 2d 63 6c 65 61 6e 75 70   xyz .} -cleanup
1d3c0 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
1d3d0 74 2e 66 0a 7d 20 2d 72 65 74 75 72 6e 43 6f 64  t.f.} -returnCod
1d3e0 65 73 20 65 72 72 6f 72 20 2d 72 65 73 75 6c 74  es error -result
1d3f0 20 7b 65 78 70 65 63 74 65 64 20 69 6e 74 65 67   {expected integ
1d400 65 72 20 62 75 74 20 67 6f 74 20 22 78 79 7a 22  er but got "xyz"
1d410 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e  }..test bind-22.
1d420 31 31 36 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74  116 {HandleEvent
1d430 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e  Generate: option
1d440 73 20 3c 4b 65 79 3e 20 2d 74 69 6d 65 20 31 30  s <Key> -time 10
1d450 30 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20  0} -setup {.    
1d460 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73  frame .t.f -clas
1d470 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35  s Test -width 15
1d480 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20  0 -height 100.  
1d490 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20    pack .t.f.    
1d4a0 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e  focus -force .t.
1d4b0 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20 20  f.    update.   
1d4c0 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64   set x {}.} -bod
1d4d0 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  y {.    bind .t.
1d4e0 66 20 3c 4b 65 79 3e 20 22 6c 61 70 70 65 6e 64  f <Key> "lappend
1d4f0 20 78 20 25 74 22 0a 20 20 20 20 65 76 65 6e 74   x %t".    event
1d500 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
1d510 4b 65 79 3e 20 2d 74 69 6d 65 20 31 30 30 20 0a  Key> -time 100 .
1d520 20 20 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 20      return $x.} 
1d530 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64  -cleanup {.    d
1d540 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72  estroy .t.f.} -r
1d550 65 73 75 6c 74 20 7b 31 30 30 7d 0a 0a 74 65 73  esult {100}..tes
1d560 74 20 62 69 6e 64 2d 32 32 2e 31 31 37 20 7b 48  t bind-22.117 {H
1d570 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61  andleEventGenera
1d580 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 42 75 74  te: options <But
1d590 74 6f 6e 3e 20 2d 74 69 6d 65 20 31 30 30 7d 20  ton> -time 100} 
1d5a0 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61  -setup {.    fra
1d5b0 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54  me .t.f -class T
1d5c0 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d  est -width 150 -
1d5d0 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70  height 100.    p
1d5e0 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63  ack .t.f.    foc
1d5f0 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20  us -force .t.f. 
1d600 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73 65     update.    se
1d610 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b  t x {}.} -body {
1d620 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c  .    bind .t.f <
1d630 42 75 74 74 6f 6e 3e 20 22 6c 61 70 70 65 6e 64  Button> "lappend
1d640 20 78 20 25 74 22 0a 20 20 20 20 65 76 65 6e 74   x %t".    event
1d650 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
1d660 42 75 74 74 6f 6e 3e 20 2d 74 69 6d 65 20 31 30  Button> -time 10
1d670 30 20 0a 20 20 20 20 72 65 74 75 72 6e 20 24 78  0 .    return $x
1d680 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
1d690 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d    destroy .t.f.}
1d6a0 20 2d 72 65 73 75 6c 74 20 7b 31 30 30 7d 0a 0a   -result {100}..
1d6b0 74 65 73 74 20 62 69 6e 64 2d 32 32 2e 31 31 38  test bind-22.118
1d6c0 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e   {HandleEventGen
1d6d0 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c  erate: options <
1d6e0 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 3e 20 2d  ButtonRelease> -
1d6f0 74 69 6d 65 20 31 30 30 7d 20 2d 73 65 74 75 70  time 100} -setup
1d700 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e   {.    frame .t.
1d710 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77  f -class Test -w
1d720 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74  idth 150 -height
1d730 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74   100.    pack .t
1d740 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f  .f.    focus -fo
1d750 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64  rce .t.f.    upd
1d760 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d  ate.    set x {}
1d770 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62  .} -body {.    b
1d780 69 6e 64 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e  ind .t.f <Button
1d790 52 65 6c 65 61 73 65 3e 20 22 6c 61 70 70 65 6e  Release> "lappen
1d7a0 64 20 78 20 25 74 22 0a 20 20 20 20 65 76 65 6e  d x %t".    even
1d7b0 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
1d7c0 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 3e 20  <ButtonRelease> 
1d7d0 2d 74 69 6d 65 20 31 30 30 20 0a 20 20 20 20 72  -time 100 .    r
1d7e0 65 74 75 72 6e 20 24 78 0a 7d 20 2d 63 6c 65 61  eturn $x.} -clea
1d7f0 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f  nup {.    destro
1d800 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74  y .t.f.} -result
1d810 20 7b 31 30 30 7d 0a 0a 74 65 73 74 20 62 69 6e   {100}..test bin
1d820 64 2d 32 32 2e 31 31 39 20 7b 48 61 6e 64 6c 65  d-22.119 {Handle
1d830 45 76 65 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f  EventGenerate: o
1d840 70 74 69 6f 6e 73 20 3c 4d 6f 74 69 6f 6e 3e 20  ptions <Motion> 
1d850 2d 74 69 6d 65 20 31 30 30 7d 20 2d 73 65 74 75  -time 100} -setu
1d860 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74  p {.    frame .t
1d870 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d  .f -class Test -
1d880 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68  width 150 -heigh
1d890 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e  t 100.    pack .
1d8a0 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66  t.f.    focus -f
1d8b0 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70  orce .t.f.    up
1d8c0 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b  date.    set x {
1d8d0 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  }.} -body {.    
1d8e0 62 69 6e 64 20 2e 74 2e 66 20 3c 4d 6f 74 69 6f  bind .t.f <Motio
1d8f0 6e 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25 74  n> "lappend x %t
1d900 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  ".    event gene
1d910 72 61 74 65 20 2e 74 2e 66 20 3c 4d 6f 74 69 6f  rate .t.f <Motio
1d920 6e 3e 20 2d 74 69 6d 65 20 31 30 30 20 0a 20 20  n> -time 100 .  
1d930 20 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d 63    return $x.} -c
1d940 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73  leanup {.    des
1d950 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73  troy .t.f.} -res
1d960 75 6c 74 20 7b 31 30 30 7d 0a 0a 74 65 73 74 20  ult {100}..test 
1d970 62 69 6e 64 2d 32 32 2e 31 32 30 20 7b 48 61 6e  bind-22.120 {Han
1d980 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61 74 65  dleEventGenerate
1d990 3a 20 6f 70 74 69 6f 6e 73 20 3c 3c 50 61 73 74  : options <<Past
1d9a0 65 3e 3e 20 2d 74 69 6d 65 20 31 30 30 7d 20 2d  e>> -time 100} -
1d9b0 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d  setup {.    fram
1d9c0 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65  e .t.f -class Te
1d9d0 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68  st -width 150 -h
1d9e0 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61  eight 100.    pa
1d9f0 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75  ck .t.f.    focu
1da00 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20  s -force .t.f.  
1da10 20 20 75 70 64 61 74 65 0a 20 20 20 20 73 65 74    update.    set
1da20 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a   x {}.} -body {.
1da30 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 3c      bind .t.f <<
1da40 50 61 73 74 65 3e 3e 20 22 6c 61 70 70 65 6e 64  Paste>> "lappend
1da50 20 78 20 25 74 22 0a 20 20 20 20 65 76 65 6e 74   x %t".    event
1da60 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
1da70 3c 50 61 73 74 65 3e 3e 20 2d 74 69 6d 65 20 31  <Paste>> -time 1
1da80 30 30 20 0a 20 20 20 20 72 65 74 75 72 6e 20 24  00 .    return $
1da90 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  x.} -cleanup {. 
1daa0 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
1dab0 7d 20 2d 72 65 73 75 6c 74 20 7b 31 30 30 7d 0a  } -result {100}.
1dac0 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e 31 32  .test bind-22.12
1dad0 31 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47 65  1 {HandleEventGe
1dae0 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20  nerate: options 
1daf0 3c 45 6e 74 65 72 3e 20 2d 74 69 6d 65 20 31 30  <Enter> -time 10
1db00 30 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20  0} -setup {.    
1db10 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73  frame .t.f -clas
1db20 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35  s Test -width 15
1db30 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20  0 -height 100.  
1db40 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20    pack .t.f.    
1db50 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e  focus -force .t.
1db60 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20 20  f.    update.   
1db70 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64   set x {}.} -bod
1db80 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  y {.    bind .t.
1db90 66 20 3c 45 6e 74 65 72 3e 20 22 6c 61 70 70 65  f <Enter> "lappe
1dba0 6e 64 20 78 20 25 74 22 0a 20 20 20 20 65 76 65  nd x %t".    eve
1dbb0 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
1dbc0 20 3c 45 6e 74 65 72 3e 20 2d 74 69 6d 65 20 31   <Enter> -time 1
1dbd0 30 30 20 0a 20 20 20 20 72 65 74 75 72 6e 20 24  00 .    return $
1dbe0 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  x.} -cleanup {. 
1dbf0 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
1dc00 7d 20 2d 72 65 73 75 6c 74 20 7b 31 30 30 7d 0a  } -result {100}.
1dc10 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e 31 32  .test bind-22.12
1dc20 32 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47 65  2 {HandleEventGe
1dc30 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20  nerate: options 
1dc40 3c 50 72 6f 70 65 72 74 79 3e 20 2d 74 69 6d 65  <Property> -time
1dc50 20 31 30 30 7d 20 2d 73 65 74 75 70 20 7b 0a 20   100} -setup {. 
1dc60 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63     frame .t.f -c
1dc70 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
1dc80 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
1dc90 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20  .    pack .t.f. 
1dca0 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20     focus -force 
1dcb0 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a  .t.f.    update.
1dcc0 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d      set x {}.} -
1dcd0 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20  body {.    bind 
1dce0 2e 74 2e 66 20 3c 50 72 6f 70 65 72 74 79 3e 20  .t.f <Property> 
1dcf0 22 6c 61 70 70 65 6e 64 20 78 20 25 74 22 0a 20  "lappend x %t". 
1dd00 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
1dd10 65 20 2e 74 2e 66 20 3c 50 72 6f 70 65 72 74 79  e .t.f <Property
1dd20 3e 20 2d 74 69 6d 65 20 31 30 30 20 0a 20 20 20  > -time 100 .   
1dd30 20 72 65 74 75 72 6e 20 24 78 0a 7d 20 2d 63 6c   return $x.} -cl
1dd40 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74  eanup {.    dest
1dd50 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75  roy .t.f.} -resu
1dd60 6c 74 20 7b 31 30 30 7d 0a 0a 74 65 73 74 20 62  lt {100}..test b
1dd70 69 6e 64 2d 32 32 2e 31 32 33 20 7b 48 61 6e 64  ind-22.123 {Hand
1dd80 6c 65 45 76 65 6e 74 47 65 6e 65 72 61 74 65 3a  leEventGenerate:
1dd90 20 6f 70 74 69 6f 6e 73 20 3c 43 6f 6e 66 69 67   options <Config
1dda0 75 72 65 3e 20 2d 74 69 6d 65 20 31 30 30 7d 20  ure> -time 100} 
1ddb0 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61  -setup {.    fra
1ddc0 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54  me .t.f -class T
1ddd0 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d  est -width 150 -
1dde0 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70  height 100.    p
1ddf0 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63  ack .t.f.    foc
1de00 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20  us -force .t.f. 
1de10 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73 65     update.    se
1de20 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b  t x {}.} -body {
1de30 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c  .    bind .t.f <
1de40 43 6f 6e 66 69 67 75 72 65 3e 20 22 6c 61 70 70  Configure> "lapp
1de50 65 6e 64 20 78 20 25 74 22 0a 20 20 20 20 65 76  end x %t".    ev
1de60 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
1de70 66 20 3c 43 6f 6e 66 69 67 75 72 65 3e 20 2d 74  f <Configure> -t
1de80 69 6d 65 20 31 30 30 20 0a 7d 20 2d 63 6c 65 61  ime 100 .} -clea
1de90 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f  nup {.    destro
1dea0 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 74 75 72 6e  y .t.f.} -return
1deb0 43 6f 64 65 73 20 65 72 72 6f 72 20 2d 72 65 73  Codes error -res
1dec0 75 6c 74 20 7b 3c 43 6f 6e 66 69 67 75 72 65 3e  ult {<Configure>
1ded0 20 65 76 65 6e 74 20 64 6f 65 73 6e 27 74 20 61   event doesn't a
1dee0 63 63 65 70 74 20 22 2d 74 69 6d 65 22 20 6f 70  ccept "-time" op
1def0 74 69 6f 6e 7d 0a 0a 74 65 73 74 20 62 69 6e 64  tion}..test bind
1df00 2d 32 32 2e 31 32 34 20 7b 48 61 6e 64 6c 65 45  -22.124 {HandleE
1df10 76 65 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f 70  ventGenerate: op
1df20 74 69 6f 6e 73 20 3c 45 78 70 6f 73 65 3e 20 2d  tions <Expose> -
1df30 77 69 64 74 68 20 78 79 7a 7d 20 2d 73 65 74 75  width xyz} -setu
1df40 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74  p {.    frame .t
1df50 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d  .f -class Test -
1df60 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68  width 150 -heigh
1df70 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e  t 100.    pack .
1df80 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66  t.f.    focus -f
1df90 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70  orce .t.f.    up
1dfa0 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b  date.    set x {
1dfb0 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  }.} -body {.    
1dfc0 62 69 6e 64 20 2e 74 2e 66 20 3c 45 78 70 6f 73  bind .t.f <Expos
1dfd0 65 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25 77  e> "lappend x %w
1dfe0 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  ".    event gene
1dff0 72 61 74 65 20 2e 74 2e 66 20 3c 45 78 70 6f 73  rate .t.f <Expos
1e000 65 3e 20 2d 77 69 64 74 68 20 78 79 7a 20 0a 7d  e> -width xyz .}
1e010 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
1e020 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d  destroy .t.f.} -
1e030 72 65 74 75 72 6e 43 6f 64 65 73 20 65 72 72 6f  returnCodes erro
1e040 72 20 2d 72 65 73 75 6c 74 20 7b 62 61 64 20 73  r -result {bad s
1e050 63 72 65 65 6e 20 64 69 73 74 61 6e 63 65 20 22  creen distance "
1e060 78 79 7a 22 7d 0a 0a 74 65 73 74 20 62 69 6e 64  xyz"}..test bind
1e070 2d 32 32 2e 31 32 35 20 7b 48 61 6e 64 6c 65 45  -22.125 {HandleE
1e080 76 65 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f 70  ventGenerate: op
1e090 74 69 6f 6e 73 20 3c 45 78 70 6f 73 65 3e 20 2d  tions <Expose> -
1e0a0 77 69 64 74 68 20 32 69 7d 20 2d 73 65 74 75 70  width 2i} -setup
1e0b0 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e   {.    frame .t.
1e0c0 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77  f -class Test -w
1e0d0 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74  idth 150 -height
1e0e0 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74   100.    pack .t
1e0f0 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f  .f.    focus -fo
1e100 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64  rce .t.f.    upd
1e110 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d  ate.    set x {}
1e120 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62  .} -body {.    b
1e130 69 6e 64 20 2e 74 2e 66 20 3c 45 78 70 6f 73 65  ind .t.f <Expose
1e140 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25 77 22  > "lappend x %w"
1e150 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
1e160 61 74 65 20 2e 74 2e 66 20 3c 45 78 70 6f 73 65  ate .t.f <Expose
1e170 3e 20 2d 77 69 64 74 68 20 32 69 20 0a 20 20 20  > -width 2i .   
1e180 20 65 78 70 72 20 7b 5b 77 69 6e 66 6f 20 70 69   expr {[winfo pi
1e190 78 65 6c 73 20 2e 74 2e 66 20 32 69 5d 20 65 71  xels .t.f 2i] eq
1e1a0 20 24 78 7d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20   $x}.} -cleanup 
1e1b0 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74  {.    destroy .t
1e1c0 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 31 7d  .f.} -result {1}
1e1d0 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e 31  ..test bind-22.1
1e1e0 32 36 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47  26 {HandleEventG
1e1f0 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73  enerate: options
1e200 20 3c 43 6f 6e 66 69 67 75 72 65 3e 20 2d 77 69   <Configure> -wi
1e210 64 74 68 20 32 69 7d 20 2d 73 65 74 75 70 20 7b  dth 2i} -setup {
1e220 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
1e230 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
1e240 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
1e250 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
1e260 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
1e270 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
1e280 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d  e.    set x {}.}
1e290 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
1e2a0 64 20 2e 74 2e 66 20 3c 43 6f 6e 66 69 67 75 72  d .t.f <Configur
1e2b0 65 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25 77  e> "lappend x %w
1e2c0 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  ".    event gene
1e2d0 72 61 74 65 20 2e 74 2e 66 20 3c 43 6f 6e 66 69  rate .t.f <Confi
1e2e0 67 75 72 65 3e 20 2d 77 69 64 74 68 20 32 69 20  gure> -width 2i 
1e2f0 0a 20 20 20 20 65 78 70 72 20 7b 5b 77 69 6e 66  .    expr {[winf
1e300 6f 20 70 69 78 65 6c 73 20 2e 74 2e 66 20 32 69  o pixels .t.f 2i
1e310 5d 20 65 71 20 24 78 7d 0a 7d 20 2d 63 6c 65 61  ] eq $x}.} -clea
1e320 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f  nup {.    destro
1e330 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74  y .t.f.} -result
1e340 20 7b 31 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d   {1}..test bind-
1e350 32 32 2e 31 32 37 20 7b 48 61 6e 64 6c 65 45 76  22.127 {HandleEv
1e360 65 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f 70 74  entGenerate: opt
1e370 69 6f 6e 73 20 3c 4b 65 79 3e 20 2d 77 69 64 74  ions <Key> -widt
1e380 68 20 32 69 7d 20 2d 73 65 74 75 70 20 7b 0a 20  h 2i} -setup {. 
1e390 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63     frame .t.f -c
1e3a0 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
1e3b0 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
1e3c0 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20  .    pack .t.f. 
1e3d0 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20     focus -force 
1e3e0 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a  .t.f.    update.
1e3f0 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d      set x {}.} -
1e400 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20  body {.    bind 
1e410 2e 74 2e 66 20 3c 4b 65 79 3e 20 22 6c 61 70 70  .t.f <Key> "lapp
1e420 65 6e 64 20 78 20 25 6b 22 0a 20 20 20 20 65 76  end x %k".    ev
1e430 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
1e440 66 20 3c 4b 65 79 3e 20 2d 77 69 64 74 68 20 32  f <Key> -width 2
1e450 69 20 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a  i .} -cleanup {.
1e460 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66      destroy .t.f
1e470 0a 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20  .} -returnCodes 
1e480 65 72 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 3c  error -result {<
1e490 4b 65 79 3e 20 65 76 65 6e 74 20 64 6f 65 73 6e  Key> event doesn
1e4a0 27 74 20 61 63 63 65 70 74 20 22 2d 77 69 64 74  't accept "-widt
1e4b0 68 22 20 6f 70 74 69 6f 6e 7d 0a 0a 74 65 73 74  h" option}..test
1e4c0 20 62 69 6e 64 2d 32 32 2e 31 32 38 20 7b 48 61   bind-22.128 {Ha
1e4d0 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61 74  ndleEventGenerat
1e4e0 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 55 6e 6d 61  e: options <Unma
1e4f0 70 3e 20 2d 77 69 6e 64 6f 77 20 2e 78 79 7a 7d  p> -window .xyz}
1e500 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72   -setup {.    fr
1e510 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20  ame .t.f -class 
1e520 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20  Test -width 150 
1e530 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20  -height 100.    
1e540 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f  pack .t.f.    fo
1e550 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a  cus -force .t.f.
1e560 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73      update.    s
1e570 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20  et x {}.} -body 
1e580 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20  {.    bind .t.f 
1e590 3c 55 6e 6d 61 70 3e 20 22 6c 61 70 70 65 6e 64  <Unmap> "lappend
1e5a0 20 78 20 25 57 22 0a 20 20 20 20 65 76 65 6e 74   x %W".    event
1e5b0 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
1e5c0 55 6e 6d 61 70 3e 20 2d 77 69 6e 64 6f 77 20 2e  Unmap> -window .
1e5d0 78 79 7a 20 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  xyz .} -cleanup 
1e5e0 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74  {.    destroy .t
1e5f0 2e 66 0a 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65  .f.} -returnCode
1e600 73 20 65 72 72 6f 72 20 2d 72 65 73 75 6c 74 20  s error -result 
1e610 7b 62 61 64 20 77 69 6e 64 6f 77 20 70 61 74 68  {bad window path
1e620 20 6e 61 6d 65 20 22 2e 78 79 7a 22 7d 0a 0a 74   name ".xyz"}..t
1e630 65 73 74 20 62 69 6e 64 2d 32 32 2e 31 32 39 20  est bind-22.129 
1e640 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65  {HandleEventGene
1e650 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 55  rate: options <U
1e660 6e 6d 61 70 3e 20 2d 77 69 6e 64 6f 77 20 2e 74  nmap> -window .t
1e670 2e 66 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20  .f} -setup {.   
1e680 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61   frame .t.f -cla
1e690 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
1e6a0 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20  50 -height 100. 
1e6b0 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20     pack .t.f.   
1e6c0 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74   focus -force .t
1e6d0 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20  .f.    update.  
1e6e0 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f    set x {}.} -bo
1e6f0 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74  dy {.    bind .t
1e700 2e 66 20 3c 55 6e 6d 61 70 3e 20 22 6c 61 70 70  .f <Unmap> "lapp
1e710 65 6e 64 20 78 20 25 57 22 0a 20 20 20 20 65 76  end x %W".    ev
1e720 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
1e730 66 20 3c 55 6e 6d 61 70 3e 20 2d 77 69 6e 64 6f  f <Unmap> -windo
1e740 77 20 2e 74 2e 66 20 0a 20 20 20 20 72 65 74 75  w .t.f .    retu
1e750 72 6e 20 24 78 0a 7d 20 2d 63 6c 65 61 6e 75 70  rn $x.} -cleanup
1e760 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
1e770 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 2e  t.f.} -result {.
1e780 74 2e 66 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d  t.f}..test bind-
1e790 32 32 2e 31 33 30 20 7b 48 61 6e 64 6c 65 45 76  22.130 {HandleEv
1e7a0 65 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f 70 74  entGenerate: opt
1e7b0 69 6f 6e 73 20 3c 55 6e 6d 61 70 3e 20 2d 77 69  ions <Unmap> -wi
1e7c0 6e 64 6f 77 20 78 79 7a 7d 20 2d 73 65 74 75 70  ndow xyz} -setup
1e7d0 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e   {.    frame .t.
1e7e0 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77  f -class Test -w
1e7f0 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74  idth 150 -height
1e800 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74   100.    pack .t
1e810 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f  .f.    focus -fo
1e820 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64  rce .t.f.    upd
1e830 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d  ate.    set x {}
1e840 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62  .} -body {.    b
1e850 69 6e 64 20 2e 74 2e 66 20 3c 55 6e 6d 61 70 3e  ind .t.f <Unmap>
1e860 20 22 6c 61 70 70 65 6e 64 20 78 20 25 57 22 0a   "lappend x %W".
1e870 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
1e880 74 65 20 2e 74 2e 66 20 3c 55 6e 6d 61 70 3e 20  te .t.f <Unmap> 
1e890 2d 77 69 6e 64 6f 77 20 78 79 7a 20 0a 7d 20 2d  -window xyz .} -
1e8a0 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
1e8b0 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
1e8c0 74 75 72 6e 43 6f 64 65 73 20 65 72 72 6f 72 20  turnCodes error 
1e8d0 2d 72 65 73 75 6c 74 20 7b 62 61 64 20 77 69 6e  -result {bad win
1e8e0 64 6f 77 20 6e 61 6d 65 2f 69 64 65 6e 74 69 66  dow name/identif
1e8f0 69 65 72 20 22 78 79 7a 22 7d 0a 0a 74 65 73 74  ier "xyz"}..test
1e900 20 62 69 6e 64 2d 32 32 2e 31 33 31 20 7b 48 61   bind-22.131 {Ha
1e910 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61 74  ndleEventGenerat
1e920 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 55 6e 6d 61  e: options <Unma
1e930 70 3e 20 2d 77 69 6e 64 6f 77 20 5b 77 69 6e 66  p> -window [winf
1e940 6f 20 69 64 20 2e 74 2e 66 5d 7d 20 2d 73 65 74  o id .t.f]} -set
1e950 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e  up {.    frame .
1e960 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20  t.f -class Test 
1e970 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67  -width 150 -heig
1e980 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20  ht 100.    pack 
1e990 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d  .t.f.    focus -
1e9a0 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75  force .t.f.    u
1e9b0 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20  pdate.    set x 
1e9c0 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20  {}.} -body {.   
1e9d0 20 62 69 6e 64 20 2e 74 2e 66 20 3c 55 6e 6d 61   bind .t.f <Unma
1e9e0 70 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25 57  p> "lappend x %W
1e9f0 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  ".    event gene
1ea00 72 61 74 65 20 2e 74 2e 66 20 3c 55 6e 6d 61 70  rate .t.f <Unmap
1ea10 3e 20 2d 77 69 6e 64 6f 77 20 5b 77 69 6e 66 6f  > -window [winfo
1ea20 20 69 64 20 2e 74 2e 66 5d 20 0a 20 20 20 20 72   id .t.f] .    r
1ea30 65 74 75 72 6e 20 24 78 0a 7d 20 2d 63 6c 65 61  eturn $x.} -clea
1ea40 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f  nup {.    destro
1ea50 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74  y .t.f.} -result
1ea60 20 7b 2e 74 2e 66 7d 0a 0a 74 65 73 74 20 62 69   {.t.f}..test bi
1ea70 6e 64 2d 32 32 2e 31 33 32 20 7b 48 61 6e 64 6c  nd-22.132 {Handl
1ea80 65 45 76 65 6e 74 47 65 6e 65 72 61 74 65 3a 20  eEventGenerate: 
1ea90 6f 70 74 69 6f 6e 73 20 3c 55 6e 6d 61 70 3e 20  options <Unmap> 
1eaa0 2d 77 69 6e 64 6f 77 20 2e 74 2e 66 7d 20 2d 73  -window .t.f} -s
1eab0 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65  etup {.    frame
1eac0 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73   .t.f -class Tes
1ead0 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65  t -width 150 -he
1eae0 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63  ight 100.    pac
1eaf0 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73  k .t.f.    focus
1eb00 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20   -force .t.f.   
1eb10 20 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20   update.    set 
1eb20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20  x {}.} -body {. 
1eb30 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 55 6e     bind .t.f <Un
1eb40 6d 61 70 3e 20 22 6c 61 70 70 65 6e 64 20 78 20  map> "lappend x 
1eb50 25 57 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65  %W".    event ge
1eb60 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 55 6e 6d  nerate .t.f <Unm
1eb70 61 70 3e 20 2d 77 69 6e 64 6f 77 20 2e 74 2e 66  ap> -window .t.f
1eb80 20 0a 20 20 20 20 72 65 74 75 72 6e 20 24 78 0a   .    return $x.
1eb90 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20  } -cleanup {.   
1eba0 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20   destroy .t.f.} 
1ebb0 2d 72 65 73 75 6c 74 20 7b 2e 74 2e 66 7d 0a 0a  -result {.t.f}..
1ebc0 74 65 73 74 20 62 69 6e 64 2d 32 32 2e 31 33 33  test bind-22.133
1ebd0 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e   {HandleEventGen
1ebe0 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c  erate: options <
1ebf0 4d 61 70 3e 20 2d 77 69 6e 64 6f 77 20 2e 74 2e  Map> -window .t.
1ec00 66 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20  f} -setup {.    
1ec10 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73  frame .t.f -clas
1ec20 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35  s Test -width 15
1ec30 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20  0 -height 100.  
1ec40 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20    pack .t.f.    
1ec50 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e  focus -force .t.
1ec60 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20 20  f.    update.   
1ec70 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64   set x {}.} -bod
1ec80 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  y {.    bind .t.
1ec90 66 20 3c 4d 61 70 3e 20 22 6c 61 70 70 65 6e 64  f <Map> "lappend
1eca0 20 78 20 25 57 22 0a 20 20 20 20 65 76 65 6e 74   x %W".    event
1ecb0 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
1ecc0 4d 61 70 3e 20 2d 77 69 6e 64 6f 77 20 2e 74 2e  Map> -window .t.
1ecd0 66 20 0a 20 20 20 20 72 65 74 75 72 6e 20 24 78  f .    return $x
1ece0 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
1ecf0 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d    destroy .t.f.}
1ed00 20 2d 72 65 73 75 6c 74 20 7b 2e 74 2e 66 7d 0a   -result {.t.f}.
1ed10 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e 31 33  .test bind-22.13
1ed20 34 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47 65  4 {HandleEventGe
1ed30 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20  nerate: options 
1ed40 3c 52 65 70 61 72 65 6e 74 3e 20 2d 77 69 6e 64  <Reparent> -wind
1ed50 6f 77 20 2e 74 2e 66 7d 20 2d 73 65 74 75 70 20  ow .t.f} -setup 
1ed60 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66  {.    frame .t.f
1ed70 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69   -class Test -wi
1ed80 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20  dth 150 -height 
1ed90 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e  100.    pack .t.
1eda0 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72  f.    focus -for
1edb0 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61  ce .t.f.    upda
1edc0 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a  te.    set x {}.
1edd0 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
1ede0 6e 64 20 2e 74 2e 66 20 3c 52 65 70 61 72 65 6e  nd .t.f <Reparen
1edf0 74 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25 57  t> "lappend x %W
1ee00 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  ".    event gene
1ee10 72 61 74 65 20 2e 74 2e 66 20 3c 52 65 70 61 72  rate .t.f <Repar
1ee20 65 6e 74 3e 20 2d 77 69 6e 64 6f 77 20 2e 74 2e  ent> -window .t.
1ee30 66 20 0a 20 20 20 20 72 65 74 75 72 6e 20 24 78  f .    return $x
1ee40 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
1ee50 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d    destroy .t.f.}
1ee60 20 2d 72 65 73 75 6c 74 20 7b 2e 74 2e 66 7d 0a   -result {.t.f}.
1ee70 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e 31 33  .test bind-22.13
1ee80 35 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47 65  5 {HandleEventGe
1ee90 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20  nerate: options 
1eea0 3c 43 6f 6e 66 69 67 75 72 65 3e 20 2d 77 69 6e  <Configure> -win
1eeb0 64 6f 77 20 2e 74 2e 66 7d 20 2d 73 65 74 75 70  dow .t.f} -setup
1eec0 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e   {.    frame .t.
1eed0 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77  f -class Test -w
1eee0 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74  idth 150 -height
1eef0 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74   100.    pack .t
1ef00 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f  .f.    focus -fo
1ef10 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64  rce .t.f.    upd
1ef20 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d  ate.    set x {}
1ef30 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62  .} -body {.    b
1ef40 69 6e 64 20 2e 74 2e 66 20 3c 43 6f 6e 66 69 67  ind .t.f <Config
1ef50 75 72 65 3e 20 22 6c 61 70 70 65 6e 64 20 78 20  ure> "lappend x 
1ef60 25 57 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65  %W".    event ge
1ef70 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 43 6f 6e  nerate .t.f <Con
1ef80 66 69 67 75 72 65 3e 20 2d 77 69 6e 64 6f 77 20  figure> -window 
1ef90 2e 74 2e 66 20 0a 20 20 20 20 72 65 74 75 72 6e  .t.f .    return
1efa0 20 24 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b   $x.} -cleanup {
1efb0 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e  .    destroy .t.
1efc0 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 2e 74 2e  f.} -result {.t.
1efd0 66 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 32  f}..test bind-22
1efe0 2e 31 33 36 20 7b 48 61 6e 64 6c 65 45 76 65 6e  .136 {HandleEven
1eff0 74 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f  tGenerate: optio
1f000 6e 73 20 3c 47 72 61 76 69 74 79 3e 20 2d 77 69  ns <Gravity> -wi
1f010 6e 64 6f 77 20 2e 74 2e 66 7d 20 2d 73 65 74 75  ndow .t.f} -setu
1f020 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74  p {.    frame .t
1f030 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d  .f -class Test -
1f040 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68  width 150 -heigh
1f050 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e  t 100.    pack .
1f060 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66  t.f.    focus -f
1f070 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70  orce .t.f.    up
1f080 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b  date.    set x {
1f090 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  }.} -body {.    
1f0a0 62 69 6e 64 20 2e 74 2e 66 20 3c 47 72 61 76 69  bind .t.f <Gravi
1f0b0 74 79 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25  ty> "lappend x %
1f0c0 57 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e  W".    event gen
1f0d0 65 72 61 74 65 20 2e 74 2e 66 20 3c 47 72 61 76  erate .t.f <Grav
1f0e0 69 74 79 3e 20 2d 77 69 6e 64 6f 77 20 2e 74 2e  ity> -window .t.
1f0f0 66 20 0a 20 20 20 20 72 65 74 75 72 6e 20 24 78  f .    return $x
1f100 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
1f110 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d    destroy .t.f.}
1f120 20 2d 72 65 73 75 6c 74 20 7b 2e 74 2e 66 7d 0a   -result {.t.f}.
1f130 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e 31 33  .test bind-22.13
1f140 37 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47 65  7 {HandleEventGe
1f150 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20  nerate: options 
1f160 3c 43 69 72 63 75 6c 61 74 65 3e 20 2d 77 69 6e  <Circulate> -win
1f170 64 6f 77 20 2e 74 2e 66 7d 20 2d 73 65 74 75 70  dow .t.f} -setup
1f180 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e   {.    frame .t.
1f190 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77  f -class Test -w
1f1a0 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74  idth 150 -height
1f1b0 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74   100.    pack .t
1f1c0 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f  .f.    focus -fo
1f1d0 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64  rce .t.f.    upd
1f1e0 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d  ate.    set x {}
1f1f0 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62  .} -body {.    b
1f200 69 6e 64 20 2e 74 2e 66 20 3c 43 69 72 63 75 6c  ind .t.f <Circul
1f210 61 74 65 3e 20 22 6c 61 70 70 65 6e 64 20 78 20  ate> "lappend x 
1f220 25 57 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65  %W".    event ge
1f230 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 43 69 72  nerate .t.f <Cir
1f240 63 75 6c 61 74 65 3e 20 2d 77 69 6e 64 6f 77 20  culate> -window 
1f250 2e 74 2e 66 20 0a 20 20 20 20 72 65 74 75 72 6e  .t.f .    return
1f260 20 24 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b   $x.} -cleanup {
1f270 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e  .    destroy .t.
1f280 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 2e 74 2e  f.} -result {.t.
1f290 66 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 32  f}..test bind-22
1f2a0 2e 31 33 38 20 7b 48 61 6e 64 6c 65 45 76 65 6e  .138 {HandleEven
1f2b0 74 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f  tGenerate: optio
1f2c0 6e 73 20 3c 4b 65 79 3e 20 2d 77 69 6e 64 6f 77  ns <Key> -window
1f2d0 20 2e 74 2e 66 7d 20 2d 73 65 74 75 70 20 7b 0a   .t.f} -setup {.
1f2e0 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d      frame .t.f -
1f2f0 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74  class Test -widt
1f300 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30  h 150 -height 10
1f310 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a  0.    pack .t.f.
1f320 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65      focus -force
1f330 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65   .t.f.    update
1f340 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20  .    set x {}.} 
1f350 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64  -body {.    bind
1f360 20 2e 74 2e 66 20 3c 4b 65 79 3e 20 22 6c 61 70   .t.f <Key> "lap
1f370 70 65 6e 64 20 78 20 25 57 22 0a 20 20 20 20 65  pend x %W".    e
1f380 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
1f390 2e 66 20 3c 4b 65 79 3e 20 2d 77 69 6e 64 6f 77  .f <Key> -window
1f3a0 20 2e 74 2e 66 20 0a 7d 20 2d 63 6c 65 61 6e 75   .t.f .} -cleanu
1f3b0 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20  p {.    destroy 
1f3c0 2e 74 2e 66 0a 7d 20 2d 72 65 74 75 72 6e 43 6f  .t.f.} -returnCo
1f3d0 64 65 73 20 65 72 72 6f 72 20 2d 72 65 73 75 6c  des error -resul
1f3e0 74 20 7b 3c 4b 65 79 3e 20 65 76 65 6e 74 20 64  t {<Key> event d
1f3f0 6f 65 73 6e 27 74 20 61 63 63 65 70 74 20 22 2d  oesn't accept "-
1f400 77 69 6e 64 6f 77 22 20 6f 70 74 69 6f 6e 7d 0a  window" option}.
1f410 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e 31 33  .test bind-22.13
1f420 39 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47 65  9 {HandleEventGe
1f430 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20  nerate: options 
1f440 3c 4b 65 79 3e 20 2d 78 20 78 79 7a 7d 20 2d 73  <Key> -x xyz} -s
1f450 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65  etup {.    frame
1f460 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73   .t.f -class Tes
1f470 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65  t -width 150 -he
1f480 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63  ight 100.    pac
1f490 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73  k .t.f.    focus
1f4a0 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20   -force .t.f.   
1f4b0 20 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20   update.    set 
1f4c0 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20  x {}.} -body {. 
1f4d0 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 4b 65     bind .t.f <Ke
1f4e0 79 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25 78  y> "lappend x %x
1f4f0 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  ".    event gene
1f500 72 61 74 65 20 2e 74 2e 66 20 3c 4b 65 79 3e 20  rate .t.f <Key> 
1f510 2d 78 20 78 79 7a 20 0a 7d 20 2d 63 6c 65 61 6e  -x xyz .} -clean
1f520 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79  up {.    destroy
1f530 20 2e 74 2e 66 0a 7d 20 2d 72 65 74 75 72 6e 43   .t.f.} -returnC
1f540 6f 64 65 73 20 65 72 72 6f 72 20 2d 72 65 73 75  odes error -resu
1f550 6c 74 20 7b 62 61 64 20 73 63 72 65 65 6e 20 64  lt {bad screen d
1f560 69 73 74 61 6e 63 65 20 22 78 79 7a 22 7d 0a 0a  istance "xyz"}..
1f570 74 65 73 74 20 62 69 6e 64 2d 32 32 2e 31 34 30  test bind-22.140
1f580 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e   {HandleEventGen
1f590 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c  erate: options <
1f5a0 4b 65 79 3e 20 2d 78 20 32 69 7d 20 2d 73 65 74  Key> -x 2i} -set
1f5b0 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e  up {.    frame .
1f5c0 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20  t.f -class Test 
1f5d0 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67  -width 150 -heig
1f5e0 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20  ht 100.    pack 
1f5f0 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d  .t.f.    focus -
1f600 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75  force .t.f.    u
1f610 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20  pdate.    set x 
1f620 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20  {}.} -body {.   
1f630 20 62 69 6e 64 20 2e 74 2e 66 20 3c 4b 65 79 3e   bind .t.f <Key>
1f640 20 22 6c 61 70 70 65 6e 64 20 78 20 25 78 22 0a   "lappend x %x".
1f650 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
1f660 74 65 20 2e 74 2e 66 20 3c 4b 65 79 3e 20 2d 78  te .t.f <Key> -x
1f670 20 32 69 20 0a 20 20 20 20 65 78 70 72 20 7b 5b   2i .    expr {[
1f680 77 69 6e 66 6f 20 70 69 78 65 6c 73 20 2e 74 2e  winfo pixels .t.
1f690 66 20 32 69 5d 20 65 71 20 24 78 7d 0a 7d 20 2d  f 2i] eq $x}.} -
1f6a0 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
1f6b0 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
1f6c0 73 75 6c 74 20 7b 31 7d 0a 0a 74 65 73 74 20 62  sult {1}..test b
1f6d0 69 6e 64 2d 32 32 2e 31 34 31 20 7b 48 61 6e 64  ind-22.141 {Hand
1f6e0 6c 65 45 76 65 6e 74 47 65 6e 65 72 61 74 65 3a  leEventGenerate:
1f6f0 20 6f 70 74 69 6f 6e 73 20 3c 42 75 74 74 6f 6e   options <Button
1f700 3e 20 2d 78 20 32 69 7d 20 2d 73 65 74 75 70 20  > -x 2i} -setup 
1f710 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66  {.    frame .t.f
1f720 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69   -class Test -wi
1f730 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20  dth 150 -height 
1f740 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e  100.    pack .t.
1f750 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72  f.    focus -for
1f760 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61  ce .t.f.    upda
1f770 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a  te.    set x {}.
1f780 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
1f790 6e 64 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 3e  nd .t.f <Button>
1f7a0 20 22 6c 61 70 70 65 6e 64 20 78 20 25 78 22 0a   "lappend x %x".
1f7b0 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
1f7c0 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 3e  te .t.f <Button>
1f7d0 20 2d 78 20 32 69 20 0a 20 20 20 20 65 78 70 72   -x 2i .    expr
1f7e0 20 7b 5b 77 69 6e 66 6f 20 70 69 78 65 6c 73 20   {[winfo pixels 
1f7f0 2e 74 2e 66 20 32 69 5d 20 65 71 20 24 78 7d 0a  .t.f 2i] eq $x}.
1f800 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20  } -cleanup {.   
1f810 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20   destroy .t.f.} 
1f820 2d 72 65 73 75 6c 74 20 7b 31 7d 0a 0a 74 65 73  -result {1}..tes
1f830 74 20 62 69 6e 64 2d 32 32 2e 31 34 32 20 7b 48  t bind-22.142 {H
1f840 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61  andleEventGenera
1f850 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 42 75 74  te: options <But
1f860 74 6f 6e 52 65 6c 65 61 73 65 3e 20 2d 78 20 32  tonRelease> -x 2
1f870 69 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20  i} -setup {.    
1f880 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73  frame .t.f -clas
1f890 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35  s Test -width 15
1f8a0 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20  0 -height 100.  
1f8b0 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20    pack .t.f.    
1f8c0 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e  focus -force .t.
1f8d0 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20 20  f.    update.   
1f8e0 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64   set x {}.} -bod
1f8f0 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  y {.    bind .t.
1f900 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73 65  f <ButtonRelease
1f910 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25 78 22  > "lappend x %x"
1f920 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
1f930 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e  ate .t.f <Button
1f940 52 65 6c 65 61 73 65 3e 20 2d 78 20 32 69 20 0a  Release> -x 2i .
1f950 20 20 20 20 65 78 70 72 20 7b 5b 77 69 6e 66 6f      expr {[winfo
1f960 20 70 69 78 65 6c 73 20 2e 74 2e 66 20 32 69 5d   pixels .t.f 2i]
1f970 20 65 71 20 24 78 7d 0a 7d 20 2d 63 6c 65 61 6e   eq $x}.} -clean
1f980 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79  up {.    destroy
1f990 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20   .t.f.} -result 
1f9a0 7b 31 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32  {1}..test bind-2
1f9b0 32 2e 31 34 33 20 7b 48 61 6e 64 6c 65 45 76 65  2.143 {HandleEve
1f9c0 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69  ntGenerate: opti
1f9d0 6f 6e 73 20 3c 4d 6f 74 69 6f 6e 3e 20 2d 78 20  ons <Motion> -x 
1f9e0 32 69 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20  2i} -setup {.   
1f9f0 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61   frame .t.f -cla
1fa00 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
1fa10 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20  50 -height 100. 
1fa20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20     pack .t.f.   
1fa30 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74   focus -force .t
1fa40 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20  .f.    update.  
1fa50 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f    set x {}.} -bo
1fa60 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74  dy {.    bind .t
1fa70 2e 66 20 3c 4d 6f 74 69 6f 6e 3e 20 22 6c 61 70  .f <Motion> "lap
1fa80 70 65 6e 64 20 78 20 25 78 22 0a 20 20 20 20 65  pend x %x".    e
1fa90 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
1faa0 2e 66 20 3c 4d 6f 74 69 6f 6e 3e 20 2d 78 20 32  .f <Motion> -x 2
1fab0 69 20 0a 20 20 20 20 65 78 70 72 20 7b 5b 77 69  i .    expr {[wi
1fac0 6e 66 6f 20 70 69 78 65 6c 73 20 2e 74 2e 66 20  nfo pixels .t.f 
1fad0 32 69 5d 20 65 71 20 24 78 7d 0a 7d 20 2d 63 6c  2i] eq $x}.} -cl
1fae0 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74  eanup {.    dest
1faf0 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75  roy .t.f.} -resu
1fb00 6c 74 20 7b 31 7d 0a 0a 74 65 73 74 20 62 69 6e  lt {1}..test bin
1fb10 64 2d 32 32 2e 31 34 34 20 7b 48 61 6e 64 6c 65  d-22.144 {Handle
1fb20 45 76 65 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f  EventGenerate: o
1fb30 70 74 69 6f 6e 73 20 3c 3c 50 61 73 74 65 3e 3e  ptions <<Paste>>
1fb40 20 2d 78 20 32 69 7d 20 2d 73 65 74 75 70 20 7b   -x 2i} -setup {
1fb50 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
1fb60 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
1fb70 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
1fb80 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
1fb90 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
1fba0 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
1fbb0 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d  e.    set x {}.}
1fbc0 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
1fbd0 64 20 2e 74 2e 66 20 3c 3c 50 61 73 74 65 3e 3e  d .t.f <<Paste>>
1fbe0 20 22 6c 61 70 70 65 6e 64 20 78 20 25 78 22 0a   "lappend x %x".
1fbf0 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
1fc00 74 65 20 2e 74 2e 66 20 3c 3c 50 61 73 74 65 3e  te .t.f <<Paste>
1fc10 3e 20 2d 78 20 32 69 20 0a 20 20 20 20 65 78 70  > -x 2i .    exp
1fc20 72 20 7b 5b 77 69 6e 66 6f 20 70 69 78 65 6c 73  r {[winfo pixels
1fc30 20 2e 74 2e 66 20 32 69 5d 20 65 71 20 24 78 7d   .t.f 2i] eq $x}
1fc40 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
1fc50 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d    destroy .t.f.}
1fc60 20 2d 72 65 73 75 6c 74 20 7b 31 7d 0a 0a 74 65   -result {1}..te
1fc70 73 74 20 62 69 6e 64 2d 32 32 2e 31 34 35 20 7b  st bind-22.145 {
1fc80 48 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72  HandleEventGener
1fc90 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 45 6e  ate: options <En
1fca0 74 65 72 3e 20 2d 78 20 32 69 7d 20 2d 73 65 74  ter> -x 2i} -set
1fcb0 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e  up {.    frame .
1fcc0 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20  t.f -class Test 
1fcd0 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67  -width 150 -heig
1fce0 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20  ht 100.    pack 
1fcf0 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d  .t.f.    focus -
1fd00 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75  force .t.f.    u
1fd10 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20  pdate.    set x 
1fd20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20  {}.} -body {.   
1fd30 20 62 69 6e 64 20 2e 74 2e 66 20 3c 45 6e 74 65   bind .t.f <Ente
1fd40 72 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25 78  r> "lappend x %x
1fd50 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  ".    event gene
1fd60 72 61 74 65 20 2e 74 2e 66 20 3c 45 6e 74 65 72  rate .t.f <Enter
1fd70 3e 20 2d 78 20 32 69 20 0a 20 20 20 20 65 78 70  > -x 2i .    exp
1fd80 72 20 7b 5b 77 69 6e 66 6f 20 70 69 78 65 6c 73  r {[winfo pixels
1fd90 20 2e 74 2e 66 20 32 69 5d 20 65 71 20 24 78 7d   .t.f 2i] eq $x}
1fda0 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
1fdb0 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d    destroy .t.f.}
1fdc0 20 2d 72 65 73 75 6c 74 20 7b 31 7d 0a 0a 74 65   -result {1}..te
1fdd0 73 74 20 62 69 6e 64 2d 32 32 2e 31 34 36 20 7b  st bind-22.146 {
1fde0 48 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72  HandleEventGener
1fdf0 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 45 78  ate: options <Ex
1fe00 70 6f 73 65 3e 20 2d 78 20 32 69 7d 20 2d 73 65  pose> -x 2i} -se
1fe10 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20  tup {.    frame 
1fe20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74  .t.f -class Test
1fe30 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69   -width 150 -hei
1fe40 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b  ght 100.    pack
1fe50 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20   .t.f.    focus 
1fe60 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20  -force .t.f.    
1fe70 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78  update.    set x
1fe80 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20   {}.} -body {.  
1fe90 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 45 78 70    bind .t.f <Exp
1fea0 6f 73 65 3e 20 22 6c 61 70 70 65 6e 64 20 78 20  ose> "lappend x 
1feb0 25 78 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65  %x".    event ge
1fec0 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 45 78 70  nerate .t.f <Exp
1fed0 6f 73 65 3e 20 2d 78 20 32 69 20 0a 20 20 20 20  ose> -x 2i .    
1fee0 65 78 70 72 20 7b 5b 77 69 6e 66 6f 20 70 69 78  expr {[winfo pix
1fef0 65 6c 73 20 2e 74 2e 66 20 32 69 5d 20 65 71 20  els .t.f 2i] eq 
1ff00 24 78 7d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  $x}.} -cleanup {
1ff10 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e  .    destroy .t.
1ff20 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 31 7d 0a  f.} -result {1}.
1ff30 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e 31 34  .test bind-22.14
1ff40 37 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47 65  7 {HandleEventGe
1ff50 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20  nerate: options 
1ff60 3c 43 6f 6e 66 69 67 75 72 65 3e 20 2d 78 20 32  <Configure> -x 2
1ff70 69 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20  i} -setup {.    
1ff80 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73  frame .t.f -clas
1ff90 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35  s Test -width 15
1ffa0 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20  0 -height 100.  
1ffb0 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20    pack .t.f.    
1ffc0 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e  focus -force .t.
1ffd0 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20 20  f.    update.   
1ffe0 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64   set x {}.} -bod
1fff0 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  y {.    bind .t.
20000 66 20 3c 43 6f 6e 66 69 67 75 72 65 3e 20 22 6c  f <Configure> "l
20010 61 70 70 65 6e 64 20 78 20 25 78 22 0a 20 20 20  append x %x".   
20020 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
20030 2e 74 2e 66 20 3c 43 6f 6e 66 69 67 75 72 65 3e  .t.f <Configure>
20040 20 2d 78 20 32 69 20 0a 20 20 20 20 65 78 70 72   -x 2i .    expr
20050 20 7b 5b 77 69 6e 66 6f 20 70 69 78 65 6c 73 20   {[winfo pixels 
20060 2e 74 2e 66 20 32 69 5d 20 65 71 20 24 78 7d 0a  .t.f 2i] eq $x}.
20070 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20  } -cleanup {.   
20080 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20   destroy .t.f.} 
20090 2d 72 65 73 75 6c 74 20 7b 31 7d 0a 0a 74 65 73  -result {1}..tes
200a0 74 20 62 69 6e 64 2d 32 32 2e 31 34 38 20 7b 48  t bind-22.148 {H
200b0 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61  andleEventGenera
200c0 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 47 72 61  te: options <Gra
200d0 76 69 74 79 3e 20 2d 78 20 32 69 7d 20 2d 73 65  vity> -x 2i} -se
200e0 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20  tup {.    frame 
200f0 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74  .t.f -class Test
20100 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69   -width 150 -hei
20110 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b  ght 100.    pack
20120 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20   .t.f.    focus 
20130 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20  -force .t.f.    
20140 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78  update.    set x
20150 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20   {}.} -body {.  
20160 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 47 72 61    bind .t.f <Gra
20170 76 69 74 79 3e 20 22 6c 61 70 70 65 6e 64 20 78  vity> "lappend x
20180 20 25 78 22 0a 20 20 20 20 65 76 65 6e 74 20 67   %x".    event g
20190 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 47 72  enerate .t.f <Gr
201a0 61 76 69 74 79 3e 20 2d 78 20 32 69 20 0a 20 20  avity> -x 2i .  
201b0 20 20 65 78 70 72 20 7b 5b 77 69 6e 66 6f 20 70    expr {[winfo p
201c0 69 78 65 6c 73 20 2e 74 2e 66 20 32 69 5d 20 65  ixels .t.f 2i] e
201d0 71 20 24 78 7d 0a 7d 20 2d 63 6c 65 61 6e 75 70  q $x}.} -cleanup
201e0 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
201f0 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 31  t.f.} -result {1
20200 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e  }..test bind-22.
20210 31 34 39 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74  149 {HandleEvent
20220 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e  Generate: option
20230 73 20 3c 52 65 70 61 72 65 6e 74 3e 20 2d 78 20  s <Reparent> -x 
20240 32 69 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20  2i} -setup {.   
20250 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61   frame .t.f -cla
20260 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
20270 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20  50 -height 100. 
20280 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20     pack .t.f.   
20290 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74   focus -force .t
202a0 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20  .f.    update.  
202b0 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f    set x {}.} -bo
202c0 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74  dy {.    bind .t
202d0 2e 66 20 3c 52 65 70 61 72 65 6e 74 3e 20 22 6c  .f <Reparent> "l
202e0 61 70 70 65 6e 64 20 78 20 25 78 22 0a 20 20 20  append x %x".   
202f0 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
20300 2e 74 2e 66 20 3c 52 65 70 61 72 65 6e 74 3e 20  .t.f <Reparent> 
20310 2d 78 20 32 69 20 0a 20 20 20 20 65 78 70 72 20  -x 2i .    expr 
20320 7b 5b 77 69 6e 66 6f 20 70 69 78 65 6c 73 20 2e  {[winfo pixels .
20330 74 2e 66 20 32 69 5d 20 65 71 20 24 78 7d 0a 7d  t.f 2i] eq $x}.}
20340 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
20350 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d  destroy .t.f.} -
20360 72 65 73 75 6c 74 20 7b 31 7d 0a 0a 74 65 73 74  result {1}..test
20370 20 62 69 6e 64 2d 32 32 2e 31 35 30 20 7b 48 61   bind-22.150 {Ha
20380 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61 74  ndleEventGenerat
20390 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 4d 61 70 3e  e: options <Map>
203a0 20 2d 78 20 32 69 7d 20 2d 73 65 74 75 70 20 7b   -x 2i} -setup {
203b0 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
203c0 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
203d0 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
203e0 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
203f0 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
20400 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
20410 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d  e.    set x {}.}
20420 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
20430 64 20 2e 74 2e 66 20 3c 4d 61 70 3e 20 22 6c 61  d .t.f <Map> "la
20440 70 70 65 6e 64 20 78 20 25 78 22 0a 20 20 20 20  ppend x %x".    
20450 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
20460 74 2e 66 20 3c 4d 61 70 3e 20 2d 78 20 32 69 20  t.f <Map> -x 2i 
20470 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
20480 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d    destroy .t.f.}
20490 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65 72   -returnCodes er
204a0 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 3c 4d 61  ror -result {<Ma
204b0 70 3e 20 65 76 65 6e 74 20 64 6f 65 73 6e 27 74  p> event doesn't
204c0 20 61 63 63 65 70 74 20 22 2d 78 22 20 6f 70 74   accept "-x" opt
204d0 69 6f 6e 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d  ion}..test bind-
204e0 32 32 2e 31 35 31 20 7b 48 61 6e 64 6c 65 45 76  22.151 {HandleEv
204f0 65 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f 70 74  entGenerate: opt
20500 69 6f 6e 73 20 3c 4b 65 79 3e 20 2d 79 20 78 79  ions <Key> -y xy
20510 7a 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20  z} -setup {.    
20520 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73  frame .t.f -clas
20530 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35  s Test -width 15
20540 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20  0 -height 100.  
20550 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20    pack .t.f.    
20560 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e  focus -force .t.
20570 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20 20  f.    update.   
20580 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64   set x {}.} -bod
20590 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  y {.    bind .t.
205a0 66 20 3c 4b 65 79 3e 20 22 6c 61 70 70 65 6e 64  f <Key> "lappend
205b0 20 78 20 25 79 22 0a 20 20 20 20 65 76 65 6e 74   x %y".    event
205c0 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
205d0 4b 65 79 3e 20 2d 79 20 78 79 7a 20 0a 7d 20 2d  Key> -y xyz .} -
205e0 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
205f0 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
20600 74 75 72 6e 43 6f 64 65 73 20 65 72 72 6f 72 20  turnCodes error 
20610 2d 72 65 73 75 6c 74 20 7b 62 61 64 20 73 63 72  -result {bad scr
20620 65 65 6e 20 64 69 73 74 61 6e 63 65 20 22 78 79  een distance "xy
20630 7a 22 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32  z"}..test bind-2
20640 32 2e 31 35 32 20 7b 48 61 6e 64 6c 65 45 76 65  2.152 {HandleEve
20650 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69  ntGenerate: opti
20660 6f 6e 73 20 3c 4b 65 79 3e 20 2d 79 20 32 69 7d  ons <Key> -y 2i}
20670 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72   -setup {.    fr
20680 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20  ame .t.f -class 
20690 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20  Test -width 150 
206a0 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20  -height 100.    
206b0 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f  pack .t.f.    fo
206c0 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a  cus -force .t.f.
206d0 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73      update.    s
206e0 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20  et x {}.} -body 
206f0 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20  {.    bind .t.f 
20700 3c 4b 65 79 3e 20 22 6c 61 70 70 65 6e 64 20 78  <Key> "lappend x
20710 20 25 79 22 0a 20 20 20 20 65 76 65 6e 74 20 67   %y".    event g
20720 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 4b 65  enerate .t.f <Ke
20730 79 3e 20 2d 79 20 32 69 20 0a 20 20 20 20 65 78  y> -y 2i .    ex
20740 70 72 20 7b 5b 77 69 6e 66 6f 20 70 69 78 65 6c  pr {[winfo pixel
20750 73 20 2e 74 2e 66 20 32 69 5d 20 65 71 20 24 78  s .t.f 2i] eq $x
20760 7d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  }.} -cleanup {. 
20770 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
20780 7d 20 2d 72 65 73 75 6c 74 20 7b 31 7d 0a 0a 74  } -result {1}..t
20790 65 73 74 20 62 69 6e 64 2d 32 32 2e 31 35 33 20  est bind-22.153 
207a0 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65  {HandleEventGene
207b0 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 42  rate: options <B
207c0 75 74 74 6f 6e 3e 20 2d 79 20 32 69 7d 20 2d 73  utton> -y 2i} -s
207d0 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65  etup {.    frame
207e0 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73   .t.f -class Tes
207f0 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65  t -width 150 -he
20800 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63  ight 100.    pac
20810 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73  k .t.f.    focus
20820 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20   -force .t.f.   
20830 20 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20   update.    set 
20840 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20  x {}.} -body {. 
20850 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 42 75     bind .t.f <Bu
20860 74 74 6f 6e 3e 20 22 6c 61 70 70 65 6e 64 20 78  tton> "lappend x
20870 20 25 79 22 0a 20 20 20 20 65 76 65 6e 74 20 67   %y".    event g
20880 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75  enerate .t.f <Bu
20890 74 74 6f 6e 3e 20 2d 79 20 32 69 20 0a 20 20 20  tton> -y 2i .   
208a0 20 65 78 70 72 20 7b 5b 77 69 6e 66 6f 20 70 69   expr {[winfo pi
208b0 78 65 6c 73 20 2e 74 2e 66 20 32 69 5d 20 65 71  xels .t.f 2i] eq
208c0 20 24 78 7d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20   $x}.} -cleanup 
208d0 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74  {.    destroy .t
208e0 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 31 7d  .f.} -result {1}
208f0 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e 31  ..test bind-22.1
20900 35 34 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47  54 {HandleEventG
20910 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73  enerate: options
20920 20 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 3e   <ButtonRelease>
20930 20 2d 79 20 32 69 7d 20 2d 73 65 74 75 70 20 7b   -y 2i} -setup {
20940 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
20950 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
20960 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
20970 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
20980 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
20990 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
209a0 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d  e.    set x {}.}
209b0 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
209c0 64 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65  d .t.f <ButtonRe
209d0 6c 65 61 73 65 3e 20 22 6c 61 70 70 65 6e 64 20  lease> "lappend 
209e0 78 20 25 79 22 0a 20 20 20 20 65 76 65 6e 74 20  x %y".    event 
209f0 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42  generate .t.f <B
20a00 75 74 74 6f 6e 52 65 6c 65 61 73 65 3e 20 2d 79  uttonRelease> -y
20a10 20 32 69 20 0a 20 20 20 20 65 78 70 72 20 7b 5b   2i .    expr {[
20a20 77 69 6e 66 6f 20 70 69 78 65 6c 73 20 2e 74 2e  winfo pixels .t.
20a30 66 20 32 69 5d 20 65 71 20 24 78 7d 0a 7d 20 2d  f 2i] eq $x}.} -
20a40 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
20a50 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
20a60 73 75 6c 74 20 7b 31 7d 0a 0a 74 65 73 74 20 62  sult {1}..test b
20a70 69 6e 64 2d 32 32 2e 31 35 35 20 7b 48 61 6e 64  ind-22.155 {Hand
20a80 6c 65 45 76 65 6e 74 47 65 6e 65 72 61 74 65 3a  leEventGenerate:
20a90 20 6f 70 74 69 6f 6e 73 20 3c 4d 6f 74 69 6f 6e   options <Motion
20aa0 3e 20 2d 79 20 32 69 7d 20 2d 73 65 74 75 70 20  > -y 2i} -setup 
20ab0 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66  {.    frame .t.f
20ac0 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69   -class Test -wi
20ad0 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20  dth 150 -height 
20ae0 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e  100.    pack .t.
20af0 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72  f.    focus -for
20b00 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61  ce .t.f.    upda
20b10 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a  te.    set x {}.
20b20 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
20b30 6e 64 20 2e 74 2e 66 20 3c 4d 6f 74 69 6f 6e 3e  nd .t.f <Motion>
20b40 20 22 6c 61 70 70 65 6e 64 20 78 20 25 79 22 0a   "lappend x %y".
20b50 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
20b60 74 65 20 2e 74 2e 66 20 3c 4d 6f 74 69 6f 6e 3e  te .t.f <Motion>
20b70 20 2d 79 20 32 69 20 0a 20 20 20 20 65 78 70 72   -y 2i .    expr
20b80 20 7b 5b 77 69 6e 66 6f 20 70 69 78 65 6c 73 20   {[winfo pixels 
20b90 2e 74 2e 66 20 32 69 5d 20 65 71 20 24 78 7d 0a  .t.f 2i] eq $x}.
20ba0 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20  } -cleanup {.   
20bb0 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20   destroy .t.f.} 
20bc0 2d 72 65 73 75 6c 74 20 7b 31 7d 0a 0a 74 65 73  -result {1}..tes
20bd0 74 20 62 69 6e 64 2d 32 32 2e 31 35 36 20 7b 48  t bind-22.156 {H
20be0 61 6e 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61  andleEventGenera
20bf0 74 65 3a 20 6f 70 74 69 6f 6e 73 20 3c 3c 50 61  te: options <<Pa
20c00 73 74 65 3e 3e 20 2d 79 20 32 69 7d 20 2d 73 65  ste>> -y 2i} -se
20c10 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20  tup {.    frame 
20c20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74  .t.f -class Test
20c30 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69   -width 150 -hei
20c40 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b  ght 100.    pack
20c50 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20   .t.f.    focus 
20c60 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20  -force .t.f.    
20c70 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78  update.    set x
20c80 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20   {}.} -body {.  
20c90 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 3c 50 61    bind .t.f <<Pa
20ca0 73 74 65 3e 3e 20 22 6c 61 70 70 65 6e 64 20 78  ste>> "lappend x
20cb0 20 25 79 22 0a 20 20 20 20 65 76 65 6e 74 20 67   %y".    event g
20cc0 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 3c 50  enerate .t.f <<P
20cd0 61 73 74 65 3e 3e 20 2d 79 20 32 69 20 0a 20 20  aste>> -y 2i .  
20ce0 20 20 65 78 70 72 20 7b 5b 77 69 6e 66 6f 20 70    expr {[winfo p
20cf0 69 78 65 6c 73 20 2e 74 2e 66 20 32 69 5d 20 65  ixels .t.f 2i] e
20d00 71 20 24 78 7d 0a 7d 20 2d 63 6c 65 61 6e 75 70  q $x}.} -cleanup
20d10 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
20d20 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 31  t.f.} -result {1
20d30 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e  }..test bind-22.
20d40 31 35 37 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74  157 {HandleEvent
20d50 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e  Generate: option
20d60 73 20 3c 45 6e 74 65 72 3e 20 2d 79 20 32 69 7d  s <Enter> -y 2i}
20d70 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72   -setup {.    fr
20d80 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20  ame .t.f -class 
20d90 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20  Test -width 150 
20da0 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20  -height 100.    
20db0 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f  pack .t.f.    fo
20dc0 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a  cus -force .t.f.
20dd0 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73      update.    s
20de0 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20  et x {}.} -body 
20df0 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20  {.    bind .t.f 
20e00 3c 45 6e 74 65 72 3e 20 22 6c 61 70 70 65 6e 64  <Enter> "lappend
20e10 20 78 20 25 79 22 0a 20 20 20 20 65 76 65 6e 74   x %y".    event
20e20 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
20e30 45 6e 74 65 72 3e 20 2d 79 20 32 69 20 0a 20 20  Enter> -y 2i .  
20e40 20 20 65 78 70 72 20 7b 5b 77 69 6e 66 6f 20 70    expr {[winfo p
20e50 69 78 65 6c 73 20 2e 74 2e 66 20 32 69 5d 20 65  ixels .t.f 2i] e
20e60 71 20 24 78 7d 0a 7d 20 2d 63 6c 65 61 6e 75 70  q $x}.} -cleanup
20e70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
20e80 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 31  t.f.} -result {1
20e90 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e  }..test bind-22.
20ea0 31 35 38 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74  158 {HandleEvent
20eb0 47 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e  Generate: option
20ec0 73 20 3c 45 78 70 6f 73 65 3e 20 2d 79 20 32 69  s <Expose> -y 2i
20ed0 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66  } -setup {.    f
20ee0 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73  rame .t.f -class
20ef0 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30   Test -width 150
20f00 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20   -height 100.   
20f10 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66   pack .t.f.    f
20f20 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66  ocus -force .t.f
20f30 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20  .    update.    
20f40 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79  set x {}.} -body
20f50 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66   {.    bind .t.f
20f60 20 3c 45 78 70 6f 73 65 3e 20 22 6c 61 70 70 65   <Expose> "lappe
20f70 6e 64 20 78 20 25 79 22 0a 20 20 20 20 65 76 65  nd x %y".    eve
20f80 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
20f90 20 3c 45 78 70 6f 73 65 3e 20 2d 79 20 32 69 20   <Expose> -y 2i 
20fa0 0a 20 20 20 20 65 78 70 72 20 7b 5b 77 69 6e 66  .    expr {[winf
20fb0 6f 20 70 69 78 65 6c 73 20 2e 74 2e 66 20 32 69  o pixels .t.f 2i
20fc0 5d 20 65 71 20 24 78 7d 0a 7d 20 2d 63 6c 65 61  ] eq $x}.} -clea
20fd0 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f  nup {.    destro
20fe0 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74  y .t.f.} -result
20ff0 20 7b 31 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d   {1}..test bind-
21000 32 32 2e 31 35 39 20 7b 48 61 6e 64 6c 65 45 76  22.159 {HandleEv
21010 65 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f 70 74  entGenerate: opt
21020 69 6f 6e 73 20 3c 43 6f 6e 66 69 67 75 72 65 3e  ions <Configure>
21030 20 2d 79 20 32 69 7d 20 2d 73 65 74 75 70 20 7b   -y 2i} -setup {
21040 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
21050 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
21060 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
21070 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
21080 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
21090 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
210a0 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d  e.    set x {}.}
210b0 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
210c0 64 20 2e 74 2e 66 20 3c 43 6f 6e 66 69 67 75 72  d .t.f <Configur
210d0 65 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25 79  e> "lappend x %y
210e0 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  ".    event gene
210f0 72 61 74 65 20 2e 74 2e 66 20 3c 43 6f 6e 66 69  rate .t.f <Confi
21100 67 75 72 65 3e 20 2d 79 20 32 69 20 0a 20 20 20  gure> -y 2i .   
21110 20 65 78 70 72 20 7b 5b 77 69 6e 66 6f 20 70 69   expr {[winfo pi
21120 78 65 6c 73 20 2e 74 2e 66 20 32 69 5d 20 65 71  xels .t.f 2i] eq
21130 20 24 78 7d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20   $x}.} -cleanup 
21140 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74  {.    destroy .t
21150 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 31 7d  .f.} -result {1}
21160 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e 31  ..test bind-22.1
21170 36 30 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47  60 {HandleEventG
21180 65 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73  enerate: options
21190 20 3c 47 72 61 76 69 74 79 3e 20 2d 79 20 32 69   <Gravity> -y 2i
211a0 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66  } -setup {.    f
211b0 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73  rame .t.f -class
211c0 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30   Test -width 150
211d0 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20   -height 100.   
211e0 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66   pack .t.f.    f
211f0 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66  ocus -force .t.f
21200 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20  .    update.    
21210 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79  set x {}.} -body
21220 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66   {.    bind .t.f
21230 20 3c 47 72 61 76 69 74 79 3e 20 22 6c 61 70 70   <Gravity> "lapp
21240 65 6e 64 20 78 20 25 79 22 0a 20 20 20 20 65 76  end x %y".    ev
21250 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
21260 66 20 3c 47 72 61 76 69 74 79 3e 20 2d 79 20 32  f <Gravity> -y 2
21270 69 20 0a 20 20 20 20 65 78 70 72 20 7b 5b 77 69  i .    expr {[wi
21280 6e 66 6f 20 70 69 78 65 6c 73 20 2e 74 2e 66 20  nfo pixels .t.f 
21290 32 69 5d 20 65 71 20 24 78 7d 0a 7d 20 2d 63 6c  2i] eq $x}.} -cl
212a0 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74  eanup {.    dest
212b0 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75  roy .t.f.} -resu
212c0 6c 74 20 7b 31 7d 0a 0a 74 65 73 74 20 62 69 6e  lt {1}..test bin
212d0 64 2d 32 32 2e 31 36 31 20 7b 48 61 6e 64 6c 65  d-22.161 {Handle
212e0 45 76 65 6e 74 47 65 6e 65 72 61 74 65 3a 20 6f  EventGenerate: o
212f0 70 74 69 6f 6e 73 20 3c 52 65 70 61 72 65 6e 74  ptions <Reparent
21300 3e 20 2d 79 20 32 69 7d 20 2d 73 65 74 75 70 20  > -y 2i} -setup 
21310 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66  {.    frame .t.f
21320 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69   -class Test -wi
21330 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20  dth 150 -height 
21340 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e  100.    pack .t.
21350 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72  f.    focus -for
21360 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61  ce .t.f.    upda
21370 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a  te.    set x {}.
21380 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
21390 6e 64 20 2e 74 2e 66 20 3c 52 65 70 61 72 65 6e  nd .t.f <Reparen
213a0 74 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25 79  t> "lappend x %y
213b0 22 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  ".    event gene
213c0 72 61 74 65 20 2e 74 2e 66 20 3c 52 65 70 61 72  rate .t.f <Repar
213d0 65 6e 74 3e 20 2d 79 20 32 69 20 0a 20 20 20 20  ent> -y 2i .    
213e0 65 78 70 72 20 7b 5b 77 69 6e 66 6f 20 70 69 78  expr {[winfo pix
213f0 65 6c 73 20 2e 74 2e 66 20 32 69 5d 20 65 71 20  els .t.f 2i] eq 
21400 24 78 7d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  $x}.} -cleanup {
21410 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e  .    destroy .t.
21420 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 31 7d 0a  f.} -result {1}.
21430 0a 74 65 73 74 20 62 69 6e 64 2d 32 32 2e 31 36  .test bind-22.16
21440 32 20 7b 48 61 6e 64 6c 65 45 76 65 6e 74 47 65  2 {HandleEventGe
21450 6e 65 72 61 74 65 3a 20 6f 70 74 69 6f 6e 73 20  nerate: options 
21460 3c 4d 61 70 3e 20 2d 79 20 32 69 7d 20 2d 73 65  <Map> -y 2i} -se
21470 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20  tup {.    frame 
21480 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74  .t.f -class Test
21490 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69   -width 150 -hei
214a0 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b  ght 100.    pack
214b0 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20   .t.f.    focus 
214c0 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20  -force .t.f.    
214d0 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78  update.    set x
214e0 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20   {}.} -body {.  
214f0 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 4d 61 70    bind .t.f <Map
21500 3e 20 22 6c 61 70 70 65 6e 64 20 78 20 25 79 22  > "lappend x %y"
21510 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
21520 61 74 65 20 2e 74 2e 66 20 3c 4d 61 70 3e 20 2d  ate .t.f <Map> -
21530 79 20 32 69 20 0a 7d 20 2d 63 6c 65 61 6e 75 70  y 2i .} -cleanup
21540 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
21550 74 2e 66 0a 7d 20 2d 72 65 74 75 72 6e 43 6f 64  t.f.} -returnCod
21560 65 73 20 65 72 72 6f 72 20 2d 72 65 73 75 6c 74  es error -result
21570 20 7b 3c 4d 61 70 3e 20 65 76 65 6e 74 20 64 6f   {<Map> event do
21580 65 73 6e 27 74 20 61 63 63 65 70 74 20 22 2d 79  esn't accept "-y
21590 22 20 6f 70 74 69 6f 6e 7d 0a 0a 74 65 73 74 20  " option}..test 
215a0 62 69 6e 64 2d 32 32 2e 31 36 33 20 7b 48 61 6e  bind-22.163 {Han
215b0 64 6c 65 45 76 65 6e 74 47 65 6e 65 72 61 74 65  dleEventGenerate
215c0 3a 20 6f 70 74 69 6f 6e 73 20 3c 4b 65 79 3e 20  : options <Key> 
215d0 2d 78 79 7a 20 31 7d 20 2d 73 65 74 75 70 20 7b  -xyz 1} -setup {
215e0 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
215f0 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
21600 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
21610 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
21620 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
21630 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
21640 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d  e.    set x {}.}
21650 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
21660 64 20 2e 74 2e 66 20 3c 4b 65 79 3e 20 22 6c 61  d .t.f <Key> "la
21670 70 70 65 6e 64 20 78 20 25 6b 22 0a 20 20 20 20  ppend x %k".    
21680 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
21690 74 2e 66 20 3c 4b 65 79 3e 20 2d 78 79 7a 20 31  t.f <Key> -xyz 1
216a0 20 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20   .} -cleanup {. 
216b0 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
216c0 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65  } -returnCodes e
216d0 72 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 62 61  rror -result {ba
216e0 64 20 6f 70 74 69 6f 6e 20 22 2d 78 79 7a 22 3a  d option "-xyz":
216f0 20 6d 75 73 74 20 62 65 20 2d 77 68 65 6e 2c 20   must be -when, 
21700 2d 61 62 6f 76 65 2c 20 2d 62 6f 72 64 65 72 77  -above, -borderw
21710 69 64 74 68 2c 20 2d 62 75 74 74 6f 6e 2c 20 2d  idth, -button, -
21720 63 6f 75 6e 74 2c 20 2d 64 61 74 61 2c 20 2d 64  count, -data, -d
21730 65 6c 74 61 2c 20 2d 64 65 74 61 69 6c 2c 20 2d  elta, -detail, -
21740 66 6f 63 75 73 2c 20 2d 68 65 69 67 68 74 2c 20  focus, -height, 
21750 2d 6b 65 79 63 6f 64 65 2c 20 2d 6b 65 79 73 79  -keycode, -keysy
21760 6d 2c 20 2d 6d 6f 64 65 2c 20 2d 6f 76 65 72 72  m, -mode, -overr
21770 69 64 65 2c 20 2d 70 6c 61 63 65 2c 20 2d 72 6f  ide, -place, -ro
21780 6f 74 2c 20 2d 72 6f 6f 74 78 2c 20 2d 72 6f 6f  ot, -rootx, -roo
21790 74 79 2c 20 2d 73 65 6e 64 65 76 65 6e 74 2c 20  ty, -sendevent, 
217a0 2d 73 65 72 69 61 6c 2c 20 2d 73 74 61 74 65 2c  -serial, -state,
217b0 20 2d 73 75 62 77 69 6e 64 6f 77 2c 20 2d 74 69   -subwindow, -ti
217c0 6d 65 2c 20 2d 77 61 72 70 2c 20 2d 77 69 64 74  me, -warp, -widt
217d0 68 2c 20 2d 77 69 6e 64 6f 77 2c 20 2d 78 2c 20  h, -window, -x, 
217e0 6f 72 20 2d 79 7d 0a 23 20 4e 6f 74 65 20 74 68  or -y}.# Note th
217f0 61 74 20 74 68 65 20 2d 64 61 74 61 20 6f 70 74  at the -data opt
21800 69 6f 6e 20 69 73 20 74 65 73 74 65 64 20 69 6e  ion is tested in
21810 20 62 69 6e 64 2d 33 32 2e 2a 20 62 65 63 61 75   bind-32.* becau
21820 73 65 20 69 74 20 68 61 73 0a 23 20 6d 6f 72 65  se it has.# more
21830 20 64 65 6d 61 6e 64 69 6e 67 20 72 65 71 75 69   demanding requi
21840 72 65 6d 65 6e 74 73 20 69 6e 20 6d 65 6d 6f 72  rements in memor
21850 79 20 68 61 6e 64 6c 69 6e 67 0a 0a 0a 74 65 73  y handling...tes
21860 74 20 62 69 6e 64 2d 32 33 2e 31 20 7b 47 65 74  t bind-23.1 {Get
21870 56 69 72 74 75 61 6c 45 76 65 6e 74 55 69 64 20  VirtualEventUid 
21880 70 72 6f 63 65 64 75 72 65 7d 20 2d 62 6f 64 79  procedure} -body
21890 20 7b 0a 20 20 20 20 65 76 65 6e 74 20 69 6e 66   {.    event inf
218a0 6f 20 3c 3c 61 73 64 0a 7d 20 2d 72 65 74 75 72  o <<asd.} -retur
218b0 6e 43 6f 64 65 73 20 65 72 72 6f 72 20 2d 72 65  nCodes error -re
218c0 73 75 6c 74 20 7b 76 69 72 74 75 61 6c 20 65 76  sult {virtual ev
218d0 65 6e 74 20 22 3c 3c 61 73 64 22 20 69 73 20 62  ent "<<asd" is b
218e0 61 64 6c 79 20 66 6f 72 6d 65 64 7d 0a 74 65 73  adly formed}.tes
218f0 74 20 62 69 6e 64 2d 32 33 2e 32 20 7b 47 65 74  t bind-23.2 {Get
21900 56 69 72 74 75 61 6c 45 76 65 6e 74 55 69 64 20  VirtualEventUid 
21910 70 72 6f 63 65 64 75 72 65 7d 20 2d 62 6f 64 79  procedure} -body
21920 20 7b 0a 20 20 20 20 65 76 65 6e 74 20 69 6e 66   {.    event inf
21930 6f 20 3c 3c 3e 3e 0a 7d 20 2d 72 65 74 75 72 6e  o <<>>.} -return
21940 43 6f 64 65 73 20 65 72 72 6f 72 20 2d 72 65 73  Codes error -res
21950 75 6c 74 20 7b 76 69 72 74 75 61 6c 20 65 76 65  ult {virtual eve
21960 6e 74 20 22 3c 3c 3e 3e 22 20 69 73 20 62 61 64  nt "<<>>" is bad
21970 6c 79 20 66 6f 72 6d 65 64 7d 0a 74 65 73 74 20  ly formed}.test 
21980 62 69 6e 64 2d 32 33 2e 33 20 7b 47 65 74 56 69  bind-23.3 {GetVi
21990 72 74 75 61 6c 45 76 65 6e 74 55 69 64 20 70 72  rtualEventUid pr
219a0 6f 63 65 64 75 72 65 7d 20 2d 62 6f 64 79 20 7b  ocedure} -body {
219b0 0a 20 20 20 20 65 76 65 6e 74 20 69 6e 66 6f 20  .    event info 
219c0 3c 3c 61 73 64 3e 0a 7d 20 2d 72 65 74 75 72 6e  <<asd>.} -return
219d0 43 6f 64 65 73 20 65 72 72 6f 72 20 2d 72 65 73  Codes error -res
219e0 75 6c 74 20 7b 76 69 72 74 75 61 6c 20 65 76 65  ult {virtual eve
219f0 6e 74 20 22 3c 3c 61 73 64 3e 22 20 69 73 20 62  nt "<<asd>" is b
21a00 61 64 6c 79 20 66 6f 72 6d 65 64 7d 0a 74 65 73  adly formed}.tes
21a10 74 20 62 69 6e 64 2d 32 33 2e 34 20 7b 47 65 74  t bind-23.4 {Get
21a20 56 69 72 74 75 61 6c 45 76 65 6e 74 55 69 64 20  VirtualEventUid 
21a30 70 72 6f 63 65 64 75 72 65 7d 20 2d 73 65 74 75  procedure} -setu
21a40 70 20 7b 0a 20 20 20 20 65 76 65 6e 74 20 64 65  p {.    event de
21a50 6c 65 74 65 20 3c 3c 61 73 64 3e 3e 0a 7d 20 2d  lete <<asd>>.} -
21a60 62 6f 64 79 20 7b 0a 20 20 20 20 65 76 65 6e 74  body {.    event
21a70 20 69 6e 66 6f 20 3c 3c 61 73 64 3e 3e 0a 7d 20   info <<asd>>.} 
21a80 2d 72 65 73 75 6c 74 20 7b 7d 0a 0a 0a 74 65 73  -result {}...tes
21a90 74 20 62 69 6e 64 2d 32 34 2e 31 20 7b 46 69 6e  t bind-24.1 {Fin
21aa0 64 53 65 71 75 65 6e 63 65 20 70 72 6f 63 65 64  dSequence proced
21ab0 75 72 65 3a 20 6e 6f 20 65 76 65 6e 74 7d 20 2d  ure: no event} -
21ac0 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20  body {.    bind 
21ad0 2e 74 20 7b 7d 20 74 65 73 74 0a 7d 20 2d 72 65  .t {} test.} -re
21ae0 74 75 72 6e 43 6f 64 65 73 20 65 72 72 6f 72 20  turnCodes error 
21af0 2d 72 65 73 75 6c 74 20 7b 6e 6f 20 65 76 65 6e  -result {no even
21b00 74 73 20 73 70 65 63 69 66 69 65 64 20 69 6e 20  ts specified in 
21b10 62 69 6e 64 69 6e 67 7d 0a 74 65 73 74 20 62 69  binding}.test bi
21b20 6e 64 2d 32 34 2e 32 20 7b 46 69 6e 64 53 65 71  nd-24.2 {FindSeq
21b30 75 65 6e 63 65 20 70 72 6f 63 65 64 75 72 65 3a  uence procedure:
21b40 20 62 61 64 20 65 76 65 6e 74 7d 20 2d 62 6f 64   bad event} -bod
21b50 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 20  y {.    bind .t 
21b60 3c 78 79 7a 3e 20 74 65 73 74 0a 7d 20 2d 72 65  <xyz> test.} -re
21b70 74 75 72 6e 43 6f 64 65 73 20 65 72 72 6f 72 20  turnCodes error 
21b80 2d 72 65 73 75 6c 74 20 7b 62 61 64 20 65 76 65  -result {bad eve
21b90 6e 74 20 74 79 70 65 20 6f 72 20 6b 65 79 73 79  nt type or keysy
21ba0 6d 20 22 78 79 7a 22 7d 0a 74 65 73 74 20 62 69  m "xyz"}.test bi
21bb0 6e 64 2d 32 34 2e 33 20 7b 46 69 6e 64 53 65 71  nd-24.3 {FindSeq
21bc0 75 65 6e 63 65 20 70 72 6f 63 65 64 75 72 65 3a  uence procedure:
21bd0 20 76 69 72 74 75 61 6c 20 61 6c 6c 6f 77 65 64   virtual allowed
21be0 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66  } -setup {.    f
21bf0 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73  rame .t.f -class
21c00 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30   Test -width 150
21c10 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20   -height 100.   
21c20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66   pack .t.f.    f
21c30 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66  ocus -force .t.f
21c40 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20  .    update.    
21c50 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79  set x {}.} -body
21c60 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66   {.    bind .t.f
21c70 20 3c 3c 50 61 73 74 65 3e 3e 20 74 65 73 74 0a   <<Paste>> test.
21c80 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20  } -cleanup {.   
21c90 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20   destroy .t.f.} 
21ca0 2d 72 65 73 75 6c 74 20 20 7b 7d 0a 74 65 73 74  -result  {}.test
21cb0 20 62 69 6e 64 2d 32 34 2e 34 20 7b 46 69 6e 64   bind-24.4 {Find
21cc0 53 65 71 75 65 6e 63 65 20 70 72 6f 63 65 64 75  Sequence procedu
21cd0 72 65 3a 20 76 69 72 74 75 61 6c 20 6e 6f 74 20  re: virtual not 
21ce0 61 6c 6c 6f 77 65 64 7d 20 2d 62 6f 64 79 20 7b  allowed} -body {
21cf0 0a 20 20 20 20 65 76 65 6e 74 20 61 64 64 20 3c  .    event add <
21d00 3c 50 61 73 74 65 3e 3e 20 3c 3c 41 6c 69 76 65  <Paste>> <<Alive
21d10 3e 3e 0a 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65  >>.} -returnCode
21d20 73 20 65 72 72 6f 72 20 2d 72 65 73 75 6c 74 20  s error -result 
21d30 7b 76 69 72 74 75 61 6c 20 65 76 65 6e 74 20 6e  {virtual event n
21d40 6f 74 20 61 6c 6c 6f 77 65 64 20 69 6e 20 64 65  ot allowed in de
21d50 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 6e 6f 74  finition of anot
21d60 68 65 72 20 76 69 72 74 75 61 6c 20 65 76 65 6e  her virtual even
21d70 74 7d 0a 74 65 73 74 20 62 69 6e 64 2d 32 34 2e  t}.test bind-24.
21d80 35 20 7b 46 69 6e 64 53 65 71 75 65 6e 63 65 20  5 {FindSequence 
21d90 70 72 6f 63 65 64 75 72 65 2c 20 6d 75 6c 74 69  procedure, multi
21da0 70 6c 65 20 62 69 6e 64 69 6e 67 73 7d 20 2d 73  ple bindings} -s
21db0 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65  etup {.    frame
21dc0 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73   .t.f -class Tes
21dd0 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65  t -width 150 -he
21de0 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63  ight 100.    pac
21df0 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73  k .t.f.    focus
21e00 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20   -force .t.f.   
21e10 20 75 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20   update.} -body 
21e20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20  {.    bind .t.f 
21e30 3c 31 3e 20 7b 6c 61 70 70 65 6e 64 20 78 20 73  <1> {lappend x s
21e40 69 6e 67 6c 65 7d 0a 20 20 20 20 62 69 6e 64 20  ingle}.    bind 
21e50 2e 74 2e 66 20 3c 44 6f 75 62 6c 65 2d 31 3e 20  .t.f <Double-1> 
21e60 7b 6c 61 70 70 65 6e 64 20 78 20 64 6f 75 62 6c  {lappend x doubl
21e70 65 7d 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66  e}.    bind .t.f
21e80 20 3c 54 72 69 70 6c 65 2d 31 3e 20 7b 6c 61 70   <Triple-1> {lap
21e90 70 65 6e 64 20 78 20 74 72 69 70 6c 65 7d 0a 20  pend x triple}. 
21ea0 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 51 75     bind .t.f <Qu
21eb0 61 64 72 75 70 6c 65 2d 31 3e 20 7b 6c 61 70 70  adruple-1> {lapp
21ec0 65 6e 64 20 78 20 71 75 61 64 72 75 70 6c 65 7d  end x quadruple}
21ed0 0a 20 20 20 20 73 65 74 20 78 20 70 72 65 73 73  .    set x press
21ee0 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
21ef0 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e  ate .t.f <Button
21f00 2d 31 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65  -1>.    event ge
21f10 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74  nerate .t.f <But
21f20 74 6f 6e 52 65 6c 65 61 73 65 2d 31 3e 0a 20 20  tonRelease-1>.  
21f30 20 20 6c 61 70 70 65 6e 64 20 78 20 70 72 65 73    lappend x pres
21f40 73 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  s.    event gene
21f50 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f  rate .t.f <Butto
21f60 6e 2d 31 3e 0a 20 20 20 20 65 76 65 6e 74 20 67  n-1>.    event g
21f70 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75  enerate .t.f <Bu
21f80 74 74 6f 6e 52 65 6c 65 61 73 65 2d 31 3e 0a 20  ttonRelease-1>. 
21f90 20 20 20 6c 61 70 70 65 6e 64 20 78 20 70 72 65     lappend x pre
21fa0 73 73 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e  ss.    event gen
21fb0 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74  erate .t.f <Butt
21fc0 6f 6e 2d 31 3e 0a 20 20 20 20 65 76 65 6e 74 20  on-1>.    event 
21fd0 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42  generate .t.f <B
21fe0 75 74 74 6f 6e 52 65 6c 65 61 73 65 2d 31 3e 0a  uttonRelease-1>.
21ff0 20 20 20 20 6c 61 70 70 65 6e 64 20 78 20 70 72      lappend x pr
22000 65 73 73 0a 20 20 20 20 65 76 65 6e 74 20 67 65  ess.    event ge
22010 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74  nerate .t.f <But
22020 74 6f 6e 2d 31 3e 0a 20 20 20 20 65 76 65 6e 74  ton-1>.    event
22030 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
22040 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 2d 31 3e  ButtonRelease-1>
22050 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 78 20 70  .    lappend x p
22060 72 65 73 73 0a 20 20 20 20 65 76 65 6e 74 20 67  ress.    event g
22070 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75  enerate .t.f <Bu
22080 74 74 6f 6e 2d 31 3e 0a 20 20 20 20 65 76 65 6e  tton-1>.    even
22090 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
220a0 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 2d 31  <ButtonRelease-1
220b0 3e 0a 20 20 20 20 73 65 74 20 78 0a 7d 20 2d 63  >.    set x.} -c
220c0 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73  leanup {.    des
220d0 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73  troy .t.f.} -res
220e0 75 6c 74 20 7b 70 72 65 73 73 20 73 69 6e 67 6c  ult {press singl
220f0 65 20 70 72 65 73 73 20 64 6f 75 62 6c 65 20 70  e press double p
22100 72 65 73 73 20 74 72 69 70 6c 65 20 70 72 65 73  ress triple pres
22110 73 20 71 75 61 64 72 75 70 6c 65 20 70 72 65 73  s quadruple pres
22120 73 20 71 75 61 64 72 75 70 6c 65 7d 0a 74 65 73  s quadruple}.tes
22130 74 20 62 69 6e 64 2d 32 34 2e 36 20 7b 46 69 6e  t bind-24.6 {Fin
22140 64 53 65 71 75 65 6e 63 65 20 70 72 6f 63 65 64  dSequence proced
22150 75 72 65 3a 20 76 69 72 74 75 61 6c 20 63 6f 6d  ure: virtual com
22160 70 6f 73 65 64 7d 20 2d 62 6f 64 79 20 7b 0a 20  posed} -body {. 
22170 20 20 20 62 69 6e 64 20 2e 74 20 3c 43 6f 6e 74     bind .t <Cont
22180 72 6f 6c 2d 62 3e 3c 3c 50 61 73 74 65 3e 3e 20  rol-b><<Paste>> 
22190 22 70 75 74 73 20 68 69 22 0a 7d 20 2d 72 65 74  "puts hi".} -ret
221a0 75 72 6e 43 6f 64 65 73 20 65 72 72 6f 72 20 2d  urnCodes error -
221b0 72 65 73 75 6c 74 20 7b 76 69 72 74 75 61 6c 20  result {virtual 
221c0 65 76 65 6e 74 73 20 6d 61 79 20 6e 6f 74 20 62  events may not b
221d0 65 20 63 6f 6d 70 6f 73 65 64 7d 0a 74 65 73 74  e composed}.test
221e0 20 62 69 6e 64 2d 32 34 2e 37 20 7b 46 69 6e 64   bind-24.7 {Find
221f0 53 65 71 75 65 6e 63 65 20 70 72 6f 63 65 64 75  Sequence procedu
22200 72 65 3a 20 6e 65 77 20 70 61 74 74 65 72 6e 20  re: new pattern 
22210 73 65 71 75 65 6e 63 65 7d 20 2d 73 65 74 75 70  sequence} -setup
22220 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e   {.    frame .t.
22230 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77  f -class Test -w
22240 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74  idth 150 -height
22250 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74   100.    pack .t
22260 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f  .f.    focus -fo
22270 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64  rce .t.f.    upd
22280 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d  ate.    set x {}
22290 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62  .} -body {.    b
222a0 69 6e 64 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e  ind .t.f <Button
222b0 2d 31 3e 3c 42 75 74 74 6f 6e 2d 32 3e 20 7b 6c  -1><Button-2> {l
222c0 61 70 70 65 6e 64 20 78 20 31 2d 32 7d 0a 20 20  append x 1-2}.  
222d0 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
222e0 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 31 3e   .t.f <Button-1>
222f0 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
22300 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e  ate .t.f <Button
22310 52 65 6c 65 61 73 65 2d 31 3e 0a 20 20 20 20 65  Release-1>.    e
22320 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
22330 2e 66 20 3c 42 75 74 74 6f 6e 2d 32 3e 0a 20 20  .f <Button-2>.  
22340 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
22350 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65 6c   .t.f <ButtonRel
22360 65 61 73 65 2d 32 3e 0a 20 20 20 20 73 65 74 20  ease-2>.    set 
22370 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  x.} -cleanup {. 
22380 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
22390 7d 20 2d 72 65 73 75 6c 74 20 7b 31 2d 32 7d 0a  } -result {1-2}.
223a0 74 65 73 74 20 62 69 6e 64 2d 32 34 2e 38 20 7b  test bind-24.8 {
223b0 46 69 6e 64 53 65 71 75 65 6e 63 65 20 70 72 6f  FindSequence pro
223c0 63 65 64 75 72 65 3a 20 73 69 6d 69 6c 61 72 20  cedure: similar 
223d0 70 61 74 74 65 72 6e 20 73 65 71 75 65 6e 63 65  pattern sequence
223e0 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66  } -setup {.    f
223f0 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73  rame .t.f -class
22400 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30   Test -width 150
22410 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20   -height 100.   
22420 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66   pack .t.f.    f
22430 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66  ocus -force .t.f
22440 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20  .    update.    
22450 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79  set x {}.} -body
22460 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66   {.    bind .t.f
22470 20 3c 42 75 74 74 6f 6e 2d 31 3e 3c 42 75 74 74   <Button-1><Butt
22480 6f 6e 2d 32 3e 20 7b 6c 61 70 70 65 6e 64 20 78  on-2> {lappend x
22490 20 31 2d 32 7d 0a 20 20 20 20 62 69 6e 64 20 2e   1-2}.    bind .
224a0 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 32 3e 20 7b  t.f <Button-2> {
224b0 6c 61 70 70 65 6e 64 20 78 20 32 7d 0a 20 20 20  lappend x 2}.   
224c0 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
224d0 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 33 3e 0a  .t.f <Button-3>.
224e0 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
224f0 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d  te .t.f <Button-
22500 32 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e  2>.    event gen
22510 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74  erate .t.f <Butt
22520 6f 6e 52 65 6c 65 61 73 65 2d 32 3e 0a 20 20 20  onRelease-2>.   
22530 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
22540 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 31 3e 0a  .t.f <Button-1>.
22550 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
22560 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52  te .t.f <ButtonR
22570 65 6c 65 61 73 65 2d 31 3e 0a 20 20 20 20 65 76  elease-1>.    ev
22580 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
22590 66 20 3c 42 75 74 74 6f 6e 2d 32 3e 0a 20 20 20  f <Button-2>.   
225a0 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
225b0 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65  .t.f <ButtonRele
225c0 61 73 65 2d 32 3e 0a 20 20 20 20 73 65 74 20 78  ase-2>.    set x
225d0 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
225e0 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d    destroy .t.f.}
225f0 20 2d 72 65 73 75 6c 74 20 7b 32 20 31 2d 32 7d   -result {2 1-2}
22600 0a 74 65 73 74 20 62 69 6e 64 2d 32 34 2e 39 20  .test bind-24.9 
22610 7b 46 69 6e 64 53 65 71 75 65 6e 63 65 20 70 72  {FindSequence pr
22620 6f 63 65 64 75 72 65 3a 20 73 69 6d 69 6c 61 72  ocedure: similar
22630 20 70 61 74 74 65 72 6e 20 73 65 71 75 65 6e 63   pattern sequenc
22640 65 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20  e} -setup {.    
22650 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73  frame .t.f -clas
22660 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35  s Test -width 15
22670 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20  0 -height 100.  
22680 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20    pack .t.f.    
22690 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e  focus -force .t.
226a0 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20 20  f.    update.   
226b0 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64   set x {}.} -bod
226c0 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  y {.    bind .t.
226d0 66 20 3c 42 75 74 74 6f 6e 2d 31 3e 3c 42 75 74  f <Button-1><But
226e0 74 6f 6e 2d 32 3e 20 7b 6c 61 70 70 65 6e 64 20  ton-2> {lappend 
226f0 78 20 31 2d 32 7d 0a 20 20 20 20 62 69 6e 64 20  x 1-2}.    bind 
22700 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 32 3e 3c  .t.f <Button-2><
22710 42 75 74 74 6f 6e 2d 32 3e 20 7b 6c 61 70 70 65  Button-2> {lappe
22720 6e 64 20 78 20 32 2d 32 7d 0a 20 20 20 20 65 76  nd x 2-2}.    ev
22730 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
22740 66 20 3c 42 75 74 74 6f 6e 2d 33 3e 0a 20 20 20  f <Button-3>.   
22750 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
22760 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 32 3e 0a  .t.f <Button-2>.
22770 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
22780 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52  te .t.f <ButtonR
22790 65 6c 65 61 73 65 2d 32 3e 0a 20 20 20 20 65 76  elease-2>.    ev
227a0 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
227b0 66 20 3c 42 75 74 74 6f 6e 2d 32 3e 0a 20 20 20  f <Button-2>.   
227c0 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
227d0 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65  .t.f <ButtonRele
227e0 61 73 65 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74  ase-2>.    event
227f0 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
22800 42 75 74 74 6f 6e 2d 31 3e 0a 20 20 20 20 65 76  Button-1>.    ev
22810 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
22820 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73 65  f <ButtonRelease
22830 2d 31 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65  -1>.    event ge
22840 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74  nerate .t.f <But
22850 74 6f 6e 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74  ton-2>.    event
22860 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
22870 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 2d 32 3e  ButtonRelease-2>
22880 0a 20 20 20 20 73 65 74 20 78 0a 7d 20 2d 63 6c  .    set x.} -cl
22890 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74  eanup {.    dest
228a0 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75  roy .t.f.} -resu
228b0 6c 74 20 7b 32 2d 32 20 31 2d 32 7d 0a 74 65 73  lt {2-2 1-2}.tes
228c0 74 20 62 69 6e 64 2d 32 34 2e 31 30 20 7b 46 69  t bind-24.10 {Fi
228d0 6e 64 53 65 71 75 65 6e 63 65 20 70 72 6f 63 65  ndSequence proce
228e0 64 75 72 65 3a 20 73 69 6d 69 6c 61 72 20 70 61  dure: similar pa
228f0 74 74 65 72 6e 20 73 65 71 75 65 6e 63 65 7d 20  ttern sequence} 
22900 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61  -setup {.    fra
22910 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54  me .t.f -class T
22920 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d  est -width 150 -
22930 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70  height 100.    p
22940 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63  ack .t.f.    foc
22950 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20  us -force .t.f. 
22960 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73 65     update.    se
22970 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b  t x {}.} -body {
22980 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c  .    bind .t.f <
22990 42 75 74 74 6f 6e 2d 32 3e 3c 42 75 74 74 6f 6e  Button-2><Button
229a0 2d 32 3e 20 7b 6c 61 70 70 65 6e 64 20 78 20 32  -2> {lappend x 2
229b0 2d 32 7d 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  -2}.    bind .t.
229c0 66 20 3c 44 6f 75 62 6c 65 2d 42 75 74 74 6f 6e  f <Double-Button
229d0 2d 32 3e 20 7b 6c 61 70 70 65 6e 64 20 78 20 64  -2> {lappend x d
229e0 2d 32 7d 0a 20 20 20 20 65 76 65 6e 74 20 67 65  -2}.    event ge
229f0 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74  nerate .t.f <But
22a00 74 6f 6e 2d 33 3e 0a 20 20 20 20 65 76 65 6e 74  ton-3>.    event
22a10 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
22a20 42 75 74 74 6f 6e 2d 32 3e 0a 20 20 20 20 65 76  Button-2>.    ev
22a30 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
22a40 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73 65  f <ButtonRelease
22a50 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65  -2>.    event ge
22a60 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74  nerate .t.f <But
22a70 74 6f 6e 2d 32 3e 0a 20 20 20 20 65 76 65 6e 74  ton-2>.    event
22a80 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
22a90 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 2d 32 3e  ButtonRelease-2>
22aa0 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
22ab0 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e  ate .t.f <Button
22ac0 2d 31 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65  -1>.    event ge
22ad0 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74  nerate .t.f <But
22ae0 74 6f 6e 52 65 6c 65 61 73 65 2d 31 3e 0a 20 20  tonRelease-1>.  
22af0 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
22b00 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 32 3e   .t.f <Button-2>
22b10 20 2d 78 20 31 30 30 0a 20 20 20 20 65 76 65 6e   -x 100.    even
22b20 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
22b30 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 2d 32  <ButtonRelease-2
22b40 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  >.    event gene
22b50 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f  rate .t.f <Butto
22b60 6e 2d 32 3e 20 2d 78 20 32 30 30 0a 20 20 20 20  n-2> -x 200.    
22b70 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
22b80 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65 61  t.f <ButtonRelea
22b90 73 65 2d 32 3e 0a 20 20 20 20 73 65 74 20 78 0a  se-2>.    set x.
22ba0 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20  } -cleanup {.   
22bb0 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20   destroy .t.f.} 
22bc0 2d 72 65 73 75 6c 74 20 7b 64 2d 32 20 32 2d 32  -result {d-2 2-2
22bd0 7d 0a 74 65 73 74 20 62 69 6e 64 2d 32 34 2e 31  }.test bind-24.1
22be0 31 20 7b 46 69 6e 64 53 65 71 75 65 6e 63 65 20  1 {FindSequence 
22bf0 70 72 6f 63 65 64 75 72 65 3a 20 6e 65 77 20 73  procedure: new s
22c00 65 71 75 65 6e 63 65 2c 20 64 6f 6e 27 74 20 63  equence, don't c
22c10 72 65 61 74 65 7d 20 2d 73 65 74 75 70 20 7b 0a  reate} -setup {.
22c20 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d      frame .t.f -
22c30 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74  class Test -widt
22c40 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30  h 150 -height 10
22c50 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a  0.    pack .t.f.
22c60 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65      focus -force
22c70 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65   .t.f.    update
22c80 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62  .} -body {.    b
22c90 69 6e 64 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e  ind .t.f <Button
22ca0 2d 32 3e 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  -2>.} -cleanup {
22cb0 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e  .    destroy .t.
22cc0 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 7d 0a 74  f.} -result {}.t
22cd0 65 73 74 20 62 69 6e 64 2d 32 34 2e 31 32 20 7b  est bind-24.12 {
22ce0 46 69 6e 64 53 65 71 75 65 6e 63 65 20 70 72 6f  FindSequence pro
22cf0 63 65 64 75 72 65 3a 20 6e 6f 74 20 6e 65 77 20  cedure: not new 
22d00 73 65 71 75 65 6e 63 65 2c 20 64 6f 6e 27 74 20  sequence, don't 
22d10 63 72 65 61 74 65 7d 20 2d 73 65 74 75 70 20 7b  create} -setup {
22d20 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
22d30 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
22d40 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
22d50 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
22d60 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
22d70 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
22d80 65 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  e.} -body {.    
22d90 62 69 6e 64 20 2e 74 2e 66 20 3c 43 6f 6e 74 72  bind .t.f <Contr
22da0 6f 6c 2d 42 75 74 74 6f 6e 2d 32 3e 20 22 66 6f  ol-Button-2> "fo
22db0 6f 22 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66  o".    bind .t.f
22dc0 20 3c 42 75 74 74 6f 6e 2d 32 3e 0a 7d 20 2d 63   <Button-2>.} -c
22dd0 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73  leanup {.    des
22de0 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73  troy .t.f.} -res
22df0 75 6c 74 20 7b 7d 0a 74 65 73 74 20 62 69 6e 64  ult {}.test bind
22e00 2d 32 34 2e 31 33 20 7b 46 69 6e 64 53 65 71 75  -24.13 {FindSequ
22e10 65 6e 63 65 20 70 72 6f 63 65 64 75 72 65 3a 20  ence procedure: 
22e20 6e 6f 20 62 69 6e 64 69 6e 67 7d 20 2d 62 6f 64  no binding} -bod
22e30 79 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74  y {.    frame .t
22e40 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d  .f -class Test -
22e50 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68  width 150 -heigh
22e60 74 20 31 30 30 0a 20 20 20 20 62 69 6e 64 20 2e  t 100.    bind .
22e70 74 2e 66 20 3c 61 3e 0a 7d 20 2d 63 6c 65 61 6e  t.f <a>.} -clean
22e80 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79  up {.    destroy
22e90 20 2e 74 2e 66 0a 7d 20 2d 72 65 74 75 72 6e 43   .t.f.} -returnC
22ea0 6f 64 65 73 20 6f 6b 0a 74 65 73 74 20 62 69 6e  odes ok.test bin
22eb0 64 2d 32 34 2e 31 34 20 7b 46 69 6e 64 53 65 71  d-24.14 {FindSeq
22ec0 75 65 6e 63 65 20 70 72 6f 63 65 64 75 72 65 3a  uence procedure:
22ed0 20 6e 6f 20 62 69 6e 64 69 6e 67 7d 20 2d 62 6f   no binding} -bo
22ee0 64 79 20 7b 0a 20 20 20 20 63 61 6e 76 61 73 20  dy {.    canvas 
22ef0 2e 74 2e 63 0a 20 20 20 20 73 65 74 20 69 20 5b  .t.c.    set i [
22f00 2e 74 2e 63 20 63 72 65 61 74 65 20 72 65 63 74  .t.c create rect
22f10 20 31 30 20 31 30 20 31 30 30 20 31 30 30 5d 0a   10 10 100 100].
22f20 20 20 20 20 2e 74 2e 63 20 62 69 6e 64 20 24 69      .t.c bind $i
22f30 20 3c 61 3e 0a 7d 20 2d 63 6c 65 61 6e 75 70 20   <a>.} -cleanup 
22f40 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74  {.    destroy .t
22f50 2e 63 0a 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65  .c.} -returnCode
22f60 73 20 6f 6b 0a 0a 74 65 73 74 20 62 69 6e 64 2d  s ok..test bind-
22f70 32 35 2e 31 20 7b 50 61 72 73 65 45 76 65 6e 74  25.1 {ParseEvent
22f80 44 65 73 63 72 69 70 74 69 6f 6e 20 70 72 6f 63  Description proc
22f90 65 64 75 72 65 7d 20 2d 73 65 74 75 70 20 7b 0a  edure} -setup {.
22fa0 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d      frame .t.f -
22fb0 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74  class Test -widt
22fc0 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30  h 150 -height 10
22fd0 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a  0.    pack .t.f.
22fe0 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65      focus -force
22ff0 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65   .t.f.    update
23000 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62  .} -body {.    b
23010 69 6e 64 20 2e 74 2e 66 20 61 20 74 65 73 74 0a  ind .t.f a test.
23020 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 61 0a      bind .t.f a.
23030 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20  } -cleanup {.   
23040 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20   destroy .t.f.} 
23050 2d 72 65 73 75 6c 74 20 74 65 73 74 0a 74 65 73  -result test.tes
23060 74 20 62 69 6e 64 2d 32 35 2e 32 20 7b 50 61 72  t bind-25.2 {Par
23070 73 65 45 76 65 6e 74 44 65 73 63 72 69 70 74 69  seEventDescripti
23080 6f 6e 20 70 72 6f 63 65 64 75 72 65 3a 20 6d 69  on procedure: mi
23090 73 69 6e 74 65 72 70 72 65 74 65 64 20 6d 6f 64  sinterpreted mod
230a0 69 66 69 65 72 7d 20 2d 73 65 74 75 70 20 7b 0a  ifier} -setup {.
230b0 20 20 20 20 62 75 74 74 6f 6e 20 2e 62 0a 7d 20      button .b.} 
230c0 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64  -body {.    bind
230d0 20 2e 62 20 3c 43 6f 6e 74 72 6f 6c 2d 4d 3e 20   .b <Control-M> 
230e0 61 0a 20 20 20 20 62 69 6e 64 20 2e 62 20 3c 4d  a.    bind .b <M
230f0 2d 4d 3e 20 62 0a 20 20 20 20 6c 73 6f 72 74 20  -M> b.    lsort 
23100 5b 62 69 6e 64 20 2e 62 5d 0a 7d 20 2d 63 6c 65  [bind .b].} -cle
23110 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72  anup {.    destr
23120 6f 79 20 2e 62 0a 7d 20 2d 72 65 73 75 6c 74 20  oy .b.} -result 
23130 7b 3c 43 6f 6e 74 72 6f 6c 2d 4b 65 79 2d 4d 3e  {<Control-Key-M>
23140 20 3c 4d 65 74 61 2d 4b 65 79 2d 4d 3e 7d 0a 74   <Meta-Key-M>}.t
23150 65 73 74 20 62 69 6e 64 2d 32 35 2e 33 20 7b 50  est bind-25.3 {P
23160 61 72 73 65 45 76 65 6e 74 44 65 73 63 72 69 70  arseEventDescrip
23170 74 69 6f 6e 20 70 72 6f 63 65 64 75 72 65 7d 20  tion procedure} 
23180 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61  -setup {.    fra
23190 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54  me .t.f -class T
231a0 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d  est -width 150 -
231b0 68 65 69 67 68 74 20 31 30 30 0a 7d 20 2d 62 6f  height 100.} -bo
231c0 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74  dy {.    bind .t
231d0 2e 66 20 3c 61 2d 2d 2d 3e 20 7b 6e 6f 74 68 69  .f <a---> {nothi
231e0 6e 67 7d 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  ng}.    bind .t.
231f0 66 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  f.} -cleanup {. 
23200 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
23210 7d 20 2d 72 65 73 75 6c 74 20 61 0a 74 65 73 74  } -result a.test
23220 20 62 69 6e 64 2d 32 35 2e 34 20 7b 50 61 72 73   bind-25.4 {Pars
23230 65 45 76 65 6e 74 44 65 73 63 72 69 70 74 69 6f  eEventDescriptio
23240 6e 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20  n} -setup {.    
23250 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73  frame .t.f -clas
23260 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35  s Test -width 15
23270 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 7d 20  0 -height 100.} 
23280 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64  -body {.    bind
23290 20 2e 74 2e 66 20 3c 3c 53 68 69 66 74 2d 50 61   .t.f <<Shift-Pa
232a0 73 74 65 3e 3e 20 7b 70 75 74 73 20 68 69 7d 0a  ste>> {puts hi}.
232b0 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 0a 7d 20      bind .t.f.} 
232c0 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64  -cleanup {.    d
232d0 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72  estroy .t.f.} -r
232e0 65 73 75 6c 74 20 7b 3c 3c 53 68 69 66 74 2d 50  esult {<<Shift-P
232f0 61 73 74 65 3e 3e 7d 0a 0a 23 20 41 73 73 6f 72  aste>>}..# Assor
23300 74 65 64 20 65 72 72 6f 72 20 63 61 73 65 73 20  ted error cases 
23310 69 6e 20 65 76 65 6e 74 20 73 65 71 75 65 6e 63  in event sequenc
23320 65 20 70 61 72 73 69 6e 67 0a 74 65 73 74 20 62  e parsing.test b
23330 69 6e 64 2d 32 35 2e 35 20 7b 50 61 72 73 65 45  ind-25.5 {ParseE
23340 76 65 6e 74 44 65 73 63 72 69 70 74 69 6f 6e 20  ventDescription 
23350 70 72 6f 63 65 64 75 72 65 20 65 72 72 6f 72 20  procedure error 
23360 63 61 73 65 73 7d 20 2d 62 6f 64 79 20 7b 0a 20  cases} -body {. 
23370 20 20 20 62 69 6e 64 20 2e 74 20 5c 78 37 20 7b     bind .t \x7 {
23380 70 75 74 73 20 68 69 7d 0a 7d 20 2d 72 65 74 75  puts hi}.} -retu
23390 72 6e 43 6f 64 65 73 20 65 72 72 6f 72 20 2d 72  rnCodes error -r
233a0 65 73 75 6c 74 20 7b 62 61 64 20 41 53 43 49 49  esult {bad ASCII
233b0 20 63 68 61 72 61 63 74 65 72 20 30 78 37 7d 0a   character 0x7}.
233c0 74 65 73 74 20 62 69 6e 64 2d 32 35 2e 36 20 7b  test bind-25.6 {
233d0 50 61 72 73 65 45 76 65 6e 74 44 65 73 63 72 69  ParseEventDescri
233e0 70 74 69 6f 6e 20 70 72 6f 63 65 64 75 72 65 20  ption procedure 
233f0 65 72 72 6f 72 20 63 61 73 65 73 7d 20 2d 62 6f  error cases} -bo
23400 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74  dy {.    bind .t
23410 20 5c 78 37 66 20 7b 70 75 74 73 20 68 69 7d 0a   \x7f {puts hi}.
23420 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65  } -returnCodes e
23430 72 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 62 61  rror -result {ba
23440 64 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65  d ASCII characte
23450 72 20 30 78 37 66 7d 0a 74 65 73 74 20 62 69 6e  r 0x7f}.test bin
23460 64 2d 32 35 2e 37 20 7b 50 61 72 73 65 45 76 65  d-25.7 {ParseEve
23470 6e 74 44 65 73 63 72 69 70 74 69 6f 6e 20 70 72  ntDescription pr
23480 6f 63 65 64 75 72 65 20 65 72 72 6f 72 20 63 61  ocedure error ca
23490 73 65 73 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20  ses} -body {.   
234a0 20 62 69 6e 64 20 2e 74 20 5c 78 34 20 7b 70 75   bind .t \x4 {pu
234b0 74 73 20 68 69 7d 0a 7d 20 2d 72 65 74 75 72 6e  ts hi}.} -return
234c0 43 6f 64 65 73 20 65 72 72 6f 72 20 2d 72 65 73  Codes error -res
234d0 75 6c 74 20 7b 62 61 64 20 41 53 43 49 49 20 63  ult {bad ASCII c
234e0 68 61 72 61 63 74 65 72 20 30 78 34 7d 0a 74 65  haracter 0x4}.te
234f0 73 74 20 62 69 6e 64 2d 32 35 2e 38 20 7b 50 61  st bind-25.8 {Pa
23500 72 73 65 45 76 65 6e 74 44 65 73 63 72 69 70 74  rseEventDescript
23510 69 6f 6e 20 70 72 6f 63 65 64 75 72 65 20 65 72  ion procedure er
23520 72 6f 72 20 63 61 73 65 73 7d 20 2d 62 6f 64 79  ror cases} -body
23530 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 20 3c   {.    bind .t <
23540 3c 3e 3e 20 20 7b 70 75 74 73 20 68 69 7d 0a 7d  <>>  {puts hi}.}
23550 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65 72   -returnCodes er
23560 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 76 69 72  ror -result {vir
23570 74 75 61 6c 20 65 76 65 6e 74 20 22 3c 3c 3e 3e  tual event "<<>>
23580 22 20 69 73 20 62 61 64 6c 79 20 66 6f 72 6d 65  " is badly forme
23590 64 7d 0a 74 65 73 74 20 62 69 6e 64 2d 32 35 2e  d}.test bind-25.
235a0 39 20 7b 50 61 72 73 65 45 76 65 6e 74 44 65 73  9 {ParseEventDes
235b0 63 72 69 70 74 69 6f 6e 20 70 72 6f 63 65 64 75  cription procedu
235c0 72 65 20 65 72 72 6f 72 20 63 61 73 65 73 7d 20  re error cases} 
235d0 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64  -body {.    bind
235e0 20 2e 74 20 3c 3c 50 61 73 74 65 20 20 7b 70 75   .t <<Paste  {pu
235f0 74 73 20 68 69 7d 0a 7d 20 2d 72 65 74 75 72 6e  ts hi}.} -return
23600 43 6f 64 65 73 20 65 72 72 6f 72 20 2d 72 65 73  Codes error -res
23610 75 6c 74 20 7b 6d 69 73 73 69 6e 67 20 22 3e 22  ult {missing ">"
23620 20 69 6e 20 76 69 72 74 75 61 6c 20 62 69 6e 64   in virtual bind
23630 69 6e 67 7d 0a 74 65 73 74 20 62 69 6e 64 2d 32  ing}.test bind-2
23640 35 2e 31 30 20 7b 50 61 72 73 65 45 76 65 6e 74  5.10 {ParseEvent
23650 44 65 73 63 72 69 70 74 69 6f 6e 20 70 72 6f 63  Description proc
23660 65 64 75 72 65 20 65 72 72 6f 72 20 63 61 73 65  edure error case
23670 73 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62  s} -body {.    b
23680 69 6e 64 20 2e 74 20 3c 3c 50 61 73 74 65 3e 20  ind .t <<Paste> 
23690 20 7b 70 75 74 73 20 68 69 7d 0a 7d 20 2d 72 65   {puts hi}.} -re
236a0 74 75 72 6e 43 6f 64 65 73 20 65 72 72 6f 72 20  turnCodes error 
236b0 2d 72 65 73 75 6c 74 20 7b 6d 69 73 73 69 6e 67  -result {missing
236c0 20 22 3e 22 20 69 6e 20 76 69 72 74 75 61 6c 20   ">" in virtual 
236d0 62 69 6e 64 69 6e 67 7d 0a 74 65 73 74 20 62 69  binding}.test bi
236e0 6e 64 2d 32 35 2e 31 31 20 7b 50 61 72 73 65 45  nd-25.11 {ParseE
236f0 76 65 6e 74 44 65 73 63 72 69 70 74 69 6f 6e 20  ventDescription 
23700 70 72 6f 63 65 64 75 72 65 20 65 72 72 6f 72 20  procedure error 
23710 63 61 73 65 73 7d 20 2d 62 6f 64 79 20 7b 0a 20  cases} -body {. 
23720 20 20 20 62 69 6e 64 20 2e 74 20 3c 3c 50 61 73     bind .t <<Pas
23730 74 65 3e 3e 68 20 20 7b 70 75 74 73 20 68 69 7d  te>>h  {puts hi}
23740 0a 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20  .} -returnCodes 
23750 65 72 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 76  error -result {v
23760 69 72 74 75 61 6c 20 65 76 65 6e 74 73 20 6d 61  irtual events ma
23770 79 20 6e 6f 74 20 62 65 20 63 6f 6d 70 6f 73 65  y not be compose
23780 64 7d 0a 74 65 73 74 20 62 69 6e 64 2d 32 35 2e  d}.test bind-25.
23790 31 32 20 7b 50 61 72 73 65 45 76 65 6e 74 44 65  12 {ParseEventDe
237a0 73 63 72 69 70 74 69 6f 6e 20 70 72 6f 63 65 64  scription proced
237b0 75 72 65 20 65 72 72 6f 72 20 63 61 73 65 73 7d  ure error cases}
237c0 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
237d0 64 20 2e 74 20 3c 3e 20 20 7b 70 75 74 73 20 68  d .t <>  {puts h
237e0 69 7d 0a 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65  i}.} -returnCode
237f0 73 20 65 72 72 6f 72 20 2d 72 65 73 75 6c 74 20  s error -result 
23800 7b 6e 6f 20 65 76 65 6e 74 20 74 79 70 65 20 6f  {no event type o
23810 72 20 62 75 74 74 6f 6e 20 23 20 6f 72 20 6b 65  r button # or ke
23820 79 73 79 6d 7d 0a 74 65 73 74 20 62 69 6e 64 2d  ysym}.test bind-
23830 32 35 2e 31 33 20 7b 50 61 72 73 65 45 76 65 6e  25.13 {ParseEven
23840 74 44 65 73 63 72 69 70 74 69 6f 6e 20 70 72 6f  tDescription pro
23850 63 65 64 75 72 65 20 65 72 72 6f 72 20 63 61 73  cedure error cas
23860 65 73 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  es} -body {.    
23870 62 69 6e 64 20 2e 74 20 3c 61 2d 2d 20 20 7b 70  bind .t <a--  {p
23880 75 74 73 20 68 69 7d 0a 7d 20 2d 72 65 74 75 72  uts hi}.} -retur
23890 6e 43 6f 64 65 73 20 65 72 72 6f 72 20 2d 72 65  nCodes error -re
238a0 73 75 6c 74 20 7b 6d 69 73 73 69 6e 67 20 22 3e  sult {missing ">
238b0 22 20 69 6e 20 62 69 6e 64 69 6e 67 7d 0a 74 65  " in binding}.te
238c0 73 74 20 62 69 6e 64 2d 32 35 2e 31 34 20 7b 50  st bind-25.14 {P
238d0 61 72 73 65 45 76 65 6e 74 44 65 73 63 72 69 70  arseEventDescrip
238e0 74 69 6f 6e 20 70 72 6f 63 65 64 75 72 65 20 65  tion procedure e
238f0 72 72 6f 72 20 63 61 73 65 73 7d 20 2d 62 6f 64  rror cases} -bod
23900 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 20  y {.    bind .t 
23910 3c 61 2d 62 3e 20 7b 70 75 74 73 20 68 69 7d 0a  <a-b> {puts hi}.
23920 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65  } -returnCodes e
23930 72 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 65 78  rror -result {ex
23940 74 72 61 20 63 68 61 72 61 63 74 65 72 73 20 61  tra characters a
23950 66 74 65 72 20 64 65 74 61 69 6c 20 69 6e 20 62  fter detail in b
23960 69 6e 64 69 6e 67 7d 0a 74 65 73 74 20 62 69 6e  inding}.test bin
23970 64 2d 32 35 2e 31 35 20 7b 50 61 72 73 65 45 76  d-25.15 {ParseEv
23980 65 6e 74 44 65 73 63 72 69 70 74 69 6f 6e 20 70  entDescription p
23990 72 6f 63 65 64 75 72 65 20 65 72 72 6f 72 20 63  rocedure error c
239a0 61 73 65 73 7d 20 2d 62 6f 64 79 20 7b 0a 20 20  ases} -body {.  
239b0 20 20 62 69 6e 64 20 2e 74 20 3c 3c 61 62 63 20    bind .t <<abc 
239c0 20 20 7b 70 75 74 73 20 68 69 7d 0a 7d 20 2d 72    {puts hi}.} -r
239d0 65 74 75 72 6e 43 6f 64 65 73 20 65 72 72 6f 72  eturnCodes error
239e0 20 2d 72 65 73 75 6c 74 20 7b 6d 69 73 73 69 6e   -result {missin
239f0 67 20 22 3e 22 20 69 6e 20 76 69 72 74 75 61 6c  g ">" in virtual
23a00 20 62 69 6e 64 69 6e 67 7d 0a 74 65 73 74 20 62   binding}.test b
23a10 69 6e 64 2d 32 35 2e 31 36 20 7b 50 61 72 73 65  ind-25.16 {Parse
23a20 45 76 65 6e 74 44 65 73 63 72 69 70 74 69 6f 6e  EventDescription
23a30 20 70 72 6f 63 65 64 75 72 65 20 65 72 72 6f 72   procedure error
23a40 20 63 61 73 65 73 7d 20 2d 62 6f 64 79 20 7b 0a   cases} -body {.
23a50 20 20 20 20 62 69 6e 64 20 2e 74 20 3c 3c 61 62      bind .t <<ab
23a60 63 3e 20 20 7b 70 75 74 73 20 68 69 7d 0a 7d 20  c>  {puts hi}.} 
23a70 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65 72 72  -returnCodes err
23a80 6f 72 20 2d 72 65 73 75 6c 74 20 7b 6d 69 73 73  or -result {miss
23a90 69 6e 67 20 22 3e 22 20 69 6e 20 76 69 72 74 75  ing ">" in virtu
23aa0 61 6c 20 62 69 6e 64 69 6e 67 7d 0a 74 65 73 74  al binding}.test
23ab0 20 62 69 6e 64 2d 32 35 2e 31 37 20 7b 50 61 72   bind-25.17 {Par
23ac0 73 65 45 76 65 6e 74 44 65 73 63 72 69 70 74 69  seEventDescripti
23ad0 6f 6e 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  on} -body {.    
23ae0 65 76 65 6e 74 20 61 64 64 20 3c 3c 78 79 7a 3e  event add <<xyz>
23af0 3e 20 3c 3c 61 62 63 3e 3e 0a 7d 20 2d 72 65 74  > <<abc>>.} -ret
23b00 75 72 6e 43 6f 64 65 73 20 65 72 72 6f 72 20 2d  urnCodes error -
23b10 72 65 73 75 6c 74 20 7b 76 69 72 74 75 61 6c 20  result {virtual 
23b20 65 76 65 6e 74 20 6e 6f 74 20 61 6c 6c 6f 77 65  event not allowe
23b30 64 20 69 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  d in definition 
23b40 6f 66 20 61 6e 6f 74 68 65 72 20 76 69 72 74 75  of another virtu
23b50 61 6c 20 65 76 65 6e 74 7d 0a 0a 23 20 4d 6f 64  al event}..# Mod
23b60 69 66 69 65 72 20 63 61 6e 6f 6e 69 63 61 6c 69  ifier canonicali
23b70 7a 61 74 69 6f 6e 20 74 65 73 74 73 0a 0a 74 65  zation tests..te
23b80 73 74 20 62 69 6e 64 2d 32 35 2e 31 38 20 7b 6d  st bind-25.18 {m
23b90 6f 64 69 66 69 65 72 20 6e 61 6d 65 73 7d 20 2d  odifier names} -
23ba0 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d  setup {.    fram
23bb0 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65  e .t.f -class Te
23bc0 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68  st -width 150 -h
23bd0 65 69 67 68 74 20 31 30 30 0a 7d 20 2d 62 6f 64  eight 100.} -bod
23be0 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  y {.    bind .t.
23bf0 66 20 7b 3c 43 6f 6e 74 72 6f 6c 2d 20 61 3e 7d  f {<Control- a>}
23c00 20 66 6f 6f 0a 20 20 20 20 62 69 6e 64 20 2e 74   foo.    bind .t
23c10 2e 66 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a  .f.} -cleanup {.
23c20 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66      destroy .t.f
23c30 0a 7d 20 2d 72 65 73 75 6c 74 20 3c 43 6f 6e 74  .} -result <Cont
23c40 72 6f 6c 2d 4b 65 79 2d 61 3e 0a 0a 74 65 73 74  rol-Key-a>..test
23c50 20 62 69 6e 64 2d 32 35 2e 31 39 20 7b 6d 6f 64   bind-25.19 {mod
23c60 69 66 69 65 72 20 6e 61 6d 65 73 7d 20 2d 73 65  ifier names} -se
23c70 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20  tup {.    frame 
23c80 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74  .t.f -class Test
23c90 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69   -width 150 -hei
23ca0 67 68 74 20 31 30 30 0a 7d 20 2d 62 6f 64 79 20  ght 100.} -body 
23cb0 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20  {.    bind .t.f 
23cc0 3c 53 68 69 66 74 2d 61 3e 20 66 6f 6f 0a 20 20  <Shift-a> foo.  
23cd0 20 20 62 69 6e 64 20 2e 74 2e 66 0a 7d 20 2d 63    bind .t.f.} -c
23ce0 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73  leanup {.    des
23cf0 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73  troy .t.f.} -res
23d00 75 6c 74 20 3c 53 68 69 66 74 2d 4b 65 79 2d 61  ult <Shift-Key-a
23d10 3e 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 35 2e  >..test bind-25.
23d20 32 30 20 7b 6d 6f 64 69 66 69 65 72 20 6e 61 6d  20 {modifier nam
23d30 65 73 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20  es} -setup {.   
23d40 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61   frame .t.f -cla
23d50 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
23d60 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 7d  50 -height 100.}
23d70 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
23d80 64 20 2e 74 2e 66 20 3c 4c 6f 63 6b 2d 61 3e 20  d .t.f <Lock-a> 
23d90 66 6f 6f 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  foo.    bind .t.
23da0 66 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  f.} -cleanup {. 
23db0 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
23dc0 7d 20 2d 72 65 73 75 6c 74 20 3c 4c 6f 63 6b 2d  } -result <Lock-
23dd0 4b 65 79 2d 61 3e 0a 0a 74 65 73 74 20 62 69 6e  Key-a>..test bin
23de0 64 2d 32 35 2e 32 31 20 7b 6d 6f 64 69 66 69 65  d-25.21 {modifie
23df0 72 20 6e 61 6d 65 73 7d 20 2d 73 65 74 75 70 20  r names} -setup 
23e00 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66  {.    frame .t.f
23e10 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69   -class Test -wi
23e20 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20  dth 150 -height 
23e30 31 30 30 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20  100.} -body {.  
23e40 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 4d 65 74    bind .t.f <Met
23e50 61 2d 2d 2d 61 3e 20 66 6f 6f 0a 20 20 20 20 62  a---a> foo.    b
23e60 69 6e 64 20 2e 74 2e 66 0a 7d 20 2d 63 6c 65 61  ind .t.f.} -clea
23e70 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f  nup {.    destro
23e80 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74  y .t.f.} -result
23e90 20 3c 4d 65 74 61 2d 4b 65 79 2d 61 3e 0a 0a 74   <Meta-Key-a>..t
23ea0 65 73 74 20 62 69 6e 64 2d 32 35 2e 32 32 20 7b  est bind-25.22 {
23eb0 6d 6f 64 69 66 69 65 72 20 6e 61 6d 65 73 7d 20  modifier names} 
23ec0 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61  -setup {.    fra
23ed0 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54  me .t.f -class T
23ee0 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d  est -width 150 -
23ef0 68 65 69 67 68 74 20 31 30 30 0a 7d 20 2d 62 6f  height 100.} -bo
23f00 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74  dy {.    bind .t
23f10 2e 66 20 3c 4d 2d 61 3e 20 66 6f 6f 0a 20 20 20  .f <M-a> foo.   
23f20 20 62 69 6e 64 20 2e 74 2e 66 0a 7d 20 2d 63 6c   bind .t.f.} -cl
23f30 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74  eanup {.    dest
23f40 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75  roy .t.f.} -resu
23f50 6c 74 20 3c 4d 65 74 61 2d 4b 65 79 2d 61 3e 0a  lt <Meta-Key-a>.
23f60 0a 74 65 73 74 20 62 69 6e 64 2d 32 35 2e 32 33  .test bind-25.23
23f70 20 7b 6d 6f 64 69 66 69 65 72 20 6e 61 6d 65 73   {modifier names
23f80 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66  } -setup {.    f
23f90 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73  rame .t.f -class
23fa0 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30   Test -width 150
23fb0 20 2d 68 65 69 67 68 74 20 31 30 30 0a 7d 20 2d   -height 100.} -
23fc0 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20  body {.    bind 
23fd0 2e 74 2e 66 20 3c 41 6c 74 2d 61 3e 20 66 6f 6f  .t.f <Alt-a> foo
23fe0 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 0a 7d  .    bind .t.f.}
23ff0 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
24000 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d  destroy .t.f.} -
24010 72 65 73 75 6c 74 20 3c 41 6c 74 2d 4b 65 79 2d  result <Alt-Key-
24020 61 3e 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 35  a>..test bind-25
24030 2e 32 34 20 7b 6d 6f 64 69 66 69 65 72 20 6e 61  .24 {modifier na
24040 6d 65 73 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20  mes} -setup {.  
24050 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c    frame .t.f -cl
24060 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20  ass Test -width 
24070 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a  150 -height 100.
24080 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
24090 6e 64 20 2e 74 2e 66 20 3c 42 31 2d 61 3e 20 66  nd .t.f <B1-a> f
240a0 6f 6f 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66  oo.    bind .t.f
240b0 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
240c0 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d    destroy .t.f.}
240d0 20 2d 72 65 73 75 6c 74 20 3c 42 31 2d 4b 65 79   -result <B1-Key
240e0 2d 61 3e 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32  -a>..test bind-2
240f0 35 2e 32 35 20 7b 6d 6f 64 69 66 69 65 72 20 6e  5.25 {modifier n
24100 61 6d 65 73 7d 20 2d 73 65 74 75 70 20 7b 0a 20  ames} -setup {. 
24110 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63     frame .t.f -c
24120 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
24130 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
24140 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62  .} -body {.    b
24150 69 6e 64 20 2e 74 2e 66 20 3c 42 32 2d 61 3e 20  ind .t.f <B2-a> 
24160 66 6f 6f 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  foo.    bind .t.
24170 66 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  f.} -cleanup {. 
24180 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
24190 7d 20 2d 72 65 73 75 6c 74 20 3c 42 32 2d 4b 65  } -result <B2-Ke
241a0 79 2d 61 3e 0a 0a 74 65 73 74 20 62 69 6e 64 2d  y-a>..test bind-
241b0 32 35 2e 32 36 20 7b 6d 6f 64 69 66 69 65 72 20  25.26 {modifier 
241c0 6e 61 6d 65 73 7d 20 2d 73 65 74 75 70 20 7b 0a  names} -setup {.
241d0 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d      frame .t.f -
241e0 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74  class Test -widt
241f0 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30  h 150 -height 10
24200 30 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  0.} -body {.    
24210 62 69 6e 64 20 2e 74 2e 66 20 3c 42 33 2d 61 3e  bind .t.f <B3-a>
24220 20 66 6f 6f 0a 20 20 20 20 62 69 6e 64 20 2e 74   foo.    bind .t
24230 2e 66 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a  .f.} -cleanup {.
24240 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66      destroy .t.f
24250 0a 7d 20 2d 72 65 73 75 6c 74 20 3c 42 33 2d 4b  .} -result <B3-K
24260 65 79 2d 61 3e 0a 0a 74 65 73 74 20 62 69 6e 64  ey-a>..test bind
24270 2d 32 35 2e 32 37 20 7b 6d 6f 64 69 66 69 65 72  -25.27 {modifier
24280 20 6e 61 6d 65 73 7d 20 2d 73 65 74 75 70 20 7b   names} -setup {
24290 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
242a0 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
242b0 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
242c0 30 30 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20  00.} -body {.   
242d0 20 62 69 6e 64 20 2e 74 2e 66 20 3c 42 34 2d 61   bind .t.f <B4-a
242e0 3e 20 66 6f 6f 0a 20 20 20 20 62 69 6e 64 20 2e  > foo.    bind .
242f0 74 2e 66 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  t.f.} -cleanup {
24300 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e  .    destroy .t.
24310 66 0a 7d 20 2d 72 65 73 75 6c 74 20 3c 42 34 2d  f.} -result <B4-
24320 4b 65 79 2d 61 3e 0a 0a 74 65 73 74 20 62 69 6e  Key-a>..test bin
24330 64 2d 32 35 2e 32 38 20 7b 6d 6f 64 69 66 69 65  d-25.28 {modifie
24340 72 20 6e 61 6d 65 73 7d 20 2d 73 65 74 75 70 20  r names} -setup 
24350 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66  {.    frame .t.f
24360 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69   -class Test -wi
24370 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20  dth 150 -height 
24380 31 30 30 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20  100.} -body {.  
24390 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 42 35 2d    bind .t.f <B5-
243a0 61 3e 20 66 6f 6f 0a 20 20 20 20 62 69 6e 64 20  a> foo.    bind 
243b0 2e 74 2e 66 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  .t.f.} -cleanup 
243c0 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74  {.    destroy .t
243d0 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 3c 42 35  .f.} -result <B5
243e0 2d 4b 65 79 2d 61 3e 0a 0a 74 65 73 74 20 62 69  -Key-a>..test bi
243f0 6e 64 2d 32 35 2e 32 39 20 7b 6d 6f 64 69 66 69  nd-25.29 {modifi
24400 65 72 20 6e 61 6d 65 73 7d 20 2d 73 65 74 75 70  er names} -setup
24410 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e   {.    frame .t.
24420 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77  f -class Test -w
24430 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74  idth 150 -height
24440 20 31 30 30 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20   100.} -body {. 
24450 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 42 75     bind .t.f <Bu
24460 74 74 6f 6e 31 2d 61 3e 20 66 6f 6f 0a 20 20 20  tton1-a> foo.   
24470 20 62 69 6e 64 20 2e 74 2e 66 0a 7d 20 2d 63 6c   bind .t.f.} -cl
24480 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74  eanup {.    dest
24490 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75  roy .t.f.} -resu
244a0 6c 74 20 3c 42 31 2d 4b 65 79 2d 61 3e 0a 0a 74  lt <B1-Key-a>..t
244b0 65 73 74 20 62 69 6e 64 2d 32 35 2e 33 30 20 7b  est bind-25.30 {
244c0 6d 6f 64 69 66 69 65 72 20 6e 61 6d 65 73 7d 20  modifier names} 
244d0 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61  -setup {.    fra
244e0 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54  me .t.f -class T
244f0 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d  est -width 150 -
24500 68 65 69 67 68 74 20 31 30 30 0a 7d 20 2d 62 6f  height 100.} -bo
24510 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74  dy {.    bind .t
24520 2e 66 20 3c 42 75 74 74 6f 6e 32 2d 61 3e 20 66  .f <Button2-a> f
24530 6f 6f 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66  oo.    bind .t.f
24540 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
24550 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d    destroy .t.f.}
24560 20 2d 72 65 73 75 6c 74 20 3c 42 32 2d 4b 65 79   -result <B2-Key
24570 2d 61 3e 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32  -a>..test bind-2
24580 35 2e 33 31 20 7b 6d 6f 64 69 66 69 65 72 20 6e  5.31 {modifier n
24590 61 6d 65 73 7d 20 2d 73 65 74 75 70 20 7b 0a 20  ames} -setup {. 
245a0 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63     frame .t.f -c
245b0 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
245c0 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
245d0 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62  .} -body {.    b
245e0 69 6e 64 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e  ind .t.f <Button
245f0 33 2d 61 3e 20 66 6f 6f 0a 20 20 20 20 62 69 6e  3-a> foo.    bin
24600 64 20 2e 74 2e 66 0a 7d 20 2d 63 6c 65 61 6e 75  d .t.f.} -cleanu
24610 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20  p {.    destroy 
24620 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 3c  .t.f.} -result <
24630 42 33 2d 4b 65 79 2d 61 3e 0a 0a 74 65 73 74 20  B3-Key-a>..test 
24640 62 69 6e 64 2d 32 35 2e 33 32 20 7b 6d 6f 64 69  bind-25.32 {modi
24650 66 69 65 72 20 6e 61 6d 65 73 7d 20 2d 73 65 74  fier names} -set
24660 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e  up {.    frame .
24670 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20  t.f -class Test 
24680 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67  -width 150 -heig
24690 68 74 20 31 30 30 0a 7d 20 2d 62 6f 64 79 20 7b  ht 100.} -body {
246a0 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c  .    bind .t.f <
246b0 42 75 74 74 6f 6e 34 2d 61 3e 20 66 6f 6f 0a 20  Button4-a> foo. 
246c0 20 20 20 62 69 6e 64 20 2e 74 2e 66 0a 7d 20 2d     bind .t.f.} -
246d0 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
246e0 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
246f0 73 75 6c 74 20 3c 42 34 2d 4b 65 79 2d 61 3e 0a  sult <B4-Key-a>.
24700 0a 74 65 73 74 20 62 69 6e 64 2d 32 35 2e 33 33  .test bind-25.33
24710 20 7b 6d 6f 64 69 66 69 65 72 20 6e 61 6d 65 73   {modifier names
24720 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66  } -setup {.    f
24730 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73  rame .t.f -class
24740 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30   Test -width 150
24750 20 2d 68 65 69 67 68 74 20 31 30 30 0a 7d 20 2d   -height 100.} -
24760 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20  body {.    bind 
24770 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 35 2d 61 3e  .t.f <Button5-a>
24780 20 66 6f 6f 0a 20 20 20 20 62 69 6e 64 20 2e 74   foo.    bind .t
24790 2e 66 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a  .f.} -cleanup {.
247a0 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66      destroy .t.f
247b0 0a 7d 20 2d 72 65 73 75 6c 74 20 3c 42 35 2d 4b  .} -result <B5-K
247c0 65 79 2d 61 3e 0a 0a 74 65 73 74 20 62 69 6e 64  ey-a>..test bind
247d0 2d 32 35 2e 33 34 20 7b 6d 6f 64 69 66 69 65 72  -25.34 {modifier
247e0 20 6e 61 6d 65 73 7d 20 2d 73 65 74 75 70 20 7b   names} -setup {
247f0 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
24800 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
24810 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
24820 30 30 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20  00.} -body {.   
24830 20 62 69 6e 64 20 2e 74 2e 66 20 3c 4d 31 2d 61   bind .t.f <M1-a
24840 3e 20 66 6f 6f 0a 20 20 20 20 62 69 6e 64 20 2e  > foo.    bind .
24850 74 2e 66 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  t.f.} -cleanup {
24860 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e  .    destroy .t.
24870 66 0a 7d 20 2d 72 65 73 75 6c 74 20 3c 4d 6f 64  f.} -result <Mod
24880 31 2d 4b 65 79 2d 61 3e 0a 0a 74 65 73 74 20 62  1-Key-a>..test b
24890 69 6e 64 2d 32 35 2e 33 35 20 7b 6d 6f 64 69 66  ind-25.35 {modif
248a0 69 65 72 20 6e 61 6d 65 73 7d 20 2d 73 65 74 75  ier names} -setu
248b0 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74  p {.    frame .t
248c0 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d  .f -class Test -
248d0 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68  width 150 -heigh
248e0 74 20 31 30 30 0a 7d 20 2d 62 6f 64 79 20 7b 0a  t 100.} -body {.
248f0 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 4d      bind .t.f <M
24900 32 2d 61 3e 20 66 6f 6f 0a 20 20 20 20 62 69 6e  2-a> foo.    bin
24910 64 20 2e 74 2e 66 0a 7d 20 2d 63 6c 65 61 6e 75  d .t.f.} -cleanu
24920 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20  p {.    destroy 
24930 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 3c  .t.f.} -result <
24940 4d 6f 64 32 2d 4b 65 79 2d 61 3e 0a 0a 74 65 73  Mod2-Key-a>..tes
24950 74 20 62 69 6e 64 2d 32 35 2e 33 36 20 7b 6d 6f  t bind-25.36 {mo
24960 64 69 66 69 65 72 20 6e 61 6d 65 73 7d 20 2d 73  difier names} -s
24970 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65  etup {.    frame
24980 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73   .t.f -class Tes
24990 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65  t -width 150 -he
249a0 69 67 68 74 20 31 30 30 0a 7d 20 2d 62 6f 64 79  ight 100.} -body
249b0 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66   {.    bind .t.f
249c0 20 3c 4d 33 2d 61 3e 20 66 6f 6f 0a 20 20 20 20   <M3-a> foo.    
249d0 62 69 6e 64 20 2e 74 2e 66 0a 7d 20 2d 63 6c 65  bind .t.f.} -cle
249e0 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72  anup {.    destr
249f0 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c  oy .t.f.} -resul
24a00 74 20 3c 4d 6f 64 33 2d 4b 65 79 2d 61 3e 0a 0a  t <Mod3-Key-a>..
24a10 74 65 73 74 20 62 69 6e 64 2d 32 35 2e 33 37 20  test bind-25.37 
24a20 7b 6d 6f 64 69 66 69 65 72 20 6e 61 6d 65 73 7d  {modifier names}
24a30 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72   -setup {.    fr
24a40 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20  ame .t.f -class 
24a50 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20  Test -width 150 
24a60 2d 68 65 69 67 68 74 20 31 30 30 0a 7d 20 2d 62  -height 100.} -b
24a70 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e  ody {.    bind .
24a80 74 2e 66 20 3c 4d 34 2d 61 3e 20 66 6f 6f 0a 20  t.f <M4-a> foo. 
24a90 20 20 20 62 69 6e 64 20 2e 74 2e 66 0a 7d 20 2d     bind .t.f.} -
24aa0 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
24ab0 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
24ac0 73 75 6c 74 20 3c 4d 6f 64 34 2d 4b 65 79 2d 61  sult <Mod4-Key-a
24ad0 3e 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 35 2e  >..test bind-25.
24ae0 33 38 20 7b 6d 6f 64 69 66 69 65 72 20 6e 61 6d  38 {modifier nam
24af0 65 73 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20  es} -setup {.   
24b00 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61   frame .t.f -cla
24b10 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
24b20 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 7d  50 -height 100.}
24b30 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
24b40 64 20 2e 74 2e 66 20 3c 4d 35 2d 61 3e 20 66 6f  d .t.f <M5-a> fo
24b50 6f 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 0a  o.    bind .t.f.
24b60 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20  } -cleanup {.   
24b70 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20   destroy .t.f.} 
24b80 2d 72 65 73 75 6c 74 20 3c 4d 6f 64 35 2d 4b 65  -result <Mod5-Ke
24b90 79 2d 61 3e 0a 0a 74 65 73 74 20 62 69 6e 64 2d  y-a>..test bind-
24ba0 32 35 2e 33 39 20 7b 6d 6f 64 69 66 69 65 72 20  25.39 {modifier 
24bb0 6e 61 6d 65 73 7d 20 2d 73 65 74 75 70 20 7b 0a  names} -setup {.
24bc0 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d      frame .t.f -
24bd0 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74  class Test -widt
24be0 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30  h 150 -height 10
24bf0 30 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  0.} -body {.    
24c00 62 69 6e 64 20 2e 74 2e 66 20 3c 4d 6f 64 31 2d  bind .t.f <Mod1-
24c10 61 3e 20 66 6f 6f 0a 20 20 20 20 62 69 6e 64 20  a> foo.    bind 
24c20 2e 74 2e 66 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  .t.f.} -cleanup 
24c30 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74  {.    destroy .t
24c40 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 3c 4d 6f  .f.} -result <Mo
24c50 64 31 2d 4b 65 79 2d 61 3e 0a 0a 74 65 73 74 20  d1-Key-a>..test 
24c60 62 69 6e 64 2d 32 35 2e 34 30 20 7b 6d 6f 64 69  bind-25.40 {modi
24c70 66 69 65 72 20 6e 61 6d 65 73 7d 20 2d 73 65 74  fier names} -set
24c80 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e  up {.    frame .
24c90 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20  t.f -class Test 
24ca0 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67  -width 150 -heig
24cb0 68 74 20 31 30 30 0a 7d 20 2d 62 6f 64 79 20 7b  ht 100.} -body {
24cc0 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c  .    bind .t.f <
24cd0 4d 6f 64 32 2d 61 3e 20 66 6f 6f 0a 20 20 20 20  Mod2-a> foo.    
24ce0 62 69 6e 64 20 2e 74 2e 66 0a 7d 20 2d 63 6c 65  bind .t.f.} -cle
24cf0 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72  anup {.    destr
24d00 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c  oy .t.f.} -resul
24d10 74 20 3c 4d 6f 64 32 2d 4b 65 79 2d 61 3e 0a 0a  t <Mod2-Key-a>..
24d20 74 65 73 74 20 62 69 6e 64 2d 32 35 2e 34 31 20  test bind-25.41 
24d30 7b 6d 6f 64 69 66 69 65 72 20 6e 61 6d 65 73 7d  {modifier names}
24d40 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72   -setup {.    fr
24d50 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20  ame .t.f -class 
24d60 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20  Test -width 150 
24d70 2d 68 65 69 67 68 74 20 31 30 30 0a 7d 20 2d 62  -height 100.} -b
24d80 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e  ody {.    bind .
24d90 74 2e 66 20 3c 4d 6f 64 33 2d 61 3e 20 66 6f 6f  t.f <Mod3-a> foo
24da0 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 0a 7d  .    bind .t.f.}
24db0 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
24dc0 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d  destroy .t.f.} -
24dd0 72 65 73 75 6c 74 20 3c 4d 6f 64 33 2d 4b 65 79  result <Mod3-Key
24de0 2d 61 3e 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32  -a>..test bind-2
24df0 35 2e 34 32 20 7b 6d 6f 64 69 66 69 65 72 20 6e  5.42 {modifier n
24e00 61 6d 65 73 7d 20 2d 73 65 74 75 70 20 7b 0a 20  ames} -setup {. 
24e10 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63     frame .t.f -c
24e20 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
24e30 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
24e40 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62  .} -body {.    b
24e50 69 6e 64 20 2e 74 2e 66 20 3c 4d 6f 64 34 2d 61  ind .t.f <Mod4-a
24e60 3e 20 66 6f 6f 0a 20 20 20 20 62 69 6e 64 20 2e  > foo.    bind .
24e70 74 2e 66 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  t.f.} -cleanup {
24e80 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e  .    destroy .t.
24e90 66 0a 7d 20 2d 72 65 73 75 6c 74 20 3c 4d 6f 64  f.} -result <Mod
24ea0 34 2d 4b 65 79 2d 61 3e 0a 0a 74 65 73 74 20 62  4-Key-a>..test b
24eb0 69 6e 64 2d 32 35 2e 34 33 20 7b 6d 6f 64 69 66  ind-25.43 {modif
24ec0 69 65 72 20 6e 61 6d 65 73 7d 20 2d 73 65 74 75  ier names} -setu
24ed0 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74  p {.    frame .t
24ee0 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d  .f -class Test -
24ef0 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68  width 150 -heigh
24f00 74 20 31 30 30 0a 7d 20 2d 62 6f 64 79 20 7b 0a  t 100.} -body {.
24f10 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 4d      bind .t.f <M
24f20 6f 64 35 2d 61 3e 20 66 6f 6f 0a 20 20 20 20 62  od5-a> foo.    b
24f30 69 6e 64 20 2e 74 2e 66 0a 7d 20 2d 63 6c 65 61  ind .t.f.} -clea
24f40 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f  nup {.    destro
24f50 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74  y .t.f.} -result
24f60 20 3c 4d 6f 64 35 2d 4b 65 79 2d 61 3e 0a 0a 74   <Mod5-Key-a>..t
24f70 65 73 74 20 62 69 6e 64 2d 32 35 2e 34 34 20 7b  est bind-25.44 {
24f80 6d 6f 64 69 66 69 65 72 20 6e 61 6d 65 73 7d 20  modifier names} 
24f90 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61  -setup {.    fra
24fa0 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54  me .t.f -class T
24fb0 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d  est -width 150 -
24fc0 68 65 69 67 68 74 20 31 30 30 0a 7d 20 2d 62 6f  height 100.} -bo
24fd0 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74  dy {.    bind .t
24fe0 2e 66 20 3c 44 6f 75 62 6c 65 2d 61 3e 20 66 6f  .f <Double-a> fo
24ff0 6f 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 0a  o.    bind .t.f.
25000 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20  } -cleanup {.   
25010 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20   destroy .t.f.} 
25020 2d 72 65 73 75 6c 74 20 3c 44 6f 75 62 6c 65 2d  -result <Double-
25030 4b 65 79 2d 61 3e 0a 0a 74 65 73 74 20 62 69 6e  Key-a>..test bin
25040 64 2d 32 35 2e 34 35 20 7b 6d 6f 64 69 66 69 65  d-25.45 {modifie
25050 72 20 6e 61 6d 65 73 7d 20 2d 73 65 74 75 70 20  r names} -setup 
25060 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66  {.    frame .t.f
25070 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69   -class Test -wi
25080 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20  dth 150 -height 
25090 31 30 30 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20  100.} -body {.  
250a0 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 54 72 69    bind .t.f <Tri
250b0 70 6c 65 2d 61 3e 20 66 6f 6f 0a 20 20 20 20 62  ple-a> foo.    b
250c0 69 6e 64 20 2e 74 2e 66 0a 7d 20 2d 63 6c 65 61  ind .t.f.} -clea
250d0 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f  nup {.    destro
250e0 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74  y .t.f.} -result
250f0 20 3c 54 72 69 70 6c 65 2d 4b 65 79 2d 61 3e 0a   <Triple-Key-a>.
25100 0a 74 65 73 74 20 62 69 6e 64 2d 32 35 2e 34 36  .test bind-25.46
25110 20 7b 6d 6f 64 69 66 69 65 72 20 6e 61 6d 65 73   {modifier names
25120 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66  } -setup {.    f
25130 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73  rame .t.f -class
25140 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30   Test -width 150
25150 20 2d 68 65 69 67 68 74 20 31 30 30 0a 7d 20 2d   -height 100.} -
25160 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20  body {.    bind 
25170 2e 74 2e 66 20 7b 3c 44 6f 75 62 6c 65 20 31 3e  .t.f {<Double 1>
25180 7d 20 66 6f 6f 0a 20 20 20 20 62 69 6e 64 20 2e  } foo.    bind .
25190 74 2e 66 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  t.f.} -cleanup {
251a0 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e  .    destroy .t.
251b0 66 0a 7d 20 2d 72 65 73 75 6c 74 20 3c 44 6f 75  f.} -result <Dou
251c0 62 6c 65 2d 42 75 74 74 6f 6e 2d 31 3e 0a 0a 74  ble-Button-1>..t
251d0 65 73 74 20 62 69 6e 64 2d 32 35 2e 34 37 20 7b  est bind-25.47 {
251e0 6d 6f 64 69 66 69 65 72 20 6e 61 6d 65 73 7d 20  modifier names} 
251f0 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61  -setup {.    fra
25200 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54  me .t.f -class T
25210 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d  est -width 150 -
25220 68 65 69 67 68 74 20 31 30 30 0a 7d 20 2d 62 6f  height 100.} -bo
25230 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74  dy {.    bind .t
25240 2e 66 20 3c 54 72 69 70 6c 65 2d 31 3e 20 66 6f  .f <Triple-1> fo
25250 6f 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 0a  o.    bind .t.f.
25260 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20  } -cleanup {.   
25270 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20   destroy .t.f.} 
25280 2d 72 65 73 75 6c 74 20 3c 54 72 69 70 6c 65 2d  -result <Triple-
25290 42 75 74 74 6f 6e 2d 31 3e 0a 0a 74 65 73 74 20  Button-1>..test 
252a0 62 69 6e 64 2d 32 35 2e 34 38 20 7b 6d 6f 64 69  bind-25.48 {modi
252b0 66 69 65 72 20 6e 61 6d 65 73 7d 20 2d 73 65 74  fier names} -set
252c0 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e  up {.    frame .
252d0 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20  t.f -class Test 
252e0 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67  -width 150 -heig
252f0 68 74 20 31 30 30 0a 7d 20 2d 62 6f 64 79 20 7b  ht 100.} -body {
25300 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 7b  .    bind .t.f {
25310 3c 4d 31 2d 4d 32 20 4d 33 2d 4d 34 20 42 31 2d  <M1-M2 M3-M4 B1-
25320 43 6f 6e 74 72 6f 6c 2d 61 3e 7d 20 66 6f 6f 0a  Control-a>} foo.
25330 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 0a 7d 20      bind .t.f.} 
25340 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64  -cleanup {.    d
25350 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72  estroy .t.f.} -r
25360 65 73 75 6c 74 20 3c 43 6f 6e 74 72 6f 6c 2d 42  esult <Control-B
25370 31 2d 4d 6f 64 31 2d 4d 6f 64 32 2d 4d 6f 64 33  1-Mod1-Mod2-Mod3
25380 2d 4d 6f 64 34 2d 4b 65 79 2d 61 3e 0a 0a 74 65  -Mod4-Key-a>..te
25390 73 74 20 62 69 6e 64 2d 32 35 2e 34 39 20 7b 6d  st bind-25.49 {m
253a0 6f 64 69 66 69 65 72 20 6e 61 6d 65 73 7d 20 2d  odifier names} -
253b0 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d  setup {.    fram
253c0 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65  e .t.f -class Te
253d0 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68  st -width 150 -h
253e0 65 69 67 68 74 20 31 30 30 0a 7d 20 2d 62 6f 64  eight 100.} -bod
253f0 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  y {.    bind .t.
25400 66 20 3c 45 78 74 65 6e 64 65 64 2d 52 65 74 75  f <Extended-Retu
25410 72 6e 3e 20 66 6f 6f 0a 20 20 20 20 62 69 6e 64  rn> foo.    bind
25420 20 2e 74 2e 66 0a 7d 20 2d 63 6c 65 61 6e 75 70   .t.f.} -cleanup
25430 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
25440 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 3c 45  t.f.} -result <E
25450 78 74 65 6e 64 65 64 2d 4b 65 79 2d 52 65 74 75  xtended-Key-Retu
25460 72 6e 3e 0a 0a 0a 0a 74 65 73 74 20 62 69 6e 64  rn>....test bind
25470 2d 32 36 2e 31 20 7b 65 76 65 6e 74 20 6e 61 6d  -26.1 {event nam
25480 65 73 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20  es} -setup {.   
25490 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61   frame .t.f -cla
254a0 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
254b0 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 7d  50 -height 100.}
254c0 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
254d0 64 20 2e 74 2e 66 20 3c 46 6f 63 75 73 49 6e 3e  d .t.f <FocusIn>
254e0 20 7b 6e 6f 74 68 69 6e 67 7d 0a 20 20 20 20 62   {nothing}.    b
254f0 69 6e 64 20 2e 74 2e 66 0a 7d 20 2d 63 6c 65 61  ind .t.f.} -clea
25500 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f  nup {.    destro
25510 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74  y .t.f.} -result
25520 20 3c 46 6f 63 75 73 49 6e 3e 0a 74 65 73 74 20   <FocusIn>.test 
25530 62 69 6e 64 2d 32 36 2e 32 20 7b 65 76 65 6e 74  bind-26.2 {event
25540 20 6e 61 6d 65 73 7d 20 2d 73 65 74 75 70 20 7b   names} -setup {
25550 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
25560 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
25570 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
25580 30 30 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20  00.} -body {.   
25590 20 62 69 6e 64 20 2e 74 2e 66 20 3c 46 6f 63 75   bind .t.f <Focu
255a0 73 4f 75 74 3e 20 7b 6e 6f 74 68 69 6e 67 7d 0a  sOut> {nothing}.
255b0 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 0a 7d 20      bind .t.f.} 
255c0 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64  -cleanup {.    d
255d0 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72  estroy .t.f.} -r
255e0 65 73 75 6c 74 20 3c 46 6f 63 75 73 4f 75 74 3e  esult <FocusOut>
255f0 0a 74 65 73 74 20 62 69 6e 64 2d 32 36 2e 33 20  .test bind-26.3 
25600 7b 65 76 65 6e 74 20 6e 61 6d 65 73 7d 20 2d 73  {event names} -s
25610 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65  etup {.    frame
25620 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73   .t.f -class Tes
25630 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65  t -width 150 -he
25640 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63  ight 100.    pac
25650 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73  k .t.f.    focus
25660 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20   -force .t.f.   
25670 20 75 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20   update.} -body 
25680 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20  {.    bind .t.f 
25690 3c 44 65 73 74 72 6f 79 3e 20 7b 6c 61 70 70 65  <Destroy> {lappe
256a0 6e 64 20 78 20 22 64 65 73 74 72 6f 79 65 64 22  nd x "destroyed"
256b0 7d 0a 20 20 20 20 73 65 74 20 78 20 5b 62 69 6e  }.    set x [bin
256c0 64 20 2e 74 2e 66 5d 0a 20 20 20 20 64 65 73 74  d .t.f].    dest
256d0 72 6f 79 20 2e 74 2e 66 0a 20 20 20 20 73 65 74  roy .t.f.    set
256e0 20 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a   x.} -cleanup {.
256f0 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66      destroy .t.f
25700 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 3c 44 65 73  .} -result {<Des
25710 74 72 6f 79 3e 20 64 65 73 74 72 6f 79 65 64 7d  troy> destroyed}
25720 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 36 2e 34  ..test bind-26.4
25730 20 7b 65 76 65 6e 74 20 6e 61 6d 65 73 3a 20 4d   {event names: M
25740 6f 74 69 6f 6e 7d 20 2d 73 65 74 75 70 20 7b 0a  otion} -setup {.
25750 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d      frame .t.f -
25760 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74  class Test -widt
25770 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30  h 150 -height 10
25780 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a  0.    pack .t.f.
25790 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65      focus -force
257a0 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65   .t.f.    update
257b0 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62  .} -body {.    b
257c0 69 6e 64 20 2e 74 2e 66 20 3c 4d 6f 74 69 6f 6e  ind .t.f <Motion
257d0 3e 20 22 73 65 74 20 78 20 7b 65 76 65 6e 74 20  > "set x {event 
257e0 4d 6f 74 69 6f 6e 7d 22 0a 20 20 20 20 73 65 74  Motion}".    set
257f0 20 78 20 78 79 7a 7a 79 0a 20 20 20 20 65 76 65   x xyzzy.    eve
25800 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
25810 20 3c 4d 6f 74 69 6f 6e 3e 0a 20 20 20 20 6c 69   <Motion>.    li
25820 73 74 20 24 78 20 5b 62 69 6e 64 20 2e 74 2e 66  st $x [bind .t.f
25830 5d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  ].} -cleanup {. 
25840 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
25850 7d 20 2d 72 65 73 75 6c 74 20 7b 7b 65 76 65 6e  } -result {{even
25860 74 20 4d 6f 74 69 6f 6e 7d 20 3c 4d 6f 74 69 6f  t Motion} <Motio
25870 6e 3e 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32  n>}..test bind-2
25880 36 2e 35 20 7b 65 76 65 6e 74 20 6e 61 6d 65 73  6.5 {event names
25890 3a 20 42 75 74 74 6f 6e 7d 20 2d 73 65 74 75 70  : Button} -setup
258a0 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e   {.    frame .t.
258b0 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77  f -class Test -w
258c0 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74  idth 150 -height
258d0 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74   100.    pack .t
258e0 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f  .f.    focus -fo
258f0 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64  rce .t.f.    upd
25900 61 74 65 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20  ate.} -body {.  
25910 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 42 75 74    bind .t.f <But
25920 74 6f 6e 3e 20 22 73 65 74 20 78 20 7b 65 76 65  ton> "set x {eve
25930 6e 74 20 42 75 74 74 6f 6e 7d 22 0a 20 20 20 20  nt Button}".    
25940 73 65 74 20 78 20 78 79 7a 7a 79 0a 20 20 20 20  set x xyzzy.    
25950 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
25960 74 2e 66 20 3c 42 75 74 74 6f 6e 3e 0a 20 20 20  t.f <Button>.   
25970 20 6c 69 73 74 20 24 78 20 5b 62 69 6e 64 20 2e   list $x [bind .
25980 74 2e 66 5d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  t.f].} -cleanup 
25990 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74  {.    destroy .t
259a0 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 7b 65  .f.} -result {{e
259b0 76 65 6e 74 20 42 75 74 74 6f 6e 7d 20 3c 42 75  vent Button} <Bu
259c0 74 74 6f 6e 3e 7d 0a 0a 74 65 73 74 20 62 69 6e  tton>}..test bin
259d0 64 2d 32 36 2e 36 20 7b 65 76 65 6e 74 20 6e 61  d-26.6 {event na
259e0 6d 65 73 3a 20 42 75 74 74 6f 6e 50 72 65 73 73  mes: ButtonPress
259f0 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66  } -setup {.    f
25a00 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73  rame .t.f -class
25a10 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30   Test -width 150
25a20 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20   -height 100.   
25a30 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66   pack .t.f.    f
25a40 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66  ocus -force .t.f
25a50 0a 20 20 20 20 75 70 64 61 74 65 0a 7d 20 2d 62  .    update.} -b
25a60 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e  ody {.    bind .
25a70 74 2e 66 20 3c 42 75 74 74 6f 6e 50 72 65 73 73  t.f <ButtonPress
25a80 3e 20 22 73 65 74 20 78 20 7b 65 76 65 6e 74 20  > "set x {event 
25a90 42 75 74 74 6f 6e 50 72 65 73 73 7d 22 0a 20 20  ButtonPress}".  
25aa0 20 20 73 65 74 20 78 20 78 79 7a 7a 79 0a 20 20    set x xyzzy.  
25ab0 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
25ac0 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 50 72 65   .t.f <ButtonPre
25ad0 73 73 3e 0a 20 20 20 20 6c 69 73 74 20 24 78 20  ss>.    list $x 
25ae0 5b 62 69 6e 64 20 2e 74 2e 66 5d 0a 7d 20 2d 63  [bind .t.f].} -c
25af0 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73  leanup {.    des
25b00 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73  troy .t.f.} -res
25b10 75 6c 74 20 7b 7b 65 76 65 6e 74 20 42 75 74 74  ult {{event Butt
25b20 6f 6e 50 72 65 73 73 7d 20 3c 42 75 74 74 6f 6e  onPress} <Button
25b30 3e 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 36  >}..test bind-26
25b40 2e 37 20 7b 65 76 65 6e 74 20 6e 61 6d 65 73 3a  .7 {event names:
25b50 20 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 7d 20   ButtonRelease} 
25b60 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61  -setup {.    fra
25b70 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54  me .t.f -class T
25b80 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d  est -width 150 -
25b90 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70  height 100.    p
25ba0 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63  ack .t.f.    foc
25bb0 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20  us -force .t.f. 
25bc0 20 20 20 75 70 64 61 74 65 0a 7d 20 2d 62 6f 64     update.} -bod
25bd0 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  y {.    bind .t.
25be0 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73 65  f <ButtonRelease
25bf0 3e 20 22 73 65 74 20 78 20 7b 65 76 65 6e 74 20  > "set x {event 
25c00 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 7d 22 0a  ButtonRelease}".
25c10 20 20 20 20 73 65 74 20 78 20 78 79 7a 7a 79 0a      set x xyzzy.
25c20 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
25c30 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52  te .t.f <ButtonR
25c40 65 6c 65 61 73 65 3e 0a 20 20 20 20 6c 69 73 74  elease>.    list
25c50 20 24 78 20 5b 62 69 6e 64 20 2e 74 2e 66 5d 0a   $x [bind .t.f].
25c60 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20  } -cleanup {.   
25c70 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20   destroy .t.f.} 
25c80 2d 72 65 73 75 6c 74 20 7b 7b 65 76 65 6e 74 20  -result {{event 
25c90 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 7d 20 3c  ButtonRelease} <
25ca0 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 3e 7d 0a  ButtonRelease>}.
25cb0 0a 74 65 73 74 20 62 69 6e 64 2d 32 36 2e 38 20  .test bind-26.8 
25cc0 7b 65 76 65 6e 74 20 6e 61 6d 65 73 3a 20 43 6f  {event names: Co
25cd0 6c 6f 72 6d 61 70 7d 20 2d 73 65 74 75 70 20 7b  lormap} -setup {
25ce0 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
25cf0 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
25d00 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
25d10 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
25d20 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
25d30 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
25d40 65 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  e.} -body {.    
25d50 62 69 6e 64 20 2e 74 2e 66 20 3c 43 6f 6c 6f 72  bind .t.f <Color
25d60 6d 61 70 3e 20 22 73 65 74 20 78 20 7b 65 76 65  map> "set x {eve
25d70 6e 74 20 43 6f 6c 6f 72 6d 61 70 7d 22 0a 20 20  nt Colormap}".  
25d80 20 20 73 65 74 20 78 20 78 79 7a 7a 79 0a 20 20    set x xyzzy.  
25d90 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
25da0 20 2e 74 2e 66 20 3c 43 6f 6c 6f 72 6d 61 70 3e   .t.f <Colormap>
25db0 0a 20 20 20 20 6c 69 73 74 20 24 78 20 5b 62 69  .    list $x [bi
25dc0 6e 64 20 2e 74 2e 66 5d 0a 7d 20 2d 63 6c 65 61  nd .t.f].} -clea
25dd0 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f  nup {.    destro
25de0 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74  y .t.f.} -result
25df0 20 7b 7b 65 76 65 6e 74 20 43 6f 6c 6f 72 6d 61   {{event Colorma
25e00 70 7d 20 3c 43 6f 6c 6f 72 6d 61 70 3e 7d 0a 0a  p} <Colormap>}..
25e10 74 65 73 74 20 62 69 6e 64 2d 32 36 2e 39 20 7b  test bind-26.9 {
25e20 65 76 65 6e 74 20 6e 61 6d 65 73 3a 20 45 6e 74  event names: Ent
25e30 65 72 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20  er} -setup {.   
25e40 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61   frame .t.f -cla
25e50 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
25e60 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20  50 -height 100. 
25e70 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20     pack .t.f.   
25e80 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74   focus -force .t
25e90 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 7d 20  .f.    update.} 
25ea0 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64  -body {.    bind
25eb0 20 2e 74 2e 66 20 3c 45 6e 74 65 72 3e 20 22 73   .t.f <Enter> "s
25ec0 65 74 20 78 20 7b 65 76 65 6e 74 20 45 6e 74 65  et x {event Ente
25ed0 72 7d 22 0a 20 20 20 20 73 65 74 20 78 20 78 79  r}".    set x xy
25ee0 7a 7a 79 0a 20 20 20 20 65 76 65 6e 74 20 67 65  zzy.    event ge
25ef0 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 45 6e 74  nerate .t.f <Ent
25f00 65 72 3e 0a 20 20 20 20 6c 69 73 74 20 24 78 20  er>.    list $x 
25f10 5b 62 69 6e 64 20 2e 74 2e 66 5d 0a 7d 20 2d 63  [bind .t.f].} -c
25f20 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73  leanup {.    des
25f30 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73  troy .t.f.} -res
25f40 75 6c 74 20 7b 7b 65 76 65 6e 74 20 45 6e 74 65  ult {{event Ente
25f50 72 7d 20 3c 45 6e 74 65 72 3e 7d 0a 0a 74 65 73  r} <Enter>}..tes
25f60 74 20 62 69 6e 64 2d 32 36 2e 31 30 20 7b 65 76  t bind-26.10 {ev
25f70 65 6e 74 20 6e 61 6d 65 73 3a 20 4c 65 61 76 65  ent names: Leave
25f80 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66  } -setup {.    f
25f90 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73  rame .t.f -class
25fa0 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30   Test -width 150
25fb0 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20   -height 100.   
25fc0 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66   pack .t.f.    f
25fd0 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66  ocus -force .t.f
25fe0 0a 20 20 20 20 75 70 64 61 74 65 0a 7d 20 2d 62  .    update.} -b
25ff0 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e  ody {.    bind .
26000 74 2e 66 20 3c 4c 65 61 76 65 3e 20 22 73 65 74  t.f <Leave> "set
26010 20 78 20 7b 65 76 65 6e 74 20 4c 65 61 76 65 7d   x {event Leave}
26020 22 0a 20 20 20 20 73 65 74 20 78 20 78 79 7a 7a  ".    set x xyzz
26030 79 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  y.    event gene
26040 72 61 74 65 20 2e 74 2e 66 20 3c 4c 65 61 76 65  rate .t.f <Leave
26050 3e 0a 20 20 20 20 6c 69 73 74 20 24 78 20 5b 62  >.    list $x [b
26060 69 6e 64 20 2e 74 2e 66 5d 0a 7d 20 2d 63 6c 65  ind .t.f].} -cle
26070 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72  anup {.    destr
26080 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c  oy .t.f.} -resul
26090 74 20 7b 7b 65 76 65 6e 74 20 4c 65 61 76 65 7d  t {{event Leave}
260a0 20 3c 4c 65 61 76 65 3e 7d 0a 0a 74 65 73 74 20   <Leave>}..test 
260b0 62 69 6e 64 2d 32 36 2e 31 31 20 7b 65 76 65 6e  bind-26.11 {even
260c0 74 20 6e 61 6d 65 73 3a 20 45 78 70 6f 73 65 7d  t names: Expose}
260d0 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72   -setup {.    fr
260e0 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20  ame .t.f -class 
260f0 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20  Test -width 150 
26100 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20  -height 100.    
26110 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f  pack .t.f.    fo
26120 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a  cus -force .t.f.
26130 20 20 20 20 75 70 64 61 74 65 0a 7d 20 2d 62 6f      update.} -bo
26140 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74  dy {.    bind .t
26150 2e 66 20 3c 45 78 70 6f 73 65 3e 20 22 73 65 74  .f <Expose> "set
26160 20 78 20 7b 65 76 65 6e 74 20 45 78 70 6f 73 65   x {event Expose
26170 7d 22 0a 20 20 20 20 73 65 74 20 78 20 78 79 7a  }".    set x xyz
26180 7a 79 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e  zy.    event gen
26190 65 72 61 74 65 20 2e 74 2e 66 20 3c 45 78 70 6f  erate .t.f <Expo
261a0 73 65 3e 0a 20 20 20 20 6c 69 73 74 20 24 78 20  se>.    list $x 
261b0 5b 62 69 6e 64 20 2e 74 2e 66 5d 0a 7d 20 2d 63  [bind .t.f].} -c
261c0 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73  leanup {.    des
261d0 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73  troy .t.f.} -res
261e0 75 6c 74 20 7b 7b 65 76 65 6e 74 20 45 78 70 6f  ult {{event Expo
261f0 73 65 7d 20 3c 45 78 70 6f 73 65 3e 7d 0a 0a 74  se} <Expose>}..t
26200 65 73 74 20 62 69 6e 64 2d 32 36 2e 31 32 20 7b  est bind-26.12 {
26210 65 76 65 6e 74 20 6e 61 6d 65 73 3a 20 4b 65 79  event names: Key
26220 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66  } -setup {.    f
26230 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73  rame .t.f -class
26240 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30   Test -width 150
26250 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20   -height 100.   
26260 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66   pack .t.f.    f
26270 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66  ocus -force .t.f
26280 0a 20 20 20 20 75 70 64 61 74 65 0a 7d 20 2d 62  .    update.} -b
26290 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e  ody {.    bind .
262a0 74 2e 66 20 3c 4b 65 79 3e 20 22 73 65 74 20 78  t.f <Key> "set x
262b0 20 7b 65 76 65 6e 74 20 4b 65 79 7d 22 0a 20 20   {event Key}".  
262c0 20 20 73 65 74 20 78 20 78 79 7a 7a 79 0a 20 20    set x xyzzy.  
262d0 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
262e0 20 2e 74 2e 66 20 3c 4b 65 79 3e 0a 20 20 20 20   .t.f <Key>.    
262f0 6c 69 73 74 20 24 78 20 5b 62 69 6e 64 20 2e 74  list $x [bind .t
26300 2e 66 5d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  .f].} -cleanup {
26310 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e  .    destroy .t.
26320 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 7b 65 76  f.} -result {{ev
26330 65 6e 74 20 4b 65 79 7d 20 3c 4b 65 79 3e 7d 0a  ent Key} <Key>}.
26340 0a 74 65 73 74 20 62 69 6e 64 2d 32 36 2e 31 33  .test bind-26.13
26350 20 7b 65 76 65 6e 74 20 6e 61 6d 65 73 3a 20 4b   {event names: K
26360 65 79 50 72 65 73 73 7d 20 2d 73 65 74 75 70 20  eyPress} -setup 
26370 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66  {.    frame .t.f
26380 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69   -class Test -wi
26390 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20  dth 150 -height 
263a0 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e  100.    pack .t.
263b0 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72  f.    focus -for
263c0 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61  ce .t.f.    upda
263d0 74 65 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20  te.} -body {.   
263e0 20 62 69 6e 64 20 2e 74 2e 66 20 3c 4b 65 79 50   bind .t.f <KeyP
263f0 72 65 73 73 3e 20 22 73 65 74 20 78 20 7b 65 76  ress> "set x {ev
26400 65 6e 74 20 4b 65 79 50 72 65 73 73 7d 22 0a 20  ent KeyPress}". 
26410 20 20 20 73 65 74 20 78 20 78 79 7a 7a 79 0a 20     set x xyzzy. 
26420 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
26430 65 20 2e 74 2e 66 20 3c 4b 65 79 50 72 65 73 73  e .t.f <KeyPress
26440 3e 0a 20 20 20 20 6c 69 73 74 20 24 78 20 5b 62  >.    list $x [b
26450 69 6e 64 20 2e 74 2e 66 5d 0a 7d 20 2d 63 6c 65  ind .t.f].} -cle
26460 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72  anup {.    destr
26470 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c  oy .t.f.} -resul
26480 74 20 7b 7b 65 76 65 6e 74 20 4b 65 79 50 72 65  t {{event KeyPre
26490 73 73 7d 20 3c 4b 65 79 3e 7d 0a 0a 74 65 73 74  ss} <Key>}..test
264a0 20 62 69 6e 64 2d 32 36 2e 31 34 20 7b 65 76 65   bind-26.14 {eve
264b0 6e 74 20 6e 61 6d 65 73 3a 20 4b 65 79 52 65 6c  nt names: KeyRel
264c0 65 61 73 65 7d 20 2d 73 65 74 75 70 20 7b 0a 20  ease} -setup {. 
264d0 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63     frame .t.f -c
264e0 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68  lass Test -width
264f0 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30   150 -height 100
26500 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20  .    pack .t.f. 
26510 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20     focus -force 
26520 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a  .t.f.    update.
26530 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
26540 6e 64 20 2e 74 2e 66 20 3c 4b 65 79 52 65 6c 65  nd .t.f <KeyRele
26550 61 73 65 3e 20 22 73 65 74 20 78 20 7b 65 76 65  ase> "set x {eve
26560 6e 74 20 4b 65 79 52 65 6c 65 61 73 65 7d 22 0a  nt KeyRelease}".
26570 20 20 20 20 73 65 74 20 78 20 78 79 7a 7a 79 0a      set x xyzzy.
26580 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
26590 74 65 20 2e 74 2e 66 20 3c 4b 65 79 52 65 6c 65  te .t.f <KeyRele
265a0 61 73 65 3e 0a 20 20 20 20 6c 69 73 74 20 24 78  ase>.    list $x
265b0 20 5b 62 69 6e 64 20 2e 74 2e 66 5d 0a 7d 20 2d   [bind .t.f].} -
265c0 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
265d0 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
265e0 73 75 6c 74 20 7b 7b 65 76 65 6e 74 20 4b 65 79  sult {{event Key
265f0 52 65 6c 65 61 73 65 7d 20 3c 4b 65 79 52 65 6c  Release} <KeyRel
26600 65 61 73 65 3e 7d 0a 0a 74 65 73 74 20 62 69 6e  ease>}..test bin
26610 64 2d 32 36 2e 31 35 20 7b 65 76 65 6e 74 20 6e  d-26.15 {event n
26620 61 6d 65 73 3a 20 50 72 6f 70 65 72 74 79 7d 20  ames: Property} 
26630 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61  -setup {.    fra
26640 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54  me .t.f -class T
26650 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d  est -width 150 -
26660 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70  height 100.    p
26670 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63  ack .t.f.    foc
26680 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20  us -force .t.f. 
26690 20 20 20 75 70 64 61 74 65 0a 7d 20 2d 62 6f 64     update.} -bod
266a0 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  y {.    bind .t.
266b0 66 20 3c 50 72 6f 70 65 72 74 79 3e 20 22 73 65  f <Property> "se
266c0 74 20 78 20 7b 65 76 65 6e 74 20 50 72 6f 70 65  t x {event Prope
266d0 72 74 79 7d 22 0a 20 20 20 20 73 65 74 20 78 20  rty}".    set x 
266e0 78 79 7a 7a 79 0a 20 20 20 20 65 76 65 6e 74 20  xyzzy.    event 
266f0 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 50  generate .t.f <P
26700 72 6f 70 65 72 74 79 3e 0a 20 20 20 20 6c 69 73  roperty>.    lis
26710 74 20 24 78 20 5b 62 69 6e 64 20 2e 74 2e 66 5d  t $x [bind .t.f]
26720 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
26730 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d    destroy .t.f.}
26740 20 2d 72 65 73 75 6c 74 20 7b 7b 65 76 65 6e 74   -result {{event
26750 20 50 72 6f 70 65 72 74 79 7d 20 3c 50 72 6f 70   Property} <Prop
26760 65 72 74 79 3e 7d 0a 0a 74 65 73 74 20 62 69 6e  erty>}..test bin
26770 64 2d 32 36 2e 31 36 20 7b 65 76 65 6e 74 20 6e  d-26.16 {event n
26780 61 6d 65 73 3a 20 56 69 73 69 62 69 6c 69 74 79  ames: Visibility
26790 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66  } -setup {.    f
267a0 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73  rame .t.f -class
267b0 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30   Test -width 150
267c0 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20   -height 100.   
267d0 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66   pack .t.f.    f
267e0 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66  ocus -force .t.f
267f0 0a 20 20 20 20 75 70 64 61 74 65 0a 7d 20 2d 62  .    update.} -b
26800 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e  ody {.    bind .
26810 74 2e 66 20 3c 56 69 73 69 62 69 6c 69 74 79 3e  t.f <Visibility>
26820 20 22 73 65 74 20 78 20 7b 65 76 65 6e 74 20 56   "set x {event V
26830 69 73 69 62 69 6c 69 74 79 7d 22 0a 20 20 20 20  isibility}".    
26840 73 65 74 20 78 20 78 79 7a 7a 79 0a 20 20 20 20  set x xyzzy.    
26850 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
26860 74 2e 66 20 3c 56 69 73 69 62 69 6c 69 74 79 3e  t.f <Visibility>
26870 0a 20 20 20 20 6c 69 73 74 20 24 78 20 5b 62 69  .    list $x [bi
26880 6e 64 20 2e 74 2e 66 5d 0a 7d 20 2d 63 6c 65 61  nd .t.f].} -clea
26890 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f  nup {.    destro
268a0 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74  y .t.f.} -result
268b0 20 7b 7b 65 76 65 6e 74 20 56 69 73 69 62 69 6c   {{event Visibil
268c0 69 74 79 7d 20 3c 56 69 73 69 62 69 6c 69 74 79  ity} <Visibility
268d0 3e 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 36  >}..test bind-26
268e0 2e 31 37 20 7b 65 76 65 6e 74 20 6e 61 6d 65 73  .17 {event names
268f0 3a 20 41 63 74 69 76 61 74 65 7d 20 2d 73 65 74  : Activate} -set
26900 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e  up {.    frame .
26910 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20  t.f -class Test 
26920 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67  -width 150 -heig
26930 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20  ht 100.    pack 
26940 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d  .t.f.    focus -
26950 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75  force .t.f.    u
26960 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20 7b 0a  pdate.} -body {.
26970 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 41      bind .t.f <A
26980 63 74 69 76 61 74 65 3e 20 22 73 65 74 20 78 20  ctivate> "set x 
26990 7b 65 76 65 6e 74 20 41 63 74 69 76 61 74 65 7d  {event Activate}
269a0 22 0a 20 20 20 20 73 65 74 20 78 20 78 79 7a 7a  ".    set x xyzz
269b0 79 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  y.    event gene
269c0 72 61 74 65 20 2e 74 2e 66 20 3c 41 63 74 69 76  rate .t.f <Activ
269d0 61 74 65 3e 0a 20 20 20 20 6c 69 73 74 20 24 78  ate>.    list $x
269e0 20 5b 62 69 6e 64 20 2e 74 2e 66 5d 0a 7d 20 2d   [bind .t.f].} -
269f0 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
26a00 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
26a10 73 75 6c 74 20 7b 7b 65 76 65 6e 74 20 41 63 74  sult {{event Act
26a20 69 76 61 74 65 7d 20 3c 41 63 74 69 76 61 74 65  ivate} <Activate
26a30 3e 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 36  >}..test bind-26
26a40 2e 31 38 20 7b 65 76 65 6e 74 20 6e 61 6d 65 73  .18 {event names
26a50 3a 20 44 65 61 63 74 69 76 61 74 65 7d 20 2d 73  : Deactivate} -s
26a60 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65  etup {.    frame
26a70 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73   .t.f -class Tes
26a80 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65  t -width 150 -he
26a90 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63  ight 100.    pac
26aa0 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73  k .t.f.    focus
26ab0 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20   -force .t.f.   
26ac0 20 75 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20   update.} -body 
26ad0 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20  {.    bind .t.f 
26ae0 3c 44 65 61 63 74 69 76 61 74 65 3e 20 22 73 65  <Deactivate> "se
26af0 74 20 78 20 7b 65 76 65 6e 74 20 44 65 61 63 74  t x {event Deact
26b00 69 76 61 74 65 7d 22 0a 20 20 20 20 73 65 74 20  ivate}".    set 
26b10 78 20 78 79 7a 7a 79 0a 20 20 20 20 65 76 65 6e  x xyzzy.    even
26b20 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
26b30 3c 44 65 61 63 74 69 76 61 74 65 3e 0a 20 20 20  <Deactivate>.   
26b40 20 6c 69 73 74 20 24 78 20 5b 62 69 6e 64 20 2e   list $x [bind .
26b50 74 2e 66 5d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  t.f].} -cleanup 
26b60 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74  {.    destroy .t
26b70 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 7b 65  .f.} -result {{e
26b80 76 65 6e 74 20 44 65 61 63 74 69 76 61 74 65 7d  vent Deactivate}
26b90 20 3c 44 65 61 63 74 69 76 61 74 65 3e 7d 0a 0a   <Deactivate>}..
26ba0 0a 23 20 54 68 65 73 65 20 65 76 65 6e 74 73 20  .# These events 
26bb0 72 65 71 75 69 72 65 20 61 6e 20 65 78 74 72 61  require an extra
26bc0 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 5b 65 76   argument to [ev
26bd0 65 6e 74 20 67 65 6e 65 72 61 74 65 5d 0a 74 65  ent generate].te
26be0 73 74 20 62 69 6e 64 2d 32 36 2e 31 39 20 7b 65  st bind-26.19 {e
26bf0 76 65 6e 74 20 6e 61 6d 65 73 3a 20 43 69 72 63  vent names: Circ
26c00 75 6c 61 74 65 7d 20 2d 73 65 74 75 70 20 7b 0a  ulate} -setup {.
26c10 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d      frame .t.f -
26c20 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74  class Test -widt
26c30 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30  h 150 -height 10
26c40 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a  0.    pack .t.f.
26c50 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65      focus -force
26c60 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65   .t.f.    update
26c70 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62  .} -body {.    b
26c80 69 6e 64 20 2e 74 2e 66 20 3c 43 69 72 63 75 6c  ind .t.f <Circul
26c90 61 74 65 3e 20 22 73 65 74 20 78 20 7b 65 76 65  ate> "set x {eve
26ca0 6e 74 20 43 69 72 63 75 6c 61 74 65 7d 22 0a 20  nt Circulate}". 
26cb0 20 20 20 73 65 74 20 78 20 78 79 7a 7a 79 0a 20     set x xyzzy. 
26cc0 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
26cd0 65 20 2e 74 2e 66 20 3c 43 69 72 63 75 6c 61 74  e .t.f <Circulat
26ce0 65 3e 0a 20 20 20 20 6c 69 73 74 20 24 78 20 5b  e>.    list $x [
26cf0 62 69 6e 64 20 2e 74 2e 66 5d 0a 7d 20 2d 63 6c  bind .t.f].} -cl
26d00 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74  eanup {.    dest
26d10 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75  roy .t.f.} -resu
26d20 6c 74 20 7b 7b 65 76 65 6e 74 20 43 69 72 63 75  lt {{event Circu
26d30 6c 61 74 65 7d 20 3c 43 69 72 63 75 6c 61 74 65  late} <Circulate
26d40 3e 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 36  >}..test bind-26
26d50 2e 32 30 20 7b 65 76 65 6e 74 20 6e 61 6d 65 73  .20 {event names
26d60 3a 20 43 6f 6e 66 69 67 75 72 65 7d 20 2d 73 65  : Configure} -se
26d70 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20  tup {.    frame 
26d80 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74  .t.f -class Test
26d90 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69   -width 150 -hei
26da0 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b  ght 100.    pack
26db0 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20   .t.f.    focus 
26dc0 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20  -force .t.f.    
26dd0 75 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20 7b  update.} -body {
26de0 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c  .    bind .t.f <
26df0 43 6f 6e 66 69 67 75 72 65 3e 20 22 73 65 74 20  Configure> "set 
26e00 78 20 7b 65 76 65 6e 74 20 43 6f 6e 66 69 67 75  x {event Configu
26e10 72 65 7d 22 0a 20 20 20 20 73 65 74 20 78 20 78  re}".    set x x
26e20 79 7a 7a 79 0a 20 20 20 20 65 76 65 6e 74 20 67  yzzy.    event g
26e30 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 43 6f  enerate .t.f <Co
26e40 6e 66 69 67 75 72 65 3e 0a 20 20 20 20 6c 69 73  nfigure>.    lis
26e50 74 20 24 78 20 5b 62 69 6e 64 20 2e 74 2e 66 5d  t $x [bind .t.f]
26e60 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
26e70 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d    destroy .t.f.}
26e80 20 2d 72 65 73 75 6c 74 20 7b 7b 65 76 65 6e 74   -result {{event
26e90 20 43 6f 6e 66 69 67 75 72 65 7d 20 3c 43 6f 6e   Configure} <Con
26ea0 66 69 67 75 72 65 3e 7d 0a 0a 74 65 73 74 20 62  figure>}..test b
26eb0 69 6e 64 2d 32 36 2e 32 31 20 7b 65 76 65 6e 74  ind-26.21 {event
26ec0 20 6e 61 6d 65 73 3a 20 47 72 61 76 69 74 79 7d   names: Gravity}
26ed0 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72   -setup {.    fr
26ee0 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20  ame .t.f -class 
26ef0 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20  Test -width 150 
26f00 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20  -height 100.    
26f10 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f  pack .t.f.    fo
26f20 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a  cus -force .t.f.
26f30 20 20 20 20 75 70 64 61 74 65 0a 7d 20 2d 62 6f      update.} -bo
26f40 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74  dy {.    bind .t
26f50 2e 66 20 3c 47 72 61 76 69 74 79 3e 20 22 73 65  .f <Gravity> "se
26f60 74 20 78 20 7b 65 76 65 6e 74 20 47 72 61 76 69  t x {event Gravi
26f70 74 79 7d 22 0a 20 20 20 20 73 65 74 20 78 20 78  ty}".    set x x
26f80 79 7a 7a 79 0a 20 20 20 20 65 76 65 6e 74 20 67  yzzy.    event g
26f90 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 47 72  enerate .t.f <Gr
26fa0 61 76 69 74 79 3e 0a 20 20 20 20 6c 69 73 74 20  avity>.    list 
26fb0 24 78 20 5b 62 69 6e 64 20 2e 74 2e 66 5d 0a 7d  $x [bind .t.f].}
26fc0 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
26fd0 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d  destroy .t.f.} -
26fe0 72 65 73 75 6c 74 20 7b 7b 65 76 65 6e 74 20 47  result {{event G
26ff0 72 61 76 69 74 79 7d 20 3c 47 72 61 76 69 74 79  ravity} <Gravity
27000 3e 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32 36  >}..test bind-26
27010 2e 32 32 20 7b 65 76 65 6e 74 20 6e 61 6d 65 73  .22 {event names
27020 3a 20 4d 61 70 7d 20 2d 73 65 74 75 70 20 7b 0a  : Map} -setup {.
27030 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d      frame .t.f -
27040 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74  class Test -widt
27050 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30  h 150 -height 10
27060 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a  0.    pack .t.f.
27070 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65      focus -force
27080 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65   .t.f.    update
27090 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62  .} -body {.    b
270a0 69 6e 64 20 2e 74 2e 66 20 3c 4d 61 70 3e 20 22  ind .t.f <Map> "
270b0 73 65 74 20 78 20 7b 65 76 65 6e 74 20 4d 61 70  set x {event Map
270c0 7d 22 0a 20 20 20 20 73 65 74 20 78 20 78 79 7a  }".    set x xyz
270d0 7a 79 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e  zy.    event gen
270e0 65 72 61 74 65 20 2e 74 2e 66 20 3c 4d 61 70 3e  erate .t.f <Map>
270f0 0a 20 20 20 20 6c 69 73 74 20 24 78 20 5b 62 69  .    list $x [bi
27100 6e 64 20 2e 74 2e 66 5d 0a 7d 20 2d 63 6c 65 61  nd .t.f].} -clea
27110 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f  nup {.    destro
27120 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74  y .t.f.} -result
27130 20 7b 7b 65 76 65 6e 74 20 4d 61 70 7d 20 3c 4d   {{event Map} <M
27140 61 70 3e 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d  ap>}..test bind-
27150 32 36 2e 32 33 20 7b 65 76 65 6e 74 20 6e 61 6d  26.23 {event nam
27160 65 73 3a 20 52 65 70 61 72 65 6e 74 7d 20 2d 73  es: Reparent} -s
27170 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65  etup {.    frame
27180 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73   .t.f -class Tes
27190 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65  t -width 150 -he
271a0 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63  ight 100.    pac
271b0 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73  k .t.f.    focus
271c0 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20   -force .t.f.   
271d0 20 75 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20   update.} -body 
271e0 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20  {.    bind .t.f 
271f0 3c 52 65 70 61 72 65 6e 74 3e 20 22 73 65 74 20  <Reparent> "set 
27200 78 20 7b 65 76 65 6e 74 20 52 65 70 61 72 65 6e  x {event Reparen
27210 74 7d 22 0a 20 20 20 20 73 65 74 20 78 20 78 79  t}".    set x xy
27220 7a 7a 79 0a 20 20 20 20 65 76 65 6e 74 20 67 65  zzy.    event ge
27230 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 52 65 70  nerate .t.f <Rep
27240 61 72 65 6e 74 3e 0a 20 20 20 20 6c 69 73 74 20  arent>.    list 
27250 24 78 20 5b 62 69 6e 64 20 2e 74 2e 66 5d 0a 7d  $x [bind .t.f].}
27260 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
27270 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d  destroy .t.f.} -
27280 72 65 73 75 6c 74 20 7b 7b 65 76 65 6e 74 20 52  result {{event R
27290 65 70 61 72 65 6e 74 7d 20 3c 52 65 70 61 72 65  eparent} <Repare
272a0 6e 74 3e 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d  nt>}..test bind-
272b0 32 36 2e 32 34 20 7b 65 76 65 6e 74 20 6e 61 6d  26.24 {event nam
272c0 65 73 3a 20 55 6e 6d 61 70 7d 20 2d 73 65 74 75  es: Unmap} -setu
272d0 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74  p {.    frame .t
272e0 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d  .f -class Test -
272f0 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68  width 150 -heigh
27300 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e  t 100.    pack .
27310 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66  t.f.    focus -f
27320 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70  orce .t.f.    up
27330 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20  date.} -body {. 
27340 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 55 6e     bind .t.f <Un
27350 6d 61 70 3e 20 22 73 65 74 20 78 20 7b 65 76 65  map> "set x {eve
27360 6e 74 20 55 6e 6d 61 70 7d 22 0a 20 20 20 20 73  nt Unmap}".    s
27370 65 74 20 78 20 78 79 7a 7a 79 0a 20 20 20 20 65  et x xyzzy.    e
27380 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
27390 2e 66 20 3c 55 6e 6d 61 70 3e 0a 20 20 20 20 6c  .f <Unmap>.    l
273a0 69 73 74 20 24 78 20 5b 62 69 6e 64 20 2e 74 2e  ist $x [bind .t.
273b0 66 5d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a  f].} -cleanup {.
273c0 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66      destroy .t.f
273d0 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 7b 65 76 65  .} -result {{eve
273e0 6e 74 20 55 6e 6d 61 70 7d 20 3c 55 6e 6d 61 70  nt Unmap} <Unmap
273f0 3e 7d 0a 0a 0a 74 65 73 74 20 62 69 6e 64 2d 32  >}...test bind-2
27400 37 2e 31 20 7b 62 75 74 74 6f 6e 20 6e 61 6d 65  7.1 {button name
27410 73 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62  s} -body {.    b
27420 69 6e 64 20 2e 74 20 3c 45 78 70 6f 73 65 2d 31  ind .t <Expose-1
27430 3e 20 66 6f 6f 0a 7d 20 2d 72 65 74 75 72 6e 43  > foo.} -returnC
27440 6f 64 65 73 20 65 72 72 6f 72 20 2d 72 65 73 75  odes error -resu
27450 6c 74 20 7b 73 70 65 63 69 66 69 65 64 20 62 75  lt {specified bu
27460 74 74 6f 6e 20 22 31 22 20 66 6f 72 20 6e 6f 6e  tton "1" for non
27470 2d 62 75 74 74 6f 6e 20 65 76 65 6e 74 7d 0a 74  -button event}.t
27480 65 73 74 20 62 69 6e 64 2d 32 37 2e 32 20 7b 62  est bind-27.2 {b
27490 75 74 74 6f 6e 20 6e 61 6d 65 73 7d 20 2d 62 6f  utton names} -bo
274a0 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74  dy {.    bind .t
274b0 20 3c 42 75 74 74 6f 6e 2d 36 3e 20 66 6f 6f 0a   <Button-6> foo.
274c0 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65  } -returnCodes e
274d0 72 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b 62 61  rror -result {ba
274e0 64 20 62 75 74 74 6f 6e 20 6e 75 6d 62 65 72 20  d button number 
274f0 22 36 22 7d 0a 74 65 73 74 20 62 69 6e 64 2d 32  "6"}.test bind-2
27500 37 2e 33 20 7b 62 75 74 74 6f 6e 20 6e 61 6d 65  7.3 {button name
27510 73 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20  s} -setup {.    
27520 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73  frame .t.f -clas
27530 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35  s Test -width 15
27540 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20  0 -height 100.  
27550 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20    pack .t.f.    
27560 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e  focus -force .t.
27570 66 0a 20 20 20 20 75 70 64 61 74 65 0a 7d 20 2d  f.    update.} -
27580 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20  body {.    bind 
27590 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 31 3e 20  .t.f <Button-1> 
275a0 7b 6c 61 70 70 65 6e 64 20 78 20 22 62 75 74 74  {lappend x "butt
275b0 6f 6e 20 31 22 7d 0a 20 20 20 20 73 65 74 20 78  on 1"}.    set x
275c0 20 5b 62 69 6e 64 20 2e 74 2e 66 5d 0a 20 20 20   [bind .t.f].   
275d0 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
275e0 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 31 3e 0a  .t.f <Button-1>.
275f0 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
27600 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52  te .t.f <ButtonR
27610 65 6c 65 61 73 65 2d 31 3e 0a 20 20 20 20 73 65  elease-1>.    se
27620 74 20 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  t x.} -cleanup {
27630 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e  .    destroy .t.
27640 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 3c 42 75  f.} -result {<Bu
27650 74 74 6f 6e 2d 31 3e 20 7b 62 75 74 74 6f 6e 20  tton-1> {button 
27660 31 7d 7d 0a 74 65 73 74 20 62 69 6e 64 2d 32 37  1}}.test bind-27
27670 2e 34 20 7b 62 75 74 74 6f 6e 20 6e 61 6d 65 73  .4 {button names
27680 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66  } -setup {.    f
27690 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73  rame .t.f -class
276a0 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30   Test -width 150
276b0 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20   -height 100.   
276c0 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66   pack .t.f.    f
276d0 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66  ocus -force .t.f
276e0 0a 20 20 20 20 75 70 64 61 74 65 0a 7d 20 2d 62  .    update.} -b
276f0 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e  ody {.    bind .
27700 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 32 3e 20 7b  t.f <Button-2> {
27710 6c 61 70 70 65 6e 64 20 78 20 22 62 75 74 74 6f  lappend x "butto
27720 6e 20 32 22 7d 0a 20 20 20 20 73 65 74 20 78 20  n 2"}.    set x 
27730 5b 62 69 6e 64 20 2e 74 2e 66 5d 0a 20 20 20 20  [bind .t.f].    
27740 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
27750 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 32 3e 0a 20  t.f <Button-2>. 
27760 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
27770 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65  e .t.f <ButtonRe
27780 6c 65 61 73 65 2d 32 3e 0a 20 20 20 20 73 65 74  lease-2>.    set
27790 20 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a   x.} -cleanup {.
277a0 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66      destroy .t.f
277b0 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 3c 42 75 74  .} -result {<But
277c0 74 6f 6e 2d 32 3e 20 7b 62 75 74 74 6f 6e 20 32  ton-2> {button 2
277d0 7d 7d 0a 74 65 73 74 20 62 69 6e 64 2d 32 37 2e  }}.test bind-27.
277e0 35 20 7b 62 75 74 74 6f 6e 20 6e 61 6d 65 73 7d  5 {button names}
277f0 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72   -setup {.    fr
27800 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20  ame .t.f -class 
27810 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20  Test -width 150 
27820 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20  -height 100.    
27830 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f  pack .t.f.    fo
27840 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a  cus -force .t.f.
27850 20 20 20 20 75 70 64 61 74 65 0a 7d 20 2d 62 6f      update.} -bo
27860 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74  dy {.    bind .t
27870 2e 66 20 3c 42 75 74 74 6f 6e 2d 33 3e 20 7b 6c  .f <Button-3> {l
27880 61 70 70 65 6e 64 20 78 20 22 62 75 74 74 6f 6e  append x "button
27890 20 33 22 7d 0a 20 20 20 20 73 65 74 20 78 20 5b   3"}.    set x [
278a0 62 69 6e 64 20 2e 74 2e 66 5d 0a 20 20 20 20 65  bind .t.f].    e
278b0 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
278c0 2e 66 20 3c 42 75 74 74 6f 6e 2d 33 3e 0a 20 20  .f <Button-3>.  
278d0 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
278e0 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65 6c   .t.f <ButtonRel
278f0 65 61 73 65 2d 33 3e 0a 20 20 20 20 73 65 74 20  ease-3>.    set 
27900 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  x.} -cleanup {. 
27910 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
27920 7d 20 2d 72 65 73 75 6c 74 20 7b 3c 42 75 74 74  } -result {<Butt
27930 6f 6e 2d 33 3e 20 7b 62 75 74 74 6f 6e 20 33 7d  on-3> {button 3}
27940 7d 0a 74 65 73 74 20 62 69 6e 64 2d 32 37 2e 36  }.test bind-27.6
27950 20 7b 62 75 74 74 6f 6e 20 6e 61 6d 65 73 7d 20   {button names} 
27960 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61  -setup {.    fra
27970 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54  me .t.f -class T
27980 65 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d  est -width 150 -
27990 68 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70  height 100.    p
279a0 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63  ack .t.f.    foc
279b0 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20  us -force .t.f. 
279c0 20 20 20 75 70 64 61 74 65 0a 7d 20 2d 62 6f 64     update.} -bod
279d0 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  y {.    bind .t.
279e0 66 20 3c 42 75 74 74 6f 6e 2d 34 3e 20 7b 6c 61  f <Button-4> {la
279f0 70 70 65 6e 64 20 78 20 22 62 75 74 74 6f 6e 20  ppend x "button 
27a00 34 22 7d 0a 20 20 20 20 73 65 74 20 78 20 5b 62  4"}.    set x [b
27a10 69 6e 64 20 2e 74 2e 66 5d 0a 20 20 20 20 65 76  ind .t.f].    ev
27a20 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
27a30 66 20 3c 42 75 74 74 6f 6e 2d 34 3e 0a 20 20 20  f <Button-4>.   
27a40 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
27a50 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65  .t.f <ButtonRele
27a60 61 73 65 2d 34 3e 0a 20 20 20 20 73 65 74 20 78  ase-4>.    set x
27a70 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20  .} -cleanup {.  
27a80 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d    destroy .t.f.}
27a90 20 2d 72 65 73 75 6c 74 20 7b 3c 42 75 74 74 6f   -result {<Butto
27aa0 6e 2d 34 3e 20 7b 62 75 74 74 6f 6e 20 34 7d 7d  n-4> {button 4}}
27ab0 0a 74 65 73 74 20 62 69 6e 64 2d 32 37 2e 37 20  .test bind-27.7 
27ac0 7b 62 75 74 74 6f 6e 20 6e 61 6d 65 73 7d 20 2d  {button names} -
27ad0 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d  setup {.    fram
27ae0 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65  e .t.f -class Te
27af0 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68  st -width 150 -h
27b00 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61  eight 100.    pa
27b10 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75  ck .t.f.    focu
27b20 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20  s -force .t.f.  
27b30 20 20 75 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79    update.} -body
27b40 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66   {.    bind .t.f
27b50 20 3c 42 75 74 74 6f 6e 2d 35 3e 20 7b 6c 61 70   <Button-5> {lap
27b60 70 65 6e 64 20 78 20 22 62 75 74 74 6f 6e 20 35  pend x "button 5
27b70 22 7d 0a 20 20 20 20 73 65 74 20 78 20 5b 62 69  "}.    set x [bi
27b80 6e 64 20 2e 74 2e 66 5d 0a 20 20 20 20 65 76 65  nd .t.f].    eve
27b90 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
27ba0 20 3c 42 75 74 74 6f 6e 2d 35 3e 0a 20 20 20 20   <Button-5>.    
27bb0 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
27bc0 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65 61  t.f <ButtonRelea
27bd0 73 65 2d 35 3e 0a 20 20 20 20 73 65 74 20 78 0a  se-5>.    set x.
27be0 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20  } -cleanup {.   
27bf0 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20   destroy .t.f.} 
27c00 2d 72 65 73 75 6c 74 20 7b 3c 42 75 74 74 6f 6e  -result {<Button
27c10 2d 35 3e 20 7b 62 75 74 74 6f 6e 20 35 7d 7d 0a  -5> {button 5}}.
27c20 0a 74 65 73 74 20 62 69 6e 64 2d 32 38 2e 31 20  .test bind-28.1 
27c30 7b 6b 65 79 73 79 6d 20 6e 61 6d 65 73 7d 20 2d  {keysym names} -
27c40 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20  body {.    bind 
27c50 2e 74 20 3c 45 78 70 6f 73 65 2d 61 3e 20 66 6f  .t <Expose-a> fo
27c60 6f 0a 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73  o.} -returnCodes
27c70 20 65 72 72 6f 72 20 2d 72 65 73 75 6c 74 20 7b   error -result {
27c80 73 70 65 63 69 66 69 65 64 20 6b 65 79 73 79 6d  specified keysym
27c90 20 22 61 22 20 66 6f 72 20 6e 6f 6e 2d 6b 65 79   "a" for non-key
27ca0 20 65 76 65 6e 74 7d 0a 74 65 73 74 20 62 69 6e   event}.test bin
27cb0 64 2d 32 38 2e 32 20 7b 6b 65 79 73 79 6d 20 6e  d-28.2 {keysym n
27cc0 61 6d 65 73 7d 20 2d 62 6f 64 79 20 7b 0a 20 20  ames} -body {.  
27cd0 20 20 62 69 6e 64 20 2e 74 20 3c 47 6f 72 70 3e    bind .t <Gorp>
27ce0 20 66 6f 6f 0a 7d 20 2d 72 65 74 75 72 6e 43 6f   foo.} -returnCo
27cf0 64 65 73 20 65 72 72 6f 72 20 2d 72 65 73 75 6c  des error -resul
27d00 74 20 7b 62 61 64 20 65 76 65 6e 74 20 74 79 70  t {bad event typ
27d10 65 20 6f 72 20 6b 65 79 73 79 6d 20 22 47 6f 72  e or keysym "Gor
27d20 70 22 7d 0a 74 65 73 74 20 62 69 6e 64 2d 32 38  p"}.test bind-28
27d30 2e 33 20 7b 6b 65 79 73 79 6d 20 6e 61 6d 65 73  .3 {keysym names
27d40 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
27d50 6e 64 20 2e 74 20 3c 4b 65 79 2d 53 74 75 70 69  nd .t <Key-Stupi
27d60 64 3e 20 66 6f 6f 0a 7d 20 2d 72 65 74 75 72 6e  d> foo.} -return
27d70 43 6f 64 65 73 20 65 72 72 6f 72 20 2d 72 65 73  Codes error -res
27d80 75 6c 74 20 7b 62 61 64 20 65 76 65 6e 74 20 74  ult {bad event t
27d90 79 70 65 20 6f 72 20 6b 65 79 73 79 6d 20 22 53  ype or keysym "S
27da0 74 75 70 69 64 22 7d 0a 74 65 73 74 20 62 69 6e  tupid"}.test bin
27db0 64 2d 32 38 2e 34 20 7b 6b 65 79 73 79 6d 20 6e  d-28.4 {keysym n
27dc0 61 6d 65 73 7d 20 2d 62 6f 64 79 20 7b 0a 20 20  ames} -body {.  
27dd0 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c    frame .t.f -cl
27de0 61 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20  ass Test -width 
27df0 31 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a  150 -height 100.
27e00 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 61      bind .t.f <a
27e10 3e 20 66 6f 6f 0a 20 20 20 20 62 69 6e 64 20 2e  > foo.    bind .
27e20 74 2e 66 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  t.f.} -cleanup {
27e30 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e  .    destroy .t.
27e40 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 61 7d 0a  f.} -result {a}.
27e50 0a 74 65 73 74 20 62 69 6e 64 2d 32 38 2e 35 20  .test bind-28.5 
27e60 7b 6b 65 79 73 79 6d 20 6e 61 6d 65 73 7d 20 2d  {keysym names} -
27e70 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d  setup {.    fram
27e80 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65  e .t.f -class Te
27e90 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68  st -width 150 -h
27ea0 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61  eight 100.    pa
27eb0 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75  ck .t.f.    focu
27ec0 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20  s -force .t.f.  
27ed0 20 20 75 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79    update.} -body
27ee0 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66   {.    bind .t.f
27ef0 20 3c 4b 65 79 2d 63 6f 6c 6f 6e 3e 20 22 6c 61   <Key-colon> "la
27f00 70 70 65 6e 64 20 78 20 5c 22 6b 65 79 73 79 6d  ppend x \"keysym
27f10 20 72 65 63 65 69 76 65 64 5c 22 22 0a 20 20 20   received\"".   
27f20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 4b 65 79 2d   bind .t.f <Key-
27f30 75 6e 64 65 72 73 63 6f 72 65 3e 20 22 6c 61 70  underscore> "lap
27f40 70 65 6e 64 20 78 20 7b 62 61 64 20 62 69 6e 64  pend x {bad bind
27f50 69 6e 67 20 6d 61 74 63 68 7d 22 0a 20 20 20 20  ing match}".    
27f60 73 65 74 20 78 20 5b 6c 73 6f 72 74 20 5b 62 69  set x [lsort [bi
27f70 6e 64 20 2e 74 2e 66 5d 5d 0a 20 20 20 20 65 76  nd .t.f]].    ev
27f80 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
27f90 66 20 3c 4b 65 79 2d 63 6f 6c 6f 6e 3e 20 3b 23  f <Key-colon> ;#
27fa0 20 2d 73 74 61 74 65 20 30 0a 20 20 20 20 73 65   -state 0.    se
27fb0 74 20 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  t x.} -cleanup {
27fc0 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e  .    destroy .t.
27fd0 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 3a 20 5f  f.} -result {: _
27fe0 20 7b 6b 65 79 73 79 6d 20 72 65 63 65 69 76 65   {keysym receive
27ff0 64 7d 7d 0a 74 65 73 74 20 62 69 6e 64 2d 32 38  d}}.test bind-28
28000 2e 36 20 7b 6b 65 79 73 79 6d 20 6e 61 6d 65 73  .6 {keysym names
28010 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66  } -setup {.    f
28020 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73  rame .t.f -class
28030 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30   Test -width 150
28040 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20   -height 100.   
28050 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66   pack .t.f.    f
28060 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66  ocus -force .t.f
28070 0a 20 20 20 20 75 70 64 61 74 65 0a 7d 20 2d 62  .    update.} -b
28080 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e  ody {.    bind .
28090 74 2e 66 20 3c 4b 65 79 2d 52 65 74 75 72 6e 3e  t.f <Key-Return>
280a0 20 22 6c 61 70 70 65 6e 64 20 78 20 5c 22 6b 65   "lappend x \"ke
280b0 79 73 79 6d 20 52 65 74 75 72 6e 5c 22 22 0a 20  ysym Return\"". 
280c0 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 4b 65     bind .t.f <Ke
280d0 79 2d 78 3e 20 22 6c 61 70 70 65 6e 64 20 78 20  y-x> "lappend x 
280e0 7b 62 61 64 20 62 69 6e 64 69 6e 67 20 6d 61 74  {bad binding mat
280f0 63 68 7d 22 0a 20 20 20 20 73 65 74 20 78 20 5b  ch}".    set x [
28100 6c 73 6f 72 74 20 5b 62 69 6e 64 20 2e 74 2e 66  lsort [bind .t.f
28110 5d 5d 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e  ]].    event gen
28120 65 72 61 74 65 20 2e 74 2e 66 20 3c 4b 65 79 2d  erate .t.f <Key-
28130 52 65 74 75 72 6e 3e 20 2d 73 74 61 74 65 20 30  Return> -state 0
28140 0a 20 20 20 20 73 65 74 20 78 0a 7d 20 2d 63 6c  .    set x.} -cl
28150 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74  eanup {.    dest
28160 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75  roy .t.f.} -resu
28170 6c 74 20 7b 3c 4b 65 79 2d 52 65 74 75 72 6e 3e  lt {<Key-Return>
28180 20 78 20 7b 6b 65 79 73 79 6d 20 52 65 74 75 72   x {keysym Retur
28190 6e 7d 7d 0a 74 65 73 74 20 62 69 6e 64 2d 32 38  n}}.test bind-28
281a0 2e 37 20 7b 6b 65 79 73 79 6d 20 6e 61 6d 65 73  .7 {keysym names
281b0 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66  } -setup {.    f
281c0 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73  rame .t.f -class
281d0 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35 30   Test -width 150
281e0 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20 20   -height 100.   
281f0 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66   pack .t.f.    f
28200 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66  ocus -force .t.f
28210 0a 20 20 20 20 75 70 64 61 74 65 0a 7d 20 2d 62  .    update.} -b
28220 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e  ody {.    bind .
28230 74 2e 66 20 3c 4b 65 79 2d 58 3e 20 22 6c 61 70  t.f <Key-X> "lap
28240 70 65 6e 64 20 78 20 5c 22 6b 65 79 73 79 6d 20  pend x \"keysym 
28250 58 5c 22 22 0a 20 20 20 20 62 69 6e 64 20 2e 74  X\"".    bind .t
28260 2e 66 20 3c 4b 65 79 2d 78 3e 20 22 6c 61 70 70  .f <Key-x> "lapp
28270 65 6e 64 20 78 20 7b 62 61 64 20 62 69 6e 64 69  end x {bad bindi
28280 6e 67 20 6d 61 74 63 68 7d 22 0a 20 20 20 20 73  ng match}".    s
28290 65 74 20 78 20 5b 6c 73 6f 72 74 20 5b 62 69 6e  et x [lsort [bin
282a0 64 20 2e 74 2e 66 5d 5d 0a 20 20 20 20 65 76 65  d .t.f]].    eve
282b0 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
282c0 20 3c 4b 65 79 2d 58 3e 20 2d 73 74 61 74 65 20   <Key-X> -state 
282d0 31 0a 20 20 20 20 73 65 74 20 78 0a 7d 20 2d 63  1.    set x.} -c
282e0 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73  leanup {.    des
282f0 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73  troy .t.f.} -res
28300 75 6c 74 20 7b 58 20 78 20 7b 6b 65 79 73 79 6d  ult {X x {keysym
28310 20 58 7d 7d 0a 74 65 73 74 20 62 69 6e 64 2d 32   X}}.test bind-2
28320 38 2e 38 20 7b 6b 65 79 73 79 6d 20 6e 61 6d 65  8.8 {keysym name
28330 73 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20  s} -setup {.    
28340 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73  frame .t.f -clas
28350 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35  s Test -width 15
28360 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20  0 -height 100.  
28370 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20    pack .t.f.    
28380 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e  focus -force .t.
28390 66 0a 20 20 20 20 75 70 64 61 74 65 0a 7d 20 2d  f.    update.} -
283a0 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20  body {.    bind 
283b0 2e 74 2e 66 20 3c 4b 65 79 2d 58 3e 20 22 6c 61  .t.f <Key-X> "la
283c0 70 70 65 6e 64 20 78 20 5c 22 6b 65 79 73 79 6d  ppend x \"keysym
283d0 20 58 5c 22 22 0a 20 20 20 20 62 69 6e 64 20 2e   X\"".    bind .
283e0 74 2e 66 20 3c 4b 65 79 2d 78 3e 20 22 6c 61 70  t.f <Key-x> "lap
283f0 70 65 6e 64 20 78 20 7b 62 61 64 20 62 69 6e 64  pend x {bad bind
28400 69 6e 67 20 6d 61 74 63 68 7d 22 0a 20 20 20 20  ing match}".    
28410 73 65 74 20 78 20 5b 6c 73 6f 72 74 20 5b 62 69  set x [lsort [bi
28420 6e 64 20 2e 74 2e 66 5d 5d 0a 20 20 20 20 65 76  nd .t.f]].    ev
28430 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
28440 66 20 3c 4b 65 79 2d 58 3e 20 2d 73 74 61 74 65  f <Key-X> -state
28450 20 31 0a 20 20 20 20 73 65 74 20 78 0a 7d 20 2d   1.    set x.} -
28460 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
28470 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65  stroy .t.f.} -re
28480 73 75 6c 74 20 7b 58 20 78 20 7b 6b 65 79 73 79  sult {X x {keysy
28490 6d 20 58 7d 7d 0a 0a 0a 74 65 73 74 20 62 69 6e  m X}}...test bin
284a0 64 2d 32 39 2e 31 20 7b 54 6b 5f 42 61 63 6b 67  d-29.1 {Tk_Backg
284b0 72 6f 75 6e 64 45 72 72 6f 72 20 70 72 6f 63 65  roundError proce
284c0 64 75 72 65 7d 20 2d 73 65 74 75 70 20 7b 0a 20  dure} -setup {. 
284d0 20 20 20 70 72 6f 63 20 62 67 65 72 72 6f 72 20     proc bgerror 
284e0 6d 73 67 20 7b 0a 20 20 20 20 20 20 20 20 67 6c  msg {.        gl
284f0 6f 62 61 6c 20 78 20 65 72 72 6f 72 49 6e 66 6f  obal x errorInfo
28500 0a 20 20 20 20 20 20 20 20 73 65 74 20 78 20 5b  .        set x [
28510 6c 69 73 74 20 24 6d 73 67 20 24 65 72 72 6f 72  list $msg $error
28520 49 6e 66 6f 5d 0a 20 20 20 20 7d 0a 20 20 20 20  Info].    }.    
28530 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61 73  frame .t.f -clas
28540 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31 35  s Test -width 15
28550 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20 20  0 -height 100.  
28560 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20 20    pack .t.f.    
28570 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e  focus -force .t.
28580 66 0a 20 20 20 20 75 70 64 61 74 65 0a 7d 20 2d  f.    update.} -
28590 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20  body {.    bind 
285a0 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 3e 20 7b 65  .t.f <Button> {e
285b0 72 72 6f 72 20 22 54 68 69 73 20 69 73 20 61 20  rror "This is a 
285c0 74 65 73 74 22 7d 0a 20 20 20 20 73 65 74 20 78  test"}.    set x
285d0 20 6e 6f 6e 65 0a 20 20 20 20 65 76 65 6e 74 20   none.    event 
285e0 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42  generate .t.f <B
285f0 75 74 74 6f 6e 3e 0a 20 20 20 20 65 76 65 6e 74  utton>.    event
28600 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
28610 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 3e 0a 20  ButtonRelease>. 
28620 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73 65     update.    se
28630 74 20 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  t x.} -cleanup {
28640 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e  .    destroy .t.
28650 66 0a 20 20 20 20 72 65 6e 61 6d 65 20 62 67 65  f.    rename bge
28660 72 72 6f 72 20 7b 7d 0a 7d 20 2d 72 65 73 75 6c  rror {}.} -resul
28670 74 20 7b 7b 54 68 69 73 20 69 73 20 61 20 74 65  t {{This is a te
28680 73 74 7d 20 7b 54 68 69 73 20 69 73 20 61 20 74  st} {This is a t
28690 65 73 74 0a 20 20 20 20 77 68 69 6c 65 20 65 78  est.    while ex
286a0 65 63 75 74 69 6e 67 0a 22 65 72 72 6f 72 20 22  ecuting."error "
286b0 54 68 69 73 20 69 73 20 61 20 74 65 73 74 22 22  This is a test""
286c0 0a 20 20 20 20 28 63 6f 6d 6d 61 6e 64 20 62 6f  .    (command bo
286d0 75 6e 64 20 74 6f 20 65 76 65 6e 74 29 7d 7d 0a  und to event)}}.
286e0 20 20 20 20 0a 74 65 73 74 20 62 69 6e 64 2d 32      .test bind-2
286f0 39 2e 32 20 7b 54 6b 5f 42 61 63 6b 67 72 6f 75  9.2 {Tk_Backgrou
28700 6e 64 45 72 72 6f 72 20 70 72 6f 63 65 64 75 72  ndError procedur
28710 65 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20  e} -setup {.    
28720 70 72 6f 63 20 64 6f 20 7b 7d 20 7b 0a 20 20 20  proc do {} {.   
28730 20 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72       event gener
28740 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e  ate .t.f <Button
28750 3e 0a 20 20 20 20 20 20 20 20 65 76 65 6e 74 20  >.        event 
28760 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42  generate .t.f <B
28770 75 74 74 6f 6e 52 65 6c 65 61 73 65 3e 0a 20 20  uttonRelease>.  
28780 20 20 7d 0a 20 20 20 20 70 72 6f 63 20 62 67 65    }.    proc bge
28790 72 72 6f 72 20 6d 73 67 20 7b 0a 20 20 20 20 20  rror msg {.     
287a0 20 20 20 67 6c 6f 62 61 6c 20 78 20 65 72 72 6f     global x erro
287b0 72 49 6e 66 6f 0a 20 20 20 20 20 20 20 20 73 65  rInfo.        se
287c0 74 20 78 20 5b 6c 69 73 74 20 24 6d 73 67 20 24  t x [list $msg $
287d0 65 72 72 6f 72 49 6e 66 6f 5d 0a 20 20 20 20 7d  errorInfo].    }
287e0 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20  .    frame .t.f 
287f0 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64  -class Test -wid
28800 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31  th 150 -height 1
28810 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66  00.    pack .t.f
28820 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
28830 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
28840 65 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  e.} -body {.    
28850 62 69 6e 64 20 2e 74 2e 66 20 3c 42 75 74 74 6f  bind .t.f <Butto
28860 6e 3e 20 7b 65 72 72 6f 72 20 4d 65 73 73 61 67  n> {error Messag
28870 65 32 7d 0a 20 20 20 20 73 65 74 20 78 20 6e 6f  e2}.    set x no
28880 6e 65 0a 20 20 20 20 64 6f 0a 20 20 20 20 75 70  ne.    do.    up
28890 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 0a 7d  date.    set x.}
288a0 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
288b0 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 20 20 20  destroy .t.f.   
288c0 20 72 65 6e 61 6d 65 20 62 67 65 72 72 6f 72 20   rename bgerror 
288d0 7b 7d 0a 20 20 20 20 72 65 6e 61 6d 65 20 64 6f  {}.    rename do
288e0 20 7b 7d 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 4d   {}.} -result {M
288f0 65 73 73 61 67 65 32 20 7b 4d 65 73 73 61 67 65  essage2 {Message
28900 32 0a 20 20 20 20 77 68 69 6c 65 20 65 78 65 63  2.    while exec
28910 75 74 69 6e 67 0a 22 65 72 72 6f 72 20 4d 65 73  uting."error Mes
28920 73 61 67 65 32 22 0a 20 20 20 20 28 63 6f 6d 6d  sage2".    (comm
28930 61 6e 64 20 62 6f 75 6e 64 20 74 6f 20 65 76 65  and bound to eve
28940 6e 74 29 7d 7d 0a 0a 0a 74 65 73 74 20 62 69 6e  nt)}}...test bin
28950 64 2d 33 30 2e 31 20 7b 4d 6f 75 73 65 57 68 65  d-30.1 {MouseWhe
28960 65 6c 20 65 76 65 6e 74 73 7d 20 2d 73 65 74 75  el events} -setu
28970 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74  p {.    frame .t
28980 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d  .f -class Test -
28990 77 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68  width 150 -heigh
289a0 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e  t 100.    pack .
289b0 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66  t.f.    focus -f
289c0 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70  orce .t.f.    up
289d0 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b  date.    set x {
289e0 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  }.} -body {.    
289f0 62 69 6e 64 20 2e 74 2e 66 20 3c 4d 6f 75 73 65  bind .t.f <Mouse
28a00 57 68 65 65 6c 3e 20 7b 73 65 74 20 78 20 57 68  Wheel> {set x Wh
28a10 65 65 6c 7d 0a 20 20 20 20 65 76 65 6e 74 20 67  eel}.    event g
28a20 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 4d 6f  enerate .t.f <Mo
28a30 75 73 65 57 68 65 65 6c 3e 0a 20 20 20 20 73 65  useWheel>.    se
28a40 74 20 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  t x.} -cleanup {
28a50 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e  .    destroy .t.
28a60 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 57 68 65  f.} -result {Whe
28a70 65 6c 7d 0a 74 65 73 74 20 62 69 6e 64 2d 33 30  el}.test bind-30
28a80 2e 32 20 7b 4d 6f 75 73 65 57 68 65 65 6c 20 65  .2 {MouseWheel e
28a90 76 65 6e 74 73 7d 20 2d 73 65 74 75 70 20 7b 0a  vents} -setup {.
28aa0 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d      frame .t.f -
28ab0 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69 64 74  class Test -widt
28ac0 68 20 31 35 30 20 2d 68 65 69 67 68 74 20 31 30  h 150 -height 10
28ad0 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a  0.    pack .t.f.
28ae0 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65      focus -force
28af0 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65   .t.f.    update
28b00 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20  .    set x {}.} 
28b10 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64  -body {.    bind
28b20 20 2e 74 2e 66 20 3c 4d 6f 75 73 65 57 68 65 65   .t.f <MouseWhee
28b30 6c 3e 20 7b 73 65 74 20 78 20 25 44 7d 0a 20 20  l> {set x %D}.  
28b40 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
28b50 20 2e 74 2e 66 20 3c 4d 6f 75 73 65 57 68 65 65   .t.f <MouseWhee
28b60 6c 3e 20 2d 64 65 6c 74 61 20 31 32 30 0a 20 20  l> -delta 120.  
28b70 20 20 73 65 74 20 78 0a 7d 20 2d 63 6c 65 61 6e    set x.} -clean
28b80 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79  up {.    destroy
28b90 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20   .t.f.} -result 
28ba0 7b 31 32 30 7d 0a 74 65 73 74 20 62 69 6e 64 2d  {120}.test bind-
28bb0 33 30 2e 33 20 7b 4d 6f 75 73 65 57 68 65 65 6c  30.3 {MouseWheel
28bc0 20 65 76 65 6e 74 73 7d 20 2d 73 65 74 75 70 20   events} -setup 
28bd0 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66  {.    frame .t.f
28be0 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69   -class Test -wi
28bf0 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20  dth 150 -height 
28c00 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e  100.    pack .t.
28c10 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72  f.    focus -for
28c20 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61  ce .t.f.    upda
28c30 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a  te.    set x {}.
28c40 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
28c50 6e 64 20 2e 74 2e 66 20 3c 4d 6f 75 73 65 57 68  nd .t.f <MouseWh
28c60 65 65 6c 3e 20 7b 73 65 74 20 78 20 22 25 44 20  eel> {set x "%D 
28c70 25 78 20 25 79 22 7d 0a 20 20 20 20 65 76 65 6e  %x %y"}.    even
28c80 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
28c90 3c 4d 6f 75 73 65 57 68 65 65 6c 3e 20 2d 64 65  <MouseWheel> -de
28ca0 6c 74 61 20 32 34 30 20 2d 78 20 31 30 20 2d 79  lta 240 -x 10 -y
28cb0 20 33 30 0a 20 20 20 20 73 65 74 20 78 0a 7d 20   30.    set x.} 
28cc0 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64  -cleanup {.    d
28cd0 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72  estroy .t.f.} -r
28ce0 65 73 75 6c 74 20 7b 32 34 30 20 31 30 20 33 30  esult {240 10 30
28cf0 7d 0a 0a 0a 74 65 73 74 20 62 69 6e 64 2d 33 31  }...test bind-31
28d00 2e 31 20 7b 76 69 72 74 75 61 6c 20 65 76 65 6e  .1 {virtual even
28d10 74 20 75 73 65 72 5f 64 61 74 61 20 66 69 65 6c  t user_data fiel
28d20 64 20 2d 20 62 61 64 20 67 65 6e 65 72 61 74 69  d - bad generati
28d30 6f 6e 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20  on} -setup {.   
28d40 20 66 72 61 6d 65 20 2e 74 2e 66 20 2d 63 6c 61   frame .t.f -cla
28d50 73 73 20 54 65 73 74 20 2d 77 69 64 74 68 20 31  ss Test -width 1
28d60 35 30 20 2d 68 65 69 67 68 74 20 31 30 30 0a 20  50 -height 100. 
28d70 20 20 20 70 61 63 6b 20 2e 74 2e 66 0a 20 20 20     pack .t.f.   
28d80 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74   focus -force .t
28d90 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 7d 20  .f.    update.} 
28da0 2d 62 6f 64 79 20 7b 0a 23 20 43 68 65 63 6b 20  -body {.# Check 
28db0 6e 6f 20 63 6f 6e 66 75 73 69 6f 6e 2c 20 73 69  no confusion, si
28dc0 6e 63 65 20 46 6f 63 75 73 20 65 76 65 6e 74 73  nce Focus events
28dd0 20 75 73 65 20 25 64 20 66 6f 72 20 73 6f 6d 65   use %d for some
28de0 74 68 69 6e 67 20 65 6c 73 65 0a 20 20 20 20 65  thing else.    e
28df0 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
28e00 2e 66 20 3c 46 6f 63 75 73 49 6e 3e 20 2d 64 61  .f <FocusIn> -da
28e10 74 61 20 66 6f 6f 0a 7d 20 2d 63 6c 65 61 6e 75  ta foo.} -cleanu
28e20 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20  p {.    destroy 
28e30 2e 74 2e 66 0a 7d 20 2d 72 65 74 75 72 6e 43 6f  .t.f.} -returnCo
28e40 64 65 73 20 65 72 72 6f 72 20 2d 72 65 73 75 6c  des error -resul
28e50 74 20 7b 3c 46 6f 63 75 73 49 6e 3e 20 65 76 65  t {<FocusIn> eve
28e60 6e 74 20 64 6f 65 73 6e 27 74 20 61 63 63 65 70  nt doesn't accep
28e70 74 20 22 2d 64 61 74 61 22 20 6f 70 74 69 6f 6e  t "-data" option
28e80 7d 0a 74 65 73 74 20 62 69 6e 64 2d 33 31 2e 32  }.test bind-31.2
28e90 20 7b 76 69 72 74 75 61 6c 20 65 76 65 6e 74 20   {virtual event 
28ea0 75 73 65 72 5f 64 61 74 61 20 66 69 65 6c 64 20  user_data field 
28eb0 2d 20 4e 55 4c 4c 2c 20 73 79 6e 63 68 7d 20 2d  - NULL, synch} -
28ec0 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d  setup {.    fram
28ed0 65 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65  e .t.f -class Te
28ee0 73 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68  st -width 150 -h
28ef0 65 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61  eight 100.    pa
28f00 63 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75  ck .t.f.    focu
28f10 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20  s -force .t.f.  
28f20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73 65 74    update.    set
28f30 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a   x {}.} -body {.
28f40 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 3c      bind .t.f <<
28f50 54 65 73 74 55 73 65 72 44 61 74 61 3e 3e 20 7b  TestUserData>> {
28f60 73 65 74 20 78 20 22 54 65 73 74 55 73 65 72 44  set x "TestUserD
28f70 61 74 61 20 3e 25 64 3c 22 7d 0a 20 20 20 20 65  ata >%d<"}.    e
28f80 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
28f90 2e 66 20 3c 3c 54 65 73 74 55 73 65 72 44 61 74  .f <<TestUserDat
28fa0 61 3e 3e 0a 20 20 20 20 73 65 74 20 78 0a 7d 20  a>>.    set x.} 
28fb0 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64  -cleanup {.    d
28fc0 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72  estroy .t.f.} -r
28fd0 65 73 75 6c 74 20 7b 54 65 73 74 55 73 65 72 44  esult {TestUserD
28fe0 61 74 61 20 3e 7b 7d 3c 7d 0a 74 65 73 74 20 62  ata >{}<}.test b
28ff0 69 6e 64 2d 33 31 2e 33 20 7b 76 69 72 74 75 61  ind-31.3 {virtua
29000 6c 20 65 76 65 6e 74 20 75 73 65 72 5f 64 61 74  l event user_dat
29010 61 20 66 69 65 6c 64 20 2d 20 73 68 61 72 65 64  a field - shared
29020 2c 20 73 79 6e 63 68 7d 20 2d 73 65 74 75 70 20  , synch} -setup 
29030 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e 66  {.    frame .t.f
29040 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77 69   -class Test -wi
29050 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74 20  dth 150 -height 
29060 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74 2e  100.    pack .t.
29070 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72  f.    focus -for
29080 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61  ce .t.f.    upda
29090 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a  te.    set x {}.
290a0 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
290b0 6e 64 20 2e 74 2e 66 20 3c 3c 54 65 73 74 55 73  nd .t.f <<TestUs
290c0 65 72 44 61 74 61 3e 3e 20 7b 73 65 74 20 78 20  erData>> {set x 
290d0 22 54 65 73 74 55 73 65 72 44 61 74 61 20 3e 25  "TestUserData >%
290e0 64 3c 22 7d 0a 20 20 20 20 65 76 65 6e 74 20 67  d<"}.    event g
290f0 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 3c 54  enerate .t.f <<T
29100 65 73 74 55 73 65 72 44 61 74 61 3e 3e 20 2d 64  estUserData>> -d
29110 61 74 61 20 22 66 6f 6f 20 62 61 72 22 0a 20 20  ata "foo bar".  
29120 20 20 73 65 74 20 78 0a 7d 20 2d 63 6c 65 61 6e    set x.} -clean
29130 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79  up {.    destroy
29140 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20   .t.f.} -result 
29150 7b 54 65 73 74 55 73 65 72 44 61 74 61 20 3e 66  {TestUserData >f
29160 6f 6f 20 62 61 72 3c 7d 0a 74 65 73 74 20 62 69  oo bar<}.test bi
29170 6e 64 2d 33 31 2e 34 20 7b 76 69 72 74 75 61 6c  nd-31.4 {virtual
29180 20 65 76 65 6e 74 20 75 73 65 72 5f 64 61 74 61   event user_data
29190 20 66 69 65 6c 64 20 2d 20 75 6e 73 68 61 72 65   field - unshare
291a0 64 2c 20 73 79 6e 63 68 7d 20 2d 73 65 74 75 70  d, synch} -setup
291b0 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e   {.    frame .t.
291c0 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77  f -class Test -w
291d0 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74  idth 150 -height
291e0 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74   100.    pack .t
291f0 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f  .f.    focus -fo
29200 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64  rce .t.f.    upd
29210 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d  ate.    set x {}
29220 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62  .} -body {.    b
29230 69 6e 64 20 2e 74 2e 66 20 3c 3c 54 65 73 74 55  ind .t.f <<TestU
29240 73 65 72 44 61 74 61 3e 3e 20 7b 73 65 74 20 78  serData>> {set x
29250 20 22 54 65 73 74 55 73 65 72 44 61 74 61 20 3e   "TestUserData >
29260 25 64 3c 22 7d 0a 20 20 20 20 65 76 65 6e 74 20  %d<"}.    event 
29270 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 3c  generate .t.f <<
29280 54 65 73 74 55 73 65 72 44 61 74 61 3e 3e 20 2d  TestUserData>> -
29290 64 61 74 61 20 5b 73 74 72 69 6e 67 20 69 6e 64  data [string ind
292a0 65 78 20 61 62 63 20 31 5d 0a 20 20 20 20 73 65  ex abc 1].    se
292b0 74 20 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  t x.} -cleanup {
292c0 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e  .    destroy .t.
292d0 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 54 65 73  f.} -result {Tes
292e0 74 55 73 65 72 44 61 74 61 20 3e 62 3c 7d 0a 23  tUserData >b<}.#
292f0 20 4e 6f 74 65 20 74 68 61 74 20 61 73 79 6e 63   Note that async
29300 68 20 65 76 65 6e 74 20 68 61 6e 64 6c 69 6e 67  h event handling
29310 20 63 61 6e 20 6f 6e 6c 79 20 72 65 61 6c 6c 79   can only really
29320 20 63 61 74 63 68 20 61 6e 79 20 70 6f 74 65 6e   catch any poten
29330 74 69 61 6c 0a 23 20 65 78 74 72 61 20 65 72 72  tial.# extra err
29340 6f 72 73 20 77 68 65 6e 20 75 73 65 64 20 69 6e  ors when used in
29350 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 77 69 74   combination wit
29360 68 20 61 20 74 6f 6f 6c 20 6c 69 6b 65 20 50 75  h a tool like Pu
29370 72 69 66 79 20 6f 72 0a 23 20 56 61 6c 67 72 69  rify or.# Valgri
29380 6e 64 2e 20 53 75 63 68 20 74 65 73 74 69 6e 67  nd. Such testing
29390 20 69 73 20 72 61 72 65 6c 79 20 64 6f 6e 65 2c   is rarely done,
293a0 20 62 75 74 20 61 74 20 6c 65 61 73 74 20 61 6e   but at least an
293b0 79 20 70 72 6f 62 6c 65 6d 20 77 69 74 68 0a 23  y problem with.#
293c0 20 72 65 66 65 72 65 6e 63 65 20 68 61 6e 64 6c   reference handl
293d0 69 6e 67 20 77 69 6c 6c 20 65 76 65 6e 74 75 61  ing will eventua
293e0 6c 6c 79 20 73 68 6f 77 20 75 70 20 77 69 74 68  lly show up with
293f0 20 74 68 65 73 65 20 74 65 73 74 73 2e 2e 2e 0a   these tests....
29400 74 65 73 74 20 62 69 6e 64 2d 33 31 2e 35 20 7b  test bind-31.5 {
29410 76 69 72 74 75 61 6c 20 65 76 65 6e 74 20 75 73  virtual event us
29420 65 72 5f 64 61 74 61 20 66 69 65 6c 64 20 2d 20  er_data field - 
29430 4e 55 4c 4c 2c 20 61 73 79 6e 63 68 7d 20 2d 73  NULL, asynch} -s
29440 65 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65  etup {.    frame
29450 20 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73   .t.f -class Tes
29460 74 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65  t -width 150 -he
29470 69 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63  ight 100.    pac
29480 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73  k .t.f.    focus
29490 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20   -force .t.f.   
294a0 20 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20   update.    set 
294b0 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20  x {}.} -body {. 
294c0 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 3c 54     bind .t.f <<T
294d0 65 73 74 55 73 65 72 44 61 74 61 3e 3e 20 7b 73  estUserData>> {s
294e0 65 74 20 78 20 22 54 65 73 74 55 73 65 72 44 61  et x "TestUserDa
294f0 74 61 20 3e 25 64 3c 22 7d 0a 20 20 20 20 65 76  ta >%d<"}.    ev
29500 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
29510 66 20 3c 3c 54 65 73 74 55 73 65 72 44 61 74 61  f <<TestUserData
29520 3e 3e 20 2d 77 68 65 6e 20 68 65 61 64 0a 20 20  >> -when head.  
29530 20 20 6c 69 73 74 20 24 78 20 5b 75 70 64 61 74    list $x [updat
29540 65 5d 20 24 78 0a 7d 20 2d 63 6c 65 61 6e 75 70  e] $x.} -cleanup
29550 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
29560 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 7b  t.f.} -result {{
29570 7d 20 7b 7d 20 7b 54 65 73 74 55 73 65 72 44 61  } {} {TestUserDa
29580 74 61 20 3e 7b 7d 3c 7d 7d 0a 74 65 73 74 20 62  ta >{}<}}.test b
29590 69 6e 64 2d 33 31 2e 36 20 7b 76 69 72 74 75 61  ind-31.6 {virtua
295a0 6c 20 65 76 65 6e 74 20 75 73 65 72 5f 64 61 74  l event user_dat
295b0 61 20 66 69 65 6c 64 20 2d 20 73 68 61 72 65 64  a field - shared
295c0 2c 20 61 73 79 6e 63 68 7d 20 2d 73 65 74 75 70  , asynch} -setup
295d0 20 7b 0a 20 20 20 20 66 72 61 6d 65 20 2e 74 2e   {.    frame .t.
295e0 66 20 2d 63 6c 61 73 73 20 54 65 73 74 20 2d 77  f -class Test -w
295f0 69 64 74 68 20 31 35 30 20 2d 68 65 69 67 68 74  idth 150 -height
29600 20 31 30 30 0a 20 20 20 20 70 61 63 6b 20 2e 74   100.    pack .t
29610 2e 66 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f  .f.    focus -fo
29620 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64  rce .t.f.    upd
29630 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d  ate.    set x {}
29640 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62  .} -body {.    b
29650 69 6e 64 20 2e 74 2e 66 20 3c 3c 54 65 73 74 55  ind .t.f <<TestU
29660 73 65 72 44 61 74 61 3e 3e 20 7b 73 65 74 20 78  serData>> {set x
29670 20 22 54 65 73 74 55 73 65 72 44 61 74 61 20 3e   "TestUserData >
29680 25 64 3c 22 7d 0a 20 20 20 20 65 76 65 6e 74 20  %d<"}.    event 
29690 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 3c  generate .t.f <<
296a0 54 65 73 74 55 73 65 72 44 61 74 61 3e 3e 20 2d  TestUserData>> -
296b0 64 61 74 61 20 22 66 6f 6f 20 62 61 72 22 20 2d  data "foo bar" -
296c0 77 68 65 6e 20 68 65 61 64 0a 20 20 20 20 6c 69  when head.    li
296d0 73 74 20 24 78 20 5b 75 70 64 61 74 65 5d 20 24  st $x [update] $
296e0 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  x.} -cleanup {. 
296f0 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
29700 7d 20 2d 72 65 73 75 6c 74 20 7b 7b 7d 20 7b 7d  } -result {{} {}
29710 20 7b 54 65 73 74 55 73 65 72 44 61 74 61 20 3e   {TestUserData >
29720 66 6f 6f 20 62 61 72 3c 7d 7d 0a 74 65 73 74 20  foo bar<}}.test 
29730 62 69 6e 64 2d 33 31 2e 37 20 7b 76 69 72 74 75  bind-31.7 {virtu
29740 61 6c 20 65 76 65 6e 74 20 75 73 65 72 5f 64 61  al event user_da
29750 74 61 20 66 69 65 6c 64 20 2d 20 75 6e 73 68 61  ta field - unsha
29760 72 65 64 2c 20 61 73 79 6e 63 68 7d 20 2d 73 65  red, asynch} -se
29770 74 75 70 20 7b 0a 20 20 20 20 66 72 61 6d 65 20  tup {.    frame 
29780 2e 74 2e 66 20 2d 63 6c 61 73 73 20 54 65 73 74  .t.f -class Test
29790 20 2d 77 69 64 74 68 20 31 35 30 20 2d 68 65 69   -width 150 -hei
297a0 67 68 74 20 31 30 30 0a 20 20 20 20 70 61 63 6b  ght 100.    pack
297b0 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73 20   .t.f.    focus 
297c0 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20  -force .t.f.    
297d0 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78  update.    set x
297e0 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20   {}.} -body {.  
297f0 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 3c 54 65    bind .t.f <<Te
29800 73 74 55 73 65 72 44 61 74 61 3e 3e 20 7b 73 65  stUserData>> {se
29810 74 20 78 20 22 54 65 73 74 55 73 65 72 44 61 74  t x "TestUserDat
29820 61 20 3e 25 64 3c 22 7d 0a 20 20 20 20 65 76 65  a >%d<"}.    eve
29830 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
29840 20 3c 3c 54 65 73 74 55 73 65 72 44 61 74 61 3e   <<TestUserData>
29850 3e 20 2d 64 61 74 61 20 5b 73 74 72 69 6e 67 20  > -data [string 
29860 69 6e 64 65 78 20 61 62 63 20 31 5d 20 2d 77 68  index abc 1] -wh
29870 65 6e 20 68 65 61 64 0a 20 20 20 20 6c 69 73 74  en head.    list
29880 20 24 78 20 5b 75 70 64 61 74 65 5d 20 24 78 0a   $x [update] $x.
29890 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20  } -cleanup {.   
298a0 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20   destroy .t.f.} 
298b0 2d 72 65 73 75 6c 74 20 7b 7b 7d 20 7b 7d 20 7b  -result {{} {} {
298c0 54 65 73 74 55 73 65 72 44 61 74 61 20 3e 62 3c  TestUserData >b<
298d0 7d 7d 0a 0a 74 65 73 74 20 62 69 6e 64 2d 33 32  }}..test bind-32
298e0 2e 31 20 7b 2d 77 61 72 70 2c 20 77 69 6e 64 6f  .1 {-warp, windo
298f0 77 20 77 61 73 20 64 65 73 74 72 6f 79 65 64 20  w was destroyed 
29900 62 65 66 6f 72 65 20 74 68 65 20 69 64 6c 65 20  before the idle 
29910 63 61 6c 6c 62 61 63 6b 20 44 6f 57 61 72 70 7d  callback DoWarp}
29920 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 66 72   -setup {.    fr
29930 61 6d 65 20 2e 74 2e 66 0a 20 20 20 20 70 61 63  ame .t.f.    pac
29940 6b 20 2e 74 2e 66 0a 20 20 20 20 66 6f 63 75 73  k .t.f.    focus
29950 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20   -force .t.f.   
29960 20 75 70 64 61 74 65 0a 7d 20 2d 62 6f 64 79 20   update.} -body 
29970 7b 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  {.    event gene
29980 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f  rate .t.f <Butto
29990 6e 2d 31 3e 20 2d 77 61 72 70 20 31 0a 20 20 20  n-1> -warp 1.   
299a0 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
299b0 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 52 65 6c 65  .t.f <ButtonRele
299c0 61 73 65 2d 31 3e 0a 20 20 20 20 64 65 73 74 72  ase-1>.    destr
299d0 6f 79 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61  oy .t.f.    upda
299e0 74 65 20 20 3b 20 20 23 20 73 68 61 6c 6c 20 73  te  ;  # shall s
299f0 69 6d 70 6c 79 20 6e 6f 74 20 63 72 61 73 68 0a  imply not crash.
29a00 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 7d 20 2d  } -cleanup {.} -
29a10 72 65 73 75 6c 74 20 7b 7d 0a 74 65 73 74 20 62  result {}.test b
29a20 69 6e 64 2d 33 32 2e 32 20 7b 64 65 74 65 63 74  ind-32.2 {detect
29a30 69 6f 6e 20 6f 66 20 64 6f 75 62 6c 65 20 63 6c  ion of double cl
29a40 69 63 6b 20 73 68 6f 75 6c 64 20 6e 6f 74 20 66  ick should not f
29a50 61 69 6c 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20  ail} -setup {.  
29a60 20 20 70 61 63 6b 20 5b 66 72 61 6d 65 20 2e 74    pack [frame .t
29a70 2e 66 5d 0a 20 20 20 20 66 6f 63 75 73 20 2d 66  .f].    focus -f
29a80 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 62 69  orce .t.f.    bi
29a90 6e 64 20 2e 74 2e 66 20 3c 44 6f 75 62 6c 65 2d  nd .t.f <Double-
29aa0 42 75 74 74 6f 6e 2d 31 3e 20 7b 20 73 65 74 20  Button-1> { set 
29ab0 78 20 22 44 6f 75 62 6c 65 22 20 7d 0a 20 20 20  x "Double" }.   
29ac0 20 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20   update.    set 
29ad0 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20  x {}.} -body {. 
29ae0 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
29af0 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 50 72  e .t.f <ButtonPr
29b00 65 73 73 2d 31 3e 0a 20 20 20 20 65 76 65 6e 74  ess-1>.    event
29b10 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
29b20 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 2d 31 3e  ButtonRelease-1>
29b30 0a 20 20 20 20 23 20 53 69 6d 75 6c 61 74 65 20  .    # Simulate 
29b40 61 20 6c 6f 74 20 6f 66 20 69 6e 74 65 72 76 65  a lot of interve
29b50 6e 69 6e 67 20 65 78 70 6f 73 75 72 65 20 65 76  ning exposure ev
29b60 65 6e 74 73 2c 20 77 69 74 68 20 6f 6c 64 20 69  ents, with old i
29b70 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 20 20  mplementation.  
29b80 20 20 23 20 74 68 65 20 65 76 65 6e 74 20 6c 6f    # the event lo
29b90 6f 70 20 6f 76 65 72 66 6c 6f 77 73 2c 20 61 6e  op overflows, an
29ba0 64 20 74 68 65 20 64 6f 75 62 6c 65 20 63 6c 69  d the double cli
29bb0 63 6b 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 64  ck will not be d
29bc0 65 74 65 63 74 65 64 2e 0a 20 20 20 20 23 20 42  etected..    # B
29bd0 75 74 20 6e 65 77 20 69 6d 70 6c 65 6d 65 6e 74  ut new implement
29be0 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 77 6f 72  ation should wor
29bf0 6b 20 70 72 6f 70 65 72 6c 79 2e 0a 20 20 20 20  k properly..    
29c00 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24  for {set i 0} {$
29c10 69 20 3c 20 31 30 30 30 7d 20 7b 69 6e 63 72 20  i < 1000} {incr 
29c20 69 7d 20 7b 0a 20 20 20 20 20 20 20 20 65 76 65  i} {.        eve
29c30 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
29c40 20 3c 45 78 70 6f 73 65 3e 0a 20 20 20 20 7d 0a   <Expose>.    }.
29c50 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
29c60 74 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 50  te .t.f <ButtonP
29c70 72 65 73 73 2d 31 3e 0a 20 20 20 20 65 76 65 6e  ress-1>.    even
29c80 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
29c90 3c 42 75 74 74 6f 6e 52 65 6c 65 61 73 65 2d 31  <ButtonRelease-1
29ca0 3e 0a 20 20 20 20 73 65 74 20 78 0a 7d 20 2d 63  >.    set x.} -c
29cb0 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73  leanup {.    des
29cc0 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73  troy .t.f.} -res
29cd0 75 6c 74 20 7b 44 6f 75 62 6c 65 7d 0a 74 65 73  ult {Double}.tes
29ce0 74 20 62 69 6e 64 2d 33 32 2e 33 20 7b 73 68 6f  t bind-32.3 {sho
29cf0 75 6c 64 20 74 72 69 67 67 65 72 20 62 65 73 74  uld trigger best
29d00 20 6d 61 74 63 68 20 6f 66 20 6d 6f 64 69 66 69   match of modifi
29d10 65 72 20 73 74 61 74 65 73 7d 20 2d 73 65 74 75  er states} -setu
29d20 70 20 7b 0a 20 20 20 20 70 61 63 6b 20 5b 66 72  p {.    pack [fr
29d30 61 6d 65 20 2e 74 2e 66 5d 0a 20 20 20 20 66 6f  ame .t.f].    fo
29d40 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a  cus -force .t.f.
29d50 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73      update.    s
29d60 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20  et x {}.} -body 
29d70 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20  {.    bind .t.f 
29d80 3c 41 6c 74 2d 43 6f 6e 74 72 6f 6c 2d 4b 65 79  <Alt-Control-Key
29d90 2d 41 3e 20 7b 20 6c 61 70 70 65 6e 64 20 78 20  -A> { lappend x 
29da0 22 41 6c 74 2d 43 6f 6e 74 72 6f 6c 22 20 7d 0a  "Alt-Control" }.
29db0 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 53      bind .t.f <S
29dc0 68 69 66 74 2d 43 6f 6e 74 72 6f 6c 2d 4b 65 79  hift-Control-Key
29dd0 2d 41 3e 20 7b 20 6c 61 70 70 65 6e 64 20 78 20  -A> { lappend x 
29de0 22 53 68 69 66 74 2d 43 6f 6e 74 72 6f 6c 22 20  "Shift-Control" 
29df0 7d 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20  }.    bind .t.f 
29e00 3c 53 68 69 66 74 2d 4b 65 79 2d 41 3e 20 7b 20  <Shift-Key-A> { 
29e10 6c 61 70 70 65 6e 64 20 78 20 22 53 68 69 66 74  lappend x "Shift
29e20 22 20 7d 0a 20 20 20 20 65 76 65 6e 74 20 67 65  " }.    event ge
29e30 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 41 6c 74  nerate .t.f <Alt
29e40 2d 43 6f 6e 74 72 6f 6c 2d 4b 65 79 2d 41 3e 0a  -Control-Key-A>.
29e50 20 20 20 20 73 65 74 20 78 0a 7d 20 2d 63 6c 65      set x.} -cle
29e60 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72  anup {.    destr
29e70 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c  oy .t.f.} -resul
29e80 74 20 7b 53 68 69 66 74 2d 43 6f 6e 74 72 6f 6c  t {Shift-Control
29e90 7d 0a 74 65 73 74 20 62 69 6e 64 2d 33 32 2e 34  }.test bind-32.4
29ea0 20 7b 73 68 6f 75 6c 64 20 6e 6f 74 20 74 72 69   {should not tri
29eb0 67 67 65 72 20 44 6f 75 62 6c 65 2d 31 7d 20 2d  gger Double-1} -
29ec0 73 65 74 75 70 20 7b 0a 20 20 20 20 70 61 63 6b  setup {.    pack
29ed0 20 5b 66 72 61 6d 65 20 2e 74 2e 66 5d 0a 20 20   [frame .t.f].  
29ee0 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e    focus -force .
29ef0 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20  t.f.    update. 
29f00 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62     set x {}.} -b
29f10 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e  ody {.    bind .
29f20 74 2e 66 20 3c 44 6f 75 62 6c 65 2d 31 3e 20 7b  t.f <Double-1> {
29f30 20 73 65 74 20 78 20 22 44 6f 75 62 6c 65 22 20   set x "Double" 
29f40 7d 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  }.    event gene
29f50 72 61 74 65 20 2e 74 2e 66 20 3c 31 3e 20 2d 74  rate .t.f <1> -t
29f60 69 6d 65 20 63 75 72 72 65 6e 74 0a 20 20 20 20  ime current.    
29f70 61 66 74 65 72 20 31 30 30 30 0a 20 20 20 20 65  after 1000.    e
29f80 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
29f90 2e 66 20 3c 31 3e 20 2d 74 69 6d 65 20 63 75 72  .f <1> -time cur
29fa0 72 65 6e 74 0a 20 20 20 20 73 65 74 20 78 0a 7d  rent.    set x.}
29fb0 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
29fc0 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d  destroy .t.f.} -
29fd0 72 65 73 75 6c 74 20 7b 7d 0a 74 65 73 74 20 62  result {}.test b
29fe0 69 6e 64 2d 33 32 2e 35 20 7b 73 68 6f 75 6c 64  ind-32.5 {should
29ff0 20 74 72 69 67 67 65 72 20 51 75 61 64 72 75 70   trigger Quadrup
2a000 6c 65 2d 31 7d 20 2d 73 65 74 75 70 20 7b 0a 20  le-1} -setup {. 
2a010 20 20 20 70 61 63 6b 20 5b 66 72 61 6d 65 20 2e     pack [frame .
2a020 74 2e 66 5d 0a 20 20 20 20 66 6f 63 75 73 20 2d  t.f].    focus -
2a030 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75  force .t.f.    u
2a040 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20  pdate.    set x 
2a050 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20  {}.} -body {.   
2a060 20 62 69 6e 64 20 2e 74 2e 66 20 3c 51 75 61 64   bind .t.f <Quad
2a070 72 75 70 6c 65 2d 31 3e 20 7b 20 73 65 74 20 78  ruple-1> { set x
2a080 20 22 51 75 61 64 72 75 70 6c 65 22 20 7d 0a 20   "Quadruple" }. 
2a090 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 54 72     bind .t.f <Tr
2a0a0 69 70 6c 65 2d 31 3e 20 7b 20 73 65 74 20 78 20  iple-1> { set x 
2a0b0 22 54 72 69 70 6c 65 22 20 7d 0a 20 20 20 20 62  "Triple" }.    b
2a0c0 69 6e 64 20 2e 74 2e 66 20 3c 44 6f 75 62 6c 65  ind .t.f <Double
2a0d0 2d 31 3e 20 7b 20 73 65 74 20 78 20 22 44 6f 75  -1> { set x "Dou
2a0e0 62 6c 65 22 20 7d 0a 20 20 20 20 62 69 6e 64 20  ble" }.    bind 
2a0f0 2e 74 2e 66 20 3c 31 3e 20 7b 20 73 65 74 20 78  .t.f <1> { set x
2a100 20 22 53 69 6e 67 6c 65 22 20 7d 0a 20 20 20 20   "Single" }.    
2a110 23 20 4f 6c 64 20 69 6d 70 6c 65 6d 65 6e 74 61  # Old implementa
2a120 74 69 6f 6e 20 74 72 69 67 67 65 72 73 20 22 44  tion triggers "D
2a130 6f 75 62 6c 65 22 2c 20 62 75 74 20 6e 65 77 20  ouble", but new 
2a140 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 77  implementation w
2a150 69 6c 6c 0a 20 20 20 20 23 20 74 72 69 67 67 65  ill.    # trigge
2a160 72 20 22 51 75 61 64 72 75 70 6c 65 22 2c 20 74  r "Quadruple", t
2a170 68 65 20 6c 61 74 74 65 72 20 62 65 68 61 76 69  he latter behavi
2a180 6f 72 20 63 6f 6e 66 6f 72 6d 73 20 74 6f 20 6f  or conforms to o
2a190 74 68 65 72 20 74 6f 6f 6c 6b 69 74 73 2e 0a 20  ther toolkits.. 
2a1a0 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
2a1b0 65 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 2d 31  e .t.f <Button-1
2a1c0 3e 20 2d 74 69 6d 65 20 30 0a 20 20 20 20 65 76  > -time 0.    ev
2a1d0 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
2a1e0 66 20 3c 42 75 74 74 6f 6e 2d 31 3e 20 2d 74 69  f <Button-1> -ti
2a1f0 6d 65 20 34 30 30 0a 20 20 20 20 65 76 65 6e 74  me 400.    event
2a200 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
2a210 42 75 74 74 6f 6e 2d 31 3e 20 2d 74 69 6d 65 20  Button-1> -time 
2a220 38 30 30 0a 20 20 20 20 65 76 65 6e 74 20 67 65  800.    event ge
2a230 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74  nerate .t.f <But
2a240 74 6f 6e 2d 31 3e 20 2d 74 69 6d 65 20 31 32 30  ton-1> -time 120
2a250 30 0a 20 20 20 20 73 65 74 20 78 0a 7d 20 2d 63  0.    set x.} -c
2a260 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73  leanup {.    des
2a270 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73  troy .t.f.} -res
2a280 75 6c 74 20 7b 51 75 61 64 72 75 70 6c 65 7d 0a  ult {Quadruple}.
2a290 74 65 73 74 20 62 69 6e 64 2d 33 32 2e 36 20 7b  test bind-32.6 {
2a2a0 70 72 6f 62 6c 65 6d 20 77 69 74 68 20 73 65 6e  problem with sen
2a2b0 64 65 76 65 6e 74 7d 20 2d 73 65 74 75 70 20 7b  devent} -setup {
2a2c0 0a 20 20 20 20 70 61 63 6b 20 5b 66 72 61 6d 65  .    pack [frame
2a2d0 20 2e 74 2e 66 5d 0a 20 20 20 20 66 6f 63 75 73   .t.f].    focus
2a2e0 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20   -force .t.f.   
2a2f0 20 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20   update.    set 
2a300 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20  x {}.} -body {. 
2a310 20 20 20 23 20 6f 6c 64 20 69 6d 70 6c 65 6d 65     # old impleme
2a320 6e 74 61 74 69 6f 6e 20 69 73 20 6c 6f 73 69 6e  ntation is losin
2a330 67 20 73 65 6e 64 65 76 65 6e 74 20 76 61 6c 75  g sendevent valu
2a340 65 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20  e.    bind .t.f 
2a350 3c 46 6f 63 75 73 49 6e 3e 20 7b 20 73 65 74 20  <FocusIn> { set 
2a360 78 20 22 73 65 6e 64 65 76 65 6e 74 3d 25 45 22  x "sendevent=%E"
2a370 20 7d 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e   }.    event gen
2a380 65 72 61 74 65 20 2e 74 2e 66 20 3c 46 6f 63 75  erate .t.f <Focu
2a390 73 49 6e 3e 20 2d 73 65 6e 64 65 76 65 6e 74 20  sIn> -sendevent 
2a3a0 31 0a 20 20 20 20 73 65 74 20 78 0a 7d 20 2d 63  1.    set x.} -c
2a3b0 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73  leanup {.    des
2a3c0 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73  troy .t.f.} -res
2a3d0 75 6c 74 20 7b 73 65 6e 64 65 76 65 6e 74 3d 31  ult {sendevent=1
2a3e0 7d 0a 74 65 73 74 20 62 69 6e 64 2d 33 32 2e 37  }.test bind-32.7
2a3f0 20 7b 74 65 73 74 20 73 65 71 75 65 6e 63 65 73   {test sequences
2a400 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 70  } -setup {.    p
2a410 61 63 6b 20 5b 66 72 61 6d 65 20 2e 74 2e 66 5d  ack [frame .t.f]
2a420 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
2a430 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
2a440 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d  e.    set x {}.}
2a450 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
2a460 64 20 2e 74 2e 66 20 3c 44 6f 75 62 6c 65 2d 31  d .t.f <Double-1
2a470 3e 20 7b 20 6c 61 70 70 65 6e 64 20 78 20 22 44  > { lappend x "D
2a480 6f 75 62 6c 65 22 20 7d 0a 20 20 20 20 62 69 6e  ouble" }.    bin
2a490 64 20 2e 74 2e 66 20 3c 31 3e 3c 31 3e 3c 61 3e  d .t.f <1><1><a>
2a4a0 20 7b 20 6c 61 70 70 65 6e 64 20 78 20 22 31 31   { lappend x "11
2a4b0 22 20 7d 0a 20 20 20 20 65 76 65 6e 74 20 67 65  " }.    event ge
2a4c0 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 31 3e 0a  nerate .t.f <1>.
2a4d0 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
2a4e0 74 65 20 2e 74 2e 66 20 3c 31 3e 0a 20 20 20 20  te .t.f <1>.    
2a4f0 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
2a500 74 2e 66 20 3c 61 3e 0a 20 20 20 20 73 65 74 20  t.f <a>.    set 
2a510 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  x.} -cleanup {. 
2a520 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
2a530 7d 20 2d 72 65 73 75 6c 74 20 7b 44 6f 75 62 6c  } -result {Doubl
2a540 65 20 31 31 7d 0a 74 65 73 74 20 62 69 6e 64 2d  e 11}.test bind-
2a550 33 32 2e 38 20 7b 74 65 73 74 20 73 65 71 75 65  32.8 {test seque
2a560 6e 63 65 73 7d 20 2d 73 65 74 75 70 20 7b 0a 20  nces} -setup {. 
2a570 20 20 20 70 61 63 6b 20 5b 66 72 61 6d 65 20 2e     pack [frame .
2a580 74 2e 66 5d 0a 20 20 20 20 66 6f 63 75 73 20 2d  t.f].    focus -
2a590 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75  force .t.f.    u
2a5a0 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20  pdate.    set x 
2a5b0 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20  {}.} -body {.   
2a5c0 20 62 69 6e 64 20 2e 74 2e 66 20 3c 61 3e 3c 31   bind .t.f <a><1
2a5d0 3e 3c 44 6f 75 62 6c 65 2d 31 3e 3c 31 3e 3c 61  ><Double-1><1><a
2a5e0 3e 20 7b 20 6c 61 70 70 65 6e 64 20 78 20 22 44  > { lappend x "D
2a5f0 6f 75 62 6c 65 22 20 7d 0a 20 20 20 20 65 76 65  ouble" }.    eve
2a600 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
2a610 20 3c 61 3e 0a 20 20 20 20 65 76 65 6e 74 20 67   <a>.    event g
2a620 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 31 3e  enerate .t.f <1>
2a630 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
2a640 61 74 65 20 2e 74 2e 66 20 3c 31 3e 0a 20 20 20  ate .t.f <1>.   
2a650 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
2a660 2e 74 2e 66 20 3c 31 3e 0a 20 20 20 20 65 76 65  .t.f <1>.    eve
2a670 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
2a680 20 3c 31 3e 0a 20 20 20 20 65 76 65 6e 74 20 67   <1>.    event g
2a690 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 61 3e  enerate .t.f <a>
2a6a0 0a 20 20 20 20 73 65 74 20 78 0a 7d 20 2d 63 6c  .    set x.} -cl
2a6b0 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74  eanup {.    dest
2a6c0 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75  roy .t.f.} -resu
2a6d0 6c 74 20 7b 44 6f 75 62 6c 65 7d 0a 74 65 73 74  lt {Double}.test
2a6e0 20 62 69 6e 64 2d 33 32 2e 39 20 7b 74 72 69 67   bind-32.9 {trig
2a6f0 67 65 72 20 65 76 65 6e 74 73 20 66 6f 72 20 6d  ger events for m
2a700 6f 64 69 66 69 65 72 20 6b 65 79 73 7d 20 2d 73  odifier keys} -s
2a710 65 74 75 70 20 7b 0a 20 20 20 20 70 61 63 6b 20  etup {.    pack 
2a720 5b 66 72 61 6d 65 20 2e 74 2e 66 5d 0a 20 20 20  [frame .t.f].   
2a730 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74   focus -force .t
2a740 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20  .f.    update.  
2a750 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f    set x {}.} -bo
2a760 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74  dy {.    bind .t
2a770 2e 66 20 3c 41 6e 79 2d 4b 65 79 3e 20 7b 20 73  .f <Any-Key> { s
2a780 65 74 20 78 20 22 4b 65 79 22 20 7d 0a 20 20 20  et x "Key" }.   
2a790 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
2a7a0 2e 74 2e 66 20 3c 4b 65 79 50 72 65 73 73 3e 20  .t.f <KeyPress> 
2a7b0 2d 6b 65 79 73 79 6d 20 43 61 70 73 5f 4c 6f 63  -keysym Caps_Loc
2a7c0 6b 0a 20 20 20 20 73 65 74 20 78 0a 7d 20 2d 63  k.    set x.} -c
2a7d0 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65 73  leanup {.    des
2a7e0 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73  troy .t.f.} -res
2a7f0 75 6c 74 20 7b 4b 65 79 7d 0a 74 65 73 74 20 62  ult {Key}.test b
2a800 69 6e 64 2d 33 32 2e 31 30 20 7b 72 65 73 65 74  ind-32.10 {reset
2a810 20 6b 65 79 20 73 74 61 74 65 20 77 68 65 6e 20   key state when 
2a820 64 65 73 74 72 6f 79 69 6e 67 20 77 69 6e 64 6f  destroying windo
2a830 77 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20  w} -setup {.    
2a840 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79  set x {}.} -body
2a850 20 7b 0a 20 20 20 20 70 61 63 6b 20 5b 66 72 61   {.    pack [fra
2a860 6d 65 20 2e 74 2e 66 5d 3b 20 75 70 64 61 74 65  me .t.f]; update
2a870 3b 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e  ; focus -force .
2a880 74 2e 66 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  t.f.    bind .t.
2a890 66 20 3c 4b 65 79 2d 41 3e 20 7b 20 73 65 74 20  f <Key-A> { set 
2a8a0 78 20 22 41 22 20 7d 0a 20 20 20 20 65 76 65 6e  x "A" }.    even
2a8b0 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
2a8c0 3c 4b 65 79 50 72 65 73 73 2d 41 3e 0a 20 20 20  <KeyPress-A>.   
2a8d0 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
2a8e0 2e 74 2e 66 20 3c 4b 65 79 50 72 65 73 73 2d 41  .t.f <KeyPress-A
2a8f0 3e 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74  >.    destroy .t
2a900 2e 66 3b 20 75 70 64 61 74 65 0a 20 20 20 20 70  .f; update.    p
2a910 61 63 6b 20 5b 66 72 61 6d 65 20 2e 74 2e 66 5d  ack [frame .t.f]
2a920 3b 20 75 70 64 61 74 65 3b 20 66 6f 63 75 73 20  ; update; focus 
2a930 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20  -force .t.f.    
2a940 62 69 6e 64 20 2e 74 2e 66 20 3c 4b 65 79 2d 41  bind .t.f <Key-A
2a950 3e 20 7b 20 73 65 74 20 78 20 22 41 22 20 7d 0a  > { set x "A" }.
2a960 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 44      bind .t.f <D
2a970 6f 75 62 6c 65 2d 4b 65 79 2d 41 3e 20 7b 20 73  ouble-Key-A> { s
2a980 65 74 20 78 20 22 41 41 22 20 7d 0a 20 20 20 20  et x "AA" }.    
2a990 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
2a9a0 74 2e 66 20 3c 4b 65 79 50 72 65 73 73 2d 41 3e  t.f <KeyPress-A>
2a9b0 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e  .    destroy .t.
2a9c0 66 0a 20 20 20 20 73 65 74 20 78 0a 7d 20 2d 72  f.    set x.} -r
2a9d0 65 73 75 6c 74 20 7b 41 7d 0a 74 65 73 74 20 62  esult {A}.test b
2a9e0 69 6e 64 2d 33 32 2e 31 31 20 7b 6d 61 74 63 68  ind-32.11 {match
2a9f0 20 64 65 74 61 69 6c 65 64 20 76 69 72 74 75 61   detailed virtua
2aa00 6c 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20  l} -setup {.    
2aa10 70 61 63 6b 20 5b 66 72 61 6d 65 20 2e 74 2e 66  pack [frame .t.f
2aa20 20 2d 63 6c 61 73 73 20 54 65 73 74 5d 0a 20 20   -class Test].  
2aa30 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e    focus -force .
2aa40 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20  t.f.    update. 
2aa50 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62     set x {}.} -b
2aa60 6f 64 79 20 7b 0a 20 20 20 20 65 76 65 6e 74 20  ody {.    event 
2aa70 61 64 64 20 3c 3c 54 65 73 74 43 6f 6e 74 72 6f  add <<TestContro
2aa80 6c 42 75 74 74 6f 6e 31 3e 3e 20 3c 43 6f 6e 74  lButton1>> <Cont
2aa90 72 6f 6c 2d 42 75 74 74 6f 6e 2d 31 3e 0a 20 20  rol-Button-1>.  
2aaa0 20 20 62 69 6e 64 20 54 65 73 74 20 3c 3c 54 65    bind Test <<Te
2aab0 73 74 43 6f 6e 74 72 6f 6c 42 75 74 74 6f 6e 31  stControlButton1
2aac0 3e 3e 20 7b 20 73 65 74 20 78 20 22 43 6f 6e 74  >> { set x "Cont
2aad0 72 6f 6c 2d 42 75 74 74 6f 6e 2d 31 22 20 7d 0a  rol-Button-1" }.
2aae0 20 20 20 20 62 69 6e 64 20 54 65 73 74 20 3c 42      bind Test <B
2aaf0 75 74 74 6f 6e 2d 31 3e 20 7b 20 73 65 74 20 78  utton-1> { set x
2ab00 20 22 42 75 74 74 6f 6e 2d 31 22 20 7d 0a 20 20   "Button-1" }.  
2ab10 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 42 75 74    bind .t.f <But
2ab20 74 6f 6e 2d 31 3e 20 7b 20 73 65 74 20 78 20 22  ton-1> { set x "
2ab30 42 75 74 74 6f 6e 2d 31 22 20 7d 0a 20 20 20 20  Button-1" }.    
2ab40 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
2ab50 74 2e 66 20 3c 43 6f 6e 74 72 6f 6c 2d 42 75 74  t.f <Control-But
2ab60 74 6f 6e 50 72 65 73 73 2d 31 3e 0a 20 20 20 20  tonPress-1>.    
2ab70 73 65 74 20 78 0a 7d 20 2d 63 6c 65 61 6e 75 70  set x.} -cleanup
2ab80 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
2ab90 74 2e 66 0a 20 20 20 20 65 76 65 6e 74 20 64 65  t.f.    event de
2aba0 6c 65 74 65 20 3c 3c 54 65 73 74 43 6f 6e 74 72  lete <<TestContr
2abb0 6f 6c 42 75 74 74 6f 6e 31 3e 3e 0a 20 20 20 20  olButton1>>.    
2abc0 62 69 6e 64 20 54 65 73 74 20 3c 42 75 74 74 6f  bind Test <Butto
2abd0 6e 2d 31 3e 20 7b 23 7d 0a 7d 20 2d 72 65 73 75  n-1> {#}.} -resu
2abe0 6c 74 20 7b 43 6f 6e 74 72 6f 6c 2d 42 75 74 74  lt {Control-Butt
2abf0 6f 6e 2d 31 7d 0a 74 65 73 74 20 62 69 6e 64 2d  on-1}.test bind-
2ac00 33 32 2e 31 32 20 7b 64 6f 6e 27 74 20 64 65 74  32.12 {don't det
2ac10 65 63 74 20 72 65 70 65 74 69 74 69 6f 6e 20 77  ect repetition w
2ac20 68 65 6e 20 77 69 6e 64 6f 77 20 68 61 73 20 63  hen window has c
2ac30 68 61 6e 67 65 64 7d 20 2d 73 65 74 75 70 20 7b  hanged} -setup {
2ac40 0a 20 20 20 20 70 61 63 6b 20 5b 66 72 61 6d 65  .    pack [frame
2ac50 20 2e 74 2e 66 5d 0a 20 20 20 20 70 61 63 6b 20   .t.f].    pack 
2ac60 5b 66 72 61 6d 65 20 2e 74 2e 67 5d 0a 20 20 20  [frame .t.g].   
2ac70 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74   focus -force .t
2ac80 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20  .f.    update.  
2ac90 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f    set x {}.} -bo
2aca0 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74  dy {.    bind .t
2acb0 2e 66 20 3c 42 75 74 74 6f 6e 2d 31 3e 20 7b 20  .f <Button-1> { 
2acc0 73 65 74 20 78 20 22 31 22 20 7d 0a 20 20 20 20  set x "1" }.    
2acd0 62 69 6e 64 20 2e 74 2e 66 20 3c 44 6f 75 62 6c  bind .t.f <Doubl
2ace0 65 2d 42 75 74 74 6f 6e 2d 31 3e 20 7b 20 73 65  e-Button-1> { se
2acf0 74 20 78 20 22 31 31 22 20 7d 0a 20 20 20 20 65  t x "11" }.    e
2ad00 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
2ad10 2e 66 20 3c 42 75 74 74 6f 6e 50 72 65 73 73 2d  .f <ButtonPress-
2ad20 31 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e  1>.    event gen
2ad30 65 72 61 74 65 20 2e 74 2e 67 20 3c 42 75 74 74  erate .t.g <Butt
2ad40 6f 6e 50 72 65 73 73 2d 31 3e 0a 20 20 20 20 65  onPress-1>.    e
2ad50 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
2ad60 2e 66 20 3c 42 75 74 74 6f 6e 50 72 65 73 73 2d  .f <ButtonPress-
2ad70 31 3e 0a 20 20 20 20 73 65 74 20 78 0a 7d 20 2d  1>.    set x.} -
2ad80 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64 65  cleanup {.    de
2ad90 73 74 72 6f 79 20 2e 74 2e 66 0a 20 20 20 20 64  stroy .t.f.    d
2ada0 65 73 74 72 6f 79 20 2e 74 2e 67 0a 7d 20 2d 72  estroy .t.g.} -r
2adb0 65 73 75 6c 74 20 7b 31 7d 0a 74 65 73 74 20 62  esult {1}.test b
2adc0 69 6e 64 2d 33 32 2e 31 33 20 7b 64 6f 6e 27 74  ind-32.13 {don't
2add0 20 64 65 74 65 63 74 20 72 65 70 65 74 69 74 69   detect repetiti
2ade0 6f 6e 20 77 68 65 6e 20 77 69 6e 64 6f 77 20 68  on when window h
2adf0 61 73 20 63 68 61 6e 67 65 64 7d 20 2d 73 65 74  as changed} -set
2ae00 75 70 20 7b 0a 20 20 20 20 70 61 63 6b 20 5b 66  up {.    pack [f
2ae10 72 61 6d 65 20 2e 74 2e 66 5d 0a 20 20 20 20 70  rame .t.f].    p
2ae20 61 63 6b 20 5b 66 72 61 6d 65 20 2e 74 2e 67 5d  ack [frame .t.g]
2ae30 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20 20 20  .    update.    
2ae40 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79  set x {}.} -body
2ae50 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66   {.    bind .t.f
2ae60 20 3c 4b 65 79 2d 41 3e 20 7b 20 73 65 74 20 78   <Key-A> { set x
2ae70 20 22 41 22 20 7d 0a 20 20 20 20 62 69 6e 64 20   "A" }.    bind 
2ae80 2e 74 2e 66 20 3c 44 6f 75 62 6c 65 2d 4b 65 79  .t.f <Double-Key
2ae90 2d 41 3e 20 7b 20 73 65 74 20 78 20 22 41 41 22  -A> { set x "AA"
2aea0 20 7d 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f   }.    focus -fo
2aeb0 72 63 65 20 2e 74 2e 66 3b 20 65 76 65 6e 74 20  rce .t.f; event 
2aec0 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 4b  generate .t.f <K
2aed0 65 79 50 72 65 73 73 2d 41 3e 0a 20 20 20 20 66  eyPress-A>.    f
2aee0 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 67  ocus -force .t.g
2aef0 3b 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65  ; event generate
2af00 20 2e 74 2e 67 20 3c 4b 65 79 50 72 65 73 73 2d   .t.g <KeyPress-
2af10 41 3e 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f  A>.    focus -fo
2af20 72 63 65 20 2e 74 2e 66 3b 20 65 76 65 6e 74 20  rce .t.f; event 
2af30 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 4b  generate .t.f <K
2af40 65 79 50 72 65 73 73 2d 41 3e 0a 20 20 20 20 73  eyPress-A>.    s
2af50 65 74 20 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  et x.} -cleanup 
2af60 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74  {.    destroy .t
2af70 2e 66 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e  .f.    destroy .
2af80 74 2e 67 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 41  t.g.} -result {A
2af90 7d 0a 74 65 73 74 20 62 69 6e 64 2d 33 32 2e 31  }.test bind-32.1
2afa0 34 20 7b 64 6f 6e 27 74 20 64 65 74 65 63 74 20  4 {don't detect 
2afb0 72 65 70 65 74 69 74 69 6f 6e 20 77 68 65 6e 20  repetition when 
2afc0 77 69 6e 64 6f 77 20 68 61 73 20 63 68 61 6e 67  window has chang
2afd0 65 64 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20  ed} -setup {.   
2afe0 20 70 61 63 6b 20 5b 66 72 61 6d 65 20 2e 74 2e   pack [frame .t.
2aff0 66 5d 0a 20 20 20 20 70 61 63 6b 20 5b 66 72 61  f].    pack [fra
2b000 6d 65 20 2e 74 2e 67 5d 0a 20 20 20 20 75 70 64  me .t.g].    upd
2b010 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d  ate.    set x {}
2b020 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62  .} -body {.    b
2b030 69 6e 64 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e  ind .t.f <Button
2b040 50 72 65 73 73 2d 31 3e 20 7b 20 73 65 74 20 78  Press-1> { set x
2b050 20 22 31 22 20 7d 0a 20 20 20 20 62 69 6e 64 20   "1" }.    bind 
2b060 2e 74 2e 66 20 3c 44 6f 75 62 6c 65 2d 42 75 74  .t.f <Double-But
2b070 74 6f 6e 50 72 65 73 73 2d 31 3e 20 7b 20 73 65  tonPress-1> { se
2b080 74 20 78 20 22 31 31 22 20 7d 0a 20 20 20 20 66  t x "11" }.    f
2b090 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66  ocus -force .t.f
2b0a0 3b 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65  ; event generate
2b0b0 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 50 72 65   .t.f <ButtonPre
2b0c0 73 73 2d 31 3e 0a 20 20 20 20 66 6f 63 75 73 20  ss-1>.    focus 
2b0d0 2d 66 6f 72 63 65 20 2e 74 2e 67 3b 20 65 76 65  -force .t.g; eve
2b0e0 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 67  nt generate .t.g
2b0f0 20 3c 42 75 74 74 6f 6e 50 72 65 73 73 2d 31 3e   <ButtonPress-1>
2b100 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
2b110 65 20 2e 74 2e 66 3b 20 65 76 65 6e 74 20 67 65  e .t.f; event ge
2b120 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74  nerate .t.f <But
2b130 74 6f 6e 50 72 65 73 73 2d 31 3e 0a 20 20 20 20  tonPress-1>.    
2b140 73 65 74 20 78 0a 7d 20 2d 63 6c 65 61 6e 75 70  set x.} -cleanup
2b150 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
2b160 74 2e 66 0a 20 20 20 20 64 65 73 74 72 6f 79 20  t.f.    destroy 
2b170 2e 74 2e 67 0a 7d 20 2d 72 65 73 75 6c 74 20 7b  .t.g.} -result {
2b180 31 7d 0a 74 65 73 74 20 62 69 6e 64 2d 33 32 2e  1}.test bind-32.
2b190 31 35 20 7b 72 65 73 65 74 20 62 75 74 74 6f 6e  15 {reset button
2b1a0 20 73 74 61 74 65 20 77 68 65 6e 20 64 65 73 74   state when dest
2b1b0 72 6f 79 69 6e 67 20 77 69 6e 64 6f 77 7d 20 2d  roying window} -
2b1c0 73 65 74 75 70 20 7b 0a 20 20 20 20 73 65 74 20  setup {.    set 
2b1d0 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20  x {}.} -body {. 
2b1e0 20 20 20 70 61 63 6b 20 5b 66 72 61 6d 65 20 2e     pack [frame .
2b1f0 74 2e 66 5d 3b 20 75 70 64 61 74 65 3b 20 66 6f  t.f]; update; fo
2b200 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a  cus -force .t.f.
2b210 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 42      bind .t.f <B
2b220 75 74 74 6f 6e 50 72 65 73 73 2d 31 3e 20 7b 20  uttonPress-1> { 
2b230 73 65 74 20 78 20 22 31 22 20 7d 0a 20 20 20 20  set x "1" }.    
2b240 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
2b250 74 2e 66 20 3c 42 75 74 74 6f 6e 50 72 65 73 73  t.f <ButtonPress
2b260 2d 31 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65  -1>.    event ge
2b270 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42 75 74  nerate .t.f <But
2b280 74 6f 6e 50 72 65 73 73 2d 31 3e 0a 20 20 20 20  tonPress-1>.    
2b290 64 65 73 74 72 6f 79 20 2e 74 2e 66 3b 20 75 70  destroy .t.f; up
2b2a0 64 61 74 65 0a 20 20 20 20 70 61 63 6b 20 5b 66  date.    pack [f
2b2b0 72 61 6d 65 20 2e 74 2e 66 5d 3b 20 75 70 64 61  rame .t.f]; upda
2b2c0 74 65 3b 20 66 6f 63 75 73 20 2d 66 6f 72 63 65  te; focus -force
2b2d0 20 2e 74 2e 66 0a 20 20 20 20 62 69 6e 64 20 2e   .t.f.    bind .
2b2e0 74 2e 66 20 3c 42 75 74 74 6f 6e 50 72 65 73 73  t.f <ButtonPress
2b2f0 2d 31 3e 20 7b 20 73 65 74 20 78 20 22 31 22 20  -1> { set x "1" 
2b300 7d 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20  }.    bind .t.f 
2b310 3c 44 6f 75 62 6c 65 2d 42 75 74 74 6f 6e 50 72  <Double-ButtonPr
2b320 65 73 73 2d 31 3e 20 7b 20 73 65 74 20 78 20 22  ess-1> { set x "
2b330 31 31 22 20 7d 0a 20 20 20 20 65 76 65 6e 74 20  11" }.    event 
2b340 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 42  generate .t.f <B
2b350 75 74 74 6f 6e 50 72 65 73 73 2d 31 3e 0a 20 20  uttonPress-1>.  
2b360 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 20    destroy .t.f. 
2b370 20 20 20 73 65 74 20 78 0a 7d 20 2d 72 65 73 75     set x.} -resu
2b380 6c 74 20 7b 31 7d 0a 0a 74 65 73 74 20 62 69 6e  lt {1}..test bin
2b390 64 2d 33 33 2e 31 20 7b 70 72 65 66 65 72 20 6c  d-33.1 {prefer l
2b3a0 6f 6e 67 65 73 74 20 6d 61 74 63 68 7d 20 2d 73  ongest match} -s
2b3b0 65 74 75 70 20 7b 0a 20 20 20 20 70 61 63 6b 20  etup {.    pack 
2b3c0 5b 66 72 61 6d 65 20 2e 74 2e 66 5d 0a 20 20 20  [frame .t.f].   
2b3d0 20 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74   focus -force .t
2b3e0 2e 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20  .f.    update.  
2b3f0 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f    set x {}.} -bo
2b400 64 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74  dy {.    bind .t
2b410 2e 66 20 3c 61 3e 3c 31 3e 3c 31 3e 20 7b 20 6c  .f <a><1><1> { l
2b420 61 70 70 65 6e 64 20 78 20 22 61 31 31 22 20 7d  append x "a11" }
2b430 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c  .    bind .t.f <
2b440 44 6f 75 62 6c 65 2d 31 3e 20 7b 20 6c 61 70 70  Double-1> { lapp
2b450 65 6e 64 20 78 20 22 44 6f 75 62 6c 65 22 20 7d  end x "Double" }
2b460 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
2b470 61 74 65 20 2e 74 2e 66 20 3c 61 3e 0a 20 20 20  ate .t.f <a>.   
2b480 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
2b490 2e 74 2e 66 20 3c 31 3e 0a 20 20 20 20 65 76 65  .t.f <1>.    eve
2b4a0 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
2b4b0 20 3c 31 3e 0a 20 20 20 20 73 65 74 20 78 0a 7d   <1>.    set x.}
2b4c0 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20   -cleanup {.    
2b4d0 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20 2d  destroy .t.f.} -
2b4e0 72 65 73 75 6c 74 20 7b 61 31 31 7d 0a 74 65 73  result {a11}.tes
2b4f0 74 20 62 69 6e 64 2d 33 33 2e 32 20 7b 73 68 6f  t bind-33.2 {sho
2b500 75 6c 64 20 70 72 65 66 65 72 20 6d 6f 72 65 20  uld prefer more 
2b510 73 70 65 63 69 61 6c 69 7a 65 64 20 65 76 65 6e  specialized even
2b520 74 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20  t} -setup {.    
2b530 70 61 63 6b 20 5b 66 72 61 6d 65 20 2e 74 2e 66  pack [frame .t.f
2b540 5d 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72  ].    focus -for
2b550 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61  ce .t.f.    upda
2b560 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a  te.    set x {}.
2b570 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69  } -body {.    bi
2b580 6e 64 20 2e 74 2e 66 20 3c 44 6f 75 62 6c 65 2d  nd .t.f <Double-
2b590 31 3e 20 7b 20 6c 61 70 70 65 6e 64 20 78 20 22  1> { lappend x "
2b5a0 44 6f 75 62 6c 65 22 20 7d 0a 20 20 20 20 62 69  Double" }.    bi
2b5b0 6e 64 20 2e 74 2e 66 20 3c 31 3e 3c 31 3e 20 7b  nd .t.f <1><1> {
2b5c0 20 6c 61 70 70 65 6e 64 20 78 20 22 31 31 22 20   lappend x "11" 
2b5d0 7d 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  }.    event gene
2b5e0 72 61 74 65 20 2e 74 2e 66 20 3c 31 3e 0a 20 20  rate .t.f <1>.  
2b5f0 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
2b600 20 2e 74 2e 66 20 3c 31 3e 0a 20 20 20 20 73 65   .t.f <1>.    se
2b610 74 20 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  t x.} -cleanup {
2b620 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e  .    destroy .t.
2b630 66 0a 20 20 20 20 23 20 54 68 69 73 20 74 65 73  f.    # This tes
2b640 74 20 63 61 73 65 20 73 68 6f 77 73 20 74 68 61  t case shows tha
2b650 74 20 6f 6c 64 20 69 6d 70 6c 65 6d 65 6e 74 61  t old implementa
2b660 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 73 73 75  tion has an issu
2b670 65 2c 20 62 65 63 61 75 73 65 0a 20 20 20 20 23  e, because.    #
2b680 20 69 6e 20 6d 79 20 6f 70 69 6e 69 6f 6e 20 69   in my opinion i
2b690 74 20 69 73 20 65 78 70 65 63 74 65 64 20 74 68  t is expected th
2b6a0 61 74 20 3c 44 6f 75 62 6c 65 2d 31 3e 20 69 73  at <Double-1> is
2b6b0 20 6d 61 74 63 68 69 6e 67 2c 20 74 68 69 73 20   matching, this 
2b6c0 62 69 6e 64 69 6e 67 0a 20 20 20 20 23 20 69 73  binding.    # is
2b6d0 20 6d 6f 72 65 20 73 70 65 63 69 61 6c 69 7a 65   more specialize
2b6e0 64 2e 20 42 75 74 20 6e 65 77 20 69 6d 70 6c 65  d. But new imple
2b6f0 6d 65 6e 74 61 74 69 6f 6e 20 77 69 6c 6c 20 62  mentation will b
2b700 65 20 63 6f 6e 66 6f 72 6d 20 74 6f 20 6f 6c 64  e conform to old
2b710 2c 0a 20 20 20 20 23 20 61 6e 64 20 73 6f 20 22  ,.    # and so "
2b720 31 31 22 20 69 73 20 74 68 65 20 65 78 70 65 63  11" is the expec
2b730 74 65 64 20 72 65 73 75 6c 74 2e 0a 7d 20 2d 72  ted result..} -r
2b740 65 73 75 6c 74 20 7b 31 31 7d 0a 74 65 73 74 20  esult {11}.test 
2b750 62 69 6e 64 2d 33 33 2e 33 20 7b 73 68 6f 75 6c  bind-33.3 {shoul
2b760 64 20 70 72 65 66 65 72 20 6d 6f 72 65 20 73 70  d prefer more sp
2b770 65 63 69 61 6c 69 7a 65 64 20 65 76 65 6e 74 7d  ecialized event}
2b780 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 70 61   -setup {.    pa
2b790 63 6b 20 5b 66 72 61 6d 65 20 2e 74 2e 66 5d 0a  ck [frame .t.f].
2b7a0 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65      focus -force
2b7b0 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65   .t.f.    update
2b7c0 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20  .    set x {}.} 
2b7d0 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64  -body {.    bind
2b7e0 20 2e 74 2e 66 20 3c 61 3e 3c 44 6f 75 62 6c 65   .t.f <a><Double
2b7f0 2d 31 3e 3c 61 3e 20 7b 20 6c 61 70 70 65 6e 64  -1><a> { lappend
2b800 20 78 20 22 44 6f 75 62 6c 65 22 20 7d 0a 20 20   x "Double" }.  
2b810 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 61 3e 3c    bind .t.f <a><
2b820 31 3e 3c 31 3e 3c 61 3e 20 7b 20 6c 61 70 70 65  1><1><a> { lappe
2b830 6e 64 20 78 20 22 31 31 22 20 7d 0a 20 20 20 20  nd x "11" }.    
2b840 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
2b850 74 2e 66 20 3c 61 3e 0a 20 20 20 20 65 76 65 6e  t.f <a>.    even
2b860 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
2b870 3c 31 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65  <1>.    event ge
2b880 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 31 3e 0a  nerate .t.f <1>.
2b890 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
2b8a0 74 65 20 2e 74 2e 66 20 3c 61 3e 0a 20 20 20 20  te .t.f <a>.    
2b8b0 73 65 74 20 78 0a 7d 20 2d 63 6c 65 61 6e 75 70  set x.} -cleanup
2b8c0 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e   {.    destroy .
2b8d0 74 2e 66 0a 20 20 20 20 23 20 41 6c 73 6f 20 74  t.f.    # Also t
2b8e0 68 69 73 20 74 65 73 74 20 63 61 73 65 20 73 68  his test case sh
2b8f0 6f 77 73 20 74 68 61 74 20 6f 6c 64 20 69 6d 70  ows that old imp
2b900 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 68 61 73 20  lementation has 
2b910 61 6e 20 69 73 73 75 65 2c 20 69 74 20 69 73 0a  an issue, it is.
2b920 20 20 20 20 23 20 65 78 70 65 63 74 65 64 20 74      # expected t
2b930 68 61 74 20 3c 61 3e 3c 44 6f 75 62 6c 65 2d 31  hat <a><Double-1
2b940 3e 3c 61 3e 20 69 73 20 6d 61 74 63 68 69 6e 67  ><a> is matching
2b950 2c 20 62 65 63 61 75 73 65 20 3c 44 6f 75 62 6c  , because <Doubl
2b960 65 2d 31 3e 20 69 73 20 6d 6f 72 65 0a 20 20 20  e-1> is more.   
2b970 20 23 20 73 70 65 63 69 61 6c 69 7a 65 64 20 74   # specialized t
2b980 68 61 6e 20 3c 31 3e 3c 31 3e 2e 20 42 75 74 20  han <1><1>. But 
2b990 6e 65 77 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  new implementati
2b9a0 6f 6e 20 77 69 6c 6c 20 62 65 20 63 6f 6e 66 6f  on will be confo
2b9b0 72 6d 20 74 6f 20 6f 6c 64 2c 0a 20 20 20 20 23  rm to old,.    #
2b9c0 20 61 6e 64 20 73 6f 20 22 31 31 22 20 69 73 20   and so "11" is 
2b9d0 74 68 65 20 65 78 70 65 63 74 65 64 20 72 65 73  the expected res
2b9e0 75 6c 74 2e 0a 7d 20 2d 72 65 73 75 6c 74 20 7b  ult..} -result {
2b9f0 31 31 7d 0a 74 65 73 74 20 62 69 6e 64 2d 33 33  11}.test bind-33
2ba00 2e 34 20 7b 73 68 6f 75 6c 64 20 70 72 65 66 65  .4 {should prefe
2ba10 72 20 6d 6f 72 65 20 73 70 65 63 69 61 6c 69 7a  r more specializ
2ba20 65 64 20 65 76 65 6e 74 7d 20 2d 73 65 74 75 70  ed event} -setup
2ba30 20 7b 0a 20 20 20 20 70 61 63 6b 20 5b 66 72 61   {.    pack [fra
2ba40 6d 65 20 2e 74 2e 66 5d 0a 20 20 20 20 66 6f 63  me .t.f].    foc
2ba50 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20  us -force .t.f. 
2ba60 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73 65     update.    se
2ba70 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b  t x {}.} -body {
2ba80 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c  .    bind .t.f <
2ba90 31 3e 3c 31 3e 20 7b 20 6c 61 70 70 65 6e 64 20  1><1> { lappend 
2baa0 78 20 22 31 31 22 20 7d 0a 20 20 20 20 62 69 6e  x "11" }.    bin
2bab0 64 20 2e 74 2e 66 20 3c 44 6f 75 62 6c 65 2d 31  d .t.f <Double-1
2bac0 3e 20 7b 20 6c 61 70 70 65 6e 64 20 78 20 22 44  > { lappend x "D
2bad0 6f 75 62 6c 65 22 20 7d 0a 20 20 20 20 65 76 65  ouble" }.    eve
2bae0 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66  nt generate .t.f
2baf0 20 3c 31 3e 20 2d 74 69 6d 65 20 30 0a 20 20 20   <1> -time 0.   
2bb00 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20   event generate 
2bb10 2e 74 2e 66 20 3c 31 3e 20 2d 74 69 6d 65 20 31  .t.f <1> -time 1
2bb20 30 30 30 0a 20 20 20 20 73 65 74 20 78 0a 7d 20  000.    set x.} 
2bb30 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20 20 64  -cleanup {.    d
2bb40 65 73 74 72 6f 79 20 2e 74 2e 66 0a 20 20 20 20  estroy .t.f.    
2bb50 23 20 54 68 69 73 20 74 65 73 74 20 63 61 73 65  # This test case
2bb60 20 61 6c 73 6f 20 73 68 6f 77 73 20 74 68 61 74   also shows that
2bb70 20 6f 6c 64 20 69 6d 70 6c 65 6d 65 6e 74 61 74   old implementat
2bb80 69 6f 6e 20 68 61 73 20 61 6e 20 69 73 73 75 65  ion has an issue
2bb90 2c 20 62 65 63 61 75 73 65 0a 20 20 20 20 23 20  , because.    # 
2bba0 68 65 72 65 20 3c 31 3e 3c 31 3e 20 77 69 6c 6c  here <1><1> will
2bbb0 20 62 65 20 74 72 69 67 67 65 72 65 64 20 63 6f   be triggered co
2bbc0 72 72 65 63 74 6c 79 2c 20 62 75 74 20 74 68 69  rrectly, but thi
2bbd0 73 20 69 73 20 6e 6f 74 20 63 6f 6e 73 69 73 74  s is not consist
2bbe0 65 6e 74 20 77 69 74 68 0a 20 20 20 20 23 20 74  ent with.    # t
2bbf0 65 73 74 20 63 61 73 65 20 33 33 2e 32 2e 0a 7d  est case 33.2..}
2bc00 20 2d 72 65 73 75 6c 74 20 7b 31 31 7d 0a 74 65   -result {11}.te
2bc10 73 74 20 62 69 6e 64 2d 33 33 2e 35 20 7b 70 72  st bind-33.5 {pr
2bc20 65 66 65 72 20 6d 6f 73 74 20 73 70 65 63 69 61  efer most specia
2bc30 6c 69 7a 65 64 7d 20 2d 73 65 74 75 70 20 7b 0a  lized} -setup {.
2bc40 20 20 20 20 70 61 63 6b 20 5b 66 72 61 6d 65 20      pack [frame 
2bc50 2e 74 2e 66 5d 0a 20 20 20 20 66 6f 63 75 73 20  .t.f].    focus 
2bc60 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20  -force .t.f.    
2bc70 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78  update.    set x
2bc80 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20   {}.} -body {.  
2bc90 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 31 3e 3c    bind .t.f <1><
2bca0 31 3e 20 7b 20 6c 61 70 70 65 6e 64 20 78 20 22  1> { lappend x "
2bcb0 31 31 22 20 7d 0a 20 20 20 20 62 69 6e 64 20 2e  11" }.    bind .
2bcc0 74 2e 66 20 3c 44 6f 75 62 6c 65 2d 42 75 74 74  t.f <Double-Butt
2bcd0 6f 6e 50 72 65 73 73 3e 20 7b 20 6c 61 70 70 65  onPress> { lappe
2bce0 6e 64 20 78 20 22 44 6f 75 62 6c 65 22 20 7d 0a  nd x "Double" }.
2bcf0 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
2bd00 74 65 20 2e 74 2e 66 20 3c 31 3e 0a 20 20 20 20  te .t.f <1>.    
2bd10 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
2bd20 74 2e 66 20 3c 31 3e 0a 20 20 20 20 73 65 74 20  t.f <1>.    set 
2bd30 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  x.} -cleanup {. 
2bd40 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
2bd50 7d 20 2d 72 65 73 75 6c 74 20 7b 31 31 7d 0a 74  } -result {11}.t
2bd60 65 73 74 20 62 69 6e 64 2d 33 33 2e 36 20 7b 70  est bind-33.6 {p
2bd70 72 65 66 65 72 20 6d 6f 73 74 20 73 70 65 63 69  refer most speci
2bd80 61 6c 69 7a 65 64 7d 20 2d 73 65 74 75 70 20 7b  alized} -setup {
2bd90 0a 20 20 20 20 70 61 63 6b 20 5b 66 72 61 6d 65  .    pack [frame
2bda0 20 2e 74 2e 66 5d 0a 20 20 20 20 66 6f 63 75 73   .t.f].    focus
2bdb0 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20   -force .t.f.   
2bdc0 20 75 70 64 61 74 65 0a 20 20 20 20 73 65 74 20   update.    set 
2bdd0 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20  x {}.} -body {. 
2bde0 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 61 3e     bind .t.f <a>
2bdf0 3c 31 3e 3c 31 3e 3c 31 3e 3c 31 3e 3c 61 3e 20  <1><1><1><1><a> 
2be00 7b 20 6c 61 70 70 65 6e 64 20 78 20 22 31 31 31  { lappend x "111
2be10 31 22 20 7d 0a 20 20 20 20 62 69 6e 64 20 2e 74  1" }.    bind .t
2be20 2e 66 20 3c 61 3e 3c 42 75 74 74 6f 6e 50 72 65  .f <a><ButtonPre
2be30 73 73 3e 3c 44 6f 75 62 6c 65 2d 42 75 74 74 6f  ss><Double-Butto
2be40 6e 50 72 65 73 73 3e 3c 42 75 74 74 6f 6e 50 72  nPress><ButtonPr
2be50 65 73 73 3e 3c 61 3e 20 7b 20 6c 61 70 70 65 6e  ess><a> { lappen
2be60 64 20 78 20 22 41 6e 79 2d 44 6f 75 62 6c 65 2d  d x "Any-Double-
2be70 41 6e 79 22 20 7d 0a 20 20 20 20 65 76 65 6e 74  Any" }.    event
2be80 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
2be90 61 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e  a>.    event gen
2bea0 65 72 61 74 65 20 2e 74 2e 66 20 3c 31 3e 0a 20  erate .t.f <1>. 
2beb0 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
2bec0 65 20 2e 74 2e 66 20 3c 31 3e 0a 20 20 20 20 65  e .t.f <1>.    e
2bed0 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
2bee0 2e 66 20 3c 31 3e 0a 20 20 20 20 65 76 65 6e 74  .f <1>.    event
2bef0 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
2bf00 31 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e  1>.    event gen
2bf10 65 72 61 74 65 20 2e 74 2e 66 20 3c 61 3e 0a 20  erate .t.f <a>. 
2bf20 20 20 20 73 65 74 20 78 0a 7d 20 2d 63 6c 65 61     set x.} -clea
2bf30 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f  nup {.    destro
2bf40 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74  y .t.f.} -result
2bf50 20 7b 31 31 31 31 7d 0a 74 65 73 74 20 62 69 6e   {1111}.test bin
2bf60 64 2d 33 33 2e 37 20 7b 70 72 65 66 65 72 20 6d  d-33.7 {prefer m
2bf70 6f 73 74 20 73 70 65 63 69 61 6c 69 7a 65 64 7d  ost specialized}
2bf80 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 70 61   -setup {.    pa
2bf90 63 6b 20 5b 66 72 61 6d 65 20 2e 74 2e 66 5d 0a  ck [frame .t.f].
2bfa0 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63 65      focus -force
2bfb0 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74 65   .t.f.    update
2bfc0 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d 20  .    set x {}.} 
2bfd0 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e 64  -body {.    bind
2bfe0 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e 50 72 65   .t.f <ButtonPre
2bff0 73 73 2d 31 3e 3c 61 3e 20 7b 20 6c 61 70 70 65  ss-1><a> { lappe
2c000 6e 64 20 78 20 22 31 22 20 7d 0a 20 20 20 20 62  nd x "1" }.    b
2c010 69 6e 64 20 2e 74 2e 66 20 3c 42 75 74 74 6f 6e  ind .t.f <Button
2c020 50 72 65 73 73 3e 3c 61 3e 20 7b 20 6c 61 70 70  Press><a> { lapp
2c030 65 6e 64 20 78 20 22 41 6e 79 22 20 7d 0a 20 20  end x "Any" }.  
2c040 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
2c050 20 2e 74 2e 66 20 3c 31 3e 0a 20 20 20 20 65 76   .t.f <1>.    ev
2c060 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
2c070 66 20 3c 61 3e 0a 20 20 20 20 73 65 74 20 78 0a  f <a>.    set x.
2c080 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20 20 20  } -cleanup {.   
2c090 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a 7d 20   destroy .t.f.} 
2c0a0 2d 72 65 73 75 6c 74 20 7b 31 7d 0a 74 65 73 74  -result {1}.test
2c0b0 20 62 69 6e 64 2d 33 33 2e 38 20 7b 70 72 65 66   bind-33.8 {pref
2c0c0 65 72 20 6d 6f 73 74 20 73 70 65 63 69 61 6c 69  er most speciali
2c0d0 7a 65 64 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20  zed} -setup {.  
2c0e0 20 20 70 61 63 6b 20 5b 66 72 61 6d 65 20 2e 74    pack [frame .t
2c0f0 2e 66 5d 0a 20 20 20 20 66 6f 63 75 73 20 2d 66  .f].    focus -f
2c100 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70  orce .t.f.    up
2c110 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b  date.    set x {
2c120 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  }.} -body {.    
2c130 62 69 6e 64 20 2e 74 2e 66 20 3c 44 6f 75 62 6c  bind .t.f <Doubl
2c140 65 2d 42 75 74 74 6f 6e 50 72 65 73 73 2d 31 3e  e-ButtonPress-1>
2c150 3c 61 3e 20 7b 20 6c 61 70 70 65 6e 64 20 78 20  <a> { lappend x 
2c160 22 31 22 20 7d 0a 20 20 20 20 62 69 6e 64 20 2e  "1" }.    bind .
2c170 74 2e 66 20 3c 42 75 74 74 6f 6e 50 72 65 73 73  t.f <ButtonPress
2c180 3e 3c 42 75 74 74 6f 6e 50 72 65 73 73 3e 3c 61  ><ButtonPress><a
2c190 3e 20 7b 20 6c 61 70 70 65 6e 64 20 78 20 22 41  > { lappend x "A
2c1a0 6e 79 22 20 7d 0a 20 20 20 20 65 76 65 6e 74 20  ny" }.    event 
2c1b0 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 31  generate .t.f <1
2c1c0 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65  >.    event gene
2c1d0 72 61 74 65 20 2e 74 2e 66 20 3c 31 3e 0a 20 20  rate .t.f <1>.  
2c1e0 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65    event generate
2c1f0 20 2e 74 2e 66 20 3c 61 3e 0a 20 20 20 20 73 65   .t.f <a>.    se
2c200 74 20 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  t x.} -cleanup {
2c210 0a 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e  .    destroy .t.
2c220 66 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 31 7d 0a  f.} -result {1}.
2c230 74 65 73 74 20 62 69 6e 64 2d 33 33 2e 39 20 7b  test bind-33.9 {
2c240 70 72 65 66 65 72 20 6c 61 73 74 20 69 6e 20 63  prefer last in c
2c250 61 73 65 20 6f 66 20 68 6f 6d 6f 67 65 6e 65 6f  ase of homogeneo
2c260 75 73 20 70 61 74 74 65 72 6e 73 7d 20 2d 73 65  us patterns} -se
2c270 74 75 70 20 7b 0a 20 20 20 20 70 61 63 6b 20 5b  tup {.    pack [
2c280 66 72 61 6d 65 20 2e 74 2e 66 5d 0a 20 20 20 20  frame .t.f].    
2c290 66 6f 63 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e  focus -force .t.
2c2a0 66 0a 20 20 20 20 75 70 64 61 74 65 0a 20 20 20  f.    update.   
2c2b0 20 73 65 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64   set x {}.} -bod
2c2c0 79 20 7b 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  y {.    bind .t.
2c2d0 66 20 3c 31 3e 3c 32 3e 3c 32 3e 3c 44 6f 75 62  f <1><2><2><Doub
2c2e0 6c 65 2d 31 3e 20 7b 20 6c 61 70 70 65 6e 64 20  le-1> { lappend 
2c2f0 78 20 22 66 69 72 73 74 22 20 7d 0a 20 20 20 20  x "first" }.    
2c300 62 69 6e 64 20 2e 74 2e 66 20 3c 31 3e 3c 44 6f  bind .t.f <1><Do
2c310 75 62 6c 65 2d 32 3e 3c 31 3e 3c 31 3e 20 7b 20  uble-2><1><1> { 
2c320 6c 61 70 70 65 6e 64 20 78 20 22 6c 61 73 74 22  lappend x "last"
2c330 20 7d 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e   }.    event gen
2c340 65 72 61 74 65 20 2e 74 2e 66 20 3c 31 3e 0a 20  erate .t.f <1>. 
2c350 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61 74     event generat
2c360 65 20 2e 74 2e 66 20 3c 32 3e 0a 20 20 20 20 65  e .t.f <2>.    e
2c370 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74  vent generate .t
2c380 2e 66 20 3c 32 3e 0a 20 20 20 20 65 76 65 6e 74  .f <2>.    event
2c390 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c   generate .t.f <
2c3a0 31 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e  1>.    event gen
2c3b0 65 72 61 74 65 20 2e 74 2e 66 20 3c 31 3e 0a 20  erate .t.f <1>. 
2c3c0 20 20 20 73 65 74 20 78 0a 7d 20 2d 63 6c 65 61     set x.} -clea
2c3d0 6e 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f  nup {.    destro
2c3e0 79 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74  y .t.f.} -result
2c3f0 20 7b 6c 61 73 74 7d 0a 74 65 73 74 20 62 69 6e   {last}.test bin
2c400 64 2d 33 33 2e 31 30 20 7b 70 72 65 66 65 72 20  d-33.10 {prefer 
2c410 6c 61 73 74 20 69 6e 20 63 61 73 65 20 6f 66 20  last in case of 
2c420 68 6f 6d 6f 67 65 6e 65 6f 75 73 20 70 61 74 74  homogeneous patt
2c430 65 72 6e 73 7d 20 2d 73 65 74 75 70 20 7b 0a 20  erns} -setup {. 
2c440 20 20 20 70 61 63 6b 20 5b 66 72 61 6d 65 20 2e     pack [frame .
2c450 74 2e 66 5d 0a 20 20 20 20 66 6f 63 75 73 20 2d  t.f].    focus -
2c460 66 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75  force .t.f.    u
2c470 70 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20  pdate.    set x 
2c480 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20  {}.} -body {.   
2c490 20 62 69 6e 64 20 2e 74 2e 66 20 3c 31 3e 3c 44   bind .t.f <1><D
2c4a0 6f 75 62 6c 65 2d 32 3e 3c 31 3e 3c 31 3e 20 7b  ouble-2><1><1> {
2c4b0 20 6c 61 70 70 65 6e 64 20 78 20 22 66 69 72 73   lappend x "firs
2c4c0 74 22 20 7d 0a 20 20 20 20 62 69 6e 64 20 2e 74  t" }.    bind .t
2c4d0 2e 66 20 3c 31 3e 3c 32 3e 3c 32 3e 3c 44 6f 75  .f <1><2><2><Dou
2c4e0 62 6c 65 2d 31 3e 20 7b 20 6c 61 70 70 65 6e 64  ble-1> { lappend
2c4f0 20 78 20 22 6c 61 73 74 22 20 7d 0a 20 20 20 20   x "last" }.    
2c500 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
2c510 74 2e 66 20 3c 31 3e 0a 20 20 20 20 65 76 65 6e  t.f <1>.    even
2c520 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
2c530 3c 32 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65  <2>.    event ge
2c540 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 32 3e 0a  nerate .t.f <2>.
2c550 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
2c560 74 65 20 2e 74 2e 66 20 3c 31 3e 0a 20 20 20 20  te .t.f <1>.    
2c570 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
2c580 74 2e 66 20 3c 31 3e 0a 20 20 20 20 73 65 74 20  t.f <1>.    set 
2c590 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  x.} -cleanup {. 
2c5a0 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
2c5b0 7d 20 2d 72 65 73 75 6c 74 20 7b 6c 61 73 74 7d  } -result {last}
2c5c0 0a 74 65 73 74 20 62 69 6e 64 2d 33 33 2e 31 31  .test bind-33.11
2c5d0 20 7b 73 68 6f 75 6c 64 20 70 72 65 66 65 72 20   {should prefer 
2c5e0 6d 6f 73 74 20 73 70 65 63 69 61 6c 69 7a 65 64  most specialized
2c5f0 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20 20 20 70  } -setup {.    p
2c600 61 63 6b 20 5b 66 72 61 6d 65 20 2e 74 2e 66 5d  ack [frame .t.f]
2c610 0a 20 20 20 20 66 6f 63 75 73 20 2d 66 6f 72 63  .    focus -forc
2c620 65 20 2e 74 2e 66 0a 20 20 20 20 75 70 64 61 74  e .t.f.    updat
2c630 65 0a 20 20 20 20 73 65 74 20 78 20 7b 7d 0a 7d  e.    set x {}.}
2c640 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 69 6e   -body {.    bin
2c650 64 20 2e 74 2e 66 20 3c 32 3e 3c 44 6f 75 62 6c  d .t.f <2><Doubl
2c660 65 2d 31 3e 3c 44 6f 75 62 6c 65 2d 32 3e 3c 44  e-1><Double-2><D
2c670 6f 75 62 6c 65 2d 31 3e 3c 32 3e 3c 32 3e 20 7b  ouble-1><2><2> {
2c680 20 6c 61 70 70 65 6e 64 20 78 20 22 66 69 72 73   lappend x "firs
2c690 74 22 20 7d 0a 20 20 20 20 62 69 6e 64 20 2e 74  t" }.    bind .t
2c6a0 2e 66 20 3c 32 3e 3c 31 3e 3c 31 3e 3c 32 3e 3c  .f <2><1><1><2><
2c6b0 32 3e 3c 44 6f 75 62 6c 65 2d 31 3e 3c 44 6f 75  2><Double-1><Dou
2c6c0 62 6c 65 2d 32 3e 20 7b 20 6c 61 70 70 65 6e 64  ble-2> { lappend
2c6d0 20 78 20 22 6c 61 73 74 22 20 7d 0a 20 20 20 20   x "last" }.    
2c6e0 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
2c6f0 74 2e 66 20 3c 32 3e 0a 20 20 20 20 65 76 65 6e  t.f <2>.    even
2c700 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
2c710 3c 31 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65  <1>.    event ge
2c720 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 31 3e 0a  nerate .t.f <1>.
2c730 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
2c740 74 65 20 2e 74 2e 66 20 3c 32 3e 0a 20 20 20 20  te .t.f <2>.    
2c750 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
2c760 74 2e 66 20 3c 32 3e 0a 20 20 20 20 65 76 65 6e  t.f <2>.    even
2c770 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20  t generate .t.f 
2c780 3c 31 3e 0a 20 20 20 20 65 76 65 6e 74 20 67 65  <1>.    event ge
2c790 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 31 3e 0a  nerate .t.f <1>.
2c7a0 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72 61      event genera
2c7b0 74 65 20 2e 74 2e 66 20 3c 32 3e 0a 20 20 20 20  te .t.f <2>.    
2c7c0 65 76 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e  event generate .
2c7d0 74 2e 66 20 3c 32 3e 0a 20 20 20 20 73 65 74 20  t.f <2>.    set 
2c7e0 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a 20  x.} -cleanup {. 
2c7f0 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66 0a     destroy .t.f.
2c800 20 20 20 20 23 20 54 68 69 73 20 74 65 73 74 20      # This test 
2c810 63 61 73 65 20 73 68 6f 77 73 20 74 68 61 74 20  case shows that 
2c820 6f 6c 64 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  old implementati
2c830 6f 6e 20 68 61 73 20 61 6e 20 69 73 73 75 65 2c  on has an issue,
2c840 20 62 65 63 61 75 73 65 0a 20 20 20 20 23 20 69   because.    # i
2c850 6e 20 6d 79 20 6f 70 69 6e 69 6f 6e 20 69 74 20  n my opinion it 
2c860 69 73 20 65 78 70 65 63 74 65 64 20 74 68 61 74  is expected that
2c870 20 66 69 72 73 74 20 6f 6e 65 20 69 73 20 6d 61   first one is ma
2c880 74 63 68 69 6e 67 2c 20 74 68 69 73 20 62 69 6e  tching, this bin
2c890 64 69 6e 67 0a 20 20 20 20 23 20 69 73 20 6d 6f  ding.    # is mo
2c8a0 72 65 20 73 70 65 63 69 61 6c 69 7a 65 64 2e 20  re specialized. 
2c8b0 42 75 74 20 6e 65 77 20 69 6d 70 6c 65 6d 65 6e  But new implemen
2c8c0 74 61 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 63  tation will be c
2c8d0 6f 6e 66 6f 72 6d 20 74 6f 20 6f 6c 64 2c 0a 20  onform to old,. 
2c8e0 20 20 20 23 20 61 6e 64 20 73 6f 20 22 6c 61 73     # and so "las
2c8f0 74 22 20 69 73 20 74 68 65 20 65 78 70 65 63 74  t" is the expect
2c900 65 64 20 72 65 73 75 6c 74 2e 0a 7d 20 2d 72 65  ed result..} -re
2c910 73 75 6c 74 20 7b 6c 61 73 74 7d 0a 74 65 73 74  sult {last}.test
2c920 20 62 69 6e 64 2d 33 33 2e 31 32 20 7b 70 72 65   bind-33.12 {pre
2c930 66 65 72 20 6c 61 73 74 20 69 6e 20 63 61 73 65  fer last in case
2c940 20 6f 66 20 68 6f 6d 6f 67 65 6e 65 6f 75 73 20   of homogeneous 
2c950 70 61 74 74 65 72 6e 73 7d 20 2d 73 65 74 75 70  patterns} -setup
2c960 20 7b 0a 20 20 20 20 70 61 63 6b 20 5b 66 72 61   {.    pack [fra
2c970 6d 65 20 2e 74 2e 66 5d 0a 20 20 20 20 66 6f 63  me .t.f].    foc
2c980 75 73 20 2d 66 6f 72 63 65 20 2e 74 2e 66 0a 20  us -force .t.f. 
2c990 20 20 20 75 70 64 61 74 65 0a 20 20 20 20 73 65     update.    se
2c9a0 74 20 78 20 7b 7d 0a 7d 20 2d 62 6f 64 79 20 7b  t x {}.} -body {
2c9b0 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c  .    bind .t.f <
2c9c0 43 6f 6e 74 72 6f 6c 2d 31 3e 3c 31 3e 20 7b 20  Control-1><1> { 
2c9d0 6c 61 70 70 65 6e 64 20 78 20 22 66 69 72 73 74  lappend x "first
2c9e0 22 20 7d 0a 20 20 20 20 62 69 6e 64 20 2e 74 2e  " }.    bind .t.
2c9f0 66 20 3c 31 3e 3c 43 6f 6e 74 72 6f 6c 2d 31 3e  f <1><Control-1>
2ca00 20 7b 20 6c 61 70 70 65 6e 64 20 78 20 22 6c 61   { lappend x "la
2ca10 73 74 22 20 7d 0a 20 20 20 20 65 76 65 6e 74 20  st" }.    event 
2ca20 67 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 43  generate .t.f <C
2ca30 6f 6e 74 72 6f 6c 2d 31 3e 0a 20 20 20 20 65 76  ontrol-1>.    ev
2ca40 65 6e 74 20 67 65 6e 65 72 61 74 65 20 2e 74 2e  ent generate .t.
2ca50 66 20 3c 43 6f 6e 74 72 6f 6c 2d 31 3e 0a 20 20  f <Control-1>.  
2ca60 20 20 73 65 74 20 78 0a 7d 20 2d 63 6c 65 61 6e    set x.} -clean
2ca70 75 70 20 7b 0a 20 20 20 20 64 65 73 74 72 6f 79  up {.    destroy
2ca80 20 2e 74 2e 66 0a 7d 20 2d 72 65 73 75 6c 74 20   .t.f.} -result 
2ca90 7b 6c 61 73 74 7d 0a 74 65 73 74 20 62 69 6e 64  {last}.test bind
2caa0 2d 33 33 2e 31 33 20 7b 70 72 65 66 65 72 20 6c  -33.13 {prefer l
2cab0 61 73 74 20 69 6e 20 63 61 73 65 20 6f 66 20 68  ast in case of h
2cac0 6f 6d 6f 67 65 6e 65 6f 75 73 20 70 61 74 74 65  omogeneous patte
2cad0 72 6e 73 7d 20 2d 73 65 74 75 70 20 7b 0a 20 20  rns} -setup {.  
2cae0 20 20 70 61 63 6b 20 5b 66 72 61 6d 65 20 2e 74    pack [frame .t
2caf0 2e 66 5d 0a 20 20 20 20 66 6f 63 75 73 20 2d 66  .f].    focus -f
2cb00 6f 72 63 65 20 2e 74 2e 66 0a 20 20 20 20 75 70  orce .t.f.    up
2cb10 64 61 74 65 0a 20 20 20 20 73 65 74 20 78 20 7b  date.    set x {
2cb20 7d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  }.} -body {.    
2cb30 62 69 6e 64 20 2e 74 2e 66 20 3c 31 3e 3c 43 6f  bind .t.f <1><Co
2cb40 6e 74 72 6f 6c 2d 31 3e 20 7b 20 6c 61 70 70 65  ntrol-1> { lappe
2cb50 6e 64 20 78 20 22 66 69 72 73 74 22 20 7d 0a 20  nd x "first" }. 
2cb60 20 20 20 62 69 6e 64 20 2e 74 2e 66 20 3c 43 6f     bind .t.f <Co
2cb70 6e 74 72 6f 6c 2d 31 3e 3c 31 3e 20 7b 20 6c 61  ntrol-1><1> { la
2cb80 70 70 65 6e 64 20 78 20 22 6c 61 73 74 22 20 7d  ppend x "last" }
2cb90 0a 20 20 20 20 65 76 65 6e 74 20 67 65 6e 65 72  .    event gener
2cba0 61 74 65 20 2e 74 2e 66 20 3c 43 6f 6e 74 72 6f  ate .t.f <Contro
2cbb0 6c 2d 31 3e 0a 20 20 20 20 65 76 65 6e 74 20 67  l-1>.    event g
2cbc0 65 6e 65 72 61 74 65 20 2e 74 2e 66 20 3c 43 6f  enerate .t.f <Co
2cbd0 6e 74 72 6f 6c 2d 31 3e 0a 20 20 20 20 73 65 74  ntrol-1>.    set
2cbe0 20 78 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0a   x.} -cleanup {.
2cbf0 20 20 20 20 64 65 73 74 72 6f 79 20 2e 74 2e 66      destroy .t.f
2cc00 0a 20 20 20 20 23 20 4f 6c 64 20 69 6d 70 6c 65  .    # Old imple
2cc10 6d 65 6e 74 61 74 69 6f 6e 20 66 61 69 6c 73 2c  mentation fails,
2cc20 20 61 6e 64 20 72 65 74 75 72 6e 73 20 22 66 69   and returns "fi
2cc30 72 73 74 22 2c 20 62 75 74 20 74 68 69 73 20 69  rst", but this i
2cc40 73 20 77 72 6f 6e 67 2c 0a 20 20 20 20 23 20 62  s wrong,.    # b
2cc50 65 63 61 75 73 65 20 62 6f 74 68 20 62 69 6e 64  ecause both bind
2cc60 69 6e 67 73 20 61 72 65 20 68 6f 6d 6f 67 65 6e  ings are homogen
2cc70 65 6f 75 73 20 65 71 75 61 6c 2c 20 73 6f 20 74  eous equal, so t
2cc80 68 65 20 6c 61 74 74 65 72 20 6d 75 73 74 0a 20  he latter must. 
2cc90 20 20 20 23 20 62 65 20 70 72 65 66 65 72 72 65     # be preferre
2cca0 64 2e 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 6c 61  d..} -result {la
2ccb0 73 74 7d 0a 0a 0a 23 20 63 6c 65 61 6e 75 70 0a  st}...# cleanup.
2ccc0 63 6c 65 61 6e 75 70 54 65 73 74 73 0a 72 65 74  cleanupTests.ret
2ccd0 75 72 6e 0a 0a 23 20 76 69 3a 73 65 74 20 74 73  urn..# vi:set ts
2cce0 3d 34 20 73 77 3d 34 20 65 74 3a 0a 23 20 4c 6f  =4 sw=4 et:.# Lo
2ccf0 63 61 6c 20 56 61 72 69 61 62 6c 65 73 3a 0a 23  cal Variables:.#
2cd00 20 6d 6f 64 65 3a 20 74 63 6c 0a 23 20 45 6e 64   mode: tcl.# End
2cd10 3a 0a                                            :.