Hex Artifact Content

Artifact bb456b31451db370c5fc5bfd16e95553ec352f30:


0000: 2f 2a 20 0a 20 2a 20 74 6b 42 75 74 74 6f 6e 2e  /* . * tkButton.
0010: 63 20 28 43 54 6b 29 20 2d 2d 0a 20 2a 0a 20 2a  c (CTk) --. *. *
0020: 09 54 68 69 73 20 6d 6f 64 75 6c 65 20 69 6d 70  .This module imp
0030: 6c 65 6d 65 6e 74 73 20 61 20 63 6f 6c 6c 65 63  lements a collec
0040: 74 69 6f 6e 20 6f 66 20 62 75 74 74 6f 6e 2d 6c  tion of button-l
0050: 69 6b 65 0a 20 2a 09 77 69 64 67 65 74 73 20 66  ike. *.widgets f
0060: 6f 72 20 74 68 65 20 54 6b 20 74 6f 6f 6c 6b 69  or the Tk toolki
0070: 74 2e 20 20 54 68 65 20 77 69 64 67 65 74 73 20  t.  The widgets 
0080: 69 6d 70 6c 65 6d 65 6e 74 65 64 0a 20 2a 09 69  implemented. *.i
0090: 6e 63 6c 75 64 65 20 6c 61 62 65 6c 73 2c 20 62  nclude labels, b
00a0: 75 74 74 6f 6e 73 2c 20 63 68 65 63 6b 20 62 75  uttons, check bu
00b0: 74 74 6f 6e 73 2c 20 61 6e 64 20 72 61 64 69 6f  ttons, and radio
00c0: 0a 20 2a 09 62 75 74 74 6f 6e 73 2e 0a 20 2a 0a  . *.buttons.. *.
00d0: 20 2a 20 43 6f 70 79 72 69 67 68 74 20 28 63 29   * Copyright (c)
00e0: 20 31 39 39 30 2d 31 39 39 34 20 54 68 65 20 52   1990-1994 The R
00f0: 65 67 65 6e 74 73 20 6f 66 20 74 68 65 20 55 6e  egents of the Un
0100: 69 76 65 72 73 69 74 79 20 6f 66 20 43 61 6c 69  iversity of Cali
0110: 66 6f 72 6e 69 61 2e 0a 20 2a 20 43 6f 70 79 72  fornia.. * Copyr
0120: 69 67 68 74 20 28 63 29 20 31 39 39 34 2d 31 39  ight (c) 1994-19
0130: 39 35 20 53 75 6e 20 4d 69 63 72 6f 73 79 73 74  95 Sun Microsyst
0140: 65 6d 73 2c 20 49 6e 63 2e 0a 20 2a 20 43 6f 70  ems, Inc.. * Cop
0150: 79 72 69 67 68 74 20 28 63 29 20 31 39 39 34 2d  yright (c) 1994-
0160: 31 39 39 35 20 43 6c 65 76 65 6c 61 6e 64 20 43  1995 Cleveland C
0170: 6c 69 6e 69 63 20 46 6f 75 6e 64 61 74 69 6f 6e  linic Foundation
0180: 0a 20 2a 0a 20 2a 20 53 65 65 20 74 68 65 20 66  . *. * See the f
0190: 69 6c 65 20 22 6c 69 63 65 6e 73 65 2e 74 65 72  ile "license.ter
01a0: 6d 73 22 20 66 6f 72 20 69 6e 66 6f 72 6d 61 74  ms" for informat
01b0: 69 6f 6e 20 6f 6e 20 75 73 61 67 65 20 61 6e 64  ion on usage and
01c0: 20 72 65 64 69 73 74 72 69 62 75 74 69 6f 6e 0a   redistribution.
01d0: 20 2a 20 6f 66 20 74 68 69 73 20 66 69 6c 65 2c   * of this file,
01e0: 20 61 6e 64 20 66 6f 72 20 61 20 44 49 53 43 4c   and for a DISCL
01f0: 41 49 4d 45 52 20 4f 46 20 41 4c 4c 20 57 41 52  AIMER OF ALL WAR
0200: 52 41 4e 54 49 45 53 2e 0a 20 2a 0a 20 2a 20 40  RANTIES.. *. * @
0210: 28 23 29 20 24 49 64 3a 20 63 74 6b 2e 73 68 61  (#) $Id: ctk.sha
0220: 72 2c 76 20 31 2e 35 30 20 31 39 39 36 2f 30 31  r,v 1.50 1996/01
0230: 2f 31 35 20 31 34 3a 34 37 3a 31 36 20 61 6e 64  /15 14:47:16 and
0240: 72 65 77 6d 20 45 78 70 20 61 6e 64 72 65 77 6d  rewm Exp andrewm
0250: 20 24 0a 20 2a 2f 0a 0a 23 69 6e 63 6c 75 64 65   $. */..#include
0260: 20 22 64 65 66 61 75 6c 74 2e 68 22 0a 23 69 6e   "default.h".#in
0270: 63 6c 75 64 65 20 22 74 6b 50 6f 72 74 2e 68 22  clude "tkPort.h"
0280: 0a 23 69 6e 63 6c 75 64 65 20 22 74 6b 49 6e 74  .#include "tkInt
0290: 2e 68 22 0a 0a 2f 2a 0a 20 2a 20 41 20 64 61 74  .h"../*. * A dat
02a0: 61 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74  a structure of t
02b0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 79 70  he following typ
02c0: 65 20 69 73 20 6b 65 70 74 20 66 6f 72 20 65 61  e is kept for ea
02d0: 63 68 0a 20 2a 20 77 69 64 67 65 74 20 6d 61 6e  ch. * widget man
02e0: 61 67 65 64 20 62 79 20 74 68 69 73 20 66 69 6c  aged by this fil
02f0: 65 3a 0a 20 2a 2f 0a 0a 74 79 70 65 64 65 66 20  e:. */..typedef 
0300: 73 74 72 75 63 74 20 7b 0a 20 20 20 20 54 6b 5f  struct {.    Tk_
0310: 57 69 6e 64 6f 77 20 74 6b 77 69 6e 3b 09 09 2f  Window tkwin;../
0320: 2a 20 57 69 6e 64 6f 77 20 74 68 61 74 20 65 6d  * Window that em
0330: 62 6f 64 69 65 73 20 74 68 65 20 62 75 74 74 6f  bodies the butto
0340: 6e 2e 20 20 4e 55 4c 4c 0a 09 09 09 09 20 2a 20  n.  NULL..... * 
0350: 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 77  means that the w
0360: 69 6e 64 6f 77 20 68 61 73 20 62 65 65 6e 20 64  indow has been d
0370: 65 73 74 72 6f 79 65 64 2e 20 2a 2f 0a 20 20 20  estroyed. */.   
0380: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
0390: 65 72 70 3b 09 09 2f 2a 20 49 6e 74 65 72 70 72  erp;../* Interpr
03a0: 65 74 65 72 20 61 73 73 6f 63 69 61 74 65 64 20  eter associated 
03b0: 77 69 74 68 20 62 75 74 74 6f 6e 2e 20 2a 2f 0a  with button. */.
03c0: 20 20 20 20 54 63 6c 5f 43 6f 6d 6d 61 6e 64 20      Tcl_Command 
03d0: 77 69 64 67 65 74 43 6d 64 3b 09 2f 2a 20 54 6f  widgetCmd;./* To
03e0: 6b 65 6e 20 66 6f 72 20 62 75 74 74 6f 6e 27 73  ken for button's
03f0: 20 77 69 64 67 65 74 20 63 6f 6d 6d 61 6e 64 2e   widget command.
0400: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 74 79 70 65   */.    int type
0410: 3b 09 09 09 2f 2a 20 54 79 70 65 20 6f 66 20 77  ;.../* Type of w
0420: 69 64 67 65 74 3a 20 20 72 65 73 74 72 69 63 74  idget:  restrict
0430: 73 20 6f 70 65 72 61 74 69 6f 6e 73 0a 09 09 09  s operations....
0440: 09 20 2a 20 74 68 61 74 20 6d 61 79 20 62 65 20  . * that may be 
0450: 70 65 72 66 6f 72 6d 65 64 20 6f 6e 20 77 69 64  performed on wid
0460: 67 65 74 2e 20 20 53 65 65 0a 09 09 09 09 20 2a  get.  See..... *
0470: 20 62 65 6c 6f 77 20 66 6f 72 20 70 6f 73 73 69   below for possi
0480: 62 6c 65 20 76 61 6c 75 65 73 2e 20 2a 2f 0a 0a  ble values. */..
0490: 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20 49 6e      /*.     * In
04a0: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
04b0: 77 68 61 74 27 73 20 69 6e 20 74 68 65 20 62 75  what's in the bu
04c0: 74 74 6f 6e 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20  tton..     */.. 
04d0: 20 20 20 63 68 61 72 20 2a 74 65 78 74 3b 09 09     char *text;..
04e0: 09 2f 2a 20 54 65 78 74 20 74 6f 20 64 69 73 70  ./* Text to disp
04f0: 6c 61 79 20 69 6e 20 62 75 74 74 6f 6e 20 28 6d  lay in button (m
0500: 61 6c 6c 6f 63 27 65 64 29 0a 09 09 09 09 20 2a  alloc'ed)..... *
0510: 20 6f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 20 20 20   or NULL. */.   
0520: 20 69 6e 74 20 6e 75 6d 43 68 61 72 73 3b 09 09   int numChars;..
0530: 2f 2a 20 23 20 6f 66 20 63 68 61 72 61 63 74 65  /* # of characte
0540: 72 73 20 69 6e 20 74 65 78 74 2e 20 2a 2f 0a 20  rs in text. */. 
0550: 20 20 20 69 6e 74 20 75 6e 64 65 72 6c 69 6e 65     int underline
0560: 3b 09 09 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63  ;../* Index of c
0570: 68 61 72 61 63 74 65 72 20 74 6f 20 75 6e 64 65  haracter to unde
0580: 72 6c 69 6e 65 2e 20 20 3c 20 30 20 6d 65 61 6e  rline.  < 0 mean
0590: 73 0a 09 09 09 09 20 2a 20 64 6f 6e 27 74 20 75  s..... * don't u
05a0: 6e 64 65 72 6c 69 6e 65 20 61 6e 79 74 68 69 6e  nderline anythin
05b0: 67 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  g. */.    char *
05c0: 74 65 78 74 56 61 72 4e 61 6d 65 3b 09 09 2f 2a  textVarName;../*
05d0: 20 4e 61 6d 65 20 6f 66 20 76 61 72 69 61 62 6c   Name of variabl
05e0: 65 20 28 6d 61 6c 6c 6f 63 27 65 64 29 20 6f 72  e (malloc'ed) or
05f0: 20 4e 55 4c 4c 2e 0a 09 09 09 09 20 2a 20 49 66   NULL...... * If
0600: 20 6e 6f 6e 2d 4e 55 4c 4c 2c 20 62 75 74 74 6f   non-NULL, butto
0610: 6e 20 64 69 73 70 6c 61 79 73 20 74 68 65 20 63  n displays the c
0620: 6f 6e 74 65 6e 74 73 0a 09 09 09 09 20 2a 20 6f  ontents..... * o
0630: 66 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 2e  f this variable.
0640: 20 2a 2f 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20   */..    /*.    
0650: 20 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75   * Information u
0660: 73 65 64 20 77 68 65 6e 20 64 69 73 70 6c 61 79  sed when display
0670: 69 6e 67 20 77 69 64 67 65 74 3a 0a 20 20 20 20  ing widget:.    
0680: 20 2a 2f 0a 0a 20 20 20 20 54 6b 5f 55 69 64 20   */..    Tk_Uid 
0690: 73 74 61 74 65 3b 09 09 2f 2a 20 53 74 61 74 65  state;../* State
06a0: 20 6f 66 20 62 75 74 74 6f 6e 20 66 6f 72 20 64   of button for d
06b0: 69 73 70 6c 61 79 20 70 75 72 70 6f 73 65 73 3a  isplay purposes:
06c0: 0a 09 09 09 09 20 2a 20 6e 6f 72 6d 61 6c 2c 20  ..... * normal, 
06d0: 61 63 74 69 76 65 2c 20 6f 72 20 64 69 73 61 62  active, or disab
06e0: 6c 65 64 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  led. */.    int 
06f0: 62 6f 72 64 65 72 57 69 64 74 68 3b 09 09 2f 2a  borderWidth;../*
0700: 20 57 69 64 74 68 20 6f 66 20 62 6f 72 64 65 72   Width of border
0710: 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 77 69 64  . */.    int wid
0720: 74 68 2c 20 68 65 69 67 68 74 3b 09 09 2f 2a 20  th, height;../* 
0730: 49 66 20 3e 20 30 2c 20 74 68 65 73 65 20 73 70  If > 0, these sp
0740: 65 63 69 66 79 20 64 69 6d 65 6e 73 69 6f 6e 73  ecify dimensions
0750: 20 74 6f 20 72 65 71 75 65 73 74 0a 09 09 09 09   to request.....
0760: 20 2a 20 66 6f 72 20 77 69 6e 64 6f 77 2c 20 69   * for window, i
0770: 6e 20 63 68 61 72 61 63 74 65 72 73 2e 20 20 49  n characters.  I
0780: 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20  n this case the 
0790: 61 63 74 75 61 6c 0a 09 09 09 09 20 2a 20 73 69  actual..... * si
07a0: 7a 65 20 6f 66 20 74 68 65 20 74 65 78 74 20 73  ze of the text s
07b0: 74 72 69 6e 67 20 69 73 20 69 67 6e 6f 72 65 64  tring is ignored
07c0: 20 69 6e 0a 09 09 09 09 20 2a 20 63 6f 6d 70 75   in..... * compu
07d0: 74 69 6e 67 20 64 65 73 69 72 65 64 20 77 69 6e  ting desired win
07e0: 64 6f 77 20 73 69 7a 65 2e 20 2a 2f 0a 20 20 20  dow size. */.   
07f0: 20 69 6e 74 20 77 72 61 70 4c 65 6e 67 74 68 3b   int wrapLength;
0800: 09 09 2f 2a 20 4c 69 6e 65 20 6c 65 6e 67 74 68  ../* Line length
0810: 20 28 69 6e 20 70 69 78 65 6c 73 29 20 61 74 20   (in pixels) at 
0820: 77 68 69 63 68 20 74 6f 20 77 72 61 70 0a 09 09  which to wrap...
0830: 09 09 20 2a 20 6f 6e 74 6f 20 6e 65 78 74 20 6c  .. * onto next l
0840: 69 6e 65 2e 20 20 3c 3d 20 30 20 6d 65 61 6e 73  ine.  <= 0 means
0850: 20 64 6f 6e 27 74 20 77 72 61 70 0a 09 09 09 09   don't wrap.....
0860: 20 2a 20 65 78 63 65 70 74 20 61 74 20 6e 65 77   * except at new
0870: 6c 69 6e 65 73 2e 20 2a 2f 0a 20 20 20 20 69 6e  lines. */.    in
0880: 74 20 70 61 64 58 2c 20 70 61 64 59 3b 09 09 2f  t padX, padY;../
0890: 2a 20 45 78 74 72 61 20 73 70 61 63 65 20 61 72  * Extra space ar
08a0: 6f 75 6e 64 20 74 65 78 74 20 28 70 69 78 65 6c  ound text (pixel
08b0: 73 20 74 6f 20 6c 65 61 76 65 0a 09 09 09 09 20  s to leave..... 
08c0: 2a 20 6f 6e 20 65 61 63 68 20 73 69 64 65 29 2e  * on each side).
08d0: 20 20 49 67 6e 6f 72 65 64 20 66 6f 72 20 62 69    Ignored for bi
08e0: 74 6d 61 70 73 20 61 6e 64 0a 09 09 09 09 20 2a  tmaps and..... *
08f0: 20 69 6d 61 67 65 73 2e 20 2a 2f 0a 20 20 20 20   images. */.    
0900: 54 6b 5f 41 6e 63 68 6f 72 20 61 6e 63 68 6f 72  Tk_Anchor anchor
0910: 3b 09 09 2f 2a 20 57 68 65 72 65 20 74 65 78 74  ;../* Where text
0920: 2f 62 69 74 6d 61 70 20 73 68 6f 75 6c 64 20 62  /bitmap should b
0930: 65 20 64 69 73 70 6c 61 79 65 64 0a 09 09 09 09  e displayed.....
0940: 20 2a 20 69 6e 73 69 64 65 20 62 75 74 74 6f 6e   * inside button
0950: 20 72 65 67 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20   region. */.    
0960: 54 6b 5f 4a 75 73 74 69 66 79 20 6a 75 73 74 69  Tk_Justify justi
0970: 66 79 3b 09 09 2f 2a 20 4a 75 73 74 69 66 69 63  fy;../* Justific
0980: 61 74 69 6f 6e 20 74 6f 20 75 73 65 20 66 6f 72  ation to use for
0990: 20 6d 75 6c 74 69 2d 6c 69 6e 65 20 74 65 78 74   multi-line text
09a0: 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 6e 64  . */.    int ind
09b0: 69 63 61 74 6f 72 4f 6e 3b 09 09 2f 2a 20 54 72  icatorOn;../* Tr
09c0: 75 65 20 6d 65 61 6e 73 20 64 72 61 77 20 69 6e  ue means draw in
09d0: 64 69 63 61 74 6f 72 2c 20 66 61 6c 73 65 20 6d  dicator, false m
09e0: 65 61 6e 73 0a 09 09 09 09 20 2a 20 64 6f 6e 27  eans..... * don'
09f0: 74 20 64 72 61 77 20 69 74 2e 20 2a 2f 0a 20 20  t draw it. */.  
0a00: 20 20 69 6e 74 20 74 65 78 74 57 69 64 74 68 3b    int textWidth;
0a10: 09 09 2f 2a 20 57 69 64 74 68 20 6e 65 65 64 65  ../* Width neede
0a20: 64 20 74 6f 20 64 69 73 70 6c 61 79 20 74 65 78  d to display tex
0a30: 74 20 61 73 20 72 65 71 75 65 73 74 65 64 2c 0a  t as requested,.
0a40: 09 09 09 09 20 2a 20 69 6e 20 70 69 78 65 6c 73  .... * in pixels
0a50: 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 74 65 78  . */.    int tex
0a60: 74 48 65 69 67 68 74 3b 09 09 2f 2a 20 48 65 69  tHeight;../* Hei
0a70: 67 68 74 20 6e 65 65 64 65 64 20 74 6f 20 64 69  ght needed to di
0a80: 73 70 6c 61 79 20 74 65 78 74 20 61 73 20 72 65  splay text as re
0a90: 71 75 65 73 74 65 64 2c 0a 09 09 09 09 20 2a 20  quested,..... * 
0aa0: 69 6e 20 70 69 78 65 6c 73 2e 20 2a 2f 0a 0a 20  in pixels. */.. 
0ab0: 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20 46 6f 72     /*.     * For
0ac0: 20 63 68 65 63 6b 20 61 6e 64 20 72 61 64 69 6f   check and radio
0ad0: 20 62 75 74 74 6f 6e 73 2c 20 74 68 65 20 66 69   buttons, the fi
0ae0: 65 6c 64 73 20 62 65 6c 6f 77 20 61 72 65 20 75  elds below are u
0af0: 73 65 64 0a 20 20 20 20 20 2a 20 74 6f 20 6d 61  sed.     * to ma
0b00: 6e 61 67 65 20 74 68 65 20 76 61 72 69 61 62 6c  nage the variabl
0b10: 65 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65  e indicating the
0b20: 20 62 75 74 74 6f 6e 27 73 20 73 74 61 74 65 2e   button's state.
0b30: 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 63 68  .     */..    ch
0b40: 61 72 20 2a 73 65 6c 56 61 72 4e 61 6d 65 3b 09  ar *selVarName;.
0b50: 09 2f 2a 20 4e 61 6d 65 20 6f 66 20 76 61 72 69  ./* Name of vari
0b60: 61 62 6c 65 20 75 73 65 64 20 74 6f 20 63 6f 6e  able used to con
0b70: 74 72 6f 6c 20 73 65 6c 65 63 74 65 64 0a 09 09  trol selected...
0b80: 09 09 20 2a 20 73 74 61 74 65 20 6f 66 20 62 75  .. * state of bu
0b90: 74 74 6f 6e 2e 20 20 4d 61 6c 6c 6f 63 27 65 64  tton.  Malloc'ed
0ba0: 20 28 69 66 0a 09 09 09 09 20 2a 20 6e 6f 74 20   (if..... * not 
0bb0: 4e 55 4c 4c 29 2e 20 2a 2f 0a 20 20 20 20 63 68  NULL). */.    ch
0bc0: 61 72 20 2a 6f 6e 56 61 6c 75 65 3b 09 09 2f 2a  ar *onValue;../*
0bd0: 20 56 61 6c 75 65 20 74 6f 20 73 74 6f 72 65 20   Value to store 
0be0: 69 6e 20 76 61 72 69 61 62 6c 65 20 77 68 65 6e  in variable when
0bf0: 0a 09 09 09 09 20 2a 20 74 68 69 73 20 62 75 74  ..... * this but
0c00: 74 6f 6e 20 69 73 20 73 65 6c 65 63 74 65 64 2e  ton is selected.
0c10: 20 20 4d 61 6c 6c 6f 63 27 65 64 20 28 69 66 0a    Malloc'ed (if.
0c20: 09 09 09 09 20 2a 20 6e 6f 74 20 4e 55 4c 4c 29  .... * not NULL)
0c30: 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 6f  . */.    char *o
0c40: 66 66 56 61 6c 75 65 3b 09 09 2f 2a 20 56 61 6c  ffValue;../* Val
0c50: 75 65 20 74 6f 20 73 74 6f 72 65 20 69 6e 20 76  ue to store in v
0c60: 61 72 69 61 62 6c 65 20 77 68 65 6e 20 74 68 69  ariable when thi
0c70: 73 0a 09 09 09 09 20 2a 20 62 75 74 74 6f 6e 20  s..... * button 
0c80: 69 73 6e 27 74 20 73 65 6c 65 63 74 65 64 2e 20  isn't selected. 
0c90: 20 4d 61 6c 6c 6f 63 27 65 64 0a 09 09 09 09 20   Malloc'ed..... 
0ca0: 2a 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 2e  * (if not NULL).
0cb0: 20 20 56 61 6c 69 64 20 6f 6e 6c 79 20 66 6f 72    Valid only for
0cc0: 20 63 68 65 63 6b 0a 09 09 09 09 20 2a 20 62 75   check..... * bu
0cd0: 74 74 6f 6e 73 2e 20 2a 2f 0a 0a 20 20 20 20 2f  ttons. */..    /
0ce0: 2a 0a 20 20 20 20 20 2a 20 4d 69 73 63 65 6c 6c  *.     * Miscell
0cf0: 61 6e 65 6f 75 73 20 69 6e 66 6f 72 6d 61 74 69  aneous informati
0d00: 6f 6e 3a 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20  on:.     */..   
0d10: 20 63 68 61 72 20 2a 74 61 6b 65 46 6f 63 75 73   char *takeFocus
0d20: 3b 09 09 2f 2a 20 56 61 6c 75 65 20 6f 66 20 2d  ;../* Value of -
0d30: 74 61 6b 65 66 6f 63 75 73 20 6f 70 74 69 6f 6e  takefocus option
0d40: 3b 20 20 6e 6f 74 20 75 73 65 64 20 69 6e 0a 09  ;  not used in..
0d50: 09 09 09 20 2a 20 74 68 65 20 43 20 63 6f 64 65  ... * the C code
0d60: 2c 20 62 75 74 20 75 73 65 64 20 62 79 20 6b 65  , but used by ke
0d70: 79 62 6f 61 72 64 20 74 72 61 76 65 72 73 61 6c  yboard traversal
0d80: 0a 09 09 09 09 20 2a 20 73 63 72 69 70 74 73 2e  ..... * scripts.
0d90: 20 20 4d 61 6c 6c 6f 63 27 65 64 2c 20 62 75 74    Malloc'ed, but
0da0: 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 2a 2f   may be NULL. */
0db0: 0a 20 20 20 20 63 68 61 72 20 2a 63 6f 6d 6d 61  .    char *comma
0dc0: 6e 64 3b 09 09 2f 2a 20 43 6f 6d 6d 61 6e 64 20  nd;../* Command 
0dd0: 74 6f 20 65 78 65 63 75 74 65 20 77 68 65 6e 20  to execute when 
0de0: 62 75 74 74 6f 6e 20 69 73 0a 09 09 09 09 20 2a  button is..... *
0df0: 20 69 6e 76 6f 6b 65 64 3b 20 76 61 6c 69 64 20   invoked; valid 
0e00: 66 6f 72 20 62 75 74 74 6f 6e 73 20 6f 6e 6c 79  for buttons only
0e10: 2e 0a 09 09 09 09 20 2a 20 49 66 20 6e 6f 74 20  ...... * If not 
0e20: 4e 55 4c 4c 2c 20 69 74 27 73 20 6d 61 6c 6c 6f  NULL, it's mallo
0e30: 63 2d 65 64 2e 20 2a 2f 0a 20 20 20 20 69 6e 74  c-ed. */.    int
0e40: 20 66 6c 61 67 73 3b 09 09 09 2f 2a 20 56 61 72   flags;.../* Var
0e50: 69 6f 75 73 20 66 6c 61 67 73 3b 20 20 73 65 65  ious flags;  see
0e60: 20 62 65 6c 6f 77 20 66 6f 72 0a 09 09 09 09 20   below for..... 
0e70: 2a 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 20 2a  * definitions. *
0e80: 2f 0a 7d 20 42 75 74 74 6f 6e 3b 0a 0a 2f 2a 0a  /.} Button;../*.
0e90: 20 2a 20 50 6f 73 73 69 62 6c 65 20 22 74 79 70   * Possible "typ
0ea0: 65 22 20 76 61 6c 75 65 73 20 66 6f 72 20 62 75  e" values for bu
0eb0: 74 74 6f 6e 73 2e 20 20 54 68 65 73 65 20 61 72  ttons.  These ar
0ec0: 65 20 74 68 65 20 6b 69 6e 64 73 20 6f 66 0a 20  e the kinds of. 
0ed0: 2a 20 77 69 64 67 65 74 73 20 73 75 70 70 6f 72  * widgets suppor
0ee0: 74 65 64 20 62 79 20 74 68 69 73 20 66 69 6c 65  ted by this file
0ef0: 2e 20 20 54 68 65 20 6f 72 64 65 72 69 6e 67 20  .  The ordering 
0f00: 6f 66 20 74 68 65 20 74 79 70 65 0a 20 2a 20 6e  of the type. * n
0f10: 75 6d 62 65 72 73 20 69 73 20 73 69 67 6e 69 66  umbers is signif
0f20: 69 63 61 6e 74 3a 20 20 67 72 65 61 74 65 72 20  icant:  greater 
0f30: 6d 65 61 6e 73 20 6d 6f 72 65 20 66 65 61 74 75  means more featu
0f40: 72 65 73 20 61 6e 64 20 69 73 0a 20 2a 20 75 73  res and is. * us
0f50: 65 64 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 0a  ed in the code..
0f60: 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 54 59 50   */..#define TYP
0f70: 45 5f 4c 41 42 45 4c 09 09 30 0a 23 64 65 66 69  E_LABEL..0.#defi
0f80: 6e 65 20 54 59 50 45 5f 42 55 54 54 4f 4e 09 09  ne TYPE_BUTTON..
0f90: 31 0a 23 64 65 66 69 6e 65 20 54 59 50 45 5f 43  1.#define TYPE_C
0fa0: 48 45 43 4b 5f 42 55 54 54 4f 4e 09 32 0a 23 64  HECK_BUTTON.2.#d
0fb0: 65 66 69 6e 65 20 54 59 50 45 5f 52 41 44 49 4f  efine TYPE_RADIO
0fc0: 5f 42 55 54 54 4f 4e 09 33 0a 0a 2f 2a 0a 20 2a  _BUTTON.3../*. *
0fd0: 20 43 6c 61 73 73 20 6e 61 6d 65 73 20 66 6f 72   Class names for
0fe0: 20 62 75 74 74 6f 6e 73 2c 20 69 6e 64 65 78 65   buttons, indexe
0ff0: 64 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20  d by one of the 
1000: 74 79 70 65 20 76 61 6c 75 65 73 20 61 62 6f 76  type values abov
1010: 65 2e 0a 20 2a 2f 0a 0a 73 74 61 74 69 63 20 63  e.. */..static c
1020: 68 61 72 20 2a 63 6c 61 73 73 4e 61 6d 65 73 5b  har *classNames[
1030: 5d 20 3d 20 7b 22 4c 61 62 65 6c 22 2c 20 22 42  ] = {"Label", "B
1040: 75 74 74 6f 6e 22 2c 20 22 43 68 65 63 6b 62 75  utton", "Checkbu
1050: 74 74 6f 6e 22 2c 20 22 52 61 64 69 6f 62 75 74  tton", "Radiobut
1060: 74 6f 6e 22 7d 3b 0a 0a 2f 2a 0a 20 2a 20 46 6c  ton"};../*. * Fl
1070: 61 67 20 62 69 74 73 20 66 6f 72 20 62 75 74 74  ag bits for butt
1080: 6f 6e 73 3a 0a 20 2a 0a 20 2a 20 52 45 44 52 41  ons:. *. * REDRA
1090: 57 5f 50 45 4e 44 49 4e 47 3a 09 09 4e 6f 6e 2d  W_PENDING:..Non-
10a0: 7a 65 72 6f 20 6d 65 61 6e 73 20 61 20 44 6f 57  zero means a DoW
10b0: 68 65 6e 49 64 6c 65 20 68 61 6e 64 6c 65 72 0a  henIdle handler.
10c0: 20 2a 09 09 09 09 68 61 73 20 61 6c 72 65 61 64   *....has alread
10d0: 79 20 62 65 65 6e 20 71 75 65 75 65 64 20 74 6f  y been queued to
10e0: 20 72 65 64 72 61 77 0a 20 2a 09 09 09 09 74 68   redraw. *....th
10f0: 69 73 20 77 69 6e 64 6f 77 2e 0a 20 2a 20 53 45  is window.. * SE
1100: 4c 45 43 54 45 44 3a 09 09 09 4e 6f 6e 2d 7a 65  LECTED:...Non-ze
1110: 72 6f 20 6d 65 61 6e 73 20 74 68 69 73 20 62 75  ro means this bu
1120: 74 74 6f 6e 20 69 73 20 73 65 6c 65 63 74 65 64  tton is selected
1130: 2c 0a 20 2a 09 09 09 09 73 6f 20 73 70 65 63 69  ,. *....so speci
1140: 61 6c 20 68 69 67 68 6c 69 67 68 74 20 73 68 6f  al highlight sho
1150: 75 6c 64 20 62 65 20 64 72 61 77 6e 2e 0a 20 2a  uld be drawn.. *
1160: 20 47 4f 54 5f 46 4f 43 55 53 3a 09 09 09 4e 6f   GOT_FOCUS:...No
1170: 6e 2d 7a 65 72 6f 20 6d 65 61 6e 73 20 74 68 69  n-zero means thi
1180: 73 20 62 75 74 74 6f 6e 20 63 75 72 72 65 6e 74  s button current
1190: 6c 79 0a 20 2a 09 09 09 09 68 61 73 20 74 68 65  ly. *....has the
11a0: 20 69 6e 70 75 74 20 66 6f 63 75 73 2e 0a 20 2a   input focus.. *
11b0: 2f 0a 0a 23 64 65 66 69 6e 65 20 52 45 44 52 41  /..#define REDRA
11c0: 57 5f 50 45 4e 44 49 4e 47 09 09 31 0a 23 64 65  W_PENDING..1.#de
11d0: 66 69 6e 65 20 53 45 4c 45 43 54 45 44 09 09 32  fine SELECTED..2
11e0: 0a 23 64 65 66 69 6e 65 20 47 4f 54 5f 46 4f 43  .#define GOT_FOC
11f0: 55 53 09 09 34 0a 0a 2f 2a 0a 20 2a 20 4d 61 73  US..4../*. * Mas
1200: 6b 20 76 61 6c 75 65 73 20 75 73 65 64 20 74 6f  k values used to
1210: 20 73 65 6c 65 63 74 69 76 65 6c 79 20 65 6e 61   selectively ena
1220: 62 6c 65 20 65 6e 74 72 69 65 73 20 69 6e 20 74  ble entries in t
1230: 68 65 0a 20 2a 20 63 6f 6e 66 69 67 75 72 61 74  he. * configurat
1240: 69 6f 6e 20 73 70 65 63 73 3a 0a 20 2a 2f 0a 0a  ion specs:. */..
1250: 23 64 65 66 69 6e 65 20 4c 41 42 45 4c 5f 4d 41  #define LABEL_MA
1260: 53 4b 09 09 54 4b 5f 43 4f 4e 46 49 47 5f 55 53  SK..TK_CONFIG_US
1270: 45 52 5f 42 49 54 0a 23 64 65 66 69 6e 65 20 42  ER_BIT.#define B
1280: 55 54 54 4f 4e 5f 4d 41 53 4b 09 09 54 4b 5f 43  UTTON_MASK..TK_C
1290: 4f 4e 46 49 47 5f 55 53 45 52 5f 42 49 54 20 3c  ONFIG_USER_BIT <
12a0: 3c 20 31 0a 23 64 65 66 69 6e 65 20 43 48 45 43  < 1.#define CHEC
12b0: 4b 5f 42 55 54 54 4f 4e 5f 4d 41 53 4b 09 54 4b  K_BUTTON_MASK.TK
12c0: 5f 43 4f 4e 46 49 47 5f 55 53 45 52 5f 42 49 54  _CONFIG_USER_BIT
12d0: 20 3c 3c 20 32 0a 23 64 65 66 69 6e 65 20 52 41   << 2.#define RA
12e0: 44 49 4f 5f 42 55 54 54 4f 4e 5f 4d 41 53 4b 09  DIO_BUTTON_MASK.
12f0: 54 4b 5f 43 4f 4e 46 49 47 5f 55 53 45 52 5f 42  TK_CONFIG_USER_B
1300: 49 54 20 3c 3c 20 33 0a 23 64 65 66 69 6e 65 20  IT << 3.#define 
1310: 41 4c 4c 5f 4d 41 53 4b 09 09 28 4c 41 42 45 4c  ALL_MASK..(LABEL
1320: 5f 4d 41 53 4b 20 7c 20 42 55 54 54 4f 4e 5f 4d  _MASK | BUTTON_M
1330: 41 53 4b 20 5c 0a 09 7c 20 43 48 45 43 4b 5f 42  ASK \..| CHECK_B
1340: 55 54 54 4f 4e 5f 4d 41 53 4b 20 7c 20 52 41 44  UTTON_MASK | RAD
1350: 49 4f 5f 42 55 54 54 4f 4e 5f 4d 41 53 4b 29 0a  IO_BUTTON_MASK).
1360: 0a 73 74 61 74 69 63 20 69 6e 74 20 63 6f 6e 66  .static int conf
1370: 69 67 46 6c 61 67 73 5b 5d 20 3d 20 7b 4c 41 42  igFlags[] = {LAB
1380: 45 4c 5f 4d 41 53 4b 2c 20 42 55 54 54 4f 4e 5f  EL_MASK, BUTTON_
1390: 4d 41 53 4b 2c 0a 09 43 48 45 43 4b 5f 42 55 54  MASK,..CHECK_BUT
13a0: 54 4f 4e 5f 4d 41 53 4b 2c 20 52 41 44 49 4f 5f  TON_MASK, RADIO_
13b0: 42 55 54 54 4f 4e 5f 4d 41 53 4b 7d 3b 0a 0a 2f  BUTTON_MASK};../
13c0: 2a 0a 20 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e  *. * Information
13d0: 20 75 73 65 64 20 66 6f 72 20 70 61 72 73 69 6e   used for parsin
13e0: 67 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  g configuration 
13f0: 73 70 65 63 73 3a 0a 20 2a 2f 0a 0a 73 74 61 74  specs:. */..stat
1400: 69 63 20 54 6b 5f 43 6f 6e 66 69 67 53 70 65 63  ic Tk_ConfigSpec
1410: 20 63 6f 6e 66 69 67 53 70 65 63 73 5b 5d 20 3d   configSpecs[] =
1420: 20 7b 0a 20 20 20 20 7b 54 4b 5f 43 4f 4e 46 49   {.    {TK_CONFI
1430: 47 5f 41 4e 43 48 4f 52 2c 20 22 2d 61 6e 63 68  G_ANCHOR, "-anch
1440: 6f 72 22 2c 20 22 61 6e 63 68 6f 72 22 2c 20 22  or", "anchor", "
1450: 41 6e 63 68 6f 72 22 2c 0a 09 44 45 46 5f 42 55  Anchor",..DEF_BU
1460: 54 54 4f 4e 5f 41 4e 43 48 4f 52 2c 20 54 6b 5f  TTON_ANCHOR, Tk_
1470: 4f 66 66 73 65 74 28 42 75 74 74 6f 6e 2c 20 61  Offset(Button, a
1480: 6e 63 68 6f 72 29 2c 20 41 4c 4c 5f 4d 41 53 4b  nchor), ALL_MASK
1490: 7d 2c 0a 20 20 20 20 7b 54 4b 5f 43 4f 4e 46 49  },.    {TK_CONFI
14a0: 47 5f 53 59 4e 4f 4e 59 4d 2c 20 22 2d 62 64 22  G_SYNONYM, "-bd"
14b0: 2c 20 22 62 6f 72 64 65 72 57 69 64 74 68 22 2c  , "borderWidth",
14c0: 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 2c 0a   (char *) NULL,.
14d0: 09 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 2c 20  .(char *) NULL, 
14e0: 30 2c 20 41 4c 4c 5f 4d 41 53 4b 7d 2c 0a 20 20  0, ALL_MASK},.  
14f0: 20 20 7b 54 4b 5f 43 4f 4e 46 49 47 5f 50 49 58    {TK_CONFIG_PIX
1500: 45 4c 53 2c 20 22 2d 62 6f 72 64 65 72 77 69 64  ELS, "-borderwid
1510: 74 68 22 2c 20 22 62 6f 72 64 65 72 57 69 64 74  th", "borderWidt
1520: 68 22 2c 20 22 42 6f 72 64 65 72 57 69 64 74 68  h", "BorderWidth
1530: 22 2c 0a 09 44 45 46 5f 42 55 54 54 4f 4e 5f 42  ",..DEF_BUTTON_B
1540: 4f 52 44 45 52 5f 57 49 44 54 48 2c 20 54 6b 5f  ORDER_WIDTH, Tk_
1550: 4f 66 66 73 65 74 28 42 75 74 74 6f 6e 2c 20 62  Offset(Button, b
1560: 6f 72 64 65 72 57 69 64 74 68 29 2c 20 41 4c 4c  orderWidth), ALL
1570: 5f 4d 41 53 4b 7d 2c 0a 20 20 20 20 7b 54 4b 5f  _MASK},.    {TK_
1580: 43 4f 4e 46 49 47 5f 53 54 52 49 4e 47 2c 20 22  CONFIG_STRING, "
1590: 2d 63 6f 6d 6d 61 6e 64 22 2c 20 22 63 6f 6d 6d  -command", "comm
15a0: 61 6e 64 22 2c 20 22 43 6f 6d 6d 61 6e 64 22 2c  and", "Command",
15b0: 0a 09 44 45 46 5f 42 55 54 54 4f 4e 5f 43 4f 4d  ..DEF_BUTTON_COM
15c0: 4d 41 4e 44 2c 20 54 6b 5f 4f 66 66 73 65 74 28  MAND, Tk_Offset(
15d0: 42 75 74 74 6f 6e 2c 20 63 6f 6d 6d 61 6e 64 29  Button, command)
15e0: 2c 0a 09 42 55 54 54 4f 4e 5f 4d 41 53 4b 7c 43  ,..BUTTON_MASK|C
15f0: 48 45 43 4b 5f 42 55 54 54 4f 4e 5f 4d 41 53 4b  HECK_BUTTON_MASK
1600: 7c 52 41 44 49 4f 5f 42 55 54 54 4f 4e 5f 4d 41  |RADIO_BUTTON_MA
1610: 53 4b 7c 54 4b 5f 43 4f 4e 46 49 47 5f 4e 55 4c  SK|TK_CONFIG_NUL
1620: 4c 5f 4f 4b 7d 2c 0a 20 20 20 20 7b 54 4b 5f 43  L_OK},.    {TK_C
1630: 4f 4e 46 49 47 5f 49 4e 54 2c 20 22 2d 68 65 69  ONFIG_INT, "-hei
1640: 67 68 74 22 2c 20 22 68 65 69 67 68 74 22 2c 20  ght", "height", 
1650: 22 48 65 69 67 68 74 22 2c 0a 09 44 45 46 5f 42  "Height",..DEF_B
1660: 55 54 54 4f 4e 5f 48 45 49 47 48 54 2c 20 54 6b  UTTON_HEIGHT, Tk
1670: 5f 4f 66 66 73 65 74 28 42 75 74 74 6f 6e 2c 20  _Offset(Button, 
1680: 68 65 69 67 68 74 29 2c 20 41 4c 4c 5f 4d 41 53  height), ALL_MAS
1690: 4b 7d 2c 0a 20 20 20 20 7b 54 4b 5f 43 4f 4e 46  K},.    {TK_CONF
16a0: 49 47 5f 42 4f 4f 4c 45 41 4e 2c 20 22 2d 69 6e  IG_BOOLEAN, "-in
16b0: 64 69 63 61 74 6f 72 6f 6e 22 2c 20 22 69 6e 64  dicatoron", "ind
16c0: 69 63 61 74 6f 72 4f 6e 22 2c 20 22 49 6e 64 69  icatorOn", "Indi
16d0: 63 61 74 6f 72 4f 6e 22 2c 0a 09 44 45 46 5f 42  catorOn",..DEF_B
16e0: 55 54 54 4f 4e 5f 49 4e 44 49 43 41 54 4f 52 2c  UTTON_INDICATOR,
16f0: 20 54 6b 5f 4f 66 66 73 65 74 28 42 75 74 74 6f   Tk_Offset(Butto
1700: 6e 2c 20 69 6e 64 69 63 61 74 6f 72 4f 6e 29 2c  n, indicatorOn),
1710: 0a 09 43 48 45 43 4b 5f 42 55 54 54 4f 4e 5f 4d  ..CHECK_BUTTON_M
1720: 41 53 4b 7c 52 41 44 49 4f 5f 42 55 54 54 4f 4e  ASK|RADIO_BUTTON
1730: 5f 4d 41 53 4b 7d 2c 0a 20 20 20 20 7b 54 4b 5f  _MASK},.    {TK_
1740: 43 4f 4e 46 49 47 5f 4a 55 53 54 49 46 59 2c 20  CONFIG_JUSTIFY, 
1750: 22 2d 6a 75 73 74 69 66 79 22 2c 20 22 6a 75 73  "-justify", "jus
1760: 74 69 66 79 22 2c 20 22 4a 75 73 74 69 66 79 22  tify", "Justify"
1770: 2c 0a 09 44 45 46 5f 42 55 54 54 4f 4e 5f 4a 55  ,..DEF_BUTTON_JU
1780: 53 54 49 46 59 2c 20 54 6b 5f 4f 66 66 73 65 74  STIFY, Tk_Offset
1790: 28 42 75 74 74 6f 6e 2c 20 6a 75 73 74 69 66 79  (Button, justify
17a0: 29 2c 20 41 4c 4c 5f 4d 41 53 4b 7d 2c 0a 20 20  ), ALL_MASK},.  
17b0: 20 20 7b 54 4b 5f 43 4f 4e 46 49 47 5f 53 54 52    {TK_CONFIG_STR
17c0: 49 4e 47 2c 20 22 2d 6f 66 66 76 61 6c 75 65 22  ING, "-offvalue"
17d0: 2c 20 22 6f 66 66 56 61 6c 75 65 22 2c 20 22 56  , "offValue", "V
17e0: 61 6c 75 65 22 2c 0a 09 44 45 46 5f 42 55 54 54  alue",..DEF_BUTT
17f0: 4f 4e 5f 4f 46 46 5f 56 41 4c 55 45 2c 20 54 6b  ON_OFF_VALUE, Tk
1800: 5f 4f 66 66 73 65 74 28 42 75 74 74 6f 6e 2c 20  _Offset(Button, 
1810: 6f 66 66 56 61 6c 75 65 29 2c 0a 09 43 48 45 43  offValue),..CHEC
1820: 4b 5f 42 55 54 54 4f 4e 5f 4d 41 53 4b 7d 2c 0a  K_BUTTON_MASK},.
1830: 20 20 20 20 7b 54 4b 5f 43 4f 4e 46 49 47 5f 53      {TK_CONFIG_S
1840: 54 52 49 4e 47 2c 20 22 2d 6f 6e 76 61 6c 75 65  TRING, "-onvalue
1850: 22 2c 20 22 6f 6e 56 61 6c 75 65 22 2c 20 22 56  ", "onValue", "V
1860: 61 6c 75 65 22 2c 0a 09 44 45 46 5f 42 55 54 54  alue",..DEF_BUTT
1870: 4f 4e 5f 4f 4e 5f 56 41 4c 55 45 2c 20 54 6b 5f  ON_ON_VALUE, Tk_
1880: 4f 66 66 73 65 74 28 42 75 74 74 6f 6e 2c 20 6f  Offset(Button, o
1890: 6e 56 61 6c 75 65 29 2c 0a 09 43 48 45 43 4b 5f  nValue),..CHECK_
18a0: 42 55 54 54 4f 4e 5f 4d 41 53 4b 7d 2c 0a 20 20  BUTTON_MASK},.  
18b0: 20 20 7b 54 4b 5f 43 4f 4e 46 49 47 5f 50 49 58    {TK_CONFIG_PIX
18c0: 45 4c 53 2c 20 22 2d 70 61 64 78 22 2c 20 22 70  ELS, "-padx", "p
18d0: 61 64 58 22 2c 20 22 50 61 64 22 2c 0a 09 44 45  adX", "Pad",..DE
18e0: 46 5f 42 55 54 54 4f 4e 5f 50 41 44 58 2c 20 54  F_BUTTON_PADX, T
18f0: 6b 5f 4f 66 66 73 65 74 28 42 75 74 74 6f 6e 2c  k_Offset(Button,
1900: 20 70 61 64 58 29 2c 20 41 4c 4c 5f 4d 41 53 4b   padX), ALL_MASK
1910: 7d 2c 0a 20 20 20 20 7b 54 4b 5f 43 4f 4e 46 49  },.    {TK_CONFI
1920: 47 5f 50 49 58 45 4c 53 2c 20 22 2d 70 61 64 79  G_PIXELS, "-pady
1930: 22 2c 20 22 70 61 64 59 22 2c 20 22 50 61 64 22  ", "padY", "Pad"
1940: 2c 0a 09 44 45 46 5f 42 55 54 54 4f 4e 5f 50 41  ,..DEF_BUTTON_PA
1950: 44 59 2c 20 54 6b 5f 4f 66 66 73 65 74 28 42 75  DY, Tk_Offset(Bu
1960: 74 74 6f 6e 2c 20 70 61 64 59 29 2c 20 41 4c 4c  tton, padY), ALL
1970: 5f 4d 41 53 4b 7d 2c 0a 20 20 20 20 7b 54 4b 5f  _MASK},.    {TK_
1980: 43 4f 4e 46 49 47 5f 55 49 44 2c 20 22 2d 73 74  CONFIG_UID, "-st
1990: 61 74 65 22 2c 20 22 73 74 61 74 65 22 2c 20 22  ate", "state", "
19a0: 53 74 61 74 65 22 2c 0a 09 44 45 46 5f 42 55 54  State",..DEF_BUT
19b0: 54 4f 4e 5f 53 54 41 54 45 2c 20 54 6b 5f 4f 66  TON_STATE, Tk_Of
19c0: 66 73 65 74 28 42 75 74 74 6f 6e 2c 20 73 74 61  fset(Button, sta
19d0: 74 65 29 2c 0a 09 42 55 54 54 4f 4e 5f 4d 41 53  te),..BUTTON_MAS
19e0: 4b 7c 43 48 45 43 4b 5f 42 55 54 54 4f 4e 5f 4d  K|CHECK_BUTTON_M
19f0: 41 53 4b 7c 52 41 44 49 4f 5f 42 55 54 54 4f 4e  ASK|RADIO_BUTTON
1a00: 5f 4d 41 53 4b 7d 2c 0a 20 20 20 20 7b 54 4b 5f  _MASK},.    {TK_
1a10: 43 4f 4e 46 49 47 5f 53 54 52 49 4e 47 2c 20 22  CONFIG_STRING, "
1a20: 2d 74 61 6b 65 66 6f 63 75 73 22 2c 20 22 74 61  -takefocus", "ta
1a30: 6b 65 46 6f 63 75 73 22 2c 20 22 54 61 6b 65 46  keFocus", "TakeF
1a40: 6f 63 75 73 22 2c 0a 09 44 45 46 5f 4c 41 42 45  ocus",..DEF_LABE
1a50: 4c 5f 54 41 4b 45 5f 46 4f 43 55 53 2c 20 54 6b  L_TAKE_FOCUS, Tk
1a60: 5f 4f 66 66 73 65 74 28 42 75 74 74 6f 6e 2c 20  _Offset(Button, 
1a70: 74 61 6b 65 46 6f 63 75 73 29 2c 0a 09 4c 41 42  takeFocus),..LAB
1a80: 45 4c 5f 4d 41 53 4b 7c 54 4b 5f 43 4f 4e 46 49  EL_MASK|TK_CONFI
1a90: 47 5f 4e 55 4c 4c 5f 4f 4b 7d 2c 0a 20 20 20 20  G_NULL_OK},.    
1aa0: 7b 54 4b 5f 43 4f 4e 46 49 47 5f 53 54 52 49 4e  {TK_CONFIG_STRIN
1ab0: 47 2c 20 22 2d 74 61 6b 65 66 6f 63 75 73 22 2c  G, "-takefocus",
1ac0: 20 22 74 61 6b 65 46 6f 63 75 73 22 2c 20 22 54   "takeFocus", "T
1ad0: 61 6b 65 46 6f 63 75 73 22 2c 0a 09 44 45 46 5f  akeFocus",..DEF_
1ae0: 42 55 54 54 4f 4e 5f 54 41 4b 45 5f 46 4f 43 55  BUTTON_TAKE_FOCU
1af0: 53 2c 20 54 6b 5f 4f 66 66 73 65 74 28 42 75 74  S, Tk_Offset(But
1b00: 74 6f 6e 2c 20 74 61 6b 65 46 6f 63 75 73 29 2c  ton, takeFocus),
1b10: 0a 09 42 55 54 54 4f 4e 5f 4d 41 53 4b 7c 43 48  ..BUTTON_MASK|CH
1b20: 45 43 4b 5f 42 55 54 54 4f 4e 5f 4d 41 53 4b 7c  ECK_BUTTON_MASK|
1b30: 52 41 44 49 4f 5f 42 55 54 54 4f 4e 5f 4d 41 53  RADIO_BUTTON_MAS
1b40: 4b 7c 54 4b 5f 43 4f 4e 46 49 47 5f 4e 55 4c 4c  K|TK_CONFIG_NULL
1b50: 5f 4f 4b 7d 2c 0a 20 20 20 20 7b 54 4b 5f 43 4f  _OK},.    {TK_CO
1b60: 4e 46 49 47 5f 53 54 52 49 4e 47 2c 20 22 2d 74  NFIG_STRING, "-t
1b70: 65 78 74 22 2c 20 22 74 65 78 74 22 2c 20 22 54  ext", "text", "T
1b80: 65 78 74 22 2c 0a 09 44 45 46 5f 42 55 54 54 4f  ext",..DEF_BUTTO
1b90: 4e 5f 54 45 58 54 2c 20 54 6b 5f 4f 66 66 73 65  N_TEXT, Tk_Offse
1ba0: 74 28 42 75 74 74 6f 6e 2c 20 74 65 78 74 29 2c  t(Button, text),
1bb0: 20 41 4c 4c 5f 4d 41 53 4b 7d 2c 0a 20 20 20 20   ALL_MASK},.    
1bc0: 7b 54 4b 5f 43 4f 4e 46 49 47 5f 53 54 52 49 4e  {TK_CONFIG_STRIN
1bd0: 47 2c 20 22 2d 74 65 78 74 76 61 72 69 61 62 6c  G, "-textvariabl
1be0: 65 22 2c 20 22 74 65 78 74 56 61 72 69 61 62 6c  e", "textVariabl
1bf0: 65 22 2c 20 22 56 61 72 69 61 62 6c 65 22 2c 0a  e", "Variable",.
1c00: 09 44 45 46 5f 42 55 54 54 4f 4e 5f 54 45 58 54  .DEF_BUTTON_TEXT
1c10: 5f 56 41 52 49 41 42 4c 45 2c 20 54 6b 5f 4f 66  _VARIABLE, Tk_Of
1c20: 66 73 65 74 28 42 75 74 74 6f 6e 2c 20 74 65 78  fset(Button, tex
1c30: 74 56 61 72 4e 61 6d 65 29 2c 0a 09 41 4c 4c 5f  tVarName),..ALL_
1c40: 4d 41 53 4b 7c 54 4b 5f 43 4f 4e 46 49 47 5f 4e  MASK|TK_CONFIG_N
1c50: 55 4c 4c 5f 4f 4b 7d 2c 0a 20 20 20 20 7b 54 4b  ULL_OK},.    {TK
1c60: 5f 43 4f 4e 46 49 47 5f 49 4e 54 2c 20 22 2d 75  _CONFIG_INT, "-u
1c70: 6e 64 65 72 6c 69 6e 65 22 2c 20 22 75 6e 64 65  nderline", "unde
1c80: 72 6c 69 6e 65 22 2c 20 22 55 6e 64 65 72 6c 69  rline", "Underli
1c90: 6e 65 22 2c 0a 09 44 45 46 5f 42 55 54 54 4f 4e  ne",..DEF_BUTTON
1ca0: 5f 55 4e 44 45 52 4c 49 4e 45 2c 20 54 6b 5f 4f  _UNDERLINE, Tk_O
1cb0: 66 66 73 65 74 28 42 75 74 74 6f 6e 2c 20 75 6e  ffset(Button, un
1cc0: 64 65 72 6c 69 6e 65 29 2c 20 41 4c 4c 5f 4d 41  derline), ALL_MA
1cd0: 53 4b 7d 2c 0a 20 20 20 20 7b 54 4b 5f 43 4f 4e  SK},.    {TK_CON
1ce0: 46 49 47 5f 53 54 52 49 4e 47 2c 20 22 2d 76 61  FIG_STRING, "-va
1cf0: 6c 75 65 22 2c 20 22 76 61 6c 75 65 22 2c 20 22  lue", "value", "
1d00: 56 61 6c 75 65 22 2c 0a 09 44 45 46 5f 42 55 54  Value",..DEF_BUT
1d10: 54 4f 4e 5f 56 41 4c 55 45 2c 20 54 6b 5f 4f 66  TON_VALUE, Tk_Of
1d20: 66 73 65 74 28 42 75 74 74 6f 6e 2c 20 6f 6e 56  fset(Button, onV
1d30: 61 6c 75 65 29 2c 0a 09 52 41 44 49 4f 5f 42 55  alue),..RADIO_BU
1d40: 54 54 4f 4e 5f 4d 41 53 4b 7d 2c 0a 20 20 20 20  TTON_MASK},.    
1d50: 7b 54 4b 5f 43 4f 4e 46 49 47 5f 53 54 52 49 4e  {TK_CONFIG_STRIN
1d60: 47 2c 20 22 2d 76 61 72 69 61 62 6c 65 22 2c 20  G, "-variable", 
1d70: 22 76 61 72 69 61 62 6c 65 22 2c 20 22 56 61 72  "variable", "Var
1d80: 69 61 62 6c 65 22 2c 0a 09 44 45 46 5f 52 41 44  iable",..DEF_RAD
1d90: 49 4f 42 55 54 54 4f 4e 5f 56 41 52 49 41 42 4c  IOBUTTON_VARIABL
1da0: 45 2c 20 54 6b 5f 4f 66 66 73 65 74 28 42 75 74  E, Tk_Offset(But
1db0: 74 6f 6e 2c 20 73 65 6c 56 61 72 4e 61 6d 65 29  ton, selVarName)
1dc0: 2c 0a 09 52 41 44 49 4f 5f 42 55 54 54 4f 4e 5f  ,..RADIO_BUTTON_
1dd0: 4d 41 53 4b 7d 2c 0a 20 20 20 20 7b 54 4b 5f 43  MASK},.    {TK_C
1de0: 4f 4e 46 49 47 5f 53 54 52 49 4e 47 2c 20 22 2d  ONFIG_STRING, "-
1df0: 76 61 72 69 61 62 6c 65 22 2c 20 22 76 61 72 69  variable", "vari
1e00: 61 62 6c 65 22 2c 20 22 56 61 72 69 61 62 6c 65  able", "Variable
1e10: 22 2c 0a 09 44 45 46 5f 43 48 45 43 4b 42 55 54  ",..DEF_CHECKBUT
1e20: 54 4f 4e 5f 56 41 52 49 41 42 4c 45 2c 20 54 6b  TON_VARIABLE, Tk
1e30: 5f 4f 66 66 73 65 74 28 42 75 74 74 6f 6e 2c 20  _Offset(Button, 
1e40: 73 65 6c 56 61 72 4e 61 6d 65 29 2c 0a 09 43 48  selVarName),..CH
1e50: 45 43 4b 5f 42 55 54 54 4f 4e 5f 4d 41 53 4b 7c  ECK_BUTTON_MASK|
1e60: 54 4b 5f 43 4f 4e 46 49 47 5f 4e 55 4c 4c 5f 4f  TK_CONFIG_NULL_O
1e70: 4b 7d 2c 0a 20 20 20 20 7b 54 4b 5f 43 4f 4e 46  K},.    {TK_CONF
1e80: 49 47 5f 49 4e 54 2c 20 22 2d 77 69 64 74 68 22  IG_INT, "-width"
1e90: 2c 20 22 77 69 64 74 68 22 2c 20 22 57 69 64 74  , "width", "Widt
1ea0: 68 22 2c 0a 09 44 45 46 5f 42 55 54 54 4f 4e 5f  h",..DEF_BUTTON_
1eb0: 57 49 44 54 48 2c 20 54 6b 5f 4f 66 66 73 65 74  WIDTH, Tk_Offset
1ec0: 28 42 75 74 74 6f 6e 2c 20 77 69 64 74 68 29 2c  (Button, width),
1ed0: 20 41 4c 4c 5f 4d 41 53 4b 7d 2c 0a 20 20 20 20   ALL_MASK},.    
1ee0: 7b 54 4b 5f 43 4f 4e 46 49 47 5f 50 49 58 45 4c  {TK_CONFIG_PIXEL
1ef0: 53 2c 20 22 2d 77 72 61 70 6c 65 6e 67 74 68 22  S, "-wraplength"
1f00: 2c 20 22 77 72 61 70 4c 65 6e 67 74 68 22 2c 20  , "wrapLength", 
1f10: 22 57 72 61 70 4c 65 6e 67 74 68 22 2c 0a 09 44  "WrapLength",..D
1f20: 45 46 5f 42 55 54 54 4f 4e 5f 57 52 41 50 5f 4c  EF_BUTTON_WRAP_L
1f30: 45 4e 47 54 48 2c 20 54 6b 5f 4f 66 66 73 65 74  ENGTH, Tk_Offset
1f40: 28 42 75 74 74 6f 6e 2c 20 77 72 61 70 4c 65 6e  (Button, wrapLen
1f50: 67 74 68 29 2c 20 41 4c 4c 5f 4d 41 53 4b 7d 2c  gth), ALL_MASK},
1f60: 0a 20 20 20 20 7b 54 4b 5f 43 4f 4e 46 49 47 5f  .    {TK_CONFIG_
1f70: 45 4e 44 2c 20 28 63 68 61 72 20 2a 29 20 4e 55  END, (char *) NU
1f80: 4c 4c 2c 20 28 63 68 61 72 20 2a 29 20 4e 55 4c  LL, (char *) NUL
1f90: 4c 2c 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c  L, (char *) NULL
1fa0: 2c 0a 09 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c  ,..(char *) NULL
1fb0: 2c 20 30 2c 20 30 7d 0a 7d 3b 0a 0a 2f 2a 0a 20  , 0, 0}.};../*. 
1fc0: 2a 20 53 74 72 69 6e 67 20 74 6f 20 70 72 69 6e  * String to prin
1fd0: 74 20 6f 75 74 20 69 6e 20 65 72 72 6f 72 20 6d  t out in error m
1fe0: 65 73 73 61 67 65 73 2c 20 69 64 65 6e 74 69 66  essages, identif
1ff0: 79 69 6e 67 20 6f 70 74 69 6f 6e 73 20 66 6f 72  ying options for
2000: 0a 20 2a 20 77 69 64 67 65 74 20 63 6f 6d 6d 61  . * widget comma
2010: 6e 64 73 20 66 6f 72 20 64 69 66 66 65 72 65 6e  nds for differen
2020: 74 20 74 79 70 65 73 20 6f 66 20 6c 61 62 65 6c  t types of label
2030: 73 20 6f 72 20 62 75 74 74 6f 6e 73 3a 0a 20 2a  s or buttons:. *
2040: 2f 0a 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a  /..static char *
2050: 6f 70 74 69 6f 6e 53 74 72 69 6e 67 73 5b 5d 20  optionStrings[] 
2060: 3d 20 7b 0a 20 20 20 20 22 63 67 65 74 20 6f 72  = {.    "cget or
2070: 20 63 6f 6e 66 69 67 75 72 65 22 2c 0a 20 20 20   configure",.   
2080: 20 22 63 67 65 74 2c 20 63 6f 6e 66 69 67 75 72   "cget, configur
2090: 65 2c 20 66 6c 61 73 68 2c 20 6f 72 20 69 6e 76  e, flash, or inv
20a0: 6f 6b 65 22 2c 0a 20 20 20 20 22 63 67 65 74 2c  oke",.    "cget,
20b0: 20 63 6f 6e 66 69 67 75 72 65 2c 20 64 65 73 65   configure, dese
20c0: 6c 65 63 74 2c 20 66 6c 61 73 68 2c 20 69 6e 76  lect, flash, inv
20d0: 6f 6b 65 2c 20 73 65 6c 65 63 74 2c 20 6f 72 20  oke, select, or 
20e0: 74 6f 67 67 6c 65 22 2c 0a 20 20 20 20 22 63 67  toggle",.    "cg
20f0: 65 74 2c 20 63 6f 6e 66 69 67 75 72 65 2c 20 64  et, configure, d
2100: 65 73 65 6c 65 63 74 2c 20 66 6c 61 73 68 2c 20  eselect, flash, 
2110: 69 6e 76 6f 6b 65 2c 20 6f 72 20 73 65 6c 65 63  invoke, or selec
2120: 74 22 0a 7d 3b 0a 0a 2f 2a 0a 20 2a 20 46 6f 72  t".};../*. * For
2130: 77 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e  ward declaration
2140: 73 20 66 6f 72 20 70 72 6f 63 65 64 75 72 65 73  s for procedures
2150: 20 64 65 66 69 6e 65 64 20 6c 61 74 65 72 20 69   defined later i
2160: 6e 20 74 68 69 73 20 66 69 6c 65 3a 0a 20 2a 2f  n this file:. */
2170: 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 09 09 42  ..static void..B
2180: 75 74 74 6f 6e 43 6d 64 44 65 6c 65 74 65 64 50  uttonCmdDeletedP
2190: 72 6f 63 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28  roc _ANSI_ARGS_(
21a0: 28 0a 09 09 09 20 20 20 20 43 6c 69 65 6e 74 44  (....    ClientD
21b0: 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 29 29  ata clientData))
21c0: 3b 0a 73 74 61 74 69 63 20 69 6e 74 09 09 42 75  ;.static int..Bu
21d0: 74 74 6f 6e 43 72 65 61 74 65 20 5f 41 4e 53 49  ttonCreate _ANSI
21e0: 5f 41 52 47 53 5f 28 28 43 6c 69 65 6e 74 44 61  _ARGS_((ClientDa
21f0: 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 09  ta clientData,..
2200: 09 09 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70  ..    Tcl_Interp
2210: 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 61 72   *interp, int ar
2220: 67 63 2c 20 63 68 61 72 20 2a 2a 61 72 67 76 2c  gc, char **argv,
2230: 0a 09 09 09 20 20 20 20 69 6e 74 20 74 79 70 65  ....    int type
2240: 29 29 3b 0a 73 74 61 74 69 63 20 76 6f 69 64 09  ));.static void.
2250: 09 42 75 74 74 6f 6e 45 76 65 6e 74 50 72 6f 63  .ButtonEventProc
2260: 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 43 6c   _ANSI_ARGS_((Cl
2270: 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44  ientData clientD
2280: 61 74 61 2c 0a 09 09 09 20 20 20 20 58 45 76 65  ata,....    XEve
2290: 6e 74 20 2a 65 76 65 6e 74 50 74 72 29 29 3b 0a  nt *eventPtr));.
22a0: 73 74 61 74 69 63 20 63 68 61 72 20 2a 09 09 42  static char *..B
22b0: 75 74 74 6f 6e 54 65 78 74 56 61 72 50 72 6f 63  uttonTextVarProc
22c0: 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 43 6c   _ANSI_ARGS_((Cl
22d0: 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44  ientData clientD
22e0: 61 74 61 2c 0a 09 09 09 20 20 20 20 54 63 6c 5f  ata,....    Tcl_
22f0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
2300: 63 68 61 72 20 2a 6e 61 6d 65 31 2c 20 63 68 61  char *name1, cha
2310: 72 20 2a 6e 61 6d 65 32 2c 0a 09 09 09 20 20 20  r *name2,....   
2320: 20 69 6e 74 20 66 6c 61 67 73 29 29 3b 0a 73 74   int flags));.st
2330: 61 74 69 63 20 63 68 61 72 20 2a 09 09 42 75 74  atic char *..But
2340: 74 6f 6e 56 61 72 50 72 6f 63 20 5f 41 4e 53 49  tonVarProc _ANSI
2350: 5f 41 52 47 53 5f 28 28 43 6c 69 65 6e 74 44 61  _ARGS_((ClientDa
2360: 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 09  ta clientData,..
2370: 09 09 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70  ..    Tcl_Interp
2380: 20 2a 69 6e 74 65 72 70 2c 20 63 68 61 72 20 2a   *interp, char *
2390: 6e 61 6d 65 31 2c 20 63 68 61 72 20 2a 6e 61 6d  name1, char *nam
23a0: 65 32 2c 0a 09 09 09 20 20 20 20 69 6e 74 20 66  e2,....    int f
23b0: 6c 61 67 73 29 29 3b 0a 73 74 61 74 69 63 20 69  lags));.static i
23c0: 6e 74 09 09 42 75 74 74 6f 6e 57 69 64 67 65 74  nt..ButtonWidget
23d0: 43 6d 64 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28  Cmd _ANSI_ARGS_(
23e0: 28 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65  (ClientData clie
23f0: 6e 74 44 61 74 61 2c 0a 09 09 09 20 20 20 20 54  ntData,....    T
2400: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
2410: 70 2c 20 69 6e 74 20 61 72 67 63 2c 20 63 68 61  p, int argc, cha
2420: 72 20 2a 2a 61 72 67 76 29 29 3b 0a 73 74 61 74  r **argv));.stat
2430: 69 63 20 76 6f 69 64 09 09 43 6f 6d 70 75 74 65  ic void..Compute
2440: 42 75 74 74 6f 6e 47 65 6f 6d 65 74 72 79 20 5f  ButtonGeometry _
2450: 41 4e 53 49 5f 41 52 47 53 5f 28 28 42 75 74 74  ANSI_ARGS_((Butt
2460: 6f 6e 20 2a 62 75 74 50 74 72 29 29 3b 0a 73 74  on *butPtr));.st
2470: 61 74 69 63 20 69 6e 74 09 09 43 6f 6e 66 69 67  atic int..Config
2480: 75 72 65 42 75 74 74 6f 6e 20 5f 41 4e 53 49 5f  ureButton _ANSI_
2490: 41 52 47 53 5f 28 28 54 63 6c 5f 49 6e 74 65 72  ARGS_((Tcl_Inter
24a0: 70 20 2a 69 6e 74 65 72 70 2c 0a 09 09 09 20 20  p *interp,....  
24b0: 20 20 42 75 74 74 6f 6e 20 2a 62 75 74 50 74 72    Button *butPtr
24c0: 2c 20 69 6e 74 20 61 72 67 63 2c 20 63 68 61 72  , int argc, char
24d0: 20 2a 2a 61 72 67 76 2c 0a 09 09 09 20 20 20 20   **argv,....    
24e0: 69 6e 74 20 66 6c 61 67 73 29 29 3b 0a 73 74 61  int flags));.sta
24f0: 74 69 63 20 76 6f 69 64 09 09 44 65 73 74 72 6f  tic void..Destro
2500: 79 42 75 74 74 6f 6e 20 5f 41 4e 53 49 5f 41 52  yButton _ANSI_AR
2510: 47 53 5f 28 28 43 6c 69 65 6e 74 44 61 74 61 20  GS_((ClientData 
2520: 63 6c 69 65 6e 74 44 61 74 61 29 29 3b 0a 73 74  clientData));.st
2530: 61 74 69 63 20 76 6f 69 64 09 09 44 69 73 70 6c  atic void..Displ
2540: 61 79 42 75 74 74 6f 6e 20 5f 41 4e 53 49 5f 41  ayButton _ANSI_A
2550: 52 47 53 5f 28 28 43 6c 69 65 6e 74 44 61 74 61  RGS_((ClientData
2560: 20 63 6c 69 65 6e 74 44 61 74 61 29 29 3b 0a 73   clientData));.s
2570: 74 61 74 69 63 20 69 6e 74 09 09 49 6e 76 6f 6b  tatic int..Invok
2580: 65 42 75 74 74 6f 6e 20 20 5f 41 4e 53 49 5f 41  eButton  _ANSI_A
2590: 52 47 53 5f 28 28 42 75 74 74 6f 6e 20 2a 62 75  RGS_((Button *bu
25a0: 74 50 74 72 29 29 3b 0a 0c 0a 2f 2a 0a 20 2a 2d  tPtr));.../*. *-
25b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
25c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
25d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
25e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a  -------------. *
25f0: 0a 20 2a 20 54 6b 5f 42 75 74 74 6f 6e 43 6d 64  . * Tk_ButtonCmd
2600: 2c 20 54 6b 5f 43 68 65 63 6b 62 75 74 74 6f 6e  , Tk_Checkbutton
2610: 43 6d 64 2c 20 54 6b 5f 4c 61 62 65 6c 43 6d 64  Cmd, Tk_LabelCmd
2620: 2c 20 54 6b 5f 52 61 64 69 6f 62 75 74 74 6f 6e  , Tk_Radiobutton
2630: 43 6d 64 20 2d 2d 0a 20 2a 0a 20 2a 09 54 68 65  Cmd --. *. *.The
2640: 73 65 20 70 72 6f 63 65 64 75 72 65 73 20 61 72  se procedures ar
2650: 65 20 69 6e 76 6f 6b 65 64 20 74 6f 20 70 72 6f  e invoked to pro
2660: 63 65 73 73 20 74 68 65 20 22 62 75 74 74 6f 6e  cess the "button
2670: 22 2c 20 22 6c 61 62 65 6c 22 2c 0a 20 2a 09 22  ", "label",. *."
2680: 72 61 64 69 6f 62 75 74 74 6f 6e 22 2c 20 61 6e  radiobutton", an
2690: 64 20 22 63 68 65 63 6b 62 75 74 74 6f 6e 22 20  d "checkbutton" 
26a0: 54 63 6c 20 63 6f 6d 6d 61 6e 64 73 2e 20 20 53  Tcl commands.  S
26b0: 65 65 20 74 68 65 0a 20 2a 09 75 73 65 72 20 64  ee the. *.user d
26c0: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72  ocumentation for
26d0: 20 64 65 74 61 69 6c 73 20 6f 6e 20 77 68 61 74   details on what
26e0: 20 74 68 65 79 20 64 6f 2e 0a 20 2a 0a 20 2a 20   they do.. *. * 
26f0: 52 65 73 75 6c 74 73 3a 0a 20 2a 09 41 20 73 74  Results:. *.A st
2700: 61 6e 64 61 72 64 20 54 63 6c 20 72 65 73 75 6c  andard Tcl resul
2710: 74 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20 65 66  t.. *. * Side ef
2720: 66 65 63 74 73 3a 0a 20 2a 09 53 65 65 20 74 68  fects:. *.See th
2730: 65 20 75 73 65 72 20 64 6f 63 75 6d 65 6e 74 61  e user documenta
2740: 74 69 6f 6e 2e 20 20 54 68 65 73 65 20 70 72 6f  tion.  These pro
2750: 63 65 64 75 72 65 73 20 61 72 65 20 6a 75 73 74  cedures are just
2760: 20 77 72 61 70 70 65 72 73 3b 0a 20 2a 09 74 68   wrappers;. *.th
2770: 65 79 20 63 61 6c 6c 20 42 75 74 74 6f 6e 43 72  ey call ButtonCr
2780: 65 61 74 65 20 74 6f 20 64 6f 20 61 6c 6c 20 6f  eate to do all o
2790: 66 20 74 68 65 20 72 65 61 6c 20 77 6f 72 6b 2e  f the real work.
27a0: 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  . *. *----------
27b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
27c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
27d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
27e0: 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 69 6e 74 0a 54 6b  ----. */..int.Tk
27f0: 5f 42 75 74 74 6f 6e 43 6d 64 28 63 6c 69 65 6e  _ButtonCmd(clien
2800: 74 44 61 74 61 2c 20 69 6e 74 65 72 70 2c 20 61  tData, interp, a
2810: 72 67 63 2c 20 61 72 67 76 29 0a 20 20 20 20 43  rgc, argv).    C
2820: 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74  lientData client
2830: 44 61 74 61 3b 09 2f 2a 20 4d 61 69 6e 20 77 69  Data;./* Main wi
2840: 6e 64 6f 77 20 61 73 73 6f 63 69 61 74 65 64 20  ndow associated 
2850: 77 69 74 68 0a 09 09 09 09 20 2a 20 69 6e 74 65  with..... * inte
2860: 72 70 72 65 74 65 72 2e 20 2a 2f 0a 20 20 20 20  rpreter. */.    
2870: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
2880: 72 70 3b 09 09 2f 2a 20 43 75 72 72 65 6e 74 20  rp;../* Current 
2890: 69 6e 74 65 72 70 72 65 74 65 72 2e 20 2a 2f 0a  interpreter. */.
28a0: 20 20 20 20 69 6e 74 20 61 72 67 63 3b 09 09 09      int argc;...
28b0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
28c0: 75 6d 65 6e 74 73 2e 20 2a 2f 0a 20 20 20 20 63  uments. */.    c
28d0: 68 61 72 20 2a 2a 61 72 67 76 3b 09 09 2f 2a 20  har **argv;../* 
28e0: 41 72 67 75 6d 65 6e 74 20 73 74 72 69 6e 67 73  Argument strings
28f0: 2e 20 2a 2f 0a 7b 0a 20 20 20 20 72 65 74 75 72  . */.{.    retur
2900: 6e 20 42 75 74 74 6f 6e 43 72 65 61 74 65 28 63  n ButtonCreate(c
2910: 6c 69 65 6e 74 44 61 74 61 2c 20 69 6e 74 65 72  lientData, inter
2920: 70 2c 20 61 72 67 63 2c 20 61 72 67 76 2c 20 54  p, argc, argv, T
2930: 59 50 45 5f 42 55 54 54 4f 4e 29 3b 0a 7d 0a 0a  YPE_BUTTON);.}..
2940: 69 6e 74 0a 54 6b 5f 43 68 65 63 6b 62 75 74 74  int.Tk_Checkbutt
2950: 6f 6e 43 6d 64 28 63 6c 69 65 6e 74 44 61 74 61  onCmd(clientData
2960: 2c 20 69 6e 74 65 72 70 2c 20 61 72 67 63 2c 20  , interp, argc, 
2970: 61 72 67 76 29 0a 20 20 20 20 43 6c 69 65 6e 74  argv).    Client
2980: 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 3b  Data clientData;
2990: 09 2f 2a 20 4d 61 69 6e 20 77 69 6e 64 6f 77 20  ./* Main window 
29a0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a  associated with.
29b0: 09 09 09 09 20 2a 20 69 6e 74 65 72 70 72 65 74  .... * interpret
29c0: 65 72 2e 20 2a 2f 0a 20 20 20 20 54 63 6c 5f 49  er. */.    Tcl_I
29d0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b 09 09  nterp *interp;..
29e0: 2f 2a 20 43 75 72 72 65 6e 74 20 69 6e 74 65 72  /* Current inter
29f0: 70 72 65 74 65 72 2e 20 2a 2f 0a 20 20 20 20 69  preter. */.    i
2a00: 6e 74 20 61 72 67 63 3b 09 09 09 2f 2a 20 4e 75  nt argc;.../* Nu
2a10: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
2a20: 73 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  s. */.    char *
2a30: 2a 61 72 67 76 3b 09 09 2f 2a 20 41 72 67 75 6d  *argv;../* Argum
2a40: 65 6e 74 20 73 74 72 69 6e 67 73 2e 20 2a 2f 0a  ent strings. */.
2a50: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 42 75 74  {.    return But
2a60: 74 6f 6e 43 72 65 61 74 65 28 63 6c 69 65 6e 74  tonCreate(client
2a70: 44 61 74 61 2c 20 69 6e 74 65 72 70 2c 20 61 72  Data, interp, ar
2a80: 67 63 2c 20 61 72 67 76 2c 20 54 59 50 45 5f 43  gc, argv, TYPE_C
2a90: 48 45 43 4b 5f 42 55 54 54 4f 4e 29 3b 0a 7d 0a  HECK_BUTTON);.}.
2aa0: 0a 69 6e 74 0a 54 6b 5f 4c 61 62 65 6c 43 6d 64  .int.Tk_LabelCmd
2ab0: 28 63 6c 69 65 6e 74 44 61 74 61 2c 20 69 6e 74  (clientData, int
2ac0: 65 72 70 2c 20 61 72 67 63 2c 20 61 72 67 76 29  erp, argc, argv)
2ad0: 0a 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20  .    ClientData 
2ae0: 63 6c 69 65 6e 74 44 61 74 61 3b 09 2f 2a 20 4d  clientData;./* M
2af0: 61 69 6e 20 77 69 6e 64 6f 77 20 61 73 73 6f 63  ain window assoc
2b00: 69 61 74 65 64 20 77 69 74 68 0a 09 09 09 09 20  iated with..... 
2b10: 2a 20 69 6e 74 65 72 70 72 65 74 65 72 2e 20 2a  * interpreter. *
2b20: 2f 0a 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70  /.    Tcl_Interp
2b30: 20 2a 69 6e 74 65 72 70 3b 09 09 2f 2a 20 43 75   *interp;../* Cu
2b40: 72 72 65 6e 74 20 69 6e 74 65 72 70 72 65 74 65  rrent interprete
2b50: 72 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 72  r. */.    int ar
2b60: 67 63 3b 09 09 09 2f 2a 20 4e 75 6d 62 65 72 20  gc;.../* Number 
2b70: 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 2a 2f  of arguments. */
2b80: 0a 20 20 20 20 63 68 61 72 20 2a 2a 61 72 67 76  .    char **argv
2b90: 3b 09 09 2f 2a 20 41 72 67 75 6d 65 6e 74 20 73  ;../* Argument s
2ba0: 74 72 69 6e 67 73 2e 20 2a 2f 0a 7b 0a 20 20 20  trings. */.{.   
2bb0: 20 72 65 74 75 72 6e 20 42 75 74 74 6f 6e 43 72   return ButtonCr
2bc0: 65 61 74 65 28 63 6c 69 65 6e 74 44 61 74 61 2c  eate(clientData,
2bd0: 20 69 6e 74 65 72 70 2c 20 61 72 67 63 2c 20 61   interp, argc, a
2be0: 72 67 76 2c 20 54 59 50 45 5f 4c 41 42 45 4c 29  rgv, TYPE_LABEL)
2bf0: 3b 0a 7d 0a 0a 69 6e 74 0a 54 6b 5f 52 61 64 69  ;.}..int.Tk_Radi
2c00: 6f 62 75 74 74 6f 6e 43 6d 64 28 63 6c 69 65 6e  obuttonCmd(clien
2c10: 74 44 61 74 61 2c 20 69 6e 74 65 72 70 2c 20 61  tData, interp, a
2c20: 72 67 63 2c 20 61 72 67 76 29 0a 20 20 20 20 43  rgc, argv).    C
2c30: 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74  lientData client
2c40: 44 61 74 61 3b 09 2f 2a 20 4d 61 69 6e 20 77 69  Data;./* Main wi
2c50: 6e 64 6f 77 20 61 73 73 6f 63 69 61 74 65 64 20  ndow associated 
2c60: 77 69 74 68 0a 09 09 09 09 20 2a 20 69 6e 74 65  with..... * inte
2c70: 72 70 72 65 74 65 72 2e 20 2a 2f 0a 20 20 20 20  rpreter. */.    
2c80: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
2c90: 72 70 3b 09 09 2f 2a 20 43 75 72 72 65 6e 74 20  rp;../* Current 
2ca0: 69 6e 74 65 72 70 72 65 74 65 72 2e 20 2a 2f 0a  interpreter. */.
2cb0: 20 20 20 20 69 6e 74 20 61 72 67 63 3b 09 09 09      int argc;...
2cc0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
2cd0: 75 6d 65 6e 74 73 2e 20 2a 2f 0a 20 20 20 20 63  uments. */.    c
2ce0: 68 61 72 20 2a 2a 61 72 67 76 3b 09 09 2f 2a 20  har **argv;../* 
2cf0: 41 72 67 75 6d 65 6e 74 20 73 74 72 69 6e 67 73  Argument strings
2d00: 2e 20 2a 2f 0a 7b 0a 20 20 20 20 72 65 74 75 72  . */.{.    retur
2d10: 6e 20 42 75 74 74 6f 6e 43 72 65 61 74 65 28 63  n ButtonCreate(c
2d20: 6c 69 65 6e 74 44 61 74 61 2c 20 69 6e 74 65 72  lientData, inter
2d30: 70 2c 20 61 72 67 63 2c 20 61 72 67 76 2c 20 54  p, argc, argv, T
2d40: 59 50 45 5f 52 41 44 49 4f 5f 42 55 54 54 4f 4e  YPE_RADIO_BUTTON
2d50: 29 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d  );.}.../*. *----
2d60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2d70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2d80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2d90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a  ----------. *. *
2da0: 20 42 75 74 74 6f 6e 43 72 65 61 74 65 20 2d 2d   ButtonCreate --
2db0: 0a 20 2a 0a 20 2a 09 54 68 69 73 20 70 72 6f 63  . *. *.This proc
2dc0: 65 64 75 72 65 20 64 6f 65 73 20 61 6c 6c 20 74  edure does all t
2dd0: 68 65 20 72 65 61 6c 20 77 6f 72 6b 20 6f 66 20  he real work of 
2de0: 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65  implementing the
2df0: 0a 20 2a 09 22 62 75 74 74 6f 6e 22 2c 20 22 6c  . *."button", "l
2e00: 61 62 65 6c 22 2c 20 22 72 61 64 69 6f 62 75 74  abel", "radiobut
2e10: 74 6f 6e 22 2c 20 61 6e 64 20 22 63 68 65 63 6b  ton", and "check
2e20: 62 75 74 74 6f 6e 22 20 54 63 6c 0a 20 2a 09 63  button" Tcl. *.c
2e30: 6f 6d 6d 61 6e 64 73 2e 20 20 53 65 65 20 74 68  ommands.  See th
2e40: 65 20 75 73 65 72 20 64 6f 63 75 6d 65 6e 74 61  e user documenta
2e50: 74 69 6f 6e 20 66 6f 72 20 64 65 74 61 69 6c 73  tion for details
2e60: 20 6f 6e 20 77 68 61 74 20 69 74 20 64 6f 65 73   on what it does
2e70: 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a  .. *. * Results:
2e80: 0a 20 2a 09 41 20 73 74 61 6e 64 61 72 64 20 54  . *.A standard T
2e90: 63 6c 20 72 65 73 75 6c 74 2e 0a 20 2a 0a 20 2a  cl result.. *. *
2ea0: 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 20   Side effects:. 
2eb0: 2a 09 53 65 65 20 74 68 65 20 75 73 65 72 20 64  *.See the user d
2ec0: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 2e 0a 20 2a  ocumentation.. *
2ed0: 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  . *-------------
2ee0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ef0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2f00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2f10: 2d 0a 20 2a 2f 0a 0a 73 74 61 74 69 63 20 69 6e  -. */..static in
2f20: 74 0a 42 75 74 74 6f 6e 43 72 65 61 74 65 28 63  t.ButtonCreate(c
2f30: 6c 69 65 6e 74 44 61 74 61 2c 20 69 6e 74 65 72  lientData, inter
2f40: 70 2c 20 61 72 67 63 2c 20 61 72 67 76 2c 20 74  p, argc, argv, t
2f50: 79 70 65 29 0a 20 20 20 20 43 6c 69 65 6e 74 44  ype).    ClientD
2f60: 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 3b 09  ata clientData;.
2f70: 2f 2a 20 4d 61 69 6e 20 77 69 6e 64 6f 77 20 61  /* Main window a
2f80: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 09  ssociated with..
2f90: 09 09 09 20 2a 20 69 6e 74 65 72 70 72 65 74 65  ... * interprete
2fa0: 72 2e 20 2a 2f 0a 20 20 20 20 54 63 6c 5f 49 6e  r. */.    Tcl_In
2fb0: 74 65 72 70 20 2a 69 6e 74 65 72 70 3b 09 09 2f  terp *interp;../
2fc0: 2a 20 43 75 72 72 65 6e 74 20 69 6e 74 65 72 70  * Current interp
2fd0: 72 65 74 65 72 2e 20 2a 2f 0a 20 20 20 20 69 6e  reter. */.    in
2fe0: 74 20 61 72 67 63 3b 09 09 09 2f 2a 20 4e 75 6d  t argc;.../* Num
2ff0: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
3000: 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 2a  . */.    char **
3010: 61 72 67 76 3b 09 09 2f 2a 20 41 72 67 75 6d 65  argv;../* Argume
3020: 6e 74 20 73 74 72 69 6e 67 73 2e 20 2a 2f 0a 20  nt strings. */. 
3030: 20 20 20 69 6e 74 20 74 79 70 65 3b 09 09 09 2f     int type;.../
3040: 2a 20 54 79 70 65 20 6f 66 20 62 75 74 74 6f 6e  * Type of button
3050: 20 74 6f 20 63 72 65 61 74 65 3a 20 54 59 50 45   to create: TYPE
3060: 5f 4c 41 42 45 4c 2c 0a 09 09 09 09 20 2a 20 54  _LABEL,..... * T
3070: 59 50 45 5f 42 55 54 54 4f 4e 2c 20 54 59 50 45  YPE_BUTTON, TYPE
3080: 5f 43 48 45 43 4b 5f 42 55 54 54 4f 4e 2c 20 6f  _CHECK_BUTTON, o
3090: 72 0a 09 09 09 09 20 2a 20 54 59 50 45 5f 52 41  r..... * TYPE_RA
30a0: 44 49 4f 5f 42 55 54 54 4f 4e 2e 20 2a 2f 0a 7b  DIO_BUTTON. */.{
30b0: 0a 20 20 20 20 72 65 67 69 73 74 65 72 20 42 75  .    register Bu
30c0: 74 74 6f 6e 20 2a 62 75 74 50 74 72 3b 0a 20 20  tton *butPtr;.  
30d0: 20 20 54 6b 5f 57 69 6e 64 6f 77 20 74 6b 77 69    Tk_Window tkwi
30e0: 6e 20 3d 20 28 54 6b 5f 57 69 6e 64 6f 77 29 20  n = (Tk_Window) 
30f0: 63 6c 69 65 6e 74 44 61 74 61 3b 0a 20 20 20 20  clientData;.    
3100: 54 6b 5f 57 69 6e 64 6f 77 20 6e 65 77 3b 0a 0a  Tk_Window new;..
3110: 20 20 20 20 69 66 20 28 61 72 67 63 20 3c 20 32      if (argc < 2
3120: 29 20 7b 0a 09 54 63 6c 5f 41 70 70 65 6e 64 52  ) {..Tcl_AppendR
3130: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
3140: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 20 73 68  rong # args:  sh
3150: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 09 09 61  ould be \"",...a
3160: 72 67 76 5b 30 5d 2c 20 22 20 70 61 74 68 4e 61  rgv[0], " pathNa
3170: 6d 65 20 3f 6f 70 74 69 6f 6e 73 3f 5c 22 22 2c  me ?options?\"",
3180: 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b   (char *) NULL);
3190: 0a 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ..return TCL_ERR
31a0: 4f 52 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  OR;.    }..    /
31b0: 2a 0a 20 20 20 20 20 2a 20 43 72 65 61 74 65 20  *.     * Create 
31c0: 74 68 65 20 6e 65 77 20 77 69 6e 64 6f 77 2e 0a  the new window..
31d0: 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 6e 65 77       */..    new
31e0: 20 3d 20 54 6b 5f 43 72 65 61 74 65 57 69 6e 64   = Tk_CreateWind
31f0: 6f 77 46 72 6f 6d 50 61 74 68 28 69 6e 74 65 72  owFromPath(inter
3200: 70 2c 20 74 6b 77 69 6e 2c 20 61 72 67 76 5b 31  p, tkwin, argv[1
3210: 5d 2c 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c  ], (char *) NULL
3220: 29 3b 0a 20 20 20 20 69 66 20 28 6e 65 77 20 3d  );.    if (new =
3230: 3d 20 4e 55 4c 4c 29 20 7b 0a 09 72 65 74 75 72  = NULL) {..retur
3240: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20  n TCL_ERROR;.   
3250: 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20   }..    /*.     
3260: 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65  * Initialize the
3270: 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 20   data structure 
3280: 66 6f 72 20 74 68 65 20 62 75 74 74 6f 6e 2e 0a  for the button..
3290: 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 62 75 74       */..    but
32a0: 50 74 72 20 3d 20 28 42 75 74 74 6f 6e 20 2a 29  Ptr = (Button *)
32b0: 20 63 6b 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28   ckalloc(sizeof(
32c0: 42 75 74 74 6f 6e 29 29 3b 0a 20 20 20 20 62 75  Button));.    bu
32d0: 74 50 74 72 2d 3e 74 6b 77 69 6e 20 3d 20 6e 65  tPtr->tkwin = ne
32e0: 77 3b 0a 20 20 20 20 62 75 74 50 74 72 2d 3e 77  w;.    butPtr->w
32f0: 69 64 67 65 74 43 6d 64 20 3d 20 54 63 6c 5f 43  idgetCmd = Tcl_C
3300: 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 69 6e 74  reateCommand(int
3310: 65 72 70 2c 20 54 6b 5f 50 61 74 68 4e 61 6d 65  erp, Tk_PathName
3320: 28 62 75 74 50 74 72 2d 3e 74 6b 77 69 6e 29 2c  (butPtr->tkwin),
3330: 0a 09 20 20 20 20 42 75 74 74 6f 6e 57 69 64 67  ..    ButtonWidg
3340: 65 74 43 6d 64 2c 20 28 43 6c 69 65 6e 74 44 61  etCmd, (ClientDa
3350: 74 61 29 20 62 75 74 50 74 72 2c 20 42 75 74 74  ta) butPtr, Butt
3360: 6f 6e 43 6d 64 44 65 6c 65 74 65 64 50 72 6f 63  onCmdDeletedProc
3370: 29 3b 0a 20 20 20 20 62 75 74 50 74 72 2d 3e 69  );.    butPtr->i
3380: 6e 74 65 72 70 20 3d 20 69 6e 74 65 72 70 3b 0a  nterp = interp;.
3390: 20 20 20 20 62 75 74 50 74 72 2d 3e 74 79 70 65      butPtr->type
33a0: 20 3d 20 74 79 70 65 3b 0a 20 20 20 20 62 75 74   = type;.    but
33b0: 50 74 72 2d 3e 74 65 78 74 20 3d 20 4e 55 4c 4c  Ptr->text = NULL
33c0: 3b 0a 20 20 20 20 62 75 74 50 74 72 2d 3e 6e 75  ;.    butPtr->nu
33d0: 6d 43 68 61 72 73 20 3d 20 30 3b 0a 20 20 20 20  mChars = 0;.    
33e0: 62 75 74 50 74 72 2d 3e 75 6e 64 65 72 6c 69 6e  butPtr->underlin
33f0: 65 20 3d 20 2d 31 3b 0a 20 20 20 20 62 75 74 50  e = -1;.    butP
3400: 74 72 2d 3e 74 65 78 74 56 61 72 4e 61 6d 65 20  tr->textVarName 
3410: 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 62 75 74 50  = NULL;.    butP
3420: 74 72 2d 3e 73 74 61 74 65 20 3d 20 74 6b 4e 6f  tr->state = tkNo
3430: 72 6d 61 6c 55 69 64 3b 0a 20 20 20 20 62 75 74  rmalUid;.    but
3440: 50 74 72 2d 3e 62 6f 72 64 65 72 57 69 64 74 68  Ptr->borderWidth
3450: 20 3d 20 30 3b 0a 20 20 20 20 62 75 74 50 74 72   = 0;.    butPtr
3460: 2d 3e 77 69 64 74 68 20 3d 20 30 3b 0a 20 20 20  ->width = 0;.   
3470: 20 62 75 74 50 74 72 2d 3e 68 65 69 67 68 74 20   butPtr->height 
3480: 3d 20 30 3b 0a 20 20 20 20 62 75 74 50 74 72 2d  = 0;.    butPtr-
3490: 3e 77 72 61 70 4c 65 6e 67 74 68 20 3d 20 30 3b  >wrapLength = 0;
34a0: 0a 20 20 20 20 62 75 74 50 74 72 2d 3e 70 61 64  .    butPtr->pad
34b0: 58 20 3d 20 30 3b 0a 20 20 20 20 62 75 74 50 74  X = 0;.    butPt
34c0: 72 2d 3e 70 61 64 59 20 3d 20 30 3b 0a 20 20 20  r->padY = 0;.   
34d0: 20 62 75 74 50 74 72 2d 3e 61 6e 63 68 6f 72 20   butPtr->anchor 
34e0: 3d 20 54 4b 5f 41 4e 43 48 4f 52 5f 43 45 4e 54  = TK_ANCHOR_CENT
34f0: 45 52 3b 0a 20 20 20 20 62 75 74 50 74 72 2d 3e  ER;.    butPtr->
3500: 6a 75 73 74 69 66 79 20 3d 20 54 4b 5f 4a 55 53  justify = TK_JUS
3510: 54 49 46 59 5f 43 45 4e 54 45 52 3b 0a 20 20 20  TIFY_CENTER;.   
3520: 20 62 75 74 50 74 72 2d 3e 69 6e 64 69 63 61 74   butPtr->indicat
3530: 6f 72 4f 6e 20 3d 20 30 3b 0a 20 20 20 20 62 75  orOn = 0;.    bu
3540: 74 50 74 72 2d 3e 73 65 6c 56 61 72 4e 61 6d 65  tPtr->selVarName
3550: 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 62 75 74   = NULL;.    but
3560: 50 74 72 2d 3e 6f 6e 56 61 6c 75 65 20 3d 20 4e  Ptr->onValue = N
3570: 55 4c 4c 3b 0a 20 20 20 20 62 75 74 50 74 72 2d  ULL;.    butPtr-
3580: 3e 6f 66 66 56 61 6c 75 65 20 3d 20 4e 55 4c 4c  >offValue = NULL
3590: 3b 0a 20 20 20 20 62 75 74 50 74 72 2d 3e 63 6f  ;.    butPtr->co
35a0: 6d 6d 61 6e 64 20 3d 20 4e 55 4c 4c 3b 0a 20 20  mmand = NULL;.  
35b0: 20 20 62 75 74 50 74 72 2d 3e 74 61 6b 65 46 6f    butPtr->takeFo
35c0: 63 75 73 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20  cus = NULL;.    
35d0: 62 75 74 50 74 72 2d 3e 66 6c 61 67 73 20 3d 20  butPtr->flags = 
35e0: 30 3b 0a 0a 20 20 20 20 54 6b 5f 53 65 74 43 6c  0;..    Tk_SetCl
35f0: 61 73 73 28 6e 65 77 2c 20 63 6c 61 73 73 4e 61  ass(new, classNa
3600: 6d 65 73 5b 74 79 70 65 5d 29 3b 0a 20 20 20 20  mes[type]);.    
3610: 54 6b 5f 43 72 65 61 74 65 45 76 65 6e 74 48 61  Tk_CreateEventHa
3620: 6e 64 6c 65 72 28 62 75 74 50 74 72 2d 3e 74 6b  ndler(butPtr->tk
3630: 77 69 6e 2c 0a 20 20 20 20 09 20 20 20 20 43 54  win,.    .    CT
3640: 4b 5f 45 58 50 4f 53 45 5f 45 56 45 4e 54 5f 4d  K_EXPOSE_EVENT_M
3650: 41 53 4b 7c 43 54 4b 5f 44 45 53 54 52 4f 59 5f  ASK|CTK_DESTROY_
3660: 45 56 45 4e 54 5f 4d 41 53 4b 7c 43 54 4b 5f 46  EVENT_MASK|CTK_F
3670: 4f 43 55 53 5f 45 56 45 4e 54 5f 4d 41 53 4b 2c  OCUS_EVENT_MASK,
3680: 0a 09 20 20 20 20 42 75 74 74 6f 6e 45 76 65 6e  ..    ButtonEven
3690: 74 50 72 6f 63 2c 20 28 43 6c 69 65 6e 74 44 61  tProc, (ClientDa
36a0: 74 61 29 20 62 75 74 50 74 72 29 3b 0a 20 20 20  ta) butPtr);.   
36b0: 20 69 66 20 28 43 6f 6e 66 69 67 75 72 65 42 75   if (ConfigureBu
36c0: 74 74 6f 6e 28 69 6e 74 65 72 70 2c 20 62 75 74  tton(interp, but
36d0: 50 74 72 2c 20 61 72 67 63 2d 32 2c 20 61 72 67  Ptr, argc-2, arg
36e0: 76 2b 32 2c 0a 09 20 20 20 20 63 6f 6e 66 69 67  v+2,..    config
36f0: 46 6c 61 67 73 5b 74 79 70 65 5d 29 20 21 3d 20  Flags[type]) != 
3700: 54 43 4c 5f 4f 4b 29 20 7b 0a 09 54 6b 5f 44 65  TCL_OK) {..Tk_De
3710: 73 74 72 6f 79 57 69 6e 64 6f 77 28 62 75 74 50  stroyWindow(butP
3720: 74 72 2d 3e 74 6b 77 69 6e 29 3b 0a 09 72 65 74  tr->tkwin);..ret
3730: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
3740: 20 20 20 7d 0a 0a 20 20 20 20 54 63 6c 5f 53 65     }..    Tcl_Se
3750: 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  tResult(interp, 
3760: 54 6b 5f 50 61 74 68 4e 61 6d 65 28 62 75 74 50  Tk_PathName(butP
3770: 74 72 2d 3e 74 6b 77 69 6e 29 2c 20 54 43 4c 5f  tr->tkwin), TCL_
3780: 56 4f 4c 41 54 49 4c 45 29 3b 0a 20 20 20 20 72  VOLATILE);.    r
3790: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
37a0: 0c 0a 2f 2a 0a 20 2a 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 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
37d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
37e0: 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 42 75 74 74  -----. *. * Butt
37f0: 6f 6e 57 69 64 67 65 74 43 6d 64 20 2d 2d 0a 20  onWidgetCmd --. 
3800: 2a 0a 20 2a 09 54 68 69 73 20 70 72 6f 63 65 64  *. *.This proced
3810: 75 72 65 20 69 73 20 69 6e 76 6f 6b 65 64 20 74  ure is invoked t
3820: 6f 20 70 72 6f 63 65 73 73 20 74 68 65 20 54 63  o process the Tc
3830: 6c 20 63 6f 6d 6d 61 6e 64 0a 20 2a 09 74 68 61  l command. *.tha
3840: 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
3850: 20 61 20 77 69 64 67 65 74 20 6d 61 6e 61 67 65   a widget manage
3860: 64 20 62 79 20 74 68 69 73 20 6d 6f 64 75 6c 65  d by this module
3870: 2e 0a 20 2a 09 53 65 65 20 74 68 65 20 75 73 65  .. *.See the use
3880: 72 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  r documentation 
3890: 66 6f 72 20 64 65 74 61 69 6c 73 20 6f 6e 20 77  for details on w
38a0: 68 61 74 20 69 74 20 64 6f 65 73 2e 0a 20 2a 0a  hat it does.. *.
38b0: 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 41   * Results:. *.A
38c0: 20 73 74 61 6e 64 61 72 64 20 54 63 6c 20 72 65   standard Tcl re
38d0: 73 75 6c 74 2e 0a 20 2a 0a 20 2a 20 53 69 64 65  sult.. *. * Side
38e0: 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 53 65 65   effects:. *.See
38f0: 20 74 68 65 20 75 73 65 72 20 64 6f 63 75 6d 65   the user docume
3900: 6e 74 61 74 69 6f 6e 2e 0a 20 2a 0a 20 2a 2d 2d  ntation.. *. *--
3910: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3920: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3930: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3940: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f  ------------. */
3950: 0a 0a 73 74 61 74 69 63 20 69 6e 74 0a 42 75 74  ..static int.But
3960: 74 6f 6e 57 69 64 67 65 74 43 6d 64 28 63 6c 69  tonWidgetCmd(cli
3970: 65 6e 74 44 61 74 61 2c 20 69 6e 74 65 72 70 2c  entData, interp,
3980: 20 61 72 67 63 2c 20 61 72 67 76 29 0a 20 20 20   argc, argv).   
3990: 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65   ClientData clie
39a0: 6e 74 44 61 74 61 3b 09 2f 2a 20 49 6e 66 6f 72  ntData;./* Infor
39b0: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 62 75 74  mation about but
39c0: 74 6f 6e 20 77 69 64 67 65 74 2e 20 2a 2f 0a 20  ton widget. */. 
39d0: 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69     Tcl_Interp *i
39e0: 6e 74 65 72 70 3b 09 09 2f 2a 20 43 75 72 72 65  nterp;../* Curre
39f0: 6e 74 20 69 6e 74 65 72 70 72 65 74 65 72 2e 20  nt interpreter. 
3a00: 2a 2f 0a 20 20 20 20 69 6e 74 20 61 72 67 63 3b  */.    int argc;
3a10: 09 09 09 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20  .../* Number of 
3a20: 61 72 67 75 6d 65 6e 74 73 2e 20 2a 2f 0a 20 20  arguments. */.  
3a30: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 3b 09 09    char **argv;..
3a40: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 73 74 72 69  /* Argument stri
3a50: 6e 67 73 2e 20 2a 2f 0a 7b 0a 20 20 20 20 72 65  ngs. */.{.    re
3a60: 67 69 73 74 65 72 20 42 75 74 74 6f 6e 20 2a 62  gister Button *b
3a70: 75 74 50 74 72 20 3d 20 28 42 75 74 74 6f 6e 20  utPtr = (Button 
3a80: 2a 29 20 63 6c 69 65 6e 74 44 61 74 61 3b 0a 20  *) clientData;. 
3a90: 20 20 20 69 6e 74 20 72 65 73 75 6c 74 20 3d 20     int result = 
3aa0: 54 43 4c 5f 4f 4b 3b 0a 20 20 20 20 73 69 7a 65  TCL_OK;.    size
3ab0: 5f 74 20 6c 65 6e 67 74 68 3b 0a 20 20 20 20 69  _t length;.    i
3ac0: 6e 74 20 63 3b 0a 20 20 20 20 63 68 61 72 20 65  nt c;.    char e
3ad0: 72 72 6f 72 5f 62 75 66 66 65 72 5b 31 32 30 5d  rror_buffer[120]
3ae0: 3b 0a 0a 20 20 20 20 69 66 20 28 61 72 67 63 20  ;..    if (argc 
3af0: 3c 20 32 29 20 7b 0a 09 73 70 72 69 6e 74 66 28  < 2) {..sprintf(
3b00: 65 72 72 6f 72 5f 62 75 66 66 65 72 2c 0a 09 09  error_buffer,...
3b10: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
3b20: 68 6f 75 6c 64 20 62 65 20 5c 22 25 2e 35 30 73  hould be \"%.50s
3b30: 20 6f 70 74 69 6f 6e 20 3f 61 72 67 20 61 72 67   option ?arg arg
3b40: 20 2e 2e 2e 3f 5c 22 22 2c 0a 09 09 61 72 67 76   ...?\"",...argv
3b50: 5b 30 5d 29 3b 0a 09 54 63 6c 5f 53 65 74 52 65  [0]);..Tcl_SetRe
3b60: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 65 72 72  sult(interp, err
3b70: 6f 72 5f 62 75 66 66 65 72 2c 20 54 43 4c 5f 56  or_buffer, TCL_V
3b80: 4f 4c 41 54 49 4c 45 29 3b 0a 09 72 65 74 75 72  OLATILE);..retur
3b90: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20  n TCL_ERROR;.   
3ba0: 20 7d 0a 20 20 20 20 54 6b 5f 50 72 65 73 65 72   }.    Tk_Preser
3bb0: 76 65 28 28 43 6c 69 65 6e 74 44 61 74 61 29 20  ve((ClientData) 
3bc0: 62 75 74 50 74 72 29 3b 0a 20 20 20 20 63 20 3d  butPtr);.    c =
3bd0: 20 61 72 67 76 5b 31 5d 5b 30 5d 3b 0a 20 20 20   argv[1][0];.   
3be0: 20 6c 65 6e 67 74 68 20 3d 20 73 74 72 6c 65 6e   length = strlen
3bf0: 28 61 72 67 76 5b 31 5d 29 3b 0a 20 20 20 20 69  (argv[1]);.    i
3c00: 66 20 28 28 63 20 3d 3d 20 27 63 27 29 20 26 26  f ((c == 'c') &&
3c10: 20 28 73 74 72 6e 63 6d 70 28 61 72 67 76 5b 31   (strncmp(argv[1
3c20: 5d 2c 20 22 63 67 65 74 22 2c 20 6c 65 6e 67 74  ], "cget", lengt
3c30: 68 29 20 3d 3d 20 30 29 0a 09 20 20 20 20 26 26  h) == 0)..    &&
3c40: 20 28 6c 65 6e 67 74 68 20 3e 3d 20 32 29 29 20   (length >= 2)) 
3c50: 7b 0a 09 69 66 20 28 61 72 67 63 20 21 3d 20 33  {..if (argc != 3
3c60: 29 20 7b 0a 09 20 20 20 20 54 63 6c 5f 41 70 70  ) {..    Tcl_App
3c70: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
3c80: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
3c90: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a   should be \"",.
3ca0: 09 09 20 20 20 20 61 72 67 76 5b 30 5d 2c 20 22  ..    argv[0], "
3cb0: 20 63 67 65 74 20 6f 70 74 69 6f 6e 5c 22 22 2c   cget option\"",
3cc0: 0a 09 09 20 20 20 20 28 63 68 61 72 20 2a 29 20  ...    (char *) 
3cd0: 4e 55 4c 4c 29 3b 0a 09 20 20 20 20 67 6f 74 6f  NULL);..    goto
3ce0: 20 65 72 72 6f 72 3b 0a 09 7d 0a 09 72 65 73 75   error;..}..resu
3cf0: 6c 74 20 3d 20 54 6b 5f 43 6f 6e 66 69 67 75 72  lt = Tk_Configur
3d00: 65 56 61 6c 75 65 28 69 6e 74 65 72 70 2c 20 62  eValue(interp, b
3d10: 75 74 50 74 72 2d 3e 74 6b 77 69 6e 2c 20 63 6f  utPtr->tkwin, co
3d20: 6e 66 69 67 53 70 65 63 73 2c 0a 09 09 28 63 68  nfigSpecs,...(ch
3d30: 61 72 20 2a 29 20 62 75 74 50 74 72 2c 20 61 72  ar *) butPtr, ar
3d40: 67 76 5b 32 5d 2c 20 63 6f 6e 66 69 67 46 6c 61  gv[2], configFla
3d50: 67 73 5b 62 75 74 50 74 72 2d 3e 74 79 70 65 5d  gs[butPtr->type]
3d60: 29 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20 69 66  );.    } else if
3d70: 20 28 28 63 20 3d 3d 20 27 63 27 29 20 26 26 20   ((c == 'c') && 
3d80: 28 73 74 72 6e 63 6d 70 28 61 72 67 76 5b 31 5d  (strncmp(argv[1]
3d90: 2c 20 22 63 6f 6e 66 69 67 75 72 65 22 2c 20 6c  , "configure", l
3da0: 65 6e 67 74 68 29 20 3d 3d 20 30 29 0a 09 20 20  ength) == 0)..  
3db0: 20 20 26 26 20 28 6c 65 6e 67 74 68 20 3e 3d 20    && (length >= 
3dc0: 32 29 29 20 7b 0a 09 69 66 20 28 61 72 67 63 20  2)) {..if (argc 
3dd0: 3d 3d 20 32 29 20 7b 0a 09 20 20 20 20 72 65 73  == 2) {..    res
3de0: 75 6c 74 20 3d 20 54 6b 5f 43 6f 6e 66 69 67 75  ult = Tk_Configu
3df0: 72 65 49 6e 66 6f 28 69 6e 74 65 72 70 2c 20 62  reInfo(interp, b
3e00: 75 74 50 74 72 2d 3e 74 6b 77 69 6e 2c 20 63 6f  utPtr->tkwin, co
3e10: 6e 66 69 67 53 70 65 63 73 2c 0a 09 09 20 20 20  nfigSpecs,...   
3e20: 20 28 63 68 61 72 20 2a 29 20 62 75 74 50 74 72   (char *) butPtr
3e30: 2c 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 2c  , (char *) NULL,
3e40: 20 63 6f 6e 66 69 67 46 6c 61 67 73 5b 62 75 74   configFlags[but
3e50: 50 74 72 2d 3e 74 79 70 65 5d 29 3b 0a 09 7d 20  Ptr->type]);..} 
3e60: 65 6c 73 65 20 69 66 20 28 61 72 67 63 20 3d 3d  else if (argc ==
3e70: 20 33 29 20 7b 0a 09 20 20 20 20 72 65 73 75 6c   3) {..    resul
3e80: 74 20 3d 20 54 6b 5f 43 6f 6e 66 69 67 75 72 65  t = Tk_Configure
3e90: 49 6e 66 6f 28 69 6e 74 65 72 70 2c 20 62 75 74  Info(interp, but
3ea0: 50 74 72 2d 3e 74 6b 77 69 6e 2c 20 63 6f 6e 66  Ptr->tkwin, conf
3eb0: 69 67 53 70 65 63 73 2c 0a 09 09 20 20 20 20 28  igSpecs,...    (
3ec0: 63 68 61 72 20 2a 29 20 62 75 74 50 74 72 2c 20  char *) butPtr, 
3ed0: 61 72 67 76 5b 32 5d 2c 0a 09 09 20 20 20 20 63  argv[2],...    c
3ee0: 6f 6e 66 69 67 46 6c 61 67 73 5b 62 75 74 50 74  onfigFlags[butPt
3ef0: 72 2d 3e 74 79 70 65 5d 29 3b 0a 09 7d 20 65 6c  r->type]);..} el
3f00: 73 65 20 7b 0a 09 20 20 20 20 72 65 73 75 6c 74  se {..    result
3f10: 20 3d 20 43 6f 6e 66 69 67 75 72 65 42 75 74 74   = ConfigureButt
3f20: 6f 6e 28 69 6e 74 65 72 70 2c 20 62 75 74 50 74  on(interp, butPt
3f30: 72 2c 20 61 72 67 63 2d 32 2c 20 61 72 67 76 2b  r, argc-2, argv+
3f40: 32 2c 0a 09 09 20 20 20 20 63 6f 6e 66 69 67 46  2,...    configF
3f50: 6c 61 67 73 5b 62 75 74 50 74 72 2d 3e 74 79 70  lags[butPtr->typ
3f60: 65 5d 20 7c 20 54 4b 5f 43 4f 4e 46 49 47 5f 41  e] | TK_CONFIG_A
3f70: 52 47 56 5f 4f 4e 4c 59 29 3b 0a 09 7d 0a 20 20  RGV_ONLY);..}.  
3f80: 20 20 7d 20 65 6c 73 65 20 69 66 20 28 28 63 20    } else if ((c 
3f90: 3d 3d 20 27 64 27 29 20 26 26 20 28 73 74 72 6e  == 'd') && (strn
3fa0: 63 6d 70 28 61 72 67 76 5b 31 5d 2c 20 22 64 65  cmp(argv[1], "de
3fb0: 73 65 6c 65 63 74 22 2c 20 6c 65 6e 67 74 68 29  select", length)
3fc0: 20 3d 3d 20 30 29 0a 09 20 20 20 20 26 26 20 28   == 0)..    && (
3fd0: 62 75 74 50 74 72 2d 3e 74 79 70 65 20 3e 3d 20  butPtr->type >= 
3fe0: 54 59 50 45 5f 43 48 45 43 4b 5f 42 55 54 54 4f  TYPE_CHECK_BUTTO
3ff0: 4e 29 29 20 7b 0a 09 69 66 20 28 61 72 67 63 20  N)) {..if (argc 
4000: 3e 20 32 29 20 7b 0a 09 20 20 20 20 73 70 72 69  > 2) {..    spri
4010: 6e 74 66 28 65 72 72 6f 72 5f 62 75 66 66 65 72  ntf(error_buffer
4020: 2c 0a 09 09 20 20 20 20 22 77 72 6f 6e 67 20 23  ,...    "wrong #
4030: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
4040: 20 5c 22 25 2e 35 30 73 20 64 65 73 65 6c 65 63   \"%.50s deselec
4050: 74 5c 22 22 2c 0a 09 09 20 20 20 20 61 72 67 76  t\"",...    argv
4060: 5b 30 5d 29 3b 0a 09 20 20 20 20 54 63 6c 5f 53  [0]);..    Tcl_S
4070: 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
4080: 20 65 72 72 6f 72 5f 62 75 66 66 65 72 2c 20 54   error_buffer, T
4090: 43 4c 5f 56 4f 4c 41 54 49 4c 45 29 3b 0a 09 20  CL_VOLATILE);.. 
40a0: 20 20 20 67 6f 74 6f 20 65 72 72 6f 72 3b 0a 09     goto error;..
40b0: 7d 0a 09 69 66 20 28 62 75 74 50 74 72 2d 3e 74  }..if (butPtr->t
40c0: 79 70 65 20 3d 3d 20 54 59 50 45 5f 43 48 45 43  ype == TYPE_CHEC
40d0: 4b 5f 42 55 54 54 4f 4e 29 20 7b 0a 09 20 20 20  K_BUTTON) {..   
40e0: 20 69 66 20 28 54 63 6c 5f 53 65 74 56 61 72 28   if (Tcl_SetVar(
40f0: 69 6e 74 65 72 70 2c 20 62 75 74 50 74 72 2d 3e  interp, butPtr->
4100: 73 65 6c 56 61 72 4e 61 6d 65 2c 20 62 75 74 50  selVarName, butP
4110: 74 72 2d 3e 6f 66 66 56 61 6c 75 65 2c 0a 09 09  tr->offValue,...
4120: 20 20 20 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f      TCL_GLOBAL_O
4130: 4e 4c 59 7c 54 43 4c 5f 4c 45 41 56 45 5f 45 52  NLY|TCL_LEAVE_ER
4140: 52 5f 4d 53 47 29 20 3d 3d 20 4e 55 4c 4c 29 20  R_MSG) == NULL) 
4150: 7b 0a 09 09 72 65 73 75 6c 74 20 3d 20 54 43 4c  {...result = TCL
4160: 5f 45 52 52 4f 52 3b 0a 09 20 20 20 20 7d 0a 09  _ERROR;..    }..
4170: 7d 20 65 6c 73 65 20 69 66 20 28 62 75 74 50 74  } else if (butPt
4180: 72 2d 3e 66 6c 61 67 73 20 26 20 53 45 4c 45 43  r->flags & SELEC
4190: 54 45 44 29 20 7b 0a 09 20 20 20 20 69 66 20 28  TED) {..    if (
41a0: 54 63 6c 5f 53 65 74 56 61 72 28 69 6e 74 65 72  Tcl_SetVar(inter
41b0: 70 2c 20 62 75 74 50 74 72 2d 3e 73 65 6c 56 61  p, butPtr->selVa
41c0: 72 4e 61 6d 65 2c 20 22 22 2c 0a 09 09 20 20 20  rName, "",...   
41d0: 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
41e0: 7c 54 43 4c 5f 4c 45 41 56 45 5f 45 52 52 5f 4d  |TCL_LEAVE_ERR_M
41f0: 53 47 29 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09  SG) == NULL) {..
4200: 09 72 65 73 75 6c 74 20 3d 20 54 43 4c 5f 45 52  .result = TCL_ER
4210: 52 4f 52 3b 0a 09 20 20 20 20 7d 3b 0a 09 7d 0a  ROR;..    };..}.
4220: 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 28      } else if ((
4230: 63 20 3d 3d 20 27 66 27 29 20 26 26 20 28 73 74  c == 'f') && (st
4240: 72 6e 63 6d 70 28 61 72 67 76 5b 31 5d 2c 20 22  rncmp(argv[1], "
4250: 66 6c 61 73 68 22 2c 20 6c 65 6e 67 74 68 29 20  flash", length) 
4260: 3d 3d 20 30 29 0a 09 20 20 20 20 26 26 20 28 62  == 0)..    && (b
4270: 75 74 50 74 72 2d 3e 74 79 70 65 20 21 3d 20 54  utPtr->type != T
4280: 59 50 45 5f 4c 41 42 45 4c 29 29 20 7b 0a 09 69  YPE_LABEL)) {..i
4290: 6e 74 20 69 3b 0a 0a 09 69 66 20 28 61 72 67 63  nt i;...if (argc
42a0: 20 3e 20 32 29 20 7b 0a 09 20 20 20 20 73 70 72   > 2) {..    spr
42b0: 69 6e 74 66 28 65 72 72 6f 72 5f 62 75 66 66 65  intf(error_buffe
42c0: 72 2c 0a 09 09 20 20 20 20 22 77 72 6f 6e 67 20  r,...    "wrong 
42d0: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
42e0: 65 20 5c 22 25 2e 35 30 73 20 66 6c 61 73 68 5c  e \"%.50s flash\
42f0: 22 22 2c 0a 09 09 20 20 20 20 61 72 67 76 5b 30  "",...    argv[0
4300: 5d 29 3b 0a 09 20 20 20 20 54 63 6c 5f 53 65 74  ]);..    Tcl_Set
4310: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 65  Result(interp, e
4320: 72 72 6f 72 5f 62 75 66 66 65 72 2c 20 54 43 4c  rror_buffer, TCL
4330: 5f 56 4f 4c 41 54 49 4c 45 29 3b 0a 09 20 20 20  _VOLATILE);..   
4340: 20 67 6f 74 6f 20 65 72 72 6f 72 3b 0a 09 7d 0a   goto error;..}.
4350: 09 69 66 20 28 62 75 74 50 74 72 2d 3e 73 74 61  .if (butPtr->sta
4360: 74 65 20 21 3d 20 74 6b 44 69 73 61 62 6c 65 64  te != tkDisabled
4370: 55 69 64 29 20 7b 0a 09 20 20 20 20 66 6f 72 20  Uid) {..    for 
4380: 28 69 20 3d 20 30 3b 20 69 20 3c 20 34 3b 20 69  (i = 0; i < 4; i
4390: 2b 2b 29 20 7b 0a 09 09 62 75 74 50 74 72 2d 3e  ++) {...butPtr->
43a0: 73 74 61 74 65 20 3d 20 28 62 75 74 50 74 72 2d  state = (butPtr-
43b0: 3e 73 74 61 74 65 20 3d 3d 20 74 6b 4e 6f 72 6d  >state == tkNorm
43c0: 61 6c 55 69 64 29 0a 09 09 09 3f 20 74 6b 41 63  alUid)....? tkAc
43d0: 74 69 76 65 55 69 64 20 3a 20 74 6b 4e 6f 72 6d  tiveUid : tkNorm
43e0: 61 6c 55 69 64 3b 0a 09 09 44 69 73 70 6c 61 79  alUid;...Display
43f0: 42 75 74 74 6f 6e 28 28 43 6c 69 65 6e 74 44 61  Button((ClientDa
4400: 74 61 29 20 62 75 74 50 74 72 29 3b 0a 0a 09 09  ta) butPtr);....
4410: 2f 2a 0a 09 09 20 2a 20 53 70 65 63 69 61 6c 20  /*... * Special 
4420: 6e 6f 74 65 3a 20 20 6d 75 73 74 20 63 61 6e 63  note:  must canc
4430: 65 6c 20 61 6e 79 20 65 78 69 73 74 69 6e 67 20  el any existing 
4440: 69 64 6c 65 20 68 61 6e 64 6c 65 72 0a 09 09 20  idle handler... 
4450: 2a 20 66 6f 72 20 44 69 73 70 6c 61 79 42 75 74  * for DisplayBut
4460: 74 6f 6e 3b 20 20 69 74 27 73 20 6e 6f 20 6c 6f  ton;  it's no lo
4470: 6e 67 65 72 20 6e 65 65 64 65 64 2c 20 61 6e 64  nger needed, and
4480: 20 44 69 73 70 6c 61 79 42 75 74 74 6f 6e 0a 09   DisplayButton..
4490: 09 20 2a 20 63 6c 65 61 72 65 64 20 74 68 65 20  . * cleared the 
44a0: 52 45 44 52 41 57 5f 50 45 4e 44 49 4e 47 20 66  REDRAW_PENDING f
44b0: 6c 61 67 2e 0a 09 09 20 2a 2f 0a 0a 09 09 54 63  lag.... */....Tc
44c0: 6c 5f 43 61 6e 63 65 6c 49 64 6c 65 43 61 6c 6c  l_CancelIdleCall
44d0: 28 44 69 73 70 6c 61 79 42 75 74 74 6f 6e 2c 20  (DisplayButton, 
44e0: 28 43 6c 69 65 6e 74 44 61 74 61 29 20 62 75 74  (ClientData) but
44f0: 50 74 72 29 3b 0a 09 09 43 74 6b 5f 44 69 73 70  Ptr);...Ctk_Disp
4500: 6c 61 79 46 6c 75 73 68 28 54 6b 5f 44 69 73 70  layFlush(Tk_Disp
4510: 6c 61 79 28 62 75 74 50 74 72 2d 3e 74 6b 77 69  lay(butPtr->tkwi
4520: 6e 29 29 3b 0a 09 09 54 63 6c 5f 53 6c 65 65 70  n));...Tcl_Sleep
4530: 28 35 30 29 3b 0a 09 20 20 20 20 7d 0a 09 7d 0a  (50);..    }..}.
4540: 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 28      } else if ((
4550: 63 20 3d 3d 20 27 69 27 29 20 26 26 20 28 73 74  c == 'i') && (st
4560: 72 6e 63 6d 70 28 61 72 67 76 5b 31 5d 2c 20 22  rncmp(argv[1], "
4570: 69 6e 76 6f 6b 65 22 2c 20 6c 65 6e 67 74 68 29  invoke", length)
4580: 20 3d 3d 20 30 29 0a 09 20 20 20 20 26 26 20 28   == 0)..    && (
4590: 62 75 74 50 74 72 2d 3e 74 79 70 65 20 3e 20 54  butPtr->type > T
45a0: 59 50 45 5f 4c 41 42 45 4c 29 29 20 7b 0a 09 69  YPE_LABEL)) {..i
45b0: 66 20 28 61 72 67 63 20 3e 20 32 29 20 7b 0a 09  f (argc > 2) {..
45c0: 20 20 20 20 73 70 72 69 6e 74 66 28 65 72 72 6f      sprintf(erro
45d0: 72 5f 62 75 66 66 65 72 2c 0a 09 09 20 20 20 20  r_buffer,...    
45e0: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
45f0: 68 6f 75 6c 64 20 62 65 20 5c 22 25 2e 35 30 73  hould be \"%.50s
4600: 20 69 6e 76 6f 6b 65 5c 22 22 2c 0a 09 09 20 20   invoke\"",...  
4610: 20 20 61 72 67 76 5b 30 5d 29 3b 0a 09 20 20 20    argv[0]);..   
4620: 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69   Tcl_SetResult(i
4630: 6e 74 65 72 70 2c 20 65 72 72 6f 72 5f 62 75 66  nterp, error_buf
4640: 66 65 72 2c 20 54 43 4c 5f 56 4f 4c 41 54 49 4c  fer, TCL_VOLATIL
4650: 45 29 3b 0a 09 20 20 20 20 67 6f 74 6f 20 65 72  E);..    goto er
4660: 72 6f 72 3b 0a 09 7d 0a 09 69 66 20 28 62 75 74  ror;..}..if (but
4670: 50 74 72 2d 3e 73 74 61 74 65 20 21 3d 20 74 6b  Ptr->state != tk
4680: 44 69 73 61 62 6c 65 64 55 69 64 29 20 7b 0a 09  DisabledUid) {..
4690: 20 20 20 20 72 65 73 75 6c 74 20 3d 20 49 6e 76      result = Inv
46a0: 6f 6b 65 42 75 74 74 6f 6e 28 62 75 74 50 74 72  okeButton(butPtr
46b0: 29 3b 0a 09 7d 0a 20 20 20 20 7d 20 65 6c 73 65  );..}.    } else
46c0: 20 69 66 20 28 28 63 20 3d 3d 20 27 73 27 29 20   if ((c == 's') 
46d0: 26 26 20 28 73 74 72 6e 63 6d 70 28 61 72 67 76  && (strncmp(argv
46e0: 5b 31 5d 2c 20 22 73 65 6c 65 63 74 22 2c 20 6c  [1], "select", l
46f0: 65 6e 67 74 68 29 20 3d 3d 20 30 29 0a 09 20 20  ength) == 0)..  
4700: 20 20 26 26 20 28 62 75 74 50 74 72 2d 3e 74 79    && (butPtr->ty
4710: 70 65 20 3e 3d 20 54 59 50 45 5f 43 48 45 43 4b  pe >= TYPE_CHECK
4720: 5f 42 55 54 54 4f 4e 29 29 20 7b 0a 09 69 66 20  _BUTTON)) {..if 
4730: 28 61 72 67 63 20 3e 20 32 29 20 7b 0a 09 20 20  (argc > 2) {..  
4740: 20 20 73 70 72 69 6e 74 66 28 65 72 72 6f 72 5f    sprintf(error_
4750: 62 75 66 66 65 72 2c 0a 09 09 20 20 20 20 22 77  buffer,...    "w
4760: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
4770: 75 6c 64 20 62 65 20 5c 22 25 2e 35 30 73 20 73  uld be \"%.50s s
4780: 65 6c 65 63 74 5c 22 22 2c 0a 09 09 20 20 20 20  elect\"",...    
4790: 61 72 67 76 5b 30 5d 29 3b 0a 09 20 20 20 20 54  argv[0]);..    T
47a0: 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74  cl_SetResult(int
47b0: 65 72 70 2c 20 65 72 72 6f 72 5f 62 75 66 66 65  erp, error_buffe
47c0: 72 2c 20 54 43 4c 5f 56 4f 4c 41 54 49 4c 45 29  r, TCL_VOLATILE)
47d0: 3b 0a 09 20 20 20 20 67 6f 74 6f 20 65 72 72 6f  ;..    goto erro
47e0: 72 3b 0a 09 7d 0a 09 69 66 20 28 54 63 6c 5f 53  r;..}..if (Tcl_S
47f0: 65 74 56 61 72 28 69 6e 74 65 72 70 2c 20 62 75  etVar(interp, bu
4800: 74 50 74 72 2d 3e 73 65 6c 56 61 72 4e 61 6d 65  tPtr->selVarName
4810: 2c 20 62 75 74 50 74 72 2d 3e 6f 6e 56 61 6c 75  , butPtr->onValu
4820: 65 2c 0a 09 09 54 43 4c 5f 47 4c 4f 42 41 4c 5f  e,...TCL_GLOBAL_
4830: 4f 4e 4c 59 7c 54 43 4c 5f 4c 45 41 56 45 5f 45  ONLY|TCL_LEAVE_E
4840: 52 52 5f 4d 53 47 29 20 3d 3d 20 4e 55 4c 4c 29  RR_MSG) == NULL)
4850: 20 7b 0a 09 20 20 20 20 72 65 73 75 6c 74 20 3d   {..    result =
4860: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 09 7d 0a 20   TCL_ERROR;..}. 
4870: 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 28 63     } else if ((c
4880: 20 3d 3d 20 27 74 27 29 20 26 26 20 28 73 74 72   == 't') && (str
4890: 6e 63 6d 70 28 61 72 67 76 5b 31 5d 2c 20 22 74  ncmp(argv[1], "t
48a0: 6f 67 67 6c 65 22 2c 20 6c 65 6e 67 74 68 29 20  oggle", length) 
48b0: 3d 3d 20 30 29 0a 09 20 20 20 20 26 26 20 28 6c  == 0)..    && (l
48c0: 65 6e 67 74 68 20 3e 3d 20 32 29 20 26 26 20 28  ength >= 2) && (
48d0: 62 75 74 50 74 72 2d 3e 74 79 70 65 20 3d 3d 20  butPtr->type == 
48e0: 54 59 50 45 5f 43 48 45 43 4b 5f 42 55 54 54 4f  TYPE_CHECK_BUTTO
48f0: 4e 29 29 20 7b 0a 09 69 66 20 28 61 72 67 63 20  N)) {..if (argc 
4900: 3e 20 32 29 20 7b 0a 09 20 20 20 20 73 70 72 69  > 2) {..    spri
4910: 6e 74 66 28 65 72 72 6f 72 5f 62 75 66 66 65 72  ntf(error_buffer
4920: 2c 0a 09 09 20 20 20 20 22 77 72 6f 6e 67 20 23  ,...    "wrong #
4930: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
4940: 20 5c 22 25 2e 35 30 73 20 74 6f 67 67 6c 65 5c   \"%.50s toggle\
4950: 22 22 2c 0a 09 09 20 20 20 20 61 72 67 76 5b 30  "",...    argv[0
4960: 5d 29 3b 0a 09 20 20 20 20 54 63 6c 5f 53 65 74  ]);..    Tcl_Set
4970: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 65  Result(interp, e
4980: 72 72 6f 72 5f 62 75 66 66 65 72 2c 20 54 43 4c  rror_buffer, TCL
4990: 5f 56 4f 4c 41 54 49 4c 45 29 3b 0a 09 20 20 20  _VOLATILE);..   
49a0: 20 67 6f 74 6f 20 65 72 72 6f 72 3b 0a 09 7d 0a   goto error;..}.
49b0: 09 69 66 20 28 62 75 74 50 74 72 2d 3e 66 6c 61  .if (butPtr->fla
49c0: 67 73 20 26 20 53 45 4c 45 43 54 45 44 29 20 7b  gs & SELECTED) {
49d0: 0a 09 20 20 20 20 69 66 20 28 54 63 6c 5f 53 65  ..    if (Tcl_Se
49e0: 74 56 61 72 28 69 6e 74 65 72 70 2c 20 62 75 74  tVar(interp, but
49f0: 50 74 72 2d 3e 73 65 6c 56 61 72 4e 61 6d 65 2c  Ptr->selVarName,
4a00: 20 62 75 74 50 74 72 2d 3e 6f 66 66 56 61 6c 75   butPtr->offValu
4a10: 65 2c 0a 09 09 20 20 20 20 54 43 4c 5f 47 4c 4f  e,...    TCL_GLO
4a20: 42 41 4c 5f 4f 4e 4c 59 29 20 3d 3d 20 4e 55 4c  BAL_ONLY) == NUL
4a30: 4c 29 20 7b 0a 09 09 72 65 73 75 6c 74 20 3d 20  L) {...result = 
4a40: 54 43 4c 5f 45 52 52 4f 52 3b 0a 09 20 20 20 20  TCL_ERROR;..    
4a50: 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20  }..} else {..   
4a60: 20 69 66 20 28 54 63 6c 5f 53 65 74 56 61 72 28   if (Tcl_SetVar(
4a70: 69 6e 74 65 72 70 2c 20 62 75 74 50 74 72 2d 3e  interp, butPtr->
4a80: 73 65 6c 56 61 72 4e 61 6d 65 2c 20 62 75 74 50  selVarName, butP
4a90: 74 72 2d 3e 6f 6e 56 61 6c 75 65 2c 0a 09 09 20  tr->onValue,... 
4aa0: 20 20 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e     TCL_GLOBAL_ON
4ab0: 4c 59 29 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09  LY) == NULL) {..
4ac0: 09 72 65 73 75 6c 74 20 3d 20 54 43 4c 5f 45 52  .result = TCL_ER
4ad0: 52 4f 52 3b 0a 09 20 20 20 20 7d 0a 09 7d 0a 20  ROR;..    }..}. 
4ae0: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 73 70 72     } else {..spr
4af0: 69 6e 74 66 28 65 72 72 6f 72 5f 62 75 66 66 65  intf(error_buffe
4b00: 72 2c 0a 09 09 22 62 61 64 20 6f 70 74 69 6f 6e  r,..."bad option
4b10: 20 5c 22 25 2e 35 30 73 5c 22 3a 20 20 6d 75 73   \"%.50s\":  mus
4b20: 74 20 62 65 20 25 73 22 2c 20 61 72 67 76 5b 31  t be %s", argv[1
4b30: 5d 2c 0a 09 09 6f 70 74 69 6f 6e 53 74 72 69 6e  ],...optionStrin
4b40: 67 73 5b 62 75 74 50 74 72 2d 3e 74 79 70 65 5d  gs[butPtr->type]
4b50: 29 3b 0a 09 54 63 6c 5f 53 65 74 52 65 73 75 6c  );..Tcl_SetResul
4b60: 74 28 69 6e 74 65 72 70 2c 20 65 72 72 6f 72 5f  t(interp, error_
4b70: 62 75 66 66 65 72 2c 20 54 43 4c 5f 56 4f 4c 41  buffer, TCL_VOLA
4b80: 54 49 4c 45 29 3b 0a 09 67 6f 74 6f 20 65 72 72  TILE);..goto err
4b90: 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 54 6b  or;.    }.    Tk
4ba0: 5f 52 65 6c 65 61 73 65 28 28 43 6c 69 65 6e 74  _Release((Client
4bb0: 44 61 74 61 29 20 62 75 74 50 74 72 29 3b 0a 20  Data) butPtr);. 
4bc0: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
4bd0: 3b 0a 0a 20 20 20 20 65 72 72 6f 72 3a 0a 20 20  ;..    error:.  
4be0: 20 20 54 6b 5f 52 65 6c 65 61 73 65 28 28 43 6c    Tk_Release((Cl
4bf0: 69 65 6e 74 44 61 74 61 29 20 62 75 74 50 74 72  ientData) butPtr
4c00: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
4c10: 4c 5f 45 52 52 4f 52 3b 0a 7d 0a 0c 0a 2f 2a 0a  L_ERROR;.}.../*.
4c20: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   *--------------
4c30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4c40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4c50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4c60: 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 44  --------. *. * D
4c70: 65 73 74 72 6f 79 42 75 74 74 6f 6e 20 2d 2d 0a  estroyButton --.
4c80: 20 2a 0a 20 2a 09 54 68 69 73 20 70 72 6f 63 65   *. *.This proce
4c90: 64 75 72 65 20 69 73 20 69 6e 76 6f 6b 65 64 20  dure is invoked 
4ca0: 62 79 20 54 6b 5f 45 76 65 6e 74 75 61 6c 6c 79  by Tk_Eventually
4cb0: 46 72 65 65 20 6f 72 20 54 6b 5f 52 65 6c 65 61  Free or Tk_Relea
4cc0: 73 65 0a 20 2a 09 74 6f 20 63 6c 65 61 6e 20 75  se. *.to clean u
4cd0: 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 73  p the internal s
4ce0: 74 72 75 63 74 75 72 65 20 6f 66 20 61 20 62 75  tructure of a bu
4cf0: 74 74 6f 6e 20 61 74 20 61 20 73 61 66 65 20 74  tton at a safe t
4d00: 69 6d 65 0a 20 2a 09 28 77 68 65 6e 20 6e 6f 2d  ime. *.(when no-
4d10: 6f 6e 65 20 69 73 20 75 73 69 6e 67 20 69 74 20  one is using it 
4d20: 61 6e 79 6d 6f 72 65 29 2e 0a 20 2a 0a 20 2a 20  anymore).. *. * 
4d30: 52 65 73 75 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65  Results:. *.None
4d40: 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20 65 66 66  .. *. * Side eff
4d50: 65 63 74 73 3a 0a 20 2a 09 45 76 65 72 79 74 68  ects:. *.Everyth
4d60: 69 6e 67 20 61 73 73 6f 63 69 61 74 65 64 20 77  ing associated w
4d70: 69 74 68 20 74 68 65 20 77 69 64 67 65 74 20 69  ith the widget i
4d80: 73 20 66 72 65 65 64 20 75 70 2e 0a 20 2a 0a 20  s freed up.. *. 
4d90: 2a 2d 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 0a 20 2a 2f 0a 0a 73 74 61  -------. */..sta
4de0: 74 69 63 20 76 6f 69 64 0a 44 65 73 74 72 6f 79  tic void.Destroy
4df0: 42 75 74 74 6f 6e 28 63 6c 69 65 6e 74 44 61 74  Button(clientDat
4e00: 61 29 0a 20 20 20 20 43 6c 69 65 6e 74 44 61 74  a).    ClientDat
4e10: 61 20 63 6c 69 65 6e 74 44 61 74 61 3b 09 09 2f  a clientData;../
4e20: 2a 20 49 6e 66 6f 20 61 62 6f 75 74 20 65 6e 74  * Info about ent
4e30: 72 79 20 77 69 64 67 65 74 2e 20 2a 2f 0a 7b 0a  ry widget. */.{.
4e40: 20 20 20 20 72 65 67 69 73 74 65 72 20 42 75 74      register But
4e50: 74 6f 6e 20 2a 62 75 74 50 74 72 20 3d 20 28 42  ton *butPtr = (B
4e60: 75 74 74 6f 6e 20 2a 29 20 63 6c 69 65 6e 74 44  utton *) clientD
4e70: 61 74 61 3b 0a 0a 20 20 20 20 2f 2a 0a 20 20 20  ata;..    /*.   
4e80: 20 20 2a 20 46 72 65 65 20 75 70 20 61 6c 6c 20    * Free up all 
4e90: 74 68 65 20 73 74 75 66 66 20 74 68 61 74 20 72  the stuff that r
4ea0: 65 71 75 69 72 65 73 20 73 70 65 63 69 61 6c 20  equires special 
4eb0: 68 61 6e 64 6c 69 6e 67 2c 20 74 68 65 6e 0a 20  handling, then. 
4ec0: 20 20 20 20 2a 20 6c 65 74 20 54 6b 5f 46 72 65      * let Tk_Fre
4ed0: 65 4f 70 74 69 6f 6e 73 20 68 61 6e 64 6c 65 20  eOptions handle 
4ee0: 61 6c 6c 20 74 68 65 20 73 74 61 6e 64 61 72 64  all the standard
4ef0: 20 6f 70 74 69 6f 6e 2d 72 65 6c 61 74 65 64 0a   option-related.
4f00: 20 20 20 20 20 2a 20 73 74 75 66 66 2e 0a 20 20       * stuff..  
4f10: 20 20 20 2a 2f 0a 0a 20 20 20 20 69 66 20 28 62     */..    if (b
4f20: 75 74 50 74 72 2d 3e 74 65 78 74 56 61 72 4e 61  utPtr->textVarNa
4f30: 6d 65 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 54  me != NULL) {..T
4f40: 63 6c 5f 55 6e 74 72 61 63 65 56 61 72 28 62 75  cl_UntraceVar(bu
4f50: 74 50 74 72 2d 3e 69 6e 74 65 72 70 2c 20 62 75  tPtr->interp, bu
4f60: 74 50 74 72 2d 3e 74 65 78 74 56 61 72 4e 61 6d  tPtr->textVarNam
4f70: 65 2c 0a 09 09 54 43 4c 5f 47 4c 4f 42 41 4c 5f  e,...TCL_GLOBAL_
4f80: 4f 4e 4c 59 7c 54 43 4c 5f 54 52 41 43 45 5f 57  ONLY|TCL_TRACE_W
4f90: 52 49 54 45 53 7c 54 43 4c 5f 54 52 41 43 45 5f  RITES|TCL_TRACE_
4fa0: 55 4e 53 45 54 53 2c 0a 09 09 42 75 74 74 6f 6e  UNSETS,...Button
4fb0: 54 65 78 74 56 61 72 50 72 6f 63 2c 20 28 43 6c  TextVarProc, (Cl
4fc0: 69 65 6e 74 44 61 74 61 29 20 62 75 74 50 74 72  ientData) butPtr
4fd0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20  );.    }.    if 
4fe0: 28 62 75 74 50 74 72 2d 3e 73 65 6c 56 61 72 4e  (butPtr->selVarN
4ff0: 61 6d 65 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09  ame != NULL) {..
5000: 54 63 6c 5f 55 6e 74 72 61 63 65 56 61 72 28 62  Tcl_UntraceVar(b
5010: 75 74 50 74 72 2d 3e 69 6e 74 65 72 70 2c 20 62  utPtr->interp, b
5020: 75 74 50 74 72 2d 3e 73 65 6c 56 61 72 4e 61 6d  utPtr->selVarNam
5030: 65 2c 0a 09 09 54 43 4c 5f 47 4c 4f 42 41 4c 5f  e,...TCL_GLOBAL_
5040: 4f 4e 4c 59 7c 54 43 4c 5f 54 52 41 43 45 5f 57  ONLY|TCL_TRACE_W
5050: 52 49 54 45 53 7c 54 43 4c 5f 54 52 41 43 45 5f  RITES|TCL_TRACE_
5060: 55 4e 53 45 54 53 2c 0a 09 09 42 75 74 74 6f 6e  UNSETS,...Button
5070: 56 61 72 50 72 6f 63 2c 20 28 43 6c 69 65 6e 74  VarProc, (Client
5080: 44 61 74 61 29 20 62 75 74 50 74 72 29 3b 0a 20  Data) butPtr);. 
5090: 20 20 20 7d 0a 20 20 20 20 54 6b 5f 46 72 65 65     }.    Tk_Free
50a0: 4f 70 74 69 6f 6e 73 28 63 6f 6e 66 69 67 53 70  Options(configSp
50b0: 65 63 73 2c 20 28 63 68 61 72 20 2a 29 20 62 75  ecs, (char *) bu
50c0: 74 50 74 72 2c 20 63 6f 6e 66 69 67 46 6c 61 67  tPtr, configFlag
50d0: 73 5b 62 75 74 50 74 72 2d 3e 74 79 70 65 5d 29  s[butPtr->type])
50e0: 3b 0a 20 20 20 20 63 6b 66 72 65 65 28 28 63 68  ;.    ckfree((ch
50f0: 61 72 20 2a 29 20 62 75 74 50 74 72 29 3b 0a 7d  ar *) butPtr);.}
5100: 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d  .../*. *--------
5110: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5120: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5130: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5140: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
5150: 2a 0a 20 2a 20 43 6f 6e 66 69 67 75 72 65 42 75  *. * ConfigureBu
5160: 74 74 6f 6e 20 2d 2d 0a 20 2a 0a 20 2a 09 54 68  tton --. *. *.Th
5170: 69 73 20 70 72 6f 63 65 64 75 72 65 20 69 73 20  is procedure is 
5180: 63 61 6c 6c 65 64 20 74 6f 20 70 72 6f 63 65 73  called to proces
5190: 73 20 61 6e 20 61 72 67 76 2f 61 72 67 63 20 6c  s an argv/argc l
51a0: 69 73 74 2c 20 70 6c 75 73 0a 20 2a 09 74 68 65  ist, plus. *.the
51b0: 20 54 6b 20 6f 70 74 69 6f 6e 20 64 61 74 61 62   Tk option datab
51c0: 61 73 65 2c 20 69 6e 20 6f 72 64 65 72 20 74 6f  ase, in order to
51d0: 20 63 6f 6e 66 69 67 75 72 65 20 28 6f 72 0a 20   configure (or. 
51e0: 2a 09 72 65 63 6f 6e 66 69 67 75 72 65 29 20 61  *.reconfigure) a
51f0: 20 62 75 74 74 6f 6e 20 77 69 64 67 65 74 2e 0a   button widget..
5200: 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20   *. * Results:. 
5210: 2a 09 54 68 65 20 72 65 74 75 72 6e 20 76 61 6c  *.The return val
5220: 75 65 20 69 73 20 61 20 73 74 61 6e 64 61 72 64  ue is a standard
5230: 20 54 63 6c 20 72 65 73 75 6c 74 2e 20 20 49 66   Tcl result.  If
5240: 20 54 43 4c 5f 45 52 52 4f 52 20 69 73 0a 20 2a   TCL_ERROR is. *
5250: 09 72 65 74 75 72 6e 65 64 2c 20 74 68 65 6e 20  .returned, then 
5260: 69 6e 74 65 72 70 2d 3e 72 65 73 75 6c 74 20 63  interp->result c
5270: 6f 6e 74 61 69 6e 73 20 61 6e 20 65 72 72 6f 72  ontains an error
5280: 20 6d 65 73 73 61 67 65 2e 0a 20 2a 0a 20 2a 20   message.. *. * 
5290: 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 20 2a  Side effects:. *
52a0: 09 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69  .Configuration i
52b0: 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 73 75 63 68  nformation, such
52c0: 20 61 73 20 74 65 78 74 20 73 74 72 69 6e 67 2c   as text string,
52d0: 20 63 6f 6c 6f 72 73 2c 20 66 6f 6e 74 2c 0a 20   colors, font,. 
52e0: 2a 09 65 74 63 2e 20 67 65 74 20 73 65 74 20 66  *.etc. get set f
52f0: 6f 72 20 62 75 74 50 74 72 3b 20 20 6f 6c 64 20  or butPtr;  old 
5300: 72 65 73 6f 75 72 63 65 73 20 67 65 74 20 66 72  resources get fr
5310: 65 65 64 2c 20 69 66 20 74 68 65 72 65 0a 20 2a  eed, if there. *
5320: 09 77 65 72 65 20 61 6e 79 2e 20 20 54 68 65 20  .were any.  The 
5330: 62 75 74 74 6f 6e 20 69 73 20 72 65 64 69 73 70  button is redisp
5340: 6c 61 79 65 64 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d  layed.. *. *----
5350: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5360: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5370: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5380: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5390: 2d 2d 0a 20 2a 2f 0a 0a 73 74 61 74 69 63 20 69  --. */..static i
53a0: 6e 74 0a 43 6f 6e 66 69 67 75 72 65 42 75 74 74  nt.ConfigureButt
53b0: 6f 6e 28 69 6e 74 65 72 70 2c 20 62 75 74 50 74  on(interp, butPt
53c0: 72 2c 20 61 72 67 63 2c 20 61 72 67 76 2c 20 66  r, argc, argv, f
53d0: 6c 61 67 73 29 0a 20 20 20 20 54 63 6c 5f 49 6e  lags).    Tcl_In
53e0: 74 65 72 70 20 2a 69 6e 74 65 72 70 3b 09 09 2f  terp *interp;../
53f0: 2a 20 55 73 65 64 20 66 6f 72 20 65 72 72 6f 72  * Used for error
5400: 20 72 65 70 6f 72 74 69 6e 67 2e 20 2a 2f 0a 20   reporting. */. 
5410: 20 20 20 72 65 67 69 73 74 65 72 20 42 75 74 74     register Butt
5420: 6f 6e 20 2a 62 75 74 50 74 72 3b 09 2f 2a 20 49  on *butPtr;./* I
5430: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
5440: 20 77 69 64 67 65 74 3b 20 20 6d 61 79 20 6f 72   widget;  may or
5450: 20 6d 61 79 0a 09 09 09 09 20 2a 20 6e 6f 74 20   may..... * not 
5460: 61 6c 72 65 61 64 79 20 68 61 76 65 20 76 61 6c  already have val
5470: 75 65 73 20 66 6f 72 20 73 6f 6d 65 20 66 69 65  ues for some fie
5480: 6c 64 73 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  lds. */.    int 
5490: 61 72 67 63 3b 09 09 09 2f 2a 20 4e 75 6d 62 65  argc;.../* Numbe
54a0: 72 20 6f 66 20 76 61 6c 69 64 20 65 6e 74 72 69  r of valid entri
54b0: 65 73 20 69 6e 20 61 72 67 76 2e 20 2a 2f 0a 20  es in argv. */. 
54c0: 20 20 20 63 68 61 72 20 2a 2a 61 72 67 76 3b 09     char **argv;.
54d0: 09 2f 2a 20 41 72 67 75 6d 65 6e 74 73 2e 20 2a  ./* Arguments. *
54e0: 2f 0a 20 20 20 20 69 6e 74 20 66 6c 61 67 73 3b  /.    int flags;
54f0: 09 09 09 2f 2a 20 46 6c 61 67 73 20 74 6f 20 70  .../* Flags to p
5500: 61 73 73 20 74 6f 20 54 6b 5f 43 6f 6e 66 69 67  ass to Tk_Config
5510: 75 72 65 57 69 64 67 65 74 2e 20 2a 2f 0a 7b 0a  ureWidget. */.{.
5520: 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20 45 6c      /*.     * El
5530: 69 6d 69 6e 61 74 65 20 61 6e 79 20 65 78 69 73  iminate any exis
5540: 74 69 6e 67 20 74 72 61 63 65 20 6f 6e 20 76 61  ting trace on va
5550: 72 69 61 62 6c 65 73 20 6d 6f 6e 69 74 6f 72 65  riables monitore
5560: 64 20 62 79 20 74 68 65 20 62 75 74 74 6f 6e 2e  d by the button.
5570: 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 69 66  .     */..    if
5580: 20 28 62 75 74 50 74 72 2d 3e 74 65 78 74 56 61   (butPtr->textVa
5590: 72 4e 61 6d 65 20 21 3d 20 4e 55 4c 4c 29 20 7b  rName != NULL) {
55a0: 0a 09 54 63 6c 5f 55 6e 74 72 61 63 65 56 61 72  ..Tcl_UntraceVar
55b0: 28 69 6e 74 65 72 70 2c 20 62 75 74 50 74 72 2d  (interp, butPtr-
55c0: 3e 74 65 78 74 56 61 72 4e 61 6d 65 2c 20 0a 09  >textVarName, ..
55d0: 09 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59  .TCL_GLOBAL_ONLY
55e0: 7c 54 43 4c 5f 54 52 41 43 45 5f 57 52 49 54 45  |TCL_TRACE_WRITE
55f0: 53 7c 54 43 4c 5f 54 52 41 43 45 5f 55 4e 53 45  S|TCL_TRACE_UNSE
5600: 54 53 2c 0a 09 09 42 75 74 74 6f 6e 54 65 78 74  TS,...ButtonText
5610: 56 61 72 50 72 6f 63 2c 20 28 43 6c 69 65 6e 74  VarProc, (Client
5620: 44 61 74 61 29 20 62 75 74 50 74 72 29 3b 0a 20  Data) butPtr);. 
5630: 20 20 20 7d 0a 20 20 20 20 69 66 20 28 62 75 74     }.    if (but
5640: 50 74 72 2d 3e 73 65 6c 56 61 72 4e 61 6d 65 20  Ptr->selVarName 
5650: 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 54 63 6c 5f  != NULL) {..Tcl_
5660: 55 6e 74 72 61 63 65 56 61 72 28 69 6e 74 65 72  UntraceVar(inter
5670: 70 2c 20 62 75 74 50 74 72 2d 3e 73 65 6c 56 61  p, butPtr->selVa
5680: 72 4e 61 6d 65 2c 20 0a 09 09 54 43 4c 5f 47 4c  rName, ...TCL_GL
5690: 4f 42 41 4c 5f 4f 4e 4c 59 7c 54 43 4c 5f 54 52  OBAL_ONLY|TCL_TR
56a0: 41 43 45 5f 57 52 49 54 45 53 7c 54 43 4c 5f 54  ACE_WRITES|TCL_T
56b0: 52 41 43 45 5f 55 4e 53 45 54 53 2c 0a 09 09 42  RACE_UNSETS,...B
56c0: 75 74 74 6f 6e 56 61 72 50 72 6f 63 2c 20 28 43  uttonVarProc, (C
56d0: 6c 69 65 6e 74 44 61 74 61 29 20 62 75 74 50 74  lientData) butPt
56e0: 72 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  r);.    }..    i
56f0: 66 20 28 54 6b 5f 43 6f 6e 66 69 67 75 72 65 57  f (Tk_ConfigureW
5700: 69 64 67 65 74 28 69 6e 74 65 72 70 2c 20 62 75  idget(interp, bu
5710: 74 50 74 72 2d 3e 74 6b 77 69 6e 2c 20 63 6f 6e  tPtr->tkwin, con
5720: 66 69 67 53 70 65 63 73 2c 0a 09 20 20 20 20 61  figSpecs,..    a
5730: 72 67 63 2c 20 61 72 67 76 2c 20 28 63 68 61 72  rgc, argv, (char
5740: 20 2a 29 20 62 75 74 50 74 72 2c 20 66 6c 61 67   *) butPtr, flag
5750: 73 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a  s) != TCL_OK) {.
5760: 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f  .return TCL_ERRO
5770: 52 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a  R;.    }..    /*
5780: 0a 20 20 20 20 20 2a 20 41 20 66 65 77 20 6f 70  .     * A few op
5790: 74 69 6f 6e 73 20 6e 65 65 64 20 73 70 65 63 69  tions need speci
57a0: 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 2c 20 73  al processing, s
57b0: 75 63 68 20 61 73 20 73 65 74 74 69 6e 67 20 74  uch as setting t
57c0: 68 65 0a 20 20 20 20 20 2a 20 62 61 63 6b 67 72  he.     * backgr
57d0: 6f 75 6e 64 20 66 72 6f 6d 20 61 20 33 2d 44 20  ound from a 3-D 
57e0: 62 6f 72 64 65 72 2c 20 6f 72 20 66 69 6c 6c 69  border, or filli
57f0: 6e 67 20 69 6e 20 63 6f 6d 70 6c 69 63 61 74 65  ng in complicate
5800: 64 0a 20 20 20 20 20 2a 20 64 65 66 61 75 6c 74  d.     * default
5810: 73 20 74 68 61 74 20 63 6f 75 6c 64 6e 27 74 20  s that couldn't 
5820: 62 65 20 73 70 65 63 69 66 69 65 64 20 74 6f 20  be specified to 
5830: 54 6b 5f 43 6f 6e 66 69 67 75 72 65 57 69 64 67  Tk_ConfigureWidg
5840: 65 74 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20  et..     */..   
5850: 20 69 66 20 28 28 62 75 74 50 74 72 2d 3e 73 74   if ((butPtr->st
5860: 61 74 65 20 21 3d 20 74 6b 4e 6f 72 6d 61 6c 55  ate != tkNormalU
5870: 69 64 29 20 26 26 20 28 62 75 74 50 74 72 2d 3e  id) && (butPtr->
5880: 73 74 61 74 65 20 21 3d 20 74 6b 41 63 74 69 76  state != tkActiv
5890: 65 55 69 64 29 0a 09 20 20 20 20 26 26 20 28 62  eUid)..    && (b
58a0: 75 74 50 74 72 2d 3e 73 74 61 74 65 20 21 3d 20  utPtr->state != 
58b0: 74 6b 44 69 73 61 62 6c 65 64 55 69 64 29 29 20  tkDisabledUid)) 
58c0: 7b 0a 09 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  {..Tcl_AppendRes
58d0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 62 61 64  ult(interp, "bad
58e0: 20 73 74 61 74 65 20 76 61 6c 75 65 20 5c 22 22   state value \""
58f0: 2c 20 62 75 74 50 74 72 2d 3e 73 74 61 74 65 2c  , butPtr->state,
5900: 0a 09 09 22 5c 22 3a 20 20 6d 75 73 74 20 62 65  ..."\":  must be
5910: 20 6e 6f 72 6d 61 6c 2c 20 61 63 74 69 76 65 2c   normal, active,
5920: 20 6f 72 20 64 69 73 61 62 6c 65 64 22 2c 20 28   or disabled", (
5930: 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09  char *) NULL);..
5940: 62 75 74 50 74 72 2d 3e 73 74 61 74 65 20 3d 20  butPtr->state = 
5950: 74 6b 4e 6f 72 6d 61 6c 55 69 64 3b 0a 09 72 65  tkNormalUid;..re
5960: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
5970: 20 20 20 20 7d 0a 20 20 20 20 69 66 20 28 62 75      }.    if (bu
5980: 74 50 74 72 2d 3e 70 61 64 58 20 3c 20 30 29 20  tPtr->padX < 0) 
5990: 7b 0a 09 62 75 74 50 74 72 2d 3e 70 61 64 58 20  {..butPtr->padX 
59a0: 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  = 0;.    }.    i
59b0: 66 20 28 62 75 74 50 74 72 2d 3e 70 61 64 59 20  f (butPtr->padY 
59c0: 3c 20 30 29 20 7b 0a 09 62 75 74 50 74 72 2d 3e  < 0) {..butPtr->
59d0: 70 61 64 59 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  padY = 0;.    }.
59e0: 0a 20 20 20 20 69 66 20 28 62 75 74 50 74 72 2d  .    if (butPtr-
59f0: 3e 74 79 70 65 20 3e 3d 20 54 59 50 45 5f 43 48  >type >= TYPE_CH
5a00: 45 43 4b 5f 42 55 54 54 4f 4e 29 20 7b 0a 09 63  ECK_BUTTON) {..c
5a10: 68 61 72 20 2a 76 61 6c 75 65 3b 0a 0a 09 69 66  har *value;...if
5a20: 20 28 62 75 74 50 74 72 2d 3e 73 65 6c 56 61 72   (butPtr->selVar
5a30: 4e 61 6d 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a  Name == NULL) {.
5a40: 09 20 20 20 20 62 75 74 50 74 72 2d 3e 73 65 6c  .    butPtr->sel
5a50: 56 61 72 4e 61 6d 65 20 3d 20 28 63 68 61 72 20  VarName = (char 
5a60: 2a 29 20 63 6b 61 6c 6c 6f 63 28 28 75 6e 73 69  *) ckalloc((unsi
5a70: 67 6e 65 64 29 0a 09 09 20 20 20 20 28 73 74 72  gned)...    (str
5a80: 6c 65 6e 28 54 6b 5f 4e 61 6d 65 28 62 75 74 50  len(Tk_Name(butP
5a90: 74 72 2d 3e 74 6b 77 69 6e 29 29 20 2b 20 31 29  tr->tkwin)) + 1)
5aa0: 29 3b 0a 09 20 20 20 20 73 74 72 63 70 79 28 62  );..    strcpy(b
5ab0: 75 74 50 74 72 2d 3e 73 65 6c 56 61 72 4e 61 6d  utPtr->selVarNam
5ac0: 65 2c 20 54 6b 5f 4e 61 6d 65 28 62 75 74 50 74  e, Tk_Name(butPt
5ad0: 72 2d 3e 74 6b 77 69 6e 29 29 3b 0a 09 7d 0a 0a  r->tkwin));..}..
5ae0: 09 2f 2a 0a 09 20 2a 20 53 65 6c 65 63 74 20 74  ./*.. * Select t
5af0: 68 65 20 62 75 74 74 6f 6e 20 69 66 20 74 68 65  he button if the
5b00: 20 61 73 73 6f 63 69 61 74 65 64 20 76 61 72 69   associated vari
5b10: 61 62 6c 65 20 68 61 73 20 74 68 65 0a 09 20 2a  able has the.. *
5b20: 20 61 70 70 72 6f 70 72 69 61 74 65 20 76 61 6c   appropriate val
5b30: 75 65 2c 20 69 6e 69 74 69 61 6c 69 7a 65 20 74  ue, initialize t
5b40: 68 65 20 76 61 72 69 61 62 6c 65 20 69 66 20 69  he variable if i
5b50: 74 20 64 6f 65 73 6e 27 74 0a 09 20 2a 20 65 78  t doesn't.. * ex
5b60: 69 73 74 2c 20 74 68 65 6e 20 73 65 74 20 61 20  ist, then set a 
5b70: 74 72 61 63 65 20 6f 6e 20 74 68 65 20 76 61 72  trace on the var
5b80: 69 61 62 6c 65 20 74 6f 20 6d 6f 6e 69 74 6f 72  iable to monitor
5b90: 20 66 75 74 75 72 65 0a 09 20 2a 20 63 68 61 6e   future.. * chan
5ba0: 67 65 73 20 74 6f 20 69 74 73 20 76 61 6c 75 65  ges to its value
5bb0: 2e 0a 09 20 2a 2f 0a 0a 09 76 61 6c 75 65 20 3d  ... */...value =
5bc0: 20 54 63 6c 5f 47 65 74 56 61 72 28 69 6e 74 65   Tcl_GetVar(inte
5bd0: 72 70 2c 20 62 75 74 50 74 72 2d 3e 73 65 6c 56  rp, butPtr->selV
5be0: 61 72 4e 61 6d 65 2c 20 54 43 4c 5f 47 4c 4f 42  arName, TCL_GLOB
5bf0: 41 4c 5f 4f 4e 4c 59 29 3b 0a 09 62 75 74 50 74  AL_ONLY);..butPt
5c00: 72 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 53 45 4c  r->flags &= ~SEL
5c10: 45 43 54 45 44 3b 0a 09 69 66 20 28 76 61 6c 75  ECTED;..if (valu
5c20: 65 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 20 20  e != NULL) {..  
5c30: 20 20 69 66 20 28 73 74 72 63 6d 70 28 76 61 6c    if (strcmp(val
5c40: 75 65 2c 20 62 75 74 50 74 72 2d 3e 6f 6e 56 61  ue, butPtr->onVa
5c50: 6c 75 65 29 20 3d 3d 20 30 29 20 7b 0a 09 09 62  lue) == 0) {...b
5c60: 75 74 50 74 72 2d 3e 66 6c 61 67 73 20 7c 3d 20  utPtr->flags |= 
5c70: 53 45 4c 45 43 54 45 44 3b 0a 09 20 20 20 20 7d  SELECTED;..    }
5c80: 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20  ..} else {..    
5c90: 69 66 20 28 54 63 6c 5f 53 65 74 56 61 72 28 69  if (Tcl_SetVar(i
5ca0: 6e 74 65 72 70 2c 20 62 75 74 50 74 72 2d 3e 73  nterp, butPtr->s
5cb0: 65 6c 56 61 72 4e 61 6d 65 2c 0a 09 09 20 20 20  elVarName,...   
5cc0: 20 28 62 75 74 50 74 72 2d 3e 74 79 70 65 20 3d   (butPtr->type =
5cd0: 3d 20 54 59 50 45 5f 43 48 45 43 4b 5f 42 55 54  = TYPE_CHECK_BUT
5ce0: 54 4f 4e 29 20 3f 20 62 75 74 50 74 72 2d 3e 6f  TON) ? butPtr->o
5cf0: 66 66 56 61 6c 75 65 20 3a 20 22 22 2c 0a 09 09  ffValue : "",...
5d00: 20 20 20 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f      TCL_GLOBAL_O
5d10: 4e 4c 59 7c 54 43 4c 5f 4c 45 41 56 45 5f 45 52  NLY|TCL_LEAVE_ER
5d20: 52 5f 4d 53 47 29 20 3d 3d 20 4e 55 4c 4c 29 20  R_MSG) == NULL) 
5d30: 7b 0a 09 09 72 65 74 75 72 6e 20 54 43 4c 5f 45  {...return TCL_E
5d40: 52 52 4f 52 3b 0a 09 20 20 20 20 7d 0a 09 7d 0a  RROR;..    }..}.
5d50: 09 54 63 6c 5f 54 72 61 63 65 56 61 72 28 69 6e  .Tcl_TraceVar(in
5d60: 74 65 72 70 2c 20 62 75 74 50 74 72 2d 3e 73 65  terp, butPtr->se
5d70: 6c 56 61 72 4e 61 6d 65 2c 0a 09 09 54 43 4c 5f  lVarName,...TCL_
5d80: 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 7c 54 43 4c 5f  GLOBAL_ONLY|TCL_
5d90: 54 52 41 43 45 5f 57 52 49 54 45 53 7c 54 43 4c  TRACE_WRITES|TCL
5da0: 5f 54 52 41 43 45 5f 55 4e 53 45 54 53 2c 0a 09  _TRACE_UNSETS,..
5db0: 09 42 75 74 74 6f 6e 56 61 72 50 72 6f 63 2c 20  .ButtonVarProc, 
5dc0: 28 43 6c 69 65 6e 74 44 61 74 61 29 20 62 75 74  (ClientData) but
5dd0: 50 74 72 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  Ptr);.    }..   
5de0: 20 69 66 20 28 62 75 74 50 74 72 2d 3e 74 65 78   if (butPtr->tex
5df0: 74 56 61 72 4e 61 6d 65 20 21 3d 20 4e 55 4c 4c  tVarName != NULL
5e00: 29 20 7b 0a 09 2f 2a 0a 09 20 2a 20 54 68 65 20  ) {../*.. * The 
5e10: 62 75 74 74 6f 6e 20 6d 75 73 74 20 64 69 73 70  button must disp
5e20: 6c 61 79 20 74 68 65 20 76 61 6c 75 65 20 6f 66  lay the value of
5e30: 20 61 20 76 61 72 69 61 62 6c 65 3a 20 73 65 74   a variable: set
5e40: 20 75 70 20 61 20 74 72 61 63 65 0a 09 20 2a 20   up a trace.. * 
5e50: 6f 6e 20 74 68 65 20 76 61 72 69 61 62 6c 65 27  on the variable'
5e60: 73 20 76 61 6c 75 65 2c 20 63 72 65 61 74 65 20  s value, create 
5e70: 74 68 65 20 76 61 72 69 61 62 6c 65 20 69 66 20  the variable if 
5e80: 69 74 20 64 6f 65 73 6e 27 74 0a 09 20 2a 20 65  it doesn't.. * e
5e90: 78 69 73 74 2c 20 61 6e 64 20 66 65 74 63 68 20  xist, and fetch 
5ea0: 69 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75  its current valu
5eb0: 65 2e 0a 09 20 2a 2f 0a 0a 09 63 68 61 72 20 2a  e... */...char *
5ec0: 76 61 6c 75 65 3b 0a 0a 09 76 61 6c 75 65 20 3d  value;...value =
5ed0: 20 54 63 6c 5f 47 65 74 56 61 72 28 69 6e 74 65   Tcl_GetVar(inte
5ee0: 72 70 2c 20 62 75 74 50 74 72 2d 3e 74 65 78 74  rp, butPtr->text
5ef0: 56 61 72 4e 61 6d 65 2c 20 54 43 4c 5f 47 4c 4f  VarName, TCL_GLO
5f00: 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 09 69 66 20 28  BAL_ONLY);..if (
5f10: 76 61 6c 75 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b  value == NULL) {
5f20: 0a 09 20 20 20 20 69 66 20 28 54 63 6c 5f 53 65  ..    if (Tcl_Se
5f30: 74 56 61 72 28 69 6e 74 65 72 70 2c 20 62 75 74  tVar(interp, but
5f40: 50 74 72 2d 3e 74 65 78 74 56 61 72 4e 61 6d 65  Ptr->textVarName
5f50: 2c 20 62 75 74 50 74 72 2d 3e 74 65 78 74 2c 0a  , butPtr->text,.
5f60: 09 09 20 20 20 20 54 43 4c 5f 47 4c 4f 42 41 4c  ..    TCL_GLOBAL
5f70: 5f 4f 4e 4c 59 7c 54 43 4c 5f 4c 45 41 56 45 5f  _ONLY|TCL_LEAVE_
5f80: 45 52 52 5f 4d 53 47 29 20 3d 3d 20 4e 55 4c 4c  ERR_MSG) == NULL
5f90: 29 20 7b 0a 09 09 72 65 74 75 72 6e 20 54 43 4c  ) {...return TCL
5fa0: 5f 45 52 52 4f 52 3b 0a 09 20 20 20 20 7d 0a 09  _ERROR;..    }..
5fb0: 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 69 66  } else {..    if
5fc0: 20 28 62 75 74 50 74 72 2d 3e 74 65 78 74 20 21   (butPtr->text !
5fd0: 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 63 6b 66 72  = NULL) {...ckfr
5fe0: 65 65 28 62 75 74 50 74 72 2d 3e 74 65 78 74 29  ee(butPtr->text)
5ff0: 3b 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 62 75  ;..    }..    bu
6000: 74 50 74 72 2d 3e 74 65 78 74 20 3d 20 28 63 68  tPtr->text = (ch
6010: 61 72 20 2a 29 20 63 6b 61 6c 6c 6f 63 28 28 75  ar *) ckalloc((u
6020: 6e 73 69 67 6e 65 64 29 20 28 73 74 72 6c 65 6e  nsigned) (strlen
6030: 28 76 61 6c 75 65 29 20 2b 20 31 29 29 3b 0a 09  (value) + 1));..
6040: 20 20 20 20 73 74 72 63 70 79 28 62 75 74 50 74      strcpy(butPt
6050: 72 2d 3e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b  r->text, value);
6060: 0a 09 7d 0a 09 54 63 6c 5f 54 72 61 63 65 56 61  ..}..Tcl_TraceVa
6070: 72 28 69 6e 74 65 72 70 2c 20 62 75 74 50 74 72  r(interp, butPtr
6080: 2d 3e 74 65 78 74 56 61 72 4e 61 6d 65 2c 0a 09  ->textVarName,..
6090: 09 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59  .TCL_GLOBAL_ONLY
60a0: 7c 54 43 4c 5f 54 52 41 43 45 5f 57 52 49 54 45  |TCL_TRACE_WRITE
60b0: 53 7c 54 43 4c 5f 54 52 41 43 45 5f 55 4e 53 45  S|TCL_TRACE_UNSE
60c0: 54 53 2c 0a 09 09 42 75 74 74 6f 6e 54 65 78 74  TS,...ButtonText
60d0: 56 61 72 50 72 6f 63 2c 20 28 43 6c 69 65 6e 74  VarProc, (Client
60e0: 44 61 74 61 29 20 62 75 74 50 74 72 29 3b 0a 20  Data) butPtr);. 
60f0: 20 20 20 7d 0a 0a 20 20 20 20 54 6b 5f 53 65 74     }..    Tk_Set
6100: 49 6e 74 65 72 6e 61 6c 42 6f 72 64 65 72 28 62  InternalBorder(b
6110: 75 74 50 74 72 2d 3e 74 6b 77 69 6e 2c 20 62 75  utPtr->tkwin, bu
6120: 74 50 74 72 2d 3e 62 6f 72 64 65 72 57 69 64 74  tPtr->borderWidt
6130: 68 29 3b 0a 20 20 20 20 43 6f 6d 70 75 74 65 42  h);.    ComputeB
6140: 75 74 74 6f 6e 47 65 6f 6d 65 74 72 79 28 62 75  uttonGeometry(bu
6150: 74 50 74 72 29 3b 0a 0a 20 20 20 20 2f 2a 0a 20  tPtr);..    /*. 
6160: 20 20 20 20 2a 20 4c 61 73 74 6c 79 2c 20 61 72      * Lastly, ar
6170: 72 61 6e 67 65 20 66 6f 72 20 74 68 65 20 62 75  range for the bu
6180: 74 74 6f 6e 20 74 6f 20 62 65 20 72 65 64 69 73  tton to be redis
6190: 70 6c 61 79 65 64 2e 0a 20 20 20 20 20 2a 2f 0a  played..     */.
61a0: 0a 20 20 20 20 69 66 20 28 54 6b 5f 49 73 4d 61  .    if (Tk_IsMa
61b0: 70 70 65 64 28 62 75 74 50 74 72 2d 3e 74 6b 77  pped(butPtr->tkw
61c0: 69 6e 29 20 26 26 20 21 28 62 75 74 50 74 72 2d  in) && !(butPtr-
61d0: 3e 66 6c 61 67 73 20 26 20 52 45 44 52 41 57 5f  >flags & REDRAW_
61e0: 50 45 4e 44 49 4e 47 29 29 20 7b 0a 09 54 63 6c  PENDING)) {..Tcl
61f0: 5f 44 6f 57 68 65 6e 49 64 6c 65 28 44 69 73 70  _DoWhenIdle(Disp
6200: 6c 61 79 42 75 74 74 6f 6e 2c 20 28 43 6c 69 65  layButton, (Clie
6210: 6e 74 44 61 74 61 29 20 62 75 74 50 74 72 29 3b  ntData) butPtr);
6220: 0a 09 62 75 74 50 74 72 2d 3e 66 6c 61 67 73 20  ..butPtr->flags 
6230: 7c 3d 20 52 45 44 52 41 57 5f 50 45 4e 44 49 4e  |= REDRAW_PENDIN
6240: 47 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 72 65  G;.    }..    re
6250: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0c  turn TCL_OK;.}..
6260: 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ./*. *----------
6270: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6280: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6290: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
62a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a  ------------. *.
62b0: 20 2a 20 44 69 73 70 6c 61 79 42 75 74 74 6f 6e   * DisplayButton
62c0: 20 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69 73 20 70   --. *. *.This p
62d0: 72 6f 63 65 64 75 72 65 20 69 73 20 69 6e 76 6f  rocedure is invo
62e0: 6b 65 64 20 74 6f 20 64 69 73 70 6c 61 79 20 61  ked to display a
62f0: 20 62 75 74 74 6f 6e 20 77 69 64 67 65 74 2e 20   button widget. 
6300: 20 49 74 20 69 73 0a 20 2a 09 6e 6f 72 6d 61 6c   It is. *.normal
6310: 6c 79 20 69 6e 76 6f 6b 65 64 20 61 73 20 61 6e  ly invoked as an
6320: 20 69 64 6c 65 20 68 61 6e 64 6c 65 72 2e 0a 20   idle handler.. 
6330: 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a  *. * Results:. *
6340: 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 20 53 69 64  .None.. *. * Sid
6350: 65 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 43 6f  e effects:. *.Co
6360: 6d 6d 61 6e 64 73 20 61 72 65 20 6f 75 74 70 75  mmands are outpu
6370: 74 20 74 6f 20 58 20 74 6f 20 64 69 73 70 6c 61  t to X to displa
6380: 79 20 74 68 65 20 62 75 74 74 6f 6e 20 69 6e 20  y the button in 
6390: 69 74 73 0a 20 2a 09 63 75 72 72 65 6e 74 20 6d  its. *.current m
63a0: 6f 64 65 2e 20 20 54 68 65 20 52 45 44 52 41 57  ode.  The REDRAW
63b0: 5f 50 45 4e 44 49 4e 47 20 66 6c 61 67 20 69 73  _PENDING flag is
63c0: 20 63 6c 65 61 72 65 64 2e 0a 20 2a 0a 20 2a 2d   cleared.. *. *-
63d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
63e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
63f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6400: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6410: 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61 74 69  -----. */..stati
6420: 63 20 76 6f 69 64 0a 44 69 73 70 6c 61 79 42 75  c void.DisplayBu
6430: 74 74 6f 6e 28 63 6c 69 65 6e 74 44 61 74 61 29  tton(clientData)
6440: 0a 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20  .    ClientData 
6450: 63 6c 69 65 6e 74 44 61 74 61 3b 09 2f 2a 20 49  clientData;./* I
6460: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
6470: 20 77 69 64 67 65 74 2e 20 2a 2f 0a 7b 0a 20 20   widget. */.{.  
6480: 20 20 72 65 67 69 73 74 65 72 20 42 75 74 74 6f    register Butto
6490: 6e 20 2a 62 75 74 50 74 72 20 3d 20 28 42 75 74  n *butPtr = (But
64a0: 74 6f 6e 20 2a 29 20 63 6c 69 65 6e 74 44 61 74  ton *) clientDat
64b0: 61 3b 0a 20 20 20 20 72 65 67 69 73 74 65 72 20  a;.    register 
64c0: 54 6b 5f 57 69 6e 64 6f 77 20 74 6b 77 69 6e 20  Tk_Window tkwin 
64d0: 3d 20 62 75 74 50 74 72 2d 3e 74 6b 77 69 6e 3b  = butPtr->tkwin;
64e0: 0a 20 20 20 20 43 74 6b 5f 53 74 79 6c 65 20 73  .    Ctk_Style s
64f0: 74 79 6c 65 3b 0a 20 20 20 20 69 6e 74 20 78 2c  tyle;.    int x,
6500: 20 79 3b 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   y;.    unsigned
6510: 20 69 6e 74 20 77 69 64 74 68 20 3d 20 54 6b 5f   int width = Tk_
6520: 57 69 64 74 68 28 74 6b 77 69 6e 29 3b 0a 20 20  Width(tkwin);.  
6530: 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 68    unsigned int h
6540: 65 69 67 68 74 20 3d 20 54 6b 5f 48 65 69 67 68  eight = Tk_Heigh
6550: 74 28 74 6b 77 69 6e 29 3b 0a 20 20 20 20 63 68  t(tkwin);.    ch
6560: 61 72 20 62 75 66 5b 34 5d 3b 0a 20 20 20 20 69  ar buf[4];.    i
6570: 6e 74 20 69 6e 64 69 63 61 74 6f 72 53 70 61 63  nt indicatorSpac
6580: 65 20 3d 20 30 3b 0a 0a 20 20 20 20 62 75 74 50  e = 0;..    butP
6590: 74 72 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 52 45  tr->flags &= ~RE
65a0: 44 52 41 57 5f 50 45 4e 44 49 4e 47 3b 0a 20 20  DRAW_PENDING;.  
65b0: 20 20 69 66 20 28 28 74 6b 77 69 6e 20 3d 3d 20    if ((tkwin == 
65c0: 4e 55 4c 4c 29 20 7c 7c 20 21 54 6b 5f 49 73 4d  NULL) || !Tk_IsM
65d0: 61 70 70 65 64 28 74 6b 77 69 6e 29 29 20 7b 0a  apped(tkwin)) {.
65e0: 09 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 0a  .return;.    }..
65f0: 20 20 20 20 69 66 20 28 28 62 75 74 50 74 72 2d      if ((butPtr-
6600: 3e 74 79 70 65 20 3d 3d 20 54 59 50 45 5f 43 48  >type == TYPE_CH
6610: 45 43 4b 5f 42 55 54 54 4f 4e 29 0a 09 20 20 20  ECK_BUTTON)..   
6620: 20 20 7c 7c 20 28 62 75 74 50 74 72 2d 3e 74 79    || (butPtr->ty
6630: 70 65 20 3d 3d 20 54 59 50 45 5f 52 41 44 49 4f  pe == TYPE_RADIO
6640: 5f 42 55 54 54 4f 4e 29 29 20 7b 0a 09 69 6e 64  _BUTTON)) {..ind
6650: 69 63 61 74 6f 72 53 70 61 63 65 20 3d 20 33 3b  icatorSpace = 3;
6660: 0a 09 62 75 66 5b 30 5d 20 3d 20 28 62 75 74 50  ..buf[0] = (butP
6670: 74 72 2d 3e 74 79 70 65 20 3d 3d 20 54 59 50 45  tr->type == TYPE
6680: 5f 43 48 45 43 4b 5f 42 55 54 54 4f 4e 29 20 3f  _CHECK_BUTTON) ?
6690: 20 27 5b 27 20 3a 20 27 3c 27 3b 0a 09 62 75 66   '[' : '<';..buf
66a0: 5b 31 5d 20 3d 20 28 62 75 74 50 74 72 2d 3e 66  [1] = (butPtr->f
66b0: 6c 61 67 73 20 26 20 53 45 4c 45 43 54 45 44 29  lags & SELECTED)
66c0: 20 3f 20 27 2a 27 20 3a 20 27 20 27 3b 0a 09 62   ? '*' : ' ';..b
66d0: 75 66 5b 32 5d 20 3d 20 28 62 75 74 50 74 72 2d  uf[2] = (butPtr-
66e0: 3e 74 79 70 65 20 3d 3d 20 54 59 50 45 5f 43 48  >type == TYPE_CH
66f0: 45 43 4b 5f 42 55 54 54 4f 4e 29 20 3f 20 27 5d  ECK_BUTTON) ? ']
6700: 27 20 3a 20 27 3e 27 3b 0a 09 62 75 66 5b 33 5d  ' : '>';..buf[3]
6710: 20 3d 20 27 5c 30 27 3b 0a 20 20 20 20 7d 0a 0a   = '\0';.    }..
6720: 20 20 20 20 69 66 20 28 62 75 74 50 74 72 2d 3e      if (butPtr->
6730: 74 79 70 65 20 3d 3d 20 54 59 50 45 5f 4c 41 42  type == TYPE_LAB
6740: 45 4c 29 20 7b 0a 09 73 74 79 6c 65 20 3d 20 43  EL) {..style = C
6750: 54 4b 5f 50 4c 41 49 4e 5f 53 54 59 4c 45 3b 0a  TK_PLAIN_STYLE;.
6760: 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 62      } else if (b
6770: 75 74 50 74 72 2d 3e 73 74 61 74 65 20 3d 3d 20  utPtr->state == 
6780: 74 6b 44 69 73 61 62 6c 65 64 55 69 64 29 20 7b  tkDisabledUid) {
6790: 0a 20 20 20 20 09 73 74 79 6c 65 20 3d 20 43 54  .    .style = CT
67a0: 4b 5f 44 49 53 41 42 4c 45 44 5f 53 54 59 4c 45  K_DISABLED_STYLE
67b0: 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09  ;.    } else {..
67c0: 73 74 79 6c 65 20 3d 20 43 54 4b 5f 42 55 54 54  style = CTK_BUTT
67d0: 4f 4e 5f 53 54 59 4c 45 3b 0a 20 20 20 20 7d 0a  ON_STYLE;.    }.
67e0: 0a 20 20 20 20 73 77 69 74 63 68 20 28 62 75 74  .    switch (but
67f0: 50 74 72 2d 3e 61 6e 63 68 6f 72 29 20 7b 0a 20  Ptr->anchor) {. 
6800: 20 20 20 63 61 73 65 20 54 4b 5f 41 4e 43 48 4f     case TK_ANCHO
6810: 52 5f 4e 57 3a 20 63 61 73 65 20 54 4b 5f 41 4e  R_NW: case TK_AN
6820: 43 48 4f 52 5f 57 3a 20 63 61 73 65 20 54 4b 5f  CHOR_W: case TK_
6830: 41 4e 43 48 4f 52 5f 53 57 3a 0a 09 78 20 3d 20  ANCHOR_SW:..x = 
6840: 62 75 74 50 74 72 2d 3e 62 6f 72 64 65 72 57 69  butPtr->borderWi
6850: 64 74 68 20 2b 20 62 75 74 50 74 72 2d 3e 70 61  dth + butPtr->pa
6860: 64 58 20 2b 20 69 6e 64 69 63 61 74 6f 72 53 70  dX + indicatorSp
6870: 61 63 65 3b 0a 09 62 72 65 61 6b 3b 0a 20 20 20  ace;..break;.   
6880: 20 63 61 73 65 20 54 4b 5f 41 4e 43 48 4f 52 5f   case TK_ANCHOR_
6890: 4e 3a 20 63 61 73 65 20 54 4b 5f 41 4e 43 48 4f  N: case TK_ANCHO
68a0: 52 5f 43 45 4e 54 45 52 3a 20 63 61 73 65 20 54  R_CENTER: case T
68b0: 4b 5f 41 4e 43 48 4f 52 5f 53 3a 0a 09 78 20 3d  K_ANCHOR_S:..x =
68c0: 20 28 77 69 64 74 68 20 2b 20 69 6e 64 69 63 61   (width + indica
68d0: 74 6f 72 53 70 61 63 65 20 2d 20 62 75 74 50 74  torSpace - butPt
68e0: 72 2d 3e 74 65 78 74 57 69 64 74 68 29 2f 32 3b  r->textWidth)/2;
68f0: 0a 09 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66  ..break;.    def
6900: 61 75 6c 74 3a 0a 09 78 20 3d 20 77 69 64 74 68  ault:..x = width
6910: 20 2d 20 62 75 74 50 74 72 2d 3e 62 6f 72 64 65   - butPtr->borde
6920: 72 57 69 64 74 68 20 2d 20 62 75 74 50 74 72 2d  rWidth - butPtr-
6930: 3e 70 61 64 58 20 2d 20 62 75 74 50 74 72 2d 3e  >padX - butPtr->
6940: 74 65 78 74 57 69 64 74 68 3b 0a 09 62 72 65 61  textWidth;..brea
6950: 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 77 69  k;.    }.    swi
6960: 74 63 68 20 28 62 75 74 50 74 72 2d 3e 61 6e 63  tch (butPtr->anc
6970: 68 6f 72 29 20 7b 0a 20 20 20 20 63 61 73 65 20  hor) {.    case 
6980: 54 4b 5f 41 4e 43 48 4f 52 5f 4e 57 3a 20 63 61  TK_ANCHOR_NW: ca
6990: 73 65 20 54 4b 5f 41 4e 43 48 4f 52 5f 4e 3a 20  se TK_ANCHOR_N: 
69a0: 63 61 73 65 20 54 4b 5f 41 4e 43 48 4f 52 5f 4e  case TK_ANCHOR_N
69b0: 45 3a 0a 09 79 20 3d 20 62 75 74 50 74 72 2d 3e  E:..y = butPtr->
69c0: 62 6f 72 64 65 72 57 69 64 74 68 20 2b 20 62 75  borderWidth + bu
69d0: 74 50 74 72 2d 3e 70 61 64 59 3b 0a 09 62 72 65  tPtr->padY;..bre
69e0: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 54 4b 5f  ak;.    case TK_
69f0: 41 4e 43 48 4f 52 5f 57 3a 20 63 61 73 65 20 54  ANCHOR_W: case T
6a00: 4b 5f 41 4e 43 48 4f 52 5f 43 45 4e 54 45 52 3a  K_ANCHOR_CENTER:
6a10: 20 63 61 73 65 20 54 4b 5f 41 4e 43 48 4f 52 5f   case TK_ANCHOR_
6a20: 45 3a 0a 09 79 20 3d 20 28 68 65 69 67 68 74 20  E:..y = (height 
6a30: 2d 20 62 75 74 50 74 72 2d 3e 74 65 78 74 48 65  - butPtr->textHe
6a40: 69 67 68 74 29 2f 32 3b 0a 09 62 72 65 61 6b 3b  ight)/2;..break;
6a50: 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 09 79  .    default:..y
6a60: 20 3d 20 68 65 69 67 68 74 20 2d 20 62 75 74 50   = height - butP
6a70: 74 72 2d 3e 62 6f 72 64 65 72 57 69 64 74 68 20  tr->borderWidth 
6a80: 2d 20 62 75 74 50 74 72 2d 3e 70 61 64 59 20 2d  - butPtr->padY -
6a90: 20 62 75 74 50 74 72 2d 3e 74 65 78 74 48 65 69   butPtr->textHei
6aa0: 67 68 74 3b 0a 09 62 72 65 61 6b 3b 0a 20 20 20  ght;..break;.   
6ab0: 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20   }..    /*.     
6ac0: 2a 20 43 6c 65 61 72 20 72 65 63 74 2e 0a 20 20  * Clear rect..  
6ad0: 20 20 20 2a 2f 0a 20 20 20 20 43 74 6b 5f 46 69     */.    Ctk_Fi
6ae0: 6c 6c 52 65 63 74 28 74 6b 77 69 6e 2c 20 30 2c  llRect(tkwin, 0,
6af0: 20 30 2c 20 77 69 64 74 68 2c 20 68 65 69 67 68   0, width, heigh
6b00: 74 2c 20 73 74 79 6c 65 2c 20 27 20 27 29 3b 0a  t, style, ' ');.
6b10: 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20 44  .    /*.     * D
6b20: 72 61 77 20 74 65 78 74 2e 0a 20 20 20 20 20 2a  raw text..     *
6b30: 2f 0a 20 20 20 20 54 6b 44 69 73 70 6c 61 79 54  /.    TkDisplayT
6b40: 65 78 74 28 74 6b 77 69 6e 2c 20 73 74 79 6c 65  ext(tkwin, style
6b50: 2c 20 62 75 74 50 74 72 2d 3e 74 65 78 74 2c 20  , butPtr->text, 
6b60: 62 75 74 50 74 72 2d 3e 6e 75 6d 43 68 61 72 73  butPtr->numChars
6b70: 2c 0a 09 20 20 20 20 78 2c 20 79 2c 20 62 75 74  ,..    x, y, but
6b80: 50 74 72 2d 3e 74 65 78 74 57 69 64 74 68 2c 20  Ptr->textWidth, 
6b90: 62 75 74 50 74 72 2d 3e 6a 75 73 74 69 66 79 2c  butPtr->justify,
6ba0: 20 62 75 74 50 74 72 2d 3e 75 6e 64 65 72 6c 69   butPtr->underli
6bb0: 6e 65 29 3b 0a 0a 20 20 20 20 2f 2a 0a 20 20 20  ne);..    /*.   
6bc0: 20 20 2a 20 44 72 61 77 20 49 6e 64 69 63 61 74    * Draw Indicat
6bd0: 6f 72 2e 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20  or..     */.    
6be0: 69 66 20 28 69 6e 64 69 63 61 74 6f 72 53 70 61  if (indicatorSpa
6bf0: 63 65 29 20 7b 0a 09 78 20 2d 3d 20 69 6e 64 69  ce) {..x -= indi
6c00: 63 61 74 6f 72 53 70 61 63 65 3b 0a 09 79 20 2b  catorSpace;..y +
6c10: 3d 20 62 75 74 50 74 72 2d 3e 74 65 78 74 48 65  = butPtr->textHe
6c20: 69 67 68 74 2f 32 3b 0a 09 43 74 6b 5f 44 72 61  ight/2;..Ctk_Dra
6c30: 77 53 74 72 69 6e 67 28 74 6b 77 69 6e 2c 20 78  wString(tkwin, x
6c40: 2c 20 79 2c 20 73 74 79 6c 65 2c 20 62 75 66 2c  , y, style, buf,
6c50: 20 69 6e 64 69 63 61 74 6f 72 53 70 61 63 65 29   indicatorSpace)
6c60: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 0a  ;.    }..    /*.
6c70: 20 20 20 20 20 2a 20 44 72 61 77 20 62 6f 72 64       * Draw bord
6c80: 65 72 2e 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20  er..     */.    
6c90: 43 74 6b 5f 44 72 61 77 42 6f 72 64 65 72 28 74  Ctk_DrawBorder(t
6ca0: 6b 77 69 6e 2c 20 73 74 79 6c 65 2c 20 28 63 68  kwin, style, (ch
6cb0: 61 72 20 2a 29 4e 55 4c 4c 29 3b 0a 0a 20 20 20  ar *)NULL);..   
6cc0: 20 2f 2a 0a 20 20 20 20 20 2a 20 50 6f 73 69 74   /*.     * Posit
6cd0: 69 6f 6e 20 63 75 72 73 6f 72 2e 0a 20 20 20 20  ion cursor..    
6ce0: 20 2a 2f 0a 20 20 20 20 69 66 20 28 62 75 74 50   */.    if (butP
6cf0: 74 72 2d 3e 66 6c 61 67 73 20 26 20 47 4f 54 5f  tr->flags & GOT_
6d00: 46 4f 43 55 53 29 20 7b 0a 09 43 74 6b 5f 53 65  FOCUS) {..Ctk_Se
6d10: 74 43 75 72 73 6f 72 28 74 6b 77 69 6e 2c 20 62  tCursor(tkwin, b
6d20: 75 74 50 74 72 2d 3e 62 6f 72 64 65 72 57 69 64  utPtr->borderWid
6d30: 74 68 2c 20 62 75 74 50 74 72 2d 3e 62 6f 72 64  th, butPtr->bord
6d40: 65 72 57 69 64 74 68 29 3b 0a 20 20 20 20 7d 0a  erWidth);.    }.
6d50: 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d  }.../*. *-------
6d60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6d70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6d80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6d90: 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 42 75  -------. *. * Bu
6da0: 74 74 6f 6e 45 76 65 6e 74 50 72 6f 63 20 2d 2d  ttonEventProc --
6db0: 0a 20 2a 0a 20 2a 09 54 68 69 73 20 70 72 6f 63  . *. *.This proc
6dc0: 65 64 75 72 65 20 69 73 20 69 6e 76 6f 6b 65 64  edure is invoked
6dd0: 20 62 79 20 74 68 65 20 54 6b 20 64 69 73 70 61   by the Tk dispa
6de0: 74 63 68 65 72 20 66 6f 72 20 76 61 72 69 6f 75  tcher for variou
6df0: 73 0a 20 2a 09 65 76 65 6e 74 73 20 6f 6e 20 62  s. *.events on b
6e00: 75 74 74 6f 6e 73 2e 0a 20 2a 0a 20 2a 20 52 65  uttons.. *. * Re
6e10: 73 75 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a  sults:. *.None..
6e20: 20 2a 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63   *. * Side effec
6e30: 74 73 3a 0a 20 2a 09 57 68 65 6e 20 74 68 65 20  ts:. *.When the 
6e40: 77 69 6e 64 6f 77 20 67 65 74 73 20 64 65 6c 65  window gets dele
6e50: 74 65 64 2c 20 69 6e 74 65 72 6e 61 6c 20 73 74  ted, internal st
6e60: 72 75 63 74 75 72 65 73 20 67 65 74 0a 20 2a 09  ructures get. *.
6e70: 63 6c 65 61 6e 65 64 20 75 70 2e 20 20 57 68 65  cleaned up.  Whe
6e80: 6e 20 69 74 20 67 65 74 73 20 65 78 70 6f 73 65  n it gets expose
6e90: 64 2c 20 69 74 20 69 73 20 72 65 64 69 73 70 6c  d, it is redispl
6ea0: 61 79 65 64 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d  ayed.. *. *-----
6eb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6ec0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6ed0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6ee0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73  ---------. */..s
6ef0: 74 61 74 69 63 20 76 6f 69 64 0a 42 75 74 74 6f  tatic void.Butto
6f00: 6e 45 76 65 6e 74 50 72 6f 63 28 63 6c 69 65 6e  nEventProc(clien
6f10: 74 44 61 74 61 2c 20 65 76 65 6e 74 50 74 72 29  tData, eventPtr)
6f20: 0a 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20  .    ClientData 
6f30: 63 6c 69 65 6e 74 44 61 74 61 3b 09 2f 2a 20 49  clientData;./* I
6f40: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
6f50: 20 77 69 6e 64 6f 77 2e 20 2a 2f 0a 20 20 20 20   window. */.    
6f60: 58 45 76 65 6e 74 20 2a 65 76 65 6e 74 50 74 72  XEvent *eventPtr
6f70: 3b 09 09 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f  ;../* Informatio
6f80: 6e 20 61 62 6f 75 74 20 65 76 65 6e 74 2e 20 2a  n about event. *
6f90: 2f 0a 7b 0a 20 20 20 20 42 75 74 74 6f 6e 20 2a  /.{.    Button *
6fa0: 62 75 74 50 74 72 20 3d 20 28 42 75 74 74 6f 6e  butPtr = (Button
6fb0: 20 2a 29 20 63 6c 69 65 6e 74 44 61 74 61 3b 0a   *) clientData;.
6fc0: 20 20 20 20 69 66 20 28 65 76 65 6e 74 50 74 72      if (eventPtr
6fd0: 2d 3e 74 79 70 65 20 3d 3d 20 43 54 4b 5f 45 58  ->type == CTK_EX
6fe0: 50 4f 53 45 5f 45 56 45 4e 54 29 20 7b 0a 09 69  POSE_EVENT) {..i
6ff0: 66 20 28 28 62 75 74 50 74 72 2d 3e 74 6b 77 69  f ((butPtr->tkwi
7000: 6e 20 21 3d 20 4e 55 4c 4c 29 20 26 26 20 21 28  n != NULL) && !(
7010: 62 75 74 50 74 72 2d 3e 66 6c 61 67 73 20 26 20  butPtr->flags & 
7020: 52 45 44 52 41 57 5f 50 45 4e 44 49 4e 47 29 29  REDRAW_PENDING))
7030: 20 7b 0a 09 20 20 20 20 54 63 6c 5f 44 6f 57 68   {..    Tcl_DoWh
7040: 65 6e 49 64 6c 65 28 44 69 73 70 6c 61 79 42 75  enIdle(DisplayBu
7050: 74 74 6f 6e 2c 20 28 43 6c 69 65 6e 74 44 61 74  tton, (ClientDat
7060: 61 29 20 62 75 74 50 74 72 29 3b 0a 09 20 20 20  a) butPtr);..   
7070: 20 62 75 74 50 74 72 2d 3e 66 6c 61 67 73 20 7c   butPtr->flags |
7080: 3d 20 52 45 44 52 41 57 5f 50 45 4e 44 49 4e 47  = REDRAW_PENDING
7090: 3b 0a 09 7d 0a 20 20 20 20 7d 20 65 6c 73 65 20  ;..}.    } else 
70a0: 69 66 20 28 65 76 65 6e 74 50 74 72 2d 3e 74 79  if (eventPtr->ty
70b0: 70 65 20 3d 3d 20 43 54 4b 5f 44 45 53 54 52 4f  pe == CTK_DESTRO
70c0: 59 5f 45 56 45 4e 54 29 20 7b 0a 20 20 20 20 09  Y_EVENT) {.    .
70d0: 69 66 20 28 62 75 74 50 74 72 2d 3e 74 6b 77 69  if (butPtr->tkwi
70e0: 6e 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 20 20 20  n != NULL) {.   
70f0: 20 09 20 20 20 20 62 75 74 50 74 72 2d 3e 74 6b   .    butPtr->tk
7100: 77 69 6e 20 3d 20 4e 55 4c 4c 3b 0a 09 20 20 20  win = NULL;..   
7110: 20 54 63 6c 5f 44 65 6c 65 74 65 43 6f 6d 6d 61   Tcl_DeleteComma
7120: 6e 64 28 62 75 74 50 74 72 2d 3e 69 6e 74 65 72  nd(butPtr->inter
7130: 70 2c 0a 09 20 20 20 20 09 20 20 20 20 54 63 6c  p,..    .    Tcl
7140: 5f 47 65 74 43 6f 6d 6d 61 6e 64 4e 61 6d 65 28  _GetCommandName(
7150: 62 75 74 50 74 72 2d 3e 69 6e 74 65 72 70 2c 20  butPtr->interp, 
7160: 62 75 74 50 74 72 2d 3e 77 69 64 67 65 74 43 6d  butPtr->widgetCm
7170: 64 29 29 3b 0a 09 7d 0a 09 69 66 20 28 62 75 74  d));..}..if (but
7180: 50 74 72 2d 3e 66 6c 61 67 73 20 26 20 52 45 44  Ptr->flags & RED
7190: 52 41 57 5f 50 45 4e 44 49 4e 47 29 20 7b 0a 09  RAW_PENDING) {..
71a0: 20 20 20 20 54 63 6c 5f 43 61 6e 63 65 6c 49 64      Tcl_CancelId
71b0: 6c 65 43 61 6c 6c 28 44 69 73 70 6c 61 79 42 75  leCall(DisplayBu
71c0: 74 74 6f 6e 2c 20 28 43 6c 69 65 6e 74 44 61 74  tton, (ClientDat
71d0: 61 29 20 62 75 74 50 74 72 29 3b 0a 09 7d 0a 09  a) butPtr);..}..
71e0: 54 6b 5f 45 76 65 6e 74 75 61 6c 6c 79 46 72 65  Tk_EventuallyFre
71f0: 65 28 28 43 6c 69 65 6e 74 44 61 74 61 29 20 62  e((ClientData) b
7200: 75 74 50 74 72 2c 20 44 65 73 74 72 6f 79 42 75  utPtr, DestroyBu
7210: 74 74 6f 6e 29 3b 0a 20 20 20 20 7d 20 65 6c 73  tton);.    } els
7220: 65 20 69 66 20 28 65 76 65 6e 74 50 74 72 2d 3e  e if (eventPtr->
7230: 74 79 70 65 20 3d 3d 20 43 54 4b 5f 46 4f 43 55  type == CTK_FOCU
7240: 53 5f 45 56 45 4e 54 29 20 7b 0a 09 62 75 74 50  S_EVENT) {..butP
7250: 74 72 2d 3e 66 6c 61 67 73 20 7c 3d 20 47 4f 54  tr->flags |= GOT
7260: 5f 46 4f 43 55 53 3b 0a 09 43 74 6b 5f 53 65 74  _FOCUS;..Ctk_Set
7270: 43 75 72 73 6f 72 28 62 75 74 50 74 72 2d 3e 74  Cursor(butPtr->t
7280: 6b 77 69 6e 2c 20 62 75 74 50 74 72 2d 3e 62 6f  kwin, butPtr->bo
7290: 72 64 65 72 57 69 64 74 68 2c 20 62 75 74 50 74  rderWidth, butPt
72a0: 72 2d 3e 62 6f 72 64 65 72 57 69 64 74 68 29 3b  r->borderWidth);
72b0: 0a 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28  .    } else if (
72c0: 65 76 65 6e 74 50 74 72 2d 3e 74 79 70 65 20 3d  eventPtr->type =
72d0: 3d 20 43 54 4b 5f 55 4e 46 4f 43 55 53 5f 45 56  = CTK_UNFOCUS_EV
72e0: 45 4e 54 29 20 7b 0a 09 62 75 74 50 74 72 2d 3e  ENT) {..butPtr->
72f0: 66 6c 61 67 73 20 26 3d 20 7e 47 4f 54 5f 46 4f  flags &= ~GOT_FO
7300: 43 55 53 3b 0a 20 20 20 20 7d 0a 7d 0a 0c 0a 2f  CUS;.    }.}.../
7310: 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *. *------------
7320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7340: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7350: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a  ----------. *. *
7360: 20 42 75 74 74 6f 6e 43 6d 64 44 65 6c 65 74 65   ButtonCmdDelete
7370: 64 50 72 6f 63 20 2d 2d 0a 20 2a 0a 20 2a 09 54  dProc --. *. *.T
7380: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 69 73  his procedure is
7390: 20 69 6e 76 6f 6b 65 64 20 77 68 65 6e 20 61 20   invoked when a 
73a0: 77 69 64 67 65 74 20 63 6f 6d 6d 61 6e 64 20 69  widget command i
73b0: 73 20 64 65 6c 65 74 65 64 2e 20 20 49 66 0a 20  s deleted.  If. 
73c0: 2a 09 74 68 65 20 77 69 64 67 65 74 20 69 73 6e  *.the widget isn
73d0: 27 74 20 61 6c 72 65 61 64 79 20 69 6e 20 74 68  't already in th
73e0: 65 20 70 72 6f 63 65 73 73 20 6f 66 20 62 65 69  e process of bei
73f0: 6e 67 20 64 65 73 74 72 6f 79 65 64 2c 0a 20 2a  ng destroyed,. *
7400: 09 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 64 65  .this command de
7410: 73 74 72 6f 79 73 20 69 74 2e 0a 20 2a 0a 20 2a  stroys it.. *. *
7420: 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 4e 6f 6e   Results:. *.Non
7430: 65 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20 65 66  e.. *. * Side ef
7440: 66 65 63 74 73 3a 0a 20 2a 09 54 68 65 20 77 69  fects:. *.The wi
7450: 64 67 65 74 20 69 73 20 64 65 73 74 72 6f 79 65  dget is destroye
7460: 64 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d  d.. *. *--------
7470: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7480: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7490: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
74a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
74b0: 2a 2f 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 0a  */..static void.
74c0: 42 75 74 74 6f 6e 43 6d 64 44 65 6c 65 74 65 64  ButtonCmdDeleted
74d0: 50 72 6f 63 28 63 6c 69 65 6e 74 44 61 74 61 29  Proc(clientData)
74e0: 0a 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20  .    ClientData 
74f0: 63 6c 69 65 6e 74 44 61 74 61 3b 09 2f 2a 20 50  clientData;./* P
7500: 6f 69 6e 74 65 72 20 74 6f 20 77 69 64 67 65 74  ointer to widget
7510: 20 72 65 63 6f 72 64 20 66 6f 72 20 77 69 64 67   record for widg
7520: 65 74 2e 20 2a 2f 0a 7b 0a 20 20 20 20 42 75 74  et. */.{.    But
7530: 74 6f 6e 20 2a 62 75 74 50 74 72 20 3d 20 28 42  ton *butPtr = (B
7540: 75 74 74 6f 6e 20 2a 29 20 63 6c 69 65 6e 74 44  utton *) clientD
7550: 61 74 61 3b 0a 20 20 20 20 54 6b 5f 57 69 6e 64  ata;.    Tk_Wind
7560: 6f 77 20 74 6b 77 69 6e 20 3d 20 62 75 74 50 74  ow tkwin = butPt
7570: 72 2d 3e 74 6b 77 69 6e 3b 0a 0a 20 20 20 20 2f  r->tkwin;..    /
7580: 2a 0a 20 20 20 20 20 2a 20 54 68 69 73 20 70 72  *.     * This pr
7590: 6f 63 65 64 75 72 65 20 63 6f 75 6c 64 20 62 65  ocedure could be
75a0: 20 69 6e 76 6f 6b 65 64 20 65 69 74 68 65 72 20   invoked either 
75b0: 62 65 63 61 75 73 65 20 74 68 65 20 77 69 6e 64  because the wind
75c0: 6f 77 20 77 61 73 0a 20 20 20 20 20 2a 20 64 65  ow was.     * de
75d0: 73 74 72 6f 79 65 64 20 61 6e 64 20 74 68 65 20  stroyed and the 
75e0: 63 6f 6d 6d 61 6e 64 20 77 61 73 20 74 68 65 6e  command was then
75f0: 20 64 65 6c 65 74 65 64 20 28 69 6e 20 77 68 69   deleted (in whi
7600: 63 68 20 63 61 73 65 20 74 6b 77 69 6e 0a 20 20  ch case tkwin.  
7610: 20 20 20 2a 20 69 73 20 4e 55 4c 4c 29 20 6f 72     * is NULL) or
7620: 20 62 65 63 61 75 73 65 20 74 68 65 20 63 6f 6d   because the com
7630: 6d 61 6e 64 20 77 61 73 20 64 65 6c 65 74 65 64  mand was deleted
7640: 2c 20 61 6e 64 20 74 68 65 6e 20 74 68 69 73 20  , and then this 
7650: 70 72 6f 63 65 64 75 72 65 0a 20 20 20 20 20 2a  procedure.     *
7660: 20 64 65 73 74 72 6f 79 73 20 74 68 65 20 77 69   destroys the wi
7670: 64 67 65 74 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20  dget..     */.. 
7680: 20 20 20 69 66 20 28 74 6b 77 69 6e 20 21 3d 20     if (tkwin != 
7690: 4e 55 4c 4c 29 20 7b 0a 09 62 75 74 50 74 72 2d  NULL) {..butPtr-
76a0: 3e 74 6b 77 69 6e 20 3d 20 4e 55 4c 4c 3b 0a 09  >tkwin = NULL;..
76b0: 54 6b 5f 44 65 73 74 72 6f 79 57 69 6e 64 6f 77  Tk_DestroyWindow
76c0: 28 74 6b 77 69 6e 29 3b 0a 20 20 20 20 7d 0a 7d  (tkwin);.    }.}
76d0: 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d  .../*. *--------
76e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
76f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7700: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7710: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
7720: 2a 0a 20 2a 20 43 6f 6d 70 75 74 65 42 75 74 74  *. * ComputeButt
7730: 6f 6e 47 65 6f 6d 65 74 72 79 20 2d 2d 0a 20 2a  onGeometry --. *
7740: 0a 20 2a 09 41 66 74 65 72 20 63 68 61 6e 67 65  . *.After change
7750: 73 20 69 6e 20 61 20 62 75 74 74 6f 6e 27 73 20  s in a button's 
7760: 74 65 78 74 20 6f 72 20 62 69 74 6d 61 70 2c 20  text or bitmap, 
7770: 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 0a 20  this procedure. 
7780: 2a 09 72 65 63 6f 6d 70 75 74 65 73 20 74 68 65  *.recomputes the
7790: 20 62 75 74 74 6f 6e 27 73 20 67 65 6f 6d 65 74   button's geomet
77a0: 72 79 20 61 6e 64 20 70 61 73 73 65 73 20 74 68  ry and passes th
77b0: 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 20  is information. 
77c0: 2a 09 61 6c 6f 6e 67 20 74 6f 20 74 68 65 20 67  *.along to the g
77d0: 65 6f 6d 65 74 72 79 20 6d 61 6e 61 67 65 72 20  eometry manager 
77e0: 66 6f 72 20 74 68 65 20 77 69 6e 64 6f 77 2e 0a  for the window..
77f0: 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20   *. * Results:. 
7800: 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 20 53 69  *.None.. *. * Si
7810: 64 65 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 54  de effects:. *.T
7820: 68 65 20 62 75 74 74 6f 6e 27 73 20 77 69 6e 64  he button's wind
7830: 6f 77 20 6d 61 79 20 63 68 61 6e 67 65 20 73 69  ow may change si
7840: 7a 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d  ze.. *. *-------
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 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7880: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
7890: 20 2a 2f 0a 0a 73 74 61 74 69 63 20 76 6f 69 64   */..static void
78a0: 0a 43 6f 6d 70 75 74 65 42 75 74 74 6f 6e 47 65  .ComputeButtonGe
78b0: 6f 6d 65 74 72 79 28 62 75 74 50 74 72 29 0a 20  ometry(butPtr). 
78c0: 20 20 20 72 65 67 69 73 74 65 72 20 42 75 74 74     register Butt
78d0: 6f 6e 20 2a 62 75 74 50 74 72 3b 09 2f 2a 20 42  on *butPtr;./* B
78e0: 75 74 74 6f 6e 20 77 68 6f 73 65 20 67 65 6f 6d  utton whose geom
78f0: 65 74 72 79 20 6d 61 79 20 68 61 76 65 20 63 68  etry may have ch
7900: 61 6e 67 65 64 2e 20 2a 2f 0a 7b 0a 20 20 20 20  anged. */.{.    
7910: 69 6e 74 20 77 69 64 74 68 2c 20 68 65 69 67 68  int width, heigh
7920: 74 3b 0a 20 20 20 20 69 6e 74 20 69 6e 64 69 63  t;.    int indic
7930: 61 74 6f 72 53 70 61 63 65 20 3d 20 30 3b 0a 0a  atorSpace = 0;..
7940: 20 20 20 20 69 66 20 28 62 75 74 50 74 72 2d 3e      if (butPtr->
7950: 74 79 70 65 20 3d 3d 20 54 59 50 45 5f 52 41 44  type == TYPE_RAD
7960: 49 4f 5f 42 55 54 54 4f 4e 0a 09 20 20 20 20 7c  IO_BUTTON..    |
7970: 7c 20 62 75 74 50 74 72 2d 3e 74 79 70 65 20 3d  | butPtr->type =
7980: 3d 20 54 59 50 45 5f 43 48 45 43 4b 5f 42 55 54  = TYPE_CHECK_BUT
7990: 54 4f 4e 29 20 7b 0a 09 69 6e 64 69 63 61 74 6f  TON) {..indicato
79a0: 72 53 70 61 63 65 20 3d 20 33 3b 0a 20 20 20 20  rSpace = 3;.    
79b0: 7d 0a 0a 20 20 20 20 62 75 74 50 74 72 2d 3e 6e  }..    butPtr->n
79c0: 75 6d 43 68 61 72 73 20 3d 20 73 74 72 6c 65 6e  umChars = strlen
79d0: 28 62 75 74 50 74 72 2d 3e 74 65 78 74 29 3b 0a  (butPtr->text);.
79e0: 20 20 20 20 54 6b 43 6f 6d 70 75 74 65 54 65 78      TkComputeTex
79f0: 74 47 65 6f 6d 65 74 72 79 28 62 75 74 50 74 72  tGeometry(butPtr
7a00: 2d 3e 74 65 78 74 2c 20 62 75 74 50 74 72 2d 3e  ->text, butPtr->
7a10: 6e 75 6d 43 68 61 72 73 2c 0a 20 20 20 20 09 20  numChars,.    . 
7a20: 20 20 20 62 75 74 50 74 72 2d 3e 77 72 61 70 4c     butPtr->wrapL
7a30: 65 6e 67 74 68 2c 0a 20 20 20 20 09 20 20 20 20  ength,.    .    
7a40: 26 62 75 74 50 74 72 2d 3e 74 65 78 74 57 69 64  &butPtr->textWid
7a50: 74 68 2c 20 26 62 75 74 50 74 72 2d 3e 74 65 78  th, &butPtr->tex
7a60: 74 48 65 69 67 68 74 29 3b 0a 20 20 20 20 77 69  tHeight);.    wi
7a70: 64 74 68 20 3d 20 62 75 74 50 74 72 2d 3e 77 69  dth = butPtr->wi
7a80: 64 74 68 3b 0a 20 20 20 20 69 66 20 28 77 69 64  dth;.    if (wid
7a90: 74 68 20 3c 20 30 29 20 7b 0a 09 77 69 64 74 68  th < 0) {..width
7aa0: 20 3d 20 62 75 74 50 74 72 2d 3e 74 65 78 74 57   = butPtr->textW
7ab0: 69 64 74 68 3b 0a 20 20 20 20 7d 0a 20 20 20 20  idth;.    }.    
7ac0: 68 65 69 67 68 74 20 3d 20 62 75 74 50 74 72 2d  height = butPtr-
7ad0: 3e 68 65 69 67 68 74 3b 0a 20 20 20 20 69 66 20  >height;.    if 
7ae0: 28 68 65 69 67 68 74 20 3c 20 30 29 20 7b 0a 09  (height < 0) {..
7af0: 68 65 69 67 68 74 20 3d 20 62 75 74 50 74 72 2d  height = butPtr-
7b00: 3e 74 65 78 74 48 65 69 67 68 74 3b 0a 20 20 20  >textHeight;.   
7b10: 20 7d 0a 20 20 20 20 77 69 64 74 68 20 2b 3d 20   }.    width += 
7b20: 32 2a 62 75 74 50 74 72 2d 3e 70 61 64 58 3b 0a  2*butPtr->padX;.
7b30: 20 20 20 20 68 65 69 67 68 74 20 2b 3d 20 32 2a      height += 2*
7b40: 62 75 74 50 74 72 2d 3e 70 61 64 59 3b 0a 0a 20  butPtr->padY;.. 
7b50: 20 20 20 54 6b 5f 47 65 6f 6d 65 74 72 79 52 65     Tk_GeometryRe
7b60: 71 75 65 73 74 28 62 75 74 50 74 72 2d 3e 74 6b  quest(butPtr->tk
7b70: 77 69 6e 2c 0a 20 20 20 20 09 20 20 20 20 77 69  win,.    .    wi
7b80: 64 74 68 20 2b 20 69 6e 64 69 63 61 74 6f 72 53  dth + indicatorS
7b90: 70 61 63 65 20 2b 20 32 2a 62 75 74 50 74 72 2d  pace + 2*butPtr-
7ba0: 3e 62 6f 72 64 65 72 57 69 64 74 68 2c 0a 20 20  >borderWidth,.  
7bb0: 20 20 09 20 20 20 20 68 65 69 67 68 74 20 2b 20    .    height + 
7bc0: 32 2a 62 75 74 50 74 72 2d 3e 62 6f 72 64 65 72  2*butPtr->border
7bd0: 57 69 64 74 68 29 3b 0a 7d 0a 0c 0a 2f 2a 0a 20  Width);.}.../*. 
7be0: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *---------------
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 2d 2d 2d 0a 20 2a 0a 20 2a 20 49 6e  -------. *. * In
7c30: 76 6f 6b 65 42 75 74 74 6f 6e 20 2d 2d 0a 20 2a  vokeButton --. *
7c40: 0a 20 2a 09 54 68 69 73 20 70 72 6f 63 65 64 75  . *.This procedu
7c50: 72 65 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20  re is called to 
7c60: 63 61 72 72 79 20 6f 75 74 20 74 68 65 20 61 63  carry out the ac
7c70: 74 69 6f 6e 73 20 61 73 73 6f 63 69 61 74 65 64  tions associated
7c80: 0a 20 2a 09 77 69 74 68 20 61 20 62 75 74 74 6f  . *.with a butto
7c90: 6e 2c 20 73 75 63 68 20 61 73 20 69 6e 76 6f 6b  n, such as invok
7ca0: 69 6e 67 20 61 20 54 63 6c 20 63 6f 6d 6d 61 6e  ing a Tcl comman
7cb0: 64 20 6f 72 20 73 65 74 74 69 6e 67 20 61 0a 20  d or setting a. 
7cc0: 2a 09 76 61 72 69 61 62 6c 65 2e 20 20 54 68 69  *.variable.  Thi
7cd0: 73 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 69  s procedure is i
7ce0: 6e 76 6f 6b 65 64 2c 20 66 6f 72 20 65 78 61 6d  nvoked, for exam
7cf0: 70 6c 65 2c 20 77 68 65 6e 20 74 68 65 0a 20 2a  ple, when the. *
7d00: 09 62 75 74 74 6f 6e 20 69 73 20 69 6e 76 6f 6b  .button is invok
7d10: 65 64 20 76 69 61 20 74 68 65 20 6d 6f 75 73 65  ed via the mouse
7d20: 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a  .. *. * Results:
7d30: 0a 20 2a 09 41 20 73 74 61 6e 64 61 72 64 20 54  . *.A standard T
7d40: 63 6c 20 72 65 74 75 72 6e 20 76 61 6c 75 65 2e  cl return value.
7d50: 20 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73    Information is
7d60: 20 61 6c 73 6f 20 6c 65 66 74 20 69 6e 0a 20 2a   also left in. *
7d70: 09 69 6e 74 65 72 70 2d 3e 72 65 73 75 6c 74 2e  .interp->result.
7d80: 0a 20 2a 0a 20 2a 20 53 69 64 65 20 65 66 66 65  . *. * Side effe
7d90: 63 74 73 3a 0a 20 2a 09 44 65 70 65 6e 64 73 20  cts:. *.Depends 
7da0: 6f 6e 20 74 68 65 20 62 75 74 74 6f 6e 20 61 6e  on the button an
7db0: 64 20 69 74 73 20 61 73 73 6f 63 69 61 74 65 64  d its associated
7dc0: 20 63 6f 6d 6d 61 6e 64 2e 0a 20 2a 0a 20 2a 2d   command.. *. *-
7dd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7de0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7df0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7e00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7e10: 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61 74 69  -----. */..stati
7e20: 63 20 69 6e 74 0a 49 6e 76 6f 6b 65 42 75 74 74  c int.InvokeButt
7e30: 6f 6e 28 62 75 74 50 74 72 29 0a 20 20 20 20 72  on(butPtr).    r
7e40: 65 67 69 73 74 65 72 20 42 75 74 74 6f 6e 20 2a  egister Button *
7e50: 62 75 74 50 74 72 3b 09 09 2f 2a 20 49 6e 66 6f  butPtr;../* Info
7e60: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 62 75  rmation about bu
7e70: 74 74 6f 6e 2e 20 2a 2f 0a 7b 0a 20 20 20 20 69  tton. */.{.    i
7e80: 66 20 28 62 75 74 50 74 72 2d 3e 74 79 70 65 20  f (butPtr->type 
7e90: 3d 3d 20 54 59 50 45 5f 43 48 45 43 4b 5f 42 55  == TYPE_CHECK_BU
7ea0: 54 54 4f 4e 29 20 7b 0a 09 69 66 20 28 62 75 74  TTON) {..if (but
7eb0: 50 74 72 2d 3e 66 6c 61 67 73 20 26 20 53 45 4c  Ptr->flags & SEL
7ec0: 45 43 54 45 44 29 20 7b 0a 09 20 20 20 20 69 66  ECTED) {..    if
7ed0: 20 28 54 63 6c 5f 53 65 74 56 61 72 28 62 75 74   (Tcl_SetVar(but
7ee0: 50 74 72 2d 3e 69 6e 74 65 72 70 2c 20 62 75 74  Ptr->interp, but
7ef0: 50 74 72 2d 3e 73 65 6c 56 61 72 4e 61 6d 65 2c  Ptr->selVarName,
7f00: 20 62 75 74 50 74 72 2d 3e 6f 66 66 56 61 6c 75   butPtr->offValu
7f10: 65 2c 0a 09 09 20 20 20 20 54 43 4c 5f 47 4c 4f  e,...    TCL_GLO
7f20: 42 41 4c 5f 4f 4e 4c 59 7c 54 43 4c 5f 4c 45 41  BAL_ONLY|TCL_LEA
7f30: 56 45 5f 45 52 52 5f 4d 53 47 29 20 3d 3d 20 4e  VE_ERR_MSG) == N
7f40: 55 4c 4c 29 20 7b 0a 09 09 72 65 74 75 72 6e 20  ULL) {...return 
7f50: 54 43 4c 5f 45 52 52 4f 52 3b 0a 09 20 20 20 20  TCL_ERROR;..    
7f60: 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20  }..} else {..   
7f70: 20 69 66 20 28 54 63 6c 5f 53 65 74 56 61 72 28   if (Tcl_SetVar(
7f80: 62 75 74 50 74 72 2d 3e 69 6e 74 65 72 70 2c 20  butPtr->interp, 
7f90: 62 75 74 50 74 72 2d 3e 73 65 6c 56 61 72 4e 61  butPtr->selVarNa
7fa0: 6d 65 2c 20 62 75 74 50 74 72 2d 3e 6f 6e 56 61  me, butPtr->onVa
7fb0: 6c 75 65 2c 0a 09 09 20 20 20 20 54 43 4c 5f 47  lue,...    TCL_G
7fc0: 4c 4f 42 41 4c 5f 4f 4e 4c 59 7c 54 43 4c 5f 4c  LOBAL_ONLY|TCL_L
7fd0: 45 41 56 45 5f 45 52 52 5f 4d 53 47 29 20 3d 3d  EAVE_ERR_MSG) ==
7fe0: 20 4e 55 4c 4c 29 20 7b 0a 09 09 72 65 74 75 72   NULL) {...retur
7ff0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 09 20 20  n TCL_ERROR;..  
8000: 20 20 7d 0a 09 7d 0a 20 20 20 20 7d 20 65 6c 73    }..}.    } els
8010: 65 20 69 66 20 28 62 75 74 50 74 72 2d 3e 74 79  e if (butPtr->ty
8020: 70 65 20 3d 3d 20 54 59 50 45 5f 52 41 44 49 4f  pe == TYPE_RADIO
8030: 5f 42 55 54 54 4f 4e 29 20 7b 0a 09 69 66 20 28  _BUTTON) {..if (
8040: 54 63 6c 5f 53 65 74 56 61 72 28 62 75 74 50 74  Tcl_SetVar(butPt
8050: 72 2d 3e 69 6e 74 65 72 70 2c 20 62 75 74 50 74  r->interp, butPt
8060: 72 2d 3e 73 65 6c 56 61 72 4e 61 6d 65 2c 20 62  r->selVarName, b
8070: 75 74 50 74 72 2d 3e 6f 6e 56 61 6c 75 65 2c 0a  utPtr->onValue,.
8080: 09 09 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  ..TCL_GLOBAL_ONL
8090: 59 7c 54 43 4c 5f 4c 45 41 56 45 5f 45 52 52 5f  Y|TCL_LEAVE_ERR_
80a0: 4d 53 47 29 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a  MSG) == NULL) {.
80b0: 09 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
80c0: 45 52 52 4f 52 3b 0a 09 7d 0a 20 20 20 20 7d 0a  ERROR;..}.    }.
80d0: 20 20 20 20 69 66 20 28 28 62 75 74 50 74 72 2d      if ((butPtr-
80e0: 3e 74 79 70 65 20 21 3d 20 54 59 50 45 5f 4c 41  >type != TYPE_LA
80f0: 42 45 4c 29 20 26 26 20 28 62 75 74 50 74 72 2d  BEL) && (butPtr-
8100: 3e 63 6f 6d 6d 61 6e 64 20 21 3d 20 4e 55 4c 4c  >command != NULL
8110: 29 29 20 7b 0a 09 72 65 74 75 72 6e 20 54 6b 43  )) {..return TkC
8120: 6f 70 79 41 6e 64 47 6c 6f 62 61 6c 45 76 61 6c  opyAndGlobalEval
8130: 28 62 75 74 50 74 72 2d 3e 69 6e 74 65 72 70 2c  (butPtr->interp,
8140: 20 62 75 74 50 74 72 2d 3e 63 6f 6d 6d 61 6e 64   butPtr->command
8150: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  );.    }.    ret
8160: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0c 0a  urn TCL_OK;.}...
8170: 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  /*. *-----------
8180: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8190: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
81a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
81b0: 2d 2d 2d 0a 20 2a 0a 20 2a 20 42 75 74 74 6f 6e  ---. *. * Button
81c0: 56 61 72 50 72 6f 63 20 2d 2d 0a 20 2a 0a 20 2a  VarProc --. *. *
81d0: 09 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20  .This procedure 
81e0: 69 73 20 69 6e 76 6f 6b 65 64 20 77 68 65 6e 20  is invoked when 
81f0: 73 6f 6d 65 6f 6e 65 20 63 68 61 6e 67 65 73 20  someone changes 
8200: 74 68 65 0a 20 2a 09 73 74 61 74 65 20 76 61 72  the. *.state var
8210: 69 61 62 6c 65 20 61 73 73 6f 63 69 61 74 65 64  iable associated
8220: 20 77 69 74 68 20 61 20 72 61 64 69 6f 20 62 75   with a radio bu
8230: 74 74 6f 6e 2e 20 20 44 65 70 65 6e 64 69 6e 67  tton.  Depending
8240: 0a 20 2a 09 6f 6e 20 74 68 65 20 6e 65 77 20 76  . *.on the new v
8250: 61 6c 75 65 20 6f 66 20 74 68 65 20 62 75 74 74  alue of the butt
8260: 6f 6e 27 73 20 76 61 72 69 61 62 6c 65 2c 20 74  on's variable, t
8270: 68 65 20 62 75 74 74 6f 6e 0a 20 2a 09 6d 61 79  he button. *.may
8280: 20 62 65 20 73 65 6c 65 63 74 65 64 20 6f 72 20   be selected or 
8290: 64 65 73 65 6c 65 63 74 65 64 2e 0a 20 2a 0a 20  deselected.. *. 
82a0: 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 4e 55  * Results:. *.NU
82b0: 4c 4c 20 69 73 20 61 6c 77 61 79 73 20 72 65 74  LL is always ret
82c0: 75 72 6e 65 64 2e 0a 20 2a 0a 20 2a 20 53 69 64  urned.. *. * Sid
82d0: 65 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 54 68  e effects:. *.Th
82e0: 65 20 62 75 74 74 6f 6e 20 6d 61 79 20 62 65 63  e button may bec
82f0: 6f 6d 65 20 73 65 6c 65 63 74 65 64 20 6f 72 20  ome selected or 
8300: 64 65 73 65 6c 65 63 74 65 64 2e 0a 20 2a 0a 20  deselected.. *. 
8310: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *---------------
8320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8340: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
8350: 20 2a 2f 0a 0a 09 2f 2a 20 41 52 47 53 55 53 45   */.../* ARGSUSE
8360: 44 20 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72  D */.static char
8370: 20 2a 0a 42 75 74 74 6f 6e 56 61 72 50 72 6f 63   *.ButtonVarProc
8380: 28 63 6c 69 65 6e 74 44 61 74 61 2c 20 69 6e 74  (clientData, int
8390: 65 72 70 2c 20 6e 61 6d 65 31 2c 20 6e 61 6d 65  erp, name1, name
83a0: 32 2c 20 66 6c 61 67 73 29 0a 20 20 20 20 43 6c  2, flags).    Cl
83b0: 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44  ientData clientD
83c0: 61 74 61 3b 09 2f 2a 20 49 6e 66 6f 72 6d 61 74  ata;./* Informat
83d0: 69 6f 6e 20 61 62 6f 75 74 20 62 75 74 74 6f 6e  ion about button
83e0: 2e 20 2a 2f 0a 20 20 20 20 54 63 6c 5f 49 6e 74  . */.    Tcl_Int
83f0: 65 72 70 20 2a 69 6e 74 65 72 70 3b 09 09 2f 2a  erp *interp;../*
8400: 20 49 6e 74 65 72 70 72 65 74 65 72 20 63 6f 6e   Interpreter con
8410: 74 61 69 6e 69 6e 67 20 76 61 72 69 61 62 6c 65  taining variable
8420: 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 6e  . */.    char *n
8430: 61 6d 65 31 3b 09 09 2f 2a 20 4e 61 6d 65 20 6f  ame1;../* Name o
8440: 66 20 76 61 72 69 61 62 6c 65 2e 20 2a 2f 0a 20  f variable. */. 
8450: 20 20 20 63 68 61 72 20 2a 6e 61 6d 65 32 3b 09     char *name2;.
8460: 09 2f 2a 20 53 65 63 6f 6e 64 20 70 61 72 74 20  ./* Second part 
8470: 6f 66 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65  of variable name
8480: 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 66 6c 61  . */.    int fla
8490: 67 73 3b 09 09 09 2f 2a 20 49 6e 66 6f 72 6d 61  gs;.../* Informa
84a0: 74 69 6f 6e 20 61 62 6f 75 74 20 77 68 61 74 20  tion about what 
84b0: 68 61 70 70 65 6e 65 64 2e 20 2a 2f 0a 7b 0a 20  happened. */.{. 
84c0: 20 20 20 72 65 67 69 73 74 65 72 20 42 75 74 74     register Butt
84d0: 6f 6e 20 2a 62 75 74 50 74 72 20 3d 20 28 42 75  on *butPtr = (Bu
84e0: 74 74 6f 6e 20 2a 29 20 63 6c 69 65 6e 74 44 61  tton *) clientDa
84f0: 74 61 3b 0a 20 20 20 20 63 68 61 72 20 2a 76 61  ta;.    char *va
8500: 6c 75 65 3b 0a 0a 20 20 20 20 2f 2a 0a 20 20 20  lue;..    /*.   
8510: 20 20 2a 20 49 66 20 74 68 65 20 76 61 72 69 61    * If the varia
8520: 62 6c 65 20 69 73 20 62 65 69 6e 67 20 75 6e 73  ble is being uns
8530: 65 74 2c 20 74 68 65 6e 20 6a 75 73 74 20 72 65  et, then just re
8540: 2d 65 73 74 61 62 6c 69 73 68 20 74 68 65 0a 20  -establish the. 
8550: 20 20 20 20 2a 20 74 72 61 63 65 20 75 6e 6c 65      * trace unle
8560: 73 73 20 74 68 65 20 77 68 6f 6c 65 20 69 6e 74  ss the whole int
8570: 65 72 70 72 65 74 65 72 20 69 73 20 67 6f 69 6e  erpreter is goin
8580: 67 20 61 77 61 79 2e 0a 20 20 20 20 20 2a 2f 0a  g away..     */.
8590: 0a 20 20 20 20 69 66 20 28 66 6c 61 67 73 20 26  .    if (flags &
85a0: 20 54 43 4c 5f 54 52 41 43 45 5f 55 4e 53 45 54   TCL_TRACE_UNSET
85b0: 53 29 20 7b 0a 09 62 75 74 50 74 72 2d 3e 66 6c  S) {..butPtr->fl
85c0: 61 67 73 20 26 3d 20 7e 53 45 4c 45 43 54 45 44  ags &= ~SELECTED
85d0: 3b 0a 09 69 66 20 28 28 66 6c 61 67 73 20 26 20  ;..if ((flags & 
85e0: 54 43 4c 5f 54 52 41 43 45 5f 44 45 53 54 52 4f  TCL_TRACE_DESTRO
85f0: 59 45 44 29 20 26 26 20 21 28 66 6c 61 67 73 20  YED) && !(flags 
8600: 26 20 54 43 4c 5f 49 4e 54 45 52 50 5f 44 45 53  & TCL_INTERP_DES
8610: 54 52 4f 59 45 44 29 29 20 7b 0a 09 20 20 20 20  TROYED)) {..    
8620: 54 63 6c 5f 54 72 61 63 65 56 61 72 28 69 6e 74  Tcl_TraceVar(int
8630: 65 72 70 2c 20 62 75 74 50 74 72 2d 3e 73 65 6c  erp, butPtr->sel
8640: 56 61 72 4e 61 6d 65 2c 0a 09 09 20 20 20 20 54  VarName,...    T
8650: 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 7c 54  CL_GLOBAL_ONLY|T
8660: 43 4c 5f 54 52 41 43 45 5f 57 52 49 54 45 53 7c  CL_TRACE_WRITES|
8670: 54 43 4c 5f 54 52 41 43 45 5f 55 4e 53 45 54 53  TCL_TRACE_UNSETS
8680: 2c 0a 09 09 20 20 20 20 42 75 74 74 6f 6e 56 61  ,...    ButtonVa
8690: 72 50 72 6f 63 2c 20 63 6c 69 65 6e 74 44 61 74  rProc, clientDat
86a0: 61 29 3b 0a 09 7d 0a 09 67 6f 74 6f 20 72 65 64  a);..}..goto red
86b0: 69 73 70 6c 61 79 3b 0a 20 20 20 20 7d 0a 0a 20  isplay;.    }.. 
86c0: 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20 55 73 65     /*.     * Use
86d0: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
86e0: 65 20 76 61 72 69 61 62 6c 65 20 74 6f 20 75 70  e variable to up
86f0: 64 61 74 65 20 74 68 65 20 73 65 6c 65 63 74 65  date the selecte
8700: 64 20 73 74 61 74 75 73 20 6f 66 0a 20 20 20 20  d status of.    
8710: 20 2a 20 74 68 65 20 62 75 74 74 6f 6e 2e 0a 20   * the button.. 
8720: 20 20 20 20 2a 2f 0a 0a 20 20 20 20 76 61 6c 75      */..    valu
8730: 65 20 3d 20 54 63 6c 5f 47 65 74 56 61 72 28 69  e = Tcl_GetVar(i
8740: 6e 74 65 72 70 2c 20 62 75 74 50 74 72 2d 3e 73  nterp, butPtr->s
8750: 65 6c 56 61 72 4e 61 6d 65 2c 20 54 43 4c 5f 47  elVarName, TCL_G
8760: 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 20 20 20  LOBAL_ONLY);.   
8770: 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 4e 55   if (value == NU
8780: 4c 4c 29 20 7b 0a 09 76 61 6c 75 65 20 3d 20 22  LL) {..value = "
8790: 22 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20  ";.    }.    if 
87a0: 28 73 74 72 63 6d 70 28 76 61 6c 75 65 2c 20 62  (strcmp(value, b
87b0: 75 74 50 74 72 2d 3e 6f 6e 56 61 6c 75 65 29 20  utPtr->onValue) 
87c0: 3d 3d 20 30 29 20 7b 0a 09 69 66 20 28 62 75 74  == 0) {..if (but
87d0: 50 74 72 2d 3e 66 6c 61 67 73 20 26 20 53 45 4c  Ptr->flags & SEL
87e0: 45 43 54 45 44 29 20 7b 0a 09 20 20 20 20 72 65  ECTED) {..    re
87f0: 74 75 72 6e 20 28 63 68 61 72 20 2a 29 20 4e 55  turn (char *) NU
8800: 4c 4c 3b 0a 09 7d 0a 09 62 75 74 50 74 72 2d 3e  LL;..}..butPtr->
8810: 66 6c 61 67 73 20 7c 3d 20 53 45 4c 45 43 54 45  flags |= SELECTE
8820: 44 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20 69 66  D;.    } else if
8830: 20 28 62 75 74 50 74 72 2d 3e 66 6c 61 67 73 20   (butPtr->flags 
8840: 26 20 53 45 4c 45 43 54 45 44 29 20 7b 0a 09 62  & SELECTED) {..b
8850: 75 74 50 74 72 2d 3e 66 6c 61 67 73 20 26 3d 20  utPtr->flags &= 
8860: 7e 53 45 4c 45 43 54 45 44 3b 0a 20 20 20 20 7d  ~SELECTED;.    }
8870: 20 65 6c 73 65 20 7b 0a 09 72 65 74 75 72 6e 20   else {..return 
8880: 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 3b 0a 20  (char *) NULL;. 
8890: 20 20 20 7d 0a 0a 20 20 20 20 72 65 64 69 73 70     }..    redisp
88a0: 6c 61 79 3a 0a 20 20 20 20 69 66 20 28 28 62 75  lay:.    if ((bu
88b0: 74 50 74 72 2d 3e 74 6b 77 69 6e 20 21 3d 20 4e  tPtr->tkwin != N
88c0: 55 4c 4c 29 20 26 26 20 54 6b 5f 49 73 4d 61 70  ULL) && Tk_IsMap
88d0: 70 65 64 28 62 75 74 50 74 72 2d 3e 74 6b 77 69  ped(butPtr->tkwi
88e0: 6e 29 0a 09 20 20 20 20 26 26 20 21 28 62 75 74  n)..    && !(but
88f0: 50 74 72 2d 3e 66 6c 61 67 73 20 26 20 52 45 44  Ptr->flags & RED
8900: 52 41 57 5f 50 45 4e 44 49 4e 47 29 29 20 7b 0a  RAW_PENDING)) {.
8910: 09 54 63 6c 5f 44 6f 57 68 65 6e 49 64 6c 65 28  .Tcl_DoWhenIdle(
8920: 44 69 73 70 6c 61 79 42 75 74 74 6f 6e 2c 20 28  DisplayButton, (
8930: 43 6c 69 65 6e 74 44 61 74 61 29 20 62 75 74 50  ClientData) butP
8940: 74 72 29 3b 0a 09 62 75 74 50 74 72 2d 3e 66 6c  tr);..butPtr->fl
8950: 61 67 73 20 7c 3d 20 52 45 44 52 41 57 5f 50 45  ags |= REDRAW_PE
8960: 4e 44 49 4e 47 3b 0a 20 20 20 20 7d 0a 20 20 20  NDING;.    }.   
8970: 20 72 65 74 75 72 6e 20 28 63 68 61 72 20 2a 29   return (char *)
8980: 20 4e 55 4c 4c 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a   NULL;.}.../*. *
8990: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
89a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
89b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
89c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
89d0: 2a 0a 20 2a 20 42 75 74 74 6f 6e 54 65 78 74 56  *. * ButtonTextV
89e0: 61 72 50 72 6f 63 20 2d 2d 0a 20 2a 0a 20 2a 09  arProc --. *. *.
89f0: 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 69  This procedure i
8a00: 73 20 69 6e 76 6f 6b 65 64 20 77 68 65 6e 20 73  s invoked when s
8a10: 6f 6d 65 6f 6e 65 20 63 68 61 6e 67 65 73 20 74  omeone changes t
8a20: 68 65 20 76 61 72 69 61 62 6c 65 0a 20 2a 09 77  he variable. *.w
8a30: 68 6f 73 65 20 63 6f 6e 74 65 6e 74 73 20 61 72  hose contents ar
8a40: 65 20 74 6f 20 62 65 20 64 69 73 70 6c 61 79 65  e to be displaye
8a50: 64 20 69 6e 20 61 20 62 75 74 74 6f 6e 2e 0a 20  d in a button.. 
8a60: 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a  *. * Results:. *
8a70: 09 4e 55 4c 4c 20 69 73 20 61 6c 77 61 79 73 20  .NULL is always 
8a80: 72 65 74 75 72 6e 65 64 2e 0a 20 2a 0a 20 2a 20  returned.. *. * 
8a90: 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 20 2a  Side effects:. *
8aa0: 09 54 68 65 20 74 65 78 74 20 64 69 73 70 6c 61  .The text displa
8ab0: 79 65 64 20 69 6e 20 74 68 65 20 62 75 74 74 6f  yed in the butto
8ac0: 6e 20 77 69 6c 6c 20 63 68 61 6e 67 65 20 74 6f  n will change to
8ad0: 20 6d 61 74 63 68 20 74 68 65 0a 20 2a 09 76 61   match the. *.va
8ae0: 72 69 61 62 6c 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d  riable.. *. *---
8af0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8b00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8b10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8b20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a  -----------. */.
8b30: 0a 09 2f 2a 20 41 52 47 53 55 53 45 44 20 2a 2f  ../* ARGSUSED */
8b40: 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a 0a 42  .static char *.B
8b50: 75 74 74 6f 6e 54 65 78 74 56 61 72 50 72 6f 63  uttonTextVarProc
8b60: 28 63 6c 69 65 6e 74 44 61 74 61 2c 20 69 6e 74  (clientData, int
8b70: 65 72 70 2c 20 6e 61 6d 65 31 2c 20 6e 61 6d 65  erp, name1, name
8b80: 32 2c 20 66 6c 61 67 73 29 0a 20 20 20 20 43 6c  2, flags).    Cl
8b90: 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44  ientData clientD
8ba0: 61 74 61 3b 09 2f 2a 20 49 6e 66 6f 72 6d 61 74  ata;./* Informat
8bb0: 69 6f 6e 20 61 62 6f 75 74 20 62 75 74 74 6f 6e  ion about button
8bc0: 2e 20 2a 2f 0a 20 20 20 20 54 63 6c 5f 49 6e 74  . */.    Tcl_Int
8bd0: 65 72 70 20 2a 69 6e 74 65 72 70 3b 09 09 2f 2a  erp *interp;../*
8be0: 20 49 6e 74 65 72 70 72 65 74 65 72 20 63 6f 6e   Interpreter con
8bf0: 74 61 69 6e 69 6e 67 20 76 61 72 69 61 62 6c 65  taining variable
8c00: 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 6e  . */.    char *n
8c10: 61 6d 65 31 3b 09 09 2f 2a 20 4e 6f 74 20 75 73  ame1;../* Not us
8c20: 65 64 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ed. */.    char 
8c30: 2a 6e 61 6d 65 32 3b 09 09 2f 2a 20 4e 6f 74 20  *name2;../* Not 
8c40: 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20 69 6e 74  used. */.    int
8c50: 20 66 6c 61 67 73 3b 09 09 09 2f 2a 20 49 6e 66   flags;.../* Inf
8c60: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 77  ormation about w
8c70: 68 61 74 20 68 61 70 70 65 6e 65 64 2e 20 2a 2f  hat happened. */
8c80: 0a 7b 0a 20 20 20 20 72 65 67 69 73 74 65 72 20  .{.    register 
8c90: 42 75 74 74 6f 6e 20 2a 62 75 74 50 74 72 20 3d  Button *butPtr =
8ca0: 20 28 42 75 74 74 6f 6e 20 2a 29 20 63 6c 69 65   (Button *) clie
8cb0: 6e 74 44 61 74 61 3b 0a 20 20 20 20 63 68 61 72  ntData;.    char
8cc0: 20 2a 76 61 6c 75 65 3b 0a 0a 20 20 20 20 2f 2a   *value;..    /*
8cd0: 0a 20 20 20 20 20 2a 20 49 66 20 74 68 65 20 76  .     * If the v
8ce0: 61 72 69 61 62 6c 65 20 69 73 20 75 6e 73 65 74  ariable is unset
8cf0: 2c 20 74 68 65 6e 20 69 6d 6d 65 64 69 61 74 65  , then immediate
8d00: 6c 79 20 72 65 63 72 65 61 74 65 20 69 74 20 75  ly recreate it u
8d10: 6e 6c 65 73 73 0a 20 20 20 20 20 2a 20 74 68 65  nless.     * the
8d20: 20 77 68 6f 6c 65 20 69 6e 74 65 72 70 72 65 74   whole interpret
8d30: 65 72 20 69 73 20 67 6f 69 6e 67 20 61 77 61 79  er is going away
8d40: 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 69  ..     */..    i
8d50: 66 20 28 66 6c 61 67 73 20 26 20 54 43 4c 5f 54  f (flags & TCL_T
8d60: 52 41 43 45 5f 55 4e 53 45 54 53 29 20 7b 0a 09  RACE_UNSETS) {..
8d70: 69 66 20 28 28 66 6c 61 67 73 20 26 20 54 43 4c  if ((flags & TCL
8d80: 5f 54 52 41 43 45 5f 44 45 53 54 52 4f 59 45 44  _TRACE_DESTROYED
8d90: 29 20 26 26 20 21 28 66 6c 61 67 73 20 26 20 54  ) && !(flags & T
8da0: 43 4c 5f 49 4e 54 45 52 50 5f 44 45 53 54 52 4f  CL_INTERP_DESTRO
8db0: 59 45 44 29 29 20 7b 0a 09 20 20 20 20 54 63 6c  YED)) {..    Tcl
8dc0: 5f 53 65 74 56 61 72 28 69 6e 74 65 72 70 2c 20  _SetVar(interp, 
8dd0: 62 75 74 50 74 72 2d 3e 74 65 78 74 56 61 72 4e  butPtr->textVarN
8de0: 61 6d 65 2c 20 62 75 74 50 74 72 2d 3e 74 65 78  ame, butPtr->tex
8df0: 74 2c 0a 09 09 20 20 20 20 54 43 4c 5f 47 4c 4f  t,...    TCL_GLO
8e00: 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 09 20 20 20 20  BAL_ONLY);..    
8e10: 54 63 6c 5f 54 72 61 63 65 56 61 72 28 69 6e 74  Tcl_TraceVar(int
8e20: 65 72 70 2c 20 62 75 74 50 74 72 2d 3e 74 65 78  erp, butPtr->tex
8e30: 74 56 61 72 4e 61 6d 65 2c 0a 09 09 20 20 20 20  tVarName,...    
8e40: 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 7c  TCL_GLOBAL_ONLY|
8e50: 54 43 4c 5f 54 52 41 43 45 5f 57 52 49 54 45 53  TCL_TRACE_WRITES
8e60: 7c 54 43 4c 5f 54 52 41 43 45 5f 55 4e 53 45 54  |TCL_TRACE_UNSET
8e70: 53 2c 0a 09 09 20 20 20 20 42 75 74 74 6f 6e 54  S,...    ButtonT
8e80: 65 78 74 56 61 72 50 72 6f 63 2c 20 63 6c 69 65  extVarProc, clie
8e90: 6e 74 44 61 74 61 29 3b 0a 09 7d 0a 09 72 65 74  ntData);..}..ret
8ea0: 75 72 6e 20 28 63 68 61 72 20 2a 29 20 4e 55 4c  urn (char *) NUL
8eb0: 4c 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 76 61  L;.    }..    va
8ec0: 6c 75 65 20 3d 20 54 63 6c 5f 47 65 74 56 61 72  lue = Tcl_GetVar
8ed0: 28 69 6e 74 65 72 70 2c 20 62 75 74 50 74 72 2d  (interp, butPtr-
8ee0: 3e 74 65 78 74 56 61 72 4e 61 6d 65 2c 20 54 43  >textVarName, TC
8ef0: 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
8f00: 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
8f10: 20 4e 55 4c 4c 29 20 7b 0a 09 76 61 6c 75 65 20   NULL) {..value 
8f20: 3d 20 22 22 3b 0a 20 20 20 20 7d 0a 20 20 20 20  = "";.    }.    
8f30: 69 66 20 28 62 75 74 50 74 72 2d 3e 74 65 78 74  if (butPtr->text
8f40: 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 63 6b 66   != NULL) {..ckf
8f50: 72 65 65 28 62 75 74 50 74 72 2d 3e 74 65 78 74  ree(butPtr->text
8f60: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 75 74  );.    }.    but
8f70: 50 74 72 2d 3e 74 65 78 74 20 3d 20 28 63 68 61  Ptr->text = (cha
8f80: 72 20 2a 29 20 63 6b 61 6c 6c 6f 63 28 28 75 6e  r *) ckalloc((un
8f90: 73 69 67 6e 65 64 29 20 28 73 74 72 6c 65 6e 28  signed) (strlen(
8fa0: 76 61 6c 75 65 29 20 2b 20 31 29 29 3b 0a 20 20  value) + 1));.  
8fb0: 20 20 73 74 72 63 70 79 28 62 75 74 50 74 72 2d    strcpy(butPtr-
8fc0: 3e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0a 20  >text, value);. 
8fd0: 20 20 20 43 6f 6d 70 75 74 65 42 75 74 74 6f 6e     ComputeButton
8fe0: 47 65 6f 6d 65 74 72 79 28 62 75 74 50 74 72 29  Geometry(butPtr)
8ff0: 3b 0a 0a 20 20 20 20 69 66 20 28 28 62 75 74 50  ;..    if ((butP
9000: 74 72 2d 3e 74 6b 77 69 6e 20 21 3d 20 4e 55 4c  tr->tkwin != NUL
9010: 4c 29 20 26 26 20 54 6b 5f 49 73 4d 61 70 70 65  L) && Tk_IsMappe
9020: 64 28 62 75 74 50 74 72 2d 3e 74 6b 77 69 6e 29  d(butPtr->tkwin)
9030: 0a 09 20 20 20 20 26 26 20 21 28 62 75 74 50 74  ..    && !(butPt
9040: 72 2d 3e 66 6c 61 67 73 20 26 20 52 45 44 52 41  r->flags & REDRA
9050: 57 5f 50 45 4e 44 49 4e 47 29 29 20 7b 0a 09 54  W_PENDING)) {..T
9060: 63 6c 5f 44 6f 57 68 65 6e 49 64 6c 65 28 44 69  cl_DoWhenIdle(Di
9070: 73 70 6c 61 79 42 75 74 74 6f 6e 2c 20 28 43 6c  splayButton, (Cl
9080: 69 65 6e 74 44 61 74 61 29 20 62 75 74 50 74 72  ientData) butPtr
9090: 29 3b 0a 09 62 75 74 50 74 72 2d 3e 66 6c 61 67  );..butPtr->flag
90a0: 73 20 7c 3d 20 52 45 44 52 41 57 5f 50 45 4e 44  s |= REDRAW_PEND
90b0: 49 4e 47 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  ING;.    }.    r
90c0: 65 74 75 72 6e 20 28 63 68 61 72 20 2a 29 20 4e  eturn (char *) N
90d0: 55 4c 4c 3b 0a 7d 0a                             ULL;.}.