Hex Artifact Content

Artifact d00f6e1220fc2d6b80c2b360d5bade14c575e036:


0000: 2f 2a 20 0a 20 2a 20 74 6b 58 45 76 65 6e 74 2e  /* . * tkXEvent.
0010: 63 20 28 43 54 6b 29 20 2d 2d 0a 20 2a 0a 20 2a  c (CTk) --. *. *
0020: 09 54 68 69 73 20 66 69 6c 65 20 70 72 6f 76 69  .This file provi
0030: 64 65 73 20 62 61 73 69 63 20 6c 6f 77 2d 6c 65  des basic low-le
0040: 76 65 6c 20 66 61 63 69 6c 69 74 69 65 73 20 66  vel facilities f
0050: 6f 72 20 6d 61 6e 61 67 69 6e 67 0a 20 2a 09 58  or managing. *.X
0060: 20 65 76 65 6e 74 73 2e 20 20 49 74 20 62 75 69   events.  It bui
0070: 6c 64 73 20 6f 6e 20 74 68 65 20 66 61 63 69 6c  lds on the facil
0080: 69 74 69 65 73 20 70 72 6f 76 69 64 65 64 20 69  ities provided i
0090: 6e 20 74 6b 45 76 65 6e 74 2e 63 2e 0a 20 2a 0a  n tkEvent.c.. *.
00a0: 20 2a 20 43 6f 70 79 72 69 67 68 74 20 28 63 29   * Copyright (c)
00b0: 20 31 39 39 30 2d 31 39 39 34 20 54 68 65 20 52   1990-1994 The R
00c0: 65 67 65 6e 74 73 20 6f 66 20 74 68 65 20 55 6e  egents of the Un
00d0: 69 76 65 72 73 69 74 79 20 6f 66 20 43 61 6c 69  iversity of Cali
00e0: 66 6f 72 6e 69 61 2e 0a 20 2a 20 43 6f 70 79 72  fornia.. * Copyr
00f0: 69 67 68 74 20 28 63 29 20 31 39 39 34 20 53 75  ight (c) 1994 Su
0100: 6e 20 4d 69 63 72 6f 73 79 73 74 65 6d 73 2c 20  n Microsystems, 
0110: 49 6e 63 2e 0a 20 2a 20 43 6f 70 79 72 69 67 68  Inc.. * Copyrigh
0120: 74 20 28 63 29 20 31 39 39 35 20 43 6c 65 76 65  t (c) 1995 Cleve
0130: 6c 61 6e 64 20 43 6c 69 6e 69 63 20 46 6f 75 6e  land Clinic Foun
0140: 64 61 74 69 6f 6e 0a 20 2a 0a 20 2a 20 53 65 65  dation. *. * See
0150: 20 74 68 65 20 66 69 6c 65 20 22 6c 69 63 65 6e   the file "licen
0160: 73 65 2e 74 65 72 6d 73 22 20 66 6f 72 20 69 6e  se.terms" for in
0170: 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20 75 73 61  formation on usa
0180: 67 65 20 61 6e 64 20 72 65 64 69 73 74 72 69 62  ge and redistrib
0190: 75 74 69 6f 6e 0a 20 2a 20 6f 66 20 74 68 69 73  ution. * of this
01a0: 20 66 69 6c 65 2c 20 61 6e 64 20 66 6f 72 20 61   file, and for a
01b0: 20 44 49 53 43 4c 41 49 4d 45 52 20 4f 46 20 41   DISCLAIMER OF A
01c0: 4c 4c 20 57 41 52 52 41 4e 54 49 45 53 2e 0a 20  LL WARRANTIES.. 
01d0: 2a 0a 20 2a 20 40 28 23 29 20 24 49 64 3a 20 63  *. * @(#) $Id: c
01e0: 74 6b 2e 73 68 61 72 2c 76 20 31 2e 35 30 20 31  tk.shar,v 1.50 1
01f0: 39 39 36 2f 30 31 2f 31 35 20 31 34 3a 34 37 3a  996/01/15 14:47:
0200: 31 36 20 61 6e 64 72 65 77 6d 20 45 78 70 20 61  16 andrewm Exp a
0210: 6e 64 72 65 77 6d 20 24 0a 20 2a 2f 0a 0a 23 69  ndrewm $. */..#i
0220: 6e 63 6c 75 64 65 20 22 74 6b 50 6f 72 74 2e 68  nclude "tkPort.h
0230: 22 0a 23 69 6e 63 6c 75 64 65 20 22 74 6b 49 6e  ".#include "tkIn
0240: 74 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73  t.h".#include <s
0250: 69 67 6e 61 6c 2e 68 3e 0a 0a 2f 2a 0a 20 2a 20  ignal.h>../*. * 
0260: 54 68 65 72 65 27 73 20 61 20 70 6f 74 65 6e 74  There's a potent
0270: 69 61 6c 20 70 72 6f 62 6c 65 6d 20 69 66 20 61  ial problem if a
0280: 20 68 61 6e 64 6c 65 72 20 69 73 20 64 65 6c 65   handler is dele
0290: 74 65 64 20 77 68 69 6c 65 20 69 74 27 73 0a 20  ted while it's. 
02a0: 2a 20 63 75 72 72 65 6e 74 20 28 69 2e 65 2e 20  * current (i.e. 
02b0: 69 74 73 20 70 72 6f 63 65 64 75 72 65 20 69 73  its procedure is
02c0: 20 65 78 65 63 75 74 69 6e 67 29 2c 20 73 69 6e   executing), sin
02d0: 63 65 20 54 6b 5f 48 61 6e 64 6c 65 45 76 65 6e  ce Tk_HandleEven
02e0: 74 0a 20 2a 20 77 69 6c 6c 20 6e 65 65 64 20 74  t. * will need t
02f0: 6f 20 72 65 61 64 20 74 68 65 20 68 61 6e 64 6c  o read the handl
0300: 65 72 27 73 20 22 6e 65 78 74 50 74 72 22 20 66  er's "nextPtr" f
0310: 69 65 6c 64 20 77 68 65 6e 20 74 68 65 20 70 72  ield when the pr
0320: 6f 63 65 64 75 72 65 0a 20 2a 20 72 65 74 75 72  ocedure. * retur
0330: 6e 73 2e 20 20 54 6f 20 68 61 6e 64 6c 65 20 74  ns.  To handle t
0340: 68 69 73 20 70 72 6f 62 6c 65 6d 2c 20 73 74 72  his problem, str
0350: 75 63 74 75 72 65 73 20 6f 66 20 74 68 65 20 74  uctures of the t
0360: 79 70 65 20 62 65 6c 6f 77 0a 20 2a 20 69 6e 64  ype below. * ind
0370: 69 63 61 74 65 20 74 68 65 20 6e 65 78 74 20 68  icate the next h
0380: 61 6e 64 6c 65 72 20 74 6f 20 62 65 20 70 72 6f  andler to be pro
0390: 63 65 73 73 65 64 20 66 6f 72 20 61 6e 79 20 28  cessed for any (
03a0: 72 65 63 75 72 73 69 76 65 6c 79 0a 20 2a 20 6e  recursively. * n
03b0: 65 73 74 65 64 29 20 64 69 73 70 61 74 63 68 65  ested) dispatche
03c0: 73 20 69 6e 20 70 72 6f 67 72 65 73 73 2e 20 20  s in progress.  
03d0: 54 68 65 20 6e 65 78 74 48 61 6e 64 6c 65 72 20  The nextHandler 
03e0: 66 69 65 6c 64 73 20 67 65 74 0a 20 2a 20 75 70  fields get. * up
03f0: 64 61 74 65 64 20 69 66 20 74 68 65 20 68 61 6e  dated if the han
0400: 64 6c 65 72 73 20 70 6f 69 6e 74 65 64 20 74 6f  dlers pointed to
0410: 20 61 72 65 20 64 65 6c 65 74 65 64 2e 20 20 54   are deleted.  T
0420: 6b 5f 48 61 6e 64 6c 65 45 76 65 6e 74 0a 20 2a  k_HandleEvent. *
0430: 20 61 6c 73 6f 20 6e 65 65 64 73 20 74 6f 20 6b   also needs to k
0440: 6e 6f 77 20 69 66 20 74 68 65 20 65 6e 74 69 72  now if the entir
0450: 65 20 77 69 6e 64 6f 77 20 67 65 74 73 20 64 65  e window gets de
0460: 6c 65 74 65 64 3b 20 20 74 68 65 20 77 69 6e 50  leted;  the winP
0470: 74 72 0a 20 2a 20 66 69 65 6c 64 20 69 73 20 73  tr. * field is s
0480: 65 74 20 74 6f 20 7a 65 72 6f 20 69 66 20 74 68  et to zero if th
0490: 61 74 20 70 61 72 74 69 63 75 6c 61 72 20 77 69  at particular wi
04a0: 6e 64 6f 77 20 67 65 74 73 20 64 65 6c 65 74 65  ndow gets delete
04b0: 64 2e 0a 20 2a 2f 0a 0a 74 79 70 65 64 65 66 20  d.. */..typedef 
04c0: 73 74 72 75 63 74 20 49 6e 50 72 6f 67 72 65 73  struct InProgres
04d0: 73 20 7b 0a 20 20 20 20 58 45 76 65 6e 74 20 2a  s {.    XEvent *
04e0: 65 76 65 6e 74 50 74 72 3b 09 09 20 2f 2a 20 45  eventPtr;.. /* E
04f0: 76 65 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62  vent currently b
0500: 65 69 6e 67 20 68 61 6e 64 6c 65 64 2e 20 2a 2f  eing handled. */
0510: 0a 20 20 20 20 54 6b 57 69 6e 64 6f 77 20 2a 77  .    TkWindow *w
0520: 69 6e 50 74 72 3b 09 09 20 2f 2a 20 57 69 6e 64  inPtr;.. /* Wind
0530: 6f 77 20 66 6f 72 20 65 76 65 6e 74 2e 20 20 47  ow for event.  G
0540: 65 74 73 20 73 65 74 20 74 6f 20 4e 6f 6e 65 20  ets set to None 
0550: 69 66 0a 09 09 09 09 20 20 2a 20 77 69 6e 64 6f  if.....  * windo
0560: 77 20 69 73 20 64 65 6c 65 74 65 64 20 77 68 69  w is deleted whi
0570: 6c 65 20 65 76 65 6e 74 20 69 73 20 62 65 69 6e  le event is bein
0580: 67 0a 09 09 09 09 20 20 2a 20 68 61 6e 64 6c 65  g.....  * handle
0590: 64 2e 20 2a 2f 0a 20 20 20 20 54 6b 45 76 65 6e  d. */.    TkEven
05a0: 74 48 61 6e 64 6c 65 72 20 2a 6e 65 78 74 48 61  tHandler *nextHa
05b0: 6e 64 6c 65 72 3b 20 2f 2a 20 4e 65 78 74 20 68  ndler; /* Next h
05c0: 61 6e 64 6c 65 72 20 69 6e 20 73 65 61 72 63 68  andler in search
05d0: 2e 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  . */.    struct 
05e0: 49 6e 50 72 6f 67 72 65 73 73 20 2a 6e 65 78 74  InProgress *next
05f0: 50 74 72 3b 09 20 2f 2a 20 4e 65 78 74 20 68 69  Ptr;. /* Next hi
0600: 67 68 65 72 20 6e 65 73 74 65 64 20 73 65 61 72  gher nested sear
0610: 63 68 2e 20 2a 2f 0a 7d 20 49 6e 50 72 6f 67 72  ch. */.} InProgr
0620: 65 73 73 3b 0a 0a 73 74 61 74 69 63 20 49 6e 50  ess;..static InP
0630: 72 6f 67 72 65 73 73 20 2a 70 65 6e 64 69 6e 67  rogress *pending
0640: 50 74 72 20 3d 20 4e 55 4c 4c 3b 0a 09 09 09 09  Ptr = NULL;.....
0650: 2f 2a 20 54 6f 70 6d 6f 73 74 20 73 65 61 72 63  /* Topmost searc
0660: 68 20 69 6e 20 70 72 6f 67 72 65 73 73 2c 20 6f  h in progress, o
0670: 72 0a 09 09 09 09 20 2a 20 4e 55 4c 4c 20 69 66  r..... * NULL if
0680: 20 6e 6f 6e 65 2e 20 2a 2f 0a 0a 2f 2a 0a 20 2a   none. */../*. *
0690: 20 46 6f 72 20 65 61 63 68 20 63 61 6c 6c 20 74   For each call t
06a0: 6f 20 54 6b 5f 43 72 65 61 74 65 47 65 6e 65 72  o Tk_CreateGener
06b0: 69 63 48 61 6e 64 6c 65 72 2c 20 61 6e 20 69 6e  icHandler, an in
06c0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
06d0: 6c 6c 6f 77 69 6e 67 0a 20 2a 20 73 74 72 75 63  llowing. * struc
06e0: 74 75 72 65 20 77 69 6c 6c 20 62 65 20 63 72 65  ture will be cre
06f0: 61 74 65 64 2e 20 20 41 6c 6c 20 6f 66 20 74 68  ated.  All of th
0700: 65 20 61 63 74 69 76 65 20 68 61 6e 64 6c 65 72  e active handler
0710: 73 20 61 72 65 20 6c 69 6e 6b 65 64 20 69 6e 74  s are linked int
0720: 6f 20 61 0a 20 2a 20 6c 69 73 74 2e 0a 20 2a 2f  o a. * list.. */
0730: 0a 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ..typedef struct
0740: 20 47 65 6e 65 72 69 63 48 61 6e 64 6c 65 72 20   GenericHandler 
0750: 7b 0a 20 20 20 20 54 6b 5f 47 65 6e 65 72 69 63  {.    Tk_Generic
0760: 50 72 6f 63 20 2a 70 72 6f 63 3b 09 2f 2a 20 50  Proc *proc;./* P
0770: 72 6f 63 65 64 75 72 65 20 74 6f 20 64 69 73 70  rocedure to disp
0780: 61 74 63 68 20 6f 6e 20 61 6c 6c 20 58 20 65 76  atch on all X ev
0790: 65 6e 74 73 2e 20 2a 2f 0a 20 20 20 20 43 6c 69  ents. */.    Cli
07a0: 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61  entData clientDa
07b0: 74 61 3b 09 2f 2a 20 43 6c 69 65 6e 74 20 64 61  ta;./* Client da
07c0: 74 61 20 74 6f 20 70 61 73 73 20 74 6f 20 70 72  ta to pass to pr
07d0: 6f 63 65 64 75 72 65 2e 20 2a 2f 0a 20 20 20 20  ocedure. */.    
07e0: 69 6e 74 20 64 65 6c 65 74 65 46 6c 61 67 3b 09  int deleteFlag;.
07f0: 09 2f 2a 20 46 6c 61 67 20 74 6f 20 73 65 74 20  ./* Flag to set 
0800: 77 68 65 6e 20 74 68 69 73 20 68 61 6e 64 6c 65  when this handle
0810: 72 20 69 73 20 64 65 6c 65 74 65 64 2e 20 2a 2f  r is deleted. */
0820: 0a 20 20 20 20 73 74 72 75 63 74 20 47 65 6e 65  .    struct Gene
0830: 72 69 63 48 61 6e 64 6c 65 72 20 2a 6e 65 78 74  ricHandler *next
0840: 50 74 72 3b 0a 09 09 09 09 2f 2a 20 4e 65 78 74  Ptr;...../* Next
0850: 20 68 61 6e 64 6c 65 72 20 69 6e 20 6c 69 73 74   handler in list
0860: 20 6f 66 20 61 6c 6c 20 67 65 6e 65 72 69 63 0a   of all generic.
0870: 09 09 09 09 20 2a 20 68 61 6e 64 6c 65 72 73 2c  .... * handlers,
0880: 20 6f 72 20 4e 55 4c 4c 20 66 6f 72 20 65 6e 64   or NULL for end
0890: 20 6f 66 20 6c 69 73 74 2e 20 2a 2f 0a 7d 20 47   of list. */.} G
08a0: 65 6e 65 72 69 63 48 61 6e 64 6c 65 72 3b 0a 0a  enericHandler;..
08b0: 73 74 61 74 69 63 20 47 65 6e 65 72 69 63 48 61  static GenericHa
08c0: 6e 64 6c 65 72 20 2a 67 65 6e 65 72 69 63 4c 69  ndler *genericLi
08d0: 73 74 20 3d 20 4e 55 4c 4c 3b 0a 09 09 09 09 2f  st = NULL;...../
08e0: 2a 20 46 69 72 73 74 20 68 61 6e 64 6c 65 72 20  * First handler 
08f0: 69 6e 20 74 68 65 20 6c 69 73 74 2c 20 6f 72 20  in the list, or 
0900: 4e 55 4c 4c 2e 20 2a 2f 0a 73 74 61 74 69 63 20  NULL. */.static 
0910: 47 65 6e 65 72 69 63 48 61 6e 64 6c 65 72 20 2a  GenericHandler *
0920: 6c 61 73 74 47 65 6e 65 72 69 63 50 74 72 20 3d  lastGenericPtr =
0930: 20 4e 55 4c 4c 3b 0a 09 09 09 09 2f 2a 20 4c 61   NULL;...../* La
0940: 73 74 20 68 61 6e 64 6c 65 72 20 69 6e 20 6c 69  st handler in li
0950: 73 74 2e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 54 68  st. */../*. * Th
0960: 65 72 65 27 73 20 61 20 70 6f 74 65 6e 74 69 61  ere's a potentia
0970: 6c 20 70 72 6f 62 6c 65 6d 20 69 66 20 54 6b 5f  l problem if Tk_
0980: 48 61 6e 64 6c 65 45 76 65 6e 74 20 69 73 20 65  HandleEvent is e
0990: 6e 74 65 72 65 64 20 72 65 63 75 72 73 69 76 65  ntered recursive
09a0: 6c 79 2e 0a 20 2a 20 41 20 68 61 6e 64 6c 65 72  ly.. * A handler
09b0: 20 63 61 6e 6e 6f 74 20 62 65 20 64 65 6c 65 74   cannot be delet
09c0: 65 64 20 70 68 79 73 69 63 61 6c 6c 79 20 75 6e  ed physically un
09d0: 74 69 6c 20 77 65 20 68 61 76 65 20 72 65 74 75  til we have retu
09e0: 72 6e 65 64 20 66 72 6f 6d 0a 20 2a 20 63 61 6c  rned from. * cal
09f0: 6c 69 6e 67 20 69 74 2e 20 20 4f 74 68 65 72 77  ling it.  Otherw
0a00: 69 73 65 2c 20 77 65 27 72 65 20 6c 6f 6f 6b 69  ise, we're looki
0a10: 6e 67 20 61 74 20 75 6e 61 6c 6c 6f 63 61 74 65  ng at unallocate
0a20: 64 20 6d 65 6d 6f 72 79 20 69 6e 20 61 64 76 61  d memory in adva
0a30: 6e 63 69 6e 67 20 74 6f 0a 20 2a 20 69 74 73 20  ncing to. * its 
0a40: 60 6e 65 78 74 27 20 65 6e 74 72 79 2e 20 20 57  `next' entry.  W
0a50: 65 20 64 65 61 6c 20 77 69 74 68 20 74 68 65 20  e deal with the 
0a60: 70 72 6f 62 6c 65 6d 20 62 79 20 75 73 69 6e 67  problem by using
0a70: 20 74 68 65 20 60 64 65 6c 65 74 65 20 66 6c 61   the `delete fla
0a80: 67 27 20 61 6e 64 0a 20 2a 20 64 65 6c 65 74 69  g' and. * deleti
0a90: 6e 67 20 68 61 6e 64 6c 65 72 73 20 6f 6e 6c 79  ng handlers only
0aa0: 20 77 68 65 6e 20 69 74 27 73 20 6b 6e 6f 77 6e   when it's known
0ab0: 20 74 68 61 74 20 74 68 65 72 65 27 73 20 6e 6f   that there's no
0ac0: 20 68 61 6e 64 6c 65 72 20 61 63 74 69 76 65 2e   handler active.
0ad0: 0a 20 2a 0a 20 2a 20 54 68 65 20 66 6f 6c 6c 6f  . *. * The follo
0ae0: 77 69 6e 67 20 76 61 72 69 61 62 6c 65 20 68 61  wing variable ha
0af0: 73 20 61 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61 6c  s a non-zero val
0b00: 75 65 20 77 68 65 6e 20 61 20 68 61 6e 64 6c 65  ue when a handle
0b10: 72 20 69 73 20 61 63 74 69 76 65 2e 0a 20 2a 2f  r is active.. */
0b20: 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65 6e  ..static int gen
0b30: 65 72 69 63 48 61 6e 64 6c 65 72 73 41 63 74 69  ericHandlersActi
0b40: 76 65 20 3d 20 30 3b 0a 0a 2f 2a 0a 20 2a 20 41  ve = 0;../*. * A
0b50: 72 72 61 79 20 6f 66 20 65 76 65 6e 74 20 6d 61  rray of event ma
0b60: 73 6b 73 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  sks correspondin
0b70: 67 20 74 6f 20 65 61 63 68 20 58 20 65 76 65 6e  g to each X even
0b80: 74 3a 0a 20 2a 2f 0a 0a 73 74 61 74 69 63 20 75  t:. */..static u
0b90: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 65 76 65  nsigned long eve
0ba0: 6e 74 4d 61 73 6b 73 5b 5d 20 3d 20 7b 0a 20 20  ntMasks[] = {.  
0bb0: 20 20 43 54 4b 5f 4d 41 50 5f 45 56 45 4e 54 5f    CTK_MAP_EVENT_
0bc0: 4d 41 53 4b 2c 09 09 09 2f 2a 20 43 54 4b 5f 4d  MASK,.../* CTK_M
0bd0: 41 50 5f 45 56 45 4e 54 20 2a 2f 0a 20 20 20 20  AP_EVENT */.    
0be0: 43 54 4b 5f 4d 41 50 5f 45 56 45 4e 54 5f 4d 41  CTK_MAP_EVENT_MA
0bf0: 53 4b 2c 09 09 09 2f 2a 20 43 54 4b 5f 55 4e 4d  SK,.../* CTK_UNM
0c00: 41 50 5f 45 56 45 4e 54 20 2a 2f 0a 20 20 20 20  AP_EVENT */.    
0c10: 43 54 4b 5f 45 58 50 4f 53 45 5f 45 56 45 4e 54  CTK_EXPOSE_EVENT
0c20: 5f 4d 41 53 4b 2c 09 09 2f 2a 20 43 54 4b 5f 45  _MASK,../* CTK_E
0c30: 58 50 4f 53 45 5f 45 56 45 4e 54 20 2a 2f 0a 20  XPOSE_EVENT */. 
0c40: 20 20 20 43 54 4b 5f 46 4f 43 55 53 5f 45 56 45     CTK_FOCUS_EVE
0c50: 4e 54 5f 4d 41 53 4b 2c 09 09 2f 2a 20 43 54 4b  NT_MASK,../* CTK
0c60: 5f 46 4f 43 55 53 5f 45 56 45 4e 54 20 2a 2f 0a  _FOCUS_EVENT */.
0c70: 20 20 20 20 43 54 4b 5f 46 4f 43 55 53 5f 45 56      CTK_FOCUS_EV
0c80: 45 4e 54 5f 4d 41 53 4b 2c 09 09 2f 2a 20 43 54  ENT_MASK,../* CT
0c90: 4b 5f 55 4e 46 4f 43 55 53 5f 45 56 45 4e 54 20  K_UNFOCUS_EVENT 
0ca0: 2a 2f 0a 20 20 20 20 43 54 4b 5f 4b 45 59 5f 45  */.    CTK_KEY_E
0cb0: 56 45 4e 54 5f 4d 41 53 4b 2c 09 09 09 2f 2a 20  VENT_MASK,.../* 
0cc0: 43 54 4b 5f 4b 45 59 5f 45 56 45 4e 54 20 2a 2f  CTK_KEY_EVENT */
0cd0: 0a 20 20 20 20 43 54 4b 5f 44 45 53 54 52 4f 59  .    CTK_DESTROY
0ce0: 5f 45 56 45 4e 54 5f 4d 41 53 4b 2c 09 09 2f 2a  _EVENT_MASK,../*
0cf0: 20 43 54 4b 5f 44 45 53 54 52 4f 59 5f 45 56 45   CTK_DESTROY_EVE
0d00: 4e 54 20 2a 2f 0a 20 20 20 20 30 09 09 09 09 09  NT */.    0.....
0d10: 2f 2a 20 43 54 4b 5f 55 4e 53 55 50 50 4f 52 54  /* CTK_UNSUPPORT
0d20: 45 44 5f 45 56 45 4e 54 20 2a 2f 0a 7d 3b 0a 0a  ED_EVENT */.};..
0d30: 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d  ../*. *---------
0d40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0d50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0d60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0d70: 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 54 6b 5f 43  -----. *. * Tk_C
0d80: 72 65 61 74 65 45 76 65 6e 74 48 61 6e 64 6c 65  reateEventHandle
0d90: 72 20 2d 2d 0a 20 2a 0a 20 2a 09 41 72 72 61 6e  r --. *. *.Arran
0da0: 67 65 20 66 6f 72 20 61 20 67 69 76 65 6e 20 70  ge for a given p
0db0: 72 6f 63 65 64 75 72 65 20 74 6f 20 62 65 20 69  rocedure to be i
0dc0: 6e 76 6f 6b 65 64 20 77 68 65 6e 65 76 65 72 0a  nvoked whenever.
0dd0: 20 2a 09 65 76 65 6e 74 73 20 66 72 6f 6d 20 61   *.events from a
0de0: 20 67 69 76 65 6e 20 63 6c 61 73 73 20 6f 63 63   given class occ
0df0: 75 72 20 69 6e 20 61 20 67 69 76 65 6e 20 77 69  ur in a given wi
0e00: 6e 64 6f 77 2e 0a 20 2a 0a 20 2a 20 52 65 73 75  ndow.. *. * Resu
0e10: 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a  lts:. *.None.. *
0e20: 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 73  . * Side effects
0e30: 3a 0a 20 2a 09 46 72 6f 6d 20 6e 6f 77 20 6f 6e  :. *.From now on
0e40: 2c 20 77 68 65 6e 65 76 65 72 20 61 6e 20 65 76  , whenever an ev
0e50: 65 6e 74 20 6f 66 20 74 68 65 20 74 79 70 65 20  ent of the type 
0e60: 67 69 76 65 6e 20 62 79 0a 20 2a 09 6d 61 73 6b  given by. *.mask
0e70: 20 6f 63 63 75 72 73 20 66 6f 72 20 74 6f 6b 65   occurs for toke
0e80: 6e 20 61 6e 64 20 69 73 20 70 72 6f 63 65 73 73  n and is process
0e90: 65 64 20 62 79 20 54 6b 5f 48 61 6e 64 6c 65 45  ed by Tk_HandleE
0ea0: 76 65 6e 74 2c 0a 20 2a 09 70 72 6f 63 20 77 69  vent,. *.proc wi
0eb0: 6c 6c 20 62 65 20 63 61 6c 6c 65 64 2e 20 20 53  ll be called.  S
0ec0: 65 65 20 74 68 65 20 6d 61 6e 75 61 6c 20 65 6e  ee the manual en
0ed0: 74 72 79 20 66 6f 72 20 64 65 74 61 69 6c 73 0a  try for details.
0ee0: 20 2a 09 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e   *.of the callin
0ef0: 67 20 73 65 71 75 65 6e 63 65 20 61 6e 64 20 72  g sequence and r
0f00: 65 74 75 72 6e 20 76 61 6c 75 65 20 66 6f 72 20  eturn value for 
0f10: 70 72 6f 63 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d  proc.. *. *-----
0f20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0f30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0f40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0f50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 76  ---------. */..v
0f60: 6f 69 64 0a 54 6b 5f 43 72 65 61 74 65 45 76 65  oid.Tk_CreateEve
0f70: 6e 74 48 61 6e 64 6c 65 72 28 74 6f 6b 65 6e 2c  ntHandler(token,
0f80: 20 6d 61 73 6b 2c 20 70 72 6f 63 2c 20 63 6c 69   mask, proc, cli
0f90: 65 6e 74 44 61 74 61 29 0a 20 20 20 20 54 6b 5f  entData).    Tk_
0fa0: 57 69 6e 64 6f 77 20 74 6f 6b 65 6e 3b 09 09 2f  Window token;../
0fb0: 2a 20 54 6f 6b 65 6e 20 66 6f 72 20 77 69 6e 64  * Token for wind
0fc0: 6f 77 20 69 6e 20 77 68 69 63 68 20 74 6f 0a 09  ow in which to..
0fd0: 09 09 09 20 2a 20 63 72 65 61 74 65 20 68 61 6e  ... * create han
0fe0: 64 6c 65 72 2e 20 2a 2f 0a 20 20 20 20 75 6e 73  dler. */.    uns
0ff0: 69 67 6e 65 64 20 6c 6f 6e 67 20 6d 61 73 6b 3b  igned long mask;
1000: 09 09 2f 2a 20 45 76 65 6e 74 73 20 66 6f 72 20  ../* Events for 
1010: 77 68 69 63 68 20 70 72 6f 63 20 73 68 6f 75 6c  which proc shoul
1020: 64 0a 09 09 09 09 20 2a 20 62 65 20 63 61 6c 6c  d..... * be call
1030: 65 64 2e 20 2a 2f 0a 20 20 20 20 54 6b 5f 45 76  ed. */.    Tk_Ev
1040: 65 6e 74 50 72 6f 63 20 2a 70 72 6f 63 3b 09 09  entProc *proc;..
1050: 2f 2a 20 50 72 6f 63 65 64 75 72 65 20 74 6f 20  /* Procedure to 
1060: 63 61 6c 6c 20 66 6f 72 20 65 61 63 68 0a 09 09  call for each...
1070: 09 09 20 2a 20 73 65 6c 65 63 74 65 64 20 65 76  .. * selected ev
1080: 65 6e 74 20 2a 2f 0a 20 20 20 20 43 6c 69 65 6e  ent */.    Clien
1090: 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61  tData clientData
10a0: 3b 09 2f 2a 20 41 72 62 69 74 72 61 72 79 20 64  ;./* Arbitrary d
10b0: 61 74 61 20 74 6f 20 70 61 73 73 20 74 6f 20 70  ata to pass to p
10c0: 72 6f 63 2e 20 2a 2f 0a 7b 0a 20 20 20 20 72 65  roc. */.{.    re
10d0: 67 69 73 74 65 72 20 54 6b 45 76 65 6e 74 48 61  gister TkEventHa
10e0: 6e 64 6c 65 72 20 2a 68 61 6e 64 6c 65 72 50 74  ndler *handlerPt
10f0: 72 3b 0a 20 20 20 20 72 65 67 69 73 74 65 72 20  r;.    register 
1100: 54 6b 57 69 6e 64 6f 77 20 2a 77 69 6e 50 74 72  TkWindow *winPtr
1110: 20 3d 20 28 54 6b 57 69 6e 64 6f 77 20 2a 29 20   = (TkWindow *) 
1120: 74 6f 6b 65 6e 3b 0a 20 20 20 20 69 6e 74 20 66  token;.    int f
1130: 6f 75 6e 64 3b 0a 0a 20 20 20 20 2f 2a 0a 20 20  ound;..    /*.  
1140: 20 20 20 2a 20 53 6b 69 6d 20 74 68 72 6f 75 67     * Skim throug
1150: 68 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65 78  h the list of ex
1160: 69 73 74 69 6e 67 20 68 61 6e 64 6c 65 72 73 20  isting handlers 
1170: 74 6f 20 28 61 29 20 63 6f 6d 70 75 74 65 20 74  to (a) compute t
1180: 68 65 0a 20 20 20 20 20 2a 20 6f 76 65 72 61 6c  he.     * overal
1190: 6c 20 65 76 65 6e 74 20 6d 61 73 6b 20 66 6f 72  l event mask for
11a0: 20 74 68 65 20 77 69 6e 64 6f 77 20 28 73 6f 20   the window (so 
11b0: 77 65 20 63 61 6e 20 70 61 73 73 20 74 68 69 73  we can pass this
11c0: 20 6e 65 77 0a 20 20 20 20 20 2a 20 76 61 6c 75   new.     * valu
11d0: 65 20 74 6f 20 74 68 65 20 58 20 73 79 73 74 65  e to the X syste
11e0: 6d 29 20 61 6e 64 20 28 62 29 20 73 65 65 20 69  m) and (b) see i
11f0: 66 20 74 68 65 72 65 27 73 20 61 6c 72 65 61 64  f there's alread
1200: 79 20 61 20 68 61 6e 64 6c 65 72 0a 20 20 20 20  y a handler.    
1210: 20 2a 20 64 65 63 6c 61 72 65 64 20 77 69 74 68   * declared with
1220: 20 74 68 65 20 73 61 6d 65 20 63 61 6c 6c 62 61   the same callba
1230: 63 6b 20 61 6e 64 20 63 6c 69 65 6e 74 44 61 74  ck and clientDat
1240: 61 20 28 69 66 20 73 6f 2c 20 6a 75 73 74 0a 20  a (if so, just. 
1250: 20 20 20 20 2a 20 63 68 61 6e 67 65 20 74 68 65      * change the
1260: 20 6d 61 73 6b 29 2e 20 20 49 66 20 6e 6f 20 65   mask).  If no e
1270: 78 69 73 74 69 6e 67 20 68 61 6e 64 6c 65 72 20  xisting handler 
1280: 6d 61 74 63 68 65 73 2c 20 74 68 65 6e 20 63 72  matches, then cr
1290: 65 61 74 65 0a 20 20 20 20 20 2a 20 61 20 6e 65  eate.     * a ne
12a0: 77 20 68 61 6e 64 6c 65 72 2e 0a 20 20 20 20 20  w handler..     
12b0: 2a 2f 0a 0a 20 20 20 20 66 6f 75 6e 64 20 3d 20  */..    found = 
12c0: 30 3b 0a 20 20 20 20 69 66 20 28 77 69 6e 50 74  0;.    if (winPt
12d0: 72 2d 3e 68 61 6e 64 6c 65 72 4c 69 73 74 20 3d  r->handlerList =
12e0: 3d 20 4e 55 4c 4c 29 20 7b 0a 09 68 61 6e 64 6c  = NULL) {..handl
12f0: 65 72 50 74 72 20 3d 20 28 54 6b 45 76 65 6e 74  erPtr = (TkEvent
1300: 48 61 6e 64 6c 65 72 20 2a 29 20 63 6b 61 6c 6c  Handler *) ckall
1310: 6f 63 28 0a 09 09 28 75 6e 73 69 67 6e 65 64 29  oc(...(unsigned)
1320: 20 73 69 7a 65 6f 66 28 54 6b 45 76 65 6e 74 48   sizeof(TkEventH
1330: 61 6e 64 6c 65 72 29 29 3b 0a 09 77 69 6e 50 74  andler));..winPt
1340: 72 2d 3e 68 61 6e 64 6c 65 72 4c 69 73 74 20 3d  r->handlerList =
1350: 20 68 61 6e 64 6c 65 72 50 74 72 3b 0a 09 67 6f   handlerPtr;..go
1360: 74 6f 20 69 6e 69 74 48 61 6e 64 6c 65 72 3b 0a  to initHandler;.
1370: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 66 6f      } else {..fo
1380: 72 20 28 68 61 6e 64 6c 65 72 50 74 72 20 3d 20  r (handlerPtr = 
1390: 77 69 6e 50 74 72 2d 3e 68 61 6e 64 6c 65 72 4c  winPtr->handlerL
13a0: 69 73 74 3b 20 3b 0a 09 09 68 61 6e 64 6c 65 72  ist; ;...handler
13b0: 50 74 72 20 3d 20 68 61 6e 64 6c 65 72 50 74 72  Ptr = handlerPtr
13c0: 2d 3e 6e 65 78 74 50 74 72 29 20 7b 0a 09 20 20  ->nextPtr) {..  
13d0: 20 20 69 66 20 28 28 68 61 6e 64 6c 65 72 50 74    if ((handlerPt
13e0: 72 2d 3e 70 72 6f 63 20 3d 3d 20 70 72 6f 63 29  r->proc == proc)
13f0: 0a 09 09 20 20 20 20 26 26 20 28 68 61 6e 64 6c  ...    && (handl
1400: 65 72 50 74 72 2d 3e 63 6c 69 65 6e 74 44 61 74  erPtr->clientDat
1410: 61 20 3d 3d 20 63 6c 69 65 6e 74 44 61 74 61 29  a == clientData)
1420: 29 20 7b 0a 09 09 68 61 6e 64 6c 65 72 50 74 72  ) {...handlerPtr
1430: 2d 3e 6d 61 73 6b 20 3d 20 6d 61 73 6b 3b 0a 09  ->mask = mask;..
1440: 09 66 6f 75 6e 64 20 3d 20 31 3b 0a 09 20 20 20  .found = 1;..   
1450: 20 7d 0a 09 20 20 20 20 69 66 20 28 68 61 6e 64   }..    if (hand
1460: 6c 65 72 50 74 72 2d 3e 6e 65 78 74 50 74 72 20  lerPtr->nextPtr 
1470: 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 62 72 65  == NULL) {...bre
1480: 61 6b 3b 0a 09 20 20 20 20 7d 0a 09 7d 0a 20 20  ak;..    }..}.  
1490: 20 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20    }..    /*.    
14a0: 20 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77 20   * Create a new 
14b0: 68 61 6e 64 6c 65 72 20 69 66 20 6e 6f 20 6d 61  handler if no ma
14c0: 74 63 68 69 6e 67 20 6f 6c 64 20 68 61 6e 64 6c  tching old handl
14d0: 65 72 20 77 61 73 20 66 6f 75 6e 64 2e 0a 20 20  er was found..  
14e0: 20 20 20 2a 2f 0a 0a 20 20 20 20 69 66 20 28 21     */..    if (!
14f0: 66 6f 75 6e 64 29 20 7b 0a 09 68 61 6e 64 6c 65  found) {..handle
1500: 72 50 74 72 2d 3e 6e 65 78 74 50 74 72 20 3d 20  rPtr->nextPtr = 
1510: 28 54 6b 45 76 65 6e 74 48 61 6e 64 6c 65 72 20  (TkEventHandler 
1520: 2a 29 0a 09 09 63 6b 61 6c 6c 6f 63 28 73 69 7a  *)...ckalloc(siz
1530: 65 6f 66 28 54 6b 45 76 65 6e 74 48 61 6e 64 6c  eof(TkEventHandl
1540: 65 72 29 29 3b 0a 09 68 61 6e 64 6c 65 72 50 74  er));..handlerPt
1550: 72 20 3d 20 68 61 6e 64 6c 65 72 50 74 72 2d 3e  r = handlerPtr->
1560: 6e 65 78 74 50 74 72 3b 0a 09 69 6e 69 74 48 61  nextPtr;..initHa
1570: 6e 64 6c 65 72 3a 0a 09 68 61 6e 64 6c 65 72 50  ndler:..handlerP
1580: 74 72 2d 3e 6d 61 73 6b 20 3d 20 6d 61 73 6b 3b  tr->mask = mask;
1590: 0a 09 68 61 6e 64 6c 65 72 50 74 72 2d 3e 70 72  ..handlerPtr->pr
15a0: 6f 63 20 3d 20 70 72 6f 63 3b 0a 09 68 61 6e 64  oc = proc;..hand
15b0: 6c 65 72 50 74 72 2d 3e 63 6c 69 65 6e 74 44 61  lerPtr->clientDa
15c0: 74 61 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 3b  ta = clientData;
15d0: 0a 09 68 61 6e 64 6c 65 72 50 74 72 2d 3e 6e 65  ..handlerPtr->ne
15e0: 78 74 50 74 72 20 3d 20 4e 55 4c 4c 3b 0a 20 20  xtPtr = NULL;.  
15f0: 20 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20    }..    /*.    
1600: 20 2a 20 4e 6f 20 6e 65 65 64 20 74 6f 20 63 61   * No need to ca
1610: 6c 6c 20 58 53 65 6c 65 63 74 49 6e 70 75 74 3a  ll XSelectInput:
1620: 20 20 54 6b 20 61 6c 77 61 79 73 20 73 65 6c 65    Tk always sele
1630: 63 74 73 20 6f 6e 20 61 6c 6c 20 65 76 65 6e 74  cts on all event
1640: 73 0a 20 20 20 20 20 2a 20 66 6f 72 20 61 6c 6c  s.     * for all
1650: 20 77 69 6e 64 6f 77 73 20 28 6e 65 65 64 65 64   windows (needed
1660: 20 74 6f 20 73 75 70 70 6f 72 74 20 62 69 6e 64   to support bind
1670: 69 6e 67 73 20 6f 6e 20 63 6c 61 73 73 65 73 20  ings on classes 
1680: 61 6e 64 20 22 61 6c 6c 22 29 2e 0a 20 20 20 20  and "all")..    
1690: 20 2a 2f 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d   */.}.../*. *---
16a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20  -----------. *. 
16e0: 2a 20 54 6b 5f 44 65 6c 65 74 65 45 76 65 6e 74  * Tk_DeleteEvent
16f0: 48 61 6e 64 6c 65 72 20 2d 2d 0a 20 2a 0a 20 2a  Handler --. *. *
1700: 09 44 65 6c 65 74 65 20 61 20 70 72 65 76 69 6f  .Delete a previo
1710: 75 73 6c 79 2d 63 72 65 61 74 65 64 20 68 61 6e  usly-created han
1720: 64 6c 65 72 2e 0a 20 2a 0a 20 2a 20 52 65 73 75  dler.. *. * Resu
1730: 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a  lts:. *.None.. *
1740: 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 73  . * Side effects
1750: 3a 0a 20 2a 09 49 66 20 74 68 65 72 65 20 65 78  :. *.If there ex
1760: 69 73 74 65 64 20 61 20 68 61 6e 64 6c 65 72 20  isted a handler 
1770: 61 73 20 64 65 73 63 72 69 62 65 64 20 62 79 20  as described by 
1780: 74 68 65 0a 20 2a 09 70 61 72 61 6d 65 74 65 72  the. *.parameter
1790: 73 2c 20 74 68 65 20 68 61 6e 64 6c 65 72 20 69  s, the handler i
17a0: 73 20 64 65 6c 65 74 65 64 20 73 6f 20 74 68 61  s deleted so tha
17b0: 74 20 70 72 6f 63 0a 20 2a 09 77 69 6c 6c 20 6e  t proc. *.will n
17c0: 6f 74 20 62 65 20 69 6e 76 6f 6b 65 64 20 61 67  ot be invoked ag
17d0: 61 69 6e 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d  ain.. *. *------
17e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1800: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1810: 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 76 6f  --------. */..vo
1820: 69 64 0a 54 6b 5f 44 65 6c 65 74 65 45 76 65 6e  id.Tk_DeleteEven
1830: 74 48 61 6e 64 6c 65 72 28 74 6f 6b 65 6e 2c 20  tHandler(token, 
1840: 6d 61 73 6b 2c 20 70 72 6f 63 2c 20 63 6c 69 65  mask, proc, clie
1850: 6e 74 44 61 74 61 29 0a 20 20 20 20 54 6b 5f 57  ntData).    Tk_W
1860: 69 6e 64 6f 77 20 74 6f 6b 65 6e 3b 09 09 2f 2a  indow token;../*
1870: 20 53 61 6d 65 20 61 73 20 63 6f 72 72 65 73 70   Same as corresp
1880: 6f 6e 64 69 6e 67 20 61 72 67 75 6d 65 6e 74 73  onding arguments
1890: 20 70 61 73 73 65 64 20 2a 2f 0a 20 20 20 20 75   passed */.    u
18a0: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 6d 61 73  nsigned long mas
18b0: 6b 3b 09 09 2f 2a 20 70 72 65 76 69 6f 75 73 6c  k;../* previousl
18c0: 79 20 74 6f 20 54 6b 5f 43 72 65 61 74 65 45 76  y to Tk_CreateEv
18d0: 65 6e 74 48 61 6e 64 6c 65 72 2e 20 2a 2f 0a 20  entHandler. */. 
18e0: 20 20 20 54 6b 5f 45 76 65 6e 74 50 72 6f 63 20     Tk_EventProc 
18f0: 2a 70 72 6f 63 3b 0a 20 20 20 20 43 6c 69 65 6e  *proc;.    Clien
1900: 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61  tData clientData
1910: 3b 0a 7b 0a 20 20 20 20 72 65 67 69 73 74 65 72  ;.{.    register
1920: 20 54 6b 45 76 65 6e 74 48 61 6e 64 6c 65 72 20   TkEventHandler 
1930: 2a 68 61 6e 64 6c 65 72 50 74 72 3b 0a 20 20 20  *handlerPtr;.   
1940: 20 72 65 67 69 73 74 65 72 20 49 6e 50 72 6f 67   register InProg
1950: 72 65 73 73 20 2a 69 70 50 74 72 3b 0a 20 20 20  ress *ipPtr;.   
1960: 20 54 6b 45 76 65 6e 74 48 61 6e 64 6c 65 72 20   TkEventHandler 
1970: 2a 70 72 65 76 50 74 72 3b 0a 20 20 20 20 72 65  *prevPtr;.    re
1980: 67 69 73 74 65 72 20 54 6b 57 69 6e 64 6f 77 20  gister TkWindow 
1990: 2a 77 69 6e 50 74 72 20 3d 20 28 54 6b 57 69 6e  *winPtr = (TkWin
19a0: 64 6f 77 20 2a 29 20 74 6f 6b 65 6e 3b 0a 0a 20  dow *) token;.. 
19b0: 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20 46 69 6e     /*.     * Fin
19c0: 64 20 74 68 65 20 65 76 65 6e 74 20 68 61 6e 64  d the event hand
19d0: 6c 65 72 20 74 6f 20 62 65 20 64 65 6c 65 74 65  ler to be delete
19e0: 64 2c 20 6f 72 20 72 65 74 75 72 6e 0a 20 20 20  d, or return.   
19f0: 20 20 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20    * immediately 
1a00: 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20 65 78  if it doesn't ex
1a10: 69 73 74 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20 20  ist..     */..  
1a20: 20 20 66 6f 72 20 28 68 61 6e 64 6c 65 72 50 74    for (handlerPt
1a30: 72 20 3d 20 77 69 6e 50 74 72 2d 3e 68 61 6e 64  r = winPtr->hand
1a40: 6c 65 72 4c 69 73 74 2c 20 70 72 65 76 50 74 72  lerList, prevPtr
1a50: 20 3d 20 4e 55 4c 4c 3b 20 3b 0a 09 20 20 20 20   = NULL; ;..    
1a60: 70 72 65 76 50 74 72 20 3d 20 68 61 6e 64 6c 65  prevPtr = handle
1a70: 72 50 74 72 2c 20 68 61 6e 64 6c 65 72 50 74 72  rPtr, handlerPtr
1a80: 20 3d 20 68 61 6e 64 6c 65 72 50 74 72 2d 3e 6e   = handlerPtr->n
1a90: 65 78 74 50 74 72 29 20 7b 0a 09 69 66 20 28 68  extPtr) {..if (h
1aa0: 61 6e 64 6c 65 72 50 74 72 20 3d 3d 20 4e 55 4c  andlerPtr == NUL
1ab0: 4c 29 20 7b 0a 09 20 20 20 20 72 65 74 75 72 6e  L) {..    return
1ac0: 3b 0a 09 7d 0a 09 69 66 20 28 28 68 61 6e 64 6c  ;..}..if ((handl
1ad0: 65 72 50 74 72 2d 3e 6d 61 73 6b 20 3d 3d 20 6d  erPtr->mask == m
1ae0: 61 73 6b 29 20 26 26 20 28 68 61 6e 64 6c 65 72  ask) && (handler
1af0: 50 74 72 2d 3e 70 72 6f 63 20 3d 3d 20 70 72 6f  Ptr->proc == pro
1b00: 63 29 0a 09 09 26 26 20 28 68 61 6e 64 6c 65 72  c)...&& (handler
1b10: 50 74 72 2d 3e 63 6c 69 65 6e 74 44 61 74 61 20  Ptr->clientData 
1b20: 3d 3d 20 63 6c 69 65 6e 74 44 61 74 61 29 29 20  == clientData)) 
1b30: 7b 0a 09 20 20 20 20 62 72 65 61 6b 3b 0a 09 7d  {..    break;..}
1b40: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20  .    }..    /*. 
1b50: 20 20 20 20 2a 20 49 66 20 54 6b 5f 48 61 6e 64      * If Tk_Hand
1b60: 6c 65 45 76 65 6e 74 20 69 73 20 61 62 6f 75 74  leEvent is about
1b70: 20 74 6f 20 70 72 6f 63 65 73 73 20 74 68 69 73   to process this
1b80: 20 68 61 6e 64 6c 65 72 2c 20 74 65 6c 6c 20 69   handler, tell i
1b90: 74 20 74 6f 0a 20 20 20 20 20 2a 20 70 72 6f 63  t to.     * proc
1ba0: 65 73 73 20 74 68 65 20 6e 65 78 74 20 6f 6e 65  ess the next one
1bb0: 20 69 6e 73 74 65 61 64 2e 0a 20 20 20 20 20 2a   instead..     *
1bc0: 2f 0a 0a 20 20 20 20 66 6f 72 20 28 69 70 50 74  /..    for (ipPt
1bd0: 72 20 3d 20 70 65 6e 64 69 6e 67 50 74 72 3b 20  r = pendingPtr; 
1be0: 69 70 50 74 72 20 21 3d 20 4e 55 4c 4c 3b 20 69  ipPtr != NULL; i
1bf0: 70 50 74 72 20 3d 20 69 70 50 74 72 2d 3e 6e 65  pPtr = ipPtr->ne
1c00: 78 74 50 74 72 29 20 7b 0a 09 69 66 20 28 69 70  xtPtr) {..if (ip
1c10: 50 74 72 2d 3e 6e 65 78 74 48 61 6e 64 6c 65 72  Ptr->nextHandler
1c20: 20 3d 3d 20 68 61 6e 64 6c 65 72 50 74 72 29 20   == handlerPtr) 
1c30: 7b 0a 09 20 20 20 20 69 70 50 74 72 2d 3e 6e 65  {..    ipPtr->ne
1c40: 78 74 48 61 6e 64 6c 65 72 20 3d 20 68 61 6e 64  xtHandler = hand
1c50: 6c 65 72 50 74 72 2d 3e 6e 65 78 74 50 74 72 3b  lerPtr->nextPtr;
1c60: 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  ..}.    }..    /
1c70: 2a 0a 20 20 20 20 20 2a 20 46 72 65 65 20 72 65  *.     * Free re
1c80: 73 6f 75 72 63 65 73 20 61 73 73 6f 63 69 61 74  sources associat
1c90: 65 64 20 77 69 74 68 20 74 68 65 20 68 61 6e 64  ed with the hand
1ca0: 6c 65 72 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20 20  ler..     */..  
1cb0: 20 20 69 66 20 28 70 72 65 76 50 74 72 20 3d 3d    if (prevPtr ==
1cc0: 20 4e 55 4c 4c 29 20 7b 0a 09 77 69 6e 50 74 72   NULL) {..winPtr
1cd0: 2d 3e 68 61 6e 64 6c 65 72 4c 69 73 74 20 3d 20  ->handlerList = 
1ce0: 68 61 6e 64 6c 65 72 50 74 72 2d 3e 6e 65 78 74  handlerPtr->next
1cf0: 50 74 72 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20  Ptr;.    } else 
1d00: 7b 0a 09 70 72 65 76 50 74 72 2d 3e 6e 65 78 74  {..prevPtr->next
1d10: 50 74 72 20 3d 20 68 61 6e 64 6c 65 72 50 74 72  Ptr = handlerPtr
1d20: 2d 3e 6e 65 78 74 50 74 72 3b 0a 20 20 20 20 7d  ->nextPtr;.    }
1d30: 0a 20 20 20 20 63 6b 66 72 65 65 28 28 63 68 61  .    ckfree((cha
1d40: 72 20 2a 29 20 68 61 6e 64 6c 65 72 50 74 72 29  r *) handlerPtr)
1d50: 3b 0a 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20  ;...    /*.     
1d60: 2a 20 4e 6f 20 6e 65 65 64 20 74 6f 20 63 61 6c  * No need to cal
1d70: 6c 20 58 53 65 6c 65 63 74 49 6e 70 75 74 3a 20  l XSelectInput: 
1d80: 20 54 6b 20 61 6c 77 61 79 73 20 73 65 6c 65 63   Tk always selec
1d90: 74 73 20 6f 6e 20 61 6c 6c 20 65 76 65 6e 74 73  ts on all events
1da0: 0a 20 20 20 20 20 2a 20 66 6f 72 20 61 6c 6c 20  .     * for all 
1db0: 77 69 6e 64 6f 77 73 20 28 6e 65 65 64 65 64 20  windows (needed 
1dc0: 74 6f 20 73 75 70 70 6f 72 74 20 62 69 6e 64 69  to support bindi
1dd0: 6e 67 73 20 6f 6e 20 63 6c 61 73 73 65 73 20 61  ngs on classes a
1de0: 6e 64 20 22 61 6c 6c 22 29 2e 0a 20 20 20 20 20  nd "all")..     
1df0: 2a 2f 0a 7d 0a 0c 0a 2f 2a 2d 2d 2d 2d 2d 2d 2d  */.}.../*-------
1e00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1e10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1e20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1e30: 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 54 6b  -------. *. * Tk
1e40: 5f 43 72 65 61 74 65 47 65 6e 65 72 69 63 48 61  _CreateGenericHa
1e50: 6e 64 6c 65 72 20 2d 2d 0a 20 2a 0a 20 2a 09 52  ndler --. *. *.R
1e60: 65 67 69 73 74 65 72 20 61 20 70 72 6f 63 65 64  egister a proced
1e70: 75 72 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64  ure to be called
1e80: 20 6f 6e 20 65 61 63 68 20 58 20 65 76 65 6e 74   on each X event
1e90: 2c 20 72 65 67 61 72 64 6c 65 73 73 0a 20 2a 09  , regardless. *.
1ea0: 6f 66 20 64 69 73 70 6c 61 79 20 6f 72 20 77 69  of display or wi
1eb0: 6e 64 6f 77 2e 20 20 47 65 6e 65 72 69 63 20 68  ndow.  Generic h
1ec0: 61 6e 64 6c 65 72 73 20 61 72 65 20 75 73 65 66  andlers are usef
1ed0: 75 6c 20 66 6f 72 20 63 61 70 74 75 72 69 6e 67  ul for capturing
1ee0: 0a 20 2a 09 65 76 65 6e 74 73 20 74 68 61 74 20  . *.events that 
1ef0: 61 72 65 6e 27 74 20 61 73 73 6f 63 69 61 74 65  aren't associate
1f00: 64 20 77 69 74 68 20 77 69 6e 64 6f 77 73 2c 20  d with windows, 
1f10: 6f 72 20 65 76 65 6e 74 73 20 66 6f 72 20 77 69  or events for wi
1f20: 6e 64 6f 77 73 0a 20 2a 09 6e 6f 74 20 6d 61 6e  ndows. *.not man
1f30: 61 67 65 64 20 62 79 20 54 6b 2e 0a 20 2a 0a 20  aged by Tk.. *. 
1f40: 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 4e 6f  * Results:. *.No
1f50: 6e 65 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20 45  ne.. *. * Side E
1f60: 66 66 65 63 74 73 3a 0a 20 2a 09 46 72 6f 6d 20  ffects:. *.From 
1f70: 6e 6f 77 20 6f 6e 2c 20 77 68 65 6e 65 76 65 72  now on, whenever
1f80: 20 61 6e 20 58 20 65 76 65 6e 74 20 69 73 20 67   an X event is g
1f90: 69 76 65 6e 20 74 6f 20 54 6b 5f 48 61 6e 64 6c  iven to Tk_Handl
1fa0: 65 45 76 65 6e 74 2c 0a 20 2a 09 69 6e 76 6f 6b  eEvent,. *.invok
1fb0: 65 20 70 72 6f 63 2c 20 67 69 76 69 6e 67 20 69  e proc, giving i
1fc0: 74 20 63 6c 69 65 6e 74 44 61 74 61 20 61 6e 64  t clientData and
1fd0: 20 74 68 65 20 65 76 65 6e 74 20 61 73 20 61 72   the event as ar
1fe0: 67 75 6d 65 6e 74 73 2e 0a 20 2a 0a 20 2a 2d 2d  guments.. *. *--
1ff0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2000: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2010: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2020: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f  ------------. */
2030: 0a 0a 76 6f 69 64 0a 54 6b 5f 43 72 65 61 74 65  ..void.Tk_Create
2040: 47 65 6e 65 72 69 63 48 61 6e 64 6c 65 72 28 70  GenericHandler(p
2050: 72 6f 63 2c 20 63 6c 69 65 6e 74 44 61 74 61 29  roc, clientData)
2060: 0a 20 20 20 20 20 54 6b 5f 47 65 6e 65 72 69 63  .     Tk_Generic
2070: 50 72 6f 63 20 2a 70 72 6f 63 3b 09 2f 2a 20 50  Proc *proc;./* P
2080: 72 6f 63 65 64 75 72 65 20 74 6f 20 63 61 6c 6c  rocedure to call
2090: 20 6f 6e 20 65 76 65 72 79 20 65 76 65 6e 74 2e   on every event.
20a0: 20 2a 2f 0a 20 20 20 20 20 43 6c 69 65 6e 74 44   */.     ClientD
20b0: 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 3b 09  ata clientData;.
20c0: 2f 2a 20 4f 6e 65 2d 77 6f 72 64 20 76 61 6c 75  /* One-word valu
20d0: 65 20 74 6f 20 70 61 73 73 20 74 6f 20 70 72 6f  e to pass to pro
20e0: 63 2e 20 2a 2f 0a 7b 0a 20 20 20 20 47 65 6e 65  c. */.{.    Gene
20f0: 72 69 63 48 61 6e 64 6c 65 72 20 2a 68 61 6e 64  ricHandler *hand
2100: 6c 65 72 50 74 72 3b 0a 20 20 20 20 0a 20 20 20  lerPtr;.    .   
2110: 20 68 61 6e 64 6c 65 72 50 74 72 20 3d 20 28 47   handlerPtr = (G
2120: 65 6e 65 72 69 63 48 61 6e 64 6c 65 72 20 2a 29  enericHandler *)
2130: 20 63 6b 61 6c 6c 6f 63 20 28 73 69 7a 65 6f 66   ckalloc (sizeof
2140: 20 28 47 65 6e 65 72 69 63 48 61 6e 64 6c 65 72   (GenericHandler
2150: 29 29 3b 0a 20 20 20 20 0a 20 20 20 20 68 61 6e  ));.    .    han
2160: 64 6c 65 72 50 74 72 2d 3e 70 72 6f 63 20 3d 20  dlerPtr->proc = 
2170: 70 72 6f 63 3b 0a 20 20 20 20 68 61 6e 64 6c 65  proc;.    handle
2180: 72 50 74 72 2d 3e 63 6c 69 65 6e 74 44 61 74 61  rPtr->clientData
2190: 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 3b 0a 20   = clientData;. 
21a0: 20 20 20 68 61 6e 64 6c 65 72 50 74 72 2d 3e 64     handlerPtr->d
21b0: 65 6c 65 74 65 46 6c 61 67 20 3d 20 30 3b 0a 20  eleteFlag = 0;. 
21c0: 20 20 20 68 61 6e 64 6c 65 72 50 74 72 2d 3e 6e     handlerPtr->n
21d0: 65 78 74 50 74 72 20 3d 20 4e 55 4c 4c 3b 0a 20  extPtr = NULL;. 
21e0: 20 20 20 69 66 20 28 67 65 6e 65 72 69 63 4c 69     if (genericLi
21f0: 73 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 67  st == NULL) {..g
2200: 65 6e 65 72 69 63 4c 69 73 74 20 3d 20 68 61 6e  enericList = han
2210: 64 6c 65 72 50 74 72 3b 0a 20 20 20 20 7d 20 65  dlerPtr;.    } e
2220: 6c 73 65 20 7b 0a 09 6c 61 73 74 47 65 6e 65 72  lse {..lastGener
2230: 69 63 50 74 72 2d 3e 6e 65 78 74 50 74 72 20 3d  icPtr->nextPtr =
2240: 20 68 61 6e 64 6c 65 72 50 74 72 3b 0a 20 20 20   handlerPtr;.   
2250: 20 7d 0a 20 20 20 20 6c 61 73 74 47 65 6e 65 72   }.    lastGener
2260: 69 63 50 74 72 20 3d 20 68 61 6e 64 6c 65 72 50  icPtr = handlerP
2270: 74 72 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d  tr;.}.../*. *---
2280: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2290: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
22a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
22b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20  -----------. *. 
22c0: 2a 20 54 6b 5f 44 65 6c 65 74 65 47 65 6e 65 72  * Tk_DeleteGener
22d0: 69 63 48 61 6e 64 6c 65 72 20 2d 2d 0a 20 2a 0a  icHandler --. *.
22e0: 20 2a 09 44 65 6c 65 74 65 20 61 20 70 72 65 76   *.Delete a prev
22f0: 69 6f 75 73 6c 79 2d 63 72 65 61 74 65 64 20 67  iously-created g
2300: 65 6e 65 72 69 63 20 68 61 6e 64 6c 65 72 2e 0a  eneric handler..
2310: 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20   *. * Results:. 
2320: 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 20 53 69  *.None.. *. * Si
2330: 64 65 20 45 66 66 65 63 74 73 3a 0a 20 2a 09 49  de Effects:. *.I
2340: 66 20 74 68 65 72 65 20 65 78 69 73 74 65 64 20  f there existed 
2350: 61 20 68 61 6e 64 6c 65 72 20 61 73 20 64 65 73  a handler as des
2360: 63 72 69 62 65 64 20 62 79 20 74 68 65 20 70 61  cribed by the pa
2370: 72 61 6d 65 74 65 72 73 2c 0a 20 2a 09 74 68 61  rameters,. *.tha
2380: 74 20 68 61 6e 64 6c 65 72 20 69 73 20 6c 6f 67  t handler is log
2390: 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 20 73  ically deleted s
23a0: 6f 20 74 68 61 74 20 70 72 6f 63 20 77 69 6c 6c  o that proc will
23b0: 20 6e 6f 74 20 62 65 0a 20 2a 09 69 6e 76 6f 6b   not be. *.invok
23c0: 65 64 20 61 67 61 69 6e 2e 20 20 54 68 65 20 70  ed again.  The p
23d0: 68 79 73 69 63 61 6c 20 64 65 6c 65 74 69 6f 6e  hysical deletion
23e0: 20 68 61 70 70 65 6e 73 20 69 6e 20 74 68 65 20   happens in the 
23f0: 65 76 65 6e 74 0a 20 2a 09 6c 6f 6f 70 20 69 6e  event. *.loop in
2400: 20 54 6b 5f 48 61 6e 64 6c 65 45 76 65 6e 74 2e   Tk_HandleEvent.
2410: 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  . *. *----------
2420: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2430: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2440: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2450: 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 76 6f 69 64 0a 54  ----. */..void.T
2460: 6b 5f 44 65 6c 65 74 65 47 65 6e 65 72 69 63 48  k_DeleteGenericH
2470: 61 6e 64 6c 65 72 28 70 72 6f 63 2c 20 63 6c 69  andler(proc, cli
2480: 65 6e 74 44 61 74 61 29 0a 20 20 20 20 20 54 6b  entData).     Tk
2490: 5f 47 65 6e 65 72 69 63 50 72 6f 63 20 2a 70 72  _GenericProc *pr
24a0: 6f 63 3b 0a 20 20 20 20 20 43 6c 69 65 6e 74 44  oc;.     ClientD
24b0: 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 3b 0a  ata clientData;.
24c0: 7b 0a 20 20 20 20 47 65 6e 65 72 69 63 48 61 6e  {.    GenericHan
24d0: 64 6c 65 72 20 2a 20 68 61 6e 64 6c 65 72 3b 0a  dler * handler;.
24e0: 20 20 20 20 0a 20 20 20 20 66 6f 72 20 28 68 61      .    for (ha
24f0: 6e 64 6c 65 72 20 3d 20 67 65 6e 65 72 69 63 4c  ndler = genericL
2500: 69 73 74 3b 20 68 61 6e 64 6c 65 72 3b 20 68 61  ist; handler; ha
2510: 6e 64 6c 65 72 20 3d 20 68 61 6e 64 6c 65 72 2d  ndler = handler-
2520: 3e 6e 65 78 74 50 74 72 29 20 7b 0a 09 69 66 20  >nextPtr) {..if 
2530: 28 28 68 61 6e 64 6c 65 72 2d 3e 70 72 6f 63 20  ((handler->proc 
2540: 3d 3d 20 70 72 6f 63 29 20 26 26 20 28 68 61 6e  == proc) && (han
2550: 64 6c 65 72 2d 3e 63 6c 69 65 6e 74 44 61 74 61  dler->clientData
2560: 20 3d 3d 20 63 6c 69 65 6e 74 44 61 74 61 29 29   == clientData))
2570: 20 7b 0a 09 20 20 20 20 68 61 6e 64 6c 65 72 2d   {..    handler-
2580: 3e 64 65 6c 65 74 65 46 6c 61 67 20 3d 20 31 3b  >deleteFlag = 1;
2590: 0a 09 7d 0a 20 20 20 20 7d 0a 7d 0a 0c 0a 2f 2a  ..}.    }.}.../*
25a0: 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  . *-------------
25b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
25c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
25d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
25e0: 2d 0a 20 2a 0a 20 2a 20 54 6b 5f 48 61 6e 64 6c  -. *. * Tk_Handl
25f0: 65 45 76 65 6e 74 20 2d 2d 0a 20 2a 0a 20 2a 09  eEvent --. *. *.
2600: 47 69 76 65 6e 20 61 6e 20 65 76 65 6e 74 2c 20  Given an event, 
2610: 69 6e 76 6f 6b 65 20 61 6c 6c 20 74 68 65 20 68  invoke all the h
2620: 61 6e 64 6c 65 72 73 20 74 68 61 74 20 68 61 76  andlers that hav
2630: 65 0a 20 2a 09 62 65 65 6e 20 72 65 67 69 73 74  e. *.been regist
2640: 65 72 65 64 20 66 6f 72 20 74 68 65 20 65 76 65  ered for the eve
2650: 6e 74 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74  nt.. *. * Result
2660: 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20  s:. *.None.. *. 
2670: 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a  * Side effects:.
2680: 20 2a 09 44 65 70 65 6e 64 73 20 6f 6e 20 74 68   *.Depends on th
2690: 65 20 68 61 6e 64 6c 65 72 73 2e 0a 20 2a 0a 20  e handlers.. *. 
26a0: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *---------------
26b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
26c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
26d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
26e0: 20 2a 2f 0a 0a 76 6f 69 64 0a 54 6b 5f 48 61 6e   */..void.Tk_Han
26f0: 64 6c 65 45 76 65 6e 74 28 65 76 65 6e 74 50 74  dleEvent(eventPt
2700: 72 29 0a 20 20 20 20 58 45 76 65 6e 74 20 2a 65  r).    XEvent *e
2710: 76 65 6e 74 50 74 72 3b 09 09 2f 2a 20 45 76 65  ventPtr;../* Eve
2720: 6e 74 20 74 6f 20 64 69 73 70 61 74 63 68 2e 20  nt to dispatch. 
2730: 2a 2f 0a 7b 0a 20 20 20 20 72 65 67 69 73 74 65  */.{.    registe
2740: 72 20 54 6b 45 76 65 6e 74 48 61 6e 64 6c 65 72  r TkEventHandler
2750: 20 2a 68 61 6e 64 6c 65 72 50 74 72 3b 0a 20 20   *handlerPtr;.  
2760: 20 20 72 65 67 69 73 74 65 72 20 47 65 6e 65 72    register Gener
2770: 69 63 48 61 6e 64 6c 65 72 20 2a 67 65 6e 65 72  icHandler *gener
2780: 69 63 50 74 72 3b 0a 20 20 20 20 72 65 67 69 73  icPtr;.    regis
2790: 74 65 72 20 47 65 6e 65 72 69 63 48 61 6e 64 6c  ter GenericHandl
27a0: 65 72 20 2a 67 65 6e 50 72 65 76 50 74 72 3b 0a  er *genPrevPtr;.
27b0: 20 20 20 20 54 6b 57 69 6e 64 6f 77 20 2a 77 69      TkWindow *wi
27c0: 6e 50 74 72 20 3d 20 65 76 65 6e 74 50 74 72 2d  nPtr = eventPtr-
27d0: 3e 77 69 6e 64 6f 77 3b 0a 20 20 20 20 75 6e 73  >window;.    uns
27e0: 69 67 6e 65 64 20 6c 6f 6e 67 20 6d 61 73 6b 20  igned long mask 
27f0: 3d 20 65 76 65 6e 74 4d 61 73 6b 73 5b 65 76 65  = eventMasks[eve
2800: 6e 74 50 74 72 2d 3e 74 79 70 65 5d 3b 0a 20 20  ntPtr->type];.  
2810: 20 20 49 6e 50 72 6f 67 72 65 73 73 20 69 70 3b    InProgress ip;
2820: 0a 20 20 20 20 73 74 61 74 69 63 20 69 6e 74 20  .    static int 
2830: 6c 61 73 74 53 65 72 69 61 6c 20 3d 20 30 3b 0a  lastSerial = 0;.
2840: 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20 41  .    /*.     * A
2850: 73 73 69 67 6e 20 74 68 65 20 65 76 65 6e 74 20  ssign the event 
2860: 73 65 72 69 61 6c 20 6e 75 6d 62 65 72 2e 0a 20  serial number.. 
2870: 20 20 20 20 2a 2f 0a 20 20 20 20 6c 61 73 74 53      */.    lastS
2880: 65 72 69 61 6c 2b 2b 3b 0a 20 20 20 20 65 76 65  erial++;.    eve
2890: 6e 74 50 74 72 2d 3e 73 65 72 69 61 6c 20 3d 20  ntPtr->serial = 
28a0: 6c 61 73 74 53 65 72 69 61 6c 3b 0a 0a 20 20 20  lastSerial;..   
28b0: 20 2f 2a 20 0a 20 20 20 20 20 2a 20 49 6e 76 6f   /* .     * Invo
28c0: 6b 65 20 61 6c 6c 20 74 68 65 20 67 65 6e 65 72  ke all the gener
28d0: 69 63 20 65 76 65 6e 74 20 68 61 6e 64 6c 65 72  ic event handler
28e0: 73 20 28 74 68 6f 73 65 20 74 68 61 74 20 61 72  s (those that ar
28f0: 65 0a 20 20 20 20 20 2a 20 69 6e 76 6f 6b 65 64  e.     * invoked
2900: 20 66 6f 72 20 61 6c 6c 20 65 76 65 6e 74 73 29   for all events)
2910: 2e 20 20 49 66 20 61 20 67 65 6e 65 72 69 63 20  .  If a generic 
2920: 65 76 65 6e 74 20 68 61 6e 64 6c 65 72 20 72 65  event handler re
2930: 70 6f 72 74 73 20 74 68 61 74 0a 20 20 20 20 20  ports that.     
2940: 2a 20 61 6e 20 65 76 65 6e 74 20 69 73 20 66 75  * an event is fu
2950: 6c 6c 79 20 70 72 6f 63 65 73 73 65 64 2c 20 67  lly processed, g
2960: 6f 20 6e 6f 20 66 75 72 74 68 65 72 2e 0a 20 20  o no further..  
2970: 20 20 20 2a 2f 0a 0a 20 20 20 20 66 6f 72 20 28     */..    for (
2980: 67 65 6e 50 72 65 76 50 74 72 20 3d 20 4e 55 4c  genPrevPtr = NUL
2990: 4c 2c 20 67 65 6e 65 72 69 63 50 74 72 20 3d 20  L, genericPtr = 
29a0: 67 65 6e 65 72 69 63 4c 69 73 74 3b 20 20 67 65  genericList;  ge
29b0: 6e 65 72 69 63 50 74 72 20 21 3d 20 4e 55 4c 4c  nericPtr != NULL
29c0: 3b 20 29 20 7b 0a 09 69 66 20 28 67 65 6e 65 72  ; ) {..if (gener
29d0: 69 63 50 74 72 2d 3e 64 65 6c 65 74 65 46 6c 61  icPtr->deleteFla
29e0: 67 29 20 7b 0a 09 20 20 20 20 69 66 20 28 21 67  g) {..    if (!g
29f0: 65 6e 65 72 69 63 48 61 6e 64 6c 65 72 73 41 63  enericHandlersAc
2a00: 74 69 76 65 29 20 7b 0a 09 09 47 65 6e 65 72 69  tive) {...Generi
2a10: 63 48 61 6e 64 6c 65 72 20 2a 74 6d 70 50 74 72  cHandler *tmpPtr
2a20: 3b 0a 0a 09 09 2f 2a 0a 09 09 20 2a 20 54 68 69  ;..../*... * Thi
2a30: 73 20 68 61 6e 64 6c 65 72 20 6e 65 65 64 73 20  s handler needs 
2a40: 74 6f 20 62 65 20 64 65 6c 65 74 65 64 20 61 6e  to be deleted an
2a50: 64 20 74 68 65 72 65 20 61 72 65 20 6e 6f 0a 09  d there are no..
2a60: 09 20 2a 20 63 61 6c 6c 73 20 70 65 6e 64 69 6e  . * calls pendin
2a70: 67 20 74 68 72 6f 75 67 68 20 74 68 65 20 68 61  g through the ha
2a80: 6e 64 6c 65 72 2c 20 73 6f 20 6e 6f 77 20 69 73  ndler, so now is
2a90: 20 61 20 73 61 66 65 0a 09 09 20 2a 20 74 69 6d   a safe... * tim
2aa0: 65 20 74 6f 20 64 65 6c 65 74 65 20 69 74 2e 0a  e to delete it..
2ab0: 09 09 20 2a 2f 0a 0a 09 09 74 6d 70 50 74 72 20  .. */....tmpPtr 
2ac0: 3d 20 67 65 6e 65 72 69 63 50 74 72 2d 3e 6e 65  = genericPtr->ne
2ad0: 78 74 50 74 72 3b 0a 09 09 69 66 20 28 67 65 6e  xtPtr;...if (gen
2ae0: 50 72 65 76 50 74 72 20 3d 3d 20 4e 55 4c 4c 29  PrevPtr == NULL)
2af0: 20 7b 0a 09 09 20 20 20 20 67 65 6e 65 72 69 63   {...    generic
2b00: 4c 69 73 74 20 3d 20 74 6d 70 50 74 72 3b 0a 09  List = tmpPtr;..
2b10: 09 7d 20 65 6c 73 65 20 7b 0a 09 09 20 20 20 20  .} else {...    
2b20: 67 65 6e 50 72 65 76 50 74 72 2d 3e 6e 65 78 74  genPrevPtr->next
2b30: 50 74 72 20 3d 20 74 6d 70 50 74 72 3b 0a 09 09  Ptr = tmpPtr;...
2b40: 7d 0a 09 09 69 66 20 28 74 6d 70 50 74 72 20 3d  }...if (tmpPtr =
2b50: 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 20 20 20 20  = NULL) {...    
2b60: 6c 61 73 74 47 65 6e 65 72 69 63 50 74 72 20 3d  lastGenericPtr =
2b70: 20 67 65 6e 50 72 65 76 50 74 72 3b 0a 09 09 7d   genPrevPtr;...}
2b80: 0a 09 09 28 76 6f 69 64 29 20 63 6b 66 72 65 65  ...(void) ckfree
2b90: 28 28 63 68 61 72 20 2a 29 20 67 65 6e 65 72 69  ((char *) generi
2ba0: 63 50 74 72 29 3b 0a 09 09 67 65 6e 65 72 69 63  cPtr);...generic
2bb0: 50 74 72 20 3d 20 74 6d 70 50 74 72 3b 0a 09 09  Ptr = tmpPtr;...
2bc0: 63 6f 6e 74 69 6e 75 65 3b 0a 09 20 20 20 20 7d  continue;..    }
2bd0: 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20  ..} else {..    
2be0: 69 6e 74 20 64 6f 6e 65 3b 0a 0a 09 20 20 20 20  int done;...    
2bf0: 67 65 6e 65 72 69 63 48 61 6e 64 6c 65 72 73 41  genericHandlersA
2c00: 63 74 69 76 65 2b 2b 3b 0a 09 20 20 20 20 64 6f  ctive++;..    do
2c10: 6e 65 20 3d 20 28 2a 67 65 6e 65 72 69 63 50 74  ne = (*genericPt
2c20: 72 2d 3e 70 72 6f 63 29 28 67 65 6e 65 72 69 63  r->proc)(generic
2c30: 50 74 72 2d 3e 63 6c 69 65 6e 74 44 61 74 61 2c  Ptr->clientData,
2c40: 20 65 76 65 6e 74 50 74 72 29 3b 0a 09 20 20 20   eventPtr);..   
2c50: 20 67 65 6e 65 72 69 63 48 61 6e 64 6c 65 72 73   genericHandlers
2c60: 41 63 74 69 76 65 2d 2d 3b 0a 09 20 20 20 20 69  Active--;..    i
2c70: 66 20 28 64 6f 6e 65 29 20 7b 0a 09 09 72 65 74  f (done) {...ret
2c80: 75 72 6e 3b 0a 09 20 20 20 20 7d 0a 09 7d 0a 09  urn;..    }..}..
2c90: 67 65 6e 50 72 65 76 50 74 72 20 3d 20 67 65 6e  genPrevPtr = gen
2ca0: 65 72 69 63 50 74 72 3b 0a 09 67 65 6e 65 72 69  ericPtr;..generi
2cb0: 63 50 74 72 20 3d 20 67 65 6e 50 72 65 76 50 74  cPtr = genPrevPt
2cc0: 72 2d 3e 6e 65 78 74 50 74 72 3b 0a 20 20 20 20  r->nextPtr;.    
2cd0: 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a  }..    /*.     *
2ce0: 20 54 68 65 72 65 27 73 20 61 20 70 6f 74 65 6e   There's a poten
2cf0: 74 69 61 6c 20 69 6e 74 65 72 61 63 74 69 6f 6e  tial interaction
2d00: 20 68 65 72 65 20 77 69 74 68 20 54 6b 5f 44 65   here with Tk_De
2d10: 6c 65 74 65 45 76 65 6e 74 48 61 6e 64 6c 65 72  leteEventHandler
2d20: 2e 0a 20 20 20 20 20 2a 20 52 65 61 64 20 74 68  ..     * Read th
2d30: 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  e documentation 
2d40: 66 6f 72 20 70 65 6e 64 69 6e 67 50 74 72 2e 0a  for pendingPtr..
2d50: 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 69 70 2e       */..    ip.
2d60: 65 76 65 6e 74 50 74 72 20 3d 20 65 76 65 6e 74  eventPtr = event
2d70: 50 74 72 3b 0a 20 20 20 20 69 70 2e 77 69 6e 50  Ptr;.    ip.winP
2d80: 74 72 20 3d 20 77 69 6e 50 74 72 3b 0a 20 20 20  tr = winPtr;.   
2d90: 20 69 70 2e 6e 65 78 74 48 61 6e 64 6c 65 72 20   ip.nextHandler 
2da0: 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 69 70 2e 6e  = NULL;.    ip.n
2db0: 65 78 74 50 74 72 20 3d 20 70 65 6e 64 69 6e 67  extPtr = pending
2dc0: 50 74 72 3b 0a 20 20 20 20 70 65 6e 64 69 6e 67  Ptr;.    pending
2dd0: 50 74 72 20 3d 20 26 69 70 3b 0a 20 20 20 20 66  Ptr = &ip;.    f
2de0: 6f 72 20 28 68 61 6e 64 6c 65 72 50 74 72 20 3d  or (handlerPtr =
2df0: 20 77 69 6e 50 74 72 2d 3e 68 61 6e 64 6c 65 72   winPtr->handler
2e00: 4c 69 73 74 3b 20 68 61 6e 64 6c 65 72 50 74 72  List; handlerPtr
2e10: 20 21 3d 20 4e 55 4c 4c 3b 20 29 20 7b 0a 09 69   != NULL; ) {..i
2e20: 66 20 28 28 68 61 6e 64 6c 65 72 50 74 72 2d 3e  f ((handlerPtr->
2e30: 6d 61 73 6b 20 26 20 6d 61 73 6b 29 20 21 3d 20  mask & mask) != 
2e40: 30 29 20 7b 0a 09 20 20 20 20 69 70 2e 6e 65 78  0) {..    ip.nex
2e50: 74 48 61 6e 64 6c 65 72 20 3d 20 68 61 6e 64 6c  tHandler = handl
2e60: 65 72 50 74 72 2d 3e 6e 65 78 74 50 74 72 3b 0a  erPtr->nextPtr;.
2e70: 09 20 20 20 20 28 2a 28 68 61 6e 64 6c 65 72 50  .    (*(handlerP
2e80: 74 72 2d 3e 70 72 6f 63 29 29 28 68 61 6e 64 6c  tr->proc))(handl
2e90: 65 72 50 74 72 2d 3e 63 6c 69 65 6e 74 44 61 74  erPtr->clientDat
2ea0: 61 2c 20 65 76 65 6e 74 50 74 72 29 3b 0a 09 20  a, eventPtr);.. 
2eb0: 20 20 20 68 61 6e 64 6c 65 72 50 74 72 20 3d 20     handlerPtr = 
2ec0: 69 70 2e 6e 65 78 74 48 61 6e 64 6c 65 72 3b 0a  ip.nextHandler;.
2ed0: 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 68  .} else {..    h
2ee0: 61 6e 64 6c 65 72 50 74 72 20 3d 20 68 61 6e 64  andlerPtr = hand
2ef0: 6c 65 72 50 74 72 2d 3e 6e 65 78 74 50 74 72 3b  lerPtr->nextPtr;
2f00: 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  ..}.    }..    /
2f10: 2a 0a 20 20 20 20 20 2a 20 50 61 73 73 20 74 68  *.     * Pass th
2f20: 65 20 65 76 65 6e 74 20 74 6f 20 74 68 65 20 22  e event to the "
2f30: 62 69 6e 64 22 20 63 6f 6d 6d 61 6e 64 20 6d 65  bind" command me
2f40: 63 68 61 6e 69 73 6d 2e 0a 20 20 20 20 20 2a 2f  chanism..     */
2f50: 0a 0a 20 20 20 20 69 66 20 28 69 70 2e 77 69 6e  ..    if (ip.win
2f60: 50 74 72 29 20 7b 0a 09 54 6b 42 69 6e 64 45 76  Ptr) {..TkBindEv
2f70: 65 6e 74 50 72 6f 63 28 77 69 6e 50 74 72 2c 20  entProc(winPtr, 
2f80: 65 76 65 6e 74 50 74 72 29 3b 0a 20 20 20 20 7d  eventPtr);.    }
2f90: 0a 20 20 20 20 70 65 6e 64 69 6e 67 50 74 72 20  .    pendingPtr 
2fa0: 3d 20 69 70 2e 6e 65 78 74 50 74 72 3b 0a 7d 0a  = ip.nextPtr;.}.
2fb0: 0c 0a 20 2f 2a 0a 20 20 2a 2d 2d 2d 2d 2d 2d 2d  .. /*.  *-------
2fc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2fd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2fe0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ff0: 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 0a 20 20 2a 20  -------.  *.  * 
3000: 54 6b 5f 44 6f 4f 6e 65 45 76 65 6e 74 20 2d 2d  Tk_DoOneEvent --
3010: 0a 20 20 2a 0a 20 20 2a 20 20 20 20 20 46 6c 75  .  *.  *     Flu
3020: 73 68 65 73 20 64 69 73 70 6c 61 79 73 20 61 6e  shes displays an
3030: 64 20 74 68 65 20 63 61 6c 6c 73 20 54 63 6c 5f  d the calls Tcl_
3040: 44 6f 4f 6e 65 45 76 65 6e 74 2e 0a 20 20 2a 0a  DoOneEvent..  *.
3050: 20 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 20 2a    * Results:.  *
3060: 20 20 20 20 20 53 65 65 20 54 63 6c 5f 44 6f 4f       See Tcl_DoO
3070: 6e 65 45 76 65 6e 74 28 29 2e 0a 20 20 2a 0a 20  neEvent()..  *. 
3080: 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a   * Side effects:
3090: 0a 20 20 2a 20 20 20 20 20 44 69 73 70 6c 61 79  .  *     Display
30a0: 73 20 67 65 74 20 66 6c 75 73 68 65 64 2e 0a 20  s get flushed.. 
30b0: 20 2a 0a 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   *.  *----------
30c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
30d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
30e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
30f0: 2d 2d 2d 2d 0a 20 20 2a 2f 0a 0a 69 6e 74 20 54  ----.  */..int T
3100: 6b 5f 44 6f 4f 6e 65 45 76 65 6e 74 28 69 6e 74  k_DoOneEvent(int
3110: 20 66 6c 61 67 73 29 0a 7b 0a 20 20 20 20 20 20   flags).{.      
3120: 20 69 6e 74 20 72 65 74 76 61 6c 3b 0a 20 20 20   int retval;.   
3130: 20 20 20 20 43 74 6b 5f 44 69 73 70 6c 61 79 46      Ctk_DisplayF
3140: 6c 75 73 68 28 4e 55 4c 4c 29 3b 0a 20 20 20 20  lush(NULL);.    
3150: 20 20 20 72 65 74 76 61 6c 20 3d 20 54 63 6c 5f     retval = Tcl_
3160: 44 6f 4f 6e 65 45 76 65 6e 74 28 66 6c 61 67 73  DoOneEvent(flags
3170: 29 3b 0a 20 20 20 20 20 20 20 43 74 6b 5f 44 69  );.       Ctk_Di
3180: 73 70 6c 61 79 46 6c 75 73 68 28 4e 55 4c 4c 29  splayFlush(NULL)
3190: 3b 0a 0a 20 20 20 20 20 20 20 72 65 74 75 72 6e  ;..       return
31a0: 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a 0c 0a 2f  (retval);.}..../
31b0: 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *. *------------
31c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
31d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
31e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
31f0: 2d 2d 0a 20 2a 0a 20 2a 20 54 6b 5f 4d 61 69 6e  --. *. * Tk_Main
3200: 4c 6f 6f 70 20 2d 2d 0a 20 2a 0a 20 2a 09 43 61  Loop --. *. *.Ca
3210: 6c 6c 20 54 6b 5f 44 6f 4f 6e 65 45 76 65 6e 74  ll Tk_DoOneEvent
3220: 20 6f 76 65 72 20 61 6e 64 20 6f 76 65 72 20 61   over and over a
3230: 67 61 69 6e 20 69 6e 20 61 6e 20 69 6e 66 69 6e  gain in an infin
3240: 69 74 65 0a 20 2a 09 6c 6f 6f 70 20 61 73 20 6c  ite. *.loop as l
3250: 6f 6e 67 20 61 73 20 74 68 65 72 65 20 65 78 69  ong as there exi
3260: 73 74 20 61 6e 79 20 6d 61 69 6e 20 77 69 6e 64  st any main wind
3270: 6f 77 73 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c  ows.. *. * Resul
3280: 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a  ts:. *.None.. *.
3290: 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a   * Side effects:
32a0: 0a 20 2a 09 41 72 62 69 74 72 61 72 79 3b 20 20  . *.Arbitrary;  
32b0: 64 65 70 65 6e 64 73 20 6f 6e 20 68 61 6e 64 6c  depends on handl
32c0: 65 72 73 20 66 6f 72 20 65 76 65 6e 74 73 2e 0a  ers for events..
32d0: 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   *. *-----------
32e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
32f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3310: 2d 2d 2d 0a 20 2a 2f 0a 0a 76 6f 69 64 0a 54 6b  ---. */..void.Tk
3320: 5f 4d 61 69 6e 4c 6f 6f 70 28 29 0a 7b 0a 20 20  _MainLoop().{.  
3330: 20 20 77 68 69 6c 65 20 28 74 6b 5f 4e 75 6d 4d    while (tk_NumM
3340: 61 69 6e 57 69 6e 64 6f 77 73 20 3e 20 30 29 20  ainWindows > 0) 
3350: 7b 0a 09 54 6b 5f 44 6f 4f 6e 65 45 76 65 6e 74  {..Tk_DoOneEvent
3360: 28 30 29 3b 0a 20 20 20 20 7d 0a 7d 0a 0c 0a 2f  (0);.    }.}.../
3370: 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *. *------------
3380: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3390: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
33a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
33b0: 2d 2d 0a 20 2a 0a 20 2a 20 54 6b 45 76 65 6e 74  --. *. * TkEvent
33c0: 44 65 61 64 57 69 6e 64 6f 77 20 2d 2d 0a 20 2a  DeadWindow --. *
33d0: 0a 20 2a 09 54 68 69 73 20 70 72 6f 63 65 64 75  . *.This procedu
33e0: 72 65 20 69 73 20 69 6e 76 6f 6b 65 64 20 77 68  re is invoked wh
33f0: 65 6e 20 69 74 20 69 73 20 64 65 74 65 72 6d 69  en it is determi
3400: 6e 65 64 20 74 68 61 74 0a 20 2a 09 61 20 77 69  ned that. *.a wi
3410: 6e 64 6f 77 20 69 73 20 64 65 61 64 2e 20 20 49  ndow is dead.  I
3420: 74 20 63 6c 65 61 6e 73 20 75 70 20 65 76 65 6e  t cleans up even
3430: 74 2d 72 65 6c 61 74 65 64 20 69 6e 66 6f 72 6d  t-related inform
3440: 61 74 69 6f 6e 0a 20 2a 09 61 62 6f 75 74 20 74  ation. *.about t
3450: 68 65 20 77 69 6e 64 6f 77 2e 0a 20 2a 0a 20 2a  he window.. *. *
3460: 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 4e 6f 6e   Results:. *.Non
3470: 65 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20 65 66  e.. *. * Side ef
3480: 66 65 63 74 73 3a 0a 20 2a 09 56 61 72 69 6f 75  fects:. *.Variou
3490: 73 20 74 68 69 6e 67 73 20 67 65 74 20 63 6c 65  s things get cle
34a0: 61 6e 65 64 20 75 70 20 61 6e 64 20 72 65 63 79  aned up and recy
34b0: 63 6c 65 64 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d  cled.. *. *-----
34c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
34d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
34e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
34f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 76  ---------. */..v
3500: 6f 69 64 0a 54 6b 45 76 65 6e 74 44 65 61 64 57  oid.TkEventDeadW
3510: 69 6e 64 6f 77 28 77 69 6e 50 74 72 29 0a 20 20  indow(winPtr).  
3520: 20 20 54 6b 57 69 6e 64 6f 77 20 2a 77 69 6e 50    TkWindow *winP
3530: 74 72 3b 09 09 2f 2a 20 49 6e 66 6f 72 6d 61 74  tr;../* Informat
3540: 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 77 69  ion about the wi
3550: 6e 64 6f 77 0a 09 09 09 09 20 2a 20 74 68 61 74  ndow..... * that
3560: 20 69 73 20 62 65 69 6e 67 20 64 65 6c 65 74 65   is being delete
3570: 64 2e 20 2a 2f 0a 7b 0a 20 20 20 20 72 65 67 69  d. */.{.    regi
3580: 73 74 65 72 20 54 6b 45 76 65 6e 74 48 61 6e 64  ster TkEventHand
3590: 6c 65 72 20 2a 68 61 6e 64 6c 65 72 50 74 72 3b  ler *handlerPtr;
35a0: 0a 20 20 20 20 72 65 67 69 73 74 65 72 20 49 6e  .    register In
35b0: 50 72 6f 67 72 65 73 73 20 2a 69 70 50 74 72 3b  Progress *ipPtr;
35c0: 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20  ..    /*.     * 
35d0: 57 68 69 6c 65 20 64 65 6c 65 74 69 6e 67 20 61  While deleting a
35e0: 6c 6c 20 74 68 65 20 68 61 6e 64 6c 65 72 73 2c  ll the handlers,
35f0: 20 62 65 20 63 61 72 65 66 75 6c 20 74 6f 20 63   be careful to c
3600: 68 65 63 6b 20 66 6f 72 0a 20 20 20 20 20 2a 20  heck for.     * 
3610: 54 6b 5f 48 61 6e 64 6c 65 45 76 65 6e 74 20 62  Tk_HandleEvent b
3620: 65 69 6e 67 20 61 62 6f 75 74 20 74 6f 20 70 72  eing about to pr
3630: 6f 63 65 73 73 20 6f 6e 65 20 6f 66 20 74 68 65  ocess one of the
3640: 20 64 65 6c 65 74 65 64 0a 20 20 20 20 20 2a 20   deleted.     * 
3650: 68 61 6e 64 6c 65 72 73 2e 20 20 49 66 20 69 74  handlers.  If it
3660: 20 69 73 2c 20 74 65 6c 6c 20 69 74 20 74 6f 20   is, tell it to 
3670: 71 75 69 74 20 28 61 6c 6c 20 6f 66 20 74 68 65  quit (all of the
3680: 20 68 61 6e 64 6c 65 72 73 0a 20 20 20 20 20 2a   handlers.     *
3690: 20 61 72 65 20 62 65 69 6e 67 20 64 65 6c 65 74   are being delet
36a0: 65 64 29 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20 20  ed)..     */..  
36b0: 20 20 77 68 69 6c 65 20 28 77 69 6e 50 74 72 2d    while (winPtr-
36c0: 3e 68 61 6e 64 6c 65 72 4c 69 73 74 20 21 3d 20  >handlerList != 
36d0: 4e 55 4c 4c 29 20 7b 0a 09 68 61 6e 64 6c 65 72  NULL) {..handler
36e0: 50 74 72 20 3d 20 77 69 6e 50 74 72 2d 3e 68 61  Ptr = winPtr->ha
36f0: 6e 64 6c 65 72 4c 69 73 74 3b 0a 09 77 69 6e 50  ndlerList;..winP
3700: 74 72 2d 3e 68 61 6e 64 6c 65 72 4c 69 73 74 20  tr->handlerList 
3710: 3d 20 68 61 6e 64 6c 65 72 50 74 72 2d 3e 6e 65  = handlerPtr->ne
3720: 78 74 50 74 72 3b 0a 09 66 6f 72 20 28 69 70 50  xtPtr;..for (ipP
3730: 74 72 20 3d 20 70 65 6e 64 69 6e 67 50 74 72 3b  tr = pendingPtr;
3740: 20 69 70 50 74 72 20 21 3d 20 4e 55 4c 4c 3b 20   ipPtr != NULL; 
3750: 69 70 50 74 72 20 3d 20 69 70 50 74 72 2d 3e 6e  ipPtr = ipPtr->n
3760: 65 78 74 50 74 72 29 20 7b 0a 09 20 20 20 20 69  extPtr) {..    i
3770: 66 20 28 69 70 50 74 72 2d 3e 6e 65 78 74 48 61  f (ipPtr->nextHa
3780: 6e 64 6c 65 72 20 3d 3d 20 68 61 6e 64 6c 65 72  ndler == handler
3790: 50 74 72 29 20 7b 0a 09 09 69 70 50 74 72 2d 3e  Ptr) {...ipPtr->
37a0: 6e 65 78 74 48 61 6e 64 6c 65 72 20 3d 20 4e 55  nextHandler = NU
37b0: 4c 4c 3b 0a 09 20 20 20 20 7d 0a 09 20 20 20 20  LL;..    }..    
37c0: 69 66 20 28 69 70 50 74 72 2d 3e 77 69 6e 50 74  if (ipPtr->winPt
37d0: 72 20 3d 3d 20 77 69 6e 50 74 72 29 20 7b 0a 09  r == winPtr) {..
37e0: 09 69 70 50 74 72 2d 3e 77 69 6e 50 74 72 20 3d  .ipPtr->winPtr =
37f0: 20 4e 55 4c 4c 3b 0a 09 20 20 20 20 7d 0a 09 7d   NULL;..    }..}
3800: 0a 09 63 6b 66 72 65 65 28 28 63 68 61 72 20 2a  ..ckfree((char *
3810: 29 20 68 61 6e 64 6c 65 72 50 74 72 29 3b 0a 20  ) handlerPtr);. 
3820: 20 20 20 7d 0a 7d 0a                                }.}.