Hex Artifact Content

Artifact 8f4373b3fdcbf740930934368ca367395a1f5876:


0000: 2f 2a 20 0a 20 2a 20 74 6b 46 72 61 6d 65 2e 63  /* . * tkFrame.c
0010: 20 28 43 54 6b 29 20 2d 2d 0a 20 2a 0a 20 2a 09   (CTk) --. *. *.
0020: 54 68 69 73 20 6d 6f 64 75 6c 65 20 69 6d 70 6c  This module impl
0030: 65 6d 65 6e 74 73 20 22 66 72 61 6d 65 22 20 20  ements "frame"  
0040: 61 6e 64 20 22 74 6f 70 6c 65 76 65 6c 22 20 77  and "toplevel" w
0050: 69 64 67 65 74 73 20 66 6f 72 0a 20 2a 09 74 68  idgets for. *.th
0060: 65 20 54 6b 20 74 6f 6f 6c 6b 69 74 2e 20 20 46  e Tk toolkit.  F
0070: 72 61 6d 65 73 20 61 72 65 20 77 69 6e 64 6f 77  rames are window
0080: 73 20 77 69 74 68 20 61 20 62 61 63 6b 67 72 6f  s with a backgro
0090: 75 6e 64 20 63 6f 6c 6f 72 0a 20 2a 09 61 6e 64  und color. *.and
00a0: 20 70 6f 73 73 69 62 6c 79 20 61 20 33 2d 44 20   possibly a 3-D 
00b0: 65 66 66 65 63 74 2c 20 62 75 74 20 6e 6f 74 20  effect, but not 
00c0: 6d 75 63 68 20 65 6c 73 65 20 69 6e 20 74 68 65  much else in the
00d0: 20 77 61 79 20 6f 66 0a 20 2a 09 61 74 74 72 69   way of. *.attri
00e0: 62 75 74 65 73 2e 0a 20 2a 0a 20 2a 20 43 6f 70  butes.. *. * Cop
00f0: 79 72 69 67 68 74 20 28 63 29 20 31 39 39 30 2d  yright (c) 1990-
0100: 31 39 39 34 20 54 68 65 20 52 65 67 65 6e 74 73  1994 The Regents
0110: 20 6f 66 20 74 68 65 20 55 6e 69 76 65 72 73 69   of the Universi
0120: 74 79 20 6f 66 20 43 61 6c 69 66 6f 72 6e 69 61  ty of California
0130: 2e 0a 20 2a 20 43 6f 70 79 72 69 67 68 74 20 28  .. * Copyright (
0140: 63 29 20 31 39 39 34 2d 31 39 39 35 20 53 75 6e  c) 1994-1995 Sun
0150: 20 4d 69 63 72 6f 73 79 73 74 65 6d 73 2c 20 49   Microsystems, I
0160: 6e 63 2e 0a 20 2a 20 43 6f 70 79 72 69 67 68 74  nc.. * Copyright
0170: 20 28 63 29 20 31 39 39 34 2d 31 39 39 35 20 43   (c) 1994-1995 C
0180: 6c 65 76 65 6c 61 6e 64 20 43 6c 69 6e 69 63 20  leveland Clinic 
0190: 46 6f 75 6e 64 61 74 69 6f 6e 0a 20 2a 0a 20 2a  Foundation. *. *
01a0: 20 53 65 65 20 74 68 65 20 66 69 6c 65 20 22 6c   See the file "l
01b0: 69 63 65 6e 73 65 2e 74 65 72 6d 73 22 20 66 6f  icense.terms" fo
01c0: 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e  r information on
01d0: 20 75 73 61 67 65 20 61 6e 64 20 72 65 64 69 73   usage and redis
01e0: 74 72 69 62 75 74 69 6f 6e 0a 20 2a 20 6f 66 20  tribution. * of 
01f0: 74 68 69 73 20 66 69 6c 65 2c 20 61 6e 64 20 66  this file, and f
0200: 6f 72 20 61 20 44 49 53 43 4c 41 49 4d 45 52 20  or a DISCLAIMER 
0210: 4f 46 20 41 4c 4c 20 57 41 52 52 41 4e 54 49 45  OF ALL WARRANTIE
0220: 53 2e 0a 20 2a 0a 20 2a 20 40 28 23 29 20 24 49  S.. *. * @(#) $I
0230: 64 3a 20 63 74 6b 2e 73 68 61 72 2c 76 20 31 2e  d: ctk.shar,v 1.
0240: 35 30 20 31 39 39 36 2f 30 31 2f 31 35 20 31 34  50 1996/01/15 14
0250: 3a 34 37 3a 31 36 20 61 6e 64 72 65 77 6d 20 45  :47:16 andrewm E
0260: 78 70 20 61 6e 64 72 65 77 6d 20 24 0a 20 2a 2f  xp andrewm $. */
0270: 0a 0a 23 69 6e 63 6c 75 64 65 20 22 64 65 66 61  ..#include "defa
0280: 75 6c 74 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  ult.h".#include 
0290: 22 74 6b 50 6f 72 74 2e 68 22 0a 23 69 6e 63 6c  "tkPort.h".#incl
02a0: 75 64 65 20 22 74 6b 49 6e 74 2e 68 22 0a 0a 2f  ude "tkInt.h"../
02b0: 2a 0a 20 2a 20 41 20 64 61 74 61 20 73 74 72 75  *. * A data stru
02c0: 63 74 75 72 65 20 6f 66 20 74 68 65 20 66 6f 6c  cture of the fol
02d0: 6c 6f 77 69 6e 67 20 74 79 70 65 20 69 73 20 6b  lowing type is k
02e0: 65 70 74 20 66 6f 72 20 65 61 63 68 0a 20 2a 20  ept for each. * 
02f0: 66 72 61 6d 65 20 74 68 61 74 20 63 75 72 72 65  frame that curre
0300: 6e 74 6c 79 20 65 78 69 73 74 73 20 66 6f 72 20  ntly exists for 
0310: 74 68 69 73 20 70 72 6f 63 65 73 73 3a 0a 20 2a  this process:. *
0320: 2f 0a 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  /..typedef struc
0330: 74 20 7b 0a 20 20 20 20 54 6b 5f 57 69 6e 64 6f  t {.    Tk_Windo
0340: 77 20 74 6b 77 69 6e 3b 09 09 2f 2a 20 57 69 6e  w tkwin;../* Win
0350: 64 6f 77 20 74 68 61 74 20 65 6d 62 6f 64 69 65  dow that embodie
0360: 73 20 74 68 65 20 66 72 61 6d 65 2e 20 20 4e 55  s the frame.  NU
0370: 4c 4c 0a 09 09 09 09 20 2a 20 6d 65 61 6e 73 20  LL..... * means 
0380: 74 68 61 74 20 74 68 65 20 77 69 6e 64 6f 77 20  that the window 
0390: 68 61 73 20 62 65 65 6e 20 64 65 73 74 72 6f 79  has been destroy
03a0: 65 64 0a 09 09 09 09 20 2a 20 62 75 74 20 74 68  ed..... * but th
03b0: 65 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  e data structure
03c0: 73 20 68 61 76 65 6e 27 74 20 79 65 74 20 62 65  s haven't yet be
03d0: 65 6e 0a 09 09 09 09 20 2a 20 63 6c 65 61 6e 65  en..... * cleane
03e0: 64 20 75 70 2e 20 2a 2f 0a 20 20 20 20 54 63 6c  d up. */.    Tcl
03f0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b  _Interp *interp;
0400: 09 09 2f 2a 20 49 6e 74 65 72 70 72 65 74 65 72  ../* Interpreter
0410: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
0420: 20 77 69 64 67 65 74 2e 20 20 55 73 65 64 0a 09   widget.  Used..
0430: 09 09 09 20 2a 20 74 6f 20 64 65 6c 65 74 65 20  ... * to delete 
0440: 77 69 64 67 65 74 20 63 6f 6d 6d 61 6e 64 2e 20  widget command. 
0450: 2a 2f 0a 20 20 20 20 54 63 6c 5f 43 6f 6d 6d 61  */.    Tcl_Comma
0460: 6e 64 20 77 69 64 67 65 74 43 6d 64 3b 09 2f 2a  nd widgetCmd;./*
0470: 20 54 6f 6b 65 6e 20 66 6f 72 20 66 72 61 6d 65   Token for frame
0480: 27 73 20 77 69 64 67 65 74 20 63 6f 6d 6d 61 6e  's widget comman
0490: 64 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  d. */.    char *
04a0: 63 6c 61 73 73 4e 61 6d 65 3b 09 09 2f 2a 20 43  className;../* C
04b0: 6c 61 73 73 20 6e 61 6d 65 20 66 6f 72 20 77 69  lass name for wi
04c0: 64 67 65 74 20 28 66 72 6f 6d 20 63 6f 6e 66 69  dget (from confi
04d0: 67 75 72 61 74 69 6f 6e 0a 09 09 09 09 20 2a 20  guration..... * 
04e0: 6f 70 74 69 6f 6e 29 2e 20 20 4d 61 6c 6c 6f 63  option).  Malloc
04f0: 2d 65 64 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  -ed. */.    int 
0500: 6d 61 73 6b 3b 09 09 09 2f 2a 20 45 69 74 68 65  mask;.../* Eithe
0510: 72 20 46 52 41 4d 45 20 6f 72 20 54 4f 50 4c 45  r FRAME or TOPLE
0520: 56 45 4c 3b 20 20 75 73 65 64 20 74 6f 20 73 65  VEL;  used to se
0530: 6c 65 63 74 0a 09 09 09 09 20 2a 20 77 68 69 63  lect..... * whic
0540: 68 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  h configuration 
0550: 6f 70 74 69 6f 6e 73 20 61 72 65 20 76 61 6c 69  options are vali
0560: 64 20 66 6f 72 0a 09 09 09 09 20 2a 20 77 69 64  d for..... * wid
0570: 67 65 74 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72  get. */.    char
0580: 20 2a 73 63 72 65 65 6e 4e 61 6d 65 3b 09 09 2f   *screenName;../
0590: 2a 20 53 63 72 65 65 6e 20 6f 6e 20 77 68 69 63  * Screen on whic
05a0: 68 20 77 69 64 67 65 74 20 69 73 20 63 72 65 61  h widget is crea
05b0: 74 65 64 2e 20 20 4e 6f 6e 2d 6e 75 6c 6c 0a 09  ted.  Non-null..
05c0: 09 09 09 20 2a 20 6f 6e 6c 79 20 66 6f 72 20 74  ... * only for t
05d0: 6f 70 2d 6c 65 76 65 6c 73 2e 20 20 4d 61 6c 6c  op-levels.  Mall
05e0: 6f 63 2d 65 64 2c 20 6d 61 79 20 62 65 0a 09 09  oc-ed, may be...
05f0: 09 09 20 2a 20 4e 55 4c 4c 2e 20 2a 2f 0a 20 20  .. * NULL. */.  
0600: 20 20 69 6e 74 20 62 6f 72 64 65 72 57 69 64 74    int borderWidt
0610: 68 3b 09 09 2f 2a 20 57 69 64 74 68 20 6f 66 20  h;../* Width of 
0620: 33 2d 44 20 62 6f 72 64 65 72 20 28 69 66 20 61  3-D border (if a
0630: 6e 79 29 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ny). */.    int 
0640: 77 69 64 74 68 3b 09 09 09 2f 2a 20 57 69 64 74  width;.../* Widt
0650: 68 20 74 6f 20 72 65 71 75 65 73 74 20 66 6f 72  h to request for
0660: 20 77 69 6e 64 6f 77 2e 20 20 3c 3d 20 30 20 6d   window.  <= 0 m
0670: 65 61 6e 73 0a 09 09 09 09 20 2a 20 64 6f 6e 27  eans..... * don'
0680: 74 20 72 65 71 75 65 73 74 20 61 6e 79 20 73 69  t request any si
0690: 7a 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 68  ze. */.    int h
06a0: 65 69 67 68 74 3b 09 09 09 2f 2a 20 48 65 69 67  eight;.../* Heig
06b0: 68 74 20 74 6f 20 72 65 71 75 65 73 74 20 66 6f  ht to request fo
06c0: 72 20 77 69 6e 64 6f 77 2e 20 20 3c 3d 20 30 20  r window.  <= 0 
06d0: 6d 65 61 6e 73 0a 09 09 09 09 20 2a 20 64 6f 6e  means..... * don
06e0: 27 74 20 72 65 71 75 65 73 74 20 61 6e 79 20 73  't request any s
06f0: 69 7a 65 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72  ize. */.    char
0700: 20 2a 74 69 74 6c 65 3b 09 09 2f 2a 20 54 69 74   *title;../* Tit
0710: 6c 65 20 6f 66 20 77 69 6e 64 6f 77 2e 20 20 4f  le of window.  O
0720: 6e 6c 79 20 76 61 6c 69 64 20 66 6f 72 20 74 6f  nly valid for to
0730: 70 6c 65 76 65 6c 73 0a 20 20 20 20 09 09 09 09  plevels.    ....
0740: 20 2a 20 4d 61 6c 6c 6f 63 2d 65 64 2c 20 6d 61   * Malloc-ed, ma
0750: 79 20 62 65 20 6e 75 6c 6c 2e 20 2a 2f 0a 20 20  y be null. */.  
0760: 20 20 63 68 61 72 20 2a 74 61 6b 65 46 6f 63 75    char *takeFocu
0770: 73 3b 09 09 2f 2a 20 56 61 6c 75 65 20 6f 66 20  s;../* Value of 
0780: 2d 74 61 6b 65 66 6f 63 75 73 20 6f 70 74 69 6f  -takefocus optio
0790: 6e 3b 20 20 6e 6f 74 20 75 73 65 64 20 69 6e 0a  n;  not used in.
07a0: 09 09 09 09 20 2a 20 74 68 65 20 43 20 63 6f 64  .... * the C cod
07b0: 65 2c 20 62 75 74 20 75 73 65 64 20 62 79 20 6b  e, but used by k
07c0: 65 79 62 6f 61 72 64 20 74 72 61 76 65 72 73 61  eyboard traversa
07d0: 6c 0a 09 09 09 09 20 2a 20 73 63 72 69 70 74 73  l..... * scripts
07e0: 2e 20 20 4d 61 6c 6c 6f 63 27 65 64 2c 20 62 75  .  Malloc'ed, bu
07f0: 74 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 2a  t may be NULL. *
0800: 2f 0a 20 20 20 20 69 6e 74 20 66 6c 61 67 73 3b  /.    int flags;
0810: 09 09 09 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c  .../* Various fl
0820: 61 67 73 3b 20 20 73 65 65 20 62 65 6c 6f 77 20  ags;  see below 
0830: 66 6f 72 0a 09 09 09 09 20 2a 20 64 65 66 69 6e  for..... * defin
0840: 69 74 69 6f 6e 73 2e 20 2a 2f 0a 7d 20 46 72 61  itions. */.} Fra
0850: 6d 65 3b 0a 0a 2f 2a 0a 20 2a 20 46 6c 61 67 20  me;../*. * Flag 
0860: 62 69 74 73 20 66 6f 72 20 66 72 61 6d 65 73 3a  bits for frames:
0870: 0a 20 2a 0a 20 2a 20 52 45 44 52 41 57 5f 50 45  . *. * REDRAW_PE
0880: 4e 44 49 4e 47 3a 09 09 4e 6f 6e 2d 7a 65 72 6f  NDING:..Non-zero
0890: 20 6d 65 61 6e 73 20 61 20 44 6f 57 68 65 6e 49   means a DoWhenI
08a0: 64 6c 65 20 68 61 6e 64 6c 65 72 0a 20 2a 09 09  dle handler. *..
08b0: 09 09 68 61 73 20 61 6c 72 65 61 64 79 20 62 65  ..has already be
08c0: 65 6e 20 71 75 65 75 65 64 20 74 6f 20 72 65 64  en queued to red
08d0: 72 61 77 0a 20 2a 09 09 09 09 74 68 69 73 20 77  raw. *....this w
08e0: 69 6e 64 6f 77 2e 0a 20 2a 20 43 4c 45 41 52 5f  indow.. * CLEAR_
08f0: 4e 45 45 44 45 44 3b 09 09 4e 65 65 64 20 74 6f  NEEDED;..Need to
0900: 20 63 6c 65 61 72 20 74 68 65 20 77 69 6e 64 6f   clear the windo
0910: 77 20 77 68 65 6e 20 72 65 64 72 61 77 69 6e 67  w when redrawing
0920: 2e 0a 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 52  .. */..#define R
0930: 45 44 52 41 57 5f 50 45 4e 44 49 4e 47 09 09 31  EDRAW_PENDING..1
0940: 0a 23 64 65 66 69 6e 65 20 43 4c 45 41 52 5f 4e  .#define CLEAR_N
0950: 45 45 44 45 44 09 09 32 0a 0a 2f 2a 0a 20 2a 20  EEDED..2../*. * 
0960: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 6c  The following fl
0970: 61 67 20 62 69 74 73 20 61 72 65 20 75 73 65 64  ag bits are used
0980: 20 73 6f 20 74 68 61 74 20 74 68 65 72 65 20 63   so that there c
0990: 61 6e 20 62 65 20 73 65 70 61 72 61 74 65 0a 20  an be separate. 
09a0: 2a 20 64 65 66 61 75 6c 74 73 20 66 6f 72 20 73  * defaults for s
09b0: 6f 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ome configuratio
09c0: 6e 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 66 72  n options for fr
09d0: 61 6d 65 73 20 61 6e 64 20 74 6f 70 6c 65 76 65  ames and topleve
09e0: 6c 73 2e 0a 20 2a 2f 0a 0a 23 64 65 66 69 6e 65  ls.. */..#define
09f0: 20 46 52 41 4d 45 09 09 54 4b 5f 43 4f 4e 46 49   FRAME..TK_CONFI
0a00: 47 5f 55 53 45 52 5f 42 49 54 0a 23 64 65 66 69  G_USER_BIT.#defi
0a10: 6e 65 20 54 4f 50 4c 45 56 45 4c 09 28 54 4b 5f  ne TOPLEVEL.(TK_
0a20: 43 4f 4e 46 49 47 5f 55 53 45 52 5f 42 49 54 20  CONFIG_USER_BIT 
0a30: 3c 3c 20 31 29 0a 23 64 65 66 69 6e 65 20 42 4f  << 1).#define BO
0a40: 54 48 09 09 28 46 52 41 4d 45 20 7c 20 54 4f 50  TH..(FRAME | TOP
0a50: 4c 45 56 45 4c 29 0a 0a 73 74 61 74 69 63 20 54  LEVEL)..static T
0a60: 6b 5f 43 6f 6e 66 69 67 53 70 65 63 20 63 6f 6e  k_ConfigSpec con
0a70: 66 69 67 53 70 65 63 73 5b 5d 20 3d 20 7b 0a 20  figSpecs[] = {. 
0a80: 20 20 20 7b 54 4b 5f 43 4f 4e 46 49 47 5f 53 59     {TK_CONFIG_SY
0a90: 4e 4f 4e 59 4d 2c 20 22 2d 62 64 22 2c 20 22 62  NONYM, "-bd", "b
0aa0: 6f 72 64 65 72 57 69 64 74 68 22 2c 20 28 63 68  orderWidth", (ch
0ab0: 61 72 20 2a 29 20 4e 55 4c 4c 2c 0a 09 28 63 68  ar *) NULL,..(ch
0ac0: 61 72 20 2a 29 20 4e 55 4c 4c 2c 20 30 2c 20 42  ar *) NULL, 0, B
0ad0: 4f 54 48 7d 2c 0a 20 20 20 20 7b 54 4b 5f 43 4f  OTH},.    {TK_CO
0ae0: 4e 46 49 47 5f 50 49 58 45 4c 53 2c 20 22 2d 62  NFIG_PIXELS, "-b
0af0: 6f 72 64 65 72 77 69 64 74 68 22 2c 20 22 62 6f  orderwidth", "bo
0b00: 72 64 65 72 57 69 64 74 68 22 2c 20 22 42 6f 72  rderWidth", "Bor
0b10: 64 65 72 57 69 64 74 68 22 2c 0a 09 44 45 46 5f  derWidth",..DEF_
0b20: 46 52 41 4d 45 5f 42 4f 52 44 45 52 5f 57 49 44  FRAME_BORDER_WID
0b30: 54 48 2c 20 54 6b 5f 4f 66 66 73 65 74 28 46 72  TH, Tk_Offset(Fr
0b40: 61 6d 65 2c 20 62 6f 72 64 65 72 57 69 64 74 68  ame, borderWidth
0b50: 29 2c 20 46 52 41 4d 45 7d 2c 0a 20 20 20 20 7b  ), FRAME},.    {
0b60: 54 4b 5f 43 4f 4e 46 49 47 5f 50 49 58 45 4c 53  TK_CONFIG_PIXELS
0b70: 2c 20 22 2d 62 6f 72 64 65 72 77 69 64 74 68 22  , "-borderwidth"
0b80: 2c 20 22 62 6f 72 64 65 72 57 69 64 74 68 22 2c  , "borderWidth",
0b90: 20 22 42 6f 72 64 65 72 57 69 64 74 68 22 2c 0a   "BorderWidth",.
0ba0: 09 44 45 46 5f 54 4f 50 4c 45 56 45 4c 5f 42 4f  .DEF_TOPLEVEL_BO
0bb0: 52 44 45 52 5f 57 49 44 54 48 2c 20 54 6b 5f 4f  RDER_WIDTH, Tk_O
0bc0: 66 66 73 65 74 28 46 72 61 6d 65 2c 20 62 6f 72  ffset(Frame, bor
0bd0: 64 65 72 57 69 64 74 68 29 2c 20 54 4f 50 4c 45  derWidth), TOPLE
0be0: 56 45 4c 7d 2c 0a 20 20 20 20 7b 54 4b 5f 43 4f  VEL},.    {TK_CO
0bf0: 4e 46 49 47 5f 53 54 52 49 4e 47 2c 20 22 2d 63  NFIG_STRING, "-c
0c00: 6c 61 73 73 22 2c 20 22 63 6c 61 73 73 22 2c 20  lass", "class", 
0c10: 22 43 6c 61 73 73 22 2c 0a 09 44 45 46 5f 46 52  "Class",..DEF_FR
0c20: 41 4d 45 5f 43 4c 41 53 53 2c 20 54 6b 5f 4f 66  AME_CLASS, Tk_Of
0c30: 66 73 65 74 28 46 72 61 6d 65 2c 20 63 6c 61 73  fset(Frame, clas
0c40: 73 4e 61 6d 65 29 2c 20 46 52 41 4d 45 7d 2c 0a  sName), FRAME},.
0c50: 20 20 20 20 7b 54 4b 5f 43 4f 4e 46 49 47 5f 53      {TK_CONFIG_S
0c60: 54 52 49 4e 47 2c 20 22 2d 63 6c 61 73 73 22 2c  TRING, "-class",
0c70: 20 22 63 6c 61 73 73 22 2c 20 22 43 6c 61 73 73   "class", "Class
0c80: 22 2c 0a 09 44 45 46 5f 54 4f 50 4c 45 56 45 4c  ",..DEF_TOPLEVEL
0c90: 5f 43 4c 41 53 53 2c 20 54 6b 5f 4f 66 66 73 65  _CLASS, Tk_Offse
0ca0: 74 28 46 72 61 6d 65 2c 20 63 6c 61 73 73 4e 61  t(Frame, classNa
0cb0: 6d 65 29 2c 20 54 4f 50 4c 45 56 45 4c 7d 2c 0a  me), TOPLEVEL},.
0cc0: 20 20 20 20 7b 54 4b 5f 43 4f 4e 46 49 47 5f 50      {TK_CONFIG_P
0cd0: 49 58 45 4c 53 2c 20 22 2d 68 65 69 67 68 74 22  IXELS, "-height"
0ce0: 2c 20 22 68 65 69 67 68 74 22 2c 20 22 48 65 69  , "height", "Hei
0cf0: 67 68 74 22 2c 0a 09 44 45 46 5f 46 52 41 4d 45  ght",..DEF_FRAME
0d00: 5f 48 45 49 47 48 54 2c 20 54 6b 5f 4f 66 66 73  _HEIGHT, Tk_Offs
0d10: 65 74 28 46 72 61 6d 65 2c 20 68 65 69 67 68 74  et(Frame, height
0d20: 29 2c 20 42 4f 54 48 7d 2c 0a 20 20 20 20 7b 54  ), BOTH},.    {T
0d30: 4b 5f 43 4f 4e 46 49 47 5f 53 54 52 49 4e 47 2c  K_CONFIG_STRING,
0d40: 20 22 2d 73 63 72 65 65 6e 22 2c 20 22 73 63 72   "-screen", "scr
0d50: 65 65 6e 22 2c 20 22 53 63 72 65 65 6e 22 2c 0a  een", "Screen",.
0d60: 09 44 45 46 5f 54 4f 50 4c 45 56 45 4c 5f 53 43  .DEF_TOPLEVEL_SC
0d70: 52 45 45 4e 2c 20 54 6b 5f 4f 66 66 73 65 74 28  REEN, Tk_Offset(
0d80: 46 72 61 6d 65 2c 20 73 63 72 65 65 6e 4e 61 6d  Frame, screenNam
0d90: 65 29 2c 0a 09 54 4f 50 4c 45 56 45 4c 7c 54 4b  e),..TOPLEVEL|TK
0da0: 5f 43 4f 4e 46 49 47 5f 4e 55 4c 4c 5f 4f 4b 7d  _CONFIG_NULL_OK}
0db0: 2c 0a 20 20 20 20 7b 54 4b 5f 43 4f 4e 46 49 47  ,.    {TK_CONFIG
0dc0: 5f 53 54 52 49 4e 47 2c 20 22 2d 74 61 6b 65 66  _STRING, "-takef
0dd0: 6f 63 75 73 22 2c 20 22 74 61 6b 65 46 6f 63 75  ocus", "takeFocu
0de0: 73 22 2c 20 22 54 61 6b 65 46 6f 63 75 73 22 2c  s", "TakeFocus",
0df0: 0a 09 44 45 46 5f 46 52 41 4d 45 5f 54 41 4b 45  ..DEF_FRAME_TAKE
0e00: 5f 46 4f 43 55 53 2c 20 54 6b 5f 4f 66 66 73 65  _FOCUS, Tk_Offse
0e10: 74 28 46 72 61 6d 65 2c 20 74 61 6b 65 46 6f 63  t(Frame, takeFoc
0e20: 75 73 29 2c 0a 09 42 4f 54 48 7c 54 4b 5f 43 4f  us),..BOTH|TK_CO
0e30: 4e 46 49 47 5f 4e 55 4c 4c 5f 4f 4b 7d 2c 0a 20  NFIG_NULL_OK},. 
0e40: 20 20 20 7b 54 4b 5f 43 4f 4e 46 49 47 5f 53 54     {TK_CONFIG_ST
0e50: 52 49 4e 47 2c 20 22 2d 74 69 74 6c 65 22 2c 20  RING, "-title", 
0e60: 22 74 69 74 6c 65 22 2c 20 22 54 69 74 6c 65 22  "title", "Title"
0e70: 2c 0a 09 44 45 46 5f 54 4f 50 4c 45 56 45 4c 5f  ,..DEF_TOPLEVEL_
0e80: 54 49 54 4c 45 2c 20 54 6b 5f 4f 66 66 73 65 74  TITLE, Tk_Offset
0e90: 28 46 72 61 6d 65 2c 20 74 69 74 6c 65 29 2c 0a  (Frame, title),.
0ea0: 09 54 4f 50 4c 45 56 45 4c 7c 54 4b 5f 43 4f 4e  .TOPLEVEL|TK_CON
0eb0: 46 49 47 5f 4e 55 4c 4c 5f 4f 4b 7d 2c 0a 20 20  FIG_NULL_OK},.  
0ec0: 20 20 7b 54 4b 5f 43 4f 4e 46 49 47 5f 50 49 58    {TK_CONFIG_PIX
0ed0: 45 4c 53 2c 20 22 2d 77 69 64 74 68 22 2c 20 22  ELS, "-width", "
0ee0: 77 69 64 74 68 22 2c 20 22 57 69 64 74 68 22 2c  width", "Width",
0ef0: 0a 09 44 45 46 5f 46 52 41 4d 45 5f 57 49 44 54  ..DEF_FRAME_WIDT
0f00: 48 2c 20 54 6b 5f 4f 66 66 73 65 74 28 46 72 61  H, Tk_Offset(Fra
0f10: 6d 65 2c 20 77 69 64 74 68 29 2c 20 42 4f 54 48  me, width), BOTH
0f20: 7d 2c 0a 20 20 20 20 7b 54 4b 5f 43 4f 4e 46 49  },.    {TK_CONFI
0f30: 47 5f 45 4e 44 2c 20 28 63 68 61 72 20 2a 29 20  G_END, (char *) 
0f40: 4e 55 4c 4c 2c 20 28 63 68 61 72 20 2a 29 20 4e  NULL, (char *) N
0f50: 55 4c 4c 2c 20 28 63 68 61 72 20 2a 29 20 4e 55  ULL, (char *) NU
0f60: 4c 4c 2c 0a 09 28 63 68 61 72 20 2a 29 20 4e 55  LL,..(char *) NU
0f70: 4c 4c 2c 20 30 2c 20 30 7d 0a 7d 3b 0a 0a 2f 2a  LL, 0, 0}.};../*
0f80: 0a 20 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c  . * Forward decl
0f90: 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 70 72 6f  arations for pro
0fa0: 63 65 64 75 72 65 73 20 64 65 66 69 6e 65 64 20  cedures defined 
0fb0: 6c 61 74 65 72 20 69 6e 20 74 68 69 73 20 66 69  later in this fi
0fc0: 6c 65 3a 0a 20 2a 2f 0a 0a 73 74 61 74 69 63 20  le:. */..static 
0fd0: 69 6e 74 09 09 43 6f 6e 66 69 67 75 72 65 46 72  int..ConfigureFr
0fe0: 61 6d 65 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28  ame _ANSI_ARGS_(
0ff0: 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74  (Tcl_Interp *int
1000: 65 72 70 2c 0a 09 09 09 20 20 20 20 46 72 61 6d  erp,....    Fram
1010: 65 20 2a 66 72 61 6d 65 50 74 72 2c 20 69 6e 74  e *framePtr, int
1020: 20 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61 72   argc, char **ar
1030: 67 76 2c 0a 09 09 09 20 20 20 20 69 6e 74 20 66  gv,....    int f
1040: 6c 61 67 73 29 29 3b 0a 73 74 61 74 69 63 20 76  lags));.static v
1050: 6f 69 64 09 09 44 65 73 74 72 6f 79 46 72 61 6d  oid..DestroyFram
1060: 65 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 43  e _ANSI_ARGS_((C
1070: 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74  lientData client
1080: 44 61 74 61 29 29 3b 0a 73 74 61 74 69 63 20 76  Data));.static v
1090: 6f 69 64 09 09 44 69 73 70 6c 61 79 46 72 61 6d  oid..DisplayFram
10a0: 65 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 43  e _ANSI_ARGS_((C
10b0: 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74  lientData client
10c0: 44 61 74 61 29 29 3b 0a 73 74 61 74 69 63 20 76  Data));.static v
10d0: 6f 69 64 09 09 46 72 61 6d 65 43 6d 64 44 65 6c  oid..FrameCmdDel
10e0: 65 74 65 64 50 72 6f 63 20 5f 41 4e 53 49 5f 41  etedProc _ANSI_A
10f0: 52 47 53 5f 28 28 0a 09 09 09 20 20 20 20 43 6c  RGS_((....    Cl
1100: 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44  ientData clientD
1110: 61 74 61 29 29 3b 0a 73 74 61 74 69 63 20 76 6f  ata));.static vo
1120: 69 64 09 09 46 72 61 6d 65 45 76 65 6e 74 50 72  id..FrameEventPr
1130: 6f 63 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28  oc _ANSI_ARGS_((
1140: 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e  ClientData clien
1150: 74 44 61 74 61 2c 0a 09 09 09 20 20 20 20 58 45  tData,....    XE
1160: 76 65 6e 74 20 2a 65 76 65 6e 74 50 74 72 29 29  vent *eventPtr))
1170: 3b 0a 73 74 61 74 69 63 20 69 6e 74 09 09 46 72  ;.static int..Fr
1180: 61 6d 65 57 69 64 67 65 74 43 6d 64 20 5f 41 4e  ameWidgetCmd _AN
1190: 53 49 5f 41 52 47 53 5f 28 28 43 6c 69 65 6e 74  SI_ARGS_((Client
11a0: 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c  Data clientData,
11b0: 0a 09 09 09 20 20 20 20 54 63 6c 5f 49 6e 74 65  ....    Tcl_Inte
11c0: 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20  rp *interp, int 
11d0: 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61 72 67  argc, char **arg
11e0: 76 29 29 3b 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d  v));.../*. *----
11f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1200: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1210: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a  ----------. *. *
1230: 20 54 6b 5f 46 72 61 6d 65 43 6d 64 20 2d 2d 0a   Tk_FrameCmd --.
1240: 20 2a 0a 20 2a 09 54 68 69 73 20 70 72 6f 63 65   *. *.This proce
1250: 64 75 72 65 20 69 73 20 69 6e 76 6f 6b 65 64 20  dure is invoked 
1260: 74 6f 20 70 72 6f 63 65 73 73 20 74 68 65 20 22  to process the "
1270: 66 72 61 6d 65 22 20 61 6e 64 0a 20 2a 09 22 74  frame" and. *."t
1280: 6f 70 6c 65 76 65 6c 22 20 54 63 6c 20 63 6f 6d  oplevel" Tcl com
1290: 6d 61 6e 64 73 2e 20 20 53 65 65 20 74 68 65 20  mands.  See the 
12a0: 75 73 65 72 20 64 6f 63 75 6d 65 6e 74 61 74 69  user documentati
12b0: 6f 6e 20 66 6f 72 0a 20 2a 09 64 65 74 61 69 6c  on for. *.detail
12c0: 73 20 6f 6e 20 77 68 61 74 20 69 74 20 64 6f 65  s on what it doe
12d0: 73 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73  s.. *. * Results
12e0: 3a 0a 20 2a 09 41 20 73 74 61 6e 64 61 72 64 20  :. *.A standard 
12f0: 54 63 6c 20 72 65 73 75 6c 74 2e 0a 20 2a 0a 20  Tcl result.. *. 
1300: 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a  * Side effects:.
1310: 20 2a 09 53 65 65 20 74 68 65 20 75 73 65 72 20   *.See the user 
1320: 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 2e 0a 20  documentation.. 
1330: 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *. *------------
1340: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1350: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1360: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1370: 2d 2d 0a 20 2a 2f 0a 0a 69 6e 74 0a 54 6b 5f 46  --. */..int.Tk_F
1380: 72 61 6d 65 43 6d 64 28 63 6c 69 65 6e 74 44 61  rameCmd(clientDa
1390: 74 61 2c 20 69 6e 74 65 72 70 2c 20 61 72 67 63  ta, interp, argc
13a0: 2c 20 61 72 67 76 29 0a 20 20 20 20 43 6c 69 65  , argv).    Clie
13b0: 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74  ntData clientDat
13c0: 61 3b 09 2f 2a 20 4d 61 69 6e 20 77 69 6e 64 6f  a;./* Main windo
13d0: 77 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  w associated wit
13e0: 68 0a 09 09 09 09 20 2a 20 69 6e 74 65 72 70 72  h..... * interpr
13f0: 65 74 65 72 2e 20 2a 2f 0a 20 20 20 20 54 63 6c  eter. */.    Tcl
1400: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b  _Interp *interp;
1410: 09 09 2f 2a 20 43 75 72 72 65 6e 74 20 69 6e 74  ../* Current int
1420: 65 72 70 72 65 74 65 72 2e 20 2a 2f 0a 20 20 20  erpreter. */.   
1430: 20 69 6e 74 20 61 72 67 63 3b 09 09 09 2f 2a 20   int argc;.../* 
1440: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
1450: 6e 74 73 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72  nts. */.    char
1460: 20 2a 2a 61 72 67 76 3b 09 09 2f 2a 20 41 72 67   **argv;../* Arg
1470: 75 6d 65 6e 74 20 73 74 72 69 6e 67 73 2e 20 2a  ument strings. *
1480: 2f 0a 7b 0a 20 20 20 20 54 6b 5f 57 69 6e 64 6f  /.{.    Tk_Windo
1490: 77 20 74 6b 77 69 6e 20 3d 20 28 54 6b 5f 57 69  w tkwin = (Tk_Wi
14a0: 6e 64 6f 77 29 20 63 6c 69 65 6e 74 44 61 74 61  ndow) clientData
14b0: 3b 0a 20 20 20 20 46 72 61 6d 65 20 2a 66 72 61  ;.    Frame *fra
14c0: 6d 65 50 74 72 3b 0a 20 20 20 20 54 6b 5f 57 69  mePtr;.    Tk_Wi
14d0: 6e 64 6f 77 20 6e 65 77 20 3d 20 4e 55 4c 4c 3b  ndow new = NULL;
14e0: 0a 20 20 20 20 63 68 61 72 20 2a 63 6c 61 73 73  .    char *class
14f0: 4e 61 6d 65 2c 20 2a 73 63 72 65 65 6e 4e 61 6d  Name, *screenNam
1500: 65 2c 20 2a 61 72 67 3b 0a 20 20 20 20 69 6e 74  e, *arg;.    int
1510: 20 69 2c 20 63 2c 20 6c 65 6e 67 74 68 2c 20 74   i, c, length, t
1520: 6f 70 6c 65 76 65 6c 3b 0a 0a 20 20 20 20 69 66  oplevel;..    if
1530: 20 28 61 72 67 63 20 3c 20 32 29 20 7b 0a 09 54   (argc < 2) {..T
1540: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
1550: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
1560: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
1570: 20 5c 22 22 2c 0a 09 09 61 72 67 76 5b 30 5d 2c   \"",...argv[0],
1580: 20 22 20 70 61 74 68 4e 61 6d 65 20 3f 6f 70 74   " pathName ?opt
1590: 69 6f 6e 73 3f 5c 22 22 2c 20 28 63 68 61 72 20  ions?\"", (char 
15a0: 2a 29 20 4e 55 4c 4c 29 3b 0a 09 72 65 74 75 72  *) NULL);..retur
15b0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20  n TCL_ERROR;.   
15c0: 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20   }..    /*.     
15d0: 2a 20 50 72 65 2d 70 72 6f 63 65 73 73 20 74 68  * Pre-process th
15e0: 65 20 61 72 67 75 6d 65 6e 74 20 6c 69 73 74 2e  e argument list.
15f0: 20 20 53 63 61 6e 20 74 68 72 6f 75 67 68 20 69    Scan through i
1600: 74 20 74 6f 20 66 69 6e 64 20 61 6e 79 0a 20 20  t to find any.  
1610: 20 20 20 2a 20 22 2d 63 6c 61 73 73 22 20 61 6e     * "-class" an
1620: 64 20 22 2d 73 63 72 65 65 6e 22 20 6f 70 74 69  d "-screen" opti
1630: 6f 6e 73 2e 20 20 54 68 65 73 65 0a 20 20 20 20  ons.  These.    
1640: 20 2a 20 61 72 67 75 6d 65 6e 74 73 20 6e 65 65   * arguments nee
1650: 64 20 74 6f 20 62 65 20 70 72 6f 63 65 73 73 65  d to be processe
1660: 64 20 73 70 65 63 69 61 6c 6c 79 2c 20 62 65 66  d specially, bef
1670: 6f 72 65 20 74 68 65 20 77 69 6e 64 6f 77 0a 20  ore the window. 
1680: 20 20 20 20 2a 20 69 73 20 63 6f 6e 66 69 67 75      * is configu
1690: 72 65 64 20 75 73 69 6e 67 20 74 68 65 20 75 73  red using the us
16a0: 75 61 6c 20 54 6b 20 6d 65 63 68 61 6e 69 73 6d  ual Tk mechanism
16b0: 73 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20  s..     */..    
16c0: 74 6f 70 6c 65 76 65 6c 20 3d 20 28 61 72 67 76  toplevel = (argv
16d0: 5b 30 5d 5b 30 5d 20 3d 3d 20 27 74 27 29 3b 0a  [0][0] == 't');.
16e0: 20 20 20 20 63 6c 61 73 73 4e 61 6d 65 20 3d 20      className = 
16f0: 73 63 72 65 65 6e 4e 61 6d 65 20 3d 20 4e 55 4c  screenName = NUL
1700: 4c 3b 0a 20 20 20 20 66 6f 72 20 28 69 20 3d 20  L;.    for (i = 
1710: 32 3b 20 69 20 3c 20 61 72 67 63 3b 20 69 20 2b  2; i < argc; i +
1720: 3d 20 32 29 20 7b 0a 09 61 72 67 20 3d 20 61 72  = 2) {..arg = ar
1730: 67 76 5b 69 5d 3b 0a 09 6c 65 6e 67 74 68 20 3d  gv[i];..length =
1740: 20 73 74 72 6c 65 6e 28 61 72 67 29 3b 0a 09 69   strlen(arg);..i
1750: 66 20 28 6c 65 6e 67 74 68 20 3c 20 32 29 20 7b  f (length < 2) {
1760: 0a 09 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a  ..    continue;.
1770: 09 7d 0a 09 63 20 3d 20 61 72 67 5b 31 5d 3b 0a  .}..c = arg[1];.
1780: 09 69 66 20 28 28 63 20 3d 3d 20 27 63 27 29 20  .if ((c == 'c') 
1790: 26 26 20 28 73 74 72 6e 63 6d 70 28 61 72 67 2c  && (strncmp(arg,
17a0: 20 22 2d 63 6c 61 73 73 22 2c 20 73 74 72 6c 65   "-class", strle
17b0: 6e 28 61 72 67 29 29 20 3d 3d 20 30 29 0a 09 09  n(arg)) == 0)...
17c0: 26 26 20 28 6c 65 6e 67 74 68 20 3e 3d 20 33 29  && (length >= 3)
17d0: 29 20 7b 0a 09 20 20 20 20 63 6c 61 73 73 4e 61  ) {..    classNa
17e0: 6d 65 20 3d 20 61 72 67 76 5b 69 2b 31 5d 3b 0a  me = argv[i+1];.
17f0: 09 7d 20 65 6c 73 65 20 69 66 20 28 28 63 20 3d  .} else if ((c =
1800: 3d 20 27 73 27 29 20 26 26 20 74 6f 70 6c 65 76  = 's') && toplev
1810: 65 6c 0a 09 09 26 26 20 28 73 74 72 6e 63 6d 70  el...&& (strncmp
1820: 28 61 72 67 2c 20 22 2d 73 63 72 65 65 6e 22 2c  (arg, "-screen",
1830: 20 73 74 72 6c 65 6e 28 61 72 67 29 29 20 3d 3d   strlen(arg)) ==
1840: 20 30 29 29 20 7b 0a 09 20 20 20 20 73 63 72 65   0)) {..    scre
1850: 65 6e 4e 61 6d 65 20 3d 20 61 72 67 76 5b 69 2b  enName = argv[i+
1860: 31 5d 3b 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 20  1];..}.    }..  
1870: 20 20 2f 2a 0a 20 20 20 20 20 2a 20 43 72 65 61    /*.     * Crea
1880: 74 65 20 74 68 65 20 77 69 6e 64 6f 77 2c 20 61  te the window, a
1890: 6e 64 20 64 65 61 6c 20 77 69 74 68 20 74 68 65  nd deal with the
18a0: 20 73 70 65 63 69 61 6c 20 6f 70 74 69 6f 6e 73   special options
18b0: 20 2d 63 6c 61 73 73 6e 61 6d 65 2c 0a 20 20 20   -classname,.   
18c0: 20 20 2a 20 61 6e 64 20 2d 73 63 72 65 65 6e 6e    * and -screenn
18d0: 61 6d 65 2e 20 20 54 68 65 20 6f 72 64 65 72 20  ame.  The order 
18e0: 68 65 72 65 20 69 73 20 74 72 69 63 6b 79 2c 0a  here is tricky,.
18f0: 20 20 20 20 20 2a 20 62 65 63 61 75 73 65 20 77       * because w
1900: 65 20 77 61 6e 74 20 74 6f 20 61 6c 6c 6f 77 20  e want to allow 
1910: 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 73 65  values for these
1920: 20 6f 70 74 69 6f 6e 73 20 74 6f 20 63 6f 6d 65   options to come
1930: 20 66 72 6f 6d 0a 20 20 20 20 20 2a 20 74 68 65   from.     * the
1940: 20 64 61 74 61 62 61 73 65 2c 20 79 65 74 20 77   database, yet w
1950: 65 20 63 61 6e 27 74 20 64 6f 20 74 68 61 74 20  e can't do that 
1960: 75 6e 74 69 6c 20 74 68 65 20 77 69 6e 64 6f 77  until the window
1970: 20 69 73 20 63 72 65 61 74 65 64 2e 0a 20 20 20   is created..   
1980: 20 20 2a 2f 0a 0a 20 20 20 20 69 66 20 28 73 63    */..    if (sc
1990: 72 65 65 6e 4e 61 6d 65 20 3d 3d 20 4e 55 4c 4c  reenName == NULL
19a0: 29 20 7b 0a 09 73 63 72 65 65 6e 4e 61 6d 65 20  ) {..screenName 
19b0: 3d 20 28 74 6f 70 6c 65 76 65 6c 29 20 3f 20 22  = (toplevel) ? "
19c0: 22 20 3a 20 4e 55 4c 4c 3b 0a 20 20 20 20 7d 0a  " : NULL;.    }.
19d0: 20 20 20 20 6e 65 77 20 3d 20 54 6b 5f 43 72 65      new = Tk_Cre
19e0: 61 74 65 57 69 6e 64 6f 77 46 72 6f 6d 50 61 74  ateWindowFromPat
19f0: 68 28 69 6e 74 65 72 70 2c 20 74 6b 77 69 6e 2c  h(interp, tkwin,
1a00: 20 61 72 67 76 5b 31 5d 2c 20 73 63 72 65 65 6e   argv[1], screen
1a10: 4e 61 6d 65 29 3b 0a 20 20 20 20 69 66 20 28 6e  Name);.    if (n
1a20: 65 77 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 67  ew == NULL) {..g
1a30: 6f 74 6f 20 65 72 72 6f 72 3b 0a 20 20 20 20 7d  oto error;.    }
1a40: 0a 20 20 20 20 69 66 20 28 63 6c 61 73 73 4e 61  .    if (classNa
1a50: 6d 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 63  me == NULL) {..c
1a60: 6c 61 73 73 4e 61 6d 65 20 3d 20 54 6b 5f 47 65  lassName = Tk_Ge
1a70: 74 4f 70 74 69 6f 6e 28 6e 65 77 2c 20 22 63 6c  tOption(new, "cl
1a80: 61 73 73 22 2c 20 22 43 6c 61 73 73 22 29 3b 0a  ass", "Class");.
1a90: 09 69 66 20 28 63 6c 61 73 73 4e 61 6d 65 20 3d  .if (className =
1aa0: 3d 20 4e 55 4c 4c 29 20 7b 0a 09 20 20 20 20 63  = NULL) {..    c
1ab0: 6c 61 73 73 4e 61 6d 65 20 3d 20 28 74 6f 70 6c  lassName = (topl
1ac0: 65 76 65 6c 29 20 3f 20 22 54 6f 70 6c 65 76 65  evel) ? "Topleve
1ad0: 6c 22 20 3a 20 22 46 72 61 6d 65 22 3b 0a 09 7d  l" : "Frame";..}
1ae0: 0a 20 20 20 20 7d 0a 20 20 20 20 54 6b 5f 53 65  .    }.    Tk_Se
1af0: 74 43 6c 61 73 73 28 6e 65 77 2c 20 63 6c 61 73  tClass(new, clas
1b00: 73 4e 61 6d 65 29 3b 0a 0a 20 20 20 20 2f 2a 0a  sName);..    /*.
1b10: 20 20 20 20 20 2a 20 43 72 65 61 74 65 20 74 68       * Create th
1b20: 65 20 77 69 64 67 65 74 20 72 65 63 6f 72 64 2c  e widget record,
1b30: 20 70 72 6f 63 65 73 73 20 63 6f 6e 66 69 67 75   process configu
1b40: 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2c 20  ration options, 
1b50: 61 6e 64 0a 20 20 20 20 20 2a 20 63 72 65 61 74  and.     * creat
1b60: 65 20 65 76 65 6e 74 20 68 61 6e 64 6c 65 72 73  e event handlers
1b70: 2e 20 20 54 68 65 6e 20 66 69 6c 6c 20 69 6e 20  .  Then fill in 
1b80: 61 20 66 65 77 20 61 64 64 69 74 69 6f 6e 61 6c  a few additional
1b90: 20 66 69 65 6c 64 73 0a 20 20 20 20 20 2a 20 69   fields.     * i
1ba0: 6e 20 74 68 65 20 77 69 64 67 65 74 20 72 65 63  n the widget rec
1bb0: 6f 72 64 20 66 72 6f 6d 20 74 68 65 20 73 70 65  ord from the spe
1bc0: 63 69 61 6c 20 6f 70 74 69 6f 6e 73 2e 0a 20 20  cial options..  
1bd0: 20 20 20 2a 2f 0a 0a 20 20 20 20 66 72 61 6d 65     */..    frame
1be0: 50 74 72 20 3d 20 28 46 72 61 6d 65 20 2a 29 20  Ptr = (Frame *) 
1bf0: 54 6b 49 6e 69 74 46 72 61 6d 65 28 69 6e 74 65  TkInitFrame(inte
1c00: 72 70 2c 20 6e 65 77 2c 20 74 6f 70 6c 65 76 65  rp, new, topleve
1c10: 6c 2c 20 61 72 67 63 2d 32 2c 20 61 72 67 76 2b  l, argc-2, argv+
1c20: 32 29 3b 0a 20 20 20 20 69 66 20 28 66 72 61 6d  2);.    if (fram
1c30: 65 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a  ePtr == NULL) {.
1c40: 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f  .return TCL_ERRO
1c50: 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  R;.    }.    ret
1c60: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 0a 20 20 20  urn TCL_OK;..   
1c70: 20 65 72 72 6f 72 3a 0a 20 20 20 20 69 66 20 28   error:.    if (
1c80: 6e 65 77 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09  new != NULL) {..
1c90: 54 6b 5f 44 65 73 74 72 6f 79 57 69 6e 64 6f 77  Tk_DestroyWindow
1ca0: 28 6e 65 77 29 3b 0a 20 20 20 20 7d 0a 20 20 20  (new);.    }.   
1cb0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
1cc0: 52 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d  R;.}.../*. *----
1cd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1ce0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1cf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1d00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1d10: 2d 2d 0a 20 2a 0a 20 2a 20 54 6b 49 6e 69 74 46  --. *. * TkInitF
1d20: 72 61 6d 65 20 2d 2d 0a 20 2a 0a 20 2a 09 54 68  rame --. *. *.Th
1d30: 69 73 20 70 72 6f 63 65 64 75 72 65 20 69 6e 69  is procedure ini
1d40: 74 69 61 6c 69 7a 65 73 20 61 20 66 72 61 6d 65  tializes a frame
1d50: 20 6f 72 20 74 6f 70 6c 65 76 65 6c 20 77 69 64   or toplevel wid
1d60: 67 65 74 2e 20 20 49 74 27 73 0a 20 2a 09 73 65  get.  It's. *.se
1d70: 70 61 72 61 74 65 20 66 72 6f 6d 20 54 6b 5f 46  parate from Tk_F
1d80: 72 61 6d 65 43 6d 64 20 73 6f 20 74 68 61 74 20  rameCmd so that 
1d90: 69 74 20 63 61 6e 20 62 65 20 75 73 65 64 20 66  it can be used f
1da0: 6f 72 20 74 68 65 0a 20 2a 09 6d 61 69 6e 20 77  or the. *.main w
1db0: 69 6e 64 6f 77 2c 20 77 68 69 63 68 20 68 61 73  indow, which has
1dc0: 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 63 72   already been cr
1dd0: 65 61 74 65 64 20 65 6c 73 65 77 68 65 72 65 2e  eated elsewhere.
1de0: 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a  . *. * Results:.
1df0: 20 2a 09 52 65 74 75 72 6e 73 20 4e 55 4c 4c 20   *.Returns NULL 
1e00: 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75  if an error occu
1e10: 72 72 65 64 20 77 68 69 6c 65 20 69 6e 69 74 69  rred while initi
1e20: 61 6c 69 7a 69 6e 67 20 74 68 65 0a 20 2a 09 66  alizing the. *.f
1e30: 72 61 6d 65 2e 20 20 4f 74 68 65 72 77 69 73 65  rame.  Otherwise
1e40: 20 72 65 74 75 72 6e 73 20 61 20 70 6f 69 6e 74   returns a point
1e50: 65 72 20 74 6f 20 74 68 65 20 66 72 61 6d 65 27  er to the frame'
1e60: 73 20 77 69 64 67 65 74 0a 20 2a 09 72 65 63 6f  s widget. *.reco
1e70: 72 64 20 28 66 6f 72 20 75 73 65 20 62 79 20 54  rd (for use by T
1e80: 6b 5f 46 72 61 6d 65 43 6d 64 2c 20 69 66 20 69  k_FrameCmd, if i
1e90: 74 20 77 61 73 20 74 68 65 20 63 61 6c 6c 65 72  t was the caller
1ea0: 29 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20 65 66  ).. *. * Side ef
1eb0: 66 65 63 74 73 3a 0a 20 2a 09 41 20 77 69 64 67  fects:. *.A widg
1ec0: 65 74 20 72 65 63 6f 72 64 20 67 65 74 73 20 61  et record gets a
1ed0: 6c 6c 6f 63 61 74 65 64 2c 20 68 61 6e 64 6c 65  llocated, handle
1ee0: 72 73 20 67 65 74 20 73 65 74 20 75 70 2c 20 65  rs get set up, e
1ef0: 74 63 2e 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d  tc... *. *------
1f00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1f10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1f20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1f30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1f40: 0a 20 2a 2f 0a 0a 63 68 61 72 20 2a 0a 54 6b 49  . */..char *.TkI
1f50: 6e 69 74 46 72 61 6d 65 28 69 6e 74 65 72 70 2c  nitFrame(interp,
1f60: 20 74 6b 77 69 6e 2c 20 74 6f 70 6c 65 76 65 6c   tkwin, toplevel
1f70: 2c 20 61 72 67 63 2c 20 61 72 67 76 29 0a 20 20  , argc, argv).  
1f80: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
1f90: 74 65 72 70 3b 09 09 09 2f 2a 20 49 6e 74 65 72  terp;.../* Inter
1fa0: 70 72 65 74 65 72 20 61 73 73 6f 63 69 61 74 65  preter associate
1fb0: 64 20 77 69 74 68 20 74 68 65 0a 09 09 09 09 09  d with the......
1fc0: 20 2a 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 20   * application. 
1fd0: 2a 2f 0a 20 20 20 20 54 6b 5f 57 69 6e 64 6f 77  */.    Tk_Window
1fe0: 20 74 6b 77 69 6e 3b 09 09 09 2f 2a 20 57 69 6e   tkwin;.../* Win
1ff0: 64 6f 77 20 74 6f 20 75 73 65 20 66 6f 72 20 66  dow to use for f
2000: 72 61 6d 65 20 6f 72 0a 09 09 09 09 09 20 2a 20  rame or...... * 
2010: 74 6f 70 2d 6c 65 76 65 6c 2e 20 20 20 43 61 6c  top-level.   Cal
2020: 6c 65 72 20 6d 75 73 74 20 61 6c 72 65 61 64 79  ler must already
2030: 0a 09 09 09 09 09 20 2a 20 68 61 76 65 20 73 65  ...... * have se
2040: 74 20 77 69 6e 64 6f 77 27 73 20 63 6c 61 73 73  t window's class
2050: 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 74 6f 70  . */.    int top
2060: 6c 65 76 65 6c 3b 09 09 09 2f 2a 20 4e 6f 6e 2d  level;.../* Non-
2070: 7a 65 72 6f 20 6d 65 61 6e 73 20 74 68 61 74 20  zero means that 
2080: 74 68 69 73 20 69 73 20 61 0a 09 09 09 09 09 20  this is a...... 
2090: 2a 20 74 6f 70 2d 6c 65 76 65 6c 20 77 69 6e 64  * top-level wind
20a0: 6f 77 2c 20 30 20 6d 65 61 6e 73 20 69 74 27 73  ow, 0 means it's
20b0: 20 61 0a 09 09 09 09 09 20 2a 20 66 72 61 6d 65   a...... * frame
20c0: 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 72 67  . */.    int arg
20d0: 63 3b 09 09 09 09 2f 2a 20 4e 75 6d 62 65 72 20  c;..../* Number 
20e0: 6f 66 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  of configuration
20f0: 20 61 72 67 75 6d 65 6e 74 73 0a 09 09 09 09 09   arguments......
2100: 20 2a 20 28 6e 6f 74 20 69 6e 63 6c 75 64 69 6e   * (not includin
2110: 67 20 63 6c 61 73 73 20 63 6f 6d 6d 61 6e 64 20  g class command 
2120: 61 6e 64 0a 09 09 09 09 09 20 2a 20 77 69 6e 64  and...... * wind
2130: 6f 77 20 6e 61 6d 65 29 2e 20 2a 2f 0a 20 20 20  ow name). */.   
2140: 20 63 68 61 72 20 2a 61 72 67 76 5b 5d 3b 09 09   char *argv[];..
2150: 09 2f 2a 20 43 6f 6e 66 69 67 75 72 61 74 69 6f  ./* Configuratio
2160: 6e 20 61 72 67 75 6d 65 6e 74 73 2e 20 2a 2f 0a  n arguments. */.
2170: 7b 0a 20 20 20 20 72 65 67 69 73 74 65 72 20 46  {.    register F
2180: 72 61 6d 65 20 2a 66 72 61 6d 65 50 74 72 3b 0a  rame *framePtr;.
2190: 0a 20 20 20 20 66 72 61 6d 65 50 74 72 20 3d 20  .    framePtr = 
21a0: 28 46 72 61 6d 65 20 2a 29 20 63 6b 61 6c 6c 6f  (Frame *) ckallo
21b0: 63 28 73 69 7a 65 6f 66 28 46 72 61 6d 65 29 29  c(sizeof(Frame))
21c0: 3b 0a 20 20 20 20 66 72 61 6d 65 50 74 72 2d 3e  ;.    framePtr->
21d0: 74 6b 77 69 6e 20 3d 20 74 6b 77 69 6e 3b 0a 20  tkwin = tkwin;. 
21e0: 20 20 20 66 72 61 6d 65 50 74 72 2d 3e 69 6e 74     framePtr->int
21f0: 65 72 70 20 3d 20 69 6e 74 65 72 70 3b 0a 20 20  erp = interp;.  
2200: 20 20 66 72 61 6d 65 50 74 72 2d 3e 77 69 64 67    framePtr->widg
2210: 65 74 43 6d 64 20 3d 20 54 63 6c 5f 43 72 65 61  etCmd = Tcl_Crea
2220: 74 65 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70  teCommand(interp
2230: 2c 0a 09 20 20 20 20 54 6b 5f 50 61 74 68 4e 61  ,..    Tk_PathNa
2240: 6d 65 28 66 72 61 6d 65 50 74 72 2d 3e 74 6b 77  me(framePtr->tkw
2250: 69 6e 29 2c 20 46 72 61 6d 65 57 69 64 67 65 74  in), FrameWidget
2260: 43 6d 64 2c 0a 09 20 20 20 20 28 43 6c 69 65 6e  Cmd,..    (Clien
2270: 74 44 61 74 61 29 20 66 72 61 6d 65 50 74 72 2c  tData) framePtr,
2280: 20 46 72 61 6d 65 43 6d 64 44 65 6c 65 74 65 64   FrameCmdDeleted
2290: 50 72 6f 63 29 3b 0a 20 20 20 20 66 72 61 6d 65  Proc);.    frame
22a0: 50 74 72 2d 3e 63 6c 61 73 73 4e 61 6d 65 20 3d  Ptr->className =
22b0: 20 4e 55 4c 4c 3b 0a 20 20 20 20 66 72 61 6d 65   NULL;.    frame
22c0: 50 74 72 2d 3e 6d 61 73 6b 20 3d 20 28 74 6f 70  Ptr->mask = (top
22d0: 6c 65 76 65 6c 29 20 3f 20 54 4f 50 4c 45 56 45  level) ? TOPLEVE
22e0: 4c 20 3a 20 46 52 41 4d 45 3b 0a 20 20 20 20 66  L : FRAME;.    f
22f0: 72 61 6d 65 50 74 72 2d 3e 73 63 72 65 65 6e 4e  ramePtr->screenN
2300: 61 6d 65 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20  ame = NULL;.    
2310: 66 72 61 6d 65 50 74 72 2d 3e 62 6f 72 64 65 72  framePtr->border
2320: 57 69 64 74 68 20 3d 20 30 3b 0a 20 20 20 20 66  Width = 0;.    f
2330: 72 61 6d 65 50 74 72 2d 3e 77 69 64 74 68 20 3d  ramePtr->width =
2340: 20 30 3b 0a 20 20 20 20 66 72 61 6d 65 50 74 72   0;.    framePtr
2350: 2d 3e 68 65 69 67 68 74 20 3d 20 30 3b 0a 20 20  ->height = 0;.  
2360: 20 20 66 72 61 6d 65 50 74 72 2d 3e 74 69 74 6c    framePtr->titl
2370: 65 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 66 72  e = NULL;.    fr
2380: 61 6d 65 50 74 72 2d 3e 74 61 6b 65 46 6f 63 75  amePtr->takeFocu
2390: 73 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 66 72  s = NULL;.    fr
23a0: 61 6d 65 50 74 72 2d 3e 66 6c 61 67 73 20 3d 20  amePtr->flags = 
23b0: 30 3b 0a 20 20 20 20 54 6b 5f 43 72 65 61 74 65  0;.    Tk_Create
23c0: 45 76 65 6e 74 48 61 6e 64 6c 65 72 28 66 72 61  EventHandler(fra
23d0: 6d 65 50 74 72 2d 3e 74 6b 77 69 6e 2c 0a 20 20  mePtr->tkwin,.  
23e0: 20 20 09 20 20 20 20 43 54 4b 5f 45 58 50 4f 53    .    CTK_EXPOS
23f0: 45 5f 45 56 45 4e 54 5f 4d 41 53 4b 7c 43 54 4b  E_EVENT_MASK|CTK
2400: 5f 44 45 53 54 52 4f 59 5f 45 56 45 4e 54 5f 4d  _DESTROY_EVENT_M
2410: 41 53 4b 2c 0a 09 20 20 20 20 46 72 61 6d 65 45  ASK,..    FrameE
2420: 76 65 6e 74 50 72 6f 63 2c 20 28 43 6c 69 65 6e  ventProc, (Clien
2430: 74 44 61 74 61 29 20 66 72 61 6d 65 50 74 72 29  tData) framePtr)
2440: 3b 0a 20 20 20 20 69 66 20 28 43 6f 6e 66 69 67  ;.    if (Config
2450: 75 72 65 46 72 61 6d 65 28 69 6e 74 65 72 70 2c  ureFrame(interp,
2460: 20 66 72 61 6d 65 50 74 72 2c 20 61 72 67 63 2c   framePtr, argc,
2470: 20 61 72 67 76 2c 20 30 29 20 21 3d 20 54 43 4c   argv, 0) != TCL
2480: 5f 4f 4b 29 20 7b 0a 09 54 6b 5f 44 65 73 74 72  _OK) {..Tk_Destr
2490: 6f 79 57 69 6e 64 6f 77 28 66 72 61 6d 65 50 74  oyWindow(framePt
24a0: 72 2d 3e 74 6b 77 69 6e 29 3b 0a 09 72 65 74 75  r->tkwin);..retu
24b0: 72 6e 20 4e 55 4c 4c 3b 0a 20 20 20 20 7d 0a 0a  rn NULL;.    }..
24c0: 20 20 20 20 69 66 20 28 74 6f 70 6c 65 76 65 6c      if (toplevel
24d0: 29 20 7b 0a 09 63 68 61 72 20 2a 70 6c 61 63 65  ) {..char *place
24e0: 41 72 67 76 5b 39 5d 3b 0a 0a 09 70 6c 61 63 65  Argv[9];...place
24f0: 41 72 67 76 5b 30 5d 20 3d 20 22 70 6c 61 63 65  Argv[0] = "place
2500: 22 3b 0a 09 70 6c 61 63 65 41 72 67 76 5b 31 5d  ";..placeArgv[1]
2510: 20 3d 20 54 6b 5f 50 61 74 68 4e 61 6d 65 28 66   = Tk_PathName(f
2520: 72 61 6d 65 50 74 72 2d 3e 74 6b 77 69 6e 29 3b  ramePtr->tkwin);
2530: 0a 09 70 6c 61 63 65 41 72 67 76 5b 32 5d 20 3d  ..placeArgv[2] =
2540: 20 22 2d 72 65 6c 78 22 3b 0a 09 70 6c 61 63 65   "-relx";..place
2550: 41 72 67 76 5b 33 5d 20 3d 20 22 30 2e 35 22 3b  Argv[3] = "0.5";
2560: 0a 09 70 6c 61 63 65 41 72 67 76 5b 34 5d 20 3d  ..placeArgv[4] =
2570: 20 22 2d 72 65 6c 79 22 3b 0a 09 70 6c 61 63 65   "-rely";..place
2580: 41 72 67 76 5b 35 5d 20 3d 20 22 30 2e 35 22 3b  Argv[5] = "0.5";
2590: 0a 09 70 6c 61 63 65 41 72 67 76 5b 36 5d 20 3d  ..placeArgv[6] =
25a0: 20 22 2d 61 6e 63 68 6f 72 22 3b 0a 09 70 6c 61   "-anchor";..pla
25b0: 63 65 41 72 67 76 5b 37 5d 20 3d 20 22 63 65 6e  ceArgv[7] = "cen
25c0: 74 65 72 22 3b 0a 09 70 6c 61 63 65 41 72 67 76  ter";..placeArgv
25d0: 5b 38 5d 20 3d 20 4e 55 4c 4c 3b 0a 09 69 66 20  [8] = NULL;..if 
25e0: 28 54 6b 5f 50 6c 61 63 65 43 6d 64 28 28 43 6c  (Tk_PlaceCmd((Cl
25f0: 69 65 6e 74 44 61 74 61 29 20 66 72 61 6d 65 50  ientData) frameP
2600: 74 72 2d 3e 74 6b 77 69 6e 2c 20 69 6e 74 65 72  tr->tkwin, inter
2610: 70 2c 0a 09 09 38 2c 20 70 6c 61 63 65 41 72 67  p,...8, placeArg
2620: 76 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a  v) != TCL_OK) {.
2630: 09 20 20 20 20 70 61 6e 69 63 28 22 70 6c 61 63  .    panic("plac
2640: 65 20 66 61 69 6c 65 64 20 66 6f 72 20 74 6f 70  e failed for top
2650: 6c 65 76 65 6c 3a 20 25 73 3a 20 25 73 22 2c 0a  level: %s: %s",.
2660: 09 09 20 20 20 20 70 6c 61 63 65 41 72 67 76 5b  ..    placeArgv[
2670: 31 5d 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  1], Tcl_GetStrin
2680: 67 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 29  gResult(interp))
2690: 3b 0a 09 7d 0a 20 20 20 20 7d 20 65 6c 73 65 20  ;..}.    } else 
26a0: 7b 0a 09 74 6b 77 69 6e 2d 3e 66 69 6c 6c 53 74  {..tkwin->fillSt
26b0: 79 6c 65 20 3d 20 43 54 4b 5f 49 4e 56 49 53 49  yle = CTK_INVISI
26c0: 42 4c 45 5f 53 54 59 4c 45 3b 0a 20 20 20 20 7d  BLE_STYLE;.    }
26d0: 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75  .    Tcl_SetResu
26e0: 6c 74 28 69 6e 74 65 72 70 2c 54 6b 5f 50 61 74  lt(interp,Tk_Pat
26f0: 68 4e 61 6d 65 28 66 72 61 6d 65 50 74 72 2d 3e  hName(framePtr->
2700: 74 6b 77 69 6e 29 2c 54 43 4c 5f 56 4f 4c 41 54  tkwin),TCL_VOLAT
2710: 49 4c 45 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  ILE);.    return
2720: 20 28 63 68 61 72 20 2a 29 20 66 72 61 6d 65 50   (char *) frameP
2730: 74 72 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d  tr;.}.../*. *---
2740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2750: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2760: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2770: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20  -----------. *. 
2780: 2a 20 46 72 61 6d 65 57 69 64 67 65 74 43 6d 64  * FrameWidgetCmd
2790: 20 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69 73 20 70   --. *. *.This p
27a0: 72 6f 63 65 64 75 72 65 20 69 73 20 69 6e 76 6f  rocedure is invo
27b0: 6b 65 64 20 74 6f 20 70 72 6f 63 65 73 73 20 74  ked to process t
27c0: 68 65 20 54 63 6c 20 63 6f 6d 6d 61 6e 64 0a 20  he Tcl command. 
27d0: 2a 09 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  *.that correspon
27e0: 64 73 20 74 6f 20 61 20 66 72 61 6d 65 20 77 69  ds to a frame wi
27f0: 64 67 65 74 2e 20 20 53 65 65 20 74 68 65 20 75  dget.  See the u
2800: 73 65 72 0a 20 2a 09 64 6f 63 75 6d 65 6e 74 61  ser. *.documenta
2810: 74 69 6f 6e 20 66 6f 72 20 64 65 74 61 69 6c 73  tion for details
2820: 20 6f 6e 20 77 68 61 74 20 69 74 20 64 6f 65 73   on what it does
2830: 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a  .. *. * Results:
2840: 0a 20 2a 09 41 20 73 74 61 6e 64 61 72 64 20 54  . *.A standard T
2850: 63 6c 20 72 65 73 75 6c 74 2e 0a 20 2a 0a 20 2a  cl result.. *. *
2860: 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 20   Side effects:. 
2870: 2a 09 53 65 65 20 74 68 65 20 75 73 65 72 20 64  *.See the user d
2880: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 2e 0a 20 2a  ocumentation.. *
2890: 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  . *-------------
28a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
28b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
28c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
28d0: 2d 0a 20 2a 2f 0a 0a 73 74 61 74 69 63 20 69 6e  -. */..static in
28e0: 74 0a 46 72 61 6d 65 57 69 64 67 65 74 43 6d 64  t.FrameWidgetCmd
28f0: 28 63 6c 69 65 6e 74 44 61 74 61 2c 20 69 6e 74  (clientData, int
2900: 65 72 70 2c 20 61 72 67 63 2c 20 61 72 67 76 29  erp, argc, argv)
2910: 0a 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20  .    ClientData 
2920: 63 6c 69 65 6e 74 44 61 74 61 3b 09 2f 2a 20 49  clientData;./* I
2930: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
2940: 20 66 72 61 6d 65 20 77 69 64 67 65 74 2e 20 2a   frame widget. *
2950: 2f 0a 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70  /.    Tcl_Interp
2960: 20 2a 69 6e 74 65 72 70 3b 09 09 2f 2a 20 43 75   *interp;../* Cu
2970: 72 72 65 6e 74 20 69 6e 74 65 72 70 72 65 74 65  rrent interprete
2980: 72 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 72  r. */.    int ar
2990: 67 63 3b 09 09 09 2f 2a 20 4e 75 6d 62 65 72 20  gc;.../* Number 
29a0: 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 2a 2f  of arguments. */
29b0: 0a 20 20 20 20 63 68 61 72 20 2a 2a 61 72 67 76  .    char **argv
29c0: 3b 09 09 2f 2a 20 41 72 67 75 6d 65 6e 74 20 73  ;../* Argument s
29d0: 74 72 69 6e 67 73 2e 20 2a 2f 0a 7b 0a 20 20 20  trings. */.{.   
29e0: 20 72 65 67 69 73 74 65 72 20 46 72 61 6d 65 20   register Frame 
29f0: 2a 66 72 61 6d 65 50 74 72 20 3d 20 28 46 72 61  *framePtr = (Fra
2a00: 6d 65 20 2a 29 20 63 6c 69 65 6e 74 44 61 74 61  me *) clientData
2a10: 3b 0a 20 20 20 20 69 6e 74 20 72 65 73 75 6c 74  ;.    int result
2a20: 20 3d 20 54 43 4c 5f 4f 4b 3b 0a 20 20 20 20 73   = TCL_OK;.    s
2a30: 69 7a 65 5f 74 20 6c 65 6e 67 74 68 3b 0a 20 20  ize_t length;.  
2a40: 20 20 69 6e 74 20 63 2c 20 69 3b 0a 0a 20 20 20    int c, i;..   
2a50: 20 69 66 20 28 61 72 67 63 20 3c 20 32 29 20 7b   if (argc < 2) {
2a60: 0a 09 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75  ..Tcl_AppendResu
2a70: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
2a80: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
2a90: 20 62 65 20 5c 22 22 2c 0a 09 09 61 72 67 76 5b   be \"",...argv[
2aa0: 30 5d 2c 20 22 20 6f 70 74 69 6f 6e 20 3f 61 72  0], " option ?ar
2ab0: 67 20 61 72 67 20 2e 2e 2e 3f 5c 22 22 2c 20 28  g arg ...?\"", (
2ac0: 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09  char *) NULL);..
2ad0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
2ae0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 54 6b 5f 50  ;.    }.    Tk_P
2af0: 72 65 73 65 72 76 65 28 28 43 6c 69 65 6e 74 44  reserve((ClientD
2b00: 61 74 61 29 20 66 72 61 6d 65 50 74 72 29 3b 0a  ata) framePtr);.
2b10: 20 20 20 20 63 20 3d 20 61 72 67 76 5b 31 5d 5b      c = argv[1][
2b20: 30 5d 3b 0a 20 20 20 20 6c 65 6e 67 74 68 20 3d  0];.    length =
2b30: 20 73 74 72 6c 65 6e 28 61 72 67 76 5b 31 5d 29   strlen(argv[1])
2b40: 3b 0a 20 20 20 20 69 66 20 28 28 63 20 3d 3d 20  ;.    if ((c == 
2b50: 27 63 27 29 20 26 26 20 28 73 74 72 6e 63 6d 70  'c') && (strncmp
2b60: 28 61 72 67 76 5b 31 5d 2c 20 22 63 67 65 74 22  (argv[1], "cget"
2b70: 2c 20 6c 65 6e 67 74 68 29 20 3d 3d 20 30 29 0a  , length) == 0).
2b80: 09 20 20 20 20 26 26 20 28 6c 65 6e 67 74 68 20  .    && (length 
2b90: 3e 3d 20 32 29 29 20 7b 0a 09 69 66 20 28 61 72  >= 2)) {..if (ar
2ba0: 67 63 20 21 3d 20 33 29 20 7b 0a 09 20 20 20 20  gc != 3) {..    
2bb0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
2bc0: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
2bd0: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
2be0: 65 20 5c 22 22 2c 0a 09 09 20 20 20 20 61 72 67  e \"",...    arg
2bf0: 76 5b 30 5d 2c 20 22 20 63 67 65 74 20 6f 70 74  v[0], " cget opt
2c00: 69 6f 6e 5c 22 22 2c 0a 09 09 20 20 20 20 28 63  ion\"",...    (c
2c10: 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09 20  har *) NULL);.. 
2c20: 20 20 20 72 65 73 75 6c 74 20 3d 20 54 43 4c 5f     result = TCL_
2c30: 45 52 52 4f 52 3b 0a 09 20 20 20 20 67 6f 74 6f  ERROR;..    goto
2c40: 20 64 6f 6e 65 3b 0a 09 7d 0a 09 72 65 73 75 6c   done;..}..resul
2c50: 74 20 3d 20 54 6b 5f 43 6f 6e 66 69 67 75 72 65  t = Tk_Configure
2c60: 56 61 6c 75 65 28 69 6e 74 65 72 70 2c 20 66 72  Value(interp, fr
2c70: 61 6d 65 50 74 72 2d 3e 74 6b 77 69 6e 2c 20 63  amePtr->tkwin, c
2c80: 6f 6e 66 69 67 53 70 65 63 73 2c 0a 09 09 28 63  onfigSpecs,...(c
2c90: 68 61 72 20 2a 29 20 66 72 61 6d 65 50 74 72 2c  har *) framePtr,
2ca0: 20 61 72 67 76 5b 32 5d 2c 20 66 72 61 6d 65 50   argv[2], frameP
2cb0: 74 72 2d 3e 6d 61 73 6b 29 3b 0a 20 20 20 20 7d  tr->mask);.    }
2cc0: 20 65 6c 73 65 20 69 66 20 28 28 63 20 3d 3d 20   else if ((c == 
2cd0: 27 63 27 29 20 26 26 20 28 73 74 72 6e 63 6d 70  'c') && (strncmp
2ce0: 28 61 72 67 76 5b 31 5d 2c 20 22 63 6f 6e 66 69  (argv[1], "confi
2cf0: 67 75 72 65 22 2c 20 6c 65 6e 67 74 68 29 20 3d  gure", length) =
2d00: 3d 20 30 29 0a 09 20 20 20 20 26 26 20 28 6c 65  = 0)..    && (le
2d10: 6e 67 74 68 20 3e 3d 20 32 29 29 20 7b 0a 09 69  ngth >= 2)) {..i
2d20: 66 20 28 61 72 67 63 20 3d 3d 20 32 29 20 7b 0a  f (argc == 2) {.
2d30: 09 20 20 20 20 72 65 73 75 6c 74 20 3d 20 54 6b  .    result = Tk
2d40: 5f 43 6f 6e 66 69 67 75 72 65 49 6e 66 6f 28 69  _ConfigureInfo(i
2d50: 6e 74 65 72 70 2c 20 66 72 61 6d 65 50 74 72 2d  nterp, framePtr-
2d60: 3e 74 6b 77 69 6e 2c 20 63 6f 6e 66 69 67 53 70  >tkwin, configSp
2d70: 65 63 73 2c 0a 09 09 20 20 20 20 28 63 68 61 72  ecs,...    (char
2d80: 20 2a 29 20 66 72 61 6d 65 50 74 72 2c 20 28 63   *) framePtr, (c
2d90: 68 61 72 20 2a 29 20 4e 55 4c 4c 2c 20 66 72 61  har *) NULL, fra
2da0: 6d 65 50 74 72 2d 3e 6d 61 73 6b 29 3b 0a 09 7d  mePtr->mask);..}
2db0: 20 65 6c 73 65 20 69 66 20 28 61 72 67 63 20 3d   else if (argc =
2dc0: 3d 20 33 29 20 7b 0a 09 20 20 20 20 72 65 73 75  = 3) {..    resu
2dd0: 6c 74 20 3d 20 54 6b 5f 43 6f 6e 66 69 67 75 72  lt = Tk_Configur
2de0: 65 49 6e 66 6f 28 69 6e 74 65 72 70 2c 20 66 72  eInfo(interp, fr
2df0: 61 6d 65 50 74 72 2d 3e 74 6b 77 69 6e 2c 20 63  amePtr->tkwin, c
2e00: 6f 6e 66 69 67 53 70 65 63 73 2c 0a 09 09 20 20  onfigSpecs,...  
2e10: 20 20 28 63 68 61 72 20 2a 29 20 66 72 61 6d 65    (char *) frame
2e20: 50 74 72 2c 20 61 72 67 76 5b 32 5d 2c 20 66 72  Ptr, argv[2], fr
2e30: 61 6d 65 50 74 72 2d 3e 6d 61 73 6b 29 3b 0a 09  amePtr->mask);..
2e40: 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 2f 2a  } else {..    /*
2e50: 0a 09 20 20 20 20 20 2a 20 44 6f 6e 27 74 20 61  ..     * Don't a
2e60: 6c 6c 6f 77 20 74 68 65 20 6f 70 74 69 6f 6e 73  llow the options
2e70: 20 2d 63 6c 61 73 73 2c 20 2d 6e 65 77 63 6d 61   -class, -newcma
2e80: 70 2c 20 2d 73 63 72 65 65 6e 2c 0a 09 20 20 20  p, -screen,..   
2e90: 20 20 2a 20 6f 72 20 2d 76 69 73 75 61 6c 20 74    * or -visual t
2ea0: 6f 20 62 65 20 63 68 61 6e 67 65 64 2e 0a 09 20  o be changed... 
2eb0: 20 20 20 20 2a 2f 0a 0a 09 20 20 20 20 66 6f 72      */...    for
2ec0: 20 28 69 20 3d 20 32 3b 20 69 20 3c 20 61 72 67   (i = 2; i < arg
2ed0: 63 3b 20 69 2b 2b 29 20 7b 0a 09 09 6c 65 6e 67  c; i++) {...leng
2ee0: 74 68 20 3d 20 73 74 72 6c 65 6e 28 61 72 67 76  th = strlen(argv
2ef0: 5b 69 5d 29 3b 0a 09 09 69 66 20 28 6c 65 6e 67  [i]);...if (leng
2f00: 74 68 20 3c 20 32 29 20 7b 0a 09 09 20 20 20 20  th < 2) {...    
2f10: 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 7d 0a 09 09  continue;...}...
2f20: 63 20 3d 20 61 72 67 76 5b 69 5d 5b 31 5d 3b 0a  c = argv[i][1];.
2f30: 09 09 69 66 20 28 28 28 63 20 3d 3d 20 27 63 27  ..if (((c == 'c'
2f40: 29 20 26 26 20 28 73 74 72 6e 63 6d 70 28 61 72  ) && (strncmp(ar
2f50: 67 76 5b 69 5d 2c 20 22 2d 63 6c 61 73 73 22 2c  gv[i], "-class",
2f60: 20 6c 65 6e 67 74 68 29 20 3d 3d 20 30 29 0a 09   length) == 0)..
2f70: 09 09 26 26 20 28 6c 65 6e 67 74 68 20 3e 3d 20  ..&& (length >= 
2f80: 32 29 29 0a 09 09 09 7c 7c 20 28 28 63 20 3d 3d  2))....|| ((c ==
2f90: 20 27 63 27 29 20 26 26 20 28 66 72 61 6d 65 50   'c') && (frameP
2fa0: 74 72 2d 3e 6d 61 73 6b 20 3d 3d 20 54 4f 50 4c  tr->mask == TOPL
2fb0: 45 56 45 4c 29 0a 09 09 09 26 26 20 28 73 74 72  EVEL)....&& (str
2fc0: 6e 63 6d 70 28 61 72 67 76 5b 69 5d 2c 20 22 2d  ncmp(argv[i], "-
2fd0: 63 6f 6c 6f 72 6d 61 70 22 2c 20 6c 65 6e 67 74  colormap", lengt
2fe0: 68 29 20 3d 3d 20 30 29 29 0a 09 09 09 7c 7c 20  h) == 0))....|| 
2ff0: 28 28 63 20 3d 3d 20 27 73 27 29 20 26 26 20 28  ((c == 's') && (
3000: 66 72 61 6d 65 50 74 72 2d 3e 6d 61 73 6b 20 3d  framePtr->mask =
3010: 3d 20 54 4f 50 4c 45 56 45 4c 29 0a 09 09 09 26  = TOPLEVEL)....&
3020: 26 20 28 73 74 72 6e 63 6d 70 28 61 72 67 76 5b  & (strncmp(argv[
3030: 69 5d 2c 20 22 2d 73 63 72 65 65 6e 22 2c 20 6c  i], "-screen", l
3040: 65 6e 67 74 68 29 20 3d 3d 20 30 29 29 0a 09 09  ength) == 0))...
3050: 09 7c 7c 20 28 28 63 20 3d 3d 20 27 76 27 29 20  .|| ((c == 'v') 
3060: 26 26 20 28 66 72 61 6d 65 50 74 72 2d 3e 6d 61  && (framePtr->ma
3070: 73 6b 20 3d 3d 20 54 4f 50 4c 45 56 45 4c 29 0a  sk == TOPLEVEL).
3080: 09 09 09 26 26 20 28 73 74 72 6e 63 6d 70 28 61  ...&& (strncmp(a
3090: 72 67 76 5b 69 5d 2c 20 22 2d 76 69 73 75 61 6c  rgv[i], "-visual
30a0: 22 2c 20 6c 65 6e 67 74 68 29 20 3d 3d 20 30 29  ", length) == 0)
30b0: 29 29 20 7b 0a 09 09 20 20 20 20 54 63 6c 5f 41  )) {...    Tcl_A
30c0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
30d0: 72 70 2c 20 22 63 61 6e 27 74 20 6d 6f 64 69 66  rp, "can't modif
30e0: 79 20 22 2c 20 61 72 67 76 5b 69 5d 2c 0a 09 09  y ", argv[i],...
30f0: 09 20 20 20 20 22 20 6f 70 74 69 6f 6e 20 61 66  .    " option af
3100: 74 65 72 20 77 69 64 67 65 74 20 69 73 20 63 72  ter widget is cr
3110: 65 61 74 65 64 22 2c 20 28 63 68 61 72 20 2a 29  eated", (char *)
3120: 20 4e 55 4c 4c 29 3b 0a 09 09 20 20 20 20 72 65   NULL);...    re
3130: 73 75 6c 74 20 3d 20 54 43 4c 5f 45 52 52 4f 52  sult = TCL_ERROR
3140: 3b 0a 09 09 20 20 20 20 67 6f 74 6f 20 64 6f 6e  ;...    goto don
3150: 65 3b 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 20  e;...}..    }.. 
3160: 20 20 20 72 65 73 75 6c 74 20 3d 20 43 6f 6e 66     result = Conf
3170: 69 67 75 72 65 46 72 61 6d 65 28 69 6e 74 65 72  igureFrame(inter
3180: 70 2c 20 66 72 61 6d 65 50 74 72 2c 20 61 72 67  p, framePtr, arg
3190: 63 2d 32 2c 20 61 72 67 76 2b 32 2c 0a 09 09 20  c-2, argv+2,... 
31a0: 20 20 20 54 4b 5f 43 4f 4e 46 49 47 5f 41 52 47     TK_CONFIG_ARG
31b0: 56 5f 4f 4e 4c 59 29 3b 0a 09 7d 0a 20 20 20 20  V_ONLY);..}.    
31c0: 7d 20 65 6c 73 65 20 7b 0a 09 54 63 6c 5f 41 70  } else {..Tcl_Ap
31d0: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
31e0: 70 2c 20 22 62 61 64 20 6f 70 74 69 6f 6e 20 5c  p, "bad option \
31f0: 22 22 2c 20 61 72 67 76 5b 31 5d 2c 0a 09 09 22  "", argv[1],..."
3200: 5c 22 3a 20 20 6d 75 73 74 20 62 65 20 63 67 65  \":  must be cge
3210: 74 20 6f 72 20 63 6f 6e 66 69 67 75 72 65 22 2c  t or configure",
3220: 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b   (char *) NULL);
3230: 0a 09 72 65 73 75 6c 74 20 3d 20 54 43 4c 5f 45  ..result = TCL_E
3240: 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  RROR;.    }..   
3250: 20 64 6f 6e 65 3a 0a 20 20 20 20 54 6b 5f 52 65   done:.    Tk_Re
3260: 6c 65 61 73 65 28 28 43 6c 69 65 6e 74 44 61 74  lease((ClientDat
3270: 61 29 20 66 72 61 6d 65 50 74 72 29 3b 0a 20 20  a) framePtr);.  
3280: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
3290: 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d  .}.../*. *------
32a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
32b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
32c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
32d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
32e0: 0a 20 2a 0a 20 2a 20 44 65 73 74 72 6f 79 46 72  . *. * DestroyFr
32f0: 61 6d 65 20 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69  ame --. *. *.Thi
3300: 73 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 69  s procedure is i
3310: 6e 76 6f 6b 65 64 20 62 79 20 54 6b 5f 45 76 65  nvoked by Tk_Eve
3320: 6e 74 75 61 6c 6c 79 46 72 65 65 20 6f 72 20 54  ntuallyFree or T
3330: 6b 5f 52 65 6c 65 61 73 65 0a 20 2a 09 74 6f 20  k_Release. *.to 
3340: 63 6c 65 61 6e 20 75 70 20 74 68 65 20 69 6e 74  clean up the int
3350: 65 72 6e 61 6c 20 73 74 72 75 63 74 75 72 65 20  ernal structure 
3360: 6f 66 20 61 20 66 72 61 6d 65 20 61 74 20 61 20  of a frame at a 
3370: 73 61 66 65 20 74 69 6d 65 0a 20 2a 09 28 77 68  safe time. *.(wh
3380: 65 6e 20 6e 6f 2d 6f 6e 65 20 69 73 20 75 73 69  en no-one is usi
3390: 6e 67 20 69 74 20 61 6e 79 6d 6f 72 65 29 2e 0a  ng it anymore)..
33a0: 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20   *. * Results:. 
33b0: 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 20 53 69  *.None.. *. * Si
33c0: 64 65 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 45  de effects:. *.E
33d0: 76 65 72 79 74 68 69 6e 67 20 61 73 73 6f 63 69  verything associ
33e0: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 66 72  ated with the fr
33f0: 61 6d 65 20 69 73 20 66 72 65 65 64 20 75 70 2e  ame is freed up.
3400: 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  . *. *----------
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 0a 20 2a 2f  ------------. */
3450: 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 0a 44 65  ..static void.De
3460: 73 74 72 6f 79 46 72 61 6d 65 28 63 6c 69 65 6e  stroyFrame(clien
3470: 74 44 61 74 61 29 0a 20 20 20 20 43 6c 69 65 6e  tData).    Clien
3480: 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61  tData clientData
3490: 3b 09 2f 2a 20 49 6e 66 6f 20 61 62 6f 75 74 20  ;./* Info about 
34a0: 66 72 61 6d 65 20 77 69 64 67 65 74 2e 20 2a 2f  frame widget. */
34b0: 0a 7b 0a 20 20 20 20 72 65 67 69 73 74 65 72 20  .{.    register 
34c0: 46 72 61 6d 65 20 2a 66 72 61 6d 65 50 74 72 20  Frame *framePtr 
34d0: 3d 20 28 46 72 61 6d 65 20 2a 29 20 63 6c 69 65  = (Frame *) clie
34e0: 6e 74 44 61 74 61 3b 0a 0a 20 20 20 20 54 6b 5f  ntData;..    Tk_
34f0: 46 72 65 65 4f 70 74 69 6f 6e 73 28 63 6f 6e 66  FreeOptions(conf
3500: 69 67 53 70 65 63 73 2c 20 28 63 68 61 72 20 2a  igSpecs, (char *
3510: 29 20 66 72 61 6d 65 50 74 72 2c 20 66 72 61 6d  ) framePtr, fram
3520: 65 50 74 72 2d 3e 6d 61 73 6b 29 3b 0a 20 20 20  ePtr->mask);.   
3530: 20 63 6b 66 72 65 65 28 28 63 68 61 72 20 2a 29   ckfree((char *)
3540: 20 66 72 61 6d 65 50 74 72 29 3b 0a 7d 0a 0c 0a   framePtr);.}...
3550: 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  /*. *-----------
3560: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3570: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3580: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3590: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20  -----------. *. 
35a0: 2a 20 43 6f 6e 66 69 67 75 72 65 46 72 61 6d 65  * ConfigureFrame
35b0: 20 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69 73 20 70   --. *. *.This p
35c0: 72 6f 63 65 64 75 72 65 20 69 73 20 63 61 6c 6c  rocedure is call
35d0: 65 64 20 74 6f 20 70 72 6f 63 65 73 73 20 61 6e  ed to process an
35e0: 20 61 72 67 76 2f 61 72 67 63 20 6c 69 73 74 2c   argv/argc list,
35f0: 20 70 6c 75 73 0a 20 2a 09 74 68 65 20 54 6b 20   plus. *.the Tk 
3600: 6f 70 74 69 6f 6e 20 64 61 74 61 62 61 73 65 2c  option database,
3610: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f 6e   in order to con
3620: 66 69 67 75 72 65 20 28 6f 72 0a 20 2a 09 72 65  figure (or. *.re
3630: 63 6f 6e 66 69 67 75 72 65 29 20 61 20 66 72 61  configure) a fra
3640: 6d 65 20 77 69 64 67 65 74 2e 0a 20 2a 0a 20 2a  me widget.. *. *
3650: 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 54 68 65   Results:. *.The
3660: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 69 73   return value is
3670: 20 61 20 73 74 61 6e 64 61 72 64 20 54 63 6c 20   a standard Tcl 
3680: 72 65 73 75 6c 74 2e 20 20 49 66 20 54 43 4c 5f  result.  If TCL_
3690: 45 52 52 4f 52 20 69 73 0a 20 2a 09 72 65 74 75  ERROR is. *.retu
36a0: 72 6e 65 64 2c 20 74 68 65 6e 20 69 6e 74 65 72  rned, then inter
36b0: 70 2d 3e 72 65 73 75 6c 74 20 63 6f 6e 74 61 69  p->result contai
36c0: 6e 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  ns an error mess
36d0: 61 67 65 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20  age.. *. * Side 
36e0: 65 66 66 65 63 74 73 3a 0a 20 2a 09 43 6f 6e 66  effects:. *.Conf
36f0: 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d  iguration inform
3700: 61 74 69 6f 6e 2c 20 73 75 63 68 20 61 73 20 74  ation, such as t
3710: 65 78 74 20 73 74 72 69 6e 67 2c 20 63 6f 6c 6f  ext string, colo
3720: 72 73 2c 20 66 6f 6e 74 2c 0a 20 2a 09 65 74 63  rs, font,. *.etc
3730: 2e 20 67 65 74 20 73 65 74 20 66 6f 72 20 66 72  . get set for fr
3740: 61 6d 65 50 74 72 3b 20 20 6f 6c 64 20 72 65 73  amePtr;  old res
3750: 6f 75 72 63 65 73 20 67 65 74 20 66 72 65 65 64  ources get freed
3760: 2c 20 69 66 20 74 68 65 72 65 0a 20 2a 09 77 65  , if there. *.we
3770: 72 65 20 61 6e 79 2e 0a 20 2a 0a 20 2a 2d 2d 2d  re any.. *. *---
3780: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3790: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
37a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
37b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
37c0: 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61 74 69 63 20  ---. */..static 
37d0: 69 6e 74 0a 43 6f 6e 66 69 67 75 72 65 46 72 61  int.ConfigureFra
37e0: 6d 65 28 69 6e 74 65 72 70 2c 20 66 72 61 6d 65  me(interp, frame
37f0: 50 74 72 2c 20 61 72 67 63 2c 20 61 72 67 76 2c  Ptr, argc, argv,
3800: 20 66 6c 61 67 73 29 0a 20 20 20 20 54 63 6c 5f   flags).    Tcl_
3810: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b 09  Interp *interp;.
3820: 09 2f 2a 20 55 73 65 64 20 66 6f 72 20 65 72 72  ./* Used for err
3830: 6f 72 20 72 65 70 6f 72 74 69 6e 67 2e 20 2a 2f  or reporting. */
3840: 0a 20 20 20 20 72 65 67 69 73 74 65 72 20 46 72  .    register Fr
3850: 61 6d 65 20 2a 66 72 61 6d 65 50 74 72 3b 09 2f  ame *framePtr;./
3860: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
3870: 6f 75 74 20 77 69 64 67 65 74 3b 20 20 6d 61 79  out widget;  may
3880: 20 6f 72 20 6d 61 79 0a 09 09 09 09 20 2a 20 6e   or may..... * n
3890: 6f 74 20 61 6c 72 65 61 64 79 20 68 61 76 65 20  ot already have 
38a0: 76 61 6c 75 65 73 20 66 6f 72 20 73 6f 6d 65 20  values for some 
38b0: 66 69 65 6c 64 73 2e 20 2a 2f 0a 20 20 20 20 69  fields. */.    i
38c0: 6e 74 20 61 72 67 63 3b 09 09 09 2f 2a 20 4e 75  nt argc;.../* Nu
38d0: 6d 62 65 72 20 6f 66 20 76 61 6c 69 64 20 65 6e  mber of valid en
38e0: 74 72 69 65 73 20 69 6e 20 61 72 67 76 2e 20 2a  tries in argv. *
38f0: 2f 0a 20 20 20 20 63 68 61 72 20 2a 2a 61 72 67  /.    char **arg
3900: 76 3b 09 09 2f 2a 20 41 72 67 75 6d 65 6e 74 73  v;../* Arguments
3910: 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 66 6c 61  . */.    int fla
3920: 67 73 3b 09 09 09 2f 2a 20 46 6c 61 67 73 20 74  gs;.../* Flags t
3930: 6f 20 70 61 73 73 20 74 6f 20 54 6b 5f 43 6f 6e  o pass to Tk_Con
3940: 66 69 67 75 72 65 57 69 64 67 65 74 2e 20 2a 2f  figureWidget. */
3950: 0a 7b 0a 20 20 20 20 69 66 20 28 54 6b 5f 43 6f  .{.    if (Tk_Co
3960: 6e 66 69 67 75 72 65 57 69 64 67 65 74 28 69 6e  nfigureWidget(in
3970: 74 65 72 70 2c 20 66 72 61 6d 65 50 74 72 2d 3e  terp, framePtr->
3980: 74 6b 77 69 6e 2c 20 63 6f 6e 66 69 67 53 70 65  tkwin, configSpe
3990: 63 73 2c 0a 09 20 20 20 20 61 72 67 63 2c 20 61  cs,..    argc, a
39a0: 72 67 76 2c 20 28 63 68 61 72 20 2a 29 20 66 72  rgv, (char *) fr
39b0: 61 6d 65 50 74 72 2c 20 66 6c 61 67 73 20 7c 20  amePtr, flags | 
39c0: 66 72 61 6d 65 50 74 72 2d 3e 6d 61 73 6b 29 20  framePtr->mask) 
39d0: 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 72 65  != TCL_OK) {..re
39e0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
39f0: 20 20 20 20 7d 0a 0a 20 20 20 20 54 6b 5f 53 65      }..    Tk_Se
3a00: 74 49 6e 74 65 72 6e 61 6c 42 6f 72 64 65 72 28  tInternalBorder(
3a10: 66 72 61 6d 65 50 74 72 2d 3e 74 6b 77 69 6e 2c  framePtr->tkwin,
3a20: 20 66 72 61 6d 65 50 74 72 2d 3e 62 6f 72 64 65   framePtr->borde
3a30: 72 57 69 64 74 68 29 3b 0a 20 20 20 20 69 66 20  rWidth);.    if 
3a40: 28 28 66 72 61 6d 65 50 74 72 2d 3e 77 69 64 74  ((framePtr->widt
3a50: 68 20 3e 20 30 29 20 7c 7c 20 28 66 72 61 6d 65  h > 0) || (frame
3a60: 50 74 72 2d 3e 68 65 69 67 68 74 20 3e 20 30 29  Ptr->height > 0)
3a70: 29 20 7b 0a 09 54 6b 5f 47 65 6f 6d 65 74 72 79  ) {..Tk_Geometry
3a80: 52 65 71 75 65 73 74 28 66 72 61 6d 65 50 74 72  Request(framePtr
3a90: 2d 3e 74 6b 77 69 6e 2c 20 66 72 61 6d 65 50 74  ->tkwin, framePt
3aa0: 72 2d 3e 77 69 64 74 68 2c 0a 09 09 66 72 61 6d  r->width,...fram
3ab0: 65 50 74 72 2d 3e 68 65 69 67 68 74 29 3b 0a 20  ePtr->height);. 
3ac0: 20 20 20 7d 0a 0a 20 20 20 20 69 66 20 28 54 6b     }..    if (Tk
3ad0: 5f 49 73 4d 61 70 70 65 64 28 66 72 61 6d 65 50  _IsMapped(frameP
3ae0: 74 72 2d 3e 74 6b 77 69 6e 29 29 20 7b 0a 09 69  tr->tkwin)) {..i
3af0: 66 20 28 21 28 66 72 61 6d 65 50 74 72 2d 3e 66  f (!(framePtr->f
3b00: 6c 61 67 73 20 26 20 52 45 44 52 41 57 5f 50 45  lags & REDRAW_PE
3b10: 4e 44 49 4e 47 29 29 20 7b 0a 09 20 20 20 20 54  NDING)) {..    T
3b20: 63 6c 5f 44 6f 57 68 65 6e 49 64 6c 65 28 44 69  cl_DoWhenIdle(Di
3b30: 73 70 6c 61 79 46 72 61 6d 65 2c 20 28 43 6c 69  splayFrame, (Cli
3b40: 65 6e 74 44 61 74 61 29 20 66 72 61 6d 65 50 74  entData) framePt
3b50: 72 29 3b 0a 09 7d 0a 09 66 72 61 6d 65 50 74 72  r);..}..framePtr
3b60: 2d 3e 66 6c 61 67 73 20 7c 3d 20 52 45 44 52 41  ->flags |= REDRA
3b70: 57 5f 50 45 4e 44 49 4e 47 7c 43 4c 45 41 52 5f  W_PENDING|CLEAR_
3b80: 4e 45 45 44 45 44 3b 0a 20 20 20 20 7d 0a 20 20  NEEDED;.    }.  
3b90: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
3ba0: 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d  .}.../*. *------
3bb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3bc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3bd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3be0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3bf0: 0a 20 2a 0a 20 2a 20 44 69 73 70 6c 61 79 46 72  . *. * DisplayFr
3c00: 61 6d 65 20 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69  ame --. *. *.Thi
3c10: 73 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 69  s procedure is i
3c20: 6e 76 6f 6b 65 64 20 74 6f 20 64 69 73 70 6c 61  nvoked to displa
3c30: 79 20 61 20 66 72 61 6d 65 20 77 69 64 67 65 74  y a frame widget
3c40: 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a  .. *. * Results:
3c50: 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 20  . *.None.. *. * 
3c60: 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 20 2a  Side effects:. *
3c70: 09 43 6f 6d 6d 61 6e 64 73 20 61 72 65 20 6f 75  .Commands are ou
3c80: 74 70 75 74 20 74 6f 20 58 20 74 6f 20 64 69 73  tput to X to dis
3c90: 70 6c 61 79 20 74 68 65 20 66 72 61 6d 65 20 69  play the frame i
3ca0: 6e 20 69 74 73 0a 20 2a 09 63 75 72 72 65 6e 74  n its. *.current
3cb0: 20 6d 6f 64 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d   mode.. *. *----
3cc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3cd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3ce0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3cf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3d00: 2d 2d 0a 20 2a 2f 0a 0a 73 74 61 74 69 63 20 76  --. */..static v
3d10: 6f 69 64 0a 44 69 73 70 6c 61 79 46 72 61 6d 65  oid.DisplayFrame
3d20: 28 63 6c 69 65 6e 74 44 61 74 61 29 0a 20 20 20  (clientData).   
3d30: 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65   ClientData clie
3d40: 6e 74 44 61 74 61 3b 09 2f 2a 20 49 6e 66 6f 72  ntData;./* Infor
3d50: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 77 69 64  mation about wid
3d60: 67 65 74 2e 20 2a 2f 0a 7b 0a 20 20 20 20 72 65  get. */.{.    re
3d70: 67 69 73 74 65 72 20 46 72 61 6d 65 20 2a 66 72  gister Frame *fr
3d80: 61 6d 65 50 74 72 20 3d 20 28 46 72 61 6d 65 20  amePtr = (Frame 
3d90: 2a 29 20 63 6c 69 65 6e 74 44 61 74 61 3b 0a 20  *) clientData;. 
3da0: 20 20 20 72 65 67 69 73 74 65 72 20 54 6b 5f 57     register Tk_W
3db0: 69 6e 64 6f 77 20 74 6b 77 69 6e 20 3d 20 66 72  indow tkwin = fr
3dc0: 61 6d 65 50 74 72 2d 3e 74 6b 77 69 6e 3b 0a 0a  amePtr->tkwin;..
3dd0: 20 20 20 20 66 72 61 6d 65 50 74 72 2d 3e 66 6c      framePtr->fl
3de0: 61 67 73 20 26 3d 20 7e 52 45 44 52 41 57 5f 50  ags &= ~REDRAW_P
3df0: 45 4e 44 49 4e 47 3b 0a 20 20 20 20 69 66 20 28  ENDING;.    if (
3e00: 28 74 6b 77 69 6e 20 3d 3d 20 4e 55 4c 4c 29 20  (tkwin == NULL) 
3e10: 7c 7c 20 21 54 6b 5f 49 73 4d 61 70 70 65 64 28  || !Tk_IsMapped(
3e20: 74 6b 77 69 6e 29 29 20 7b 0a 09 72 65 74 75 72  tkwin)) {..retur
3e30: 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 43 74 6b  n;.    }.    Ctk
3e40: 5f 44 72 61 77 42 6f 72 64 65 72 28 74 6b 77 69  _DrawBorder(tkwi
3e50: 6e 2c 20 43 54 4b 5f 50 4c 41 49 4e 5f 53 54 59  n, CTK_PLAIN_STY
3e60: 4c 45 2c 20 66 72 61 6d 65 50 74 72 2d 3e 74 69  LE, framePtr->ti
3e70: 74 6c 65 29 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d  tle);.}.../*. *-
3e80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3e90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3ea0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3eb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a  -------------. *
3ec0: 0a 20 2a 20 46 72 61 6d 65 45 76 65 6e 74 50 72  . * FrameEventPr
3ed0: 6f 63 20 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69 73  oc --. *. *.This
3ee0: 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 69 6e   procedure is in
3ef0: 76 6f 6b 65 64 20 62 79 20 74 68 65 20 54 6b 20  voked by the Tk 
3f00: 64 69 73 70 61 74 63 68 65 72 20 6f 6e 0a 20 2a  dispatcher on. *
3f10: 09 73 74 72 75 63 74 75 72 65 20 63 68 61 6e 67  .structure chang
3f20: 65 73 20 74 6f 20 61 20 66 72 61 6d 65 2e 20 20  es to a frame.  
3f30: 46 6f 72 20 66 72 61 6d 65 73 20 77 69 74 68 20  For frames with 
3f40: 33 44 0a 20 2a 09 62 6f 72 64 65 72 73 2c 20 74  3D. *.borders, t
3f50: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 69 73  his procedure is
3f60: 20 61 6c 73 6f 20 69 6e 76 6f 6b 65 64 20 66 6f   also invoked fo
3f70: 72 20 65 78 70 6f 73 75 72 65 73 2e 0a 20 2a 0a  r exposures.. *.
3f80: 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 4e   * Results:. *.N
3f90: 6f 6e 65 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20  one.. *. * Side 
3fa0: 65 66 66 65 63 74 73 3a 0a 20 2a 09 57 68 65 6e  effects:. *.When
3fb0: 20 74 68 65 20 77 69 6e 64 6f 77 20 67 65 74 73   the window gets
3fc0: 20 64 65 6c 65 74 65 64 2c 20 69 6e 74 65 72 6e   deleted, intern
3fd0: 61 6c 20 73 74 72 75 63 74 75 72 65 73 20 67 65  al structures ge
3fe0: 74 0a 20 2a 09 63 6c 65 61 6e 65 64 20 75 70 2e  t. *.cleaned up.
3ff0: 20 20 57 68 65 6e 20 69 74 20 67 65 74 73 20 65    When it gets e
4000: 78 70 6f 73 65 64 2c 20 69 74 20 69 73 20 72 65  xposed, it is re
4010: 64 69 73 70 6c 61 79 65 64 2e 0a 20 2a 0a 20 2a  displayed.. *. *
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 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
4060: 2a 2f 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 0a  */..static void.
4070: 46 72 61 6d 65 45 76 65 6e 74 50 72 6f 63 28 63  FrameEventProc(c
4080: 6c 69 65 6e 74 44 61 74 61 2c 20 65 76 65 6e 74  lientData, event
4090: 50 74 72 29 0a 20 20 20 20 43 6c 69 65 6e 74 44  Ptr).    ClientD
40a0: 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 3b 09  ata clientData;.
40b0: 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
40c0: 62 6f 75 74 20 77 69 6e 64 6f 77 2e 20 2a 2f 0a  bout window. */.
40d0: 20 20 20 20 72 65 67 69 73 74 65 72 20 58 45 76      register XEv
40e0: 65 6e 74 20 2a 65 76 65 6e 74 50 74 72 3b 09 2f  ent *eventPtr;./
40f0: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
4100: 6f 75 74 20 65 76 65 6e 74 2e 20 2a 2f 0a 7b 0a  out event. */.{.
4110: 20 20 20 20 72 65 67 69 73 74 65 72 20 46 72 61      register Fra
4120: 6d 65 20 2a 66 72 61 6d 65 50 74 72 20 3d 20 28  me *framePtr = (
4130: 46 72 61 6d 65 20 2a 29 20 63 6c 69 65 6e 74 44  Frame *) clientD
4140: 61 74 61 3b 0a 0a 20 20 20 20 69 66 20 28 65 76  ata;..    if (ev
4150: 65 6e 74 50 74 72 2d 3e 74 79 70 65 20 3d 3d 20  entPtr->type == 
4160: 43 54 4b 5f 45 58 50 4f 53 45 5f 45 56 45 4e 54  CTK_EXPOSE_EVENT
4170: 29 20 7b 0a 09 69 66 20 28 28 66 72 61 6d 65 50  ) {..if ((frameP
4180: 74 72 2d 3e 74 6b 77 69 6e 20 21 3d 20 4e 55 4c  tr->tkwin != NUL
4190: 4c 29 20 26 26 20 21 28 66 72 61 6d 65 50 74 72  L) && !(framePtr
41a0: 2d 3e 66 6c 61 67 73 20 26 20 52 45 44 52 41 57  ->flags & REDRAW
41b0: 5f 50 45 4e 44 49 4e 47 29 29 20 7b 0a 09 20 20  _PENDING)) {..  
41c0: 20 20 54 63 6c 5f 44 6f 57 68 65 6e 49 64 6c 65    Tcl_DoWhenIdle
41d0: 28 44 69 73 70 6c 61 79 46 72 61 6d 65 2c 20 28  (DisplayFrame, (
41e0: 43 6c 69 65 6e 74 44 61 74 61 29 20 66 72 61 6d  ClientData) fram
41f0: 65 50 74 72 29 3b 0a 09 20 20 20 20 66 72 61 6d  ePtr);..    fram
4200: 65 50 74 72 2d 3e 66 6c 61 67 73 20 7c 3d 20 52  ePtr->flags |= R
4210: 45 44 52 41 57 5f 50 45 4e 44 49 4e 47 3b 0a 09  EDRAW_PENDING;..
4220: 7d 0a 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20  }.    } else if 
4230: 28 65 76 65 6e 74 50 74 72 2d 3e 74 79 70 65 20  (eventPtr->type 
4240: 3d 3d 20 43 54 4b 5f 44 45 53 54 52 4f 59 5f 45  == CTK_DESTROY_E
4250: 56 45 4e 54 29 20 7b 0a 09 69 66 20 28 66 72 61  VENT) {..if (fra
4260: 6d 65 50 74 72 2d 3e 74 6b 77 69 6e 20 21 3d 20  mePtr->tkwin != 
4270: 4e 55 4c 4c 29 20 7b 0a 09 20 20 20 20 66 72 61  NULL) {..    fra
4280: 6d 65 50 74 72 2d 3e 74 6b 77 69 6e 20 3d 20 4e  mePtr->tkwin = N
4290: 55 4c 4c 3b 0a 09 20 20 20 20 54 63 6c 5f 44 65  ULL;..    Tcl_De
42a0: 6c 65 74 65 43 6f 6d 6d 61 6e 64 28 66 72 61 6d  leteCommand(fram
42b0: 65 50 74 72 2d 3e 69 6e 74 65 72 70 2c 0a 09 09  ePtr->interp,...
42c0: 20 20 20 20 54 63 6c 5f 47 65 74 43 6f 6d 6d 61      Tcl_GetComma
42d0: 6e 64 4e 61 6d 65 28 66 72 61 6d 65 50 74 72 2d  ndName(framePtr-
42e0: 3e 69 6e 74 65 72 70 2c 20 66 72 61 6d 65 50 74  >interp, framePt
42f0: 72 2d 3e 77 69 64 67 65 74 43 6d 64 29 29 3b 0a  r->widgetCmd));.
4300: 09 7d 0a 09 69 66 20 28 66 72 61 6d 65 50 74 72  .}..if (framePtr
4310: 2d 3e 66 6c 61 67 73 20 26 20 52 45 44 52 41 57  ->flags & REDRAW
4320: 5f 50 45 4e 44 49 4e 47 29 20 7b 0a 09 20 20 20  _PENDING) {..   
4330: 20 54 63 6c 5f 43 61 6e 63 65 6c 49 64 6c 65 43   Tcl_CancelIdleC
4340: 61 6c 6c 28 44 69 73 70 6c 61 79 46 72 61 6d 65  all(DisplayFrame
4350: 2c 20 28 43 6c 69 65 6e 74 44 61 74 61 29 20 66  , (ClientData) f
4360: 72 61 6d 65 50 74 72 29 3b 0a 09 7d 0a 09 54 6b  ramePtr);..}..Tk
4370: 5f 45 76 65 6e 74 75 61 6c 6c 79 46 72 65 65 28  _EventuallyFree(
4380: 28 43 6c 69 65 6e 74 44 61 74 61 29 20 66 72 61  (ClientData) fra
4390: 6d 65 50 74 72 2c 20 44 65 73 74 72 6f 79 46 72  mePtr, DestroyFr
43a0: 61 6d 65 29 3b 0a 20 20 20 20 7d 0a 7d 0a 0c 0a  ame);.    }.}...
43b0: 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  /*. *-----------
43c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
43d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
43e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
43f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20  -----------. *. 
4400: 2a 20 46 72 61 6d 65 43 6d 64 44 65 6c 65 74 65  * FrameCmdDelete
4410: 64 50 72 6f 63 20 2d 2d 0a 20 2a 0a 20 2a 09 54  dProc --. *. *.T
4420: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 69 73  his procedure is
4430: 20 69 6e 76 6f 6b 65 64 20 77 68 65 6e 20 61 20   invoked when a 
4440: 77 69 64 67 65 74 20 63 6f 6d 6d 61 6e 64 20 69  widget command i
4450: 73 20 64 65 6c 65 74 65 64 2e 20 20 49 66 0a 20  s deleted.  If. 
4460: 2a 09 74 68 65 20 77 69 64 67 65 74 20 69 73 6e  *.the widget isn
4470: 27 74 20 61 6c 72 65 61 64 79 20 69 6e 20 74 68  't already in th
4480: 65 20 70 72 6f 63 65 73 73 20 6f 66 20 62 65 69  e process of bei
4490: 6e 67 20 64 65 73 74 72 6f 79 65 64 2c 0a 20 2a  ng destroyed,. *
44a0: 09 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 64 65  .this command de
44b0: 73 74 72 6f 79 73 20 69 74 2e 0a 20 2a 0a 20 2a  stroys it.. *. *
44c0: 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 4e 6f 6e   Results:. *.Non
44d0: 65 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20 65 66  e.. *. * Side ef
44e0: 66 65 63 74 73 3a 0a 20 2a 09 54 68 65 20 77 69  fects:. *.The wi
44f0: 64 67 65 74 20 69 73 20 64 65 73 74 72 6f 79 65  dget is destroye
4500: 64 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d  d.. *. *--------
4510: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4520: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4530: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4540: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
4550: 2a 2f 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 0a  */..static void.
4560: 46 72 61 6d 65 43 6d 64 44 65 6c 65 74 65 64 50  FrameCmdDeletedP
4570: 72 6f 63 28 63 6c 69 65 6e 74 44 61 74 61 29 0a  roc(clientData).
4580: 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63      ClientData c
4590: 6c 69 65 6e 74 44 61 74 61 3b 09 2f 2a 20 50 6f  lientData;./* Po
45a0: 69 6e 74 65 72 20 74 6f 20 77 69 64 67 65 74 20  inter to widget 
45b0: 72 65 63 6f 72 64 20 66 6f 72 20 77 69 64 67 65  record for widge
45c0: 74 2e 20 2a 2f 0a 7b 0a 20 20 20 20 46 72 61 6d  t. */.{.    Fram
45d0: 65 20 2a 66 72 61 6d 65 50 74 72 20 3d 20 28 46  e *framePtr = (F
45e0: 72 61 6d 65 20 2a 29 20 63 6c 69 65 6e 74 44 61  rame *) clientDa
45f0: 74 61 3b 0a 20 20 20 20 54 6b 5f 57 69 6e 64 6f  ta;.    Tk_Windo
4600: 77 20 74 6b 77 69 6e 20 3d 20 66 72 61 6d 65 50  w tkwin = frameP
4610: 74 72 2d 3e 74 6b 77 69 6e 3b 0a 0a 20 20 20 20  tr->tkwin;..    
4620: 2f 2a 0a 20 20 20 20 20 2a 20 54 68 69 73 20 70  /*.     * This p
4630: 72 6f 63 65 64 75 72 65 20 63 6f 75 6c 64 20 62  rocedure could b
4640: 65 20 69 6e 76 6f 6b 65 64 20 65 69 74 68 65 72  e invoked either
4650: 20 62 65 63 61 75 73 65 20 74 68 65 20 77 69 6e   because the win
4660: 64 6f 77 20 77 61 73 0a 20 20 20 20 20 2a 20 64  dow was.     * d
4670: 65 73 74 72 6f 79 65 64 20 61 6e 64 20 74 68 65  estroyed and the
4680: 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 74 68 65   command was the
4690: 6e 20 64 65 6c 65 74 65 64 20 28 69 6e 20 77 68  n deleted (in wh
46a0: 69 63 68 20 63 61 73 65 20 74 6b 77 69 6e 0a 20  ich case tkwin. 
46b0: 20 20 20 20 2a 20 69 73 20 4e 55 4c 4c 29 20 6f      * is NULL) o
46c0: 72 20 62 65 63 61 75 73 65 20 74 68 65 20 63 6f  r because the co
46d0: 6d 6d 61 6e 64 20 77 61 73 20 64 65 6c 65 74 65  mmand was delete
46e0: 64 2c 20 61 6e 64 20 74 68 65 6e 20 74 68 69 73  d, and then this
46f0: 20 70 72 6f 63 65 64 75 72 65 0a 20 20 20 20 20   procedure.     
4700: 2a 20 64 65 73 74 72 6f 79 73 20 74 68 65 20 77  * destroys the w
4710: 69 64 67 65 74 2e 0a 20 20 20 20 20 2a 2f 0a 0a  idget..     */..
4720: 20 20 20 20 69 66 20 28 74 6b 77 69 6e 20 21 3d      if (tkwin !=
4730: 20 4e 55 4c 4c 29 20 7b 0a 09 66 72 61 6d 65 50   NULL) {..frameP
4740: 74 72 2d 3e 74 6b 77 69 6e 20 3d 20 4e 55 4c 4c  tr->tkwin = NULL
4750: 3b 0a 09 54 6b 5f 44 65 73 74 72 6f 79 57 69 6e  ;..Tk_DestroyWin
4760: 64 6f 77 28 74 6b 77 69 6e 29 3b 0a 20 20 20 20  dow(tkwin);.    
4770: 7d 0a 7d 0a                                      }.}.