Hex Artifact Content

Artifact 93d8724a2a89725b0d68c88f2ff146811260e075:


0000: 2f 2a 0a 20 2a 20 74 6b 57 69 6e 64 6f 77 2e 63  /*. * tkWindow.c
0010: 20 28 43 54 6b 29 20 2d 2d 0a 20 2a 0a 20 2a 09   (CTk) --. *. *.
0020: 43 54 6b 20 77 69 6e 64 6f 77 20 6d 61 6e 69 70  CTk window manip
0030: 75 6c 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  ulation function
0040: 73 2e 0a 20 2a 0a 20 2a 20 43 6f 70 79 72 69 67  s.. *. * Copyrig
0050: 68 74 20 28 63 29 20 31 39 38 39 2d 31 39 39 34  ht (c) 1989-1994
0060: 20 54 68 65 20 52 65 67 65 6e 74 73 20 6f 66 20   The Regents of 
0070: 74 68 65 20 55 6e 69 76 65 72 73 69 74 79 20 6f  the University o
0080: 66 20 43 61 6c 69 66 6f 72 6e 69 61 2e 0a 20 2a  f California.. *
0090: 20 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 31   Copyright (c) 1
00a0: 39 39 34 2d 31 39 39 35 20 53 75 6e 20 4d 69 63  994-1995 Sun Mic
00b0: 72 6f 73 79 73 74 65 6d 73 2c 20 49 6e 63 2e 0a  rosystems, Inc..
00c0: 20 2a 20 43 6f 70 79 72 69 67 68 74 20 28 63 29   * Copyright (c)
00d0: 20 31 39 39 34 2d 31 39 39 35 20 43 6c 65 76 65   1994-1995 Cleve
00e0: 6c 61 6e 64 20 43 6c 69 6e 69 63 20 46 6f 75 6e  land Clinic Foun
00f0: 64 61 74 69 6f 6e 0a 20 2a 0a 20 2a 20 53 65 65  dation. *. * See
0100: 20 74 68 65 20 66 69 6c 65 20 22 6c 69 63 65 6e   the file "licen
0110: 73 65 2e 74 65 72 6d 73 22 20 66 6f 72 20 69 6e  se.terms" for in
0120: 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20 75 73 61  formation on usa
0130: 67 65 20 61 6e 64 20 72 65 64 69 73 74 72 69 62  ge and redistrib
0140: 75 74 69 6f 6e 0a 20 2a 20 6f 66 20 74 68 69 73  ution. * of this
0150: 20 66 69 6c 65 2c 20 61 6e 64 20 66 6f 72 20 61   file, and for a
0160: 20 44 49 53 43 4c 41 49 4d 45 52 20 4f 46 20 41   DISCLAIMER OF A
0170: 4c 4c 20 57 41 52 52 41 4e 54 49 45 53 2e 0a 20  LL WARRANTIES.. 
0180: 2a 2f 0a 0a 73 74 61 74 69 63 20 63 68 61 72 20  */..static char 
0190: 72 63 73 69 64 5b 5d 20 3d 20 22 40 28 23 29 20  rcsid[] = "@(#) 
01a0: 24 49 64 3a 20 63 74 6b 2e 73 68 61 72 2c 76 20  $Id: ctk.shar,v 
01b0: 31 2e 35 30 20 31 39 39 36 2f 30 31 2f 31 35 20  1.50 1996/01/15 
01c0: 31 34 3a 34 37 3a 31 36 20 61 6e 64 72 65 77 6d  14:47:16 andrewm
01d0: 20 45 78 70 20 61 6e 64 72 65 77 6d 20 24 22 3b   Exp andrewm $";
01e0: 0a 0a 0a 23 69 6e 63 6c 75 64 65 20 22 74 6b 50  ...#include "tkP
01f0: 6f 72 74 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  ort.h".#include 
0200: 22 74 6b 49 6e 74 2e 68 22 0a 23 69 6e 63 6c 75  "tkInt.h".#inclu
0210: 64 65 20 22 70 61 74 63 68 6c 65 76 65 6c 2e 68  de "patchlevel.h
0220: 22 0a 0a 0a 23 64 65 66 69 6e 65 20 48 45 41 44  "...#define HEAD
0230: 5f 43 48 49 4c 44 28 77 69 6e 50 74 72 29 09 28  _CHILD(winPtr).(
0240: 28 54 6b 57 69 6e 64 6f 77 20 2a 29 20 26 28 28  (TkWindow *) &((
0250: 77 69 6e 50 74 72 29 2d 3e 63 68 69 6c 64 4c 69  winPtr)->childLi
0260: 73 74 29 29 0a 23 64 65 66 69 6e 65 20 54 4f 50  st)).#define TOP
0270: 5f 43 48 49 4c 44 28 77 69 6e 50 74 72 29 09 28  _CHILD(winPtr).(
0280: 28 77 69 6e 50 74 72 29 2d 3e 63 68 69 6c 64 4c  (winPtr)->childL
0290: 69 73 74 2e 70 72 69 6f 72 50 74 72 29 0a 23 64  ist.priorPtr).#d
02a0: 65 66 69 6e 65 20 42 4f 54 54 4f 4d 5f 43 48 49  efine BOTTOM_CHI
02b0: 4c 44 28 77 69 6e 50 74 72 29 09 28 28 77 69 6e  LD(winPtr).((win
02c0: 50 74 72 29 2d 3e 63 68 69 6c 64 4c 69 73 74 2e  Ptr)->childList.
02d0: 6e 65 78 74 50 74 72 29 0a 0a 2f 2a 0a 20 2a 20  nextPtr)../*. * 
02e0: 43 6f 75 6e 74 20 6f 66 20 6e 75 6d 62 65 72 20  Count of number 
02f0: 6f 66 20 6d 61 69 6e 20 77 69 6e 64 6f 77 73 20  of main windows 
0300: 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 69  currently open i
0310: 6e 20 74 68 69 73 20 70 72 6f 63 65 73 73 2e 0a  n this process..
0320: 20 2a 2f 0a 0a 69 6e 74 20 74 6b 5f 4e 75 6d 4d   */..int tk_NumM
0330: 61 69 6e 57 69 6e 64 6f 77 73 3b 0a 0a 2f 2a 0a  ainWindows;../*.
0340: 20 2a 20 46 69 72 73 74 20 69 6e 20 6c 69 73 74   * First in list
0350: 20 6f 66 20 61 6c 6c 20 6d 61 69 6e 20 77 69 6e   of all main win
0360: 64 6f 77 73 20 6d 61 6e 61 67 65 64 20 62 79 20  dows managed by 
0370: 74 68 69 73 20 70 72 6f 63 65 73 73 2e 0a 20 2a  this process.. *
0380: 2f 0a 0a 54 6b 4d 61 69 6e 49 6e 66 6f 20 2a 74  /..TkMainInfo *t
0390: 6b 4d 61 69 6e 57 69 6e 64 6f 77 4c 69 73 74 20  kMainWindowList 
03a0: 3d 20 4e 55 4c 4c 3b 0a 0a 2f 2a 0a 20 2a 20 4c  = NULL;../*. * L
03b0: 69 73 74 20 6f 66 20 61 6c 6c 20 64 69 73 70 6c  ist of all displ
03c0: 61 79 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  ays currently in
03d0: 20 75 73 65 2e 0a 20 2a 2f 0a 0a 54 6b 44 69 73   use.. */..TkDis
03e0: 70 6c 61 79 20 2a 74 6b 44 69 73 70 6c 61 79 4c  play *tkDisplayL
03f0: 69 73 74 20 3d 20 4e 55 4c 4c 3b 0a 0a 2f 2a 0a  ist = NULL;../*.
0400: 20 2a 20 48 61 76 65 20 73 74 61 74 69 63 73 20   * Have statics 
0410: 69 6e 20 74 68 69 73 20 6d 6f 64 75 6c 65 20 62  in this module b
0420: 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 3f  een initialized?
0430: 0a 20 2a 2f 0a 0a 73 74 61 74 69 63 20 69 6e 74  . */..static int
0440: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 3d 20 30   initialized = 0
0450: 3b 0a 0a 2f 2a 0a 20 2a 20 54 68 65 20 76 61 72  ;../*. * The var
0460: 69 61 62 6c 65 73 20 62 65 6c 6f 77 20 68 6f 6c  iables below hol
0470: 64 20 73 65 76 65 72 61 6c 20 75 69 64 27 73 20  d several uid's 
0480: 74 68 61 74 20 61 72 65 20 75 73 65 64 20 69 6e  that are used in
0490: 20 6d 61 6e 79 20 70 6c 61 63 65 73 0a 20 2a 20   many places. * 
04a0: 69 6e 20 74 68 65 20 74 6f 6f 6c 6b 69 74 2e 0a  in the toolkit..
04b0: 20 2a 2f 0a 0a 54 6b 5f 55 69 64 20 74 6b 44 69   */..Tk_Uid tkDi
04c0: 73 61 62 6c 65 64 55 69 64 20 3d 20 4e 55 4c 4c  sabledUid = NULL
04d0: 3b 0a 54 6b 5f 55 69 64 20 74 6b 41 63 74 69 76  ;.Tk_Uid tkActiv
04e0: 65 55 69 64 20 3d 20 4e 55 4c 4c 3b 0a 54 6b 5f  eUid = NULL;.Tk_
04f0: 55 69 64 20 74 6b 4e 6f 72 6d 61 6c 55 69 64 20  Uid tkNormalUid 
0500: 3d 20 4e 55 4c 4c 3b 0a 0a 2f 2a 0a 20 2a 20 54  = NULL;../*. * T
0510: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
0520: 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 61  ucture defines a
0530: 6c 6c 20 6f 66 20 74 68 65 20 63 6f 6d 6d 61 6e  ll of the comman
0540: 64 73 20 73 75 70 70 6f 72 74 65 64 20 62 79 0a  ds supported by.
0550: 20 2a 20 43 54 6b 2c 20 61 6e 64 20 74 68 65 20   * CTk, and the 
0560: 43 20 70 72 6f 63 65 64 75 72 65 73 20 74 68 61  C procedures tha
0570: 74 20 65 78 65 63 75 74 65 20 74 68 65 6d 2e 0a  t execute them..
0580: 20 2a 2f 0a 0a 74 79 70 65 64 65 66 20 73 74 72   */..typedef str
0590: 75 63 74 20 7b 0a 20 20 20 20 63 68 61 72 20 2a  uct {.    char *
05a0: 6e 61 6d 65 3b 09 09 09 2f 2a 20 4e 61 6d 65 20  name;.../* Name 
05b0: 6f 66 20 63 6f 6d 6d 61 6e 64 2e 20 2a 2f 0a 20  of command. */. 
05c0: 20 20 20 69 6e 74 20 28 2a 63 6d 64 50 72 6f 63     int (*cmdProc
05d0: 29 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 43  ) _ANSI_ARGS_((C
05e0: 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74  lientData client
05f0: 44 61 74 61 2c 20 54 63 6c 5f 49 6e 74 65 72 70  Data, Tcl_Interp
0600: 20 2a 69 6e 74 65 72 70 2c 0a 09 20 20 20 20 69   *interp,..    i
0610: 6e 74 20 61 72 67 63 2c 20 63 68 61 72 20 2a 2a  nt argc, char **
0620: 61 72 67 76 29 29 3b 0a 09 09 09 09 2f 2a 20 43  argv));...../* C
0630: 6f 6d 6d 61 6e 64 20 70 72 6f 63 65 64 75 72 65  ommand procedure
0640: 2e 20 2a 2f 0a 7d 20 54 6b 43 6d 64 3b 0a 0a 73  . */.} TkCmd;..s
0650: 74 61 74 69 63 20 54 6b 43 6d 64 20 63 6f 6d 6d  tatic TkCmd comm
0660: 61 6e 64 73 5b 5d 20 3d 20 7b 0a 20 20 20 20 2f  ands[] = {.    /
0670: 2a 0a 20 20 20 20 20 2a 20 43 6f 6d 6d 61 6e 64  *.     * Command
0680: 73 20 74 68 61 74 20 61 72 65 20 70 61 72 74 20  s that are part 
0690: 6f 66 20 74 68 65 20 69 6e 74 72 69 6e 73 69 63  of the intrinsic
06a0: 73 3a 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20  s:.     */..    
06b0: 7b 22 62 65 6c 6c 22 2c 09 09 54 6b 5f 42 65 6c  {"bell",..Tk_Bel
06c0: 6c 43 6d 64 7d 2c 0a 20 20 20 20 7b 22 62 69 6e  lCmd},.    {"bin
06d0: 64 22 2c 09 09 54 6b 5f 42 69 6e 64 43 6d 64 7d  d",..Tk_BindCmd}
06e0: 2c 0a 20 20 20 20 7b 22 62 69 6e 64 74 61 67 73  ,.    {"bindtags
06f0: 22 2c 09 54 6b 5f 42 69 6e 64 74 61 67 73 43 6d  ",.Tk_BindtagsCm
0700: 64 7d 2c 0a 20 20 20 20 2f 2a 20 7b 22 63 6c 69  d},.    /* {"cli
0710: 70 62 6f 61 72 64 22 2c 09 09 54 6b 5f 43 6c 69  pboard",..Tk_Cli
0720: 70 62 6f 61 72 64 43 6d 64 7d 2c 20 2a 2f 0a 20  pboardCmd}, */. 
0730: 20 20 20 7b 22 63 74 6b 22 2c 09 09 43 74 6b 5f     {"ctk",..Ctk_
0740: 43 74 6b 43 6d 64 7d 2c 0a 20 20 20 20 7b 22 63  CtkCmd},.    {"c
0750: 74 6b 5f 65 76 65 6e 74 22 2c 09 43 74 6b 5f 43  tk_event",.Ctk_C
0760: 74 6b 45 76 65 6e 74 43 6d 64 7d 2c 0a 20 20 20  tkEventCmd},.   
0770: 20 7b 22 64 65 73 74 72 6f 79 22 2c 09 09 54 6b   {"destroy",..Tk
0780: 5f 44 65 73 74 72 6f 79 43 6d 64 7d 2c 0a 20 20  _DestroyCmd},.  
0790: 20 20 7b 22 65 78 69 74 22 2c 09 09 54 6b 5f 45    {"exit",..Tk_E
07a0: 78 69 74 43 6d 64 7d 2c 0a 20 20 20 20 7b 22 66  xitCmd},.    {"f
07b0: 6f 63 75 73 22 2c 09 09 54 6b 5f 46 6f 63 75 73  ocus",..Tk_Focus
07c0: 43 6d 64 7d 2c 0a 20 20 20 20 2f 2a 20 7b 22 67  Cmd},.    /* {"g
07d0: 72 61 62 22 2c 09 09 54 6b 5f 47 72 61 62 43 6d  rab",..Tk_GrabCm
07e0: 64 7d 2c 20 2a 2f 0a 20 20 20 20 2f 2a 20 7b 22  d}, */.    /* {"
07f0: 69 6d 61 67 65 22 2c 09 09 54 6b 5f 49 6d 61 67  image",..Tk_Imag
0800: 65 43 6d 64 7d 2c 20 2a 2f 0a 20 20 20 20 7b 22  eCmd}, */.    {"
0810: 6c 6f 77 65 72 22 2c 09 09 54 6b 5f 4c 6f 77 65  lower",..Tk_Lowe
0820: 72 43 6d 64 7d 2c 0a 20 20 20 20 7b 22 6f 70 74  rCmd},.    {"opt
0830: 69 6f 6e 22 2c 09 09 54 6b 5f 4f 70 74 69 6f 6e  ion",..Tk_Option
0840: 43 6d 64 7d 2c 0a 20 20 20 20 7b 22 70 61 63 6b  Cmd},.    {"pack
0850: 22 2c 09 09 54 6b 5f 50 61 63 6b 43 6d 64 7d 2c  ",..Tk_PackCmd},
0860: 0a 20 20 20 20 7b 22 70 6c 61 63 65 22 2c 09 09  .    {"place",..
0870: 54 6b 5f 50 6c 61 63 65 43 6d 64 7d 2c 0a 20 20  Tk_PlaceCmd},.  
0880: 20 20 7b 22 72 61 69 73 65 22 2c 09 09 54 6b 5f    {"raise",..Tk_
0890: 52 61 69 73 65 43 6d 64 7d 2c 0a 20 20 20 20 2f  RaiseCmd},.    /
08a0: 2a 20 7b 22 73 65 6c 65 63 74 69 6f 6e 22 2c 09  * {"selection",.
08b0: 54 6b 5f 53 65 6c 65 63 74 69 6f 6e 43 6d 64 7d  Tk_SelectionCmd}
08c0: 2c 20 2a 2f 0a 20 20 20 20 7b 22 74 6b 22 2c 09  , */.    {"tk",.
08d0: 09 54 6b 5f 54 6b 43 6d 64 7d 2c 0a 20 20 20 20  .Tk_TkCmd},.    
08e0: 7b 22 74 6b 5f 66 6f 63 75 73 4e 65 78 74 22 2c  {"tk_focusNext",
08f0: 09 43 74 6b 5f 54 6b 46 6f 63 75 73 4e 65 78 74  .Ctk_TkFocusNext
0900: 43 6d 64 7d 2c 0a 20 20 20 20 7b 22 74 6b 5f 66  Cmd},.    {"tk_f
0910: 6f 63 75 73 50 72 65 76 22 2c 09 43 74 6b 5f 54  ocusPrev",.Ctk_T
0920: 6b 46 6f 63 75 73 50 72 65 76 43 6d 64 7d 2c 0a  kFocusPrevCmd},.
0930: 20 20 20 20 7b 22 74 6b 45 6e 74 72 79 49 6e 73      {"tkEntryIns
0940: 65 72 74 22 2c 20 43 74 6b 5f 54 6b 45 6e 74 72  ert", Ctk_TkEntr
0950: 79 49 6e 73 65 72 74 43 6d 64 7d 2c 0a 20 20 20  yInsertCmd},.   
0960: 20 7b 22 74 6b 45 6e 74 72 79 53 65 65 49 6e 73   {"tkEntrySeeIns
0970: 65 72 74 22 2c 20 43 74 6b 5f 54 6b 45 6e 74 72  ert", Ctk_TkEntr
0980: 79 53 65 65 49 6e 73 65 72 74 43 6d 64 7d 2c 0a  ySeeInsertCmd},.
0990: 20 20 20 20 7b 22 74 6b 77 61 69 74 22 2c 09 09      {"tkwait",..
09a0: 54 6b 5f 54 6b 77 61 69 74 43 6d 64 7d 2c 0a 20  Tk_TkwaitCmd},. 
09b0: 20 20 20 7b 22 75 70 64 61 74 65 22 2c 09 09 54     {"update",..T
09c0: 6b 5f 55 70 64 61 74 65 43 6d 64 7d 2c 0a 20 20  k_UpdateCmd},.  
09d0: 20 20 7b 22 77 69 6e 66 6f 22 2c 09 09 54 6b 5f    {"winfo",..Tk_
09e0: 57 69 6e 66 6f 43 6d 64 7d 2c 0a 20 20 20 20 2f  WinfoCmd},.    /
09f0: 2a 20 7b 22 77 6d 22 2c 09 09 54 6b 5f 57 6d 43  * {"wm",..Tk_WmC
0a00: 6d 64 7d 2c 20 2a 2f 0a 0a 20 20 20 20 2f 2a 0a  md}, */..    /*.
0a10: 20 20 20 20 20 2a 20 57 69 64 67 65 74 2d 63 72       * Widget-cr
0a20: 65 61 74 69 6f 6e 20 63 6f 6d 6d 61 6e 64 73 2e  eation commands.
0a30: 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 7b 22 62  .     */.    {"b
0a40: 75 74 74 6f 6e 22 2c 09 09 54 6b 5f 42 75 74 74  utton",..Tk_Butt
0a50: 6f 6e 43 6d 64 7d 2c 0a 20 20 20 20 2f 2a 20 7b  onCmd},.    /* {
0a60: 22 63 61 6e 76 61 73 22 2c 09 09 54 6b 5f 43 61  "canvas",..Tk_Ca
0a70: 6e 76 61 73 43 6d 64 7d 2c 20 2a 2f 0a 20 20 20  nvasCmd}, */.   
0a80: 20 7b 22 63 68 65 63 6b 62 75 74 74 6f 6e 22 2c   {"checkbutton",
0a90: 09 54 6b 5f 43 68 65 63 6b 62 75 74 74 6f 6e 43  .Tk_CheckbuttonC
0aa0: 6d 64 7d 2c 0a 20 20 20 20 7b 22 65 6e 74 72 79  md},.    {"entry
0ab0: 22 2c 09 09 54 6b 5f 45 6e 74 72 79 43 6d 64 7d  ",..Tk_EntryCmd}
0ac0: 2c 0a 20 20 20 20 7b 22 66 72 61 6d 65 22 2c 09  ,.    {"frame",.
0ad0: 09 54 6b 5f 46 72 61 6d 65 43 6d 64 7d 2c 0a 20  .Tk_FrameCmd},. 
0ae0: 20 20 20 7b 22 6c 61 62 65 6c 22 2c 09 09 54 6b     {"label",..Tk
0af0: 5f 4c 61 62 65 6c 43 6d 64 7d 2c 0a 20 20 20 20  _LabelCmd},.    
0b00: 7b 22 6c 69 73 74 62 6f 78 22 2c 09 09 54 6b 5f  {"listbox",..Tk_
0b10: 4c 69 73 74 62 6f 78 43 6d 64 7d 2c 0a 20 20 20  ListboxCmd},.   
0b20: 20 7b 22 6d 65 6e 75 22 2c 09 09 54 6b 5f 4d 65   {"menu",..Tk_Me
0b30: 6e 75 43 6d 64 7d 2c 0a 20 20 20 20 7b 22 6d 65  nuCmd},.    {"me
0b40: 6e 75 62 75 74 74 6f 6e 22 2c 09 54 6b 5f 4d 65  nubutton",.Tk_Me
0b50: 6e 75 62 75 74 74 6f 6e 43 6d 64 7d 2c 0a 20 20  nubuttonCmd},.  
0b60: 20 20 2f 2a 20 7b 22 6d 65 73 73 61 67 65 22 2c    /* {"message",
0b70: 09 09 54 6b 5f 4d 65 73 73 61 67 65 43 6d 64 7d  ..Tk_MessageCmd}
0b80: 2c 20 2a 2f 0a 20 20 20 20 7b 22 72 61 64 69 6f  , */.    {"radio
0b90: 62 75 74 74 6f 6e 22 2c 09 54 6b 5f 52 61 64 69  button",.Tk_Radi
0ba0: 6f 62 75 74 74 6f 6e 43 6d 64 7d 2c 0a 20 20 20  obuttonCmd},.   
0bb0: 20 2f 2a 20 7b 22 73 63 61 6c 65 22 2c 09 09 54   /* {"scale",..T
0bc0: 6b 5f 53 63 61 6c 65 43 6d 64 7d 2c 20 2a 2f 0a  k_ScaleCmd}, */.
0bd0: 20 20 20 20 7b 22 73 63 72 6f 6c 6c 62 61 72 22      {"scrollbar"
0be0: 2c 09 54 6b 5f 53 63 72 6f 6c 6c 62 61 72 43 6d  ,.Tk_ScrollbarCm
0bf0: 64 7d 2c 0a 20 20 20 20 7b 22 74 65 78 74 22 2c  d},.    {"text",
0c00: 09 09 54 6b 5f 54 65 78 74 43 6d 64 7d 2c 0a 20  ..Tk_TextCmd},. 
0c10: 20 20 20 7b 22 74 6f 70 6c 65 76 65 6c 22 2c 09     {"toplevel",.
0c20: 54 6b 5f 46 72 61 6d 65 43 6d 64 7d 2c 0a 20 20  Tk_FrameCmd},.  
0c30: 20 20 7b 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c    {(char *) NULL
0c40: 2c 09 28 69 6e 74 20 28 2a 29 28 29 29 20 4e 55  ,.(int (*)()) NU
0c50: 4c 4c 7d 0a 7d 3b 0a 0a 2f 2a 0a 20 2a 20 46 6f  LL}.};../*. * Fo
0c60: 72 77 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f  rward declaratio
0c70: 6e 73 20 74 6f 20 70 72 6f 63 65 64 75 72 65 73  ns to procedures
0c80: 20 64 65 66 69 6e 65 64 20 6c 61 74 65 72 20 69   defined later i
0c90: 6e 20 74 68 69 73 20 66 69 6c 65 3a 0a 20 2a 2f  n this file:. */
0ca0: 0a 0a 73 74 61 74 69 63 20 54 6b 44 69 73 70 6c  ..static TkDispl
0cb0: 61 79 20 2a 09 47 65 74 53 63 72 65 65 6e 20 5f  ay *.GetScreen _
0cc0: 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 63 6c 5f  ANSI_ARGS_((Tcl_
0cd0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
0ce0: 09 09 09 20 20 20 20 63 68 61 72 20 2a 73 63 72  ...    char *scr
0cf0: 65 65 6e 4e 61 6d 65 29 29 3b 0a 73 74 61 74 69  eenName));.stati
0d00: 63 20 54 6b 57 69 6e 64 6f 77 20 2a 09 43 72 65  c TkWindow *.Cre
0d10: 61 74 65 52 6f 6f 74 20 5f 41 4e 53 49 5f 41 52  ateRoot _ANSI_AR
0d20: 47 53 5f 28 28 54 63 6c 5f 49 6e 74 65 72 70 20  GS_((Tcl_Interp 
0d30: 2a 69 6e 74 65 72 70 2c 0a 09 09 09 20 20 20 20  *interp,....    
0d40: 54 6b 44 69 73 70 6c 61 79 20 2a 64 69 73 70 50  TkDisplay *dispP
0d50: 74 72 29 29 3b 0a 73 74 61 74 69 63 20 54 6b 57  tr));.static TkW
0d60: 69 6e 64 6f 77 20 2a 09 4e 65 77 57 69 6e 64 6f  indow *.NewWindo
0d70: 77 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 54  w _ANSI_ARGS_((T
0d80: 6b 44 69 73 70 6c 61 79 20 2a 64 69 73 70 50 74  kDisplay *dispPt
0d90: 72 29 29 3b 0a 73 74 61 74 69 63 20 76 6f 69 64  r));.static void
0da0: 09 09 44 69 73 70 6c 61 79 57 69 6e 64 6f 77 20  ..DisplayWindow 
0db0: 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 6b 57  _ANSI_ARGS_((TkW
0dc0: 69 6e 64 6f 77 20 2a 77 69 6e 50 74 72 29 29 3b  indow *winPtr));
0dd0: 0a 73 74 61 74 69 63 20 76 6f 69 64 09 09 55 6e  .static void..Un
0de0: 64 69 73 70 6c 61 79 57 69 6e 64 6f 77 20 5f 41  displayWindow _A
0df0: 4e 53 49 5f 41 52 47 53 5f 28 28 54 6b 57 69 6e  NSI_ARGS_((TkWin
0e00: 64 6f 77 20 2a 77 69 6e 50 74 72 29 29 3b 0a 73  dow *winPtr));.s
0e10: 74 61 74 69 63 20 76 6f 69 64 09 09 49 6e 73 65  tatic void..Inse
0e20: 72 74 57 69 6e 64 6f 77 20 5f 41 4e 53 49 5f 41  rtWindow _ANSI_A
0e30: 52 47 53 5f 28 28 54 6b 57 69 6e 64 6f 77 20 2a  RGS_((TkWindow *
0e40: 77 69 6e 50 74 72 2c 0a 09 09 09 20 20 20 20 54  winPtr,....    T
0e50: 6b 57 69 6e 64 6f 77 20 2a 73 69 62 6c 69 6e 67  kWindow *sibling
0e60: 29 29 3b 0a 73 74 61 74 69 63 20 76 6f 69 64 09  ));.static void.
0e70: 09 55 6e 6c 69 6e 6b 57 69 6e 64 6f 77 20 5f 41  .UnlinkWindow _A
0e80: 4e 53 49 5f 41 52 47 53 5f 28 28 54 6b 57 69 6e  NSI_ARGS_((TkWin
0e90: 64 6f 77 20 2a 77 69 6e 50 74 72 29 29 3b 0a 73  dow *winPtr));.s
0ea0: 74 61 74 69 63 20 76 6f 69 64 09 09 55 6e 6f 76  tatic void..Unov
0eb0: 65 72 6c 61 70 20 5f 41 4e 53 49 5f 41 52 47 53  erlap _ANSI_ARGS
0ec0: 5f 28 28 54 6b 57 69 6e 64 6f 77 20 2a 75 6e 64  _((TkWindow *und
0ed0: 65 72 50 74 72 2c 0a 09 09 09 20 20 20 20 54 6b  erPtr,....    Tk
0ee0: 57 69 6e 64 6f 77 20 2a 6f 76 65 72 50 74 72 29  Window *overPtr)
0ef0: 29 3b 0a 73 74 61 74 69 63 20 76 6f 69 64 09 09  );.static void..
0f00: 55 6e 6f 76 65 72 6c 61 70 48 69 65 72 61 72 63  UnoverlapHierarc
0f10: 68 79 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28  hy _ANSI_ARGS_((
0f20: 54 6b 57 69 6e 64 6f 77 20 2a 75 6e 64 65 72 50  TkWindow *underP
0f30: 74 72 2c 0a 09 09 09 20 20 20 20 54 6b 57 69 6e  tr,....    TkWin
0f40: 64 6f 77 20 2a 20 6f 76 65 72 50 74 72 29 29 3b  dow * overPtr));
0f50: 0a 73 74 61 74 69 63 20 76 6f 69 64 09 09 45 78  .static void..Ex
0f60: 70 6f 73 65 57 69 6e 64 6f 77 20 5f 41 4e 53 49  poseWindow _ANSI
0f70: 5f 41 52 47 53 5f 28 28 54 6b 57 69 6e 64 6f 77  _ARGS_((TkWindow
0f80: 20 2a 77 69 6e 50 74 72 2c 0a 09 09 09 20 20 20   *winPtr,....   
0f90: 20 43 74 6b 52 65 67 69 6f 6e 20 2a 72 67 6e 29   CtkRegion *rgn)
0fa0: 29 3b 0a 73 74 61 74 69 63 20 76 6f 69 64 09 09  );.static void..
0fb0: 43 6f 6d 70 75 74 65 43 6c 69 70 52 65 63 74 20  ComputeClipRect 
0fc0: 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 6b 57  _ANSI_ARGS_((TkW
0fd0: 69 6e 64 6f 77 20 2a 77 69 6e 50 74 72 29 29 3b  indow *winPtr));
0fe0: 0a 0a 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d  ...../*. *------
0ff0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1000: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1010: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1020: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1030: 0a 20 2a 0a 20 2a 20 54 6b 5f 49 6e 69 74 20 2d  . *. * Tk_Init -
1040: 2d 0a 20 2a 0a 20 2a 09 54 68 69 73 20 70 72 6f  -. *. *.This pro
1050: 63 65 64 75 72 65 20 69 73 20 74 79 70 69 63 61  cedure is typica
1060: 6c 6c 79 20 69 6e 76 6f 6b 65 64 20 62 79 20 54  lly invoked by T
1070: 63 6c 5f 41 70 70 49 6e 69 74 20 70 72 6f 63 65  cl_AppInit proce
1080: 64 75 72 65 73 0a 20 2a 09 74 6f 20 70 65 72 66  dures. *.to perf
1090: 6f 72 6d 20 61 64 64 69 74 69 6f 6e 61 6c 20 54  orm additional T
10a0: 6b 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  k initialization
10b0: 20 66 6f 72 20 61 20 54 63 6c 20 69 6e 74 65 72   for a Tcl inter
10c0: 70 72 65 74 65 72 2c 0a 20 2a 09 73 75 63 68 20  preter,. *.such 
10d0: 61 73 20 73 6f 75 72 63 69 6e 67 20 74 68 65 20  as sourcing the 
10e0: 22 63 74 6b 2e 74 63 6c 22 20 73 63 72 69 70 74  "ctk.tcl" script
10f0: 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a  .. *. * Results:
1100: 0a 20 2a 09 52 65 74 75 72 6e 73 20 61 20 73 74  . *.Returns a st
1110: 61 6e 64 61 72 64 20 54 63 6c 20 63 6f 6d 70 6c  andard Tcl compl
1120: 65 74 69 6f 6e 20 63 6f 64 65 20 61 6e 64 20 73  etion code and s
1130: 65 74 73 20 69 6e 74 65 72 70 2d 3e 72 65 73 75  ets interp->resu
1140: 6c 74 0a 20 2a 09 69 66 20 74 68 65 72 65 20 69  lt. *.if there i
1150: 73 20 61 6e 20 65 72 72 6f 72 2e 0a 20 2a 0a 20  s an error.. *. 
1160: 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a  * Side effects:.
1170: 20 2a 09 44 65 70 65 6e 64 73 20 6f 6e 20 77 68   *.Depends on wh
1180: 61 74 27 73 20 69 6e 20 74 68 65 20 63 74 6b 2e  at's in the ctk.
1190: 74 63 6c 20 73 63 72 69 70 74 2e 0a 20 2a 0a 20  tcl script.. *. 
11a0: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *---------------
11b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11e0: 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 69 6e 74  -------. */..int
11f0: 0a 54 6b 5f 49 6e 69 74 28 69 6e 74 65 72 70 29  .Tk_Init(interp)
1200: 0a 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  .    Tcl_Interp 
1210: 2a 69 6e 74 65 72 70 3b 09 09 2f 2a 20 49 6e 74  *interp;../* Int
1220: 65 72 70 72 65 74 65 72 20 74 6f 20 69 6e 69 74  erpreter to init
1230: 69 61 6c 69 7a 65 2e 20 2a 2f 0a 7b 0a 23 69 66  ialize. */.{.#if
1240: 64 65 66 20 55 53 45 5f 54 43 4c 5f 53 54 55 42  def USE_TCL_STUB
1250: 53 0a 20 20 20 20 54 6b 5f 57 69 6e 64 6f 77 20  S.    Tk_Window 
1260: 77 69 6e 50 74 72 3b 0a 23 65 6e 64 69 66 0a 20  winPtr;.#endif. 
1270: 20 20 20 73 74 61 74 69 63 20 63 68 61 72 20 69     static char i
1280: 6e 69 74 43 6d 64 5b 5d 20 3d 0a 09 22 69 66 20  nitCmd[] =.."if 
1290: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 74 6b  [file exists $tk
12a0: 5f 6c 69 62 72 61 72 79 2f 63 74 6b 2e 74 63 6c  _library/ctk.tcl
12b0: 5d 20 7b 5c 6e 5c 0a 09 20 20 20 20 73 6f 75 72  ] {\n\..    sour
12c0: 63 65 20 24 74 6b 5f 6c 69 62 72 61 72 79 2f 63  ce $tk_library/c
12d0: 74 6b 2e 74 63 6c 5c 6e 5c 0a 09 7d 20 65 6c 73  tk.tcl\n\..} els
12e0: 65 20 7b 5c 6e 5c 0a 09 20 20 20 20 73 65 74 20  e {\n\..    set 
12f0: 6d 73 67 20 5c 22 63 61 6e 27 74 20 66 69 6e 64  msg \"can't find
1300: 20 24 74 6b 5f 6c 69 62 72 61 72 79 2f 63 74 6b   $tk_library/ctk
1310: 2e 74 63 6c 3b 20 70 65 72 68 61 70 73 20 79 6f  .tcl; perhaps yo
1320: 75 20 5c 22 5c 6e 5c 0a 09 20 20 20 20 61 70 70  u \"\n\..    app
1330: 65 6e 64 20 6d 73 67 20 5c 22 6e 65 65 64 20 74  end msg \"need t
1340: 6f 5c 5c 6e 69 6e 73 74 61 6c 6c 20 43 54 6b 20  o\\ninstall CTk 
1350: 6f 72 20 73 65 74 20 79 6f 75 72 20 43 54 4b 5f  or set your CTK_
1360: 4c 49 42 52 41 52 59 20 5c 22 5c 6e 5c 0a 09 20  LIBRARY \"\n\.. 
1370: 20 20 20 61 70 70 65 6e 64 20 6d 73 67 20 5c 22     append msg \"
1380: 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69  environment vari
1390: 61 62 6c 65 3f 5c 22 5c 6e 5c 0a 09 20 20 20 20  able?\"\n\..    
13a0: 65 72 72 6f 72 20 24 6d 73 67 5c 6e 5c 0a 09 7d  error $msg\n\..}
13b0: 22 3b 0a 20 20 20 20 69 6e 74 20 72 65 74 76 61  ";.    int retva
13c0: 6c 3b 0a 0a 23 69 66 64 65 66 20 55 53 45 5f 54  l;..#ifdef USE_T
13d0: 43 4c 5f 53 54 55 42 53 0a 20 20 20 20 54 63 6c  CL_STUBS.    Tcl
13e0: 5f 49 6e 69 74 53 74 75 62 73 28 69 6e 74 65 72  _InitStubs(inter
13f0: 70 2c 20 22 38 22 2c 20 30 29 3b 0a 23 65 6e 64  p, "8", 0);.#end
1400: 69 66 0a 0a 23 69 66 64 65 66 20 55 53 45 5f 54  if..#ifdef USE_T
1410: 43 4c 5f 53 54 55 42 53 0a 20 20 20 20 77 69 6e  CL_STUBS.    win
1420: 50 74 72 20 3d 20 54 6b 5f 43 72 65 61 74 65 4d  Ptr = Tk_CreateM
1430: 61 69 6e 57 69 6e 64 6f 77 28 69 6e 74 65 72 70  ainWindow(interp
1440: 2c 20 4e 55 4c 4c 2c 20 22 63 74 6b 22 2c 20 22  , NULL, "ctk", "
1450: 63 74 6b 22 29 3b 0a 20 20 20 20 69 66 20 28 77  ctk");.    if (w
1460: 69 6e 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 20 7b  inPtr == NULL) {
1470: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 28  .        return(
1480: 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 20 20 20 20  TCL_ERROR);.    
1490: 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 72 65  }.#endif..    re
14a0: 74 76 61 6c 20 3d 20 54 63 6c 5f 45 76 61 6c 28  tval = Tcl_Eval(
14b0: 69 6e 74 65 72 70 2c 20 69 6e 69 74 43 6d 64 29  interp, initCmd)
14c0: 3b 0a 20 20 20 20 69 66 20 28 72 65 74 76 61 6c  ;.    if (retval
14d0: 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 20 20   != TCL_OK) {.  
14e0: 20 20 20 20 20 20 72 65 74 75 72 6e 28 72 65 74        return(ret
14f0: 76 61 6c 29 3b 0a 20 20 20 20 7d 0a 0a 23 69 66  val);.    }..#if
1500: 64 65 66 20 55 53 45 5f 54 43 4c 5f 53 54 55 42  def USE_TCL_STUB
1510: 53 0a 20 20 20 20 54 63 6c 5f 53 65 74 4d 61 69  S.    Tcl_SetMai
1520: 6e 4c 6f 6f 70 28 54 6b 5f 4d 61 69 6e 4c 6f 6f  nLoop(Tk_MainLoo
1530: 70 29 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  p);.#endif..    
1540: 72 65 74 75 72 6e 28 72 65 74 76 61 6c 29 3b 0a  return(retval);.
1550: 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d  }.../*. *-------
1560: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1570: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1580: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1590: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
15a0: 20 2a 0a 20 2a 20 47 65 74 53 63 72 65 65 6e 20   *. * GetScreen 
15b0: 2d 2d 0a 20 2a 0a 20 2a 09 47 69 76 65 6e 20 61  --. *. *.Given a
15c0: 20 73 74 72 69 6e 67 20 6e 61 6d 65 20 66 6f 72   string name for
15d0: 20 61 20 74 65 72 6d 69 6e 61 6c 20 64 65 76 69   a terminal devi
15e0: 63 65 2d 70 6c 75 73 2d 74 79 70 65 2c 20 66 69  ce-plus-type, fi
15f0: 6e 64 20 74 68 65 0a 20 2a 09 54 6b 44 69 73 70  nd the. *.TkDisp
1600: 6c 61 79 20 73 74 72 75 63 74 75 72 65 20 66 6f  lay structure fo
1610: 72 20 74 68 65 20 64 69 73 70 6c 61 79 2e 0a 20  r the display.. 
1620: 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a  *. * Results:. *
1630: 09 54 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75  .The return valu
1640: 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  e is a pointer t
1650: 6f 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  o information ab
1660: 6f 75 74 20 74 68 65 20 64 69 73 70 6c 61 79 2c  out the display,
1670: 0a 20 2a 09 6f 72 20 4e 55 4c 4c 20 69 66 20 74  . *.or NULL if t
1680: 68 65 20 64 69 73 70 6c 61 79 20 63 6f 75 6c 64  he display could
1690: 6e 27 74 20 62 65 20 6f 70 65 6e 65 64 2e 20 20  n't be opened.  
16a0: 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 61 6e  In this case, an
16b0: 0a 20 2a 09 65 72 72 6f 72 20 6d 65 73 73 61 67  . *.error messag
16c0: 65 20 69 73 20 6c 65 66 74 20 69 6e 20 69 6e 74  e is left in int
16d0: 65 72 70 2d 3e 72 65 73 75 6c 74 2e 0a 20 2a 0a  erp->result.. *.
16e0: 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a   * Side effects:
16f0: 0a 20 2a 09 41 20 6e 65 77 20 73 74 72 65 61 6d  . *.A new stream
1700: 20 69 73 20 6f 70 65 6e 65 64 20 74 6f 20 74 68   is opened to th
1710: 65 20 64 65 76 69 63 65 20 69 66 20 74 68 65 72  e device if ther
1720: 65 20 69 73 20 6e 6f 0a 20 2a 09 63 6f 6e 6e 65  e is no. *.conne
1730: 63 74 69 6f 6e 20 61 6c 72 65 61 64 79 2e 20 20  ction already.  
1740: 41 20 6e 65 77 20 54 6b 44 69 73 70 6c 61 79 20  A new TkDisplay 
1750: 64 61 74 61 20 73 74 72 75 63 74 75 72 65 20 69  data structure i
1760: 73 20 61 6c 73 6f 0a 20 2a 09 73 65 74 75 70 2c  s also. *.setup,
1770: 20 69 66 20 6e 65 63 65 73 73 61 72 79 2e 0a 20   if necessary.. 
1780: 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *. *------------
1790: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a  ----------. */..
17d0: 73 74 61 74 69 63 20 54 6b 44 69 73 70 6c 61 79  static TkDisplay
17e0: 20 2a 0a 47 65 74 53 63 72 65 65 6e 28 69 6e 74   *.GetScreen(int
17f0: 65 72 70 2c 20 73 63 72 65 65 6e 4e 61 6d 65 29  erp, screenName)
1800: 0a 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  .    Tcl_Interp 
1810: 2a 69 6e 74 65 72 70 3b 09 09 2f 2a 20 50 6c 61  *interp;../* Pla
1820: 63 65 20 74 6f 20 6c 65 61 76 65 20 65 72 72 6f  ce to leave erro
1830: 72 20 6d 65 73 73 61 67 65 2e 20 2a 2f 0a 20 20  r message. */.  
1840: 20 20 63 68 61 72 20 2a 73 63 72 65 65 6e 4e 61    char *screenNa
1850: 6d 65 3b 09 09 2f 2a 20 4e 61 6d 65 20 66 6f 72  me;../* Name for
1860: 20 73 63 72 65 65 6e 2e 20 20 4e 55 4c 4c 20 6f   screen.  NULL o
1870: 72 20 65 6d 70 74 79 20 6d 65 61 6e 73 0a 09 09  r empty means...
1880: 09 09 20 2a 20 75 73 65 20 43 54 4b 5f 44 49 53  .. * use CTK_DIS
1890: 50 4c 41 59 20 65 6e 76 69 72 6f 6e 6d 65 6e 74  PLAY environment
18a0: 20 76 61 72 69 61 62 6c 65 2e 20 2a 2f 0a 7b 0a   variable. */.{.
18b0: 20 20 20 20 72 65 67 69 73 74 65 72 20 54 6b 44      register TkD
18c0: 69 73 70 6c 61 79 20 2a 64 69 73 70 50 74 72 3b  isplay *dispPtr;
18d0: 0a 20 20 20 20 63 68 61 72 20 2a 70 3b 0a 20 20  .    char *p;.  
18e0: 20 20 73 69 7a 65 5f 74 20 6c 65 6e 67 74 68 3b    size_t length;
18f0: 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20  ..    /*.     * 
1900: 53 65 70 61 72 61 74 65 20 74 68 65 20 74 65 72  Separate the ter
1910: 6d 69 6e 61 6c 20 74 79 70 65 20 66 72 6f 6d 20  minal type from 
1920: 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65 20  the rest of the 
1930: 64 69 73 70 6c 61 79 0a 20 20 20 20 20 2a 20 6e  display.     * n
1940: 61 6d 65 2e 20 20 53 63 72 65 65 6e 4e 61 6d 65  ame.  ScreenName
1950: 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 68   is assumed to h
1960: 61 76 65 20 74 68 65 20 73 79 6e 74 61 78 0a 20  ave the syntax. 
1970: 20 20 20 20 2a 20 3c 64 65 76 69 63 65 3e 3a 3c      * <device>:<
1980: 74 79 70 65 3e 20 77 69 74 68 20 74 68 65 20 63  type> with the c
1990: 6f 6c 6f 6e 20 61 6e 64 20 74 68 65 20 74 79 70  olon and the typ
19a0: 65 20 62 65 69 6e 67 0a 20 20 20 20 20 2a 20 6f  e being.     * o
19b0: 70 74 69 6f 6e 61 6c 2e 0a 20 20 20 20 20 2a 2f  ptional..     */
19c0: 0a 0a 20 20 20 20 69 66 20 28 73 63 72 65 65 6e  ..    if (screen
19d0: 4e 61 6d 65 20 3d 3d 20 4e 55 4c 4c 20 7c 7c 20  Name == NULL || 
19e0: 73 63 72 65 65 6e 4e 61 6d 65 5b 30 5d 20 3d 3d  screenName[0] ==
19f0: 20 27 5c 30 27 29 20 7b 0a 09 73 63 72 65 65 6e   '\0') {..screen
1a00: 4e 61 6d 65 20 3d 20 54 63 6c 5f 47 65 74 56 61  Name = Tcl_GetVa
1a10: 72 32 28 69 6e 74 65 72 70 2c 20 22 65 6e 76 22  r2(interp, "env"
1a20: 2c 20 22 43 54 4b 5f 44 49 53 50 4c 41 59 22 2c  , "CTK_DISPLAY",
1a30: 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
1a40: 29 3b 0a 09 69 66 20 28 73 63 72 65 65 6e 4e 61  );..if (screenNa
1a50: 6d 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 20  me == NULL) {.. 
1a60: 20 20 20 2f 2a 0a 09 20 20 20 20 20 2a 20 46 6f     /*..     * Fo
1a70: 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70  r backwards comp
1a80: 61 74 69 62 69 6c 69 74 79 2c 20 63 68 65 63 6b  atibility, check
1a90: 20 43 57 49 53 48 5f 44 49 53 50 4c 41 59 20 2d   CWISH_DISPLAY -
1aa0: 0a 09 20 20 20 20 20 2a 20 74 68 69 73 20 66 65  ..     * this fe
1ab0: 61 74 75 72 65 20 77 69 6c 6c 20 65 76 65 6e 74  ature will event
1ac0: 75 61 6c 6c 79 20 62 65 20 72 65 6d 6f 76 65 64  ually be removed
1ad0: 2e 0a 09 20 20 20 20 20 2a 2f 0a 09 20 20 20 20  ...     */..    
1ae0: 73 63 72 65 65 6e 4e 61 6d 65 20 3d 20 54 63 6c  screenName = Tcl
1af0: 5f 47 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _GetVar2(interp,
1b00: 20 22 65 6e 76 22 2c 20 22 43 57 49 53 48 5f 44   "env", "CWISH_D
1b10: 49 53 50 4c 41 59 22 2c 0a 09 20 20 20 20 09 20  ISPLAY",..    . 
1b20: 20 20 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e     TCL_GLOBAL_ON
1b30: 4c 59 29 3b 0a 09 7d 0a 09 69 66 20 28 73 63 72  LY);..}..if (scr
1b40: 65 65 6e 4e 61 6d 65 20 3d 3d 20 4e 55 4c 4c 29  eenName == NULL)
1b50: 20 7b 0a 09 20 20 20 20 73 63 72 65 65 6e 4e 61   {..    screenNa
1b60: 6d 65 20 3d 20 22 74 74 79 22 3b 0a 09 7d 0a 20  me = "tty";..}. 
1b70: 20 20 20 7d 0a 20 20 20 20 70 20 3d 20 73 74 72     }.    p = str
1b80: 63 68 72 28 73 63 72 65 65 6e 4e 61 6d 65 2c 20  chr(screenName, 
1b90: 27 3a 27 29 3b 0a 20 20 20 20 69 66 20 28 70 20  ':');.    if (p 
1ba0: 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 6c 65 6e 67  == NULL) {..leng
1bb0: 74 68 20 3d 20 73 74 72 6c 65 6e 28 73 63 72 65  th = strlen(scre
1bc0: 65 6e 4e 61 6d 65 29 3b 0a 20 20 20 20 7d 20 65  enName);.    } e
1bd0: 6c 73 65 20 7b 0a 09 6c 65 6e 67 74 68 20 3d 20  lse {..length = 
1be0: 70 20 2d 20 73 63 72 65 65 6e 4e 61 6d 65 3b 0a  p - screenName;.
1bf0: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20      }..    /*.  
1c00: 20 20 20 2a 20 53 65 65 20 69 66 20 77 65 20 61     * See if we a
1c10: 6c 72 65 61 64 79 20 68 61 76 65 20 61 20 63 6f  lready have a co
1c20: 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74 68 69 73  nnection to this
1c30: 20 64 69 73 70 6c 61 79 2e 0a 20 20 20 20 20 2a   display..     *
1c40: 2f 0a 0a 20 20 20 20 66 6f 72 20 28 64 69 73 70  /..    for (disp
1c50: 50 74 72 20 3d 20 74 6b 44 69 73 70 6c 61 79 4c  Ptr = tkDisplayL
1c60: 69 73 74 3b 20 64 69 73 70 50 74 72 20 21 3d 20  ist; dispPtr != 
1c70: 4e 55 4c 4c 3b 20 64 69 73 70 50 74 72 20 3d 20  NULL; dispPtr = 
1c80: 64 69 73 70 50 74 72 2d 3e 6e 65 78 74 50 74 72  dispPtr->nextPtr
1c90: 29 20 7b 0a 09 69 66 20 28 28 73 74 72 6e 63 6d  ) {..if ((strncm
1ca0: 70 28 64 69 73 70 50 74 72 2d 3e 6e 61 6d 65 2c  p(dispPtr->name,
1cb0: 20 73 63 72 65 65 6e 4e 61 6d 65 2c 20 6c 65 6e   screenName, len
1cc0: 67 74 68 29 20 3d 3d 20 30 29 0a 09 09 26 26 20  gth) == 0)...&& 
1cd0: 28 64 69 73 70 50 74 72 2d 3e 6e 61 6d 65 5b 6c  (dispPtr->name[l
1ce0: 65 6e 67 74 68 5d 20 3d 3d 20 27 5c 30 27 29 29  ength] == '\0'))
1cf0: 20 7b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 64   {..    return d
1d00: 69 73 70 50 74 72 3b 0a 09 7d 0a 20 20 20 20 7d  ispPtr;..}.    }
1d10: 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20  ..    /*.     * 
1d20: 43 72 65 61 74 65 20 65 6e 74 72 79 20 66 6f 72  Create entry for
1d30: 20 6e 65 77 20 64 69 73 70 6c 61 79 2e 0a 20 20   new display..  
1d40: 20 20 20 2a 2f 0a 0a 20 20 20 20 64 69 73 70 50     */..    dispP
1d50: 74 72 20 3d 20 28 54 6b 44 69 73 70 6c 61 79 20  tr = (TkDisplay 
1d60: 2a 29 20 63 6b 61 6c 6c 6f 63 28 73 69 7a 65 6f  *) ckalloc(sizeo
1d70: 66 28 54 6b 44 69 73 70 6c 61 79 29 29 3b 0a 20  f(TkDisplay));. 
1d80: 20 20 20 69 66 20 28 43 74 6b 44 69 73 70 6c 61     if (CtkDispla
1d90: 79 49 6e 69 74 28 69 6e 74 65 72 70 2c 20 64 69  yInit(interp, di
1da0: 73 70 50 74 72 2c 20 73 63 72 65 65 6e 4e 61 6d  spPtr, screenNam
1db0: 65 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a  e) != TCL_OK) {.
1dc0: 09 72 65 74 75 72 6e 20 28 54 6b 44 69 73 70 6c  .return (TkDispl
1dd0: 61 79 20 2a 29 20 4e 55 4c 4c 3b 0a 20 20 20 20  ay *) NULL;.    
1de0: 7d 0a 20 20 20 20 64 69 73 70 50 74 72 2d 3e 6e  }.    dispPtr->n
1df0: 75 6d 57 69 6e 64 6f 77 73 20 3d 20 30 3b 0a 20  umWindows = 0;. 
1e00: 20 20 20 64 69 73 70 50 74 72 2d 3e 72 6f 6f 74     dispPtr->root
1e10: 50 74 72 20 3d 20 43 72 65 61 74 65 52 6f 6f 74  Ptr = CreateRoot
1e20: 28 69 6e 74 65 72 70 2c 20 64 69 73 70 50 74 72  (interp, dispPtr
1e30: 29 3b 0a 20 20 20 20 69 66 20 28 64 69 73 70 50  );.    if (dispP
1e40: 74 72 2d 3e 72 6f 6f 74 50 74 72 20 3d 3d 20 4e  tr->rootPtr == N
1e50: 55 4c 4c 29 20 7b 0a 20 20 20 20 09 43 74 6b 44  ULL) {.    .CtkD
1e60: 69 73 70 6c 61 79 45 6e 64 28 64 69 73 70 50 74  isplayEnd(dispPt
1e70: 72 29 3b 0a 09 72 65 74 75 72 6e 20 28 54 6b 44  r);..return (TkD
1e80: 69 73 70 6c 61 79 20 2a 29 20 4e 55 4c 4c 3b 0a  isplay *) NULL;.
1e90: 20 20 20 20 7d 0a 20 20 20 20 64 69 73 70 50 74      }.    dispPt
1ea0: 72 2d 3e 66 6f 63 75 73 50 74 72 20 3d 20 64 69  r->focusPtr = di
1eb0: 73 70 50 74 72 2d 3e 72 6f 6f 74 50 74 72 3b 0a  spPtr->rootPtr;.
1ec0: 20 20 20 20 64 69 73 70 50 74 72 2d 3e 63 75 72      dispPtr->cur
1ed0: 73 6f 72 50 74 72 20 3d 20 64 69 73 70 50 74 72  sorPtr = dispPtr
1ee0: 2d 3e 72 6f 6f 74 50 74 72 3b 0a 20 20 20 20 64  ->rootPtr;.    d
1ef0: 69 73 70 50 74 72 2d 3e 63 75 72 73 6f 72 58 20  ispPtr->cursorX 
1f00: 3d 20 30 3b 0a 20 20 20 20 64 69 73 70 50 74 72  = 0;.    dispPtr
1f10: 2d 3e 63 75 72 73 6f 72 59 20 3d 20 30 3b 0a 20  ->cursorY = 0;. 
1f20: 20 20 20 64 69 73 70 50 74 72 2d 3e 6e 65 78 74     dispPtr->next
1f30: 50 74 72 20 3d 20 74 6b 44 69 73 70 6c 61 79 4c  Ptr = tkDisplayL
1f40: 69 73 74 3b 0a 20 20 20 20 74 6b 44 69 73 70 6c  ist;.    tkDispl
1f50: 61 79 4c 69 73 74 20 3d 20 64 69 73 70 50 74 72  ayList = dispPtr
1f60: 3b 0a 0a 20 20 20 20 72 65 74 75 72 6e 20 64 69  ;..    return di
1f70: 73 70 50 74 72 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a  spPtr;.}.../*. *
1f80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1f90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1fa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1fb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1fc0: 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 54 6b 5f  ------. *. * Tk_
1fd0: 43 72 65 61 74 65 4d 61 69 6e 57 69 6e 64 6f 77  CreateMainWindow
1fe0: 20 2d 2d 0a 20 2a 0a 20 2a 09 4d 61 6b 65 20 61   --. *. *.Make a
1ff0: 20 6e 65 77 20 6d 61 69 6e 20 77 69 6e 64 6f 77   new main window
2000: 2e 20 20 41 20 6d 61 69 6e 20 77 69 6e 64 6f 77  .  A main window
2010: 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 6b 69   is a special ki
2020: 6e 64 20 6f 66 0a 20 2a 09 74 6f 70 2d 6c 65 76  nd of. *.top-lev
2030: 65 6c 20 77 69 6e 64 6f 77 20 75 73 65 64 20 61  el window used a
2040: 73 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20  s the outermost 
2050: 77 69 6e 64 6f 77 20 69 6e 20 61 6e 0a 20 2a 09  window in an. *.
2060: 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0a 20 2a 0a  application.. *.
2070: 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 54   * Results:. *.T
2080: 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20  he return value 
2090: 69 73 20 61 20 74 6f 6b 65 6e 20 66 6f 72 20 74  is a token for t
20a0: 68 65 20 6e 65 77 20 77 69 6e 64 6f 77 2c 20 6f  he new window, o
20b0: 72 20 4e 55 4c 4c 20 69 66 0a 20 2a 09 61 6e 20  r NULL if. *.an 
20c0: 65 72 72 6f 72 20 70 72 65 76 65 6e 74 65 64 20  error prevented 
20d0: 74 68 65 20 6e 65 77 20 77 69 6e 64 6f 77 20 66  the new window f
20e0: 72 6f 6d 20 62 65 69 6e 67 20 63 72 65 61 74 65  rom being create
20f0: 64 2e 20 20 49 66 0a 20 2a 09 4e 55 4c 4c 20 69  d.  If. *.NULL i
2100: 73 20 72 65 74 75 72 6e 65 64 2c 20 61 6e 20 65  s returned, an e
2110: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 77 69 6c  rror message wil
2120: 6c 20 62 65 20 6c 65 66 74 20 69 6e 0a 20 2a 09  l be left in. *.
2130: 69 6e 74 65 72 70 2d 3e 72 65 73 75 6c 74 2e 0a  interp->result..
2140: 20 2a 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63   *. * Side effec
2150: 74 73 3a 0a 20 2a 09 41 20 6e 65 77 20 77 69 6e  ts:. *.A new win
2160: 64 6f 77 20 73 74 72 75 63 74 75 72 65 20 69 73  dow structure is
2170: 20 61 6c 6c 6f 63 61 74 65 64 20 6c 6f 63 61 6c   allocated local
2180: 6c 79 3b 20 20 22 69 6e 74 65 72 70 22 20 69 73  ly;  "interp" is
2190: 0a 20 2a 09 61 73 73 6f 63 69 61 74 65 64 20 77  . *.associated w
21a0: 69 74 68 20 74 68 65 20 77 69 6e 64 6f 77 20 61  ith the window a
21b0: 6e 64 20 72 65 67 69 73 74 65 72 65 64 20 66 6f  nd registered fo
21c0: 72 20 22 73 65 6e 64 22 20 63 6f 6d 6d 61 6e 64  r "send" command
21d0: 73 0a 20 2a 09 75 6e 64 65 72 20 22 62 61 73 65  s. *.under "base
21e0: 4e 61 6d 65 22 2e 20 20 42 61 73 65 4e 61 6d 65  Name".  BaseName
21f0: 20 6d 61 79 20 62 65 20 65 78 74 65 6e 64 65 64   may be extended
2200: 20 77 69 74 68 20 61 6e 20 69 6e 73 74 61 6e 63   with an instanc
2210: 65 0a 20 2a 09 6e 75 6d 62 65 72 20 69 6e 20 74  e. *.number in t
2220: 68 65 20 66 6f 72 6d 20 22 23 32 22 20 69 66 20  he form "#2" if 
2230: 6e 65 63 65 73 73 61 72 79 20 74 6f 20 6d 61 6b  necessary to mak
2240: 65 20 69 74 20 67 6c 6f 62 61 6c 6c 79 0a 20 2a  e it globally. *
2250: 09 75 6e 69 71 75 65 2e 20 20 54 6b 2d 72 65 6c  .unique.  Tk-rel
2260: 61 74 65 64 20 63 6f 6d 6d 61 6e 64 73 20 61 72  ated commands ar
2270: 65 20 62 6f 75 6e 64 20 69 6e 74 6f 20 69 6e 74  e bound into int
2280: 65 72 70 2e 20 20 54 68 65 20 6d 61 69 6e 0a 20  erp.  The main. 
2290: 2a 09 77 69 6e 64 6f 77 20 62 65 63 6f 6d 65 73  *.window becomes
22a0: 20 61 20 22 74 6f 70 6c 65 76 65 6c 22 20 77 69   a "toplevel" wi
22b0: 64 67 65 74 20 61 6e 64 20 69 74 73 20 58 20 77  dget and its X w
22c0: 69 6e 64 6f 77 20 77 69 6c 6c 20 62 65 0a 20 2a  indow will be. *
22d0: 09 63 72 65 61 74 65 64 20 61 6e 64 20 6d 61 70  .created and map
22e0: 70 65 64 20 61 73 20 61 6e 20 69 64 6c 65 20 68  ped as an idle h
22f0: 61 6e 64 6c 65 72 2e 0a 20 2a 0a 20 2a 2d 2d 2d  andler.. *. *---
2300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2310: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2340: 2d 2d 2d 0a 20 2a 2f 0a 0a 54 6b 5f 57 69 6e 64  ---. */..Tk_Wind
2350: 6f 77 0a 54 6b 5f 43 72 65 61 74 65 4d 61 69 6e  ow.Tk_CreateMain
2360: 57 69 6e 64 6f 77 28 69 6e 74 65 72 70 2c 20 73  Window(interp, s
2370: 63 72 65 65 6e 4e 61 6d 65 2c 20 62 61 73 65 4e  creenName, baseN
2380: 61 6d 65 2c 20 63 6c 61 73 73 4e 61 6d 65 29 0a  ame, className).
2390: 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a      Tcl_Interp *
23a0: 69 6e 74 65 72 70 3b 09 09 2f 2a 20 49 6e 74 65  interp;../* Inte
23b0: 72 70 72 65 74 65 72 20 74 6f 20 75 73 65 20 66  rpreter to use f
23c0: 6f 72 20 65 72 72 6f 72 20 72 65 70 6f 72 74 69  or error reporti
23d0: 6e 67 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ng. */.    char 
23e0: 2a 73 63 72 65 65 6e 4e 61 6d 65 3b 09 09 2f 2a  *screenName;../*
23f0: 20 22 64 65 76 69 63 65 3a 74 65 72 6d 2d 74 79   "device:term-ty
2400: 70 65 22 20 6f 6e 20 77 68 69 63 68 20 74 6f 20  pe" on which to 
2410: 63 72 65 61 74 65 0a 09 09 09 09 20 2a 20 77 69  create..... * wi
2420: 6e 64 6f 77 2e 20 20 45 6d 70 74 79 20 6f 72 20  ndow.  Empty or 
2430: 4e 55 4c 4c 20 73 74 72 69 6e 67 20 6d 65 61 6e  NULL string mean
2440: 73 0a 09 09 09 09 20 2a 20 75 73 65 20 73 74 64  s..... * use std
2450: 69 6e 2f 73 74 64 6f 75 74 2e 20 2a 2f 0a 20 20  in/stdout. */.  
2460: 20 20 63 68 61 72 20 2a 62 61 73 65 4e 61 6d 65    char *baseName
2470: 3b 09 09 2f 2a 20 42 61 73 65 20 6e 61 6d 65 20  ;../* Base name 
2480: 66 6f 72 20 61 70 70 6c 69 63 61 74 69 6f 6e 3b  for application;
2490: 20 20 75 73 75 61 6c 6c 79 20 6f 66 20 74 68 65    usually of the
24a0: 0a 09 09 09 09 20 2a 20 66 6f 72 6d 20 22 70 72  ..... * form "pr
24b0: 6f 67 20 69 6e 73 74 61 6e 63 65 22 2e 20 2a 2f  og instance". */
24c0: 0a 20 20 20 20 63 68 61 72 20 2a 63 6c 61 73 73  .    char *class
24d0: 4e 61 6d 65 3b 09 09 2f 2a 20 43 6c 61 73 73 20  Name;../* Class 
24e0: 74 6f 20 75 73 65 20 66 6f 72 20 61 70 70 6c 69  to use for appli
24f0: 63 61 74 69 6f 6e 20 28 73 61 6d 65 20 61 73 20  cation (same as 
2500: 63 6c 61 73 73 0a 09 09 09 09 20 2a 20 66 6f 72  class..... * for
2510: 20 6d 61 69 6e 20 77 69 6e 64 6f 77 29 2e 20 2a   main window). *
2520: 2f 0a 7b 0a 20 20 20 20 69 6e 74 20 64 75 6d 6d  /.{.    int dumm
2530: 79 3b 0a 20 20 20 20 54 63 6c 5f 48 61 73 68 45  y;.    Tcl_HashE
2540: 6e 74 72 79 20 2a 68 50 74 72 3b 0a 20 20 20 20  ntry *hPtr;.    
2550: 72 65 67 69 73 74 65 72 20 54 6b 4d 61 69 6e 49  register TkMainI
2560: 6e 66 6f 20 2a 6d 61 69 6e 50 74 72 3b 0a 20 20  nfo *mainPtr;.  
2570: 20 20 72 65 67 69 73 74 65 72 20 54 6b 57 69 6e    register TkWin
2580: 64 6f 77 20 2a 77 69 6e 50 74 72 3b 0a 20 20 20  dow *winPtr;.   
2590: 20 72 65 67 69 73 74 65 72 20 54 6b 44 69 73 70   register TkDisp
25a0: 6c 61 79 20 2a 64 69 73 70 50 74 72 3b 0a 20 20  lay *dispPtr;.  
25b0: 20 20 72 65 67 69 73 74 65 72 20 54 6b 43 6d 64    register TkCmd
25c0: 20 2a 63 6d 64 50 74 72 3b 0a 20 20 20 20 63 68   *cmdPtr;.    ch
25d0: 61 72 20 2a 6c 69 62 44 69 72 3b 0a 20 20 20 20  ar *libDir;.    
25e0: 63 68 61 72 20 2a 61 72 67 76 5b 31 5d 3b 0a 0a  char *argv[1];..
25f0: 20 20 20 20 69 66 20 28 21 69 6e 69 74 69 61 6c      if (!initial
2600: 69 7a 65 64 29 20 7b 0a 20 20 20 20 09 69 6e 69  ized) {.    .ini
2610: 74 69 61 6c 69 7a 65 64 20 3d 20 31 3b 0a 09 74  tialized = 1;..t
2620: 6b 4e 6f 72 6d 61 6c 55 69 64 20 3d 20 54 6b 5f  kNormalUid = Tk_
2630: 47 65 74 55 69 64 28 22 6e 6f 72 6d 61 6c 22 29  GetUid("normal")
2640: 3b 0a 09 74 6b 44 69 73 61 62 6c 65 64 55 69 64  ;..tkDisabledUid
2650: 20 3d 20 54 6b 5f 47 65 74 55 69 64 28 22 64 69   = Tk_GetUid("di
2660: 73 61 62 6c 65 64 22 29 3b 0a 09 74 6b 41 63 74  sabled");..tkAct
2670: 69 76 65 55 69 64 20 3d 20 54 6b 5f 47 65 74 55  iveUid = Tk_GetU
2680: 69 64 28 22 61 63 74 69 76 65 22 29 3b 0a 20 20  id("active");.  
2690: 20 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20    }..    /*.    
26a0: 20 2a 20 43 72 65 61 74 65 20 74 68 65 20 54 6b   * Create the Tk
26b0: 4d 61 69 6e 49 6e 66 6f 20 73 74 72 75 63 74 75  MainInfo structu
26c0: 72 65 20 66 6f 72 20 74 68 69 73 20 61 70 70 6c  re for this appl
26d0: 69 63 61 74 69 6f 6e 2e 0a 20 20 20 20 20 2a 2f  ication..     */
26e0: 0a 0a 20 20 20 20 6d 61 69 6e 50 74 72 20 3d 20  ..    mainPtr = 
26f0: 28 54 6b 4d 61 69 6e 49 6e 66 6f 20 2a 29 20 63  (TkMainInfo *) c
2700: 6b 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 54 6b  kalloc(sizeof(Tk
2710: 4d 61 69 6e 49 6e 66 6f 29 29 3b 0a 20 20 20 20  MainInfo));.    
2720: 6d 61 69 6e 50 74 72 2d 3e 77 69 6e 50 74 72 20  mainPtr->winPtr 
2730: 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 6d 61 69 6e  = NULL;.    main
2740: 50 74 72 2d 3e 72 65 66 43 6f 75 6e 74 20 3d 20  Ptr->refCount = 
2750: 30 3b 0a 20 20 20 20 6d 61 69 6e 50 74 72 2d 3e  0;.    mainPtr->
2760: 69 6e 74 65 72 70 20 3d 20 69 6e 74 65 72 70 3b  interp = interp;
2770: 0a 20 20 20 20 54 63 6c 5f 49 6e 69 74 48 61 73  .    Tcl_InitHas
2780: 68 54 61 62 6c 65 28 26 6d 61 69 6e 50 74 72 2d  hTable(&mainPtr-
2790: 3e 6e 61 6d 65 54 61 62 6c 65 2c 20 54 43 4c 5f  >nameTable, TCL_
27a0: 53 54 52 49 4e 47 5f 4b 45 59 53 29 3b 0a 20 20  STRING_KEYS);.  
27b0: 20 20 6d 61 69 6e 50 74 72 2d 3e 62 69 6e 64 69    mainPtr->bindi
27c0: 6e 67 54 61 62 6c 65 20 3d 20 54 6b 5f 43 72 65  ngTable = Tk_Cre
27d0: 61 74 65 42 69 6e 64 69 6e 67 54 61 62 6c 65 28  ateBindingTable(
27e0: 69 6e 74 65 72 70 29 3b 0a 20 20 20 20 6d 61 69  interp);.    mai
27f0: 6e 50 74 72 2d 3e 63 75 72 44 69 73 70 50 74 72  nPtr->curDispPtr
2800: 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 6d 61 69   = NULL;.    mai
2810: 6e 50 74 72 2d 3e 62 69 6e 64 69 6e 67 44 65 70  nPtr->bindingDep
2820: 74 68 20 3d 20 30 3b 0a 20 20 20 20 6d 61 69 6e  th = 0;.    main
2830: 50 74 72 2d 3e 6f 70 74 69 6f 6e 52 6f 6f 74 50  Ptr->optionRootP
2840: 74 72 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 6d  tr = NULL;.    m
2850: 61 69 6e 50 74 72 2d 3e 6e 65 78 74 50 74 72 20  ainPtr->nextPtr 
2860: 3d 20 74 6b 4d 61 69 6e 57 69 6e 64 6f 77 4c 69  = tkMainWindowLi
2870: 73 74 3b 0a 20 20 20 20 74 6b 4d 61 69 6e 57 69  st;.    tkMainWi
2880: 6e 64 6f 77 4c 69 73 74 20 3d 20 6d 61 69 6e 50  ndowList = mainP
2890: 74 72 3b 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20  tr;..    /*.    
28a0: 20 2a 20 43 72 65 61 74 65 20 74 68 65 20 62 61   * Create the ba
28b0: 73 69 63 20 54 6b 57 69 6e 64 6f 77 20 73 74 72  sic TkWindow str
28c0: 75 63 74 75 72 65 2e 0a 20 20 20 20 20 2a 0a 20  ucture..     *. 
28d0: 20 20 20 20 2a 20 54 65 6d 70 6f 72 61 72 69 6c      * Temporaril
28e0: 79 20 70 75 74 20 72 6f 6f 74 20 77 69 6e 64 6f  y put root windo
28f0: 77 20 69 6e 74 6f 20 74 68 65 20 61 70 70 6c 69  w into the appli
2900: 63 61 74 69 6f 6e 27 73 20 6e 61 6d 65 20 74 61  cation's name ta
2910: 62 6c 65 0a 20 20 20 20 20 2a 20 61 6e 64 20 73  ble.     * and s
2920: 65 74 20 72 6f 6f 74 20 77 69 6e 64 6f 77 73 20  et root windows 
2930: 6d 61 69 6e 50 74 72 20 74 6f 20 74 68 65 20 6e  mainPtr to the n
2940: 65 77 20 6d 61 69 6e 20 73 74 72 75 63 74 75 72  ew main structur
2950: 65 2c 0a 20 20 20 20 20 2a 20 73 6f 20 74 68 61  e,.     * so tha
2960: 74 20 54 6b 5f 54 6f 70 4c 65 76 65 6c 43 6d 64  t Tk_TopLevelCmd
2970: 28 29 20 77 69 6c 6c 20 75 73 65 20 74 68 65 20  () will use the 
2980: 6e 65 77 20 6d 61 69 6e 20 73 74 72 75 63 74 75  new main structu
2990: 72 65 20 66 6f 72 0a 20 20 20 20 20 2a 20 74 68  re for.     * th
29a0: 65 20 77 69 6e 64 6f 77 20 69 74 20 63 72 65 61  e window it crea
29b0: 74 65 73 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20 20  tes..     */..  
29c0: 20 20 69 66 20 28 73 63 72 65 65 6e 4e 61 6d 65    if (screenName
29d0: 20 3d 3d 20 28 63 68 61 72 20 2a 29 20 4e 55 4c   == (char *) NUL
29e0: 4c 29 20 7b 0a 09 73 63 72 65 65 6e 4e 61 6d 65  L) {..screenName
29f0: 20 3d 20 22 22 3b 0a 20 20 20 20 7d 0a 20 20 20   = "";.    }.   
2a00: 20 64 69 73 70 50 74 72 20 3d 20 47 65 74 53 63   dispPtr = GetSc
2a10: 72 65 65 6e 28 69 6e 74 65 72 70 2c 20 73 63 72  reen(interp, scr
2a20: 65 65 6e 4e 61 6d 65 29 3b 0a 20 20 20 20 69 66  eenName);.    if
2a30: 20 28 64 69 73 70 50 74 72 20 3d 3d 20 4e 55 4c   (dispPtr == NUL
2a40: 4c 29 20 7b 0a 09 72 65 74 75 72 6e 20 28 54 6b  L) {..return (Tk
2a50: 5f 57 69 6e 64 6f 77 29 20 4e 55 4c 4c 3b 0a 20  _Window) NULL;. 
2a60: 20 20 20 7d 0a 20 20 20 20 64 69 73 70 50 74 72     }.    dispPtr
2a70: 2d 3e 72 6f 6f 74 50 74 72 2d 3e 6d 61 69 6e 50  ->rootPtr->mainP
2a80: 74 72 20 3d 20 6d 61 69 6e 50 74 72 3b 0a 20 20  tr = mainPtr;.  
2a90: 20 20 68 50 74 72 20 3d 20 54 63 6c 5f 43 72 65    hPtr = Tcl_Cre
2aa0: 61 74 65 48 61 73 68 45 6e 74 72 79 28 26 6d 61  ateHashEntry(&ma
2ab0: 69 6e 50 74 72 2d 3e 6e 61 6d 65 54 61 62 6c 65  inPtr->nameTable
2ac0: 2c 20 22 22 2c 20 26 64 75 6d 6d 79 29 3b 0a 20  , "", &dummy);. 
2ad0: 20 20 20 54 63 6c 5f 53 65 74 48 61 73 68 56 61     Tcl_SetHashVa
2ae0: 6c 75 65 28 68 50 74 72 2c 20 64 69 73 70 50 74  lue(hPtr, dispPt
2af0: 72 2d 3e 72 6f 6f 74 50 74 72 29 3b 0a 20 20 20  r->rootPtr);.   
2b00: 20 77 69 6e 50 74 72 20 3d 20 54 6b 5f 43 72 65   winPtr = Tk_Cre
2b10: 61 74 65 57 69 6e 64 6f 77 46 72 6f 6d 50 61 74  ateWindowFromPat
2b20: 68 28 69 6e 74 65 72 70 2c 20 64 69 73 70 50 74  h(interp, dispPt
2b30: 72 2d 3e 72 6f 6f 74 50 74 72 2c 20 22 2e 22 2c  r->rootPtr, ".",
2b40: 20 73 63 72 65 65 6e 4e 61 6d 65 29 3b 0a 20 20   screenName);.  
2b50: 20 20 54 63 6c 5f 44 65 6c 65 74 65 48 61 73 68    Tcl_DeleteHash
2b60: 45 6e 74 72 79 28 68 50 74 72 29 3b 0a 20 20 20  Entry(hPtr);.   
2b70: 20 64 69 73 70 50 74 72 2d 3e 72 6f 6f 74 50 74   dispPtr->rootPt
2b80: 72 2d 3e 6d 61 69 6e 50 74 72 20 3d 20 4e 55 4c  r->mainPtr = NUL
2b90: 4c 3b 0a 20 20 20 20 69 66 20 28 77 69 6e 50 74  L;.    if (winPt
2ba0: 72 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 72 65  r == NULL) {..re
2bb0: 74 75 72 6e 20 28 54 6b 5f 57 69 6e 64 6f 77 29  turn (Tk_Window)
2bc0: 20 4e 55 4c 4c 3b 0a 20 20 20 20 7d 0a 20 20 20   NULL;.    }.   
2bd0: 20 6d 61 69 6e 50 74 72 2d 3e 77 69 6e 50 74 72   mainPtr->winPtr
2be0: 20 3d 20 77 69 6e 50 74 72 3b 0a 0a 20 20 20 20   = winPtr;..    
2bf0: 2f 2a 0a 20 20 20 20 20 2a 20 42 69 6e 64 20 69  /*.     * Bind i
2c00: 6e 20 54 6b 27 73 20 63 6f 6d 6d 61 6e 64 73 2e  n Tk's commands.
2c10: 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 66 6f  .     */..    fo
2c20: 72 20 28 63 6d 64 50 74 72 20 3d 20 63 6f 6d 6d  r (cmdPtr = comm
2c30: 61 6e 64 73 3b 20 63 6d 64 50 74 72 2d 3e 6e 61  ands; cmdPtr->na
2c40: 6d 65 20 21 3d 20 4e 55 4c 4c 3b 20 63 6d 64 50  me != NULL; cmdP
2c50: 74 72 2b 2b 29 20 7b 0a 09 54 63 6c 5f 43 72 65  tr++) {..Tcl_Cre
2c60: 61 74 65 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72  ateCommand(inter
2c70: 70 2c 20 63 6d 64 50 74 72 2d 3e 6e 61 6d 65 2c  p, cmdPtr->name,
2c80: 20 63 6d 64 50 74 72 2d 3e 63 6d 64 50 72 6f 63   cmdPtr->cmdProc
2c90: 2c 0a 09 09 28 43 6c 69 65 6e 74 44 61 74 61 29  ,...(ClientData)
2ca0: 20 77 69 6e 50 74 72 2c 20 28 76 6f 69 64 20 28   winPtr, (void (
2cb0: 2a 29 28 29 29 20 4e 55 4c 4c 29 3b 0a 20 20 20  *)()) NULL);.   
2cc0: 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20   }..    /*.     
2cd0: 2a 20 53 65 74 20 76 61 72 69 61 62 6c 65 73 20  * Set variables 
2ce0: 66 6f 72 20 74 68 65 20 69 6e 74 65 70 72 65 74  for the intepret
2cf0: 65 72 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20  er..     */..   
2d00: 20 69 66 20 28 54 63 6c 5f 47 65 74 56 61 72 28   if (Tcl_GetVar(
2d10: 69 6e 74 65 72 70 2c 20 22 74 6b 5f 6c 69 62 72  interp, "tk_libr
2d20: 61 72 79 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c  ary", TCL_GLOBAL
2d30: 5f 4f 4e 4c 59 29 20 3d 3d 20 4e 55 4c 4c 29 20  _ONLY) == NULL) 
2d40: 7b 0a 09 2f 2a 0a 09 20 2a 20 41 20 6c 69 62 72  {../*.. * A libr
2d50: 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 68 61  ary directory ha
2d60: 73 6e 27 74 20 61 6c 72 65 61 64 79 20 62 65 65  sn't already bee
2d70: 6e 20 73 65 74 2c 20 73 6f 20 66 69 67 75 72 65  n set, so figure
2d80: 20 6f 75 74 0a 09 20 2a 20 77 68 69 63 68 20 6f   out.. * which o
2d90: 6e 65 20 74 6f 20 75 73 65 2e 0a 09 20 2a 2f 0a  ne to use... */.
2da0: 0a 09 6c 69 62 44 69 72 20 3d 20 67 65 74 65 6e  ..libDir = geten
2db0: 76 28 22 43 54 4b 5f 4c 49 42 52 41 52 59 22 29  v("CTK_LIBRARY")
2dc0: 3b 0a 09 69 66 20 28 6c 69 62 44 69 72 20 3d 3d  ;..if (libDir ==
2dd0: 20 4e 55 4c 4c 29 20 7b 0a 09 20 20 20 20 6c 69   NULL) {..    li
2de0: 62 44 69 72 20 3d 20 43 54 4b 5f 4c 49 42 52 41  bDir = CTK_LIBRA
2df0: 52 59 3b 0a 09 7d 0a 09 54 63 6c 5f 53 65 74 56  RY;..}..Tcl_SetV
2e00: 61 72 28 69 6e 74 65 72 70 2c 20 22 74 6b 5f 6c  ar(interp, "tk_l
2e10: 69 62 72 61 72 79 22 2c 20 6c 69 62 44 69 72 2c  ibrary", libDir,
2e20: 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
2e30: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 54 63 6c  );.    }.    Tcl
2e40: 5f 53 65 74 56 61 72 28 69 6e 74 65 72 70 2c 20  _SetVar(interp, 
2e50: 22 63 74 6b 5f 70 61 74 63 68 4c 65 76 65 6c 22  "ctk_patchLevel"
2e60: 2c 20 43 54 4b 5f 50 41 54 43 48 5f 4c 45 56 45  , CTK_PATCH_LEVE
2e70: 4c 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  L, TCL_GLOBAL_ON
2e80: 4c 59 29 3b 0a 20 20 20 20 54 63 6c 5f 53 65 74  LY);.    Tcl_Set
2e90: 56 61 72 28 69 6e 74 65 72 70 2c 20 22 74 6b 5f  Var(interp, "tk_
2ea0: 76 65 72 73 69 6f 6e 22 2c 20 54 4b 5f 56 45 52  version", TK_VER
2eb0: 53 49 4f 4e 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c  SION, TCL_GLOBAL
2ec0: 5f 4f 4e 4c 59 29 3b 0a 20 20 20 20 54 63 6c 5f  _ONLY);.    Tcl_
2ed0: 53 65 74 56 61 72 28 69 6e 74 65 72 70 2c 20 22  SetVar(interp, "
2ee0: 74 6b 5f 70 6f 72 74 22 2c 20 22 63 75 72 73 65  tk_port", "curse
2ef0: 73 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  s", TCL_GLOBAL_O
2f00: 4e 4c 59 29 3b 0a 0a 20 20 20 20 2f 2a 0a 20 20  NLY);..    /*.  
2f10: 20 20 20 2a 20 4d 61 6b 65 20 74 68 65 20 6d 61     * Make the ma
2f20: 69 6e 20 77 69 6e 64 6f 77 20 69 6e 74 6f 20 61  in window into a
2f30: 20 74 6f 70 6c 65 76 65 6c 20 77 69 64 67 65 74   toplevel widget
2f40: 2c 20 61 6e 64 20 67 69 76 65 20 69 74 20 61 6e  , and give it an
2f50: 20 69 6e 69 74 69 61 6c 0a 20 20 20 20 20 2a 20   initial.     * 
2f60: 72 65 71 75 65 73 74 65 64 20 73 69 7a 65 2e 0a  requested size..
2f70: 20 20 20 20 20 2a 2f 0a 20 20 20 20 0a 20 20 20       */.    .   
2f80: 20 54 6b 5f 53 65 74 43 6c 61 73 73 28 77 69 6e   Tk_SetClass(win
2f90: 50 74 72 2c 20 63 6c 61 73 73 4e 61 6d 65 29 3b  Ptr, className);
2fa0: 0a 20 20 20 20 61 72 67 76 5b 30 5d 20 3d 20 4e  .    argv[0] = N
2fb0: 55 4c 4c 3b 0a 20 20 20 20 69 66 20 28 54 6b 49  ULL;.    if (TkI
2fc0: 6e 69 74 46 72 61 6d 65 28 69 6e 74 65 72 70 2c  nitFrame(interp,
2fd0: 20 77 69 6e 50 74 72 2c 20 31 2c 20 30 2c 20 61   winPtr, 1, 0, a
2fe0: 72 67 76 29 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a  rgv) == NULL) {.
2ff0: 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0a 20 20  .return NULL;.  
3000: 20 20 7d 0a 20 20 20 20 54 6b 5f 47 65 6f 6d 65    }.    Tk_Geome
3010: 74 72 79 52 65 71 75 65 73 74 28 77 69 6e 50 74  tryRequest(winPt
3020: 72 2c 20 32 30 2c 20 31 30 29 3b 0a 0a 20 20 20  r, 20, 10);..   
3030: 20 43 74 6b 53 65 74 46 6f 63 75 73 28 77 69 6e   CtkSetFocus(win
3040: 50 74 72 29 3b 0a 20 20 20 20 74 6b 5f 4e 75 6d  Ptr);.    tk_Num
3050: 4d 61 69 6e 57 69 6e 64 6f 77 73 2b 2b 3b 0a 20  MainWindows++;. 
3060: 20 20 20 72 65 74 75 72 6e 20 77 69 6e 50 74 72     return winPtr
3070: 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d  ;.}.../*. *-----
3080: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3090: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
30a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
30b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
30c0: 2d 0a 20 2a 0a 20 2a 20 43 74 6b 5f 55 6e 73 75  -. *. * Ctk_Unsu
30d0: 70 70 6f 72 74 65 64 20 2d 2d 0a 20 2a 0a 20 2a  pported --. *. *
30e0: 09 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20  .This procedure 
30f0: 69 73 20 69 6e 76 6f 6b 65 64 20 77 68 65 6e 20  is invoked when 
3100: 61 20 54 6b 20 66 65 61 74 75 72 65 20 74 68 61  a Tk feature tha
3110: 74 20 69 73 20 6e 6f 74 0a 20 2a 09 73 75 70 70  t is not. *.supp
3120: 6f 72 74 65 64 20 62 79 20 43 54 6b 20 69 73 20  orted by CTk is 
3130: 72 65 71 75 65 73 74 65 64 2e 0a 20 2a 0a 20 2a  requested.. *. *
3140: 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 41 20 73   Results:. *.A s
3150: 74 61 6e 64 61 72 64 20 54 43 4c 20 72 65 73 75  tandard TCL resu
3160: 6c 74 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20 65  lt.. *. * Side e
3170: 66 66 65 63 74 73 3a 0a 20 2a 09 53 65 74 73 20  ffects:. *.Sets 
3180: 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 20  the interpreter 
3190: 72 65 73 75 6c 74 2c 20 69 66 20 22 63 74 6b 5f  result, if "ctk_
31a0: 75 6e 73 75 70 70 6f 72 74 65 64 22 20 69 73 20  unsupported" is 
31b0: 64 65 66 69 6e 65 64 2c 0a 20 2a 09 63 6f 75 6c  defined,. *.coul
31c0: 64 20 64 6f 20 61 6e 79 74 68 69 6e 67 2e 0a 20  d do anything.. 
31d0: 2a 0a 20 2a 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 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3200: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3210: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a  ----------. */..
3220: 69 6e 74 0a 43 74 6b 5f 55 6e 73 75 70 70 6f 72  int.Ctk_Unsuppor
3230: 74 65 64 28 69 6e 74 65 72 70 2c 20 66 65 61 74  ted(interp, feat
3240: 75 72 65 29 0a 20 20 20 20 54 63 6c 5f 49 6e 74  ure).    Tcl_Int
3250: 65 72 70 20 2a 69 6e 74 65 72 70 3b 09 09 2f 2a  erp *interp;../*
3260: 20 49 6e 74 65 72 70 72 65 74 65 72 20 69 6e 20   Interpreter in 
3270: 77 68 69 63 68 20 75 6e 73 75 70 70 6f 72 74 65  which unsupporte
3280: 64 0a 20 20 20 20 09 09 09 09 20 2a 20 66 65 61  d.    .... * fea
3290: 74 75 72 65 20 68 61 73 20 62 65 65 6e 20 72 65  ture has been re
32a0: 71 75 65 73 74 65 64 2e 20 2a 2f 0a 20 20 20 20  quested. */.    
32b0: 63 68 61 72 20 2a 66 65 61 74 75 72 65 3b 09 09  char *feature;..
32c0: 2f 2a 20 44 65 73 63 72 69 70 74 69 6f 6e 20 6f  /* Description o
32d0: 66 20 72 65 71 75 65 73 74 65 64 20 66 65 61 74  f requested feat
32e0: 75 72 65 2e 20 2a 2f 0a 7b 0a 20 20 20 20 54 63  ure. */.{.    Tc
32f0: 6c 5f 43 6d 64 49 6e 66 6f 20 69 6e 66 6f 3b 0a  l_CmdInfo info;.
3300: 20 20 20 20 63 68 61 72 20 2a 61 72 67 76 5b 33      char *argv[3
3310: 5d 3b 0a 0a 20 20 20 20 54 63 6c 5f 52 65 73 65  ];..    Tcl_Rese
3320: 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 3b  tResult(interp);
3330: 0a 20 20 20 20 69 66 20 28 54 63 6c 5f 47 65 74  .    if (Tcl_Get
3340: 43 6f 6d 6d 61 6e 64 49 6e 66 6f 28 69 6e 74 65  CommandInfo(inte
3350: 72 70 2c 20 22 63 74 6b 5f 75 6e 73 75 70 70 6f  rp, "ctk_unsuppo
3360: 72 74 65 64 22 2c 20 26 69 6e 66 6f 29 29 20 7b  rted", &info)) {
3370: 0a 09 61 72 67 76 5b 30 5d 20 3d 20 22 63 74 6b  ..argv[0] = "ctk
3380: 5f 75 6e 73 75 70 70 6f 72 74 65 64 22 3b 0a 09  _unsupported";..
3390: 61 72 67 76 5b 31 5d 20 3d 20 66 65 61 74 75 72  argv[1] = featur
33a0: 65 3b 0a 09 61 72 67 76 5b 32 5d 20 3d 20 4e 55  e;..argv[2] = NU
33b0: 4c 4c 3b 0a 09 72 65 74 75 72 6e 20 28 2a 69 6e  LL;..return (*in
33c0: 66 6f 2e 70 72 6f 63 29 28 69 6e 66 6f 2e 63 6c  fo.proc)(info.cl
33d0: 69 65 6e 74 44 61 74 61 2c 20 69 6e 74 65 72 70  ientData, interp
33e0: 2c 20 32 2c 20 61 72 67 76 29 3b 0a 20 20 20 20  , 2, argv);.    
33f0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  }.    return TCL
3400: 5f 4f 4b 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d  _OK;.}.../*. *--
3410: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3420: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3430: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3440: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3450: 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 54 6b 5f 43 72  ----. *. * Tk_Cr
3460: 65 61 74 65 57 69 6e 64 6f 77 46 72 6f 6d 50 61  eateWindowFromPa
3470: 74 68 20 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69 73  th --. *. *.This
3480: 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 73 69   procedure is si
3490: 6d 69 6c 61 72 20 74 6f 20 54 6b 5f 43 72 65 61  milar to Tk_Crea
34a0: 74 65 57 69 6e 64 6f 77 20 65 78 63 65 70 74 20  teWindow except 
34b0: 74 68 61 74 0a 20 2a 09 69 74 20 75 73 65 73 20  that. *.it uses 
34c0: 61 20 70 61 74 68 20 6e 61 6d 65 20 74 6f 20 63  a path name to c
34d0: 72 65 61 74 65 20 74 68 65 20 77 69 6e 64 6f 77  reate the window
34e0: 2c 20 72 61 74 68 65 72 20 74 68 61 6e 20 61 0a  , rather than a.
34f0: 20 2a 09 70 61 72 65 6e 74 20 61 6e 64 20 61 20   *.parent and a 
3500: 63 68 69 6c 64 20 6e 61 6d 65 2e 0a 20 2a 0a 20  child name.. *. 
3510: 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 54 68  * Results:. *.Th
3520: 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 69  e return value i
3530: 73 20 61 20 74 6f 6b 65 6e 20 66 6f 72 20 74 68  s a token for th
3540: 65 20 6e 65 77 20 77 69 6e 64 6f 77 2e 20 20 49  e new window.  I
3550: 66 20 61 6e 20 65 72 72 6f 72 0a 20 2a 09 6f 63  f an error. *.oc
3560: 63 75 72 72 65 64 20 69 6e 20 63 72 65 61 74 69  curred in creati
3570: 6e 67 20 74 68 65 20 77 69 6e 64 6f 77 20 28 65  ng the window (e
3580: 2e 67 2e 20 6e 6f 20 73 75 63 68 20 64 69 73 70  .g. no such disp
3590: 6c 61 79 20 6f 72 0a 20 2a 09 73 63 72 65 65 6e  lay or. *.screen
35a0: 29 2c 20 74 68 65 6e 20 61 6e 20 65 72 72 6f 72  ), then an error
35b0: 20 6d 65 73 73 61 67 65 20 69 73 20 6c 65 66 74   message is left
35c0: 20 69 6e 20 69 6e 74 65 72 70 2d 3e 72 65 73 75   in interp->resu
35d0: 6c 74 20 61 6e 64 0a 20 2a 09 4e 55 4c 4c 20 69  lt and. *.NULL i
35e0: 73 20 72 65 74 75 72 6e 65 64 2e 0a 20 2a 0a 20  s returned.. *. 
35f0: 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a  * Side effects:.
3600: 20 2a 09 41 20 6e 65 77 20 77 69 6e 64 6f 77 20   *.A new window 
3610: 73 74 72 75 63 74 75 72 65 20 69 73 20 61 6c 6c  structure is all
3620: 6f 63 61 74 65 64 2e 0a 20 2a 0a 20 2a 2d 2d 2d  ocated.. *. *---
3630: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3640: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3650: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3660: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3670: 2d 2d 2d 0a 20 2a 2f 0a 0a 54 6b 5f 57 69 6e 64  ---. */..Tk_Wind
3680: 6f 77 0a 54 6b 5f 43 72 65 61 74 65 57 69 6e 64  ow.Tk_CreateWind
3690: 6f 77 46 72 6f 6d 50 61 74 68 28 69 6e 74 65 72  owFromPath(inter
36a0: 70 2c 20 77 69 6e 50 74 72 2c 20 70 61 74 68 4e  p, winPtr, pathN
36b0: 61 6d 65 2c 20 73 63 72 65 65 6e 4e 61 6d 65 29  ame, screenName)
36c0: 0a 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  .    Tcl_Interp 
36d0: 2a 69 6e 74 65 72 70 3b 09 09 2f 2a 20 49 6e 74  *interp;../* Int
36e0: 65 72 70 72 65 74 65 72 20 74 6f 20 75 73 65 20  erpreter to use 
36f0: 66 6f 72 20 65 72 72 6f 72 20 72 65 70 6f 72 74  for error report
3700: 69 6e 67 2e 0a 09 09 09 09 20 2a 20 49 6e 74 65  ing...... * Inte
3710: 72 70 2d 3e 72 65 73 75 6c 74 20 69 73 20 61 73  rp->result is as
3720: 73 75 6d 65 64 20 74 6f 20 62 65 0a 09 09 09 09  sumed to be.....
3730: 20 2a 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 62   * initialized b
3740: 79 20 74 68 65 20 63 61 6c 6c 65 72 2e 20 2a 2f  y the caller. */
3750: 0a 20 20 20 20 54 6b 57 69 6e 64 6f 77 20 2a 77  .    TkWindow *w
3760: 69 6e 50 74 72 3b 09 09 2f 2a 20 54 6f 6b 65 6e  inPtr;../* Token
3770: 20 66 6f 72 20 61 6e 79 20 77 69 6e 64 6f 77 20   for any window 
3780: 69 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 0a 09  in application..
3790: 09 09 09 20 2a 20 74 68 61 74 20 69 73 20 74 6f  ... * that is to
37a0: 20 63 6f 6e 74 61 69 6e 20 6e 65 77 20 77 69 6e   contain new win
37b0: 64 6f 77 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72  dow. */.    char
37c0: 20 2a 70 61 74 68 4e 61 6d 65 3b 09 09 2f 2a 20   *pathName;../* 
37d0: 50 61 74 68 20 6e 61 6d 65 20 66 6f 72 20 6e 65  Path name for ne
37e0: 77 20 77 69 6e 64 6f 77 20 77 69 74 68 69 6e 20  w window within 
37f0: 74 68 65 0a 09 09 09 09 20 2a 20 61 70 70 6c 69  the..... * appli
3800: 63 61 74 69 6f 6e 20 6f 66 20 74 6b 77 69 6e 2e  cation of tkwin.
3810: 20 20 54 68 65 20 70 61 72 65 6e 74 20 6f 66 0a    The parent of.
3820: 09 09 09 09 20 2a 20 74 68 69 73 20 77 69 6e 64  .... * this wind
3830: 6f 77 20 6d 75 73 74 20 61 6c 72 65 61 64 79 20  ow must already 
3840: 65 78 69 73 74 2c 20 62 75 74 0a 09 09 09 09 20  exist, but..... 
3850: 2a 20 74 68 65 20 77 69 6e 64 6f 77 20 69 74 73  * the window its
3860: 65 6c 66 20 6d 75 73 74 20 6e 6f 74 20 65 78 69  elf must not exi
3870: 73 74 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  st. */.    char 
3880: 2a 73 63 72 65 65 6e 4e 61 6d 65 3b 09 09 2f 2a  *screenName;../*
3890: 20 49 66 20 4e 55 4c 4c 2c 20 6e 65 77 20 77 69   If NULL, new wi
38a0: 6e 64 6f 77 20 77 69 6c 6c 20 62 65 20 6f 6e 20  ndow will be on 
38b0: 73 61 6d 65 0a 09 09 09 09 20 2a 20 73 63 72 65  same..... * scre
38c0: 65 6e 20 61 73 20 69 74 73 20 70 61 72 65 6e 74  en as its parent
38d0: 2e 20 20 49 66 20 6e 6f 6e 2d 4e 55 4c 4c 2c 0a  .  If non-NULL,.
38e0: 09 09 09 09 20 2a 20 67 69 76 65 73 20 6e 61 6d  .... * gives nam
38f0: 65 20 6f 66 20 73 63 72 65 65 6e 20 6f 6e 20 77  e of screen on w
3900: 68 69 63 68 20 74 6f 20 63 72 65 61 74 65 0a 09  hich to create..
3910: 09 09 09 20 2a 20 6e 65 77 20 77 69 6e 64 6f 77  ... * new window
3920: 3b 20 20 77 69 6e 64 6f 77 20 77 69 6c 6c 20 62  ;  window will b
3930: 65 20 61 20 74 6f 70 2d 6c 65 76 65 6c 0a 09 09  e a top-level...
3940: 09 09 20 2a 20 77 69 6e 64 6f 77 2e 20 2a 2f 0a  .. * window. */.
3950: 7b 0a 20 20 20 20 54 6b 57 69 6e 64 6f 77 20 2a  {.    TkWindow *
3960: 70 61 72 65 6e 74 50 74 72 3b 0a 20 20 20 20 54  parentPtr;.    T
3970: 6b 44 69 73 70 6c 61 79 20 2a 64 69 73 70 50 74  kDisplay *dispPt
3980: 72 3b 0a 20 20 20 20 54 63 6c 5f 48 61 73 68 45  r;.    Tcl_HashE
3990: 6e 74 72 79 20 2a 68 50 74 72 3b 0a 20 20 20 20  ntry *hPtr;.    
39a0: 69 6e 74 20 6e 65 77 3b 0a 20 20 20 20 63 68 61  int new;.    cha
39b0: 72 20 2a 6e 61 6d 65 3b 0a 0a 20 20 20 20 6e 61  r *name;..    na
39c0: 6d 65 20 3d 20 73 74 72 72 63 68 72 28 70 61 74  me = strrchr(pat
39d0: 68 4e 61 6d 65 2c 20 27 2e 27 29 3b 0a 20 20 20  hName, '.');.   
39e0: 20 69 66 20 28 6e 61 6d 65 29 20 7b 0a 20 20 20   if (name) {.   
39f0: 20 09 6e 61 6d 65 2b 2b 3b 0a 20 20 20 20 7d 0a   .name++;.    }.
3a00: 20 20 20 20 70 61 72 65 6e 74 50 74 72 20 3d 20      parentPtr = 
3a10: 43 74 6b 5f 50 61 72 65 6e 74 42 79 4e 61 6d 65  Ctk_ParentByName
3a20: 28 69 6e 74 65 72 70 2c 20 70 61 74 68 4e 61 6d  (interp, pathNam
3a30: 65 2c 20 77 69 6e 50 74 72 29 3b 0a 20 20 20 20  e, winPtr);.    
3a40: 69 66 20 28 70 61 72 65 6e 74 50 74 72 20 3d 3d  if (parentPtr ==
3a50: 20 28 54 6b 57 69 6e 64 6f 77 20 2a 29 20 4e 55   (TkWindow *) NU
3a60: 4c 4c 29 20 7b 0a 20 20 20 20 09 72 65 74 75 72  LL) {.    .retur
3a70: 6e 20 28 54 6b 57 69 6e 64 6f 77 20 2a 29 20 4e  n (TkWindow *) N
3a80: 55 4c 4c 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ULL;.    }.    i
3a90: 66 20 28 73 63 72 65 65 6e 4e 61 6d 65 20 3d 3d  f (screenName ==
3aa0: 20 4e 55 4c 4c 29 20 7b 0a 20 20 20 20 09 64 69   NULL) {.    .di
3ab0: 73 70 50 74 72 20 3d 20 70 61 72 65 6e 74 50 74  spPtr = parentPt
3ac0: 72 2d 3e 64 69 73 70 50 74 72 3b 0a 20 20 20 20  r->dispPtr;.    
3ad0: 7d 20 65 6c 73 65 20 7b 0a 09 64 69 73 70 50 74  } else {..dispPt
3ae0: 72 20 3d 20 47 65 74 53 63 72 65 65 6e 28 69 6e  r = GetScreen(in
3af0: 74 65 72 70 2c 20 73 63 72 65 65 6e 4e 61 6d 65  terp, screenName
3b00: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a  );.    }..    /*
3b10: 0a 20 20 20 20 20 2a 20 47 65 74 20 65 6e 74 72  .     * Get entr
3b20: 79 20 66 6f 72 20 6e 65 77 20 6e 61 6d 65 2e 0a  y for new name..
3b30: 20 20 20 20 20 2a 2f 0a 20 20 20 20 68 50 74 72       */.    hPtr
3b40: 20 3d 20 54 63 6c 5f 43 72 65 61 74 65 48 61 73   = Tcl_CreateHas
3b50: 68 45 6e 74 72 79 28 26 77 69 6e 50 74 72 2d 3e  hEntry(&winPtr->
3b60: 6d 61 69 6e 50 74 72 2d 3e 6e 61 6d 65 54 61 62  mainPtr->nameTab
3b70: 6c 65 2c 20 70 61 74 68 4e 61 6d 65 2c 20 26 6e  le, pathName, &n
3b80: 65 77 29 3b 0a 20 20 20 20 69 66 20 28 21 6e 65  ew);.    if (!ne
3b90: 77 29 20 7b 0a 09 54 63 6c 5f 41 70 70 65 6e 64  w) {..Tcl_Append
3ba0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
3bb0: 77 69 6e 64 6f 77 20 6e 61 6d 65 20 5c 22 22 2c  window name \"",
3bc0: 20 70 61 74 68 4e 61 6d 65 2c 0a 09 09 22 5c 22   pathName,..."\"
3bd0: 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 22   already exists"
3be0: 2c 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29  , (char *) NULL)
3bf0: 3b 0a 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0a  ;..return NULL;.
3c00: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20      }..    /*.  
3c10: 20 20 20 2a 20 43 72 65 61 74 65 20 74 68 65 20     * Create the 
3c20: 77 69 6e 64 6f 77 2e 0a 20 20 20 20 20 2a 2f 0a  window..     */.
3c30: 20 20 20 20 77 69 6e 50 74 72 20 3d 20 4e 65 77      winPtr = New
3c40: 57 69 6e 64 6f 77 28 64 69 73 70 50 74 72 29 3b  Window(dispPtr);
3c50: 0a 20 20 20 20 69 66 20 28 73 63 72 65 65 6e 4e  .    if (screenN
3c60: 61 6d 65 29 20 7b 0a 09 77 69 6e 50 74 72 2d 3e  ame) {..winPtr->
3c70: 70 61 72 65 6e 74 50 74 72 20 3d 20 64 69 73 70  parentPtr = disp
3c80: 50 74 72 2d 3e 72 6f 6f 74 50 74 72 3b 0a 09 77  Ptr->rootPtr;..w
3c90: 69 6e 50 74 72 2d 3e 66 6c 61 67 73 20 7c 3d 20  inPtr->flags |= 
3ca0: 54 4b 5f 54 4f 50 5f 4c 45 56 45 4c 3b 0a 09 70  TK_TOP_LEVEL;..p
3cb0: 61 72 65 6e 74 50 74 72 2d 3e 66 6c 61 67 73 20  arentPtr->flags 
3cc0: 7c 3d 20 43 54 4b 5f 48 41 53 5f 54 4f 50 4c 45  |= CTK_HAS_TOPLE
3cd0: 56 45 4c 5f 43 48 49 4c 44 3b 0a 20 20 20 20 7d  VEL_CHILD;.    }
3ce0: 20 65 6c 73 65 20 7b 0a 09 77 69 6e 50 74 72 2d   else {..winPtr-
3cf0: 3e 70 61 72 65 6e 74 50 74 72 20 3d 20 70 61 72  >parentPtr = par
3d00: 65 6e 74 50 74 72 3b 0a 20 20 20 20 7d 0a 20 20  entPtr;.    }.  
3d10: 20 20 77 69 6e 50 74 72 2d 3e 6d 61 69 6e 50 74    winPtr->mainPt
3d20: 72 20 3d 20 70 61 72 65 6e 74 50 74 72 2d 3e 6d  r = parentPtr->m
3d30: 61 69 6e 50 74 72 3b 0a 20 20 20 20 77 69 6e 50  ainPtr;.    winP
3d40: 74 72 2d 3e 6d 61 69 6e 50 74 72 2d 3e 72 65 66  tr->mainPtr->ref
3d50: 43 6f 75 6e 74 2b 2b 3b 0a 20 20 20 20 49 6e 73  Count++;.    Ins
3d60: 65 72 74 57 69 6e 64 6f 77 28 77 69 6e 50 74 72  ertWindow(winPtr
3d70: 2c 20 48 45 41 44 5f 43 48 49 4c 44 28 77 69 6e  , HEAD_CHILD(win
3d80: 50 74 72 2d 3e 70 61 72 65 6e 74 50 74 72 29 29  Ptr->parentPtr))
3d90: 3b 0a 20 20 20 20 54 63 6c 5f 53 65 74 48 61 73  ;.    Tcl_SetHas
3da0: 68 56 61 6c 75 65 28 68 50 74 72 2c 20 77 69 6e  hValue(hPtr, win
3db0: 50 74 72 29 3b 0a 20 20 20 20 77 69 6e 50 74 72  Ptr);.    winPtr
3dc0: 2d 3e 70 61 74 68 4e 61 6d 65 20 3d 20 54 63 6c  ->pathName = Tcl
3dd0: 5f 47 65 74 48 61 73 68 4b 65 79 28 26 77 69 6e  _GetHashKey(&win
3de0: 50 74 72 2d 3e 6d 61 69 6e 50 74 72 2d 3e 6e 61  Ptr->mainPtr->na
3df0: 6d 65 54 61 62 6c 65 2c 20 68 50 74 72 29 3b 0a  meTable, hPtr);.
3e00: 20 20 20 20 77 69 6e 50 74 72 2d 3e 6e 61 6d 65      winPtr->name
3e10: 55 69 64 20 3d 20 54 6b 5f 47 65 74 55 69 64 28  Uid = Tk_GetUid(
3e20: 6e 61 6d 65 29 3b 0a 20 20 20 20 72 65 74 75 72  name);.    retur
3e30: 6e 20 77 69 6e 50 74 72 3b 0a 7d 0a 0c 0a 2f 2a  n winPtr;.}.../*
3e40: 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  . *-------------
3e50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3e60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3e70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3e80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 20 43 74 6b  ---------. * Ctk
3e90: 5f 50 61 72 65 6e 74 42 79 4e 61 6d 65 20 2d 2d  _ParentByName --
3ea0: 0a 20 2a 09 44 65 74 65 72 6d 69 6e 65 20 70 61  . *.Determine pa
3eb0: 72 65 6e 74 20 6f 66 20 77 69 6e 64 6f 77 20 62  rent of window b
3ec0: 61 73 65 64 20 6f 6e 20 70 61 74 68 20 6e 61 6d  ased on path nam
3ed0: 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63 65  e.  This is nece
3ee0: 73 73 61 72 79 0a 20 2a 09 66 6f 72 20 74 6f 70  ssary. *.for top
3ef0: 20 6c 65 76 65 6c 20 77 69 6e 64 6f 77 73 20 62   level windows b
3f00: 65 63 61 75 73 65 20 43 74 6b 5f 50 61 72 65 6e  ecause Ctk_Paren
3f10: 74 28 29 20 77 69 6c 6c 20 61 6c 77 61 79 73 20  t() will always 
3f20: 72 65 74 75 72 6e 0a 20 2a 09 74 68 65 20 72 6f  return. *.the ro
3f30: 6f 74 20 77 69 6e 64 6f 77 20 66 6f 72 20 74 68  ot window for th
3f40: 65 6d 2e 0a 20 2a 0a 20 2a 20 20 52 65 73 75 6c  em.. *. *  Resul
3f50: 74 73 3a 0a 20 2a 09 52 65 74 75 72 6e 73 20 70  ts:. *.Returns p
3f60: 6f 69 6e 74 65 72 20 74 6f 20 6e 65 77 20 77 69  ointer to new wi
3f70: 6e 64 6f 77 20 69 66 20 73 75 63 63 65 73 73 66  ndow if successf
3f80: 75 6c 2e 20 20 52 65 74 75 72 6e 73 0a 20 2a 09  ul.  Returns. *.
3f90: 4e 55 4c 4c 20 69 66 20 74 68 65 20 70 61 72 65  NULL if the pare
3fa0: 6e 74 20 63 61 6e 27 74 20 62 65 20 66 6f 75 6e  nt can't be foun
3fb0: 64 2c 20 61 6e 64 20 73 74 6f 72 65 73 20 61 6e  d, and stores an
3fc0: 20 65 72 72 6f 72 0a 20 2a 09 6d 65 73 73 61 67   error. *.messag
3fd0: 65 20 69 6e 20 69 6e 74 65 72 70 2d 3e 72 65 73  e in interp->res
3fe0: 75 6c 74 2e 0a 20 2a 0a 20 2a 20 20 53 69 64 65  ult.. *. *  Side
3ff0: 20 45 66 66 65 63 74 73 3a 0a 20 2a 2d 2d 2d 2d   Effects:. *----
4000: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4010: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4020: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4040: 2d 2d 0a 20 2a 2f 0a 0a 54 6b 57 69 6e 64 6f 77  --. */..TkWindow
4050: 20 2a 0a 43 74 6b 5f 50 61 72 65 6e 74 42 79 4e   *.Ctk_ParentByN
4060: 61 6d 65 28 69 6e 74 65 72 70 2c 20 70 61 74 68  ame(interp, path
4070: 4e 61 6d 65 2c 20 74 6b 77 69 6e 29 0a 20 20 20  Name, tkwin).   
4080: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
4090: 65 72 70 3b 0a 20 20 20 20 63 68 61 72 20 2a 70  erp;.    char *p
40a0: 61 74 68 4e 61 6d 65 3b 0a 20 20 20 20 54 6b 5f  athName;.    Tk_
40b0: 57 69 6e 64 6f 77 20 74 6b 77 69 6e 3b 0a 7b 0a  Window tkwin;.{.
40c0: 23 64 65 66 69 6e 65 20 46 49 58 45 44 5f 53 50  #define FIXED_SP
40d0: 41 43 45 20 35 30 0a 20 20 20 20 63 68 61 72 20  ACE 50.    char 
40e0: 66 69 78 65 64 53 70 61 63 65 5b 46 49 58 45 44  fixedSpace[FIXED
40f0: 5f 53 50 41 43 45 2b 31 5d 3b 0a 20 20 20 20 63  _SPACE+1];.    c
4100: 68 61 72 20 2a 70 3b 0a 20 20 20 20 69 6e 74 20  har *p;.    int 
4110: 6e 75 6d 43 68 61 72 73 3b 0a 20 20 20 20 54 6b  numChars;.    Tk
4120: 5f 57 69 6e 64 6f 77 20 70 61 72 65 6e 74 3b 0a  _Window parent;.
4130: 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20 53  .    /*.     * S
4140: 74 72 69 70 20 74 68 65 20 70 61 72 65 6e 74 27  trip the parent'
4150: 73 20 6e 61 6d 65 20 6f 75 74 20 6f 66 20 70 61  s name out of pa
4160: 74 68 4e 61 6d 65 20 28 69 74 27 73 20 65 76 65  thName (it's eve
4170: 72 79 74 68 69 6e 67 20 75 70 0a 20 20 20 20 20  rything up.     
4180: 2a 20 74 6f 20 74 68 65 20 6c 61 73 74 20 64 6f  * to the last do
4190: 74 29 2e 20 20 54 68 65 72 65 20 61 72 65 20 74  t).  There are t
41a0: 77 6f 20 74 72 69 63 6b 79 20 70 61 72 74 73 3a  wo tricky parts:
41b0: 20 28 61 29 20 6d 75 73 74 0a 20 20 20 20 20 2a   (a) must.     *
41c0: 20 63 6f 70 79 20 74 68 65 20 70 61 72 65 6e 74   copy the parent
41d0: 27 73 20 6e 61 6d 65 20 73 6f 6d 65 77 68 65 72  's name somewher
41e0: 65 20 65 6c 73 65 20 74 6f 20 61 76 6f 69 64 20  e else to avoid 
41f0: 6d 6f 64 69 66 79 69 6e 67 0a 20 20 20 20 20 2a  modifying.     *
4200: 20 74 68 65 20 70 61 74 68 4e 61 6d 65 20 73 74   the pathName st
4210: 72 69 6e 67 20 28 66 6f 72 20 6c 61 72 67 65 20  ring (for large 
4220: 6e 61 6d 65 73 2c 20 73 70 61 63 65 20 66 6f 72  names, space for
4230: 20 74 68 65 20 63 6f 70 79 0a 20 20 20 20 20 2a   the copy.     *
4240: 20 77 69 6c 6c 20 68 61 76 65 20 74 6f 20 62 65   will have to be
4250: 20 6d 61 6c 6c 6f 63 27 65 64 29 3b 20 20 28 62   malloc'ed);  (b
4260: 29 20 6d 75 73 74 20 73 70 65 63 69 61 6c 2d 63  ) must special-c
4270: 61 73 65 20 74 68 65 0a 20 20 20 20 20 2a 20 73  ase the.     * s
4280: 69 74 75 61 74 69 6f 6e 73 20 77 68 65 72 65 20  ituations where 
4290: 74 68 65 20 70 61 72 65 6e 74 20 69 73 20 22 22  the parent is ""
42a0: 20 6f 72 20 22 2e 22 2e 0a 20 20 20 20 20 2a 2f   or "."..     */
42b0: 0a 20 20 20 20 70 20 3d 20 73 74 72 72 63 68 72  .    p = strrchr
42c0: 28 70 61 74 68 4e 61 6d 65 2c 20 27 2e 27 29 3b  (pathName, '.');
42d0: 0a 20 20 20 20 69 66 20 28 70 20 3d 3d 20 4e 55  .    if (p == NU
42e0: 4c 4c 29 20 7b 0a 09 54 63 6c 5f 41 70 70 65 6e  LL) {..Tcl_Appen
42f0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
4300: 22 62 61 64 20 77 69 6e 64 6f 77 20 70 61 74 68  "bad window path
4310: 20 6e 61 6d 65 20 5c 22 22 2c 20 70 61 74 68 4e   name \"", pathN
4320: 61 6d 65 2c 0a 09 09 22 5c 22 22 2c 20 28 63 68  ame,..."\"", (ch
4330: 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09 72 65  ar *) NULL);..re
4340: 74 75 72 6e 20 4e 55 4c 4c 3b 0a 20 20 20 20 7d  turn NULL;.    }
4350: 0a 20 20 20 20 6e 75 6d 43 68 61 72 73 20 3d 20  .    numChars = 
4360: 70 2d 70 61 74 68 4e 61 6d 65 3b 0a 20 20 20 20  p-pathName;.    
4370: 69 66 20 28 6e 75 6d 43 68 61 72 73 20 3e 20 46  if (numChars > F
4380: 49 58 45 44 5f 53 50 41 43 45 29 20 7b 0a 09 70  IXED_SPACE) {..p
4390: 20 3d 20 28 63 68 61 72 20 2a 29 20 63 6b 61 6c   = (char *) ckal
43a0: 6c 6f 63 28 28 75 6e 73 69 67 6e 65 64 29 20 28  loc((unsigned) (
43b0: 6e 75 6d 43 68 61 72 73 2b 31 29 29 3b 0a 20 20  numChars+1));.  
43c0: 20 20 7d 20 65 6c 73 65 20 7b 0a 09 70 20 3d 20    } else {..p = 
43d0: 66 69 78 65 64 53 70 61 63 65 3b 0a 20 20 20 20  fixedSpace;.    
43e0: 7d 0a 20 20 20 20 69 66 20 28 70 61 74 68 4e 61  }.    if (pathNa
43f0: 6d 65 5b 31 5d 20 3d 3d 20 27 5c 30 27 29 20 7b  me[1] == '\0') {
4400: 0a 20 20 20 20 09 2f 2a 0a 20 20 20 20 09 20 2a  .    ./*.    . *
4410: 20 50 61 72 65 6e 74 20 69 73 20 72 6f 6f 74 3a   Parent is root:
4420: 20 22 22 0a 20 20 20 20 09 20 2a 2f 0a 20 20 20   "".    . */.   
4430: 20 09 2a 70 20 3d 20 27 5c 30 27 3b 0a 20 20 20   .*p = '\0';.   
4440: 20 7d 20 65 6c 73 65 20 69 66 20 28 6e 75 6d 43   } else if (numC
4450: 68 61 72 73 20 3d 3d 20 30 29 20 7b 0a 20 20 20  hars == 0) {.   
4460: 20 09 2f 2a 0a 20 20 20 20 09 20 2a 20 50 61 72   ./*.    . * Par
4470: 65 6e 74 20 69 73 20 6d 61 69 6e 3a 20 22 2e 22  ent is main: "."
4480: 0a 20 20 20 20 09 20 2a 2f 0a 09 2a 70 20 3d 20  .    . */..*p = 
4490: 27 2e 27 3b 0a 09 70 5b 31 5d 20 3d 20 27 5c 30  '.';..p[1] = '\0
44a0: 27 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a  ';.    } else {.
44b0: 09 73 74 72 6e 63 70 79 28 70 2c 20 70 61 74 68  .strncpy(p, path
44c0: 4e 61 6d 65 2c 20 6e 75 6d 43 68 61 72 73 29 3b  Name, numChars);
44d0: 0a 09 70 5b 6e 75 6d 43 68 61 72 73 5d 20 3d 20  ..p[numChars] = 
44e0: 27 5c 30 27 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  '\0';.    }..   
44f0: 20 2f 2a 0a 20 20 20 20 20 2a 20 46 69 6e 64 20   /*.     * Find 
4500: 74 68 65 20 70 61 72 65 6e 74 20 77 69 6e 64 6f  the parent windo
4510: 77 2e 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 70  w..     */.    p
4520: 61 72 65 6e 74 20 3d 20 54 6b 5f 4e 61 6d 65 54  arent = Tk_NameT
4530: 6f 57 69 6e 64 6f 77 28 69 6e 74 65 72 70 2c 20  oWindow(interp, 
4540: 70 2c 20 74 6b 77 69 6e 29 3b 0a 20 20 20 20 69  p, tkwin);.    i
4550: 66 20 28 70 20 21 3d 20 66 69 78 65 64 53 70 61  f (p != fixedSpa
4560: 63 65 29 20 7b 0a 09 63 6b 66 72 65 65 28 70 29  ce) {..ckfree(p)
4570: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  ;.    }.    retu
4580: 72 6e 20 70 61 72 65 6e 74 3b 0a 7d 0a 0c 0a 2f  rn parent;.}.../
4590: 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *. *------------
45a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
45b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
45c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
45d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a  ----------. *. *
45e0: 20 54 6b 5f 53 65 74 43 6c 61 73 73 20 2d 2d 0a   Tk_SetClass --.
45f0: 20 2a 0a 20 2a 09 54 68 69 73 20 70 72 6f 63 65   *. *.This proce
4600: 64 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20  dure is used to 
4610: 67 69 76 65 20 61 20 77 69 6e 64 6f 77 20 61 20  give a window a 
4620: 63 6c 61 73 73 2e 0a 20 2a 0a 20 2a 20 52 65 73  class.. *. * Res
4630: 75 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20  ults:. *.None.. 
4640: 2a 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63 74  *. * Side effect
4650: 73 3a 0a 20 2a 09 41 20 6e 65 77 20 63 6c 61 73  s:. *.A new clas
4660: 73 20 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20  s is stored for 
4670: 74 6b 77 69 6e 2c 20 72 65 70 6c 61 63 69 6e 67  tkwin, replacing
4680: 20 61 6e 79 20 65 78 69 73 74 69 6e 67 0a 20 2a   any existing. *
4690: 09 63 6c 61 73 73 20 66 6f 72 20 69 74 2e 0a 20  .class for it.. 
46a0: 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *. *------------
46b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
46c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
46d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
46e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a  ----------. */..
46f0: 76 6f 69 64 0a 54 6b 5f 53 65 74 43 6c 61 73 73  void.Tk_SetClass
4700: 28 74 6b 77 69 6e 2c 20 63 6c 61 73 73 4e 61 6d  (tkwin, classNam
4710: 65 29 0a 20 20 20 20 54 6b 5f 57 69 6e 64 6f 77  e).    Tk_Window
4720: 20 74 6b 77 69 6e 3b 09 09 2f 2a 20 54 6f 6b 65   tkwin;../* Toke
4730: 6e 20 66 6f 72 20 77 69 6e 64 6f 77 20 74 6f 20  n for window to 
4740: 61 73 73 69 67 6e 20 63 6c 61 73 73 2e 20 2a 2f  assign class. */
4750: 0a 20 20 20 20 63 68 61 72 20 2a 63 6c 61 73 73  .    char *class
4760: 4e 61 6d 65 3b 09 09 2f 2a 20 4e 65 77 20 63 6c  Name;../* New cl
4770: 61 73 73 20 66 6f 72 20 74 6b 77 69 6e 2e 20 2a  ass for tkwin. *
4780: 2f 0a 7b 0a 20 20 20 20 72 65 67 69 73 74 65 72  /.{.    register
4790: 20 54 6b 57 69 6e 64 6f 77 20 2a 77 69 6e 50 74   TkWindow *winPt
47a0: 72 20 3d 20 28 54 6b 57 69 6e 64 6f 77 20 2a 29  r = (TkWindow *)
47b0: 20 74 6b 77 69 6e 3b 0a 0a 20 20 20 20 77 69 6e   tkwin;..    win
47c0: 50 74 72 2d 3e 63 6c 61 73 73 55 69 64 20 3d 20  Ptr->classUid = 
47d0: 54 6b 5f 47 65 74 55 69 64 28 63 6c 61 73 73 4e  Tk_GetUid(classN
47e0: 61 6d 65 29 3b 0a 20 20 20 20 54 6b 4f 70 74 69  ame);.    TkOpti
47f0: 6f 6e 43 6c 61 73 73 43 68 61 6e 67 65 64 28 77  onClassChanged(w
4800: 69 6e 50 74 72 29 3b 0a 7d 0a 0c 0a 2f 2a 0a 20  inPtr);.}.../*. 
4810: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *---------------
4820: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4830: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4840: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4850: 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 54 6b  -------. *. * Tk
4860: 5f 4e 61 6d 65 54 6f 57 69 6e 64 6f 77 20 2d 2d  _NameToWindow --
4870: 0a 20 2a 0a 20 2a 09 47 69 76 65 6e 20 61 20 73  . *. *.Given a s
4880: 74 72 69 6e 67 20 6e 61 6d 65 20 66 6f 72 20 61  tring name for a
4890: 20 77 69 6e 64 6f 77 2c 20 74 68 69 73 20 70 72   window, this pr
48a0: 6f 63 65 64 75 72 65 0a 20 2a 09 72 65 74 75 72  ocedure. *.retur
48b0: 6e 73 20 74 68 65 20 74 6f 6b 65 6e 20 66 6f 72  ns the token for
48c0: 20 74 68 65 20 77 69 6e 64 6f 77 2c 20 69 66 20   the window, if 
48d0: 74 68 65 72 65 20 65 78 69 73 74 73 20 61 0a 20  there exists a. 
48e0: 2a 09 77 69 6e 64 6f 77 20 63 6f 72 72 65 73 70  *.window corresp
48f0: 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 20 67 69  onding to the gi
4900: 76 65 6e 20 6e 61 6d 65 2e 0a 20 2a 0a 20 2a 20  ven name.. *. * 
4910: 52 65 73 75 6c 74 73 3a 0a 20 2a 09 54 68 65 20  Results:. *.The 
4920: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 20 69 73  return result is
4930: 20 65 69 74 68 65 72 20 61 20 74 6f 6b 65 6e 20   either a token 
4940: 66 6f 72 20 74 68 65 20 77 69 6e 64 6f 77 20 63  for the window c
4950: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 20 2a 09  orresponding. *.
4960: 74 6f 20 22 6e 61 6d 65 22 2c 20 6f 72 20 65 6c  to "name", or el
4970: 73 65 20 4e 55 4c 4c 20 74 6f 20 69 6e 64 69 63  se NULL to indic
4980: 61 74 65 20 74 68 61 74 20 74 68 65 72 65 20 69  ate that there i
4990: 73 20 6e 6f 20 73 75 63 68 0a 20 2a 09 77 69 6e  s no such. *.win
49a0: 64 6f 77 2e 20 20 49 6e 20 74 68 69 73 20 63 61  dow.  In this ca
49b0: 73 65 2c 20 61 6e 20 65 72 72 6f 72 20 6d 65 73  se, an error mes
49c0: 73 61 67 65 20 69 73 20 6c 65 66 74 20 69 6e 20  sage is left in 
49d0: 69 6e 74 65 72 70 2d 3e 72 65 73 75 6c 74 2e 0a  interp->result..
49e0: 20 2a 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63   *. * Side effec
49f0: 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a  ts:. *.None.. *.
4a00: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   *--------------
4a10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4a20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4a30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4a40: 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 54 6b 5f  --------. */.Tk_
4a50: 57 69 6e 64 6f 77 0a 54 6b 5f 4e 61 6d 65 54 6f  Window.Tk_NameTo
4a60: 57 69 6e 64 6f 77 28 69 6e 74 65 72 70 2c 20 70  Window(interp, p
4a70: 61 74 68 4e 61 6d 65 2c 20 77 69 6e 50 74 72 29  athName, winPtr)
4a80: 0a 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  .    Tcl_Interp 
4a90: 2a 69 6e 74 65 72 70 3b 09 09 2f 2a 20 57 68 65  *interp;../* Whe
4aa0: 72 65 20 74 6f 20 72 65 70 6f 72 74 20 65 72 72  re to report err
4ab0: 6f 72 73 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72  ors. */.    char
4ac0: 20 2a 70 61 74 68 4e 61 6d 65 3b 09 09 2f 2a 20   *pathName;../* 
4ad0: 50 61 74 68 20 6e 61 6d 65 20 6f 66 20 77 69 6e  Path name of win
4ae0: 64 6f 77 2e 20 2a 2f 0a 20 20 20 20 54 6b 57 69  dow. */.    TkWi
4af0: 6e 64 6f 77 20 2a 77 69 6e 50 74 72 3b 09 09 2f  ndow *winPtr;../
4b00: 2a 20 54 6f 6b 65 6e 20 66 6f 72 20 77 69 6e 64  * Token for wind
4b10: 6f 77 2c 20 6e 61 6d 65 20 69 73 20 61 73 73 75  ow, name is assu
4b20: 6d 65 64 20 74 6f 0a 20 20 20 20 09 09 09 09 20  med to.    .... 
4b30: 2a 20 62 65 6c 6f 6e 67 20 74 6f 20 74 68 65 20  * belong to the 
4b40: 73 61 6d 65 20 6d 61 69 6e 20 77 69 6e 64 6f 77  same main window
4b50: 20 61 73 20 77 69 6e 50 74 72 2e 20 2a 2f 0a 7b   as winPtr. */.{
4b60: 0a 20 20 20 20 54 63 6c 5f 48 61 73 68 45 6e 74  .    Tcl_HashEnt
4b70: 72 79 20 2a 68 50 74 72 3b 0a 0a 20 20 20 20 68  ry *hPtr;..    h
4b80: 50 74 72 20 3d 20 54 63 6c 5f 46 69 6e 64 48 61  Ptr = Tcl_FindHa
4b90: 73 68 45 6e 74 72 79 28 26 77 69 6e 50 74 72 2d  shEntry(&winPtr-
4ba0: 3e 6d 61 69 6e 50 74 72 2d 3e 6e 61 6d 65 54 61  >mainPtr->nameTa
4bb0: 62 6c 65 2c 20 70 61 74 68 4e 61 6d 65 29 3b 0a  ble, pathName);.
4bc0: 20 20 20 20 69 66 20 28 68 50 74 72 20 3d 3d 20      if (hPtr == 
4bd0: 4e 55 4c 4c 29 20 7b 0a 09 54 63 6c 5f 41 70 70  NULL) {..Tcl_App
4be0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
4bf0: 2c 20 22 62 61 64 20 77 69 6e 64 6f 77 20 70 61  , "bad window pa
4c00: 74 68 20 6e 61 6d 65 20 5c 22 22 2c 0a 09 09 70  th name \"",...p
4c10: 61 74 68 4e 61 6d 65 2c 20 22 5c 22 22 2c 20 28  athName, "\"", (
4c20: 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09  char *) NULL);..
4c30: 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0a 20 20 20  return NULL;.   
4c40: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 28 54   }.    return (T
4c50: 6b 5f 57 69 6e 64 6f 77 29 20 54 63 6c 5f 47 65  k_Window) Tcl_Ge
4c60: 74 48 61 73 68 56 61 6c 75 65 28 68 50 74 72 29  tHashValue(hPtr)
4c70: 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d  ;.}.../*. *-----
4c80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4c90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4ca0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4cb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4cc0: 2d 0a 20 2a 0a 20 2a 20 43 72 65 61 74 65 52 6f  -. *. * CreateRo
4cd0: 6f 74 20 2d 2d 0a 20 2a 0a 20 2a 20 20 43 72 65  ot --. *. *  Cre
4ce0: 61 74 65 73 20 74 68 65 20 72 6f 6f 74 20 77 69  ates the root wi
4cf0: 6e 64 6f 77 20 28 77 68 6f 6c 65 20 73 63 72 65  ndow (whole scre
4d00: 65 6e 2c 20 6e 6f 20 70 61 72 65 6e 74 29 2e 20  en, no parent). 
4d10: 20 54 68 65 20 77 69 6e 64 6f 77 0a 20 2a 20 20   The window. *  
4d20: 69 73 20 6d 61 70 70 65 64 20 61 6e 64 20 64 69  is mapped and di
4d30: 73 70 6c 61 79 65 64 2e 0a 20 2a 0a 20 2a 20 20  splayed.. *. *  
4d40: 52 65 73 75 6c 74 73 3a 0a 20 2a 09 41 20 6e 65  Results:. *.A ne
4d50: 77 20 77 69 6e 64 6f 77 20 70 6f 69 6e 74 65 72  w window pointer
4d60: 2e 0a 20 2a 0a 20 2a 20 20 53 69 64 65 20 45 66  .. *. *  Side Ef
4d70: 66 65 63 74 73 3a 0a 20 2a 09 53 63 72 65 65 6e  fects:. *.Screen
4d80: 20 69 73 20 63 6c 65 61 72 65 64 2e 0a 20 2a 0a   is cleared.. *.
4d90: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   *--------------
4da0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4db0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4dc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4dd0: 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 73 74 61  --------. */.sta
4de0: 74 69 63 20 54 6b 57 69 6e 64 6f 77 20 2a 0a 43  tic TkWindow *.C
4df0: 72 65 61 74 65 52 6f 6f 74 28 69 6e 74 65 72 70  reateRoot(interp
4e00: 2c 20 64 69 73 70 50 74 72 29 0a 20 20 20 20 54  , dispPtr).    T
4e10: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
4e20: 70 3b 0a 20 20 20 20 54 6b 44 69 73 70 6c 61 79  p;.    TkDisplay
4e30: 20 2a 64 69 73 70 50 74 72 3b 0a 7b 0a 20 20 20   *dispPtr;.{.   
4e40: 20 54 6b 57 69 6e 64 6f 77 20 2a 77 69 6e 50 74   TkWindow *winPt
4e50: 72 20 3d 20 4e 65 77 57 69 6e 64 6f 77 28 64 69  r = NewWindow(di
4e60: 73 70 50 74 72 29 3b 0a 0a 20 20 20 20 77 69 6e  spPtr);..    win
4e70: 50 74 72 2d 3e 6d 61 69 6e 50 74 72 20 3d 20 4e  Ptr->mainPtr = N
4e80: 55 4c 4c 3b 0a 20 20 20 20 77 69 6e 50 74 72 2d  ULL;.    winPtr-
4e90: 3e 70 61 72 65 6e 74 50 74 72 20 3d 20 4e 55 4c  >parentPtr = NUL
4ea0: 4c 3b 0a 20 20 20 20 77 69 6e 50 74 72 2d 3e 6e  L;.    winPtr->n
4eb0: 65 78 74 50 74 72 20 3d 20 4e 55 4c 4c 3b 0a 20  extPtr = NULL;. 
4ec0: 20 20 20 77 69 6e 50 74 72 2d 3e 70 72 69 6f 72     winPtr->prior
4ed0: 50 74 72 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20  Ptr = NULL;.    
4ee0: 43 74 6b 53 65 74 52 65 63 74 28 26 77 69 6e 50  CtkSetRect(&winP
4ef0: 74 72 2d 3e 72 65 63 74 2c 20 30 2c 20 30 2c 0a  tr->rect, 0, 0,.
4f00: 20 20 20 20 09 20 20 20 20 43 74 6b 5f 44 69 73      .    Ctk_Dis
4f10: 70 6c 61 79 57 69 64 74 68 28 64 69 73 70 50 74  playWidth(dispPt
4f20: 72 29 2c 20 43 74 6b 5f 44 69 73 70 6c 61 79 48  r), Ctk_DisplayH
4f30: 65 69 67 68 74 28 64 69 73 70 50 74 72 29 29 3b  eight(dispPtr));
4f40: 0a 20 20 20 20 43 74 6b 43 6f 70 79 52 65 63 74  .    CtkCopyRect
4f50: 28 26 77 69 6e 50 74 72 2d 3e 6d 61 73 6b 52 65  (&winPtr->maskRe
4f60: 63 74 2c 20 26 77 69 6e 50 74 72 2d 3e 72 65 63  ct, &winPtr->rec
4f70: 74 29 3b 0a 20 20 20 20 43 74 6b 43 6f 70 79 52  t);.    CtkCopyR
4f80: 65 63 74 28 26 77 69 6e 50 74 72 2d 3e 63 6c 69  ect(&winPtr->cli
4f90: 70 52 65 63 74 2c 20 26 77 69 6e 50 74 72 2d 3e  pRect, &winPtr->
4fa0: 72 65 63 74 29 3b 0a 20 20 20 20 77 69 6e 50 74  rect);.    winPt
4fb0: 72 2d 3e 63 6c 69 70 52 67 6e 20 3d 20 43 74 6b  r->clipRgn = Ctk
4fc0: 43 72 65 61 74 65 52 65 67 69 6f 6e 28 26 28 77  CreateRegion(&(w
4fd0: 69 6e 50 74 72 2d 3e 6d 61 73 6b 52 65 63 74 29  inPtr->maskRect)
4fe0: 29 3b 0a 20 20 20 20 77 69 6e 50 74 72 2d 3e 61  );.    winPtr->a
4ff0: 62 73 4c 65 66 74 20 3d 20 30 3b 0a 20 20 20 20  bsLeft = 0;.    
5000: 77 69 6e 50 74 72 2d 3e 61 62 73 54 6f 70 20 3d  winPtr->absTop =
5010: 20 30 3b 0a 20 20 20 20 77 69 6e 50 74 72 2d 3e   0;.    winPtr->
5020: 66 6c 61 67 73 20 7c 3d 20 54 4b 5f 4d 41 50 50  flags |= TK_MAPP
5030: 45 44 7c 43 54 4b 5f 44 49 53 50 4c 41 59 45 44  ED|CTK_DISPLAYED
5040: 7c 54 4b 5f 54 4f 50 5f 4c 45 56 45 4c 3b 0a 20  |TK_TOP_LEVEL;. 
5050: 20 20 20 77 69 6e 50 74 72 2d 3e 63 6c 61 73 73     winPtr->class
5060: 55 69 64 20 3d 20 54 6b 5f 47 65 74 55 69 64 28  Uid = Tk_GetUid(
5070: 22 52 6f 6f 74 22 29 3b 0a 20 20 20 20 43 74 6b  "Root");.    Ctk
5080: 5f 43 6c 65 61 72 57 69 6e 64 6f 77 28 77 69 6e  _ClearWindow(win
5090: 50 74 72 29 3b 0a 0a 20 20 20 20 72 65 74 75 72  Ptr);..    retur
50a0: 6e 20 77 69 6e 50 74 72 3b 0a 7d 0a 0c 0a 2f 2a  n winPtr;.}.../*
50b0: 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  . *-------------
50c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
50d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
50e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
50f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 20 4e 65 77  ---------. * New
5100: 57 69 6e 64 6f 77 20 2d 2d 0a 20 2a 09 41 6c 6c  Window --. *.All
5110: 6f 63 61 74 65 20 61 20 77 69 6e 64 6f 77 20 73  ocate a window s
5120: 74 72 75 63 74 75 72 65 20 61 6e 64 20 69 6e 69  tructure and ini
5130: 74 69 61 6c 69 7a 65 20 63 6f 6e 74 65 6e 74 73  tialize contents
5140: 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a  .. *. * Results:
5150: 0a 20 2a 09 52 65 74 75 72 6e 73 20 70 6f 69 6e  . *.Returns poin
5160: 74 65 72 20 74 6f 20 77 69 6e 64 6f 77 2e 0a 20  ter to window.. 
5170: 2a 0a 20 2a 20 53 69 64 65 20 45 66 66 65 63 74  *. * Side Effect
5180: 73 3a 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d  s:. *. *--------
5190: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
51a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
51b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
51c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
51d0: 2a 2f 0a 73 74 61 74 69 63 20 54 6b 57 69 6e 64  */.static TkWind
51e0: 6f 77 20 2a 0a 4e 65 77 57 69 6e 64 6f 77 28 64  ow *.NewWindow(d
51f0: 69 73 70 50 74 72 29 0a 20 20 20 20 54 6b 44 69  ispPtr).    TkDi
5200: 73 70 6c 61 79 20 2a 64 69 73 70 50 74 72 3b 0a  splay *dispPtr;.
5210: 7b 0a 20 20 20 20 54 6b 57 69 6e 64 6f 77 20 2a  {.    TkWindow *
5220: 77 69 6e 50 74 72 20 3d 20 28 54 6b 57 69 6e 64  winPtr = (TkWind
5230: 6f 77 20 2a 29 20 63 6b 61 6c 6c 6f 63 28 73 69  ow *) ckalloc(si
5240: 7a 65 6f 66 28 54 6b 57 69 6e 64 6f 77 29 29 3b  zeof(TkWindow));
5250: 0a 0a 20 20 20 20 77 69 6e 50 74 72 2d 3e 64 69  ..    winPtr->di
5260: 73 70 50 74 72 20 3d 20 64 69 73 70 50 74 72 3b  spPtr = dispPtr;
5270: 0a 20 20 20 20 77 69 6e 50 74 72 2d 3e 70 61 74  .    winPtr->pat
5280: 68 4e 61 6d 65 20 3d 20 4e 55 4c 4c 3b 0a 20 20  hName = NULL;.  
5290: 20 20 77 69 6e 50 74 72 2d 3e 63 6c 61 73 73 55    winPtr->classU
52a0: 69 64 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 77  id = NULL;.    w
52b0: 69 6e 50 74 72 2d 3e 6d 61 69 6e 50 74 72 20 3d  inPtr->mainPtr =
52c0: 20 4e 55 4c 4c 3b 0a 20 20 20 20 77 69 6e 50 74   NULL;.    winPt
52d0: 72 2d 3e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20  r->flags = 0;.  
52e0: 20 20 77 69 6e 50 74 72 2d 3e 68 61 6e 64 6c 65    winPtr->handle
52f0: 72 4c 69 73 74 20 3d 20 4e 55 4c 4c 3b 0a 20 20  rList = NULL;.  
5300: 20 20 77 69 6e 50 74 72 2d 3e 6e 75 6d 54 61 67    winPtr->numTag
5310: 73 20 3d 20 30 3b 0a 20 20 20 20 77 69 6e 50 74  s = 0;.    winPt
5320: 72 2d 3e 6f 70 74 69 6f 6e 4c 65 76 65 6c 20 3d  r->optionLevel =
5330: 20 2d 31 3b 0a 20 20 20 20 77 69 6e 50 74 72 2d   -1;.    winPtr-
5340: 3e 74 61 67 50 74 72 20 3d 20 4e 55 4c 4c 3b 0a  >tagPtr = NULL;.
5350: 20 20 20 20 77 69 6e 50 74 72 2d 3e 63 68 69 6c      winPtr->chil
5360: 64 4c 69 73 74 2e 6e 65 78 74 50 74 72 20 3d 20  dList.nextPtr = 
5370: 48 45 41 44 5f 43 48 49 4c 44 28 77 69 6e 50 74  HEAD_CHILD(winPt
5380: 72 29 3b 0a 20 20 20 20 77 69 6e 50 74 72 2d 3e  r);.    winPtr->
5390: 63 68 69 6c 64 4c 69 73 74 2e 70 72 69 6f 72 50  childList.priorP
53a0: 74 72 20 3d 20 48 45 41 44 5f 43 48 49 4c 44 28  tr = HEAD_CHILD(
53b0: 77 69 6e 50 74 72 29 3b 0a 20 20 20 20 77 69 6e  winPtr);.    win
53c0: 50 74 72 2d 3e 62 6f 72 64 65 72 57 69 64 74 68  Ptr->borderWidth
53d0: 20 3d 20 30 3b 0a 20 20 20 20 77 69 6e 50 74 72   = 0;.    winPtr
53e0: 2d 3e 66 69 6c 6c 43 68 61 72 20 3d 20 27 20 27  ->fillChar = ' '
53f0: 3b 0a 20 20 20 20 77 69 6e 50 74 72 2d 3e 66 69  ;.    winPtr->fi
5400: 6c 6c 53 74 79 6c 65 20 3d 20 43 54 4b 5f 50 4c  llStyle = CTK_PL
5410: 41 49 4e 5f 53 54 59 4c 45 3b 0a 20 20 20 20 77  AIN_STYLE;.    w
5420: 69 6e 50 74 72 2d 3e 63 6c 69 70 52 67 6e 20 3d  inPtr->clipRgn =
5430: 20 4e 55 4c 4c 3b 0a 20 20 20 20 77 69 6e 50 74   NULL;.    winPt
5440: 72 2d 3e 72 65 71 57 69 64 74 68 20 3d 20 31 3b  r->reqWidth = 1;
5450: 0a 20 20 20 20 77 69 6e 50 74 72 2d 3e 72 65 71  .    winPtr->req
5460: 48 65 69 67 68 74 20 3d 20 31 3b 0a 20 20 20 20  Height = 1;.    
5470: 77 69 6e 50 74 72 2d 3e 67 65 6f 6d 4d 67 72 50  winPtr->geomMgrP
5480: 74 72 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 77  tr = NULL;.    w
5490: 69 6e 50 74 72 2d 3e 67 65 6f 6d 44 61 74 61 20  inPtr->geomData 
54a0: 3d 20 4e 55 4c 4c 3b 0a 0a 20 20 20 20 64 69 73  = NULL;..    dis
54b0: 70 50 74 72 2d 3e 6e 75 6d 57 69 6e 64 6f 77 73  pPtr->numWindows
54c0: 2b 2b 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 77  ++;.    return w
54d0: 69 6e 50 74 72 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a  inPtr;.}.../*. *
54e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
54f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5500: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5510: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
5520: 2a 0a 20 2a 20 54 6b 5f 44 65 73 74 72 6f 79 57  *. * Tk_DestroyW
5530: 69 6e 64 6f 77 20 2d 2d 0a 20 2a 0a 20 2a 09 44  indow --. *. *.D
5540: 65 73 74 72 6f 79 20 61 6e 20 65 78 69 73 74 69  estroy an existi
5550: 6e 67 20 77 69 6e 64 6f 77 2e 20 20 41 66 74 65  ng window.  Afte
5560: 72 20 74 68 69 73 20 63 61 6c 6c 2c 20 74 68 65  r this call, the
5570: 20 63 61 6c 6c 65 72 0a 20 2a 09 73 68 6f 75 6c   caller. *.shoul
5580: 64 20 6e 65 76 65 72 20 61 67 61 69 6e 20 75 73  d never again us
5590: 65 20 74 68 65 20 74 6f 6b 65 6e 2e 0a 20 2a 0a  e the token.. *.
55a0: 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 4e   * Results:. *.N
55b0: 6f 6e 65 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20  one.. *. * Side 
55c0: 65 66 66 65 63 74 73 3a 0a 20 2a 09 54 68 65 20  effects:. *.The 
55d0: 77 69 6e 64 6f 77 20 69 73 20 64 65 6c 65 74 65  window is delete
55e0: 64 2c 20 61 6c 6f 6e 67 20 77 69 74 68 20 61 6c  d, along with al
55f0: 6c 20 6f 66 20 69 74 73 20 63 68 69 6c 64 72 65  l of its childre
5600: 6e 2e 0a 20 2a 09 52 65 6c 65 76 61 6e 74 20 63  n.. *.Relevant c
5610: 61 6c 6c 62 61 63 6b 20 70 72 6f 63 65 64 75 72  allback procedur
5620: 65 73 20 61 72 65 20 69 6e 76 6f 6b 65 64 2e 0a  es are invoked..
5630: 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   *. *-----------
5640: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5650: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5660: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5670: 2d 2d 2d 0a 20 2a 2f 0a 0a 76 6f 69 64 0a 54 6b  ---. */..void.Tk
5680: 5f 44 65 73 74 72 6f 79 57 69 6e 64 6f 77 28 77  _DestroyWindow(w
5690: 69 6e 50 74 72 29 0a 20 20 20 20 54 6b 57 69 6e  inPtr).    TkWin
56a0: 64 6f 77 20 2a 77 69 6e 50 74 72 3b 0a 7b 0a 20  dow *winPtr;.{. 
56b0: 20 20 20 54 6b 57 69 6e 64 6f 77 20 2a 63 68 69     TkWindow *chi
56c0: 6c 64 3b 0a 20 20 20 20 54 6b 57 69 6e 64 6f 77  ld;.    TkWindow
56d0: 20 2a 6e 65 78 74 50 74 72 3b 0a 20 20 20 20 43   *nextPtr;.    C
56e0: 74 6b 5f 45 76 65 6e 74 20 65 76 65 6e 74 3b 0a  tk_Event event;.
56f0: 0a 20 20 20 20 69 66 20 28 77 69 6e 50 74 72 2d  .    if (winPtr-
5700: 3e 66 6c 61 67 73 20 26 20 54 4b 5f 41 4c 52 45  >flags & TK_ALRE
5710: 41 44 59 5f 44 45 41 44 29 20 7b 0a 09 2f 2a 0a  ADY_DEAD) {../*.
5720: 09 20 2a 20 41 20 64 65 73 74 72 6f 79 20 65 76  . * A destroy ev
5730: 65 6e 74 20 62 69 6e 64 69 6e 67 20 63 61 75 73  ent binding caus
5740: 65 64 20 74 68 65 20 77 69 6e 64 6f 77 20 74 6f  ed the window to
5750: 20 62 65 20 64 65 73 74 72 6f 79 65 64 0a 09 20   be destroyed.. 
5760: 2a 20 61 67 61 69 6e 2e 20 20 49 67 6e 6f 72 65  * again.  Ignore
5770: 20 74 68 65 20 72 65 71 75 65 73 74 2e 0a 09 20   the request... 
5780: 2a 2f 0a 0a 09 72 65 74 75 72 6e 3b 0a 20 20 20  */...return;.   
5790: 20 7d 0a 20 20 20 20 77 69 6e 50 74 72 2d 3e 66   }.    winPtr->f
57a0: 6c 61 67 73 20 7c 3d 20 54 4b 5f 41 4c 52 45 41  lags |= TK_ALREA
57b0: 44 59 5f 44 45 41 44 3b 0a 0a 20 20 20 20 43 74  DY_DEAD;..    Ct
57c0: 6b 5f 55 6e 6d 61 70 28 77 69 6e 50 74 72 29 3b  k_Unmap(winPtr);
57d0: 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20  ..    /*.     * 
57e0: 49 66 20 74 68 69 73 20 69 73 20 61 20 6d 61 69  If this is a mai
57f0: 6e 20 77 69 6e 64 6f 77 2c 20 72 65 6d 6f 76 65  n window, remove
5800: 20 69 74 20 66 72 6f 6d 20 74 68 65 20 6c 69 73   it from the lis
5810: 74 20 6f 66 20 6d 61 69 6e 0a 20 20 20 20 20 2a  t of main.     *
5820: 20 77 69 6e 64 6f 77 73 2e 20 20 54 68 69 73 20   windows.  This 
5830: 6e 65 65 64 73 20 74 6f 20 62 65 20 64 6f 6e 65  needs to be done
5840: 20 6e 6f 77 20 28 72 61 74 68 65 72 20 74 68 61   now (rather tha
5850: 6e 20 6c 61 74 65 72 20 77 69 74 68 0a 20 20 20  n later with.   
5860: 20 20 2a 20 61 6c 6c 20 74 68 65 20 6f 74 68 65    * all the othe
5870: 72 20 6d 61 69 6e 20 77 69 6e 64 6f 77 20 63 6c  r main window cl
5880: 65 61 6e 75 70 29 20 74 6f 20 68 61 6e 64 6c 65  eanup) to handle
5890: 20 73 69 74 75 61 74 69 6f 6e 73 20 77 68 65 72   situations wher
58a0: 65 0a 20 20 20 20 20 2a 20 61 20 64 65 73 74 72  e.     * a destr
58b0: 6f 79 20 62 69 6e 64 69 6e 67 20 66 6f 72 20 61  oy binding for a
58c0: 20 77 69 6e 64 6f 77 20 63 61 6c 6c 73 20 22 65   window calls "e
58d0: 78 69 74 22 2e 20 20 49 6e 20 74 68 69 73 20 63  xit".  In this c
58e0: 61 73 65 0a 20 20 20 20 20 2a 20 74 68 65 20 63  ase.     * the c
58f0: 68 69 6c 64 20 77 69 6e 64 6f 77 20 63 6c 65 61  hild window clea
5900: 6e 75 70 20 69 73 6e 27 74 20 63 6f 6d 70 6c 65  nup isn't comple
5910: 74 65 20 77 68 65 6e 20 65 78 69 74 20 69 73 20  te when exit is 
5920: 63 61 6c 6c 65 64 2c 0a 20 20 20 20 20 2a 20 73  called,.     * s
5930: 6f 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 20  o the reference 
5940: 63 6f 75 6e 74 20 6f 66 20 69 74 73 20 61 70 70  count of its app
5950: 6c 69 63 61 74 69 6f 6e 20 64 6f 65 73 6e 27 74  lication doesn't
5960: 20 67 6f 20 74 6f 20 7a 65 72 6f 0a 20 20 20 20   go to zero.    
5970: 20 2a 20 77 68 65 6e 20 65 78 69 74 20 63 61 6c   * when exit cal
5980: 6c 73 20 54 6b 5f 44 65 73 74 72 6f 79 57 69 6e  ls Tk_DestroyWin
5990: 64 6f 77 20 6f 6e 20 22 2e 22 2c 20 73 6f 20 74  dow on ".", so t
59a0: 68 65 20 6d 61 69 6e 20 77 69 6e 64 6f 77 0a 20  he main window. 
59b0: 20 20 20 20 2a 20 64 6f 65 73 6e 27 74 20 67 65      * doesn't ge
59c0: 74 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74  t removed from t
59d0: 68 65 20 6c 69 73 74 20 61 6e 64 20 65 78 69 74  he list and exit
59e0: 20 6c 6f 6f 70 73 20 69 6e 66 69 6e 69 74 65 6c   loops infinitel
59f0: 79 2e 0a 20 20 20 20 20 2a 20 45 76 65 6e 20 77  y..     * Even w
5a00: 6f 72 73 65 2c 20 69 66 20 22 64 65 73 74 72 6f  orse, if "destro
5a10: 79 20 2e 22 20 69 73 20 63 61 6c 6c 65 64 20 62  y ." is called b
5a20: 79 20 74 68 65 20 64 65 73 74 72 6f 79 20 62 69  y the destroy bi
5a30: 6e 64 69 6e 67 0a 20 20 20 20 20 2a 20 62 65 66  nding.     * bef
5a40: 6f 72 65 20 63 61 6c 6c 69 6e 67 20 22 65 78 69  ore calling "exi
5a50: 74 22 2c 20 22 65 78 69 74 22 20 77 69 6c 6c 20  t", "exit" will 
5a60: 61 74 74 65 6d 70 74 20 74 6f 20 64 65 73 74 72  attempt to destr
5a70: 6f 79 0a 20 20 20 20 20 2a 20 6d 61 69 6e 50 74  oy.     * mainPt
5a80: 72 2d 3e 77 69 6e 50 74 72 2c 20 77 68 69 63 68  r->winPtr, which
5a90: 20 6e 6f 20 6c 6f 6e 67 65 72 20 65 78 69 73 74   no longer exist
5aa0: 73 2c 20 61 6e 64 20 74 68 65 72 65 20 6d 61 79  s, and there may
5ab0: 20 62 65 20 61 0a 20 20 20 20 20 2a 20 63 6f 72   be a.     * cor
5ac0: 65 20 64 75 6d 70 2e 0a 20 20 20 20 20 2a 2f 0a  e dump..     */.
5ad0: 0a 20 20 20 20 69 66 20 28 77 69 6e 50 74 72 2d  .    if (winPtr-
5ae0: 3e 6d 61 69 6e 50 74 72 2d 3e 77 69 6e 50 74 72  >mainPtr->winPtr
5af0: 20 3d 3d 20 77 69 6e 50 74 72 29 20 7b 0a 09 69   == winPtr) {..i
5b00: 66 20 28 74 6b 4d 61 69 6e 57 69 6e 64 6f 77 4c  f (tkMainWindowL
5b10: 69 73 74 20 3d 3d 20 77 69 6e 50 74 72 2d 3e 6d  ist == winPtr->m
5b20: 61 69 6e 50 74 72 29 20 7b 0a 09 20 20 20 20 74  ainPtr) {..    t
5b30: 6b 4d 61 69 6e 57 69 6e 64 6f 77 4c 69 73 74 20  kMainWindowList 
5b40: 3d 20 77 69 6e 50 74 72 2d 3e 6d 61 69 6e 50 74  = winPtr->mainPt
5b50: 72 2d 3e 6e 65 78 74 50 74 72 3b 0a 09 7d 20 65  r->nextPtr;..} e
5b60: 6c 73 65 20 7b 0a 09 20 20 20 20 54 6b 4d 61 69  lse {..    TkMai
5b70: 6e 49 6e 66 6f 20 2a 70 72 65 76 50 74 72 3b 0a  nInfo *prevPtr;.
5b80: 0a 09 20 20 20 20 66 6f 72 20 28 70 72 65 76 50  ..    for (prevP
5b90: 74 72 20 3d 20 74 6b 4d 61 69 6e 57 69 6e 64 6f  tr = tkMainWindo
5ba0: 77 4c 69 73 74 3b 0a 09 09 20 20 20 20 70 72 65  wList;...    pre
5bb0: 76 50 74 72 2d 3e 6e 65 78 74 50 74 72 20 21 3d  vPtr->nextPtr !=
5bc0: 20 77 69 6e 50 74 72 2d 3e 6d 61 69 6e 50 74 72   winPtr->mainPtr
5bd0: 3b 0a 09 09 20 20 20 20 70 72 65 76 50 74 72 20  ;...    prevPtr 
5be0: 3d 20 70 72 65 76 50 74 72 2d 3e 6e 65 78 74 50  = prevPtr->nextP
5bf0: 74 72 29 20 7b 0a 09 09 2f 2a 20 45 6d 70 74 79  tr) {.../* Empty
5c00: 20 6c 6f 6f 70 20 62 6f 64 79 2e 20 2a 2f 0a 09   loop body. */..
5c10: 20 20 20 20 7d 0a 09 20 20 20 20 70 72 65 76 50      }..    prevP
5c20: 74 72 2d 3e 6e 65 78 74 50 74 72 20 3d 20 77 69  tr->nextPtr = wi
5c30: 6e 50 74 72 2d 3e 6d 61 69 6e 50 74 72 2d 3e 6e  nPtr->mainPtr->n
5c40: 65 78 74 50 74 72 3b 0a 09 7d 0a 09 74 6b 5f 4e  extPtr;..}..tk_N
5c50: 75 6d 4d 61 69 6e 57 69 6e 64 6f 77 73 2d 2d 3b  umMainWindows--;
5c60: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20  .    }..    /*. 
5c70: 20 20 20 20 2a 20 52 65 63 75 72 73 69 76 65 6c      * Recursivel
5c80: 79 20 64 65 73 74 72 6f 79 20 63 68 69 6c 64 72  y destroy childr
5c90: 65 6e 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20  en..     */..   
5ca0: 20 66 6f 72 20 28 63 68 69 6c 64 20 3d 20 42 4f   for (child = BO
5cb0: 54 54 4f 4d 5f 43 48 49 4c 44 28 77 69 6e 50 74  TTOM_CHILD(winPt
5cc0: 72 29 3b 0a 09 20 20 20 20 63 68 69 6c 64 20 21  r);..    child !
5cd0: 3d 20 48 45 41 44 5f 43 48 49 4c 44 28 77 69 6e  = HEAD_CHILD(win
5ce0: 50 74 72 29 3b 0a 09 20 20 20 20 63 68 69 6c 64  Ptr);..    child
5cf0: 20 3d 20 6e 65 78 74 50 74 72 29 20 7b 0a 09 6e   = nextPtr) {..n
5d00: 65 78 74 50 74 72 20 3d 20 63 68 69 6c 64 2d 3e  extPtr = child->
5d10: 6e 65 78 74 50 74 72 3b 0a 09 54 6b 5f 44 65 73  nextPtr;..Tk_Des
5d20: 74 72 6f 79 57 69 6e 64 6f 77 28 63 68 69 6c 64  troyWindow(child
5d30: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20  );.    }.    if 
5d40: 28 77 69 6e 50 74 72 2d 3e 66 6c 61 67 73 20 26  (winPtr->flags &
5d50: 20 43 54 4b 5f 48 41 53 5f 54 4f 50 4c 45 56 45   CTK_HAS_TOPLEVE
5d60: 4c 5f 43 48 49 4c 44 29 20 7b 0a 09 2f 2a 0a 09  L_CHILD) {../*..
5d70: 20 2a 20 54 68 69 73 20 77 69 6e 64 6f 77 20 68   * This window h
5d80: 61 73 20 74 6f 70 6c 65 76 65 6c 20 63 68 69 6c  as toplevel chil
5d90: 64 72 65 6e 2c 20 77 68 69 63 68 20 61 72 65 20  dren, which are 
5da0: 6e 6f 74 20 73 74 6f 72 65 64 0a 09 20 2a 20 69  not stored.. * i
5db0: 6e 20 74 68 65 20 63 68 69 6c 64 20 6c 69 73 74  n the child list
5dc0: 2e 20 20 43 68 65 63 6b 20 61 6c 6c 20 74 68 65  .  Check all the
5dd0: 20 63 68 69 6c 64 72 65 6e 20 6f 66 20 61 6c 6c   children of all
5de0: 20 72 6f 6f 74 0a 09 20 2a 20 77 69 6e 64 6f 77   root.. * window
5df0: 73 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 69  s to see if thei
5e00: 72 20 6e 61 6d 65 20 69 73 20 61 6e 20 65 78 74  r name is an ext
5e10: 65 6e 73 69 6f 6e 20 6f 66 20 74 68 69 73 0a 09  ension of this..
5e20: 20 2a 20 77 69 6e 64 6f 77 73 20 6e 61 6d 65 20   * windows name 
5e30: 2d 20 69 66 20 73 6f 20 64 65 73 74 72 6f 79 20  - if so destroy 
5e40: 74 68 65 20 74 6f 70 20 6c 65 76 65 6c 20 77 69  the top level wi
5e50: 6e 64 6f 77 2e 0a 09 20 2a 2f 0a 09 63 68 61 72  ndow... */..char
5e60: 20 2a 70 61 74 68 20 3d 20 54 6b 5f 50 61 74 68   *path = Tk_Path
5e70: 4e 61 6d 65 28 77 69 6e 50 74 72 29 3b 0a 09 63  Name(winPtr);..c
5e80: 68 61 72 20 2a 63 68 69 6c 64 50 61 74 68 3b 0a  har *childPath;.
5e90: 09 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20 73 74  .int length = st
5ea0: 72 6c 65 6e 28 70 61 74 68 29 3b 0a 09 54 6b 57  rlen(path);..TkW
5eb0: 69 6e 64 6f 77 20 2a 70 72 69 6f 72 50 74 72 3b  indow *priorPtr;
5ec0: 0a 09 54 6b 44 69 73 70 6c 61 79 20 2a 64 69 73  ..TkDisplay *dis
5ed0: 70 50 74 72 3b 0a 0a 09 66 6f 72 20 28 64 69 73  pPtr;...for (dis
5ee0: 70 50 74 72 20 3d 20 74 6b 44 69 73 70 6c 61 79  pPtr = tkDisplay
5ef0: 4c 69 73 74 3b 0a 09 09 64 69 73 70 50 74 72 20  List;...dispPtr 
5f00: 21 3d 20 4e 55 4c 4c 3b 0a 09 20 20 20 20 09 64  != NULL;..    .d
5f10: 69 73 70 50 74 72 20 3d 20 64 69 73 70 50 74 72  ispPtr = dispPtr
5f20: 2d 3e 6e 65 78 74 50 74 72 29 20 7b 0a 09 20 20  ->nextPtr) {..  
5f30: 20 20 70 72 69 6f 72 50 74 72 20 3d 20 48 45 41    priorPtr = HEA
5f40: 44 5f 43 48 49 4c 44 28 64 69 73 70 50 74 72 2d  D_CHILD(dispPtr-
5f50: 3e 72 6f 6f 74 50 74 72 29 3b 0a 09 20 20 20 20  >rootPtr);..    
5f60: 63 68 69 6c 64 20 3d 20 42 4f 54 54 4f 4d 5f 43  child = BOTTOM_C
5f70: 48 49 4c 44 28 64 69 73 70 50 74 72 2d 3e 72 6f  HILD(dispPtr->ro
5f80: 6f 74 50 74 72 29 3b 0a 09 20 20 20 20 77 68 69  otPtr);..    whi
5f90: 6c 65 20 28 63 68 69 6c 64 20 21 3d 20 48 45 41  le (child != HEA
5fa0: 44 5f 43 48 49 4c 44 28 64 69 73 70 50 74 72 2d  D_CHILD(dispPtr-
5fb0: 3e 72 6f 6f 74 50 74 72 29 29 20 7b 0a 09 20 20  >rootPtr)) {..  
5fc0: 20 20 20 20 20 20 63 68 69 6c 64 50 61 74 68 20        childPath 
5fd0: 3d 20 54 6b 5f 50 61 74 68 4e 61 6d 65 28 63 68  = Tk_PathName(ch
5fe0: 69 6c 64 29 3b 0a 09 09 69 66 20 28 73 74 72 6e  ild);...if (strn
5ff0: 63 6d 70 28 63 68 69 6c 64 50 61 74 68 2c 20 70  cmp(childPath, p
6000: 61 74 68 2c 20 6c 65 6e 67 74 68 29 20 3d 3d 20  ath, length) == 
6010: 30 0a 09 09 09 26 26 20 28 63 68 69 6c 64 50 61  0....&& (childPa
6020: 74 68 5b 6c 65 6e 67 74 68 5d 20 3d 3d 20 27 2e  th[length] == '.
6030: 27 0a 09 09 09 7c 7c 20 28 6c 65 6e 67 74 68 20  '....|| (length 
6040: 3d 3d 20 31 20 26 26 20 63 68 69 6c 64 50 61 74  == 1 && childPat
6050: 68 5b 31 5d 20 21 3d 20 27 5c 30 27 29 29 29 20  h[1] != '\0'))) 
6060: 7b 0a 09 09 20 20 20 20 54 6b 5f 44 65 73 74 72  {...    Tk_Destr
6070: 6f 79 57 69 6e 64 6f 77 28 63 68 69 6c 64 29 3b  oyWindow(child);
6080: 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 20 20  ...} else {...  
6090: 20 20 70 72 69 6f 72 50 74 72 20 3d 20 63 68 69    priorPtr = chi
60a0: 6c 64 3b 0a 09 09 7d 0a 09 09 63 68 69 6c 64 20  ld;...}...child 
60b0: 3d 20 70 72 69 6f 72 50 74 72 2d 3e 6e 65 78 74  = priorPtr->next
60c0: 50 74 72 3b 0a 09 20 20 20 20 7d 0a 09 7d 0a 20  Ptr;..    }..}. 
60d0: 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 20     }..    /*.   
60e0: 20 20 2a 20 47 65 6e 65 72 61 74 65 20 61 20 44    * Generate a D
60f0: 65 73 74 72 6f 79 20 65 76 65 6e 74 2e 0a 20 20  estroy event..  
6100: 20 20 20 2a 0a 20 20 20 20 20 2a 20 4e 6f 74 65     *.     * Note
6110: 3a 20 69 66 20 74 68 65 20 77 69 6e 64 6f 77 27  : if the window'
6120: 73 20 70 61 74 68 4e 61 6d 65 20 69 73 20 4e 55  s pathName is NU
6130: 4c 4c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74  LL it means that
6140: 20 74 68 65 20 77 69 6e 64 6f 77 0a 20 20 20 20   the window.    
6150: 20 2a 20 77 61 73 20 6e 6f 74 20 73 75 63 63 65   * was not succe
6160: 73 73 66 75 6c 6c 79 20 69 6e 69 74 69 61 6c 69  ssfully initiali
6170: 7a 65 64 20 69 6e 20 74 68 65 20 66 69 72 73 74  zed in the first
6180: 20 70 6c 61 63 65 2c 20 73 6f 20 77 65 20 73 68   place, so we sh
6190: 6f 75 6c 64 0a 20 20 20 20 20 2a 20 6e 6f 74 20  ould.     * not 
61a0: 6d 61 6b 65 20 74 68 65 20 77 69 6e 64 6f 77 20  make the window 
61b0: 65 78 69 73 74 20 6f 72 20 67 65 6e 65 72 61 74  exist or generat
61c0: 65 20 74 68 65 20 65 76 65 6e 74 2e 0a 20 20 20  e the event..   
61d0: 20 20 2a 2f 0a 0a 20 20 20 20 69 66 20 28 77 69    */..    if (wi
61e0: 6e 50 74 72 2d 3e 70 61 74 68 4e 61 6d 65 20 21  nPtr->pathName !
61f0: 3d 20 4e 55 4c 4c 29 20 7b 0a 09 65 76 65 6e 74  = NULL) {..event
6200: 2e 74 79 70 65 20 3d 20 43 54 4b 5f 44 45 53 54  .type = CTK_DEST
6210: 52 4f 59 5f 45 56 45 4e 54 3b 0a 09 65 76 65 6e  ROY_EVENT;..even
6220: 74 2e 77 69 6e 64 6f 77 20 3d 20 77 69 6e 50 74  t.window = winPt
6230: 72 3b 0a 09 54 6b 5f 48 61 6e 64 6c 65 45 76 65  r;..Tk_HandleEve
6240: 6e 74 28 26 65 76 65 6e 74 29 3b 0a 20 20 20 20  nt(&event);.    
6250: 7d 0a 0a 20 20 20 20 55 6e 6c 69 6e 6b 57 69 6e  }..    UnlinkWin
6260: 64 6f 77 28 77 69 6e 50 74 72 29 3b 0a 20 20 20  dow(winPtr);.   
6270: 20 54 6b 45 76 65 6e 74 44 65 61 64 57 69 6e 64   TkEventDeadWind
6280: 6f 77 28 77 69 6e 50 74 72 29 3b 0a 20 20 20 20  ow(winPtr);.    
6290: 69 66 20 28 77 69 6e 50 74 72 2d 3e 74 61 67 50  if (winPtr->tagP
62a0: 74 72 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 54  tr != NULL) {..T
62b0: 6b 46 72 65 65 42 69 6e 64 69 6e 67 54 61 67 73  kFreeBindingTags
62c0: 28 77 69 6e 50 74 72 29 3b 0a 20 20 20 20 7d 0a  (winPtr);.    }.
62d0: 20 20 20 20 54 6b 4f 70 74 69 6f 6e 44 65 61 64      TkOptionDead
62e0: 57 69 6e 64 6f 77 28 77 69 6e 50 74 72 29 3b 0a  Window(winPtr);.
62f0: 20 20 20 20 54 6b 46 6f 63 75 73 44 65 61 64 57      TkFocusDeadW
6300: 69 6e 64 6f 77 28 77 69 6e 50 74 72 29 3b 0a 0a  indow(winPtr);..
6310: 20 20 20 20 69 66 20 28 77 69 6e 50 74 72 2d 3e      if (winPtr->
6320: 6d 61 69 6e 50 74 72 20 21 3d 20 4e 55 4c 4c 29  mainPtr != NULL)
6330: 20 7b 0a 09 69 66 20 28 77 69 6e 50 74 72 2d 3e   {..if (winPtr->
6340: 70 61 74 68 4e 61 6d 65 20 21 3d 20 4e 55 4c 4c  pathName != NULL
6350: 29 20 7b 0a 09 20 20 20 20 54 6b 5f 44 65 6c 65  ) {..    Tk_Dele
6360: 74 65 41 6c 6c 42 69 6e 64 69 6e 67 73 28 77 69  teAllBindings(wi
6370: 6e 50 74 72 2d 3e 6d 61 69 6e 50 74 72 2d 3e 62  nPtr->mainPtr->b
6380: 69 6e 64 69 6e 67 54 61 62 6c 65 2c 0a 09 09 20  indingTable,... 
6390: 20 20 20 28 43 6c 69 65 6e 74 44 61 74 61 29 20     (ClientData) 
63a0: 77 69 6e 50 74 72 2d 3e 70 61 74 68 4e 61 6d 65  winPtr->pathName
63b0: 29 3b 0a 09 20 20 20 20 54 63 6c 5f 44 65 6c 65  );..    Tcl_Dele
63c0: 74 65 48 61 73 68 45 6e 74 72 79 28 54 63 6c 5f  teHashEntry(Tcl_
63d0: 46 69 6e 64 48 61 73 68 45 6e 74 72 79 28 26 77  FindHashEntry(&w
63e0: 69 6e 50 74 72 2d 3e 6d 61 69 6e 50 74 72 2d 3e  inPtr->mainPtr->
63f0: 6e 61 6d 65 54 61 62 6c 65 2c 0a 09 09 20 20 20  nameTable,...   
6400: 20 77 69 6e 50 74 72 2d 3e 70 61 74 68 4e 61 6d   winPtr->pathNam
6410: 65 29 29 3b 0a 09 7d 0a 09 77 69 6e 50 74 72 2d  e));..}..winPtr-
6420: 3e 6d 61 69 6e 50 74 72 2d 3e 72 65 66 43 6f 75  >mainPtr->refCou
6430: 6e 74 2d 2d 3b 0a 09 69 66 20 28 77 69 6e 50 74  nt--;..if (winPt
6440: 72 2d 3e 6d 61 69 6e 50 74 72 2d 3e 72 65 66 43  r->mainPtr->refC
6450: 6f 75 6e 74 20 3d 3d 20 30 29 20 7b 0a 09 20 20  ount == 0) {..  
6460: 20 20 72 65 67 69 73 74 65 72 20 54 6b 43 6d 64    register TkCmd
6470: 20 2a 63 6d 64 50 74 72 3b 0a 0a 09 20 20 20 20   *cmdPtr;...    
6480: 2f 2a 0a 09 20 20 20 20 20 2a 20 57 65 20 6a 75  /*..     * We ju
6490: 73 74 20 64 65 6c 65 74 65 64 20 74 68 65 20 6c  st deleted the l
64a0: 61 73 74 20 77 69 6e 64 6f 77 20 69 6e 20 74 68  ast window in th
64b0: 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 20 20  e application.  
64c0: 44 65 6c 65 74 65 0a 09 20 20 20 20 20 2a 20 74  Delete..     * t
64d0: 68 65 20 54 6b 4d 61 69 6e 49 6e 66 6f 20 73 74  he TkMainInfo st
64e0: 72 75 63 74 75 72 65 20 74 6f 6f 20 61 6e 64 20  ructure too and 
64f0: 72 65 70 6c 61 63 65 20 61 6c 6c 20 6f 66 20 54  replace all of T
6500: 6b 27 73 20 63 6f 6d 6d 61 6e 64 73 0a 09 20 20  k's commands..  
6510: 20 20 20 2a 20 77 69 74 68 20 64 75 6d 6d 79 20     * with dummy 
6520: 63 6f 6d 6d 61 6e 64 73 20 74 68 61 74 20 72 65  commands that re
6530: 74 75 72 6e 20 65 72 72 6f 72 73 20 28 65 78 63  turn errors (exc
6540: 65 70 74 20 64 6f 6e 27 74 20 72 65 70 6c 61 63  ept don't replac
6550: 65 0a 09 20 20 20 20 20 2a 20 74 68 65 20 22 65  e..     * the "e
6560: 78 69 74 22 20 63 6f 6d 6d 61 6e 64 2c 20 73 69  xit" command, si
6570: 6e 63 65 20 69 74 20 6d 61 79 20 62 65 20 6e 65  nce it may be ne
6580: 65 64 65 64 20 66 6f 72 20 74 68 65 20 61 70 70  eded for the app
6590: 6c 69 63 61 74 69 6f 6e 0a 09 20 20 20 20 20 2a  lication..     *
65a0: 20 74 6f 20 65 78 69 74 29 2e 0a 09 20 20 20 20   to exit)...    
65b0: 20 2a 2f 0a 0a 09 20 20 20 20 66 6f 72 20 28 63   */...    for (c
65c0: 6d 64 50 74 72 20 3d 20 63 6f 6d 6d 61 6e 64 73  mdPtr = commands
65d0: 3b 20 63 6d 64 50 74 72 2d 3e 6e 61 6d 65 20 21  ; cmdPtr->name !
65e0: 3d 20 4e 55 4c 4c 3b 20 63 6d 64 50 74 72 2b 2b  = NULL; cmdPtr++
65f0: 29 20 7b 0a 09 09 69 66 20 28 63 6d 64 50 74 72  ) {...if (cmdPtr
6600: 2d 3e 63 6d 64 50 72 6f 63 20 21 3d 20 54 6b 5f  ->cmdProc != Tk_
6610: 45 78 69 74 43 6d 64 29 20 7b 0a 09 09 20 20 20  ExitCmd) {...   
6620: 20 54 63 6c 5f 43 72 65 61 74 65 43 6f 6d 6d 61   Tcl_CreateComma
6630: 6e 64 28 77 69 6e 50 74 72 2d 3e 6d 61 69 6e 50  nd(winPtr->mainP
6640: 74 72 2d 3e 69 6e 74 65 72 70 2c 20 63 6d 64 50  tr->interp, cmdP
6650: 74 72 2d 3e 6e 61 6d 65 2c 0a 09 09 09 20 20 20  tr->name,....   
6660: 20 54 6b 44 65 61 64 41 70 70 43 6d 64 2c 20 28   TkDeadAppCmd, (
6670: 43 6c 69 65 6e 74 44 61 74 61 29 20 4e 55 4c 4c  ClientData) NULL
6680: 2c 0a 09 09 09 20 20 20 20 28 76 6f 69 64 20 28  ,....    (void (
6690: 2a 29 28 29 29 20 4e 55 4c 4c 29 3b 0a 09 09 7d  *)()) NULL);...}
66a0: 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 69 66 20  ..    }..    if 
66b0: 28 77 69 6e 50 74 72 2d 3e 6d 61 69 6e 50 74 72  (winPtr->mainPtr
66c0: 2d 3e 62 69 6e 64 69 6e 67 44 65 70 74 68 20 3d  ->bindingDepth =
66d0: 3d 20 30 29 20 7b 0a 09 09 54 6b 44 65 6c 65 74  = 0) {...TkDelet
66e0: 65 4d 61 69 6e 28 77 69 6e 50 74 72 2d 3e 6d 61  eMain(winPtr->ma
66f0: 69 6e 50 74 72 29 3b 0a 09 20 20 20 20 7d 0a 09  inPtr);..    }..
6700: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 20  }.    }..    if 
6710: 28 28 2d 2d 28 77 69 6e 50 74 72 2d 3e 64 69 73  ((--(winPtr->dis
6720: 70 50 74 72 2d 3e 6e 75 6d 57 69 6e 64 6f 77 73  pPtr->numWindows
6730: 29 29 20 3d 3d 20 31 29 20 7b 0a 09 54 6b 44 69  )) == 1) {..TkDi
6740: 73 70 6c 61 79 20 2a 64 69 73 70 50 74 72 20 3d  splay *dispPtr =
6750: 20 77 69 6e 50 74 72 2d 3e 64 69 73 70 50 74 72   winPtr->dispPtr
6760: 3b 0a 0a 20 20 20 20 09 43 74 6b 44 69 73 70 6c  ;..    .CtkDispl
6770: 61 79 45 6e 64 28 64 69 73 70 50 74 72 29 3b 0a  ayEnd(dispPtr);.
6780: 20 20 20 20 09 69 66 20 28 74 6b 44 69 73 70 6c      .if (tkDispl
6790: 61 79 4c 69 73 74 20 3d 3d 20 64 69 73 70 50 74  ayList == dispPt
67a0: 72 29 20 7b 0a 20 20 20 20 09 20 20 20 20 74 6b  r) {.    .    tk
67b0: 44 69 73 70 6c 61 79 4c 69 73 74 20 3d 20 64 69  DisplayList = di
67c0: 73 70 50 74 72 2d 3e 6e 65 78 74 50 74 72 3b 0a  spPtr->nextPtr;.
67d0: 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 54  .} else {..    T
67e0: 6b 44 69 73 70 6c 61 79 20 2a 70 72 65 76 44 69  kDisplay *prevDi
67f0: 73 70 50 74 72 3b 0a 09 20 20 20 20 66 6f 72 20  spPtr;..    for 
6800: 28 70 72 65 76 44 69 73 70 50 74 72 20 3d 20 74  (prevDispPtr = t
6810: 6b 44 69 73 70 6c 61 79 4c 69 73 74 3b 0a 09 20  kDisplayList;.. 
6820: 20 20 20 09 20 20 20 20 70 72 65 76 44 69 73 70     .    prevDisp
6830: 50 74 72 20 21 3d 20 4e 55 4c 4c 3b 0a 09 20 20  Ptr != NULL;..  
6840: 20 20 09 20 20 20 20 70 72 65 76 44 69 73 70 50    .    prevDispP
6850: 74 72 20 3d 20 70 72 65 76 44 69 73 70 50 74 72  tr = prevDispPtr
6860: 2d 3e 6e 65 78 74 50 74 72 29 20 7b 0a 09 09 69  ->nextPtr) {...i
6870: 66 20 28 70 72 65 76 44 69 73 70 50 74 72 2d 3e  f (prevDispPtr->
6880: 6e 65 78 74 50 74 72 20 3d 3d 20 64 69 73 70 50  nextPtr == dispP
6890: 74 72 29 20 7b 0a 09 09 20 20 20 20 70 72 65 76  tr) {...    prev
68a0: 44 69 73 70 50 74 72 2d 3e 6e 65 78 74 50 74 72  DispPtr->nextPtr
68b0: 20 3d 20 64 69 73 70 50 74 72 2d 3e 6e 65 78 74   = dispPtr->next
68c0: 50 74 72 3b 0a 09 09 20 20 20 20 62 72 65 61 6b  Ptr;...    break
68d0: 3b 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a  ;...}..    }..}.
68e0: 20 20 20 20 09 63 6b 66 72 65 65 28 28 63 68 61      .ckfree((cha
68f0: 72 20 2a 29 20 64 69 73 70 50 74 72 2d 3e 72 6f  r *) dispPtr->ro
6900: 6f 74 50 74 72 29 3b 0a 20 20 20 20 09 63 6b 66  otPtr);.    .ckf
6910: 72 65 65 28 28 63 68 61 72 20 2a 29 20 64 69 73  ree((char *) dis
6920: 70 50 74 72 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  pPtr);.    }..  
6930: 20 20 63 6b 66 72 65 65 28 28 63 68 61 72 20 2a    ckfree((char *
6940: 29 20 77 69 6e 50 74 72 29 3b 0a 7d 0a 0c 0a 2f  ) winPtr);.}.../
6950: 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *. *------------
6960: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6970: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6980: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6990: 0a 20 2a 20 54 6b 44 65 6c 65 74 65 4d 61 69 6e  . * TkDeleteMain
69a0: 20 2d 2d 0a 20 2a 0a 20 2a 09 52 65 6c 65 61 73   --. *. *.Releas
69b0: 65 20 72 65 73 6f 75 72 63 65 73 20 66 6f 72 20  e resources for 
69c0: 61 20 54 6b 4d 61 69 6e 49 6e 66 6f 20 73 74 72  a TkMainInfo str
69d0: 75 63 74 75 72 65 2e 0a 20 2a 09 41 6c 6c 20 77  ucture.. *.All w
69e0: 69 6e 64 6f 77 73 20 66 6f 72 20 74 68 69 73 20  indows for this 
69f0: 6d 61 69 6e 20 73 68 6f 75 6c 64 20 61 6c 72 65  main should alre
6a00: 61 64 79 20 68 61 76 65 0a 20 2a 09 62 65 65 6e  ady have. *.been
6a10: 20 64 65 73 74 72 6f 79 65 64 2e 20 20 54 68 65   destroyed.  The
6a20: 20 70 6f 69 6e 74 65 72 20 73 68 6f 75 6c 64 20   pointer should 
6a30: 6e 6f 20 62 65 20 72 65 66 65 72 65 6e 63 65 64  no be referenced
6a40: 0a 20 2a 09 61 67 61 69 6e 2e 0a 20 2a 0a 20 2a  . *.again.. *. *
6a50: 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 4e 6f 6e   Results:. *.Non
6a60: 65 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20 45 66  e.. *. * Side Ef
6a70: 66 65 63 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a  fects:. *.None..
6a80: 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   *. *-----------
6a90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6aa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6ab0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6ac0: 2d 0a 20 2a 2f 0a 0a 76 6f 69 64 0a 54 6b 44 65  -. */..void.TkDe
6ad0: 6c 65 74 65 4d 61 69 6e 28 6d 61 69 6e 50 74 72  leteMain(mainPtr
6ae0: 29 0a 20 20 20 20 54 6b 4d 61 69 6e 49 6e 66 6f  ).    TkMainInfo
6af0: 20 2a 6d 61 69 6e 50 74 72 3b 0a 7b 0a 20 20 20   *mainPtr;.{.   
6b00: 20 54 63 6c 5f 44 65 6c 65 74 65 48 61 73 68 54   Tcl_DeleteHashT
6b10: 61 62 6c 65 28 26 6d 61 69 6e 50 74 72 2d 3e 6e  able(&mainPtr->n
6b20: 61 6d 65 54 61 62 6c 65 29 3b 0a 20 20 20 20 54  ameTable);.    T
6b30: 6b 5f 44 65 6c 65 74 65 42 69 6e 64 69 6e 67 54  k_DeleteBindingT
6b40: 61 62 6c 65 28 6d 61 69 6e 50 74 72 2d 3e 62 69  able(mainPtr->bi
6b50: 6e 64 69 6e 67 54 61 62 6c 65 29 3b 0a 20 20 20  ndingTable);.   
6b60: 20 63 6b 66 72 65 65 28 28 63 68 61 72 20 2a 29   ckfree((char *)
6b70: 20 6d 61 69 6e 50 74 72 29 3b 0a 7d 0a 0c 0a 2f   mainPtr);.}.../
6b80: 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *. *------------
6b90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6ba0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6bb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6bc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a  ----------. *. *
6bd0: 20 54 6b 5f 52 65 73 74 61 63 6b 57 69 6e 64 6f   Tk_RestackWindo
6be0: 77 20 2d 2d 0a 20 2a 0a 20 2a 20 20 20 20 20 20  w --. *. *      
6bf0: 43 68 61 6e 67 65 20 61 20 77 69 6e 64 6f 77 27  Change a window'
6c00: 73 20 70 6f 73 69 74 69 6f 6e 20 69 6e 20 74 68  s position in th
6c10: 65 20 73 74 61 63 6b 69 6e 67 20 6f 72 64 65 72  e stacking order
6c20: 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a  .. *. * Results:
6c30: 0a 20 2a 20 20 20 20 20 20 54 43 4c 5f 4f 4b 20  . *      TCL_OK 
6c40: 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 72 65 74 75  is normally retu
6c50: 72 6e 65 64 2e 20 20 49 66 20 6f 74 68 65 72 20  rned.  If other 
6c60: 69 73 20 6e 6f 74 20 61 20 64 65 73 63 65 6e 64  is not a descend
6c70: 61 6e 74 0a 20 2a 20 20 20 20 20 20 6f 66 20 74  ant. *      of t
6c80: 6b 77 69 6e 27 73 20 70 61 72 65 6e 74 20 74 68  kwin's parent th
6c90: 65 6e 20 54 43 4c 5f 45 52 52 4f 52 20 69 73 20  en TCL_ERROR is 
6ca0: 72 65 74 75 72 6e 65 64 20 61 6e 64 20 74 6b 77  returned and tkw
6cb0: 69 6e 20 69 73 0a 20 2a 20 20 20 20 20 20 6e 6f  in is. *      no
6cc0: 74 20 72 65 70 6f 73 69 74 69 6f 6e 65 64 2e 0a  t repositioned..
6cd0: 20 2a 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63   *. * Side effec
6ce0: 74 73 3a 0a 20 2a 20 20 20 20 20 20 54 6b 77 69  ts:. *      Tkwi
6cf0: 6e 20 69 73 20 72 65 70 6f 73 69 74 69 6f 6e 65  n is repositione
6d00: 64 20 69 6e 20 74 68 65 20 73 74 61 63 6b 69 6e  d in the stackin
6d10: 67 20 6f 72 64 65 72 2e 0a 20 2a 0a 20 2a 2d 2d  g order.. *. *--
6d20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6d30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6d40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6d50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6d60: 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 69 6e 74 0a 54 6b  ----. */..int.Tk
6d70: 5f 52 65 73 74 61 63 6b 57 69 6e 64 6f 77 28 77  _RestackWindow(w
6d80: 69 6e 50 74 72 2c 20 61 62 6f 76 65 42 65 6c 6f  inPtr, aboveBelo
6d90: 77 2c 20 6f 74 68 65 72 50 74 72 29 0a 20 20 20  w, otherPtr).   
6da0: 20 54 6b 57 69 6e 64 6f 77 20 2a 77 69 6e 50 74   TkWindow *winPt
6db0: 72 3b 0a 20 20 20 20 69 6e 74 20 61 62 6f 76 65  r;.    int above
6dc0: 42 65 6c 6f 77 3b 0a 20 20 20 20 54 6b 57 69 6e  Below;.    TkWin
6dd0: 64 6f 77 20 2a 6f 74 68 65 72 50 74 72 3b 0a 7b  dow *otherPtr;.{
6de0: 0a 20 20 20 20 69 6e 74 20 72 65 64 69 73 70 6c  .    int redispl
6df0: 61 79 20 3d 20 30 3b 0a 0a 20 20 20 20 69 66 20  ay = 0;..    if 
6e00: 28 6f 74 68 65 72 50 74 72 29 20 7b 0a 09 2f 2a  (otherPtr) {../*
6e10: 0a 09 20 2a 20 46 69 6e 64 20 61 6e 63 65 73 74  .. * Find ancest
6e20: 6f 72 20 6f 66 20 6f 74 68 65 72 50 74 72 20 28  or of otherPtr (
6e30: 6f 72 20 6f 74 68 65 72 50 74 72 20 69 74 73 65  or otherPtr itse
6e40: 6c 66 29 20 74 68 61 74 20 69 73 20 61 0a 09 20  lf) that is a.. 
6e50: 2a 20 73 69 62 6c 69 6e 67 20 6f 66 20 77 69 6e  * sibling of win
6e60: 50 74 72 2e 0a 09 20 2a 2f 0a 09 77 68 69 6c 65  Ptr... */..while
6e70: 20 28 6f 74 68 65 72 50 74 72 2d 3e 70 61 72 65   (otherPtr->pare
6e80: 6e 74 50 74 72 20 21 3d 20 77 69 6e 50 74 72 2d  ntPtr != winPtr-
6e90: 3e 70 61 72 65 6e 74 50 74 72 29 20 7b 0a 09 20  >parentPtr) {.. 
6ea0: 20 20 20 6f 74 68 65 72 50 74 72 20 3d 20 6f 74     otherPtr = ot
6eb0: 68 65 72 50 74 72 2d 3e 70 61 72 65 6e 74 50 74  herPtr->parentPt
6ec0: 72 3b 0a 09 20 20 20 20 69 66 20 28 21 6f 74 68  r;..    if (!oth
6ed0: 65 72 50 74 72 29 20 7b 0a 09 09 72 65 74 75 72  erPtr) {...retur
6ee0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 09 20 20  n TCL_ERROR;..  
6ef0: 20 20 7d 0a 09 7d 0a 20 20 20 20 7d 0a 20 20 20    }..}.    }.   
6f00: 20 69 66 20 28 6f 74 68 65 72 50 74 72 20 3d 3d   if (otherPtr ==
6f10: 20 77 69 6e 50 74 72 29 20 7b 0a 09 72 65 74 75   winPtr) {..retu
6f20: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 20 20 20 20 7d  rn TCL_OK;.    }
6f30: 0a 0a 20 20 20 20 69 66 20 28 43 74 6b 49 73 44  ..    if (CtkIsD
6f40: 69 73 70 6c 61 79 65 64 28 77 69 6e 50 74 72 29  isplayed(winPtr)
6f50: 29 20 7b 0a 09 55 6e 64 69 73 70 6c 61 79 57 69  ) {..UndisplayWi
6f60: 6e 64 6f 77 28 77 69 6e 50 74 72 29 3b 0a 09 72  ndow(winPtr);..r
6f70: 65 64 69 73 70 6c 61 79 20 3d 20 31 3b 0a 20 20  edisplay = 1;.  
6f80: 20 20 7d 0a 20 20 20 20 55 6e 6c 69 6e 6b 57 69    }.    UnlinkWi
6f90: 6e 64 6f 77 28 77 69 6e 50 74 72 29 3b 0a 20 20  ndow(winPtr);.  
6fa0: 20 20 69 66 20 28 61 62 6f 76 65 42 65 6c 6f 77    if (aboveBelow
6fb0: 20 3d 3d 20 41 62 6f 76 65 29 20 7b 0a 09 69 66   == Above) {..if
6fc0: 20 28 6f 74 68 65 72 50 74 72 29 20 7b 0a 09 20   (otherPtr) {.. 
6fd0: 20 20 20 6f 74 68 65 72 50 74 72 20 3d 20 6f 74     otherPtr = ot
6fe0: 68 65 72 50 74 72 2d 3e 6e 65 78 74 50 74 72 3b  herPtr->nextPtr;
6ff0: 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20  ..} else {..    
7000: 6f 74 68 65 72 50 74 72 20 3d 20 48 45 41 44 5f  otherPtr = HEAD_
7010: 43 48 49 4c 44 28 77 69 6e 50 74 72 2d 3e 70 61  CHILD(winPtr->pa
7020: 72 65 6e 74 50 74 72 29 3b 0a 09 7d 0a 20 20 20  rentPtr);..}.   
7030: 20 7d 20 65 6c 73 65 20 7b 0a 09 69 66 20 28 21   } else {..if (!
7040: 6f 74 68 65 72 50 74 72 29 20 7b 0a 09 20 20 20  otherPtr) {..   
7050: 20 6f 74 68 65 72 50 74 72 20 3d 20 42 4f 54 54   otherPtr = BOTT
7060: 4f 4d 5f 43 48 49 4c 44 28 77 69 6e 50 74 72 2d  OM_CHILD(winPtr-
7070: 3e 70 61 72 65 6e 74 50 74 72 29 3b 0a 09 7d 0a  >parentPtr);..}.
7080: 20 20 20 20 7d 0a 20 20 20 20 49 6e 73 65 72 74      }.    Insert
7090: 57 69 6e 64 6f 77 28 77 69 6e 50 74 72 2c 20 6f  Window(winPtr, o
70a0: 74 68 65 72 50 74 72 29 3b 0a 20 20 20 20 69 66  therPtr);.    if
70b0: 20 28 72 65 64 69 73 70 6c 61 79 29 20 7b 0a 09   (redisplay) {..
70c0: 44 69 73 70 6c 61 79 57 69 6e 64 6f 77 28 77 69  DisplayWindow(wi
70d0: 6e 50 74 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  nPtr);.    }.   
70e0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
70f0: 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d  }.../*. *-------
7100: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7110: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7120: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7130: 2d 2d 2d 2d 2d 0a 20 2a 20 43 74 6b 5f 4d 61 70  -----. * Ctk_Map
7140: 20 2d 2d 0a 20 2a 0a 20 2a 09 50 6f 73 69 74 69   --. *. *.Positi
7150: 6f 6e 20 61 20 77 69 6e 64 6f 77 20 77 69 74 68  on a window with
7160: 69 6e 20 69 74 73 20 70 61 72 65 6e 74 2e 0a 20  in its parent.. 
7170: 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a  *. * Results:. *
7180: 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 20 53 69 64  .None.. *. * Sid
7190: 65 20 45 66 66 65 63 74 73 3a 0a 20 2a 09 47 65  e Effects:. *.Ge
71a0: 6e 65 72 61 74 65 73 20 61 20 6d 61 70 20 65 76  nerates a map ev
71b0: 65 6e 74 20 66 6f 72 20 74 68 65 20 77 69 6e 64  ent for the wind
71c0: 6f 77 2e 0a 20 2a 09 49 66 20 70 61 72 65 6e 74  ow.. *.If parent
71d0: 20 69 73 20 64 69 73 70 6c 61 79 65 64 2c 20 74   is displayed, t
71e0: 68 65 6e 20 74 68 65 20 77 69 6e 64 6f 77 20 77  hen the window w
71f0: 69 6c 6c 20 62 65 20 64 69 73 70 6c 61 79 65 64  ill be displayed
7200: 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d  .. *. *---------
7210: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7230: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7240: 2d 2d 2d 0a 20 2a 2f 0a 0a 76 6f 69 64 0a 43 74  ---. */..void.Ct
7250: 6b 5f 4d 61 70 28 77 69 6e 50 74 72 2c 20 6c 65  k_Map(winPtr, le
7260: 66 74 2c 20 74 6f 70 2c 20 72 69 67 68 74 2c 20  ft, top, right, 
7270: 62 6f 74 74 6f 6d 29 0a 20 20 20 20 54 6b 57 69  bottom).    TkWi
7280: 6e 64 6f 77 20 2a 77 69 6e 50 74 72 3b 0a 20 20  ndow *winPtr;.  
7290: 20 20 69 6e 74 20 6c 65 66 74 3b 0a 20 20 20 20    int left;.    
72a0: 69 6e 74 20 74 6f 70 3b 0a 20 20 20 20 69 6e 74  int top;.    int
72b0: 20 72 69 67 68 74 3b 0a 20 20 20 20 69 6e 74 20   right;.    int 
72c0: 62 6f 74 74 6f 6d 3b 0a 7b 0a 20 20 20 20 54 6b  bottom;.{.    Tk
72d0: 57 69 6e 64 6f 77 20 2a 70 61 72 65 6e 74 50 74  Window *parentPt
72e0: 72 20 3d 20 77 69 6e 50 74 72 2d 3e 70 61 72 65  r = winPtr->pare
72f0: 6e 74 50 74 72 3b 0a 20 20 20 20 43 74 6b 5f 45  ntPtr;.    Ctk_E
7300: 76 65 6e 74 20 65 76 65 6e 74 3b 0a 0a 20 20 20  vent event;..   
7310: 20 2f 2a 0a 20 20 20 20 20 2a 20 4b 65 65 70 20   /*.     * Keep 
7320: 74 6f 70 2d 6c 65 76 65 6c 73 20 77 69 74 68 69  top-levels withi
7330: 6e 20 74 68 65 20 62 6f 75 6e 64 73 20 6f 66 20  n the bounds of 
7340: 74 68 65 20 73 63 72 65 65 6e 2e 0a 20 20 20 20  the screen..    
7350: 20 2a 2f 0a 20 20 20 20 69 66 20 28 77 69 6e 50   */.    if (winP
7360: 74 72 2d 3e 66 6c 61 67 73 20 26 20 54 4b 5f 54  tr->flags & TK_T
7370: 4f 50 5f 4c 45 56 45 4c 29 20 7b 0a 20 20 20 20  OP_LEVEL) {.    
7380: 09 69 6e 74 20 77 69 64 74 68 20 3d 20 72 69 67  .int width = rig
7390: 68 74 20 2d 20 6c 65 66 74 3b 0a 20 20 20 20 09  ht - left;.    .
73a0: 69 6e 74 20 68 65 69 67 68 74 20 3d 20 62 6f 74  int height = bot
73b0: 74 6f 6d 20 2d 20 74 6f 70 3b 0a 20 20 20 20 09  tom - top;.    .
73c0: 69 6e 74 20 73 63 72 65 65 6e 57 69 64 74 68 20  int screenWidth 
73d0: 3d 20 54 6b 5f 57 69 64 74 68 28 70 61 72 65 6e  = Tk_Width(paren
73e0: 74 50 74 72 29 3b 0a 20 20 20 20 09 69 6e 74 20  tPtr);.    .int 
73f0: 73 63 72 65 65 6e 48 65 69 67 68 74 20 3d 20 54  screenHeight = T
7400: 6b 5f 48 65 69 67 68 74 28 70 61 72 65 6e 74 50  k_Height(parentP
7410: 74 72 29 3b 0a 0a 20 20 20 20 09 69 66 20 28 77  tr);..    .if (w
7420: 69 64 74 68 20 3e 20 73 63 72 65 65 6e 57 69 64  idth > screenWid
7430: 74 68 29 20 7b 0a 09 20 20 20 20 77 69 64 74 68  th) {..    width
7440: 20 3d 20 73 63 72 65 65 6e 57 69 64 74 68 3b 0a   = screenWidth;.
7450: 09 7d 0a 20 20 20 20 09 69 66 20 28 68 65 69 67  .}.    .if (heig
7460: 68 74 20 3e 20 73 63 72 65 65 6e 48 65 69 67 68  ht > screenHeigh
7470: 74 29 20 7b 0a 09 20 20 20 20 68 65 69 67 68 74  t) {..    height
7480: 20 3d 20 73 63 72 65 65 6e 48 65 69 67 68 74 3b   = screenHeight;
7490: 0a 09 7d 0a 09 69 66 20 28 6c 65 66 74 20 3c 20  ..}..if (left < 
74a0: 30 29 20 7b 0a 09 20 20 20 20 6c 65 66 74 20 3d  0) {..    left =
74b0: 20 30 3b 0a 09 7d 20 65 6c 73 65 20 69 66 20 28   0;..} else if (
74c0: 6c 65 66 74 20 2b 20 77 69 64 74 68 20 3e 20 73  left + width > s
74d0: 63 72 65 65 6e 57 69 64 74 68 29 20 7b 0a 09 20  creenWidth) {.. 
74e0: 20 20 20 6c 65 66 74 20 3d 20 73 63 72 65 65 6e     left = screen
74f0: 57 69 64 74 68 20 2d 20 77 69 64 74 68 20 3b 0a  Width - width ;.
7500: 09 7d 0a 09 69 66 20 28 74 6f 70 20 3c 20 30 29  .}..if (top < 0)
7510: 20 7b 0a 09 20 20 20 20 74 6f 70 20 3d 20 30 3b   {..    top = 0;
7520: 0a 09 7d 20 65 6c 73 65 20 69 66 20 28 74 6f 70  ..} else if (top
7530: 20 2b 20 68 65 69 67 68 74 20 3e 20 73 63 72 65   + height > scre
7540: 65 6e 48 65 69 67 68 74 29 20 7b 0a 09 20 20 20  enHeight) {..   
7550: 20 74 6f 70 20 3d 20 73 63 72 65 65 6e 48 65 69   top = screenHei
7560: 67 68 74 20 2d 20 68 65 69 67 68 74 3b 0a 09 7d  ght - height;..}
7570: 0a 09 72 69 67 68 74 20 3d 20 6c 65 66 74 20 2b  ..right = left +
7580: 20 77 69 64 74 68 3b 0a 09 62 6f 74 74 6f 6d 20   width;..bottom 
7590: 3d 20 74 6f 70 20 2b 20 68 65 69 67 68 74 3b 0a  = top + height;.
75a0: 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 20 28 20      }..    if ( 
75b0: 21 54 6b 5f 49 73 4d 61 70 70 65 64 28 77 69 6e  !Tk_IsMapped(win
75c0: 50 74 72 29 0a 20 20 20 20 09 20 20 20 20 7c 7c  Ptr).    .    ||
75d0: 20 28 77 69 6e 50 74 72 2d 3e 72 65 63 74 2e 6c   (winPtr->rect.l
75e0: 65 66 74 20 21 3d 20 6c 65 66 74 29 0a 09 20 20  eft != left)..  
75f0: 20 20 7c 7c 20 28 77 69 6e 50 74 72 2d 3e 72 65    || (winPtr->re
7600: 63 74 2e 74 6f 70 20 21 3d 20 74 6f 70 29 0a 09  ct.top != top)..
7610: 20 20 20 20 7c 7c 20 28 77 69 6e 50 74 72 2d 3e      || (winPtr->
7620: 72 65 63 74 2e 72 69 67 68 74 20 21 3d 20 72 69  rect.right != ri
7630: 67 68 74 29 0a 09 20 20 20 20 7c 7c 20 28 77 69  ght)..    || (wi
7640: 6e 50 74 72 2d 3e 72 65 63 74 2e 62 6f 74 74 6f  nPtr->rect.botto
7650: 6d 20 21 3d 20 62 6f 74 74 6f 6d 29 29 20 7b 0a  m != bottom)) {.
7660: 09 2f 2a 0a 09 20 2a 20 57 69 6e 64 6f 77 20 70  ./*.. * Window p
7670: 6f 73 69 74 69 6f 6e 20 63 68 61 6e 67 65 64 20  osition changed 
7680: 28 6f 72 20 77 69 6e 64 6f 77 20 77 61 73 20 6e  (or window was n
7690: 6f 74 20 6d 61 70 70 65 64 0a 09 20 2a 20 62 65  ot mapped.. * be
76a0: 66 6f 72 65 29 2e 20 20 55 6e 64 69 73 70 6c 61  fore).  Undispla
76b0: 79 20 77 69 6e 64 6f 77 2c 20 72 65 2d 70 6f 73  y window, re-pos
76c0: 69 74 69 6f 6e 20 69 74 2c 20 61 6e 64 20 74 68  ition it, and th
76d0: 65 6e 0a 09 20 2a 20 64 69 73 70 6c 61 79 20 69  en.. * display i
76e0: 74 20 69 66 20 70 61 72 65 6e 74 20 69 73 20 64  t if parent is d
76f0: 69 73 70 6c 61 79 65 64 2e 0a 09 20 2a 2f 0a 0a  isplayed... */..
7700: 09 69 66 20 28 43 74 6b 49 73 44 69 73 70 6c 61  .if (CtkIsDispla
7710: 79 65 64 28 77 69 6e 50 74 72 29 29 20 7b 0a 09  yed(winPtr)) {..
7720: 20 20 20 20 55 6e 64 69 73 70 6c 61 79 57 69 6e      UndisplayWin
7730: 64 6f 77 28 77 69 6e 50 74 72 29 3b 0a 09 7d 0a  dow(winPtr);..}.
7740: 09 43 74 6b 53 65 74 52 65 63 74 28 26 28 77 69  .CtkSetRect(&(wi
7750: 6e 50 74 72 2d 3e 72 65 63 74 29 2c 20 6c 65 66  nPtr->rect), lef
7760: 74 2c 20 74 6f 70 2c 20 72 69 67 68 74 2c 20 62  t, top, right, b
7770: 6f 74 74 6f 6d 29 3b 0a 09 77 69 6e 50 74 72 2d  ottom);..winPtr-
7780: 3e 66 6c 61 67 73 20 7c 3d 20 54 4b 5f 4d 41 50  >flags |= TK_MAP
7790: 50 45 44 3b 0a 09 69 66 20 28 43 74 6b 49 73 44  PED;..if (CtkIsD
77a0: 69 73 70 6c 61 79 65 64 28 70 61 72 65 6e 74 50  isplayed(parentP
77b0: 74 72 29 29 20 7b 0a 09 20 20 20 20 44 69 73 70  tr)) {..    Disp
77c0: 6c 61 79 57 69 6e 64 6f 77 28 77 69 6e 50 74 72  layWindow(winPtr
77d0: 29 3b 0a 09 7d 0a 20 20 20 20 7d 0a 20 20 20 20  );..}.    }.    
77e0: 65 76 65 6e 74 2e 74 79 70 65 20 3d 20 43 54 4b  event.type = CTK
77f0: 5f 4d 41 50 5f 45 56 45 4e 54 3b 0a 20 20 20 20  _MAP_EVENT;.    
7800: 65 76 65 6e 74 2e 77 69 6e 64 6f 77 20 3d 20 77  event.window = w
7810: 69 6e 50 74 72 3b 0a 20 20 20 20 54 6b 5f 48 61  inPtr;.    Tk_Ha
7820: 6e 64 6c 65 45 76 65 6e 74 28 26 65 76 65 6e 74  ndleEvent(&event
7830: 29 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d  );.}.../*. *----
7840: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7850: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7860: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7870: 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 20 43 74 6b 5f  --------. * Ctk_
7880: 55 6e 6d 61 70 20 2d 2d 0a 20 2a 0a 20 2a 09 52  Unmap --. *. *.R
7890: 65 6d 6f 76 65 20 70 6f 73 69 74 69 6f 6e 69 6e  emove positionin
78a0: 67 20 66 6f 72 20 61 20 77 69 6e 64 6f 77 2e 0a  g for a window..
78b0: 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20   *. * Results:. 
78c0: 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 20 53 69  *.None.. *. * Si
78d0: 64 65 20 45 66 66 65 63 74 73 3a 0a 20 2a 09 49  de Effects:. *.I
78e0: 66 20 77 69 6e 64 6f 77 20 69 73 20 64 69 73 70  f window is disp
78f0: 6c 61 79 65 64 2c 20 69 74 20 61 6e 64 20 61 6c  layed, it and al
7900: 6c 20 69 74 73 20 64 65 73 63 65 6e 64 61 6e 74  l its descendant
7910: 73 20 61 72 65 0a 20 2a 09 75 6e 64 69 73 70 6c  s are. *.undispl
7920: 61 79 65 64 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d  ayed.. *. *-----
7930: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7940: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7950: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7960: 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 76 6f 69  -------. */..voi
7970: 64 0a 43 74 6b 5f 55 6e 6d 61 70 28 77 69 6e 50  d.Ctk_Unmap(winP
7980: 74 72 29 0a 20 20 20 20 54 6b 57 69 6e 64 6f 77  tr).    TkWindow
7990: 20 2a 77 69 6e 50 74 72 3b 0a 7b 0a 20 20 20 20   *winPtr;.{.    
79a0: 43 74 6b 5f 45 76 65 6e 74 20 65 76 65 6e 74 3b  Ctk_Event event;
79b0: 0a 0a 20 20 20 20 69 66 20 28 54 6b 5f 49 73 4d  ..    if (Tk_IsM
79c0: 61 70 70 65 64 28 77 69 6e 50 74 72 29 29 20 7b  apped(winPtr)) {
79d0: 0a 09 2f 2a 0a 09 20 2a 20 20 57 69 6e 64 6f 77  ../*.. *  Window
79e0: 20 69 73 20 6d 61 70 70 65 64 2c 20 75 6e 6d 61   is mapped, unma
79f0: 70 20 69 74 2e 0a 09 20 2a 2f 0a 09 69 66 20 28  p it... */..if (
7a00: 43 74 6b 49 73 44 69 73 70 6c 61 79 65 64 28 77  CtkIsDisplayed(w
7a10: 69 6e 50 74 72 29 29 20 7b 0a 09 20 20 20 20 55  inPtr)) {..    U
7a20: 6e 64 69 73 70 6c 61 79 57 69 6e 64 6f 77 28 77  ndisplayWindow(w
7a30: 69 6e 50 74 72 29 3b 0a 09 7d 0a 09 77 69 6e 50  inPtr);..}..winP
7a40: 74 72 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 54 4b  tr->flags &= ~TK
7a50: 5f 4d 41 50 50 45 44 3b 0a 09 65 76 65 6e 74 2e  _MAPPED;..event.
7a60: 74 79 70 65 20 3d 20 43 54 4b 5f 55 4e 4d 41 50  type = CTK_UNMAP
7a70: 5f 45 56 45 4e 54 3b 0a 09 65 76 65 6e 74 2e 77  _EVENT;..event.w
7a80: 69 6e 64 6f 77 20 3d 20 77 69 6e 50 74 72 3b 0a  indow = winPtr;.
7a90: 09 54 6b 5f 48 61 6e 64 6c 65 45 76 65 6e 74 28  .Tk_HandleEvent(
7aa0: 26 65 76 65 6e 74 29 3b 0a 20 20 20 20 7d 0a 7d  &event);.    }.}
7ab0: 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d  .../*. *--------
7ac0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7ad0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7ae0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7af0: 2d 2d 2d 2d 0a 20 2a 20 43 74 6b 5f 42 6f 74 74  ----. * Ctk_Bott
7b00: 6f 6d 43 68 69 6c 64 20 2d 2d 0a 20 2a 20 43 74  omChild --. * Ct
7b10: 6b 5f 54 6f 70 43 68 69 6c 64 20 2d 2d 0a 20 2a  k_TopChild --. *
7b20: 20 43 74 6b 5f 50 72 69 6f 72 53 69 62 6c 69 6e   Ctk_PriorSiblin
7b30: 67 20 2d 2d 0a 20 2a 20 43 74 6b 5f 4e 65 78 74  g --. * Ctk_Next
7b40: 53 69 62 6c 69 6e 67 20 2d 2d 0a 20 2a 20 43 74  Sibling --. * Ct
7b50: 6b 5f 54 6f 70 4c 65 76 65 6c 20 2d 2d 0a 20 2a  k_TopLevel --. *
7b60: 0a 20 2a 09 47 65 74 20 77 69 6e 64 6f 77 20 72  . *.Get window r
7b70: 65 6c 61 74 69 76 65 2e 0a 20 2a 0a 20 2a 20 52  elative.. *. * R
7b80: 65 73 75 6c 74 73 3a 0a 20 2a 09 50 6f 69 6e 74  esults:. *.Point
7b90: 65 72 20 74 6f 20 77 69 6e 64 6f 77 2c 20 6f 72  er to window, or
7ba0: 20 4e 55 4c 4c 20 69 66 20 77 69 6e 64 6f 77 20   NULL if window 
7bb0: 68 61 73 20 6e 6f 20 73 75 63 68 20 72 65 6c 61  has no such rela
7bc0: 74 69 76 65 2e 0a 20 2a 0a 20 2a 20 53 69 64 65  tive.. *. * Side
7bd0: 20 45 66 66 65 63 74 73 3a 0a 20 2a 09 4e 6f 6e   Effects:. *.Non
7be0: 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d  e.. *. *--------
7bf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7c00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7c10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7c20: 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 54 6b 57 69 6e 64  ----. */..TkWind
7c30: 6f 77 20 2a 0a 43 74 6b 5f 42 6f 74 74 6f 6d 43  ow *.Ctk_BottomC
7c40: 68 69 6c 64 28 77 69 6e 50 74 72 29 0a 20 20 20  hild(winPtr).   
7c50: 20 54 6b 57 69 6e 64 6f 77 20 2a 77 69 6e 50 74   TkWindow *winPt
7c60: 72 3b 0a 7b 0a 20 20 20 20 54 6b 57 69 6e 64 6f  r;.{.    TkWindo
7c70: 77 20 2a 20 63 68 69 6c 64 20 3d 20 42 4f 54 54  w * child = BOTT
7c80: 4f 4d 5f 43 48 49 4c 44 28 77 69 6e 50 74 72 29  OM_CHILD(winPtr)
7c90: 3b 0a 0a 20 20 20 20 69 66 20 28 63 68 69 6c 64  ;..    if (child
7ca0: 20 3d 3d 20 48 45 41 44 5f 43 48 49 4c 44 28 77   == HEAD_CHILD(w
7cb0: 69 6e 50 74 72 29 29 20 7b 0a 09 72 65 74 75 72  inPtr)) {..retur
7cc0: 6e 20 28 54 6b 57 69 6e 64 6f 77 20 2a 29 20 4e  n (TkWindow *) N
7cd0: 55 4c 4c 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65  ULL;.    }.    e
7ce0: 6c 73 65 20 7b 0a 09 72 65 74 75 72 6e 20 63 68  lse {..return ch
7cf0: 69 6c 64 3b 0a 20 20 20 20 7d 0a 7d 0a 0a 54 6b  ild;.    }.}..Tk
7d00: 57 69 6e 64 6f 77 20 2a 0a 43 74 6b 5f 54 6f 70  Window *.Ctk_Top
7d10: 43 68 69 6c 64 28 77 69 6e 50 74 72 29 0a 20 20  Child(winPtr).  
7d20: 20 20 54 6b 57 69 6e 64 6f 77 20 2a 77 69 6e 50    TkWindow *winP
7d30: 74 72 3b 0a 7b 0a 20 20 20 20 54 6b 57 69 6e 64  tr;.{.    TkWind
7d40: 6f 77 20 2a 20 63 68 69 6c 64 20 3d 20 54 4f 50  ow * child = TOP
7d50: 5f 43 48 49 4c 44 28 77 69 6e 50 74 72 29 3b 0a  _CHILD(winPtr);.
7d60: 0a 20 20 20 20 69 66 20 28 63 68 69 6c 64 20 3d  .    if (child =
7d70: 3d 20 48 45 41 44 5f 43 48 49 4c 44 28 77 69 6e  = HEAD_CHILD(win
7d80: 50 74 72 29 29 20 7b 0a 09 72 65 74 75 72 6e 20  Ptr)) {..return 
7d90: 28 54 6b 57 69 6e 64 6f 77 20 2a 29 20 4e 55 4c  (TkWindow *) NUL
7da0: 4c 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 73  L;.    }.    els
7db0: 65 20 7b 0a 09 72 65 74 75 72 6e 20 63 68 69 6c  e {..return chil
7dc0: 64 3b 0a 20 20 20 20 7d 0a 7d 0a 0a 54 6b 57 69  d;.    }.}..TkWi
7dd0: 6e 64 6f 77 20 2a 0a 43 74 6b 5f 4e 65 78 74 53  ndow *.Ctk_NextS
7de0: 69 62 6c 69 6e 67 28 77 69 6e 50 74 72 29 0a 20  ibling(winPtr). 
7df0: 20 20 20 54 6b 57 69 6e 64 6f 77 20 2a 77 69 6e     TkWindow *win
7e00: 50 74 72 3b 0a 7b 0a 20 20 20 20 54 6b 57 69 6e  Ptr;.{.    TkWin
7e10: 64 6f 77 20 2a 20 73 69 62 6c 69 6e 67 20 3d 20  dow * sibling = 
7e20: 77 69 6e 50 74 72 2d 3e 6e 65 78 74 50 74 72 3b  winPtr->nextPtr;
7e30: 0a 0a 20 20 20 20 69 66 20 28 73 69 62 6c 69 6e  ..    if (siblin
7e40: 67 20 3d 3d 20 48 45 41 44 5f 43 48 49 4c 44 28  g == HEAD_CHILD(
7e50: 77 69 6e 50 74 72 2d 3e 70 61 72 65 6e 74 50 74  winPtr->parentPt
7e60: 72 29 29 20 7b 0a 09 72 65 74 75 72 6e 20 28 54  r)) {..return (T
7e70: 6b 57 69 6e 64 6f 77 20 2a 29 20 4e 55 4c 4c 3b  kWindow *) NULL;
7e80: 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 20  .    }.    else 
7e90: 7b 0a 09 72 65 74 75 72 6e 20 73 69 62 6c 69 6e  {..return siblin
7ea0: 67 3b 0a 20 20 20 20 7d 0a 7d 0a 0a 54 6b 57 69  g;.    }.}..TkWi
7eb0: 6e 64 6f 77 20 2a 0a 43 74 6b 5f 50 72 69 6f 72  ndow *.Ctk_Prior
7ec0: 53 69 62 6c 69 6e 67 28 77 69 6e 50 74 72 29 0a  Sibling(winPtr).
7ed0: 20 20 20 20 54 6b 57 69 6e 64 6f 77 20 2a 77 69      TkWindow *wi
7ee0: 6e 50 74 72 3b 0a 7b 0a 20 20 20 20 54 6b 57 69  nPtr;.{.    TkWi
7ef0: 6e 64 6f 77 20 2a 20 73 69 62 6c 69 6e 67 20 3d  ndow * sibling =
7f00: 20 77 69 6e 50 74 72 2d 3e 70 72 69 6f 72 50 74   winPtr->priorPt
7f10: 72 3b 0a 0a 20 20 20 20 69 66 20 28 73 69 62 6c  r;..    if (sibl
7f20: 69 6e 67 20 3d 3d 20 48 45 41 44 5f 43 48 49 4c  ing == HEAD_CHIL
7f30: 44 28 77 69 6e 50 74 72 2d 3e 70 61 72 65 6e 74  D(winPtr->parent
7f40: 50 74 72 29 29 20 7b 0a 09 72 65 74 75 72 6e 20  Ptr)) {..return 
7f50: 28 54 6b 57 69 6e 64 6f 77 20 2a 29 20 4e 55 4c  (TkWindow *) NUL
7f60: 4c 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 73  L;.    }.    els
7f70: 65 20 7b 0a 09 72 65 74 75 72 6e 20 73 69 62 6c  e {..return sibl
7f80: 69 6e 67 3b 0a 20 20 20 20 7d 0a 7d 0a 0a 54 6b  ing;.    }.}..Tk
7f90: 57 69 6e 64 6f 77 20 2a 0a 43 74 6b 5f 54 6f 70  Window *.Ctk_Top
7fa0: 4c 65 76 65 6c 28 77 69 6e 50 74 72 29 0a 20 20  Level(winPtr).  
7fb0: 20 20 54 6b 57 69 6e 64 6f 77 20 2a 77 69 6e 50    TkWindow *winP
7fc0: 74 72 3b 0a 7b 0a 20 20 20 20 77 68 69 6c 65 20  tr;.{.    while 
7fd0: 28 21 54 6b 5f 49 73 54 6f 70 4c 65 76 65 6c 28  (!Tk_IsTopLevel(
7fe0: 77 69 6e 50 74 72 29 29 20 7b 0a 20 20 20 20 09  winPtr)) {.    .
7ff0: 77 69 6e 50 74 72 20 3d 20 77 69 6e 50 74 72 2d  winPtr = winPtr-
8000: 3e 70 61 72 65 6e 74 50 74 72 3b 0a 20 20 20 20  >parentPtr;.    
8010: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 77 69 6e  }.    return win
8020: 50 74 72 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d  Ptr;.}.../*. *--
8030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8060: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 20 54 6b  ----------. * Tk
8070: 5f 53 65 74 49 6e 74 65 72 6e 61 6c 42 6f 72 64  _SetInternalBord
8080: 65 72 20 2d 2d 0a 20 2a 0a 20 2a 09 53 65 74 20  er --. *. *.Set 
8090: 77 69 6e 64 6f 77 27 73 20 69 6e 74 65 72 6e 61  window's interna
80a0: 6c 20 62 6f 72 64 65 72 20 77 69 64 74 68 2e 20  l border width. 
80b0: 20 54 68 65 20 73 74 61 6e 64 61 72 64 20 64 72   The standard dr
80c0: 61 77 69 6e 67 0a 20 2a 09 72 6f 75 74 69 6e 65  awing. *.routine
80d0: 73 20 77 69 6c 6c 20 6e 6f 74 20 64 72 61 77 20  s will not draw 
80e0: 6f 6e 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  on the internal 
80f0: 62 6f 72 64 65 72 20 28 6f 6e 6c 79 0a 20 2a 09  border (only. *.
8100: 43 74 6b 5f 44 72 61 77 42 6f 72 64 65 72 28 29  Ctk_DrawBorder()
8110: 20 77 69 6c 6c 29 20 61 6e 64 20 74 68 65 20 67   will) and the g
8120: 65 6f 6d 65 74 72 79 20 6d 61 6e 61 67 65 72 73  eometry managers
8130: 20 73 68 6f 75 6c 64 0a 20 2a 09 6e 6f 74 20 70   should. *.not p
8140: 6c 61 63 65 20 63 68 69 6c 64 20 77 69 6e 64 6f  lace child windo
8150: 77 73 20 74 68 65 72 65 2e 0a 20 2a 0a 20 2a 20  ws there.. *. * 
8160: 52 65 73 75 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65  Results:. *.None
8170: 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20 45 66 66  .. *. * Side Eff
8180: 65 63 74 73 3a 0a 20 2a 09 54 68 65 20 62 6f 72  ects:. *.The bor
8190: 64 65 72 20 77 69 64 74 68 20 69 73 20 72 65 63  der width is rec
81a0: 6f 72 64 65 64 20 66 6f 72 20 74 68 65 20 77 69  orded for the wi
81b0: 6e 64 6f 77 2c 20 61 6e 64 20 61 20 6d 61 70 0a  ndow, and a map.
81c0: 20 2a 09 65 76 65 6e 74 20 69 73 20 73 79 6e 74   *.event is synt
81d0: 68 65 73 69 7a 65 64 20 73 6f 20 74 68 61 74 20  hesized so that 
81e0: 61 6c 6c 20 67 65 6f 6d 65 74 72 79 20 6d 61 6e  all geometry man
81f0: 61 67 65 72 73 20 6f 66 20 61 6c 6c 0a 20 2a 09  agers of all. *.
8200: 63 68 69 6c 64 72 65 6e 20 61 72 65 20 6e 6f 74  children are not
8210: 69 66 69 65 64 20 74 6f 20 72 65 2d 6c 61 79 6f  ified to re-layo
8220: 75 74 2c 20 69 66 20 6e 65 63 65 73 73 61 72 79  ut, if necessary
8230: 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d  .. *. *---------
8240: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8250: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8260: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8270: 2d 2d 2d 0a 20 2a 2f 0a 0a 76 6f 69 64 0a 54 6b  ---. */..void.Tk
8280: 5f 53 65 74 49 6e 74 65 72 6e 61 6c 42 6f 72 64  _SetInternalBord
8290: 65 72 28 77 69 6e 50 74 72 2c 20 77 69 64 74 68  er(winPtr, width
82a0: 29 0a 20 20 20 20 54 6b 57 69 6e 64 6f 77 20 2a  ).    TkWindow *
82b0: 77 69 6e 50 74 72 3b 0a 20 20 20 20 69 6e 74 20  winPtr;.    int 
82c0: 77 69 64 74 68 3b 0a 7b 0a 20 20 20 20 43 74 6b  width;.{.    Ctk
82d0: 5f 45 76 65 6e 74 20 65 76 65 6e 74 3b 0a 0a 20  _Event event;.. 
82e0: 20 20 20 69 66 20 28 77 69 6e 50 74 72 2d 3e 62     if (winPtr->b
82f0: 6f 72 64 65 72 57 69 64 74 68 20 21 3d 20 77 69  orderWidth != wi
8300: 64 74 68 29 20 7b 0a 09 77 69 6e 50 74 72 2d 3e  dth) {..winPtr->
8310: 62 6f 72 64 65 72 57 69 64 74 68 20 3d 20 77 69  borderWidth = wi
8320: 64 74 68 3b 0a 09 43 6f 6d 70 75 74 65 43 6c 69  dth;..ComputeCli
8330: 70 52 65 63 74 28 77 69 6e 50 74 72 29 3b 0a 09  pRect(winPtr);..
8340: 65 76 65 6e 74 2e 74 79 70 65 20 3d 20 43 54 4b  event.type = CTK
8350: 5f 4d 41 50 5f 45 56 45 4e 54 3b 0a 09 65 76 65  _MAP_EVENT;..eve
8360: 6e 74 2e 77 69 6e 64 6f 77 20 3d 20 77 69 6e 50  nt.window = winP
8370: 74 72 3b 0a 09 54 6b 5f 48 61 6e 64 6c 65 45 76  tr;..Tk_HandleEv
8380: 65 6e 74 28 26 65 76 65 6e 74 29 3b 0a 20 20 20  ent(&event);.   
8390: 20 7d 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d   }.}.../*. *----
83a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
83b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
83c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
83d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a  ----------. *. *
83e0: 20 43 74 6b 5f 44 72 61 77 42 6f 72 64 65 72 20   Ctk_DrawBorder 
83f0: 2d 2d 0a 20 2a 0a 20 2a 09 44 72 61 77 20 62 6f  --. *. *.Draw bo
8400: 72 64 65 72 20 66 6f 72 20 61 20 77 69 6e 64 6f  rder for a windo
8410: 77 20 69 6e 20 73 70 65 63 69 66 69 65 64 20 73  w in specified s
8420: 74 79 6c 65 2e 0a 20 2a 0a 20 2a 20 52 65 73 75  tyle.. *. * Resu
8430: 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a  lts:. *.None.. *
8440: 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 73  . * Side effects
8450: 3a 0a 20 2a 09 43 68 61 72 61 63 74 65 72 73 20  :. *.Characters 
8460: 61 72 65 20 6f 75 74 70 75 74 20 74 6f 20 74 68  are output to th
8470: 65 20 74 65 72 6d 69 6e 61 6c 2e 0a 20 2a 0a 20  e terminal.. *. 
8480: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *---------------
8490: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
84a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
84b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
84c0: 20 2a 2f 0a 0a 76 6f 69 64 0a 43 74 6b 5f 44 72   */..void.Ctk_Dr
84d0: 61 77 42 6f 72 64 65 72 28 77 69 6e 50 74 72 2c  awBorder(winPtr,
84e0: 20 73 74 79 6c 65 2c 20 74 69 74 6c 65 29 0a 20   style, title). 
84f0: 20 20 20 54 6b 57 69 6e 64 6f 77 20 2a 77 69 6e     TkWindow *win
8500: 50 74 72 3b 0a 20 20 20 20 43 74 6b 5f 53 74 79  Ptr;.    Ctk_Sty
8510: 6c 65 20 73 74 79 6c 65 3b 0a 20 20 20 20 63 68  le style;.    ch
8520: 61 72 20 2a 74 69 74 6c 65 3b 0a 7b 0a 20 20 20  ar *title;.{.   
8530: 20 69 6e 74 20 62 6f 72 64 65 72 57 69 64 74 68   int borderWidth
8540: 20 3d 20 77 69 6e 50 74 72 2d 3e 62 6f 72 64 65   = winPtr->borde
8550: 72 57 69 64 74 68 3b 0a 0a 20 20 20 20 69 66 20  rWidth;..    if 
8560: 28 62 6f 72 64 65 72 57 69 64 74 68 20 3e 20 30  (borderWidth > 0
8570: 29 20 7b 0a 20 20 20 20 09 43 74 6b 5f 52 65 63  ) {.    .Ctk_Rec
8580: 74 20 73 61 76 65 43 6c 69 70 3b 0a 0a 09 2f 2a  t saveClip;.../*
8590: 0a 09 20 2a 20 54 65 6d 70 6f 72 61 72 69 6c 79  .. * Temporarily
85a0: 20 73 65 74 20 63 6c 69 70 52 65 63 74 20 74 6f   set clipRect to
85b0: 20 6d 61 73 6b 52 65 63 74 20 73 6f 20 74 68 61   maskRect so tha
85c0: 74 20 77 65 20 63 61 6e 0a 09 20 2a 20 64 72 61  t we can.. * dra
85d0: 77 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 72  w within the bor
85e0: 64 65 72 20 61 72 65 61 2e 0a 09 20 2a 2f 0a 20  der area... */. 
85f0: 20 20 20 09 43 74 6b 43 6f 70 79 52 65 63 74 28     .CtkCopyRect(
8600: 26 73 61 76 65 43 6c 69 70 2c 20 26 77 69 6e 50  &saveClip, &winP
8610: 74 72 2d 3e 63 6c 69 70 52 65 63 74 29 3b 0a 20  tr->clipRect);. 
8620: 20 20 20 09 43 74 6b 43 6f 70 79 52 65 63 74 28     .CtkCopyRect(
8630: 26 77 69 6e 50 74 72 2d 3e 63 6c 69 70 52 65 63  &winPtr->clipRec
8640: 74 2c 20 26 77 69 6e 50 74 72 2d 3e 6d 61 73 6b  t, &winPtr->mask
8650: 52 65 63 74 29 3b 0a 20 20 20 20 09 43 74 6b 5f  Rect);.    .Ctk_
8660: 44 72 61 77 52 65 63 74 28 77 69 6e 50 74 72 2c  DrawRect(winPtr,
8670: 20 30 2c 20 30 2c 20 54 6b 5f 57 69 64 74 68 28   0, 0, Tk_Width(
8680: 77 69 6e 50 74 72 29 2d 31 2c 20 54 6b 5f 48 65  winPtr)-1, Tk_He
8690: 69 67 68 74 28 77 69 6e 50 74 72 29 2d 31 2c 0a  ight(winPtr)-1,.
86a0: 09 09 73 74 79 6c 65 29 3b 0a 09 69 66 20 28 74  ..style);..if (t
86b0: 69 74 6c 65 29 20 7b 0a 09 20 20 20 20 43 74 6b  itle) {..    Ctk
86c0: 5f 44 72 61 77 53 74 72 69 6e 67 28 77 69 6e 50  _DrawString(winP
86d0: 74 72 2c 20 31 2c 20 30 2c 20 73 74 79 6c 65 2c  tr, 1, 0, style,
86e0: 20 74 69 74 6c 65 2c 20 2d 31 29 3b 0a 09 7d 0a   title, -1);..}.
86f0: 20 20 20 20 09 43 74 6b 43 6f 70 79 52 65 63 74      .CtkCopyRect
8700: 28 26 77 69 6e 50 74 72 2d 3e 63 6c 69 70 52 65  (&winPtr->clipRe
8710: 63 74 2c 20 26 73 61 76 65 43 6c 69 70 29 3b 0a  ct, &saveClip);.
8720: 20 20 20 20 7d 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d      }.}.../*. *-
8730: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8750: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8760: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8770: 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 54 6b 5f 4d  -----. *. * Tk_M
8780: 61 69 6e 57 69 6e 64 6f 77 20 2d 2d 0a 20 2a 0a  ainWindow --. *.
8790: 20 2a 09 52 65 74 75 72 6e 73 20 74 68 65 20 6d   *.Returns the m
87a0: 61 69 6e 20 77 69 6e 64 6f 77 20 66 6f 72 20 61  ain window for a
87b0: 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0a 20  n application.. 
87c0: 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a  *. * Results:. *
87d0: 09 49 66 20 69 6e 74 65 72 70 20 68 61 73 20 61  .If interp has a
87e0: 20 54 6b 20 61 70 70 6c 69 63 61 74 69 6f 6e 20   Tk application 
87f0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
8800: 69 74 2c 20 74 68 65 20 6d 61 69 6e 0a 20 2a 09  it, the main. *.
8810: 77 69 6e 64 6f 77 20 66 6f 72 20 74 68 65 20 61  window for the a
8820: 70 70 6c 69 63 61 74 69 6f 6e 20 69 73 20 72 65  pplication is re
8830: 74 75 72 6e 65 64 2e 20 20 4f 74 68 65 72 77 69  turned.  Otherwi
8840: 73 65 20 4e 55 4c 4c 20 69 73 0a 20 2a 09 72 65  se NULL is. *.re
8850: 74 75 72 6e 65 64 20 61 6e 64 20 61 6e 20 65 72  turned and an er
8860: 72 6f 72 20 6d 65 73 73 61 67 65 20 69 73 20 6c  ror message is l
8870: 65 66 74 20 69 6e 20 69 6e 74 65 72 70 2d 3e 72  eft in interp->r
8880: 65 73 75 6c 74 2e 0a 20 2a 0a 20 2a 20 53 69 64  esult.. *. * Sid
8890: 65 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 4e 6f  e effects:. *.No
88a0: 6e 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d  ne.. *. *-------
88b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
88c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
88d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
88e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
88f0: 20 2a 2f 0a 0a 54 6b 5f 57 69 6e 64 6f 77 0a 54   */..Tk_Window.T
8900: 6b 5f 4d 61 69 6e 57 69 6e 64 6f 77 28 69 6e 74  k_MainWindow(int
8910: 65 72 70 29 0a 20 20 20 20 54 63 6c 5f 49 6e 74  erp).    Tcl_Int
8920: 65 72 70 20 2a 69 6e 74 65 72 70 3b 20 20 20 20  erp *interp;    
8930: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8940: 49 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  Interpreter that
8950: 20 65 6d 62 6f 64 69 65 73 20 74 68 65 0a 09 09   embodies the...
8960: 09 09 09 20 2a 20 61 70 70 6c 69 63 61 74 69 6f  ... * applicatio
8970: 6e 2e 20 20 55 73 65 64 20 66 6f 72 20 65 72 72  n.  Used for err
8980: 6f 72 0a 09 09 09 09 09 20 2a 20 72 65 70 6f 72  or...... * repor
8990: 74 69 6e 67 20 61 6c 73 6f 2e 20 2a 2f 0a 7b 0a  ting also. */.{.
89a0: 20 20 20 20 54 6b 4d 61 69 6e 49 6e 66 6f 20 2a      TkMainInfo *
89b0: 6d 61 69 6e 50 74 72 3b 0a 20 20 20 20 66 6f 72  mainPtr;.    for
89c0: 20 28 6d 61 69 6e 50 74 72 20 3d 20 74 6b 4d 61   (mainPtr = tkMa
89d0: 69 6e 57 69 6e 64 6f 77 4c 69 73 74 3b 20 6d 61  inWindowList; ma
89e0: 69 6e 50 74 72 20 21 3d 20 4e 55 4c 4c 3b 0a 09  inPtr != NULL;..
89f0: 20 20 20 20 6d 61 69 6e 50 74 72 20 3d 20 6d 61      mainPtr = ma
8a00: 69 6e 50 74 72 2d 3e 6e 65 78 74 50 74 72 29 20  inPtr->nextPtr) 
8a10: 7b 0a 09 69 66 20 28 6d 61 69 6e 50 74 72 2d 3e  {..if (mainPtr->
8a20: 69 6e 74 65 72 70 20 3d 3d 20 69 6e 74 65 72 70  interp == interp
8a30: 29 20 7b 0a 09 20 20 20 20 72 65 74 75 72 6e 20  ) {..    return 
8a40: 28 54 6b 5f 57 69 6e 64 6f 77 29 20 6d 61 69 6e  (Tk_Window) main
8a50: 50 74 72 2d 3e 77 69 6e 50 74 72 3b 0a 09 7d 0a  Ptr->winPtr;..}.
8a60: 20 20 20 20 7d 0a 20 20 20 20 54 63 6c 5f 53 65      }.    Tcl_Se
8a70: 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 22  tResult(interp,"
8a80: 74 68 69 73 20 69 73 6e 27 74 20 61 20 54 6b 20  this isn't a Tk 
8a90: 61 70 70 6c 69 63 61 74 69 6f 6e 22 2c 54 43 4c  application",TCL
8aa0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 72 65  _STATIC);.    re
8ab0: 74 75 72 6e 20 4e 55 4c 4c 3b 0a 7d 0a 0c 0a 2f  turn NULL;.}.../
8ac0: 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *. *------------
8ad0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8ae0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8af0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8b00: 0a 20 2a 20 44 69 73 70 6c 61 79 57 69 6e 64 6f  . * DisplayWindo
8b10: 77 20 2d 2d 0a 20 2a 0a 20 2a 09 44 69 73 70 6c  w --. *. *.Displ
8b20: 61 79 20 77 69 6e 64 6f 77 20 61 6e 64 20 61 6c  ay window and al
8b30: 6c 20 69 74 73 20 6d 61 70 70 65 64 20 64 65 73  l its mapped des
8b40: 63 65 6e 64 61 6e 74 73 2e 0a 20 2a 0a 20 2a 20  cendants.. *. * 
8b50: 52 65 73 75 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65  Results:. *.None
8b60: 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20 45 66 66  .. *. * Side Eff
8b70: 65 63 74 73 3a 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d  ects:. *. *-----
8b80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8b90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8ba0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8bb0: 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61  -------. */..sta
8bc0: 74 69 63 20 76 6f 69 64 0a 44 69 73 70 6c 61 79  tic void.Display
8bd0: 57 69 6e 64 6f 77 28 77 69 6e 50 74 72 29 0a 20  Window(winPtr). 
8be0: 20 20 20 54 6b 57 69 6e 64 6f 77 20 2a 77 69 6e     TkWindow *win
8bf0: 50 74 72 3b 0a 7b 0a 20 20 20 20 54 6b 57 69 6e  Ptr;.{.    TkWin
8c00: 64 6f 77 20 2a 70 61 72 65 6e 74 50 74 72 20 3d  dow *parentPtr =
8c10: 20 77 69 6e 50 74 72 2d 3e 70 61 72 65 6e 74 50   winPtr->parentP
8c20: 74 72 3b 0a 20 20 20 20 54 6b 57 69 6e 64 6f 77  tr;.    TkWindow
8c30: 20 2a 73 69 62 6c 69 6e 67 3b 0a 20 20 20 20 54   *sibling;.    T
8c40: 6b 57 69 6e 64 6f 77 20 2a 63 68 69 6c 64 3b 0a  kWindow *child;.
8c50: 0a 20 20 20 20 69 66 20 28 43 74 6b 49 73 44 69  .    if (CtkIsDi
8c60: 73 70 6c 61 79 65 64 28 77 69 6e 50 74 72 29 29  splayed(winPtr))
8c70: 20 7b 0a 20 20 20 20 09 70 61 6e 69 63 28 22 41   {.    .panic("A
8c80: 74 74 65 6d 70 74 20 74 6f 20 64 69 73 70 6c 61  ttempt to displa
8c90: 79 20 61 6c 72 65 61 64 79 20 64 69 73 70 6c 61  y already displa
8ca0: 79 65 64 20 77 69 6e 64 6f 77 22 29 3b 0a 20 20  yed window");.  
8cb0: 20 20 7d 0a 0a 20 20 20 20 77 69 6e 50 74 72 2d    }..    winPtr-
8cc0: 3e 66 6c 61 67 73 20 7c 3d 20 43 54 4b 5f 44 49  >flags |= CTK_DI
8cd0: 53 50 4c 41 59 45 44 3b 0a 0a 20 20 20 20 77 69  SPLAYED;..    wi
8ce0: 6e 50 74 72 2d 3e 61 62 73 4c 65 66 74 20 3d 20  nPtr->absLeft = 
8cf0: 70 61 72 65 6e 74 50 74 72 2d 3e 61 62 73 4c 65  parentPtr->absLe
8d00: 66 74 20 2b 20 77 69 6e 50 74 72 2d 3e 72 65 63  ft + winPtr->rec
8d10: 74 2e 6c 65 66 74 3b 0a 20 20 20 20 77 69 6e 50  t.left;.    winP
8d20: 74 72 2d 3e 61 62 73 54 6f 70 20 3d 20 70 61 72  tr->absTop = par
8d30: 65 6e 74 50 74 72 2d 3e 61 62 73 54 6f 70 20 2b  entPtr->absTop +
8d40: 20 77 69 6e 50 74 72 2d 3e 72 65 63 74 2e 74 6f   winPtr->rect.to
8d50: 70 3b 0a 20 20 20 20 77 69 6e 50 74 72 2d 3e 6d  p;.    winPtr->m
8d60: 61 73 6b 52 65 63 74 2e 74 6f 70 20 3d 20 77 69  askRect.top = wi
8d70: 6e 50 74 72 2d 3e 61 62 73 54 6f 70 3b 0a 20 20  nPtr->absTop;.  
8d80: 20 20 77 69 6e 50 74 72 2d 3e 6d 61 73 6b 52 65    winPtr->maskRe
8d90: 63 74 2e 6c 65 66 74 20 3d 20 77 69 6e 50 74 72  ct.left = winPtr
8da0: 2d 3e 61 62 73 4c 65 66 74 3b 0a 20 20 20 20 77  ->absLeft;.    w
8db0: 69 6e 50 74 72 2d 3e 6d 61 73 6b 52 65 63 74 2e  inPtr->maskRect.
8dc0: 62 6f 74 74 6f 6d 20 3d 20 70 61 72 65 6e 74 50  bottom = parentP
8dd0: 74 72 2d 3e 61 62 73 54 6f 70 20 2b 20 77 69 6e  tr->absTop + win
8de0: 50 74 72 2d 3e 72 65 63 74 2e 62 6f 74 74 6f 6d  Ptr->rect.bottom
8df0: 3b 0a 20 20 20 20 77 69 6e 50 74 72 2d 3e 6d 61  ;.    winPtr->ma
8e00: 73 6b 52 65 63 74 2e 72 69 67 68 74 20 3d 20 70  skRect.right = p
8e10: 61 72 65 6e 74 50 74 72 2d 3e 61 62 73 4c 65 66  arentPtr->absLef
8e20: 74 20 2b 20 77 69 6e 50 74 72 2d 3e 72 65 63 74  t + winPtr->rect
8e30: 2e 72 69 67 68 74 3b 0a 20 20 20 20 43 74 6b 49  .right;.    CtkI
8e40: 6e 74 65 72 73 65 63 74 52 65 63 74 73 28 26 28  ntersectRects(&(
8e50: 77 69 6e 50 74 72 2d 3e 6d 61 73 6b 52 65 63 74  winPtr->maskRect
8e60: 29 2c 20 26 28 70 61 72 65 6e 74 50 74 72 2d 3e  ), &(parentPtr->
8e70: 63 6c 69 70 52 65 63 74 29 29 3b 0a 20 20 20 20  clipRect));.    
8e80: 43 6f 6d 70 75 74 65 43 6c 69 70 52 65 63 74 28  ComputeClipRect(
8e90: 77 69 6e 50 74 72 29 3b 0a 0a 20 20 20 20 69 66  winPtr);..    if
8ea0: 20 28 77 69 6e 50 74 72 2d 3e 66 6c 61 67 73 20   (winPtr->flags 
8eb0: 26 20 54 4b 5f 54 4f 50 5f 4c 45 56 45 4c 29 20  & TK_TOP_LEVEL) 
8ec0: 7b 0a 09 2f 2a 0a 09 20 2a 20 20 54 68 69 73 20  {../*.. *  This 
8ed0: 69 73 20 61 20 74 6f 70 20 6c 65 76 65 6c 20 77  is a top level w
8ee0: 69 6e 64 6f 77 2c 20 63 6f 6d 70 75 74 65 20 63  indow, compute c
8ef0: 6c 69 70 70 69 6e 67 20 62 79 20 73 69 62 6c 69  lipping by sibli
8f00: 6e 67 73 2e 0a 09 20 2a 20 20 53 74 61 72 74 20  ngs... *  Start 
8f10: 77 69 74 68 20 61 20 63 6c 69 70 70 69 6e 67 20  with a clipping 
8f20: 72 65 67 69 6f 6e 20 65 71 75 61 6c 20 74 6f 20  region equal to 
8f30: 60 6d 61 73 6b 52 65 63 74 27 2c 20 74 68 65 6e  `maskRect', then
8f40: 0a 09 20 2a 20 20 72 65 6d 6f 76 65 20 6f 76 65  .. *  remove ove
8f50: 72 6c 61 70 73 20 77 69 74 68 20 73 69 62 6c 69  rlaps with sibli
8f60: 6e 67 73 20 61 62 6f 76 65 20 74 68 69 73 20 77  ngs above this w
8f70: 69 6e 64 6f 77 2e 0a 09 20 2a 2f 0a 09 77 69 6e  indow... */..win
8f80: 50 74 72 2d 3e 63 6c 69 70 52 67 6e 20 3d 20 43  Ptr->clipRgn = C
8f90: 74 6b 43 72 65 61 74 65 52 65 67 69 6f 6e 28 26  tkCreateRegion(&
8fa0: 28 77 69 6e 50 74 72 2d 3e 6d 61 73 6b 52 65 63  (winPtr->maskRec
8fb0: 74 29 29 3b 0a 09 66 6f 72 20 28 73 69 62 6c 69  t));..for (sibli
8fc0: 6e 67 20 3d 20 77 69 6e 50 74 72 2d 3e 6e 65 78  ng = winPtr->nex
8fd0: 74 50 74 72 3b 0a 09 09 73 69 62 6c 69 6e 67 20  tPtr;...sibling 
8fe0: 21 3d 20 48 45 41 44 5f 43 48 49 4c 44 28 70 61  != HEAD_CHILD(pa
8ff0: 72 65 6e 74 50 74 72 29 3b 0a 09 09 73 69 62 6c  rentPtr);...sibl
9000: 69 6e 67 20 3d 20 73 69 62 6c 69 6e 67 2d 3e 6e  ing = sibling->n
9010: 65 78 74 50 74 72 29 0a 09 7b 0a 09 20 20 20 20  extPtr)..{..    
9020: 69 66 20 28 43 74 6b 49 73 44 69 73 70 6c 61 79  if (CtkIsDisplay
9030: 65 64 28 73 69 62 6c 69 6e 67 29 29 20 7b 0a 09  ed(sibling)) {..
9040: 09 43 74 6b 52 65 67 69 6f 6e 4d 69 6e 75 73 52  .CtkRegionMinusR
9050: 65 63 74 28 77 69 6e 50 74 72 2d 3e 63 6c 69 70  ect(winPtr->clip
9060: 52 67 6e 2c 20 26 28 73 69 62 6c 69 6e 67 2d 3e  Rgn, &(sibling->
9070: 6d 61 73 6b 52 65 63 74 29 2c 20 30 29 3b 0a 09  maskRect), 0);..
9080: 20 20 20 20 7d 0a 09 7d 0a 0a 09 2f 2a 0a 09 20      }..}.../*.. 
9090: 2a 20 20 46 6f 72 20 65 61 63 68 20 73 69 62 6c  *  For each sibl
90a0: 69 6e 67 20 62 65 6c 6f 77 20 74 68 69 73 20 77  ing below this w
90b0: 69 6e 64 6f 77 20 28 61 6e 64 20 74 68 65 20 72  indow (and the r
90c0: 6f 6f 74 29 2c 0a 09 20 2a 20 20 73 75 62 74 72  oot),.. *  subtr
90d0: 61 63 74 20 74 68 65 20 6f 76 65 72 6c 61 70 20  act the overlap 
90e0: 62 65 74 77 65 65 6e 20 74 68 69 73 20 77 69 6e  between this win
90f0: 64 6f 77 20 61 6e 64 20 74 68 65 20 73 69 62 6c  dow and the sibl
9100: 69 6e 67 0a 09 20 2a 20 20 66 72 6f 6d 20 74 68  ing.. *  from th
9110: 65 20 73 69 62 6c 69 6e 67 27 73 20 63 6c 69 70  e sibling's clip
9120: 70 69 6e 67 20 72 65 67 69 6f 6e 2e 0a 09 20 2a  ping region... *
9130: 2f 0a 09 66 6f 72 20 28 73 69 62 6c 69 6e 67 20  /..for (sibling 
9140: 3d 20 77 69 6e 50 74 72 2d 3e 70 72 69 6f 72 50  = winPtr->priorP
9150: 74 72 3b 0a 09 09 73 69 62 6c 69 6e 67 20 21 3d  tr;...sibling !=
9160: 20 48 45 41 44 5f 43 48 49 4c 44 28 70 61 72 65   HEAD_CHILD(pare
9170: 6e 74 50 74 72 29 3b 0a 09 09 73 69 62 6c 69 6e  ntPtr);...siblin
9180: 67 20 3d 20 73 69 62 6c 69 6e 67 2d 3e 70 72 69  g = sibling->pri
9190: 6f 72 50 74 72 29 0a 09 7b 0a 09 20 20 20 20 69  orPtr)..{..    i
91a0: 66 20 28 43 74 6b 49 73 44 69 73 70 6c 61 79 65  f (CtkIsDisplaye
91b0: 64 28 73 69 62 6c 69 6e 67 29 29 20 7b 0a 09 09  d(sibling)) {...
91c0: 43 74 6b 52 65 67 69 6f 6e 4d 69 6e 75 73 52 65  CtkRegionMinusRe
91d0: 63 74 28 73 69 62 6c 69 6e 67 2d 3e 63 6c 69 70  ct(sibling->clip
91e0: 52 67 6e 2c 20 26 28 77 69 6e 50 74 72 2d 3e 6d  Rgn, &(winPtr->m
91f0: 61 73 6b 52 65 63 74 29 2c 20 30 29 3b 0a 09 20  askRect), 0);.. 
9200: 20 20 20 7d 0a 09 7d 0a 09 43 74 6b 52 65 67 69     }..}..CtkRegi
9210: 6f 6e 4d 69 6e 75 73 52 65 63 74 28 70 61 72 65  onMinusRect(pare
9220: 6e 74 50 74 72 2d 3e 63 6c 69 70 52 67 6e 2c 20  ntPtr->clipRgn, 
9230: 26 28 77 69 6e 50 74 72 2d 3e 6d 61 73 6b 52 65  &(winPtr->maskRe
9240: 63 74 29 2c 20 30 29 3b 0a 20 20 20 20 7d 20 65  ct), 0);.    } e
9250: 6c 73 65 20 7b 0a 09 77 69 6e 50 74 72 2d 3e 63  lse {..winPtr->c
9260: 6c 69 70 52 67 6e 20 3d 20 70 61 72 65 6e 74 50  lipRgn = parentP
9270: 74 72 2d 3e 63 6c 69 70 52 67 6e 3b 0a 20 20 20  tr->clipRgn;.   
9280: 20 7d 0a 0a 20 20 20 20 43 74 6b 5f 43 6c 65 61   }..    Ctk_Clea
9290: 72 57 69 6e 64 6f 77 28 77 69 6e 50 74 72 29 3b  rWindow(winPtr);
92a0: 0a 20 20 20 20 45 78 70 6f 73 65 57 69 6e 64 6f  .    ExposeWindo
92b0: 77 28 77 69 6e 50 74 72 2c 20 77 69 6e 50 74 72  w(winPtr, winPtr
92c0: 2d 3e 63 6c 69 70 52 67 6e 29 3b 0a 0a 20 20 20  ->clipRgn);..   
92d0: 20 66 6f 72 20 28 63 68 69 6c 64 20 3d 20 42 4f   for (child = BO
92e0: 54 54 4f 4d 5f 43 48 49 4c 44 28 77 69 6e 50 74  TTOM_CHILD(winPt
92f0: 72 29 3b 0a 09 20 20 20 20 63 68 69 6c 64 20 21  r);..    child !
9300: 3d 20 48 45 41 44 5f 43 48 49 4c 44 28 77 69 6e  = HEAD_CHILD(win
9310: 50 74 72 29 3b 0a 09 20 20 20 20 63 68 69 6c 64  Ptr);..    child
9320: 20 3d 20 63 68 69 6c 64 2d 3e 6e 65 78 74 50 74   = child->nextPt
9330: 72 29 20 7b 0a 09 69 66 20 28 54 6b 5f 49 73 4d  r) {..if (Tk_IsM
9340: 61 70 70 65 64 28 63 68 69 6c 64 29 29 20 7b 0a  apped(child)) {.
9350: 09 20 20 20 20 44 69 73 70 6c 61 79 57 69 6e 64  .    DisplayWind
9360: 6f 77 28 63 68 69 6c 64 29 3b 0a 09 7d 0a 20 20  ow(child);..}.  
9370: 20 20 7d 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d    }.}.../*. *---
9380: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9390: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
93a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
93b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 20 43 6f 6d  ---------. * Com
93c0: 70 75 74 65 43 6c 69 70 52 65 63 74 20 2d 2d 0a  puteClipRect --.
93d0: 20 2a 0a 20 2a 09 53 65 74 20 74 68 65 20 63 6c   *. *.Set the cl
93e0: 69 70 70 69 6e 67 20 72 65 63 74 61 6e 67 6c 65  ipping rectangle
93f0: 20 66 6f 72 20 61 20 77 69 6e 64 6f 77 20 61 63   for a window ac
9400: 63 6f 72 64 69 6e 67 0a 20 2a 09 74 6f 20 69 74  cording. *.to it
9410: 27 73 20 70 6f 73 69 74 69 6f 6e 2c 20 62 6f 72  's position, bor
9420: 64 65 72 2d 77 69 64 74 68 2c 20 61 6e 64 20 70  der-width, and p
9430: 61 72 65 6e 74 27 73 20 63 6c 69 70 70 69 6e 67  arent's clipping
9440: 0a 20 2a 09 72 65 63 74 61 6e 67 6c 65 2e 0a 20  . *.rectangle.. 
9450: 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a  *. * Results:. *
9460: 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 20 53 69 64  .None.. *. * Sid
9470: 65 20 45 66 66 65 63 74 73 3a 0a 20 2a 09 53 74  e Effects:. *.St
9480: 6f 72 65 73 20 6e 65 77 20 76 61 6c 75 65 73 20  ores new values 
9490: 69 6e 20 77 69 6e 50 74 72 2d 3e 63 6c 69 70 52  in winPtr->clipR
94a0: 65 63 74 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d  ect.. *. *------
94b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
94c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
94d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
94e0: 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61 74  ------. */..stat
94f0: 69 63 20 76 6f 69 64 0a 43 6f 6d 70 75 74 65 43  ic void.ComputeC
9500: 6c 69 70 52 65 63 74 28 77 69 6e 50 74 72 29 0a  lipRect(winPtr).
9510: 20 20 20 20 72 65 67 69 73 74 65 72 20 54 6b 57      register TkW
9520: 69 6e 64 6f 77 20 2a 77 69 6e 50 74 72 3b 0a 7b  indow *winPtr;.{
9530: 0a 20 20 20 20 72 65 67 69 73 74 65 72 20 54 6b  .    register Tk
9540: 57 69 6e 64 6f 77 20 2a 70 61 72 65 6e 74 50 74  Window *parentPt
9550: 72 20 3d 20 77 69 6e 50 74 72 2d 3e 70 61 72 65  r = winPtr->pare
9560: 6e 74 50 74 72 3b 0a 0a 20 20 20 20 77 69 6e 50  ntPtr;..    winP
9570: 74 72 2d 3e 63 6c 69 70 52 65 63 74 2e 74 6f 70  tr->clipRect.top
9580: 20 3d 20 77 69 6e 50 74 72 2d 3e 61 62 73 54 6f   = winPtr->absTo
9590: 70 20 2b 20 77 69 6e 50 74 72 2d 3e 62 6f 72 64  p + winPtr->bord
95a0: 65 72 57 69 64 74 68 3b 0a 20 20 20 20 77 69 6e  erWidth;.    win
95b0: 50 74 72 2d 3e 63 6c 69 70 52 65 63 74 2e 6c 65  Ptr->clipRect.le
95c0: 66 74 20 3d 20 77 69 6e 50 74 72 2d 3e 61 62 73  ft = winPtr->abs
95d0: 4c 65 66 74 20 2b 20 77 69 6e 50 74 72 2d 3e 62  Left + winPtr->b
95e0: 6f 72 64 65 72 57 69 64 74 68 3b 0a 20 20 20 20  orderWidth;.    
95f0: 77 69 6e 50 74 72 2d 3e 63 6c 69 70 52 65 63 74  winPtr->clipRect
9600: 2e 62 6f 74 74 6f 6d 20 3d 0a 20 20 20 20 09 20  .bottom =.    . 
9610: 20 20 20 70 61 72 65 6e 74 50 74 72 2d 3e 61 62     parentPtr->ab
9620: 73 54 6f 70 20 2b 20 77 69 6e 50 74 72 2d 3e 72  sTop + winPtr->r
9630: 65 63 74 2e 62 6f 74 74 6f 6d 20 2d 20 77 69 6e  ect.bottom - win
9640: 50 74 72 2d 3e 62 6f 72 64 65 72 57 69 64 74 68  Ptr->borderWidth
9650: 3b 0a 20 20 20 20 77 69 6e 50 74 72 2d 3e 63 6c  ;.    winPtr->cl
9660: 69 70 52 65 63 74 2e 72 69 67 68 74 20 3d 0a 20  ipRect.right =. 
9670: 20 20 20 09 20 20 20 20 70 61 72 65 6e 74 50 74     .    parentPt
9680: 72 2d 3e 61 62 73 4c 65 66 74 20 2b 20 77 69 6e  r->absLeft + win
9690: 50 74 72 2d 3e 72 65 63 74 2e 72 69 67 68 74 20  Ptr->rect.right 
96a0: 2d 20 77 69 6e 50 74 72 2d 3e 62 6f 72 64 65 72  - winPtr->border
96b0: 57 69 64 74 68 3b 0a 20 20 20 20 43 74 6b 49 6e  Width;.    CtkIn
96c0: 74 65 72 73 65 63 74 52 65 63 74 73 28 26 28 77  tersectRects(&(w
96d0: 69 6e 50 74 72 2d 3e 63 6c 69 70 52 65 63 74 29  inPtr->clipRect)
96e0: 2c 20 26 28 70 61 72 65 6e 74 50 74 72 2d 3e 63  , &(parentPtr->c
96f0: 6c 69 70 52 65 63 74 29 29 3b 0a 7d 0a 0c 0a 2f  lipRect));.}.../
9700: 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *. *------------
9710: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9720: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9730: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9740: 0a 20 2a 20 45 78 70 6f 73 65 57 69 6e 64 6f 77  . * ExposeWindow
9750: 20 2d 2d 0a 20 2a 0a 20 2a 09 53 65 6e 64 20 65   --. *. *.Send e
9760: 78 70 6f 73 65 20 65 76 65 6e 74 28 73 29 20 74  xpose event(s) t
9770: 6f 20 77 69 6e 64 6f 77 20 66 6f 72 20 73 70 65  o window for spe
9780: 63 69 66 69 65 64 20 72 65 67 69 6f 6e 0a 20 2a  cified region. *
9790: 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09  . * Results:. *.
97a0: 50 6f 69 6e 74 65 72 20 74 6f 20 73 69 62 6c 69  Pointer to sibli
97b0: 6e 67 20 77 69 6e 64 6f 77 2c 20 6f 72 20 4e 55  ng window, or NU
97c0: 4c 4c 20 69 66 20 77 69 6e 64 6f 77 0a 20 2a 09  LL if window. *.
97d0: 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 61 20  does not have a 
97e0: 73 69 62 6c 69 6e 67 20 74 68 61 74 20 69 73 20  sibling that is 
97f0: 64 69 73 70 6c 61 79 65 64 20 61 6e 64 20 65 6e  displayed and en
9800: 61 62 6c 65 64 2e 0a 20 2a 0a 20 2a 20 53 69 64  abled.. *. * Sid
9810: 65 20 45 66 66 65 63 74 73 3a 0a 20 2a 09 4e 6f  e Effects:. *.No
9820: 6e 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d  ne.. *. *-------
9830: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9840: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9850: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9860: 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61 74 69  -----. */..stati
9870: 63 20 76 6f 69 64 0a 45 78 70 6f 73 65 57 69 6e  c void.ExposeWin
9880: 64 6f 77 28 77 69 6e 50 74 72 2c 20 72 67 6e 50  dow(winPtr, rgnP
9890: 74 72 29 0a 20 20 20 20 54 6b 57 69 6e 64 6f 77  tr).    TkWindow
98a0: 20 2a 77 69 6e 50 74 72 3b 0a 20 20 20 20 43 74   *winPtr;.    Ct
98b0: 6b 52 65 67 69 6f 6e 20 2a 72 67 6e 50 74 72 3b  kRegion *rgnPtr;
98c0: 0a 7b 0a 20 20 20 20 43 74 6b 5f 45 76 65 6e 74  .{.    Ctk_Event
98d0: 20 65 76 65 6e 74 3b 0a 0a 20 20 20 20 2f 2a 0a   event;..    /*.
98e0: 20 20 20 20 20 2a 20 43 6f 6d 70 75 74 65 20 69       * Compute i
98f0: 6e 74 65 72 73 65 63 74 69 6f 6e 20 6f 66 20 72  ntersection of r
9900: 67 6e 50 74 72 20 61 6e 64 20 77 69 6e 50 74 72  gnPtr and winPtr
9910: 2d 3e 6d 61 73 6b 52 65 63 74 2e 0a 20 20 20 20  ->maskRect..    
9920: 20 2a 2f 0a 20 20 20 20 43 74 6b 52 65 67 69 6f   */.    CtkRegio
9930: 6e 47 65 74 52 65 63 74 28 72 67 6e 50 74 72 2c  nGetRect(rgnPtr,
9940: 20 26 65 76 65 6e 74 2e 75 2e 65 78 70 6f 73 65   &event.u.expose
9950: 29 3b 0a 20 20 20 20 43 74 6b 49 6e 74 65 72 73  );.    CtkInters
9960: 65 63 74 52 65 63 74 73 28 26 65 76 65 6e 74 2e  ectRects(&event.
9970: 75 2e 65 78 70 6f 73 65 2c 20 26 28 77 69 6e 50  u.expose, &(winP
9980: 74 72 2d 3e 6d 61 73 6b 52 65 63 74 29 29 3b 0a  tr->maskRect));.
9990: 20 20 20 20 43 74 6b 4d 6f 76 65 52 65 63 74 28      CtkMoveRect(
99a0: 26 65 76 65 6e 74 2e 75 2e 65 78 70 6f 73 65 2c  &event.u.expose,
99b0: 20 2d 77 69 6e 50 74 72 2d 3e 61 62 73 4c 65 66   -winPtr->absLef
99c0: 74 2c 20 2d 77 69 6e 50 74 72 2d 3e 61 62 73 54  t, -winPtr->absT
99d0: 6f 70 29 3b 0a 0a 20 20 20 20 65 76 65 6e 74 2e  op);..    event.
99e0: 74 79 70 65 20 3d 20 43 54 4b 5f 45 58 50 4f 53  type = CTK_EXPOS
99f0: 45 5f 45 56 45 4e 54 3b 0a 20 20 20 20 65 76 65  E_EVENT;.    eve
9a00: 6e 74 2e 77 69 6e 64 6f 77 20 3d 20 77 69 6e 50  nt.window = winP
9a10: 74 72 3b 0a 20 20 20 20 54 6b 5f 48 61 6e 64 6c  tr;.    Tk_Handl
9a20: 65 45 76 65 6e 74 28 26 65 76 65 6e 74 29 3b 0a  eEvent(&event);.
9a30: 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d  }.../*. *-------
9a40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9a50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9a60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9a70: 2d 2d 2d 2d 2d 0a 20 2a 20 55 6e 64 69 73 70 6c  -----. * Undispl
9a80: 61 79 57 69 6e 64 6f 77 20 2d 2d 0a 20 2a 0a 20  ayWindow --. *. 
9a90: 2a 09 53 74 6f 70 20 64 69 73 70 6c 61 79 69 6e  *.Stop displayin
9aa0: 67 20 77 69 6e 64 6f 77 20 61 6e 64 20 61 6c 6c  g window and all
9ab0: 20 69 74 73 20 64 65 73 63 65 6e 64 61 6e 74 73   its descendants
9ac0: 2e 0a 20 2a 09 57 69 6e 64 6f 77 20 6d 75 73 74  .. *.Window must
9ad0: 20 63 75 72 72 65 6e 74 6c 79 20 62 65 20 64 69   currently be di
9ae0: 73 70 6c 61 79 65 64 2e 0a 20 2a 0a 20 2a 20 52  splayed.. *. * R
9af0: 65 73 75 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e  esults:. *.None.
9b00: 0a 20 2a 0a 20 2a 20 53 69 64 65 20 45 66 66 65  . *. * Side Effe
9b10: 63 74 73 3a 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d  cts:. *. *------
9b20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9b30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9b40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9b50: 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61 74  ------. */..stat
9b60: 69 63 20 76 6f 69 64 0a 55 6e 64 69 73 70 6c 61  ic void.Undispla
9b70: 79 57 69 6e 64 6f 77 28 77 69 6e 50 74 72 29 0a  yWindow(winPtr).
9b80: 20 20 20 20 54 6b 57 69 6e 64 6f 77 20 2a 77 69      TkWindow *wi
9b90: 6e 50 74 72 3b 0a 7b 0a 20 20 20 20 54 6b 57 69  nPtr;.{.    TkWi
9ba0: 6e 64 6f 77 20 2a 63 68 69 6c 64 3b 0a 20 20 20  ndow *child;.   
9bb0: 20 54 6b 57 69 6e 64 6f 77 20 2a 73 69 62 6c 69   TkWindow *sibli
9bc0: 6e 67 3b 0a 20 20 20 20 54 6b 57 69 6e 64 6f 77  ng;.    TkWindow
9bd0: 20 2a 70 61 72 65 6e 74 50 74 72 20 3d 20 77 69   *parentPtr = wi
9be0: 6e 50 74 72 2d 3e 70 61 72 65 6e 74 50 74 72 3b  nPtr->parentPtr;
9bf0: 0a 20 20 20 20 43 74 6b 5f 45 76 65 6e 74 20 65  .    Ctk_Event e
9c00: 76 65 6e 74 3b 0a 0a 20 20 20 20 69 66 20 28 21  vent;..    if (!
9c10: 43 74 6b 49 73 44 69 73 70 6c 61 79 65 64 28 77  CtkIsDisplayed(w
9c20: 69 6e 50 74 72 29 29 20 7b 0a 20 20 20 20 09 70  inPtr)) {.    .p
9c30: 61 6e 69 63 28 22 41 74 74 65 6d 70 74 20 74 6f  anic("Attempt to
9c40: 20 75 6e 64 69 73 70 6c 61 79 20 77 69 6e 64 6f   undisplay windo
9c50: 77 20 74 68 61 74 20 69 73 6e 27 74 20 64 69 73  w that isn't dis
9c60: 70 6c 61 79 65 64 22 29 3b 0a 20 20 20 20 7d 0a  played");.    }.
9c70: 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a 09 53  .    /*.     *.S
9c80: 74 6f 70 20 64 69 73 70 6c 61 79 69 6e 67 20 74  top displaying t
9c90: 68 65 20 64 65 73 63 65 6e 64 61 6e 74 73 20 6f  he descendants o
9ca0: 66 20 60 77 69 6e 50 74 72 27 2e 0a 20 20 20 20  f `winPtr'..    
9cb0: 20 2a 2f 0a 20 20 20 20 66 6f 72 20 28 63 68 69   */.    for (chi
9cc0: 6c 64 20 3d 20 42 4f 54 54 4f 4d 5f 43 48 49 4c  ld = BOTTOM_CHIL
9cd0: 44 28 77 69 6e 50 74 72 29 3b 0a 09 20 20 20 20  D(winPtr);..    
9ce0: 63 68 69 6c 64 20 21 3d 20 48 45 41 44 5f 43 48  child != HEAD_CH
9cf0: 49 4c 44 28 77 69 6e 50 74 72 29 3b 0a 09 20 20  ILD(winPtr);..  
9d00: 20 20 63 68 69 6c 64 20 3d 20 63 68 69 6c 64 2d    child = child-
9d10: 3e 6e 65 78 74 50 74 72 29 0a 20 20 20 20 7b 0a  >nextPtr).    {.
9d20: 09 69 66 20 28 43 74 6b 49 73 44 69 73 70 6c 61  .if (CtkIsDispla
9d30: 79 65 64 28 63 68 69 6c 64 29 29 20 7b 0a 09 20  yed(child)) {.. 
9d40: 20 20 20 55 6e 64 69 73 70 6c 61 79 57 69 6e 64     UndisplayWind
9d50: 6f 77 28 63 68 69 6c 64 29 3b 0a 09 7d 0a 20 20  ow(child);..}.  
9d60: 20 20 7d 0a 0a 20 20 20 20 77 69 6e 50 74 72 2d    }..    winPtr-
9d70: 3e 66 6c 61 67 73 20 26 3d 20 7e 43 54 4b 5f 44  >flags &= ~CTK_D
9d80: 49 53 50 4c 41 59 45 44 3b 0a 0a 20 20 20 20 69  ISPLAYED;..    i
9d90: 66 20 28 70 61 72 65 6e 74 50 74 72 20 3d 3d 20  f (parentPtr == 
9da0: 4e 55 4c 4c 29 20 7b 0a 09 43 74 6b 44 65 73 74  NULL) {..CtkDest
9db0: 72 6f 79 52 65 67 69 6f 6e 28 77 69 6e 50 74 72  royRegion(winPtr
9dc0: 2d 3e 63 6c 69 70 52 67 6e 29 3b 0a 20 20 20 20  ->clipRgn);.    
9dd0: 7d 20 65 6c 73 65 20 69 66 20 28 77 69 6e 50 74  } else if (winPt
9de0: 72 2d 3e 66 6c 61 67 73 20 26 20 54 4b 5f 54 4f  r->flags & TK_TO
9df0: 50 5f 4c 45 56 45 4c 29 20 7b 0a 09 2f 2a 0a 09  P_LEVEL) {../*..
9e00: 20 2a 20 54 68 69 73 20 69 73 20 61 20 74 6f 70   * This is a top
9e10: 20 6c 65 76 65 6c 20 77 69 6e 64 6f 77 2c 0a 09   level window,..
9e20: 20 2a 20 6d 61 69 6e 74 61 69 6e 20 74 68 65 20   * maintain the 
9e30: 63 6c 69 70 70 69 6e 67 20 72 65 67 69 6f 6e 73  clipping regions
9e40: 2e 0a 09 20 2a 2f 0a 0a 09 2f 2a 0a 09 20 2a 20  ... */.../*.. * 
9e50: 46 6f 72 20 65 61 63 68 20 28 64 69 73 70 6c 61  For each (displa
9e60: 79 65 64 29 20 73 69 62 6c 69 6e 67 20 62 65 6c  yed) sibling bel
9e70: 6f 77 20 74 68 69 73 20 77 69 6e 64 6f 77 0a 09  ow this window..
9e80: 20 2a 20 28 61 6e 64 20 74 68 65 20 72 6f 6f 74   * (and the root
9e90: 29 20 61 64 64 20 74 68 65 20 6f 76 65 72 6c 61  ) add the overla
9ea0: 70 20 62 65 74 77 65 65 6e 20 74 68 65 20 77 69  p between the wi
9eb0: 6e 64 6f 77 20 61 6e 64 20 74 68 65 0a 09 20 2a  ndow and the.. *
9ec0: 20 73 69 62 6c 69 6e 67 20 74 6f 20 74 68 65 20   sibling to the 
9ed0: 73 69 62 6c 69 6e 67 73 20 63 6c 69 70 70 69 6e  siblings clippin
9ee0: 67 20 72 65 67 69 6f 6e 2e 0a 09 20 2a 2f 0a 09  g region... */..
9ef0: 66 6f 72 20 28 73 69 62 6c 69 6e 67 20 3d 20 77  for (sibling = w
9f00: 69 6e 50 74 72 2d 3e 70 72 69 6f 72 50 74 72 3b  inPtr->priorPtr;
9f10: 0a 09 09 73 69 62 6c 69 6e 67 20 21 3d 20 48 45  ...sibling != HE
9f20: 41 44 5f 43 48 49 4c 44 28 70 61 72 65 6e 74 50  AD_CHILD(parentP
9f30: 74 72 29 3b 0a 09 09 73 69 62 6c 69 6e 67 20 3d  tr);...sibling =
9f40: 20 73 69 62 6c 69 6e 67 2d 3e 70 72 69 6f 72 50   sibling->priorP
9f50: 74 72 29 20 7b 0a 09 20 20 20 20 69 66 20 28 43  tr) {..    if (C
9f60: 74 6b 49 73 44 69 73 70 6c 61 79 65 64 28 73 69  tkIsDisplayed(si
9f70: 62 6c 69 6e 67 29 29 20 7b 0a 09 09 55 6e 6f 76  bling)) {...Unov
9f80: 65 72 6c 61 70 48 69 65 72 61 72 63 68 79 28 73  erlapHierarchy(s
9f90: 69 62 6c 69 6e 67 2c 20 77 69 6e 50 74 72 29 3b  ibling, winPtr);
9fa0: 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 55 6e 6f 76  ..    }..}..Unov
9fb0: 65 72 6c 61 70 28 70 61 72 65 6e 74 50 74 72 2c  erlap(parentPtr,
9fc0: 20 77 69 6e 50 74 72 29 3b 0a 09 43 74 6b 44 65   winPtr);..CtkDe
9fd0: 73 74 72 6f 79 52 65 67 69 6f 6e 28 77 69 6e 50  stroyRegion(winP
9fe0: 74 72 2d 3e 63 6c 69 70 52 67 6e 29 3b 0a 20 20  tr->clipRgn);.  
9ff0: 20 20 7d 20 65 6c 73 65 20 69 66 20 28 77 69 6e    } else if (win
a000: 50 74 72 2d 3e 66 69 6c 6c 53 74 79 6c 65 20 21  Ptr->fillStyle !
a010: 3d 20 43 54 4b 5f 49 4e 56 49 53 49 42 4c 45 5f  = CTK_INVISIBLE_
a020: 53 54 59 4c 45 29 20 7b 0a 09 43 74 6b 5f 46 69  STYLE) {..Ctk_Fi
a030: 6c 6c 52 65 63 74 28 70 61 72 65 6e 74 50 74 72  llRect(parentPtr
a040: 2c 0a 09 09 77 69 6e 50 74 72 2d 3e 72 65 63 74  ,...winPtr->rect
a050: 2e 6c 65 66 74 2c 20 77 69 6e 50 74 72 2d 3e 72  .left, winPtr->r
a060: 65 63 74 2e 74 6f 70 2c 0a 09 09 77 69 6e 50 74  ect.top,...winPt
a070: 72 2d 3e 72 65 63 74 2e 72 69 67 68 74 2c 20 77  r->rect.right, w
a080: 69 6e 50 74 72 2d 3e 72 65 63 74 2e 62 6f 74 74  inPtr->rect.bott
a090: 6f 6d 2c 0a 09 09 70 61 72 65 6e 74 50 74 72 2d  om,...parentPtr-
a0a0: 3e 66 69 6c 6c 53 74 79 6c 65 2c 20 70 61 72 65  >fillStyle, pare
a0b0: 6e 74 50 74 72 2d 3e 66 69 6c 6c 43 68 61 72 29  ntPtr->fillChar)
a0c0: 3b 0a 09 65 76 65 6e 74 2e 74 79 70 65 20 3d 20  ;..event.type = 
a0d0: 43 54 4b 5f 45 58 50 4f 53 45 5f 45 56 45 4e 54  CTK_EXPOSE_EVENT
a0e0: 3b 0a 09 65 76 65 6e 74 2e 77 69 6e 64 6f 77 20  ;..event.window 
a0f0: 3d 20 70 61 72 65 6e 74 50 74 72 3b 0a 09 43 74  = parentPtr;..Ct
a100: 6b 43 6f 70 79 52 65 63 74 28 26 65 76 65 6e 74  kCopyRect(&event
a110: 2e 75 2e 65 78 70 6f 73 65 2c 20 26 70 61 72 65  .u.expose, &pare
a120: 6e 74 50 74 72 2d 3e 72 65 63 74 29 3b 0a 09 54  ntPtr->rect);..T
a130: 6b 5f 48 61 6e 64 6c 65 45 76 65 6e 74 28 26 65  k_HandleEvent(&e
a140: 76 65 6e 74 29 3b 0a 20 20 20 20 7d 20 65 6c 73  vent);.    } els
a150: 65 20 69 66 20 28 77 69 6e 50 74 72 2d 3e 62 6f  e if (winPtr->bo
a160: 72 64 65 72 57 69 64 74 68 29 20 7b 0a 20 20 20  rderWidth) {.   
a170: 20 09 69 6e 74 20 62 6f 72 64 65 72 57 69 64 74   .int borderWidt
a180: 68 20 3d 20 77 69 6e 50 74 72 2d 3e 62 6f 72 64  h = winPtr->bord
a190: 65 72 57 69 64 74 68 3b 0a 0a 20 20 20 20 20 20  erWidth;..      
a1a0: 20 20 2f 2a 0a 20 20 20 20 20 20 20 20 20 2a 20    /*.         * 
a1b0: 42 6c 61 6e 6b 20 6f 75 74 20 74 68 65 20 62 6f  Blank out the bo
a1c0: 72 64 65 72 20 61 72 65 61 2e 0a 20 20 20 20 20  rder area..     
a1d0: 20 20 20 20 2a 20 54 68 69 73 20 77 6f 75 6c 64      * This would
a1e0: 20 62 65 20 6d 75 63 68 20 65 61 73 69 65 72 20   be much easier 
a1f0: 69 66 20 77 65 20 63 6f 75 6c 64 20 70 61 73 73  if we could pass
a200: 20 61 20 63 68 61 72 61 63 74 65 72 20 74 6f 0a   a character to.
a210: 20 20 20 20 20 20 20 20 20 2a 20 43 74 6b 5f 44           * Ctk_D
a220: 72 61 77 52 65 63 74 28 29 2e 0a 20 20 20 20 20  rawRect()..     
a230: 20 20 20 20 2a 2f 0a 09 43 74 6b 5f 46 69 6c 6c      */..Ctk_Fill
a240: 52 65 63 74 28 70 61 72 65 6e 74 50 74 72 2c 0a  Rect(parentPtr,.
a250: 09 09 77 69 6e 50 74 72 2d 3e 72 65 63 74 2e 6c  ..winPtr->rect.l
a260: 65 66 74 2c 20 77 69 6e 50 74 72 2d 3e 72 65 63  eft, winPtr->rec
a270: 74 2e 74 6f 70 2c 0a 09 09 77 69 6e 50 74 72 2d  t.top,...winPtr-
a280: 3e 72 65 63 74 2e 72 69 67 68 74 2c 20 77 69 6e  >rect.right, win
a290: 50 74 72 2d 3e 72 65 63 74 2e 74 6f 70 2b 62 6f  Ptr->rect.top+bo
a2a0: 72 64 65 72 57 69 64 74 68 2c 0a 09 09 70 61 72  rderWidth,...par
a2b0: 65 6e 74 50 74 72 2d 3e 66 69 6c 6c 53 74 79 6c  entPtr->fillStyl
a2c0: 65 2c 20 70 61 72 65 6e 74 50 74 72 2d 3e 66 69  e, parentPtr->fi
a2d0: 6c 6c 43 68 61 72 29 3b 0a 09 43 74 6b 5f 46 69  llChar);..Ctk_Fi
a2e0: 6c 6c 52 65 63 74 28 70 61 72 65 6e 74 50 74 72  llRect(parentPtr
a2f0: 2c 0a 09 09 77 69 6e 50 74 72 2d 3e 72 65 63 74  ,...winPtr->rect
a300: 2e 6c 65 66 74 2c 20 77 69 6e 50 74 72 2d 3e 72  .left, winPtr->r
a310: 65 63 74 2e 62 6f 74 74 6f 6d 2d 62 6f 72 64 65  ect.bottom-borde
a320: 72 57 69 64 74 68 2c 0a 09 09 77 69 6e 50 74 72  rWidth,...winPtr
a330: 2d 3e 72 65 63 74 2e 72 69 67 68 74 2c 20 77 69  ->rect.right, wi
a340: 6e 50 74 72 2d 3e 72 65 63 74 2e 62 6f 74 74 6f  nPtr->rect.botto
a350: 6d 2c 0a 09 09 70 61 72 65 6e 74 50 74 72 2d 3e  m,...parentPtr->
a360: 66 69 6c 6c 53 74 79 6c 65 2c 20 70 61 72 65 6e  fillStyle, paren
a370: 74 50 74 72 2d 3e 66 69 6c 6c 43 68 61 72 29 3b  tPtr->fillChar);
a380: 0a 09 43 74 6b 5f 46 69 6c 6c 52 65 63 74 28 70  ..Ctk_FillRect(p
a390: 61 72 65 6e 74 50 74 72 2c 0a 09 09 77 69 6e 50  arentPtr,...winP
a3a0: 74 72 2d 3e 72 65 63 74 2e 6c 65 66 74 2c 20 77  tr->rect.left, w
a3b0: 69 6e 50 74 72 2d 3e 72 65 63 74 2e 74 6f 70 2b  inPtr->rect.top+
a3c0: 62 6f 72 64 65 72 57 69 64 74 68 2c 0a 09 09 77  borderWidth,...w
a3d0: 69 6e 50 74 72 2d 3e 72 65 63 74 2e 6c 65 66 74  inPtr->rect.left
a3e0: 2b 62 6f 72 64 65 72 57 69 64 74 68 2c 20 77 69  +borderWidth, wi
a3f0: 6e 50 74 72 2d 3e 72 65 63 74 2e 62 6f 74 74 6f  nPtr->rect.botto
a400: 6d 2d 62 6f 72 64 65 72 57 69 64 74 68 2c 0a 09  m-borderWidth,..
a410: 09 70 61 72 65 6e 74 50 74 72 2d 3e 66 69 6c 6c  .parentPtr->fill
a420: 53 74 79 6c 65 2c 20 70 61 72 65 6e 74 50 74 72  Style, parentPtr
a430: 2d 3e 66 69 6c 6c 43 68 61 72 29 3b 0a 09 43 74  ->fillChar);..Ct
a440: 6b 5f 46 69 6c 6c 52 65 63 74 28 70 61 72 65 6e  k_FillRect(paren
a450: 74 50 74 72 2c 0a 09 09 77 69 6e 50 74 72 2d 3e  tPtr,...winPtr->
a460: 72 65 63 74 2e 72 69 67 68 74 2d 62 6f 72 64 65  rect.right-borde
a470: 72 57 69 64 74 68 2c 20 77 69 6e 50 74 72 2d 3e  rWidth, winPtr->
a480: 72 65 63 74 2e 74 6f 70 2b 62 6f 72 64 65 72 57  rect.top+borderW
a490: 69 64 74 68 2c 0a 09 09 77 69 6e 50 74 72 2d 3e  idth,...winPtr->
a4a0: 72 65 63 74 2e 72 69 67 68 74 2c 20 77 69 6e 50  rect.right, winP
a4b0: 74 72 2d 3e 72 65 63 74 2e 62 6f 74 74 6f 6d 2d  tr->rect.bottom-
a4c0: 62 6f 72 64 65 72 57 69 64 74 68 2c 0a 09 09 70  borderWidth,...p
a4d0: 61 72 65 6e 74 50 74 72 2d 3e 66 69 6c 6c 53 74  arentPtr->fillSt
a4e0: 79 6c 65 2c 20 70 61 72 65 6e 74 50 74 72 2d 3e  yle, parentPtr->
a4f0: 66 69 6c 6c 43 68 61 72 29 3b 0a 20 20 20 20 7d  fillChar);.    }
a500: 0a 0a 20 20 20 20 77 69 6e 50 74 72 2d 3e 63 6c  ..    winPtr->cl
a510: 69 70 52 67 6e 20 3d 20 4e 55 4c 4c 3b 0a 7d 0a  ipRgn = NULL;.}.
a520: 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d  ../*. *---------
a530: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a540: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a550: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a560: 2d 2d 2d 0a 20 2a 20 55 6e 6f 76 65 72 6c 61 70  ---. * Unoverlap
a570: 48 69 65 72 61 72 63 68 79 20 2d 2d 0a 20 2a 0a  Hierarchy --. *.
a580: 20 2a 09 52 65 73 74 6f 72 65 20 6f 76 65 72 6c   *.Restore overl
a590: 61 70 70 69 6e 67 20 72 65 67 69 6f 6e 20 74 6f  apping region to
a5a0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 77 69 6e 64   underlying wind
a5b0: 6f 77 20 74 72 65 65 2e 0a 20 2a 0a 20 2a 20 52  ow tree.. *. * R
a5c0: 65 73 75 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e  esults:. *.None.
a5d0: 0a 20 2a 0a 20 2a 20 53 69 64 65 20 45 66 66 65  . *. * Side Effe
a5e0: 63 74 73 3a 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d  cts:. *. *------
a5f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a600: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a610: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a620: 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61 74  ------. */..stat
a630: 69 63 20 76 6f 69 64 0a 55 6e 6f 76 65 72 6c 61  ic void.Unoverla
a640: 70 48 69 65 72 61 72 63 68 79 28 75 6e 64 65 72  pHierarchy(under
a650: 57 69 6e 50 74 72 2c 20 6f 76 65 72 57 69 6e 50  WinPtr, overWinP
a660: 74 72 29 0a 20 20 20 20 54 6b 57 69 6e 64 6f 77  tr).    TkWindow
a670: 20 2a 75 6e 64 65 72 57 69 6e 50 74 72 3b 0a 20   *underWinPtr;. 
a680: 20 20 20 54 6b 57 69 6e 64 6f 77 20 2a 6f 76 65     TkWindow *ove
a690: 72 57 69 6e 50 74 72 3b 0a 7b 0a 20 20 20 20 54  rWinPtr;.{.    T
a6a0: 6b 57 69 6e 64 6f 77 20 2a 63 68 69 6c 64 3b 0a  kWindow *child;.
a6b0: 0a 20 20 20 20 66 6f 72 20 28 63 68 69 6c 64 20  .    for (child 
a6c0: 3d 20 54 4f 50 5f 43 48 49 4c 44 28 75 6e 64 65  = TOP_CHILD(unde
a6d0: 72 57 69 6e 50 74 72 29 3b 0a 09 20 20 20 20 63  rWinPtr);..    c
a6e0: 68 69 6c 64 20 21 3d 20 48 45 41 44 5f 43 48 49  hild != HEAD_CHI
a6f0: 4c 44 28 75 6e 64 65 72 57 69 6e 50 74 72 29 3b  LD(underWinPtr);
a700: 0a 09 20 20 20 20 63 68 69 6c 64 20 3d 20 63 68  ..    child = ch
a710: 69 6c 64 2d 3e 70 72 69 6f 72 50 74 72 29 20 7b  ild->priorPtr) {
a720: 0a 09 69 66 20 28 43 74 6b 49 73 44 69 73 70 6c  ..if (CtkIsDispl
a730: 61 79 65 64 28 63 68 69 6c 64 29 29 20 7b 0a 09  ayed(child)) {..
a740: 20 20 20 20 55 6e 6f 76 65 72 6c 61 70 48 69 65      UnoverlapHie
a750: 72 61 72 63 68 79 28 63 68 69 6c 64 2c 20 6f 76  rarchy(child, ov
a760: 65 72 57 69 6e 50 74 72 29 3b 0a 09 7d 0a 20 20  erWinPtr);..}.  
a770: 20 20 7d 0a 20 20 20 20 55 6e 6f 76 65 72 6c 61    }.    Unoverla
a780: 70 28 75 6e 64 65 72 57 69 6e 50 74 72 2c 20 6f  p(underWinPtr, o
a790: 76 65 72 57 69 6e 50 74 72 29 3b 0a 7d 0a 0c 0a  verWinPtr);.}...
a7a0: 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  /*. *-----------
a7b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a7c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a7d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a7e0: 2d 0a 20 2a 20 55 6e 6f 76 65 72 6c 61 70 20 2d  -. * Unoverlap -
a7f0: 2d 0a 20 2a 0a 20 2a 09 52 65 73 74 6f 72 65 20  -. *. *.Restore 
a800: 6f 76 65 72 6c 61 70 70 69 6e 67 20 72 65 67 69  overlapping regi
a810: 6f 6e 20 74 6f 20 75 6e 64 65 72 6c 79 69 6e 67  on to underlying
a820: 20 77 69 6e 64 6f 77 2e 0a 20 2a 0a 20 2a 20 52   window.. *. * R
a830: 65 73 75 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e  esults:. *.None.
a840: 0a 20 2a 0a 20 2a 20 53 69 64 65 20 45 66 66 65  . *. * Side Effe
a850: 63 74 73 3a 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d  cts:. *. *------
a860: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a870: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a880: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a890: 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61 74  ------. */..stat
a8a0: 69 63 20 76 6f 69 64 0a 55 6e 6f 76 65 72 6c 61  ic void.Unoverla
a8b0: 70 28 75 6e 64 65 72 57 69 6e 50 74 72 2c 20 6f  p(underWinPtr, o
a8c0: 76 65 72 57 69 6e 50 74 72 29 0a 20 20 20 20 54  verWinPtr).    T
a8d0: 6b 57 69 6e 64 6f 77 20 2a 75 6e 64 65 72 57 69  kWindow *underWi
a8e0: 6e 50 74 72 3b 0a 20 20 20 20 54 6b 57 69 6e 64  nPtr;.    TkWind
a8f0: 6f 77 20 2a 6f 76 65 72 57 69 6e 50 74 72 3b 0a  ow *overWinPtr;.
a900: 7b 0a 20 20 20 20 43 74 6b 52 65 67 69 6f 6e 20  {.    CtkRegion 
a910: 2a 6f 76 65 72 6c 61 70 3b 0a 0a 20 20 20 20 69  *overlap;..    i
a920: 66 20 28 75 6e 64 65 72 57 69 6e 50 74 72 2d 3e  f (underWinPtr->
a930: 66 69 6c 6c 53 74 79 6c 65 20 21 3d 20 43 54 4b  fillStyle != CTK
a940: 5f 49 4e 56 49 53 49 42 4c 45 5f 53 54 59 4c 45  _INVISIBLE_STYLE
a950: 29 20 7b 0a 09 6f 76 65 72 6c 61 70 20 3d 20 43  ) {..overlap = C
a960: 74 6b 52 65 67 69 6f 6e 4d 69 6e 75 73 52 65 63  tkRegionMinusRec
a970: 74 28 0a 09 09 6f 76 65 72 57 69 6e 50 74 72 2d  t(...overWinPtr-
a980: 3e 63 6c 69 70 52 67 6e 2c 0a 09 09 26 28 75 6e  >clipRgn,...&(un
a990: 64 65 72 57 69 6e 50 74 72 2d 3e 6d 61 73 6b 52  derWinPtr->maskR
a9a0: 65 63 74 29 2c 0a 09 09 31 29 3b 0a 09 43 74 6b  ect),...1);..Ctk
a9b0: 55 6e 69 6f 6e 52 65 67 69 6f 6e 73 28 75 6e 64  UnionRegions(und
a9c0: 65 72 57 69 6e 50 74 72 2d 3e 63 6c 69 70 52 67  erWinPtr->clipRg
a9d0: 6e 2c 20 6f 76 65 72 6c 61 70 29 3b 0a 09 43 74  n, overlap);..Ct
a9e0: 6b 46 69 6c 6c 52 65 67 69 6f 6e 28 75 6e 64 65  kFillRegion(unde
a9f0: 72 57 69 6e 50 74 72 2d 3e 64 69 73 70 50 74 72  rWinPtr->dispPtr
aa00: 2c 20 6f 76 65 72 6c 61 70 2c 0a 09 09 75 6e 64  , overlap,...und
aa10: 65 72 57 69 6e 50 74 72 2d 3e 66 69 6c 6c 53 74  erWinPtr->fillSt
aa20: 79 6c 65 2c 20 75 6e 64 65 72 57 69 6e 50 74 72  yle, underWinPtr
aa30: 2d 3e 66 69 6c 6c 43 68 61 72 29 3b 0a 09 45 78  ->fillChar);..Ex
aa40: 70 6f 73 65 57 69 6e 64 6f 77 28 75 6e 64 65 72  poseWindow(under
aa50: 57 69 6e 50 74 72 2c 20 6f 76 65 72 6c 61 70 29  WinPtr, overlap)
aa60: 3b 0a 09 43 74 6b 44 65 73 74 72 6f 79 52 65 67  ;..CtkDestroyReg
aa70: 69 6f 6e 28 6f 76 65 72 6c 61 70 29 3b 0a 20 20  ion(overlap);.  
aa80: 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 09    } else {.    .
aa90: 69 66 20 28 75 6e 64 65 72 57 69 6e 50 74 72 2d  if (underWinPtr-
aaa0: 3e 62 6f 72 64 65 72 57 69 64 74 68 29 20 7b 0a  >borderWidth) {.
aab0: 20 20 20 20 09 20 20 20 20 2f 2a 0a 20 20 20 20      .    /*.    
aac0: 09 20 20 20 20 20 2a 20 4f 6b 20 2d 20 74 68 69  .     * Ok - thi
aad0: 73 20 69 73 20 61 20 68 61 63 6b 3a 0a 20 20 20  s is a hack:.   
aae0: 20 09 20 20 20 20 20 2a 20 49 6e 76 69 73 69 62   .     * Invisib
aaf0: 6c 65 20 77 69 6e 64 6f 77 73 20 63 61 6e 20 68  le windows can h
ab00: 61 76 65 20 28 76 69 73 69 62 6c 65 29 20 62 6f  ave (visible) bo
ab10: 72 64 65 72 73 2c 20 73 6f 0a 20 20 20 20 09 20  rders, so.    . 
ab20: 20 20 20 20 2a 20 6d 75 73 74 20 73 65 6e 64 20      * must send 
ab30: 61 6e 20 65 78 70 6f 73 65 20 65 76 65 6e 74 20  an expose event 
ab40: 74 6f 20 74 68 65 20 77 69 6e 64 6f 77 2e 20 20  to the window.  
ab50: 49 64 65 61 6c 6c 79 2c 0a 20 20 20 20 09 20 20  Ideally,.    .  
ab60: 20 20 20 2a 20 49 20 77 6f 75 6c 64 20 72 65 6d     * I would rem
ab70: 6f 76 65 20 74 68 65 20 62 6f 72 64 65 72 20 61  ove the border a
ab80: 72 65 61 20 66 72 6f 6d 20 74 68 65 20 6f 76 65  rea from the ove
ab90: 72 6c 79 69 6e 67 0a 20 20 20 20 09 20 20 20 20  rlying.    .    
aba0: 20 2a 20 63 6c 69 70 20 72 65 67 69 6f 6e 2c 20   * clip region, 
abb0: 62 75 74 20 74 68 61 74 20 77 6f 75 6c 64 20 74  but that would t
abc0: 61 6b 65 20 61 20 6c 6f 74 20 6f 66 20 77 6f 72  ake a lot of wor
abd0: 6b 2e 0a 20 20 20 20 09 20 20 20 20 20 2a 20 53  k..    .     * S
abe0: 69 6e 63 65 20 49 20 6b 6e 6f 77 20 74 68 61 74  ince I know that
abf0: 20 74 68 65 20 77 69 6e 64 6f 77 20 77 69 6c 6c   the window will
ac00: 20 6e 6f 74 20 72 65 64 72 61 77 20 75 6e 74 69   not redraw unti
ac10: 6c 0a 20 20 20 20 09 20 20 20 20 20 2a 20 69 64  l.    .     * id
ac20: 6c 65 20 74 69 6d 65 2c 20 49 20 63 61 6e 20 73  le time, I can s
ac30: 65 6e 64 20 65 78 70 6f 73 65 20 6e 6f 77 2c 20  end expose now, 
ac40: 61 6e 64 20 6c 65 74 20 74 68 65 20 70 61 72 65  and let the pare
ac50: 6e 74 0a 20 20 20 20 09 20 20 20 20 20 2a 20 63  nt.    .     * c
ac60: 6c 65 61 72 20 74 68 65 20 62 6f 72 64 65 72 20  lear the border 
ac70: 61 72 65 61 2e 20 20 4c 61 74 65 72 2c 20 61 74  area.  Later, at
ac80: 20 69 64 6c 65 2c 20 74 68 65 20 69 6e 76 69 73   idle, the invis
ac90: 69 62 6c 65 0a 20 20 20 20 09 20 20 20 20 20 2a  ible.    .     *
aca0: 20 77 69 6e 64 6f 77 20 77 69 6c 6c 20 64 72 61   window will dra
acb0: 77 20 74 68 65 20 62 6f 72 64 65 72 2e 0a 20 20  w the border..  
acc0: 20 20 09 20 20 20 20 20 2a 2f 0a 09 20 20 20 20    .     */..    
acd0: 45 78 70 6f 73 65 57 69 6e 64 6f 77 28 75 6e 64  ExposeWindow(und
ace0: 65 72 57 69 6e 50 74 72 2c 20 6f 76 65 72 57 69  erWinPtr, overWi
acf0: 6e 50 74 72 2d 3e 63 6c 69 70 52 67 6e 29 3b 0a  nPtr->clipRgn);.
ad00: 09 7d 0a 20 20 20 20 7d 0a 7d 0a 0c 0a 2f 2a 0a  .}.    }.}.../*.
ad10: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   *--------------
ad20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
ad30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
ad40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
ad50: 2a 20 49 6e 73 65 72 74 57 69 6e 64 6f 77 20 2d  * InsertWindow -
ad60: 2d 0a 20 2a 0a 20 2a 09 49 6e 73 65 72 74 20 77  -. *. *.Insert w
ad70: 69 6e 64 6f 77 20 69 6e 74 6f 20 6c 69 73 74 20  indow into list 
ad80: 69 6e 20 66 72 6f 6e 74 20 6f 66 20 60 73 69 62  in front of `sib
ad90: 6c 69 6e 67 27 2e 0a 20 2a 0a 20 2a 20 52 65 73  ling'.. *. * Res
ada0: 75 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20  ults:. *.None.. 
adb0: 2a 0a 20 2a 20 53 69 64 65 20 45 66 66 65 63 74  *. * Side Effect
adc0: 73 3a 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d  s:. *. *--------
add0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
ade0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
adf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
ae00: 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61 74 69 63  ----. */..static
ae10: 20 76 6f 69 64 0a 49 6e 73 65 72 74 57 69 6e 64   void.InsertWind
ae20: 6f 77 28 77 69 6e 50 74 72 2c 20 73 69 62 6c 69  ow(winPtr, sibli
ae30: 6e 67 29 0a 20 20 20 20 54 6b 57 69 6e 64 6f 77  ng).    TkWindow
ae40: 20 2a 77 69 6e 50 74 72 3b 0a 20 20 20 20 54 6b   *winPtr;.    Tk
ae50: 57 69 6e 64 6f 77 20 2a 73 69 62 6c 69 6e 67 3b  Window *sibling;
ae60: 0a 7b 0a 20 20 20 20 77 69 6e 50 74 72 2d 3e 6e  .{.    winPtr->n
ae70: 65 78 74 50 74 72 20 3d 20 73 69 62 6c 69 6e 67  extPtr = sibling
ae80: 3b 0a 20 20 20 20 77 69 6e 50 74 72 2d 3e 70 72  ;.    winPtr->pr
ae90: 69 6f 72 50 74 72 20 3d 20 73 69 62 6c 69 6e 67  iorPtr = sibling
aea0: 2d 3e 70 72 69 6f 72 50 74 72 3b 0a 20 20 20 20  ->priorPtr;.    
aeb0: 73 69 62 6c 69 6e 67 2d 3e 70 72 69 6f 72 50 74  sibling->priorPt
aec0: 72 2d 3e 6e 65 78 74 50 74 72 20 3d 20 77 69 6e  r->nextPtr = win
aed0: 50 74 72 3b 0a 20 20 20 20 73 69 62 6c 69 6e 67  Ptr;.    sibling
aee0: 2d 3e 70 72 69 6f 72 50 74 72 20 3d 20 77 69 6e  ->priorPtr = win
aef0: 50 74 72 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d  Ptr;.}.../*. *--
af00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
af10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
af20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
af30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 20 55 6e  ----------. * Un
af40: 6c 69 6e 6b 57 69 6e 64 6f 77 20 2d 2d 0a 20 2a  linkWindow --. *
af50: 0a 20 2a 09 44 65 74 61 63 68 73 20 74 68 65 20  . *.Detachs the 
af60: 77 69 6e 64 6f 77 20 66 72 6f 6d 20 69 74 73 20  window from its 
af70: 70 61 72 65 6e 74 27 73 20 6c 69 73 74 20 6f 66  parent's list of
af80: 20 63 68 69 6c 64 72 65 6e 2e 0a 20 2a 0a 20 2a   children.. *. *
af90: 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 4e 6f 6e   Results:. *.Non
afa0: 65 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20 45 66  e.. *. * Side Ef
afb0: 66 65 63 74 73 3a 0a 20 2a 0a 20 2a 2d 2d 2d 2d  fects:. *. *----
afc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
afd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
afe0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
aff0: 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74  --------. */..st
b000: 61 74 69 63 20 76 6f 69 64 0a 55 6e 6c 69 6e 6b  atic void.Unlink
b010: 57 69 6e 64 6f 77 28 77 69 6e 50 74 72 29 0a 20  Window(winPtr). 
b020: 20 20 20 54 6b 57 69 6e 64 6f 77 20 2a 77 69 6e     TkWindow *win
b030: 50 74 72 3b 0a 7b 0a 20 20 20 20 77 69 6e 50 74  Ptr;.{.    winPt
b040: 72 2d 3e 6e 65 78 74 50 74 72 2d 3e 70 72 69 6f  r->nextPtr->prio
b050: 72 50 74 72 20 3d 20 77 69 6e 50 74 72 2d 3e 70  rPtr = winPtr->p
b060: 72 69 6f 72 50 74 72 3b 0a 20 20 20 20 77 69 6e  riorPtr;.    win
b070: 50 74 72 2d 3e 70 72 69 6f 72 50 74 72 2d 3e 6e  Ptr->priorPtr->n
b080: 65 78 74 50 74 72 20 3d 20 77 69 6e 50 74 72 2d  extPtr = winPtr-
b090: 3e 6e 65 78 74 50 74 72 3b 0a 7d 0a 0a           >nextPtr;.}..