Hex Artifact Content

Artifact 17d51011cb357287232853b4276e06367114bf81:


0000: 2f 2a 20 0a 20 2a 20 74 6b 50 61 63 6b 2e 63 20  /* . * tkPack.c 
0010: 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69 73 20 66 69  --. *. *.This fi
0020: 6c 65 20 63 6f 6e 74 61 69 6e 73 20 63 6f 64 65  le contains code
0030: 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68   to implement th
0040: 65 20 22 70 61 63 6b 65 72 22 0a 20 2a 09 67 65  e "packer". *.ge
0050: 6f 6d 65 74 72 79 20 6d 61 6e 61 67 65 72 20 66  ometry manager f
0060: 6f 72 20 54 6b 2e 0a 20 2a 0a 20 2a 20 43 6f 70  or Tk.. *. * Cop
0070: 79 72 69 67 68 74 20 28 63 29 20 31 39 39 30 2d  yright (c) 1990-
0080: 31 39 39 34 20 54 68 65 20 52 65 67 65 6e 74 73  1994 The Regents
0090: 20 6f 66 20 74 68 65 20 55 6e 69 76 65 72 73 69   of the Universi
00a0: 74 79 20 6f 66 20 43 61 6c 69 66 6f 72 6e 69 61  ty of California
00b0: 2e 0a 20 2a 20 43 6f 70 79 72 69 67 68 74 20 28  .. * Copyright (
00c0: 63 29 20 31 39 39 34 2d 31 39 39 35 20 53 75 6e  c) 1994-1995 Sun
00d0: 20 4d 69 63 72 6f 73 79 73 74 65 6d 73 2c 20 49   Microsystems, I
00e0: 6e 63 2e 0a 20 2a 0a 20 2a 20 53 65 65 20 74 68  nc.. *. * See th
00f0: 65 20 66 69 6c 65 20 22 6c 69 63 65 6e 73 65 2e  e file "license.
0100: 74 65 72 6d 73 22 20 66 6f 72 20 69 6e 66 6f 72  terms" for infor
0110: 6d 61 74 69 6f 6e 20 6f 6e 20 75 73 61 67 65 20  mation on usage 
0120: 61 6e 64 20 72 65 64 69 73 74 72 69 62 75 74 69  and redistributi
0130: 6f 6e 0a 20 2a 20 6f 66 20 74 68 69 73 20 66 69  on. * of this fi
0140: 6c 65 2c 20 61 6e 64 20 66 6f 72 20 61 20 44 49  le, and for a DI
0150: 53 43 4c 41 49 4d 45 52 20 4f 46 20 41 4c 4c 20  SCLAIMER OF ALL 
0160: 57 41 52 52 41 4e 54 49 45 53 2e 0a 20 2a 2f 0a  WARRANTIES.. */.
0170: 0a 73 74 61 74 69 63 20 63 68 61 72 20 73 63 63  .static char scc
0180: 73 69 64 5b 5d 20 3d 20 22 40 28 23 29 20 74 6b  sid[] = "@(#) tk
0190: 50 61 63 6b 2e 63 20 31 2e 35 36 20 39 35 2f 31  Pack.c 1.56 95/1
01a0: 31 2f 32 34 20 31 37 3a 35 32 3a 31 31 22 3b 0a  1/24 17:52:11";.
01b0: 0a 23 69 6e 63 6c 75 64 65 20 22 74 6b 50 6f 72  .#include "tkPor
01c0: 74 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 74  t.h".#include "t
01d0: 6b 49 6e 74 2e 68 22 0a 0a 74 79 70 65 64 65 66  kInt.h"..typedef
01e0: 20 65 6e 75 6d 20 7b 54 4f 50 2c 20 42 4f 54 54   enum {TOP, BOTT
01f0: 4f 4d 2c 20 4c 45 46 54 2c 20 52 49 47 48 54 7d  OM, LEFT, RIGHT}
0200: 20 53 69 64 65 3b 0a 0a 2f 2a 20 46 6f 72 20 65   Side;../* For e
0210: 61 63 68 20 77 69 6e 64 6f 77 20 74 68 61 74 20  ach window that 
0220: 74 68 65 20 70 61 63 6b 65 72 20 63 61 72 65 73  the packer cares
0230: 20 61 62 6f 75 74 20 28 65 69 74 68 65 72 20 62   about (either b
0240: 65 63 61 75 73 65 0a 20 2a 20 74 68 65 20 77 69  ecause. * the wi
0250: 6e 64 6f 77 20 69 73 20 6d 61 6e 61 67 65 64 20  ndow is managed 
0260: 62 79 20 74 68 65 20 70 61 63 6b 65 72 20 6f 72  by the packer or
0270: 20 62 65 63 61 75 73 65 20 74 68 65 20 77 69 6e   because the win
0280: 64 6f 77 0a 20 2a 20 68 61 73 20 73 6c 61 76 65  dow. * has slave
0290: 73 20 74 68 61 74 20 61 72 65 20 6d 61 6e 61 67  s that are manag
02a0: 65 64 20 62 79 20 74 68 65 20 70 61 63 6b 65 72  ed by the packer
02b0: 29 2c 20 74 68 65 72 65 20 69 73 20 61 0a 20 2a  ), there is a. *
02c0: 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68   structure of th
02d0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 79 70 65  e following type
02e0: 3a 0a 20 2a 2f 0a 0a 74 79 70 65 64 65 66 20 73  :. */..typedef s
02f0: 74 72 75 63 74 20 50 61 63 6b 65 72 20 7b 0a 20  truct Packer {. 
0300: 20 20 20 54 6b 5f 57 69 6e 64 6f 77 20 74 6b 77     Tk_Window tkw
0310: 69 6e 3b 09 09 2f 2a 20 54 6b 20 74 6f 6b 65 6e  in;../* Tk token
0320: 20 66 6f 72 20 77 69 6e 64 6f 77 2e 20 20 4e 55   for window.  NU
0330: 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74 0a 09 09  LL means that...
0340: 09 09 20 2a 20 74 68 65 20 77 69 6e 64 6f 77 20  .. * the window 
0350: 68 61 73 20 62 65 65 6e 20 64 65 6c 65 74 65 64  has been deleted
0360: 2c 20 62 75 74 20 74 68 65 0a 09 09 09 09 20 2a  , but the..... *
0370: 20 70 61 63 6b 65 74 20 68 61 73 6e 27 74 20 68   packet hasn't h
0380: 61 64 20 61 20 63 68 61 6e 63 65 20 74 6f 20 63  ad a chance to c
0390: 6c 65 61 6e 20 75 70 0a 09 09 09 09 20 2a 20 79  lean up..... * y
03a0: 65 74 20 62 65 63 61 75 73 65 20 74 68 65 20 73  et because the s
03b0: 74 72 75 63 74 75 72 65 20 69 73 20 73 74 69 6c  tructure is stil
03c0: 6c 20 69 6e 0a 09 09 09 09 20 2a 20 75 73 65 2e  l in..... * use.
03d0: 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 50   */.    struct P
03e0: 61 63 6b 65 72 20 2a 6d 61 73 74 65 72 50 74 72  acker *masterPtr
03f0: 3b 09 2f 2a 20 4d 61 73 74 65 72 20 77 69 6e 64  ;./* Master wind
0400: 6f 77 20 77 69 74 68 69 6e 20 77 68 69 63 68 20  ow within which 
0410: 74 68 69 73 20 77 69 6e 64 6f 77 0a 09 09 09 09  this window.....
0420: 20 2a 20 69 73 20 70 61 63 6b 65 64 20 28 4e 55   * is packed (NU
0430: 4c 4c 20 6d 65 61 6e 73 20 74 68 69 73 20 77 69  LL means this wi
0440: 6e 64 6f 77 0a 09 09 09 09 20 2a 20 69 73 6e 27  ndow..... * isn'
0450: 74 20 6d 61 6e 61 67 65 64 20 62 79 20 74 68 65  t managed by the
0460: 20 70 61 63 6b 65 72 29 2e 20 2a 2f 0a 20 20 20   packer). */.   
0470: 20 73 74 72 75 63 74 20 50 61 63 6b 65 72 20 2a   struct Packer *
0480: 6e 65 78 74 50 74 72 3b 09 2f 2a 20 4e 65 78 74  nextPtr;./* Next
0490: 20 77 69 6e 64 6f 77 20 70 61 63 6b 65 64 20 77   window packed w
04a0: 69 74 68 69 6e 20 73 61 6d 65 0a 09 09 09 09 20  ithin same..... 
04b0: 2a 20 70 61 72 65 6e 74 2e 20 20 4c 69 73 74 20  * parent.  List 
04c0: 69 73 20 70 72 69 6f 72 69 74 79 2d 6f 72 64 65  is priority-orde
04d0: 72 65 64 3a 0a 09 09 09 09 20 2a 20 66 69 72 73  red:..... * firs
04e0: 74 20 6f 6e 20 6c 69 73 74 20 67 65 74 73 20 70  t on list gets p
04f0: 61 63 6b 65 64 20 66 69 72 73 74 2e 20 2a 2f 0a  acked first. */.
0500: 20 20 20 20 73 74 72 75 63 74 20 50 61 63 6b 65      struct Packe
0510: 72 20 2a 73 6c 61 76 65 50 74 72 3b 09 2f 2a 20  r *slavePtr;./* 
0520: 46 69 72 73 74 20 69 6e 20 6c 69 73 74 20 6f 66  First in list of
0530: 20 73 6c 61 76 65 73 20 70 61 63 6b 65 64 0a 09   slaves packed..
0540: 09 09 09 20 2a 20 69 6e 73 69 64 65 20 74 68 69  ... * inside thi
0550: 73 20 77 69 6e 64 6f 77 20 28 4e 55 4c 4c 20 6d  s window (NULL m
0560: 65 61 6e 73 0a 09 09 09 09 20 2a 20 6e 6f 20 70  eans..... * no p
0570: 61 63 6b 65 64 20 73 6c 61 76 65 73 29 2e 20 2a  acked slaves). *
0580: 2f 0a 20 20 20 20 53 69 64 65 20 73 69 64 65 3b  /.    Side side;
0590: 09 09 09 2f 2a 20 53 69 64 65 20 6f 66 20 70 61  .../* Side of pa
05a0: 72 65 6e 74 20 61 67 61 69 6e 73 74 20 77 68 69  rent against whi
05b0: 63 68 0a 09 09 09 09 20 2a 20 74 68 69 73 20 77  ch..... * this w
05c0: 69 6e 64 6f 77 20 69 73 20 70 61 63 6b 65 64 2e  indow is packed.
05d0: 20 2a 2f 0a 20 20 20 20 54 6b 5f 41 6e 63 68 6f   */.    Tk_Ancho
05e0: 72 20 61 6e 63 68 6f 72 3b 09 09 2f 2a 20 49 66  r anchor;../* If
05f0: 20 66 72 61 6d 65 20 61 6c 6c 6f 63 61 74 65 64   frame allocated
0600: 20 66 6f 72 20 77 69 6e 64 6f 77 20 69 73 20 6c   for window is l
0610: 61 72 67 65 72 0a 09 09 09 09 20 2a 20 74 68 61  arger..... * tha
0620: 6e 20 77 69 6e 64 6f 77 20 6e 65 65 64 73 2c 20  n window needs, 
0630: 74 68 69 73 20 69 6e 64 69 63 61 74 65 73 20 68  this indicates h
0640: 6f 77 0a 09 09 09 09 20 2a 20 77 68 65 72 65 20  ow..... * where 
0650: 74 6f 20 70 6f 73 69 74 69 6f 6e 20 77 69 6e 64  to position wind
0660: 6f 77 20 69 6e 20 66 72 61 6d 65 2e 20 2a 2f 0a  ow in frame. */.
0670: 20 20 20 20 69 6e 74 20 70 61 64 58 2c 20 70 61      int padX, pa
0680: 64 59 3b 09 09 2f 2a 20 54 6f 74 61 6c 20 61 64  dY;../* Total ad
0690: 64 69 74 69 6f 6e 61 6c 20 70 69 78 65 6c 73 20  ditional pixels 
06a0: 74 6f 20 6c 65 61 76 65 20 61 72 6f 75 6e 64 20  to leave around 
06b0: 74 68 65 0a 09 09 09 09 20 2a 20 77 69 6e 64 6f  the..... * windo
06c0: 77 20 28 68 61 6c 66 20 6f 66 20 74 68 69 73 20  w (half of this 
06d0: 73 70 61 63 65 20 69 73 20 6c 65 66 74 20 6f 6e  space is left on
06e0: 20 65 61 63 68 0a 09 09 09 09 20 2a 20 73 69 64   each..... * sid
06f0: 65 29 2e 20 20 54 68 69 73 20 69 73 20 73 70 61  e).  This is spa
0700: 63 65 20 2a 6f 75 74 73 69 64 65 2a 20 74 68 65  ce *outside* the
0710: 20 77 69 6e 64 6f 77 3a 0a 09 09 09 09 20 2a 20   window:..... * 
0720: 77 65 27 6c 6c 20 61 6c 6c 6f 63 61 74 65 20 65  we'll allocate e
0730: 78 74 72 61 20 73 70 61 63 65 20 69 6e 20 66 72  xtra space in fr
0740: 61 6d 65 20 62 75 74 0a 09 09 09 09 20 2a 20 77  ame but..... * w
0750: 6f 6e 27 74 20 65 6e 6c 61 72 67 65 20 77 69 6e  on't enlarge win
0760: 64 6f 77 29 2e 20 2a 2f 0a 20 20 20 20 69 6e 74  dow). */.    int
0770: 20 69 50 61 64 58 2c 20 69 50 61 64 59 3b 09 09   iPadX, iPadY;..
0780: 2f 2a 20 54 6f 74 61 6c 20 65 78 74 72 61 20 70  /* Total extra p
0790: 69 78 65 6c 73 20 74 6f 20 61 6c 6c 6f 63 61 74  ixels to allocat
07a0: 65 20 69 6e 73 69 64 65 20 74 68 65 0a 09 09 09  e inside the....
07b0: 09 20 2a 20 77 69 6e 64 6f 77 20 28 68 61 6c 66  . * window (half
07c0: 20 74 68 69 73 20 61 6d 6f 75 6e 74 20 77 69 6c   this amount wil
07d0: 6c 20 61 70 70 65 61 72 20 6f 6e 0a 09 09 09 09  l appear on.....
07e0: 20 2a 20 65 61 63 68 20 73 69 64 65 29 2e 20 2a   * each side). *
07f0: 2f 0a 20 20 20 20 69 6e 74 20 64 6f 75 62 6c 65  /.    int double
0800: 42 77 3b 09 09 2f 2a 20 54 77 69 63 65 20 74 68  Bw;../* Twice th
0810: 65 20 77 69 6e 64 6f 77 27 73 20 6c 61 73 74 20  e window's last 
0820: 6b 6e 6f 77 6e 20 62 6f 72 64 65 72 0a 09 09 09  known border....
0830: 09 20 2a 20 77 69 64 74 68 2e 20 20 49 66 20 74  . * width.  If t
0840: 68 69 73 20 63 68 61 6e 67 65 73 2c 20 74 68 65  his changes, the
0850: 20 77 69 6e 64 6f 77 0a 09 09 09 09 20 2a 20 6d   window..... * m
0860: 75 73 74 20 62 65 20 72 65 70 61 63 6b 65 64 20  ust be repacked 
0870: 77 69 74 68 69 6e 20 69 74 73 20 70 61 72 65 6e  within its paren
0880: 74 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61  t. */.    int *a
0890: 62 6f 72 74 50 74 72 3b 09 09 2f 2a 20 49 66 20  bortPtr;../* If 
08a0: 6e 6f 6e 2d 4e 55 4c 4c 2c 20 69 74 20 6d 65 61  non-NULL, it mea
08b0: 6e 73 20 74 68 61 74 20 74 68 65 72 65 20 69 73  ns that there is
08c0: 20 61 20 6e 65 73 74 65 64 0a 09 09 09 09 20 2a   a nested..... *
08d0: 20 63 61 6c 6c 20 74 6f 20 41 72 72 61 6e 67 65   call to Arrange
08e0: 50 61 63 6b 69 6e 67 20 61 6c 72 65 61 64 79 20  Packing already 
08f0: 77 6f 72 6b 69 6e 67 20 6f 6e 0a 09 09 09 09 20  working on..... 
0900: 2a 20 74 68 69 73 20 77 69 6e 64 6f 77 2e 20 20  * this window.  
0910: 2a 61 62 6f 72 74 50 74 72 20 6d 61 79 20 62 65  *abortPtr may be
0920: 20 73 65 74 20 74 6f 20 31 20 74 6f 0a 09 09 09   set to 1 to....
0930: 09 20 2a 20 61 62 6f 72 74 20 74 68 61 74 20 6e  . * abort that n
0940: 65 73 74 65 64 20 63 61 6c 6c 2e 20 20 54 68 69  ested call.  Thi
0950: 73 20 68 61 70 70 65 6e 73 2c 20 66 6f 72 0a 09  s happens, for..
0960: 09 09 09 20 2a 20 65 78 61 6d 70 6c 65 2c 20 69  ... * example, i
0970: 66 20 74 6b 77 69 6e 20 6f 72 20 61 6e 79 20 6f  f tkwin or any o
0980: 66 20 69 74 73 20 73 6c 61 76 65 73 0a 09 09 09  f its slaves....
0990: 09 20 2a 20 69 73 20 64 65 6c 65 74 65 64 2e 20  . * is deleted. 
09a0: 2a 2f 0a 20 20 20 20 69 6e 74 20 66 6c 61 67 73  */.    int flags
09b0: 3b 09 09 09 2f 2a 20 4d 69 73 63 65 6c 6c 61 6e  ;.../* Miscellan
09c0: 65 6f 75 73 20 66 6c 61 67 73 3b 20 20 73 65 65  eous flags;  see
09d0: 20 62 65 6c 6f 77 0a 09 09 09 09 20 2a 20 66 6f   below..... * fo
09e0: 72 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 20 2a  r definitions. *
09f0: 2f 0a 7d 20 50 61 63 6b 65 72 3b 0a 0a 2f 2a 0a  /.} Packer;../*.
0a00: 20 2a 20 46 6c 61 67 20 76 61 6c 75 65 73 20 66   * Flag values f
0a10: 6f 72 20 50 61 63 6b 65 72 20 73 74 72 75 63 74  or Packer struct
0a20: 75 72 65 73 3a 0a 20 2a 0a 20 2a 20 52 45 51 55  ures:. *. * REQU
0a30: 45 53 54 45 44 5f 52 45 50 41 43 4b 3a 09 09 31  ESTED_REPACK:..1
0a40: 20 6d 65 61 6e 73 20 61 20 54 63 6c 5f 44 6f 57   means a Tcl_DoW
0a50: 68 65 6e 49 64 6c 65 20 72 65 71 75 65 73 74 0a  henIdle request.
0a60: 20 2a 09 09 09 09 68 61 73 20 61 6c 72 65 61 64   *....has alread
0a70: 79 20 62 65 65 6e 20 6d 61 64 65 20 74 6f 20 72  y been made to r
0a80: 65 70 61 63 6b 0a 20 2a 09 09 09 09 61 6c 6c 20  epack. *....all 
0a90: 74 68 65 20 73 6c 61 76 65 73 20 6f 66 20 74 68  the slaves of th
0aa0: 69 73 20 77 69 6e 64 6f 77 2e 0a 20 2a 20 46 49  is window.. * FI
0ab0: 4c 4c 58 3a 09 09 09 31 20 6d 65 61 6e 73 20 69  LLX:...1 means i
0ac0: 66 20 66 72 61 6d 65 20 61 6c 6c 6f 63 61 74 65  f frame allocate
0ad0: 64 20 66 6f 72 20 77 69 6e 64 6f 77 0a 20 2a 09  d for window. *.
0ae0: 09 09 09 69 73 20 77 69 64 65 72 20 74 68 61 6e  ...is wider than
0af0: 20 77 69 6e 64 6f 77 20 6e 65 65 64 73 2c 20 65   window needs, e
0b00: 78 70 61 6e 64 20 77 69 6e 64 6f 77 0a 20 2a 09  xpand window. *.
0b10: 09 09 09 74 6f 20 66 69 6c 6c 20 66 72 61 6d 65  ...to fill frame
0b20: 2e 20 20 30 20 6d 65 61 6e 73 20 64 6f 6e 27 74  .  0 means don't
0b30: 20 6d 61 6b 65 20 77 69 6e 64 6f 77 0a 20 2a 09   make window. *.
0b40: 09 09 09 61 6e 79 20 6c 61 72 67 65 72 20 74 68  ...any larger th
0b50: 61 6e 20 6e 65 65 64 65 64 2e 0a 20 2a 20 46 49  an needed.. * FI
0b60: 4c 4c 59 3a 09 09 09 53 61 6d 65 20 61 73 20 46  LLY:...Same as F
0b70: 49 4c 4c 58 2c 20 65 78 63 65 70 74 20 66 6f 72  ILLX, except for
0b80: 20 68 65 69 67 68 74 2e 0a 20 2a 20 45 58 50 41   height.. * EXPA
0b90: 4e 44 3a 09 09 09 31 20 6d 65 61 6e 73 20 74 68  ND:...1 means th
0ba0: 69 73 20 77 69 6e 64 6f 77 27 73 20 66 72 61 6d  is window's fram
0bb0: 65 20 77 69 6c 6c 20 61 62 73 6f 72 62 20 61 6e  e will absorb an
0bc0: 79 0a 20 2a 09 09 09 09 65 78 74 72 61 20 73 70  y. *....extra sp
0bd0: 61 63 65 20 69 6e 20 74 68 65 20 70 61 72 65 6e  ace in the paren
0be0: 74 20 77 69 6e 64 6f 77 2e 0a 20 2a 20 4f 4c 44  t window.. * OLD
0bf0: 5f 53 54 59 4c 45 3a 09 09 09 31 20 6d 65 61 6e  _STYLE:...1 mean
0c00: 73 20 74 68 69 73 20 77 69 6e 64 6f 77 20 69 73  s this window is
0c10: 20 62 65 69 6e 67 20 6d 61 6e 61 67 65 64 20 77   being managed w
0c20: 69 74 68 0a 20 2a 09 09 09 09 74 68 65 20 6f 6c  ith. *....the ol
0c30: 64 2d 73 74 79 6c 65 20 70 61 63 6b 65 72 20 61  d-style packer a
0c40: 6c 67 6f 72 69 74 68 6d 73 20 28 62 65 66 6f 72  lgorithms (befor
0c50: 65 0a 20 2a 09 09 09 09 54 6b 20 76 65 72 73 69  e. *....Tk versi
0c60: 6f 6e 20 33 2e 33 29 2e 20 20 54 68 65 20 6d 61  on 3.3).  The ma
0c70: 69 6e 20 64 69 66 66 65 72 65 6e 63 65 20 69 73  in difference is
0c80: 0a 20 2a 09 09 09 09 74 68 61 74 20 70 61 64 64  . *....that padd
0c90: 69 6e 67 20 61 6e 64 20 66 69 6c 6c 69 6e 67 20  ing and filling 
0ca0: 61 72 65 20 64 6f 6e 65 20 64 69 66 66 65 72 65  are done differe
0cb0: 6e 74 6c 79 2e 0a 20 2a 20 44 4f 4e 54 5f 50 52  ntly.. * DONT_PR
0cc0: 4f 50 41 47 41 54 45 3a 09 09 31 20 6d 65 61 6e  OPAGATE:..1 mean
0cd0: 73 20 64 6f 6e 27 74 20 73 65 74 20 74 68 69 73  s don't set this
0ce0: 20 77 69 6e 64 6f 77 27 73 20 72 65 71 75 65 73   window's reques
0cf0: 74 65 64 0a 20 2a 09 09 09 09 73 69 7a 65 2e 20  ted. *....size. 
0d00: 20 30 20 6d 65 61 6e 73 20 69 66 20 74 68 69 73   0 means if this
0d10: 20 77 69 6e 64 6f 77 20 69 73 20 61 20 6d 61 73   window is a mas
0d20: 74 65 72 0a 20 2a 09 09 09 09 74 68 65 6e 20 54  ter. *....then T
0d30: 6b 20 77 69 6c 6c 20 73 65 74 20 69 74 73 20 72  k will set its r
0d40: 65 71 75 65 73 74 65 64 20 73 69 7a 65 20 74 6f  equested size to
0d50: 20 66 69 74 0a 20 2a 09 09 09 09 74 68 65 20 6e   fit. *....the n
0d60: 65 65 64 73 20 6f 66 20 69 74 73 20 73 6c 61 76  eeds of its slav
0d70: 65 73 2e 0a 20 2a 2f 0a 0a 23 64 65 66 69 6e 65  es.. */..#define
0d80: 20 52 45 51 55 45 53 54 45 44 5f 52 45 50 41 43   REQUESTED_REPAC
0d90: 4b 09 31 0a 23 64 65 66 69 6e 65 20 46 49 4c 4c  K.1.#define FILL
0da0: 58 09 09 09 32 0a 23 64 65 66 69 6e 65 20 46 49  X...2.#define FI
0db0: 4c 4c 59 09 09 09 34 0a 23 64 65 66 69 6e 65 20  LLY...4.#define 
0dc0: 45 58 50 41 4e 44 09 09 09 38 0a 23 64 65 66 69  EXPAND...8.#defi
0dd0: 6e 65 20 4f 4c 44 5f 53 54 59 4c 45 09 09 31 36  ne OLD_STYLE..16
0de0: 0a 23 64 65 66 69 6e 65 20 44 4f 4e 54 5f 50 52  .#define DONT_PR
0df0: 4f 50 41 47 41 54 45 09 09 33 32 0a 0a 2f 2a 0a  OPAGATE..32../*.
0e00: 20 2a 20 48 61 73 68 20 74 61 62 6c 65 20 75 73   * Hash table us
0e10: 65 64 20 74 6f 20 6d 61 70 20 66 72 6f 6d 20 54  ed to map from T
0e20: 6b 5f 57 69 6e 64 6f 77 20 74 6f 6b 65 6e 73 20  k_Window tokens 
0e30: 74 6f 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  to corresponding
0e40: 0a 20 2a 20 50 61 63 6b 65 72 20 73 74 72 75 63  . * Packer struc
0e50: 74 75 72 65 73 3a 0a 20 2a 2f 0a 0a 73 74 61 74  tures:. */..stat
0e60: 69 63 20 54 63 6c 5f 48 61 73 68 54 61 62 6c 65  ic Tcl_HashTable
0e70: 20 70 61 63 6b 65 72 48 61 73 68 54 61 62 6c 65   packerHashTable
0e80: 3b 0a 0a 2f 2a 0a 20 2a 20 48 61 76 65 20 73 74  ;../*. * Have st
0e90: 61 74 69 63 73 20 69 6e 20 74 68 69 73 20 6d 6f  atics in this mo
0ea0: 64 75 6c 65 20 62 65 65 6e 20 69 6e 69 74 69 61  dule been initia
0eb0: 6c 69 7a 65 64 3f 0a 20 2a 2f 0a 0a 73 74 61 74  lized?. */..stat
0ec0: 69 63 20 69 6e 74 20 69 6e 69 74 69 61 6c 69 7a  ic int initializ
0ed0: 65 64 20 3d 20 30 3b 0a 0a 2f 2a 0a 20 2a 20 54  ed = 0;../*. * T
0ee0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
0ef0: 75 63 74 75 72 65 20 69 73 20 74 68 65 20 6f 66  ucture is the of
0f00: 66 69 63 69 61 6c 20 74 79 70 65 20 72 65 63 6f  ficial type reco
0f10: 72 64 20 66 6f 72 20 74 68 65 0a 20 2a 20 70 61  rd for the. * pa
0f20: 63 6b 65 72 3a 0a 20 2a 2f 0a 0a 73 74 61 74 69  cker:. */..stati
0f30: 63 20 76 6f 69 64 09 09 50 61 63 6b 52 65 71 50  c void..PackReqP
0f40: 72 6f 63 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28  roc _ANSI_ARGS_(
0f50: 28 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65  (ClientData clie
0f60: 6e 74 44 61 74 61 2c 0a 09 09 09 20 20 20 20 54  ntData,....    T
0f70: 6b 5f 57 69 6e 64 6f 77 20 74 6b 77 69 6e 29 29  k_Window tkwin))
0f80: 3b 0a 73 74 61 74 69 63 20 76 6f 69 64 09 09 50  ;.static void..P
0f90: 61 63 6b 4c 6f 73 74 53 6c 61 76 65 50 72 6f 63  ackLostSlaveProc
0fa0: 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 43 6c   _ANSI_ARGS_((Cl
0fb0: 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44  ientData clientD
0fc0: 61 74 61 2c 0a 09 09 09 20 20 20 20 54 6b 5f 57  ata,....    Tk_W
0fd0: 69 6e 64 6f 77 20 74 6b 77 69 6e 29 29 3b 0a 0a  indow tkwin));..
0fe0: 73 74 61 74 69 63 20 54 6b 5f 47 65 6f 6d 4d 67  static Tk_GeomMg
0ff0: 72 20 70 61 63 6b 65 72 54 79 70 65 20 3d 20 7b  r packerType = {
1000: 0a 20 20 20 20 22 70 61 63 6b 22 2c 09 09 09 2f  .    "pack",.../
1010: 2a 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 50 61  * name */.    Pa
1020: 63 6b 52 65 71 50 72 6f 63 2c 09 09 2f 2a 20 72  ckReqProc,../* r
1030: 65 71 75 65 73 74 50 72 6f 63 20 2a 2f 0a 20 20  equestProc */.  
1040: 20 20 50 61 63 6b 4c 6f 73 74 53 6c 61 76 65 50    PackLostSlaveP
1050: 72 6f 63 2c 09 09 2f 2a 20 6c 6f 73 74 53 6c 61  roc,../* lostSla
1060: 76 65 50 72 6f 63 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  veProc */.};../*
1070: 0a 20 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c  . * Forward decl
1080: 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 70 72 6f  arations for pro
1090: 63 65 64 75 72 65 73 20 64 65 66 69 6e 65 64 20  cedures defined 
10a0: 6c 61 74 65 72 20 69 6e 20 74 68 69 73 20 66 69  later in this fi
10b0: 6c 65 3a 0a 20 2a 2f 0a 0a 73 74 61 74 69 63 20  le:. */..static 
10c0: 76 6f 69 64 09 09 41 72 72 61 6e 67 65 50 61 63  void..ArrangePac
10d0: 6b 69 6e 67 20 5f 41 4e 53 49 5f 41 52 47 53 5f  king _ANSI_ARGS_
10e0: 28 28 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69  ((ClientData cli
10f0: 65 6e 74 44 61 74 61 29 29 3b 0a 73 74 61 74 69  entData));.stati
1100: 63 20 69 6e 74 09 09 43 6f 6e 66 69 67 75 72 65  c int..Configure
1110: 53 6c 61 76 65 73 20 5f 41 4e 53 49 5f 41 52 47  Slaves _ANSI_ARG
1120: 53 5f 28 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a  S_((Tcl_Interp *
1130: 69 6e 74 65 72 70 2c 0a 09 09 09 20 20 20 20 54  interp,....    T
1140: 6b 5f 57 69 6e 64 6f 77 20 74 6b 77 69 6e 2c 20  k_Window tkwin, 
1150: 69 6e 74 20 61 72 67 63 2c 20 63 68 61 72 20 2a  int argc, char *
1160: 61 72 67 76 5b 5d 29 29 3b 0a 73 74 61 74 69 63  argv[]));.static
1170: 20 50 61 63 6b 65 72 20 2a 09 09 47 65 74 50 61   Packer *..GetPa
1180: 63 6b 65 72 20 5f 41 4e 53 49 5f 41 52 47 53 5f  cker _ANSI_ARGS_
1190: 28 28 54 6b 5f 57 69 6e 64 6f 77 20 74 6b 77 69  ((Tk_Window tkwi
11a0: 6e 29 29 3b 0a 73 74 61 74 69 63 20 69 6e 74 09  n));.static int.
11b0: 09 50 61 63 6b 41 66 74 65 72 20 5f 41 4e 53 49  .PackAfter _ANSI
11c0: 5f 41 52 47 53 5f 28 28 54 63 6c 5f 49 6e 74 65  _ARGS_((Tcl_Inte
11d0: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 09 09 09 20  rp *interp,.... 
11e0: 20 20 20 50 61 63 6b 65 72 20 2a 70 72 65 76 50     Packer *prevP
11f0: 74 72 2c 20 50 61 63 6b 65 72 20 2a 6d 61 73 74  tr, Packer *mast
1200: 65 72 50 74 72 2c 20 69 6e 74 20 61 72 67 63 2c  erPtr, int argc,
1210: 0a 09 09 09 20 20 20 20 63 68 61 72 20 2a 2a 61  ....    char **a
1220: 72 67 76 29 29 3b 0a 73 74 61 74 69 63 20 76 6f  rgv));.static vo
1230: 69 64 09 09 50 61 63 6b 52 65 71 50 72 6f 63 20  id..PackReqProc 
1240: 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 43 6c 69  _ANSI_ARGS_((Cli
1250: 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61  entData clientDa
1260: 74 61 2c 0a 09 09 09 20 20 20 20 54 6b 5f 57 69  ta,....    Tk_Wi
1270: 6e 64 6f 77 20 74 6b 77 69 6e 29 29 3b 0a 73 74  ndow tkwin));.st
1280: 61 74 69 63 20 76 6f 69 64 09 09 50 61 63 6b 53  atic void..PackS
1290: 74 72 75 63 74 75 72 65 50 72 6f 63 20 5f 41 4e  tructureProc _AN
12a0: 53 49 5f 41 52 47 53 5f 28 28 43 6c 69 65 6e 74  SI_ARGS_((Client
12b0: 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c  Data clientData,
12c0: 0a 09 09 09 20 20 20 20 58 45 76 65 6e 74 20 2a  ....    XEvent *
12d0: 65 76 65 6e 74 50 74 72 29 29 3b 0a 73 74 61 74  eventPtr));.stat
12e0: 69 63 20 76 6f 69 64 09 09 55 6e 6c 69 6e 6b 20  ic void..Unlink 
12f0: 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 50 61 63  _ANSI_ARGS_((Pac
1300: 6b 65 72 20 2a 70 61 63 6b 50 74 72 29 29 3b 0a  ker *packPtr));.
1310: 73 74 61 74 69 63 20 69 6e 74 09 09 58 45 78 70  static int..XExp
1320: 61 6e 73 69 6f 6e 20 5f 41 4e 53 49 5f 41 52 47  ansion _ANSI_ARG
1330: 53 5f 28 28 50 61 63 6b 65 72 20 2a 73 6c 61 76  S_((Packer *slav
1340: 65 50 74 72 2c 0a 09 09 09 20 20 20 20 69 6e 74  ePtr,....    int
1350: 20 63 61 76 69 74 79 57 69 64 74 68 29 29 3b 0a   cavityWidth));.
1360: 73 74 61 74 69 63 20 69 6e 74 09 09 59 45 78 70  static int..YExp
1370: 61 6e 73 69 6f 6e 20 5f 41 4e 53 49 5f 41 52 47  ansion _ANSI_ARG
1380: 53 5f 28 28 50 61 63 6b 65 72 20 2a 73 6c 61 76  S_((Packer *slav
1390: 65 50 74 72 2c 0a 09 09 09 20 20 20 20 69 6e 74  ePtr,....    int
13a0: 20 63 61 76 69 74 79 48 65 69 67 68 74 29 29 3b   cavityHeight));
13b0: 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d  .../*. *--------
13c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13f0: 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 54 6b 5f  ------. *. * Tk_
1400: 50 61 63 6b 43 6d 64 20 2d 2d 0a 20 2a 0a 20 2a  PackCmd --. *. *
1410: 09 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20  .This procedure 
1420: 69 73 20 69 6e 76 6f 6b 65 64 20 74 6f 20 70 72  is invoked to pr
1430: 6f 63 65 73 73 20 74 68 65 20 22 70 61 63 6b 22  ocess the "pack"
1440: 20 54 63 6c 20 63 6f 6d 6d 61 6e 64 2e 0a 20 2a   Tcl command.. *
1450: 09 53 65 65 20 74 68 65 20 75 73 65 72 20 64 6f  .See the user do
1460: 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20  cumentation for 
1470: 64 65 74 61 69 6c 73 20 6f 6e 20 77 68 61 74 20  details on what 
1480: 69 74 20 64 6f 65 73 2e 0a 20 2a 0a 20 2a 20 52  it does.. *. * R
1490: 65 73 75 6c 74 73 3a 0a 20 2a 09 41 20 73 74 61  esults:. *.A sta
14a0: 6e 64 61 72 64 20 54 63 6c 20 72 65 73 75 6c 74  ndard Tcl result
14b0: 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20 65 66 66  .. *. * Side eff
14c0: 65 63 74 73 3a 0a 20 2a 09 53 65 65 20 74 68 65  ects:. *.See the
14d0: 20 75 73 65 72 20 64 6f 63 75 6d 65 6e 74 61 74   user documentat
14e0: 69 6f 6e 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d  ion.. *. *------
14f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1500: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1510: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1520: 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 69 6e  --------. */..in
1530: 74 0a 54 6b 5f 50 61 63 6b 43 6d 64 28 63 6c 69  t.Tk_PackCmd(cli
1540: 65 6e 74 44 61 74 61 2c 20 69 6e 74 65 72 70 2c  entData, interp,
1550: 20 61 72 67 63 2c 20 61 72 67 76 29 0a 20 20 20   argc, argv).   
1560: 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65   ClientData clie
1570: 6e 74 44 61 74 61 3b 09 2f 2a 20 4d 61 69 6e 20  ntData;./* Main 
1580: 77 69 6e 64 6f 77 20 61 73 73 6f 63 69 61 74 65  window associate
1590: 64 20 77 69 74 68 0a 09 09 09 09 20 2a 20 69 6e  d with..... * in
15a0: 74 65 72 70 72 65 74 65 72 2e 20 2a 2f 0a 20 20  terpreter. */.  
15b0: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
15c0: 74 65 72 70 3b 09 09 2f 2a 20 43 75 72 72 65 6e  terp;../* Curren
15d0: 74 20 69 6e 74 65 72 70 72 65 74 65 72 2e 20 2a  t interpreter. *
15e0: 2f 0a 20 20 20 20 69 6e 74 20 61 72 67 63 3b 09  /.    int argc;.
15f0: 09 09 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61  ../* Number of a
1600: 72 67 75 6d 65 6e 74 73 2e 20 2a 2f 0a 20 20 20  rguments. */.   
1610: 20 63 68 61 72 20 2a 2a 61 72 67 76 3b 09 09 2f   char **argv;../
1620: 2a 20 41 72 67 75 6d 65 6e 74 20 73 74 72 69 6e  * Argument strin
1630: 67 73 2e 20 2a 2f 0a 7b 0a 20 20 20 20 54 6b 5f  gs. */.{.    Tk_
1640: 57 69 6e 64 6f 77 20 74 6b 77 69 6e 20 3d 20 28  Window tkwin = (
1650: 54 6b 5f 57 69 6e 64 6f 77 29 20 63 6c 69 65 6e  Tk_Window) clien
1660: 74 44 61 74 61 3b 0a 20 20 20 20 73 69 7a 65 5f  tData;.    size_
1670: 74 20 6c 65 6e 67 74 68 3b 0a 20 20 20 20 69 6e  t length;.    in
1680: 74 20 63 3b 0a 0a 20 20 20 20 69 66 20 28 28 61  t c;..    if ((a
1690: 72 67 63 20 3e 3d 20 32 29 20 26 26 20 28 61 72  rgc >= 2) && (ar
16a0: 67 76 5b 31 5d 5b 30 5d 20 3d 3d 20 27 2e 27 29  gv[1][0] == '.')
16b0: 29 20 7b 0a 09 72 65 74 75 72 6e 20 43 6f 6e 66  ) {..return Conf
16c0: 69 67 75 72 65 53 6c 61 76 65 73 28 69 6e 74 65  igureSlaves(inte
16d0: 72 70 2c 20 74 6b 77 69 6e 2c 20 61 72 67 63 2d  rp, tkwin, argc-
16e0: 31 2c 20 61 72 67 76 2b 31 29 3b 0a 20 20 20 20  1, argv+1);.    
16f0: 7d 0a 20 20 20 20 69 66 20 28 61 72 67 63 20 3c  }.    if (argc <
1700: 20 33 29 20 7b 0a 09 54 63 6c 5f 41 70 70 65 6e   3) {..Tcl_Appen
1710: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
1720: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
1730: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 09 09  hould be \"",...
1740: 61 72 67 76 5b 30 5d 2c 20 22 20 6f 70 74 69 6f  argv[0], " optio
1750: 6e 20 61 72 67 20 3f 61 72 67 20 2e 2e 2e 3f 5c  n arg ?arg ...?\
1760: 22 22 2c 20 28 63 68 61 72 20 2a 29 20 4e 55 4c  "", (char *) NUL
1770: 4c 29 3b 0a 09 72 65 74 75 72 6e 20 54 43 4c 5f  L);..return TCL_
1780: 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20  ERROR;.    }.   
1790: 20 63 20 3d 20 61 72 67 76 5b 31 5d 5b 30 5d 3b   c = argv[1][0];
17a0: 0a 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 73 74  .    length = st
17b0: 72 6c 65 6e 28 61 72 67 76 5b 31 5d 29 3b 0a 20  rlen(argv[1]);. 
17c0: 20 20 20 69 66 20 28 28 63 20 3d 3d 20 27 61 27     if ((c == 'a'
17d0: 29 20 26 26 20 28 6c 65 6e 67 74 68 20 3e 3d 20  ) && (length >= 
17e0: 32 29 0a 09 20 20 20 20 26 26 20 28 73 74 72 6e  2)..    && (strn
17f0: 63 6d 70 28 61 72 67 76 5b 31 5d 2c 20 22 61 66  cmp(argv[1], "af
1800: 74 65 72 22 2c 20 6c 65 6e 67 74 68 29 20 3d 3d  ter", length) ==
1810: 20 30 29 29 20 7b 0a 09 50 61 63 6b 65 72 20 2a   0)) {..Packer *
1820: 70 72 65 76 50 74 72 3b 0a 09 54 6b 5f 57 69 6e  prevPtr;..Tk_Win
1830: 64 6f 77 20 74 6b 77 69 6e 32 3b 0a 0a 09 74 6b  dow tkwin2;...tk
1840: 77 69 6e 32 20 3d 20 54 6b 5f 4e 61 6d 65 54 6f  win2 = Tk_NameTo
1850: 57 69 6e 64 6f 77 28 69 6e 74 65 72 70 2c 20 61  Window(interp, a
1860: 72 67 76 5b 32 5d 2c 20 74 6b 77 69 6e 29 3b 0a  rgv[2], tkwin);.
1870: 09 69 66 20 28 74 6b 77 69 6e 32 20 3d 3d 20 4e  .if (tkwin2 == N
1880: 55 4c 4c 29 20 7b 0a 09 20 20 20 20 72 65 74 75  ULL) {..    retu
1890: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 09 7d  rn TCL_ERROR;..}
18a0: 0a 09 70 72 65 76 50 74 72 20 3d 20 47 65 74 50  ..prevPtr = GetP
18b0: 61 63 6b 65 72 28 74 6b 77 69 6e 32 29 3b 0a 09  acker(tkwin2);..
18c0: 69 66 20 28 70 72 65 76 50 74 72 2d 3e 6d 61 73  if (prevPtr->mas
18d0: 74 65 72 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 20  terPtr == NULL) 
18e0: 7b 0a 09 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  {..    Tcl_Appen
18f0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
1900: 22 77 69 6e 64 6f 77 20 5c 22 22 2c 20 61 72 67  "window \"", arg
1910: 76 5b 32 5d 2c 0a 09 09 20 20 20 20 22 5c 22 20  v[2],...    "\" 
1920: 69 73 6e 27 74 20 70 61 63 6b 65 64 22 2c 20 28  isn't packed", (
1930: 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09  char *) NULL);..
1940: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
1950: 52 52 4f 52 3b 0a 09 7d 0a 09 72 65 74 75 72 6e  RROR;..}..return
1960: 20 50 61 63 6b 41 66 74 65 72 28 69 6e 74 65 72   PackAfter(inter
1970: 70 2c 20 70 72 65 76 50 74 72 2c 20 70 72 65 76  p, prevPtr, prev
1980: 50 74 72 2d 3e 6d 61 73 74 65 72 50 74 72 2c 20  Ptr->masterPtr, 
1990: 61 72 67 63 2d 33 2c 20 61 72 67 76 2b 33 29 3b  argc-3, argv+3);
19a0: 0a 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28  .    } else if (
19b0: 28 63 20 3d 3d 20 27 61 27 29 20 26 26 20 28 6c  (c == 'a') && (l
19c0: 65 6e 67 74 68 20 3e 3d 20 32 29 0a 09 20 20 20  ength >= 2)..   
19d0: 20 26 26 20 28 73 74 72 6e 63 6d 70 28 61 72 67   && (strncmp(arg
19e0: 76 5b 31 5d 2c 20 22 61 70 70 65 6e 64 22 2c 20  v[1], "append", 
19f0: 6c 65 6e 67 74 68 29 20 3d 3d 20 30 29 29 20 7b  length) == 0)) {
1a00: 0a 09 50 61 63 6b 65 72 20 2a 6d 61 73 74 65 72  ..Packer *master
1a10: 50 74 72 3b 0a 09 72 65 67 69 73 74 65 72 20 50  Ptr;..register P
1a20: 61 63 6b 65 72 20 2a 70 72 65 76 50 74 72 3b 0a  acker *prevPtr;.
1a30: 09 54 6b 5f 57 69 6e 64 6f 77 20 74 6b 77 69 6e  .Tk_Window tkwin
1a40: 32 3b 0a 0a 09 74 6b 77 69 6e 32 20 3d 20 54 6b  2;...tkwin2 = Tk
1a50: 5f 4e 61 6d 65 54 6f 57 69 6e 64 6f 77 28 69 6e  _NameToWindow(in
1a60: 74 65 72 70 2c 20 61 72 67 76 5b 32 5d 2c 20 74  terp, argv[2], t
1a70: 6b 77 69 6e 29 3b 0a 09 69 66 20 28 74 6b 77 69  kwin);..if (tkwi
1a80: 6e 32 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 20  n2 == NULL) {.. 
1a90: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
1aa0: 52 4f 52 3b 0a 09 7d 0a 09 6d 61 73 74 65 72 50  ROR;..}..masterP
1ab0: 74 72 20 3d 20 47 65 74 50 61 63 6b 65 72 28 74  tr = GetPacker(t
1ac0: 6b 77 69 6e 32 29 3b 0a 09 70 72 65 76 50 74 72  kwin2);..prevPtr
1ad0: 20 3d 20 6d 61 73 74 65 72 50 74 72 2d 3e 73 6c   = masterPtr->sl
1ae0: 61 76 65 50 74 72 3b 0a 09 69 66 20 28 70 72 65  avePtr;..if (pre
1af0: 76 50 74 72 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a  vPtr != NULL) {.
1b00: 09 20 20 20 20 77 68 69 6c 65 20 28 70 72 65 76  .    while (prev
1b10: 50 74 72 2d 3e 6e 65 78 74 50 74 72 20 21 3d 20  Ptr->nextPtr != 
1b20: 4e 55 4c 4c 29 20 7b 0a 09 09 70 72 65 76 50 74  NULL) {...prevPt
1b30: 72 20 3d 20 70 72 65 76 50 74 72 2d 3e 6e 65 78  r = prevPtr->nex
1b40: 74 50 74 72 3b 0a 09 20 20 20 20 7d 0a 09 7d 0a  tPtr;..    }..}.
1b50: 09 72 65 74 75 72 6e 20 50 61 63 6b 41 66 74 65  .return PackAfte
1b60: 72 28 69 6e 74 65 72 70 2c 20 70 72 65 76 50 74  r(interp, prevPt
1b70: 72 2c 20 6d 61 73 74 65 72 50 74 72 2c 20 61 72  r, masterPtr, ar
1b80: 67 63 2d 33 2c 20 61 72 67 76 2b 33 29 3b 0a 20  gc-3, argv+3);. 
1b90: 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 28 63     } else if ((c
1ba0: 20 3d 3d 20 27 62 27 29 20 26 26 20 28 73 74 72   == 'b') && (str
1bb0: 6e 63 6d 70 28 61 72 67 76 5b 31 5d 2c 20 22 62  ncmp(argv[1], "b
1bc0: 65 66 6f 72 65 22 2c 20 6c 65 6e 67 74 68 29 20  efore", length) 
1bd0: 3d 3d 20 30 29 29 20 7b 0a 09 50 61 63 6b 65 72  == 0)) {..Packer
1be0: 20 2a 70 61 63 6b 50 74 72 2c 20 2a 6d 61 73 74   *packPtr, *mast
1bf0: 65 72 50 74 72 3b 0a 09 72 65 67 69 73 74 65 72  erPtr;..register
1c00: 20 50 61 63 6b 65 72 20 2a 70 72 65 76 50 74 72   Packer *prevPtr
1c10: 3b 0a 09 54 6b 5f 57 69 6e 64 6f 77 20 74 6b 77  ;..Tk_Window tkw
1c20: 69 6e 32 3b 0a 0a 09 74 6b 77 69 6e 32 20 3d 20  in2;...tkwin2 = 
1c30: 54 6b 5f 4e 61 6d 65 54 6f 57 69 6e 64 6f 77 28  Tk_NameToWindow(
1c40: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 32 5d 2c  interp, argv[2],
1c50: 20 74 6b 77 69 6e 29 3b 0a 09 69 66 20 28 74 6b   tkwin);..if (tk
1c60: 77 69 6e 32 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a  win2 == NULL) {.
1c70: 09 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
1c80: 45 52 52 4f 52 3b 0a 09 7d 0a 09 70 61 63 6b 50  ERROR;..}..packP
1c90: 74 72 20 3d 20 47 65 74 50 61 63 6b 65 72 28 74  tr = GetPacker(t
1ca0: 6b 77 69 6e 32 29 3b 0a 09 69 66 20 28 70 61 63  kwin2);..if (pac
1cb0: 6b 50 74 72 2d 3e 6d 61 73 74 65 72 50 74 72 20  kPtr->masterPtr 
1cc0: 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 20 20 20 20  == NULL) {..    
1cd0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
1ce0: 28 69 6e 74 65 72 70 2c 20 22 77 69 6e 64 6f 77  (interp, "window
1cf0: 20 5c 22 22 2c 20 61 72 67 76 5b 32 5d 2c 0a 09   \"", argv[2],..
1d00: 09 20 20 20 20 22 5c 22 20 69 73 6e 27 74 20 70  .    "\" isn't p
1d10: 61 63 6b 65 64 22 2c 20 28 63 68 61 72 20 2a 29  acked", (char *)
1d20: 20 4e 55 4c 4c 29 3b 0a 09 20 20 20 20 72 65 74   NULL);..    ret
1d30: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 09  urn TCL_ERROR;..
1d40: 7d 0a 09 6d 61 73 74 65 72 50 74 72 20 3d 20 70  }..masterPtr = p
1d50: 61 63 6b 50 74 72 2d 3e 6d 61 73 74 65 72 50 74  ackPtr->masterPt
1d60: 72 3b 0a 09 70 72 65 76 50 74 72 20 3d 20 6d 61  r;..prevPtr = ma
1d70: 73 74 65 72 50 74 72 2d 3e 73 6c 61 76 65 50 74  sterPtr->slavePt
1d80: 72 3b 0a 09 69 66 20 28 70 72 65 76 50 74 72 20  r;..if (prevPtr 
1d90: 3d 3d 20 70 61 63 6b 50 74 72 29 20 7b 0a 09 20  == packPtr) {.. 
1da0: 20 20 20 70 72 65 76 50 74 72 20 3d 20 4e 55 4c     prevPtr = NUL
1db0: 4c 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20  L;..} else {..  
1dc0: 20 20 66 6f 72 20 28 20 3b 20 3b 20 70 72 65 76    for ( ; ; prev
1dd0: 50 74 72 20 3d 20 70 72 65 76 50 74 72 2d 3e 6e  Ptr = prevPtr->n
1de0: 65 78 74 50 74 72 29 20 7b 0a 09 09 69 66 20 28  extPtr) {...if (
1df0: 70 72 65 76 50 74 72 20 3d 3d 20 4e 55 4c 4c 29  prevPtr == NULL)
1e00: 20 7b 0a 09 09 20 20 20 20 70 61 6e 69 63 28 22   {...    panic("
1e10: 5c 22 70 61 63 6b 20 62 65 66 6f 72 65 5c 22 20  \"pack before\" 
1e20: 63 6f 75 6c 64 6e 27 74 20 66 69 6e 64 20 70 72  couldn't find pr
1e30: 65 64 65 63 65 73 73 6f 72 22 29 3b 0a 09 09 7d  edecessor");...}
1e40: 0a 09 09 69 66 20 28 70 72 65 76 50 74 72 2d 3e  ...if (prevPtr->
1e50: 6e 65 78 74 50 74 72 20 3d 3d 20 70 61 63 6b 50  nextPtr == packP
1e60: 74 72 29 20 7b 0a 09 09 20 20 20 20 62 72 65 61  tr) {...    brea
1e70: 6b 3b 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 7d  k;...}..    }..}
1e80: 0a 09 72 65 74 75 72 6e 20 50 61 63 6b 41 66 74  ..return PackAft
1e90: 65 72 28 69 6e 74 65 72 70 2c 20 70 72 65 76 50  er(interp, prevP
1ea0: 74 72 2c 20 6d 61 73 74 65 72 50 74 72 2c 20 61  tr, masterPtr, a
1eb0: 72 67 63 2d 33 2c 20 61 72 67 76 2b 33 29 3b 0a  rgc-3, argv+3);.
1ec0: 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 28      } else if ((
1ed0: 63 20 3d 3d 20 27 63 27 29 20 26 26 20 28 73 74  c == 'c') && (st
1ee0: 72 6e 63 6d 70 28 61 72 67 76 5b 31 5d 2c 20 22  rncmp(argv[1], "
1ef0: 63 6f 6e 66 69 67 75 72 65 22 2c 20 6c 65 6e 67  configure", leng
1f00: 74 68 29 20 3d 3d 20 30 29 29 20 7b 0a 09 69 66  th) == 0)) {..if
1f10: 20 28 61 72 67 76 5b 32 5d 5b 30 5d 20 21 3d 20   (argv[2][0] != 
1f20: 27 2e 27 29 20 7b 0a 09 20 20 20 20 54 63 6c 5f  '.') {..    Tcl_
1f30: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
1f40: 65 72 70 2c 20 22 62 61 64 20 61 72 67 75 6d 65  erp, "bad argume
1f50: 6e 74 20 5c 22 22 2c 20 61 72 67 76 5b 32 5d 2c  nt \"", argv[2],
1f60: 0a 09 09 20 20 20 20 22 5c 22 3a 20 6d 75 73 74  ...    "\": must
1f70: 20 62 65 20 6e 61 6d 65 20 6f 66 20 77 69 6e 64   be name of wind
1f80: 6f 77 22 2c 20 28 63 68 61 72 20 2a 29 20 4e 55  ow", (char *) NU
1f90: 4c 4c 29 3b 0a 09 20 20 20 20 72 65 74 75 72 6e  LL);..    return
1fa0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 09 7d 0a 09   TCL_ERROR;..}..
1fb0: 72 65 74 75 72 6e 20 43 6f 6e 66 69 67 75 72 65  return Configure
1fc0: 53 6c 61 76 65 73 28 69 6e 74 65 72 70 2c 20 74  Slaves(interp, t
1fd0: 6b 77 69 6e 2c 20 61 72 67 63 2d 32 2c 20 61 72  kwin, argc-2, ar
1fe0: 67 76 2b 32 29 3b 0a 20 20 20 20 7d 20 65 6c 73  gv+2);.    } els
1ff0: 65 20 69 66 20 28 28 63 20 3d 3d 20 27 66 27 29  e if ((c == 'f')
2000: 20 26 26 20 28 73 74 72 6e 63 6d 70 28 61 72 67   && (strncmp(arg
2010: 76 5b 31 5d 2c 20 22 66 6f 72 67 65 74 22 2c 20  v[1], "forget", 
2020: 6c 65 6e 67 74 68 29 20 3d 3d 20 30 29 29 20 7b  length) == 0)) {
2030: 0a 09 54 6b 5f 57 69 6e 64 6f 77 20 73 6c 61 76  ..Tk_Window slav
2040: 65 3b 0a 09 50 61 63 6b 65 72 20 2a 73 6c 61 76  e;..Packer *slav
2050: 65 50 74 72 3b 0a 09 69 6e 74 20 69 3b 0a 0a 09  ePtr;..int i;...
2060: 66 6f 72 20 28 69 20 3d 20 32 3b 20 69 20 3c 20  for (i = 2; i < 
2070: 61 72 67 63 3b 20 69 2b 2b 29 20 7b 0a 09 20 20  argc; i++) {..  
2080: 20 20 73 6c 61 76 65 20 3d 20 54 6b 5f 4e 61 6d    slave = Tk_Nam
2090: 65 54 6f 57 69 6e 64 6f 77 28 69 6e 74 65 72 70  eToWindow(interp
20a0: 2c 20 61 72 67 76 5b 69 5d 2c 20 74 6b 77 69 6e  , argv[i], tkwin
20b0: 29 3b 0a 09 20 20 20 20 69 66 20 28 73 6c 61 76  );..    if (slav
20c0: 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 63  e == NULL) {...c
20d0: 6f 6e 74 69 6e 75 65 3b 0a 09 20 20 20 20 7d 0a  ontinue;..    }.
20e0: 09 20 20 20 20 73 6c 61 76 65 50 74 72 20 3d 20  .    slavePtr = 
20f0: 47 65 74 50 61 63 6b 65 72 28 73 6c 61 76 65 29  GetPacker(slave)
2100: 3b 0a 09 20 20 20 20 69 66 20 28 28 73 6c 61 76  ;..    if ((slav
2110: 65 50 74 72 20 21 3d 20 4e 55 4c 4c 29 20 26 26  ePtr != NULL) &&
2120: 20 28 73 6c 61 76 65 50 74 72 2d 3e 6d 61 73 74   (slavePtr->mast
2130: 65 72 50 74 72 20 21 3d 20 4e 55 4c 4c 29 29 20  erPtr != NULL)) 
2140: 7b 0a 09 09 54 6b 5f 4d 61 6e 61 67 65 47 65 6f  {...Tk_ManageGeo
2150: 6d 65 74 72 79 28 73 6c 61 76 65 2c 20 28 54 6b  metry(slave, (Tk
2160: 5f 47 65 6f 6d 4d 67 72 20 2a 29 20 4e 55 4c 4c  _GeomMgr *) NULL
2170: 2c 0a 09 09 09 28 43 6c 69 65 6e 74 44 61 74 61  ,....(ClientData
2180: 29 20 4e 55 4c 4c 29 3b 0a 09 09 69 66 20 28 73  ) NULL);...if (s
2190: 6c 61 76 65 50 74 72 2d 3e 6d 61 73 74 65 72 50  lavePtr->masterP
21a0: 74 72 2d 3e 74 6b 77 69 6e 20 21 3d 20 54 6b 5f  tr->tkwin != Tk_
21b0: 50 61 72 65 6e 74 28 73 6c 61 76 65 50 74 72 2d  Parent(slavePtr-
21c0: 3e 74 6b 77 69 6e 29 29 20 7b 0a 09 09 20 20 20  >tkwin)) {...   
21d0: 20 54 6b 5f 55 6e 6d 61 69 6e 74 61 69 6e 47 65   Tk_UnmaintainGe
21e0: 6f 6d 65 74 72 79 28 73 6c 61 76 65 50 74 72 2d  ometry(slavePtr-
21f0: 3e 74 6b 77 69 6e 2c 0a 09 09 09 20 20 20 20 73  >tkwin,....    s
2200: 6c 61 76 65 50 74 72 2d 3e 6d 61 73 74 65 72 50  lavePtr->masterP
2210: 74 72 2d 3e 74 6b 77 69 6e 29 3b 0a 09 09 7d 0a  tr->tkwin);...}.
2220: 09 09 55 6e 6c 69 6e 6b 28 73 6c 61 76 65 50 74  ..Unlink(slavePt
2230: 72 29 3b 0a 09 09 54 6b 5f 55 6e 6d 61 70 57 69  r);...Tk_UnmapWi
2240: 6e 64 6f 77 28 73 6c 61 76 65 50 74 72 2d 3e 74  ndow(slavePtr->t
2250: 6b 77 69 6e 29 3b 0a 09 20 20 20 20 7d 0a 09 7d  kwin);..    }..}
2260: 0a 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28  .    } else if (
2270: 28 63 20 3d 3d 20 27 69 27 29 20 26 26 20 28 73  (c == 'i') && (s
2280: 74 72 6e 63 6d 70 28 61 72 67 76 5b 31 5d 2c 20  trncmp(argv[1], 
2290: 22 69 6e 66 6f 22 2c 20 6c 65 6e 67 74 68 29 20  "info", length) 
22a0: 3d 3d 20 30 29 29 20 7b 0a 09 72 65 67 69 73 74  == 0)) {..regist
22b0: 65 72 20 50 61 63 6b 65 72 20 2a 73 6c 61 76 65  er Packer *slave
22c0: 50 74 72 3b 0a 09 54 6b 5f 57 69 6e 64 6f 77 20  Ptr;..Tk_Window 
22d0: 73 6c 61 76 65 3b 0a 09 63 68 61 72 20 62 75 66  slave;..char buf
22e0: 66 65 72 5b 33 30 30 5d 3b 0a 09 73 74 61 74 69  fer[300];..stati
22f0: 63 20 63 68 61 72 20 2a 73 69 64 65 4e 61 6d 65  c char *sideName
2300: 73 5b 5d 20 3d 20 7b 22 74 6f 70 22 2c 20 22 62  s[] = {"top", "b
2310: 6f 74 74 6f 6d 22 2c 20 22 6c 65 66 74 22 2c 20  ottom", "left", 
2320: 22 72 69 67 68 74 22 7d 3b 0a 0a 09 69 66 20 28  "right"};...if (
2330: 61 72 67 63 20 21 3d 20 33 29 20 7b 0a 09 20 20  argc != 3) {..  
2340: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
2350: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
2360: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
2370: 20 62 65 20 5c 22 22 2c 0a 09 09 20 20 20 20 61   be \"",...    a
2380: 72 67 76 5b 30 5d 2c 20 22 20 69 6e 66 6f 20 77  rgv[0], " info w
2390: 69 6e 64 6f 77 5c 22 22 2c 20 28 63 68 61 72 20  indow\"", (char 
23a0: 2a 29 20 4e 55 4c 4c 29 3b 0a 09 20 20 20 20 72  *) NULL);..    r
23b0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
23c0: 0a 09 7d 0a 09 73 6c 61 76 65 20 3d 20 54 6b 5f  ..}..slave = Tk_
23d0: 4e 61 6d 65 54 6f 57 69 6e 64 6f 77 28 69 6e 74  NameToWindow(int
23e0: 65 72 70 2c 20 61 72 67 76 5b 32 5d 2c 20 74 6b  erp, argv[2], tk
23f0: 77 69 6e 29 3b 0a 09 69 66 20 28 73 6c 61 76 65  win);..if (slave
2400: 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 20 20 20   == NULL) {..   
2410: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
2420: 52 3b 0a 09 7d 0a 09 73 6c 61 76 65 50 74 72 20  R;..}..slavePtr 
2430: 3d 20 47 65 74 50 61 63 6b 65 72 28 73 6c 61 76  = GetPacker(slav
2440: 65 29 3b 0a 09 69 66 20 28 73 6c 61 76 65 50 74  e);..if (slavePt
2450: 72 2d 3e 6d 61 73 74 65 72 50 74 72 20 3d 3d 20  r->masterPtr == 
2460: 4e 55 4c 4c 29 20 7b 0a 09 20 20 20 20 54 63 6c  NULL) {..    Tcl
2470: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
2480: 74 65 72 70 2c 20 22 77 69 6e 64 6f 77 20 5c 22  terp, "window \"
2490: 22 2c 20 61 72 67 76 5b 32 5d 2c 0a 09 09 20 20  ", argv[2],...  
24a0: 20 20 22 5c 22 20 69 73 6e 27 74 20 70 61 63 6b    "\" isn't pack
24b0: 65 64 22 2c 20 28 63 68 61 72 20 2a 29 20 4e 55  ed", (char *) NU
24c0: 4c 4c 29 3b 0a 09 20 20 20 20 72 65 74 75 72 6e  LL);..    return
24d0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 09 7d 0a 09   TCL_ERROR;..}..
24e0: 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e  Tcl_AppendElemen
24f0: 74 28 69 6e 74 65 72 70 2c 20 22 2d 69 6e 22 29  t(interp, "-in")
2500: 3b 0a 09 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65  ;..Tcl_AppendEle
2510: 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 54 6b 5f  ment(interp, Tk_
2520: 50 61 74 68 4e 61 6d 65 28 73 6c 61 76 65 50 74  PathName(slavePt
2530: 72 2d 3e 6d 61 73 74 65 72 50 74 72 2d 3e 74 6b  r->masterPtr->tk
2540: 77 69 6e 29 29 3b 0a 09 54 63 6c 5f 41 70 70 65  win));..Tcl_Appe
2550: 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70  ndElement(interp
2560: 2c 20 22 2d 61 6e 63 68 6f 72 22 29 3b 0a 09 54  , "-anchor");..T
2570: 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  cl_AppendElement
2580: 28 69 6e 74 65 72 70 2c 20 54 6b 5f 4e 61 6d 65  (interp, Tk_Name
2590: 4f 66 41 6e 63 68 6f 72 28 73 6c 61 76 65 50 74  OfAnchor(slavePt
25a0: 72 2d 3e 61 6e 63 68 6f 72 29 29 3b 0a 09 54 63  r->anchor));..Tc
25b0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
25c0: 6e 74 65 72 70 2c 20 22 20 2d 65 78 70 61 6e 64  nterp, " -expand
25d0: 20 22 2c 0a 09 09 28 73 6c 61 76 65 50 74 72 2d   ",...(slavePtr-
25e0: 3e 66 6c 61 67 73 20 26 20 45 58 50 41 4e 44 29  >flags & EXPAND)
25f0: 20 3f 20 22 31 22 20 3a 20 22 30 22 2c 20 22 20   ? "1" : "0", " 
2600: 2d 66 69 6c 6c 20 22 2c 0a 09 09 28 63 68 61 72  -fill ",...(char
2610: 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09 73 77 69 74   *) NULL);..swit
2620: 63 68 20 28 73 6c 61 76 65 50 74 72 2d 3e 66 6c  ch (slavePtr->fl
2630: 61 67 73 20 26 20 28 46 49 4c 4c 58 7c 46 49 4c  ags & (FILLX|FIL
2640: 4c 59 29 29 20 7b 0a 09 20 20 20 20 63 61 73 65  LY)) {..    case
2650: 20 30 3a 0a 09 09 54 63 6c 5f 41 70 70 65 6e 64   0:...Tcl_Append
2660: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
2670: 6e 6f 6e 65 22 2c 20 28 63 68 61 72 20 2a 29 20  none", (char *) 
2680: 4e 55 4c 4c 29 3b 0a 09 09 62 72 65 61 6b 3b 0a  NULL);...break;.
2690: 09 20 20 20 20 63 61 73 65 20 46 49 4c 4c 58 3a  .    case FILLX:
26a0: 0a 09 09 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  ...Tcl_AppendRes
26b0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 78 22 2c  ult(interp, "x",
26c0: 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b   (char *) NULL);
26d0: 0a 09 09 62 72 65 61 6b 3b 0a 09 20 20 20 20 63  ...break;..    c
26e0: 61 73 65 20 46 49 4c 4c 59 3a 0a 09 09 54 63 6c  ase FILLY:...Tcl
26f0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
2700: 74 65 72 70 2c 20 22 79 22 2c 20 28 63 68 61 72  terp, "y", (char
2710: 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09 09 62 72 65   *) NULL);...bre
2720: 61 6b 3b 0a 09 20 20 20 20 63 61 73 65 20 46 49  ak;..    case FI
2730: 4c 4c 58 7c 46 49 4c 4c 59 3a 0a 09 09 54 63 6c  LLX|FILLY:...Tcl
2740: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
2750: 74 65 72 70 2c 20 22 62 6f 74 68 22 2c 20 28 63  terp, "both", (c
2760: 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09 09  har *) NULL);...
2770: 62 72 65 61 6b 3b 0a 09 7d 0a 09 73 70 72 69 6e  break;..}..sprin
2780: 74 66 28 62 75 66 66 65 72 2c 20 22 20 2d 69 70  tf(buffer, " -ip
2790: 61 64 78 20 25 64 20 2d 69 70 61 64 79 20 25 64  adx %d -ipady %d
27a0: 20 2d 70 61 64 78 20 25 64 20 2d 70 61 64 79 20   -padx %d -pady 
27b0: 25 64 22 2c 0a 09 09 73 6c 61 76 65 50 74 72 2d  %d",...slavePtr-
27c0: 3e 69 50 61 64 58 2f 32 2c 20 73 6c 61 76 65 50  >iPadX/2, slaveP
27d0: 74 72 2d 3e 69 50 61 64 59 2f 32 2c 20 73 6c 61  tr->iPadY/2, sla
27e0: 76 65 50 74 72 2d 3e 70 61 64 58 2f 32 2c 0a 09  vePtr->padX/2,..
27f0: 09 73 6c 61 76 65 50 74 72 2d 3e 70 61 64 59 2f  .slavePtr->padY/
2800: 32 29 3b 0a 09 54 63 6c 5f 41 70 70 65 6e 64 52  2);..Tcl_AppendR
2810: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 62 75  esult(interp, bu
2820: 66 66 65 72 2c 20 22 20 2d 73 69 64 65 20 22 2c  ffer, " -side ",
2830: 20 73 69 64 65 4e 61 6d 65 73 5b 73 6c 61 76 65   sideNames[slave
2840: 50 74 72 2d 3e 73 69 64 65 5d 2c 0a 09 09 28 63  Ptr->side],...(c
2850: 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 20 20  har *) NULL);.  
2860: 20 20 7d 20 65 6c 73 65 20 69 66 20 28 28 63 20    } else if ((c 
2870: 3d 3d 20 27 70 27 29 20 26 26 20 28 73 74 72 6e  == 'p') && (strn
2880: 63 6d 70 28 61 72 67 76 5b 31 5d 2c 20 22 70 72  cmp(argv[1], "pr
2890: 6f 70 61 67 61 74 65 22 2c 20 6c 65 6e 67 74 68  opagate", length
28a0: 29 20 3d 3d 20 30 29 29 20 7b 0a 09 54 6b 5f 57  ) == 0)) {..Tk_W
28b0: 69 6e 64 6f 77 20 6d 61 73 74 65 72 3b 0a 09 50  indow master;..P
28c0: 61 63 6b 65 72 20 2a 6d 61 73 74 65 72 50 74 72  acker *masterPtr
28d0: 3b 0a 09 69 6e 74 20 70 72 6f 70 61 67 61 74 65  ;..int propagate
28e0: 3b 0a 0a 09 69 66 20 28 61 72 67 63 20 3e 20 34  ;...if (argc > 4
28f0: 29 20 7b 0a 09 20 20 20 20 54 63 6c 5f 41 70 70  ) {..    Tcl_App
2900: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
2910: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
2920: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a   should be \"",.
2930: 09 09 20 20 20 20 61 72 67 76 5b 30 5d 2c 20 22  ..    argv[0], "
2940: 20 70 72 6f 70 61 67 61 74 65 20 77 69 6e 64 6f   propagate windo
2950: 77 20 3f 62 6f 6f 6c 65 61 6e 3f 5c 22 22 2c 20  w ?boolean?\"", 
2960: 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a  (char *) NULL);.
2970: 09 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
2980: 45 52 52 4f 52 3b 0a 09 7d 0a 09 6d 61 73 74 65  ERROR;..}..maste
2990: 72 20 3d 20 54 6b 5f 4e 61 6d 65 54 6f 57 69 6e  r = Tk_NameToWin
29a0: 64 6f 77 28 69 6e 74 65 72 70 2c 20 61 72 67 76  dow(interp, argv
29b0: 5b 32 5d 2c 20 74 6b 77 69 6e 29 3b 0a 09 69 66  [2], tkwin);..if
29c0: 20 28 6d 61 73 74 65 72 20 3d 3d 20 4e 55 4c 4c   (master == NULL
29d0: 29 20 7b 0a 09 20 20 20 20 72 65 74 75 72 6e 20  ) {..    return 
29e0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 09 7d 0a 09 6d  TCL_ERROR;..}..m
29f0: 61 73 74 65 72 50 74 72 20 3d 20 47 65 74 50 61  asterPtr = GetPa
2a00: 63 6b 65 72 28 6d 61 73 74 65 72 29 3b 0a 09 69  cker(master);..i
2a10: 66 20 28 61 72 67 63 20 3d 3d 20 33 29 20 7b 0a  f (argc == 3) {.
2a20: 09 20 20 20 20 69 66 20 28 6d 61 73 74 65 72 50  .    if (masterP
2a30: 74 72 2d 3e 66 6c 61 67 73 20 26 20 44 4f 4e 54  tr->flags & DONT
2a40: 5f 50 52 4f 50 41 47 41 54 45 29 20 7b 0a 09 09  _PROPAGATE) {...
2a50: 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
2a60: 74 65 72 70 2c 22 30 22 2c 54 43 4c 5f 53 54 41  terp,"0",TCL_STA
2a70: 54 49 43 29 3b 0a 09 20 20 20 20 7d 20 65 6c 73  TIC);..    } els
2a80: 65 20 7b 0a 09 09 54 63 6c 5f 53 65 74 52 65 73  e {...Tcl_SetRes
2a90: 75 6c 74 28 69 6e 74 65 72 70 2c 22 31 22 2c 54  ult(interp,"1",T
2aa0: 43 4c 5f 53 54 41 54 49 43 29 3b 0a 09 20 20 20  CL_STATIC);..   
2ab0: 20 7d 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54   }..    return T
2ac0: 43 4c 5f 4f 4b 3b 0a 09 7d 0a 09 69 66 20 28 54  CL_OK;..}..if (T
2ad0: 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 28 69 6e  cl_GetBoolean(in
2ae0: 74 65 72 70 2c 20 61 72 67 76 5b 33 5d 2c 20 26  terp, argv[3], &
2af0: 70 72 6f 70 61 67 61 74 65 29 20 21 3d 20 54 43  propagate) != TC
2b00: 4c 5f 4f 4b 29 20 7b 0a 09 20 20 20 20 72 65 74  L_OK) {..    ret
2b10: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 09  urn TCL_ERROR;..
2b20: 7d 0a 09 69 66 20 28 70 72 6f 70 61 67 61 74 65  }..if (propagate
2b30: 29 20 7b 0a 09 20 20 20 20 6d 61 73 74 65 72 50  ) {..    masterP
2b40: 74 72 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 44 4f  tr->flags &= ~DO
2b50: 4e 54 5f 50 52 4f 50 41 47 41 54 45 3b 0a 0a 09  NT_PROPAGATE;...
2b60: 20 20 20 20 2f 2a 0a 09 20 20 20 20 20 2a 20 52      /*..     * R
2b70: 65 70 61 63 6b 20 74 68 65 20 6d 61 73 74 65 72  epack the master
2b80: 20 74 6f 20 61 6c 6c 6f 77 20 6e 65 77 20 67 65   to allow new ge
2b90: 6f 6d 65 74 72 79 20 69 6e 66 6f 72 6d 61 74 69  ometry informati
2ba0: 6f 6e 20 74 6f 0a 09 20 20 20 20 20 2a 20 70 72  on to..     * pr
2bb0: 6f 70 61 67 61 74 65 20 75 70 77 61 72 64 73 20  opagate upwards 
2bc0: 74 6f 20 74 68 65 20 6d 61 73 74 65 72 27 73 20  to the master's 
2bd0: 6d 61 73 74 65 72 2e 0a 09 20 20 20 20 20 2a 2f  master...     */
2be0: 0a 0a 09 20 20 20 20 69 66 20 28 6d 61 73 74 65  ...    if (maste
2bf0: 72 50 74 72 2d 3e 61 62 6f 72 74 50 74 72 20 21  rPtr->abortPtr !
2c00: 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 2a 6d 61 73  = NULL) {...*mas
2c10: 74 65 72 50 74 72 2d 3e 61 62 6f 72 74 50 74 72  terPtr->abortPtr
2c20: 20 3d 20 31 3b 0a 09 20 20 20 20 7d 0a 09 20 20   = 1;..    }..  
2c30: 20 20 69 66 20 28 21 28 6d 61 73 74 65 72 50 74    if (!(masterPt
2c40: 72 2d 3e 66 6c 61 67 73 20 26 20 52 45 51 55 45  r->flags & REQUE
2c50: 53 54 45 44 5f 52 45 50 41 43 4b 29 29 20 7b 0a  STED_REPACK)) {.
2c60: 09 09 6d 61 73 74 65 72 50 74 72 2d 3e 66 6c 61  ..masterPtr->fla
2c70: 67 73 20 7c 3d 20 52 45 51 55 45 53 54 45 44 5f  gs |= REQUESTED_
2c80: 52 45 50 41 43 4b 3b 0a 09 09 54 63 6c 5f 44 6f  REPACK;...Tcl_Do
2c90: 57 68 65 6e 49 64 6c 65 28 41 72 72 61 6e 67 65  WhenIdle(Arrange
2ca0: 50 61 63 6b 69 6e 67 2c 20 28 43 6c 69 65 6e 74  Packing, (Client
2cb0: 44 61 74 61 29 20 6d 61 73 74 65 72 50 74 72 29  Data) masterPtr)
2cc0: 3b 0a 09 20 20 20 20 7d 0a 09 7d 20 65 6c 73 65  ;..    }..} else
2cd0: 20 7b 0a 09 20 20 20 20 6d 61 73 74 65 72 50 74   {..    masterPt
2ce0: 72 2d 3e 66 6c 61 67 73 20 7c 3d 20 44 4f 4e 54  r->flags |= DONT
2cf0: 5f 50 52 4f 50 41 47 41 54 45 3b 0a 09 7d 0a 20  _PROPAGATE;..}. 
2d00: 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 28 63     } else if ((c
2d10: 20 3d 3d 20 27 73 27 29 20 26 26 20 28 73 74 72   == 's') && (str
2d20: 6e 63 6d 70 28 61 72 67 76 5b 31 5d 2c 20 22 73  ncmp(argv[1], "s
2d30: 6c 61 76 65 73 22 2c 20 6c 65 6e 67 74 68 29 20  laves", length) 
2d40: 3d 3d 20 30 29 29 20 7b 0a 09 54 6b 5f 57 69 6e  == 0)) {..Tk_Win
2d50: 64 6f 77 20 6d 61 73 74 65 72 3b 0a 09 50 61 63  dow master;..Pac
2d60: 6b 65 72 20 2a 6d 61 73 74 65 72 50 74 72 2c 20  ker *masterPtr, 
2d70: 2a 73 6c 61 76 65 50 74 72 3b 0a 0a 09 69 66 20  *slavePtr;...if 
2d80: 28 61 72 67 63 20 21 3d 20 33 29 20 7b 0a 09 20  (argc != 3) {.. 
2d90: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
2da0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
2db0: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
2dc0: 64 20 62 65 20 5c 22 22 2c 0a 09 09 20 20 20 20  d be \"",...    
2dd0: 61 72 67 76 5b 30 5d 2c 20 22 20 73 6c 61 76 65  argv[0], " slave
2de0: 73 20 77 69 6e 64 6f 77 5c 22 22 2c 20 28 63 68  s window\"", (ch
2df0: 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09 20 20  ar *) NULL);..  
2e00: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
2e10: 4f 52 3b 0a 09 7d 0a 09 6d 61 73 74 65 72 20 3d  OR;..}..master =
2e20: 20 54 6b 5f 4e 61 6d 65 54 6f 57 69 6e 64 6f 77   Tk_NameToWindow
2e30: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 32 5d  (interp, argv[2]
2e40: 2c 20 74 6b 77 69 6e 29 3b 0a 09 69 66 20 28 6d  , tkwin);..if (m
2e50: 61 73 74 65 72 20 3d 3d 20 4e 55 4c 4c 29 20 7b  aster == NULL) {
2e60: 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ..    return TCL
2e70: 5f 45 52 52 4f 52 3b 0a 09 7d 0a 09 6d 61 73 74  _ERROR;..}..mast
2e80: 65 72 50 74 72 20 3d 20 47 65 74 50 61 63 6b 65  erPtr = GetPacke
2e90: 72 28 6d 61 73 74 65 72 29 3b 0a 09 66 6f 72 20  r(master);..for 
2ea0: 28 73 6c 61 76 65 50 74 72 20 3d 20 6d 61 73 74  (slavePtr = mast
2eb0: 65 72 50 74 72 2d 3e 73 6c 61 76 65 50 74 72 3b  erPtr->slavePtr;
2ec0: 20 73 6c 61 76 65 50 74 72 20 21 3d 20 4e 55 4c   slavePtr != NUL
2ed0: 4c 3b 0a 09 09 73 6c 61 76 65 50 74 72 20 3d 20  L;...slavePtr = 
2ee0: 73 6c 61 76 65 50 74 72 2d 3e 6e 65 78 74 50 74  slavePtr->nextPt
2ef0: 72 29 20 7b 0a 09 20 20 20 20 54 63 6c 5f 41 70  r) {..    Tcl_Ap
2f00: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
2f10: 72 70 2c 20 54 6b 5f 50 61 74 68 4e 61 6d 65 28  rp, Tk_PathName(
2f20: 73 6c 61 76 65 50 74 72 2d 3e 74 6b 77 69 6e 29  slavePtr->tkwin)
2f30: 29 3b 0a 09 7d 0a 20 20 20 20 7d 20 65 6c 73 65  );..}.    } else
2f40: 20 69 66 20 28 28 63 20 3d 3d 20 27 75 27 29 20   if ((c == 'u') 
2f50: 26 26 20 28 73 74 72 6e 63 6d 70 28 61 72 67 76  && (strncmp(argv
2f60: 5b 31 5d 2c 20 22 75 6e 70 61 63 6b 22 2c 20 6c  [1], "unpack", l
2f70: 65 6e 67 74 68 29 20 3d 3d 20 30 29 29 20 7b 0a  ength) == 0)) {.
2f80: 09 54 6b 5f 57 69 6e 64 6f 77 20 74 6b 77 69 6e  .Tk_Window tkwin
2f90: 32 3b 0a 09 50 61 63 6b 65 72 20 2a 70 61 63 6b  2;..Packer *pack
2fa0: 50 74 72 3b 0a 0a 09 69 66 20 28 61 72 67 63 20  Ptr;...if (argc 
2fb0: 21 3d 20 33 29 20 7b 0a 09 20 20 20 20 54 63 6c  != 3) {..    Tcl
2fc0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
2fd0: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
2fe0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
2ff0: 22 22 2c 0a 09 09 20 20 20 20 61 72 67 76 5b 30  "",...    argv[0
3000: 5d 2c 20 22 20 75 6e 70 61 63 6b 20 77 69 6e 64  ], " unpack wind
3010: 6f 77 5c 22 22 2c 20 28 63 68 61 72 20 2a 29 20  ow\"", (char *) 
3020: 4e 55 4c 4c 29 3b 0a 09 20 20 20 20 72 65 74 75  NULL);..    retu
3030: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 09 7d  rn TCL_ERROR;..}
3040: 0a 09 74 6b 77 69 6e 32 20 3d 20 54 6b 5f 4e 61  ..tkwin2 = Tk_Na
3050: 6d 65 54 6f 57 69 6e 64 6f 77 28 69 6e 74 65 72  meToWindow(inter
3060: 70 2c 20 61 72 67 76 5b 32 5d 2c 20 74 6b 77 69  p, argv[2], tkwi
3070: 6e 29 3b 0a 09 69 66 20 28 74 6b 77 69 6e 32 20  n);..if (tkwin2 
3080: 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 20 20 20 20  == NULL) {..    
3090: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
30a0: 3b 0a 09 7d 0a 09 70 61 63 6b 50 74 72 20 3d 20  ;..}..packPtr = 
30b0: 47 65 74 50 61 63 6b 65 72 28 74 6b 77 69 6e 32  GetPacker(tkwin2
30c0: 29 3b 0a 09 69 66 20 28 28 70 61 63 6b 50 74 72  );..if ((packPtr
30d0: 20 21 3d 20 4e 55 4c 4c 29 20 26 26 20 28 70 61   != NULL) && (pa
30e0: 63 6b 50 74 72 2d 3e 6d 61 73 74 65 72 50 74 72  ckPtr->masterPtr
30f0: 20 21 3d 20 4e 55 4c 4c 29 29 20 7b 0a 09 20 20   != NULL)) {..  
3100: 20 20 54 6b 5f 4d 61 6e 61 67 65 47 65 6f 6d 65    Tk_ManageGeome
3110: 74 72 79 28 74 6b 77 69 6e 32 2c 20 28 54 6b 5f  try(tkwin2, (Tk_
3120: 47 65 6f 6d 4d 67 72 20 2a 29 20 4e 55 4c 4c 2c  GeomMgr *) NULL,
3130: 0a 09 09 20 20 20 20 28 43 6c 69 65 6e 74 44 61  ...    (ClientDa
3140: 74 61 29 20 4e 55 4c 4c 29 3b 0a 09 20 20 20 20  ta) NULL);..    
3150: 69 66 20 28 70 61 63 6b 50 74 72 2d 3e 6d 61 73  if (packPtr->mas
3160: 74 65 72 50 74 72 2d 3e 74 6b 77 69 6e 20 21 3d  terPtr->tkwin !=
3170: 20 54 6b 5f 50 61 72 65 6e 74 28 70 61 63 6b 50   Tk_Parent(packP
3180: 74 72 2d 3e 74 6b 77 69 6e 29 29 20 7b 0a 09 09  tr->tkwin)) {...
3190: 54 6b 5f 55 6e 6d 61 69 6e 74 61 69 6e 47 65 6f  Tk_UnmaintainGeo
31a0: 6d 65 74 72 79 28 70 61 63 6b 50 74 72 2d 3e 74  metry(packPtr->t
31b0: 6b 77 69 6e 2c 0a 09 09 09 70 61 63 6b 50 74 72  kwin,....packPtr
31c0: 2d 3e 6d 61 73 74 65 72 50 74 72 2d 3e 74 6b 77  ->masterPtr->tkw
31d0: 69 6e 29 3b 0a 09 20 20 20 20 7d 0a 09 20 20 20  in);..    }..   
31e0: 20 55 6e 6c 69 6e 6b 28 70 61 63 6b 50 74 72 29   Unlink(packPtr)
31f0: 3b 0a 09 20 20 20 20 54 6b 5f 55 6e 6d 61 70 57  ;..    Tk_UnmapW
3200: 69 6e 64 6f 77 28 70 61 63 6b 50 74 72 2d 3e 74  indow(packPtr->t
3210: 6b 77 69 6e 29 3b 0a 09 7d 0a 20 20 20 20 7d 20  kwin);..}.    } 
3220: 65 6c 73 65 20 7b 0a 09 54 63 6c 5f 41 70 70 65  else {..Tcl_Appe
3230: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
3240: 20 22 62 61 64 20 6f 70 74 69 6f 6e 20 5c 22 22   "bad option \""
3250: 2c 20 61 72 67 76 5b 31 5d 2c 0a 09 09 22 5c 22  , argv[1],..."\"
3260: 3a 20 20 6d 75 73 74 20 62 65 20 63 6f 6e 66 69  :  must be confi
3270: 67 75 72 65 2c 20 66 6f 72 67 65 74 2c 20 69 6e  gure, forget, in
3280: 66 6f 2c 20 22 2c 0a 09 09 22 70 72 6f 70 61 67  fo, ",..."propag
3290: 61 74 65 2c 20 6f 72 20 73 6c 61 76 65 73 22 2c  ate, or slaves",
32a0: 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b   (char *) NULL);
32b0: 0a 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ..return TCL_ERR
32c0: 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  OR;.    }.    re
32d0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0c  turn TCL_OK;.}..
32e0: 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ./*. *----------
32f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3310: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3320: 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 50 61 63 6b 52  ----. *. * PackR
3330: 65 71 50 72 6f 63 20 2d 2d 0a 20 2a 0a 20 2a 09  eqProc --. *. *.
3340: 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 69  This procedure i
3350: 73 20 69 6e 76 6f 6b 65 64 20 62 79 20 54 6b 5f  s invoked by Tk_
3360: 47 65 6f 6d 65 74 72 79 52 65 71 75 65 73 74 20  GeometryRequest 
3370: 66 6f 72 0a 20 2a 09 77 69 6e 64 6f 77 73 20 6d  for. *.windows m
3380: 61 6e 61 67 65 64 20 62 79 20 74 68 65 20 70 61  anaged by the pa
3390: 63 6b 65 72 2e 0a 20 2a 0a 20 2a 20 52 65 73 75  cker.. *. * Resu
33a0: 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a  lts:. *.None.. *
33b0: 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 73  . * Side effects
33c0: 3a 0a 20 2a 09 41 72 72 61 6e 67 65 73 20 66 6f  :. *.Arranges fo
33d0: 72 20 74 6b 77 69 6e 2c 20 61 6e 64 20 61 6c 6c  r tkwin, and all
33e0: 20 69 74 73 20 6d 61 6e 61 67 65 64 20 73 69 62   its managed sib
33f0: 6c 69 6e 67 73 2c 20 74 6f 0a 20 2a 09 62 65 20  lings, to. *.be 
3400: 72 65 2d 70 61 63 6b 65 64 20 61 74 20 74 68 65  re-packed at the
3410: 20 6e 65 78 74 20 69 64 6c 65 20 70 6f 69 6e 74   next idle point
3420: 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d  .. *. *---------
3430: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3440: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3450: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3460: 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 09 2f 2a 20 41  -----. */.../* A
3470: 52 47 53 55 53 45 44 20 2a 2f 0a 73 74 61 74 69  RGSUSED */.stati
3480: 63 20 76 6f 69 64 0a 50 61 63 6b 52 65 71 50 72  c void.PackReqPr
3490: 6f 63 28 63 6c 69 65 6e 74 44 61 74 61 2c 20 74  oc(clientData, t
34a0: 6b 77 69 6e 29 0a 20 20 20 20 43 6c 69 65 6e 74  kwin).    Client
34b0: 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 3b  Data clientData;
34c0: 09 2f 2a 20 50 61 63 6b 65 72 27 73 20 69 6e 66  ./* Packer's inf
34d0: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 0a 09  ormation about..
34e0: 09 09 09 20 2a 20 77 69 6e 64 6f 77 20 74 68 61  ... * window tha
34f0: 74 20 67 6f 74 20 6e 65 77 20 70 72 65 66 65 72  t got new prefer
3500: 72 65 64 0a 09 09 09 09 20 2a 20 67 65 6f 6d 65  red..... * geome
3510: 74 72 79 2e 20 20 2a 2f 0a 20 20 20 20 54 6b 5f  try.  */.    Tk_
3520: 57 69 6e 64 6f 77 20 74 6b 77 69 6e 3b 09 09 2f  Window tkwin;../
3530: 2a 20 4f 74 68 65 72 20 54 6b 2d 72 65 6c 61 74  * Other Tk-relat
3540: 65 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 09  ed information..
3550: 09 09 09 20 2a 20 61 62 6f 75 74 20 74 68 65 20  ... * about the 
3560: 77 69 6e 64 6f 77 2e 20 2a 2f 0a 7b 0a 20 20 20  window. */.{.   
3570: 20 72 65 67 69 73 74 65 72 20 50 61 63 6b 65 72   register Packer
3580: 20 2a 70 61 63 6b 50 74 72 20 3d 20 28 50 61 63   *packPtr = (Pac
3590: 6b 65 72 20 2a 29 20 63 6c 69 65 6e 74 44 61 74  ker *) clientDat
35a0: 61 3b 0a 0a 20 20 20 20 70 61 63 6b 50 74 72 20  a;..    packPtr 
35b0: 3d 20 70 61 63 6b 50 74 72 2d 3e 6d 61 73 74 65  = packPtr->maste
35c0: 72 50 74 72 3b 0a 20 20 20 20 69 66 20 28 21 28  rPtr;.    if (!(
35d0: 70 61 63 6b 50 74 72 2d 3e 66 6c 61 67 73 20 26  packPtr->flags &
35e0: 20 52 45 51 55 45 53 54 45 44 5f 52 45 50 41 43   REQUESTED_REPAC
35f0: 4b 29 29 20 7b 0a 09 70 61 63 6b 50 74 72 2d 3e  K)) {..packPtr->
3600: 66 6c 61 67 73 20 7c 3d 20 52 45 51 55 45 53 54  flags |= REQUEST
3610: 45 44 5f 52 45 50 41 43 4b 3b 0a 09 54 63 6c 5f  ED_REPACK;..Tcl_
3620: 44 6f 57 68 65 6e 49 64 6c 65 28 41 72 72 61 6e  DoWhenIdle(Arran
3630: 67 65 50 61 63 6b 69 6e 67 2c 20 28 43 6c 69 65  gePacking, (Clie
3640: 6e 74 44 61 74 61 29 20 70 61 63 6b 50 74 72 29  ntData) packPtr)
3650: 3b 0a 20 20 20 20 7d 0a 7d 0a 0c 0a 2f 2a 0a 20  ;.    }.}.../*. 
3660: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *---------------
3670: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3680: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3690: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
36a0: 20 2a 0a 20 2a 20 50 61 63 6b 4c 6f 73 74 53 6c   *. * PackLostSl
36b0: 61 76 65 50 72 6f 63 20 2d 2d 0a 20 2a 0a 20 2a  aveProc --. *. *
36c0: 09 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20  .This procedure 
36d0: 69 73 20 69 6e 76 6f 6b 65 64 20 62 79 20 54 6b  is invoked by Tk
36e0: 20 77 68 65 6e 65 76 65 72 20 73 6f 6d 65 20 6f   whenever some o
36f0: 74 68 65 72 20 67 65 6f 6d 65 74 72 79 0a 20 2a  ther geometry. *
3700: 09 63 6c 61 69 6d 73 20 63 6f 6e 74 72 6f 6c 20  .claims control 
3710: 6f 76 65 72 20 61 20 73 6c 61 76 65 20 74 68 61  over a slave tha
3720: 74 20 75 73 65 64 20 74 6f 20 62 65 20 6d 61 6e  t used to be man
3730: 61 67 65 64 20 62 79 20 75 73 2e 0a 20 2a 0a 20  aged by us.. *. 
3740: 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 4e 6f  * Results:. *.No
3750: 6e 65 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20 65  ne.. *. * Side e
3760: 66 66 65 63 74 73 3a 0a 20 2a 09 46 6f 72 67 65  ffects:. *.Forge
3770: 74 73 20 61 6c 6c 20 70 61 63 6b 65 72 2d 72 65  ts all packer-re
3780: 6c 61 74 65 64 20 69 6e 66 6f 72 6d 61 74 69 6f  lated informatio
3790: 6e 20 61 62 6f 75 74 20 74 68 65 20 73 6c 61 76  n about the slav
37a0: 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d  e.. *. *--------
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 2d 0a 20 2a 2f 0a 0a 09 2f 2a 20  ------. */.../* 
37f0: 41 52 47 53 55 53 45 44 20 2a 2f 0a 73 74 61 74  ARGSUSED */.stat
3800: 69 63 20 76 6f 69 64 0a 50 61 63 6b 4c 6f 73 74  ic void.PackLost
3810: 53 6c 61 76 65 50 72 6f 63 28 63 6c 69 65 6e 74  SlaveProc(client
3820: 44 61 74 61 2c 20 74 6b 77 69 6e 29 0a 20 20 20  Data, tkwin).   
3830: 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65   ClientData clie
3840: 6e 74 44 61 74 61 3b 09 2f 2a 20 50 61 63 6b 65  ntData;./* Packe
3850: 72 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  r structure for 
3860: 73 6c 61 76 65 20 77 69 6e 64 6f 77 20 74 68 61  slave window tha
3870: 74 0a 09 09 09 09 20 2a 20 77 61 73 20 73 74 6f  t..... * was sto
3880: 6c 65 6e 20 61 77 61 79 2e 20 2a 2f 0a 20 20 20  len away. */.   
3890: 20 54 6b 5f 57 69 6e 64 6f 77 20 74 6b 77 69 6e   Tk_Window tkwin
38a0: 3b 09 09 2f 2a 20 54 6b 27 73 20 68 61 6e 64 6c  ;../* Tk's handl
38b0: 65 20 66 6f 72 20 74 68 65 20 73 6c 61 76 65 20  e for the slave 
38c0: 77 69 6e 64 6f 77 2e 20 2a 2f 0a 7b 0a 20 20 20  window. */.{.   
38d0: 20 72 65 67 69 73 74 65 72 20 50 61 63 6b 65 72   register Packer
38e0: 20 2a 73 6c 61 76 65 50 74 72 20 3d 20 28 50 61   *slavePtr = (Pa
38f0: 63 6b 65 72 20 2a 29 20 63 6c 69 65 6e 74 44 61  cker *) clientDa
3900: 74 61 3b 0a 0a 20 20 20 20 69 66 20 28 73 6c 61  ta;..    if (sla
3910: 76 65 50 74 72 2d 3e 6d 61 73 74 65 72 50 74 72  vePtr->masterPtr
3920: 2d 3e 74 6b 77 69 6e 20 21 3d 20 54 6b 5f 50 61  ->tkwin != Tk_Pa
3930: 72 65 6e 74 28 73 6c 61 76 65 50 74 72 2d 3e 74  rent(slavePtr->t
3940: 6b 77 69 6e 29 29 20 7b 0a 09 54 6b 5f 55 6e 6d  kwin)) {..Tk_Unm
3950: 61 69 6e 74 61 69 6e 47 65 6f 6d 65 74 72 79 28  aintainGeometry(
3960: 73 6c 61 76 65 50 74 72 2d 3e 74 6b 77 69 6e 2c  slavePtr->tkwin,
3970: 20 73 6c 61 76 65 50 74 72 2d 3e 6d 61 73 74 65   slavePtr->maste
3980: 72 50 74 72 2d 3e 74 6b 77 69 6e 29 3b 0a 20 20  rPtr->tkwin);.  
3990: 20 20 7d 0a 20 20 20 20 55 6e 6c 69 6e 6b 28 73    }.    Unlink(s
39a0: 6c 61 76 65 50 74 72 29 3b 0a 20 20 20 20 54 6b  lavePtr);.    Tk
39b0: 5f 55 6e 6d 61 70 57 69 6e 64 6f 77 28 73 6c 61  _UnmapWindow(sla
39c0: 76 65 50 74 72 2d 3e 74 6b 77 69 6e 29 3b 0a 7d  vePtr->tkwin);.}
39d0: 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d  .../*. *--------
39e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
39f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3a10: 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 41 72 72  ------. *. * Arr
3a20: 61 6e 67 65 50 61 63 6b 69 6e 67 20 2d 2d 0a 20  angePacking --. 
3a30: 2a 0a 20 2a 09 54 68 69 73 20 70 72 6f 63 65 64  *. *.This proced
3a40: 75 72 65 20 69 73 20 69 6e 76 6f 6b 65 64 20 28  ure is invoked (
3a50: 75 73 69 6e 67 20 74 68 65 20 54 63 6c 5f 44 6f  using the Tcl_Do
3a60: 57 68 65 6e 49 64 6c 65 0a 20 2a 09 6d 65 63 68  WhenIdle. *.mech
3a70: 61 6e 69 73 6d 29 20 74 6f 20 72 65 2d 6c 61 79  anism) to re-lay
3a80: 6f 75 74 20 61 20 73 65 74 20 6f 66 20 77 69 6e  out a set of win
3a90: 64 6f 77 73 20 6d 61 6e 61 67 65 64 20 62 79 0a  dows managed by.
3aa0: 20 2a 09 74 68 65 20 70 61 63 6b 65 72 2e 20 20   *.the packer.  
3ab0: 49 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 74  It is invoked at
3ac0: 20 69 64 6c 65 20 74 69 6d 65 20 73 6f 20 74 68   idle time so th
3ad0: 61 74 20 61 0a 20 2a 09 73 65 72 69 65 73 20 6f  at a. *.series o
3ae0: 66 20 70 61 63 6b 65 72 20 72 65 71 75 65 73 74  f packer request
3af0: 73 20 63 61 6e 20 62 65 20 6d 65 72 67 65 64 20  s can be merged 
3b00: 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 0a 20 2a  into a single. *
3b10: 09 6c 61 79 6f 75 74 20 6f 70 65 72 61 74 69 6f  .layout operatio
3b20: 6e 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73  n.. *. * Results
3b30: 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a  :. *.None.. *. *
3b40: 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 20   Side effects:. 
3b50: 2a 09 54 68 65 20 70 61 63 6b 65 64 20 73 6c 61  *.The packed sla
3b60: 76 65 73 20 6f 66 20 6d 61 73 74 65 72 50 74 72  ves of masterPtr
3b70: 20 6d 61 79 20 67 65 74 20 72 65 73 69 7a 65 64   may get resized
3b80: 20 6f 72 0a 20 2a 09 6d 6f 76 65 64 2e 0a 20 2a   or. *.moved.. *
3b90: 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  . *-------------
3ba0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3bb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3bc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3bd0: 2d 0a 20 2a 2f 0a 0a 73 74 61 74 69 63 20 76 6f  -. */..static vo
3be0: 69 64 0a 41 72 72 61 6e 67 65 50 61 63 6b 69 6e  id.ArrangePackin
3bf0: 67 28 63 6c 69 65 6e 74 44 61 74 61 29 0a 20 20  g(clientData).  
3c00: 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69    ClientData cli
3c10: 65 6e 74 44 61 74 61 3b 09 2f 2a 20 53 74 72 75  entData;./* Stru
3c20: 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67  cture describing
3c30: 20 70 61 72 65 6e 74 20 77 68 6f 73 65 20 73 6c   parent whose sl
3c40: 61 76 65 73 0a 09 09 09 09 20 2a 20 61 72 65 20  aves..... * are 
3c50: 74 6f 20 62 65 20 72 65 2d 6c 61 79 65 64 20 6f  to be re-layed o
3c60: 75 74 2e 20 2a 2f 0a 7b 0a 20 20 20 20 72 65 67  ut. */.{.    reg
3c70: 69 73 74 65 72 20 50 61 63 6b 65 72 20 2a 6d 61  ister Packer *ma
3c80: 73 74 65 72 50 74 72 20 3d 20 28 50 61 63 6b 65  sterPtr = (Packe
3c90: 72 20 2a 29 20 63 6c 69 65 6e 74 44 61 74 61 3b  r *) clientData;
3ca0: 0a 20 20 20 20 72 65 67 69 73 74 65 72 20 50 61  .    register Pa
3cb0: 63 6b 65 72 20 2a 73 6c 61 76 65 50 74 72 3b 09  cker *slavePtr;.
3cc0: 0a 20 20 20 20 69 6e 74 20 63 61 76 69 74 79 58  .    int cavityX
3cd0: 2c 20 63 61 76 69 74 79 59 2c 20 63 61 76 69 74  , cavityY, cavit
3ce0: 79 57 69 64 74 68 2c 20 63 61 76 69 74 79 48 65  yWidth, cavityHe
3cf0: 69 67 68 74 3b 0a 09 09 09 09 2f 2a 20 54 68 65  ight;...../* The
3d00: 73 65 20 76 61 72 69 61 62 6c 65 73 20 6b 65 65  se variables kee
3d10: 70 20 74 72 61 63 6b 20 6f 66 20 74 68 65 0a 09  p track of the..
3d20: 09 09 09 20 2a 20 61 73 2d 79 65 74 2d 75 6e 61  ... * as-yet-una
3d30: 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 72  llocated space r
3d40: 65 6d 61 69 6e 69 6e 67 20 69 6e 0a 09 09 09 09  emaining in.....
3d50: 20 2a 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66   * the middle of
3d60: 20 74 68 65 20 70 61 72 65 6e 74 20 77 69 6e 64   the parent wind
3d70: 6f 77 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 66  ow. */.    int f
3d80: 72 61 6d 65 58 2c 20 66 72 61 6d 65 59 2c 20 66  rameX, frameY, f
3d90: 72 61 6d 65 57 69 64 74 68 2c 20 66 72 61 6d 65  rameWidth, frame
3da0: 48 65 69 67 68 74 3b 0a 09 09 09 09 2f 2a 20 54  Height;...../* T
3db0: 68 65 73 65 20 76 61 72 69 61 62 6c 65 73 20 6b  hese variables k
3dc0: 65 65 70 20 74 72 61 63 6b 20 6f 66 20 74 68 65  eep track of the
3dd0: 20 66 72 61 6d 65 0a 09 09 09 09 20 2a 20 61 6c   frame..... * al
3de0: 6c 6f 63 61 74 65 64 20 74 6f 20 74 68 65 20 63  located to the c
3df0: 75 72 72 65 6e 74 20 77 69 6e 64 6f 77 2e 20 2a  urrent window. *
3e00: 2f 0a 20 20 20 20 69 6e 74 20 78 2c 20 79 2c 20  /.    int x, y, 
3e10: 77 69 64 74 68 2c 20 68 65 69 67 68 74 3b 09 2f  width, height;./
3e20: 2a 20 54 68 65 73 65 20 76 61 72 69 61 62 6c 65  * These variable
3e30: 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 68 6f  s are used to ho
3e40: 6c 64 20 74 68 65 0a 09 09 09 09 20 2a 20 61 63  ld the..... * ac
3e50: 74 75 61 6c 20 67 65 6f 6d 65 74 72 79 20 6f 66  tual geometry of
3e60: 20 74 68 65 20 63 75 72 72 65 6e 74 20 77 69 6e   the current win
3e70: 64 6f 77 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  dow. */.    int 
3e80: 69 6e 74 42 57 69 64 74 68 3b 09 09 2f 2a 20 57  intBWidth;../* W
3e90: 69 64 74 68 20 6f 66 20 69 6e 74 65 72 6e 61 6c  idth of internal
3ea0: 20 62 6f 72 64 65 72 20 69 6e 20 70 61 72 65 6e   border in paren
3eb0: 74 20 77 69 6e 64 6f 77 2c 0a 09 09 09 09 20 2a  t window,..... *
3ec0: 20 69 66 20 61 6e 79 2e 20 2a 2f 0a 20 20 20 20   if any. */.    
3ed0: 69 6e 74 20 61 62 6f 72 74 3b 09 09 09 2f 2a 20  int abort;.../* 
3ee0: 4d 61 79 20 67 65 74 20 73 65 74 20 74 6f 20 6e  May get set to n
3ef0: 6f 6e 2d 7a 65 72 6f 20 74 6f 20 61 62 6f 72 74  on-zero to abort
3f00: 20 74 68 69 73 0a 09 09 09 09 20 2a 20 72 65 70   this..... * rep
3f10: 61 63 6b 69 6e 67 20 6f 70 65 72 61 74 69 6f 6e  acking operation
3f20: 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62 6f 72  . */.    int bor
3f30: 64 65 72 58 2c 20 62 6f 72 64 65 72 59 3b 0a 20  derX, borderY;. 
3f40: 20 20 20 69 6e 74 20 6d 61 78 57 69 64 74 68 2c     int maxWidth,
3f50: 20 6d 61 78 48 65 69 67 68 74 2c 20 74 6d 70 3b   maxHeight, tmp;
3f60: 0a 0a 20 20 20 20 6d 61 73 74 65 72 50 74 72 2d  ..    masterPtr-
3f70: 3e 66 6c 61 67 73 20 26 3d 20 7e 52 45 51 55 45  >flags &= ~REQUE
3f80: 53 54 45 44 5f 52 45 50 41 43 4b 3b 0a 0a 20 20  STED_REPACK;..  
3f90: 20 20 2f 2a 0a 20 20 20 20 20 2a 20 49 66 20 74    /*.     * If t
3fa0: 68 65 20 70 61 72 65 6e 74 20 68 61 73 20 6e 6f  he parent has no
3fb0: 20 73 6c 61 76 65 73 20 61 6e 79 6d 6f 72 65 2c   slaves anymore,
3fc0: 20 74 68 65 6e 20 64 6f 6e 27 74 20 64 6f 20 61   then don't do a
3fd0: 6e 79 74 68 69 6e 67 0a 20 20 20 20 20 2a 20 61  nything.     * a
3fe0: 74 20 61 6c 6c 3a 20 20 6a 75 73 74 20 6c 65 61  t all:  just lea
3ff0: 76 65 20 74 68 65 20 70 61 72 65 6e 74 27 73 20  ve the parent's 
4000: 73 69 7a 65 20 61 73 2d 69 73 2e 0a 20 20 20 20  size as-is..    
4010: 20 2a 2f 0a 0a 20 20 20 20 69 66 20 28 6d 61 73   */..    if (mas
4020: 74 65 72 50 74 72 2d 3e 73 6c 61 76 65 50 74 72  terPtr->slavePtr
4030: 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 72 65 74   == NULL) {..ret
4040: 75 72 6e 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  urn;.    }..    
4050: 2f 2a 0a 20 20 20 20 20 2a 20 41 62 6f 72 74 20  /*.     * Abort 
4060: 61 6e 79 20 6e 65 73 74 65 64 20 63 61 6c 6c 20  any nested call 
4070: 74 6f 20 41 72 72 61 6e 67 65 50 61 63 6b 69 6e  to ArrangePackin
4080: 67 20 66 6f 72 20 74 68 69 73 20 77 69 6e 64 6f  g for this windo
4090: 77 2c 20 73 69 6e 63 65 0a 20 20 20 20 20 2a 20  w, since.     * 
40a0: 77 65 27 6c 6c 20 64 6f 20 65 76 65 72 79 74 68  we'll do everyth
40b0: 69 6e 67 20 6e 65 63 65 73 73 61 72 79 20 68 65  ing necessary he
40c0: 72 65 2c 20 61 6e 64 20 73 65 74 20 75 70 20 73  re, and set up s
40d0: 6f 20 74 68 69 73 20 63 61 6c 6c 0a 20 20 20 20  o this call.    
40e0: 20 2a 20 63 61 6e 20 62 65 20 61 62 6f 72 74 65   * can be aborte
40f0: 64 20 69 66 20 6e 65 63 65 73 73 61 72 79 2e 20  d if necessary. 
4100: 20 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 69   .     */..    i
4110: 66 20 28 6d 61 73 74 65 72 50 74 72 2d 3e 61 62  f (masterPtr->ab
4120: 6f 72 74 50 74 72 20 21 3d 20 4e 55 4c 4c 29 20  ortPtr != NULL) 
4130: 7b 0a 09 2a 6d 61 73 74 65 72 50 74 72 2d 3e 61  {..*masterPtr->a
4140: 62 6f 72 74 50 74 72 20 3d 20 31 3b 0a 20 20 20  bortPtr = 1;.   
4150: 20 7d 0a 20 20 20 20 6d 61 73 74 65 72 50 74 72   }.    masterPtr
4160: 2d 3e 61 62 6f 72 74 50 74 72 20 3d 20 26 61 62  ->abortPtr = &ab
4170: 6f 72 74 3b 0a 20 20 20 20 61 62 6f 72 74 20 3d  ort;.    abort =
4180: 20 30 3b 0a 20 20 20 20 54 6b 5f 50 72 65 73 65   0;.    Tk_Prese
4190: 72 76 65 28 28 43 6c 69 65 6e 74 44 61 74 61 29  rve((ClientData)
41a0: 20 6d 61 73 74 65 72 50 74 72 29 3b 0a 0a 20 20   masterPtr);..  
41b0: 20 20 2f 2a 0a 20 20 20 20 20 2a 20 50 61 73 73    /*.     * Pass
41c0: 20 23 31 3a 20 73 63 61 6e 20 61 6c 6c 20 74 68   #1: scan all th
41d0: 65 20 73 6c 61 76 65 73 20 74 6f 20 66 69 67 75  e slaves to figu
41e0: 72 65 20 6f 75 74 20 74 68 65 20 74 6f 74 61 6c  re out the total
41f0: 20 61 6d 6f 75 6e 74 0a 20 20 20 20 20 2a 20 6f   amount.     * o
4200: 66 20 73 70 61 63 65 20 6e 65 65 64 65 64 2e 20  f space needed. 
4210: 20 54 77 6f 20 73 65 70 61 72 61 74 65 20 77 69   Two separate wi
4220: 64 74 68 20 61 6e 64 20 68 65 69 67 68 74 20 76  dth and height v
4230: 61 6c 75 65 73 20 61 72 65 0a 20 20 20 20 20 2a  alues are.     *
4240: 20 63 6f 6d 70 75 74 65 64 3a 0a 20 20 20 20 20   computed:.     
4250: 2a 0a 20 20 20 20 20 2a 20 77 69 64 74 68 20 2d  *.     * width -
4260: 09 09 48 6f 6c 64 73 20 74 68 65 20 73 75 6d 20  ..Holds the sum 
4270: 6f 66 20 74 68 65 20 77 69 64 74 68 73 20 28 70  of the widths (p
4280: 6c 75 73 20 70 61 64 64 69 6e 67 29 20 6f 66 0a  lus padding) of.
4290: 20 20 20 20 20 2a 09 09 09 61 6c 6c 20 74 68 65       *...all the
42a0: 20 73 6c 61 76 65 73 20 73 65 65 6e 20 73 6f 20   slaves seen so 
42b0: 66 61 72 20 74 68 61 74 20 77 65 72 65 20 70 61  far that were pa
42c0: 63 6b 65 64 20 4c 45 46 54 0a 20 20 20 20 20 2a  cked LEFT.     *
42d0: 09 09 09 6f 72 20 52 49 47 48 54 2e 0a 20 20 20  ...or RIGHT..   
42e0: 20 20 2a 20 68 65 69 67 68 74 20 2d 09 09 48 6f    * height -..Ho
42f0: 6c 64 73 20 74 68 65 20 73 75 6d 20 6f 66 20 74  lds the sum of t
4300: 68 65 20 68 65 69 67 68 74 73 20 28 70 6c 75 73  he heights (plus
4310: 20 70 61 64 64 69 6e 67 29 20 6f 66 0a 20 20 20   padding) of.   
4320: 20 20 2a 09 09 09 61 6c 6c 20 74 68 65 20 73 6c    *...all the sl
4330: 61 76 65 73 20 73 65 65 6e 20 73 6f 20 66 61 72  aves seen so far
4340: 20 74 68 61 74 20 77 65 72 65 20 70 61 63 6b 65   that were packe
4350: 64 20 54 4f 50 0a 20 20 20 20 20 2a 09 09 09 6f  d TOP.     *...o
4360: 72 20 42 4f 54 54 4f 4d 2e 0a 20 20 20 20 20 2a  r BOTTOM..     *
4370: 0a 20 20 20 20 20 2a 20 6d 61 78 57 69 64 74 68  .     * maxWidth
4380: 20 2d 09 47 72 61 64 75 61 6c 6c 79 20 62 75 69   -.Gradually bui
4390: 6c 64 73 20 75 70 20 74 68 65 20 77 69 64 74 68  lds up the width
43a0: 20 6e 65 65 64 65 64 20 62 79 20 74 68 65 20 6d   needed by the m
43b0: 61 73 74 65 72 0a 20 20 20 20 20 2a 09 09 09 74  aster.     *...t
43c0: 6f 20 6a 75 73 74 20 62 61 72 65 6c 79 20 73 61  o just barely sa
43d0: 74 69 73 66 79 20 61 6c 6c 20 74 68 65 20 73 6c  tisfy all the sl
43e0: 61 76 65 27 73 20 6e 65 65 64 73 2e 20 20 46 6f  ave's needs.  Fo
43f0: 72 0a 20 20 20 20 20 2a 09 09 09 65 61 63 68 20  r.     *...each 
4400: 73 6c 61 76 65 2c 20 74 68 65 20 63 6f 64 65 20  slave, the code 
4410: 63 6f 6d 70 75 74 65 73 20 74 68 65 20 77 69 64  computes the wid
4420: 74 68 20 6e 65 65 64 65 64 20 66 6f 72 0a 20 20  th needed for.  
4430: 20 20 20 2a 09 09 09 61 6c 6c 20 74 68 65 20 73     *...all the s
4440: 6c 61 76 65 73 20 73 6f 20 66 61 72 20 61 6e 64  laves so far and
4450: 20 75 70 64 61 74 65 73 20 6d 61 78 57 69 64 74   updates maxWidt
4460: 68 20 69 66 20 74 68 65 0a 20 20 20 20 20 2a 09  h if the.     *.
4470: 09 09 6e 65 77 20 76 61 6c 75 65 20 69 73 20 67  ..new value is g
4480: 72 65 61 74 65 72 2e 0a 20 20 20 20 20 2a 20 6d  reater..     * m
4490: 61 78 48 65 69 67 68 74 20 2d 09 53 61 6d 65 20  axHeight -.Same 
44a0: 61 73 20 6d 61 78 57 69 64 74 68 2c 20 65 78 63  as maxWidth, exc
44b0: 65 70 74 20 6b 65 65 70 73 20 68 65 69 67 68 74  ept keeps height
44c0: 20 69 6e 66 6f 2e 0a 20 20 20 20 20 2a 2f 0a 0a   info..     */..
44d0: 20 20 20 20 69 6e 74 42 57 69 64 74 68 20 3d 20      intBWidth = 
44e0: 54 6b 5f 49 6e 74 65 72 6e 61 6c 42 6f 72 64 65  Tk_InternalBorde
44f0: 72 57 69 64 74 68 28 6d 61 73 74 65 72 50 74 72  rWidth(masterPtr
4500: 2d 3e 74 6b 77 69 6e 29 3b 0a 20 20 20 20 77 69  ->tkwin);.    wi
4510: 64 74 68 20 3d 20 68 65 69 67 68 74 20 3d 20 6d  dth = height = m
4520: 61 78 57 69 64 74 68 20 3d 20 6d 61 78 48 65 69  axWidth = maxHei
4530: 67 68 74 20 3d 20 32 2a 69 6e 74 42 57 69 64 74  ght = 2*intBWidt
4540: 68 3b 0a 20 20 20 20 66 6f 72 20 28 73 6c 61 76  h;.    for (slav
4550: 65 50 74 72 20 3d 20 6d 61 73 74 65 72 50 74 72  ePtr = masterPtr
4560: 2d 3e 73 6c 61 76 65 50 74 72 3b 20 73 6c 61 76  ->slavePtr; slav
4570: 65 50 74 72 20 21 3d 20 4e 55 4c 4c 3b 0a 09 20  ePtr != NULL;.. 
4580: 20 20 20 73 6c 61 76 65 50 74 72 20 3d 20 73 6c     slavePtr = sl
4590: 61 76 65 50 74 72 2d 3e 6e 65 78 74 50 74 72 29  avePtr->nextPtr)
45a0: 20 7b 0a 09 69 66 20 28 28 73 6c 61 76 65 50 74   {..if ((slavePt
45b0: 72 2d 3e 73 69 64 65 20 3d 3d 20 54 4f 50 29 20  r->side == TOP) 
45c0: 7c 7c 20 28 73 6c 61 76 65 50 74 72 2d 3e 73 69  || (slavePtr->si
45d0: 64 65 20 3d 3d 20 42 4f 54 54 4f 4d 29 29 20 7b  de == BOTTOM)) {
45e0: 0a 09 20 20 20 20 74 6d 70 20 3d 20 54 6b 5f 52  ..    tmp = Tk_R
45f0: 65 71 57 69 64 74 68 28 73 6c 61 76 65 50 74 72  eqWidth(slavePtr
4600: 2d 3e 74 6b 77 69 6e 29 20 2b 20 73 6c 61 76 65  ->tkwin) + slave
4610: 50 74 72 2d 3e 64 6f 75 62 6c 65 42 77 0a 09 09  Ptr->doubleBw...
4620: 20 20 20 20 2b 20 73 6c 61 76 65 50 74 72 2d 3e      + slavePtr->
4630: 70 61 64 58 20 2b 20 73 6c 61 76 65 50 74 72 2d  padX + slavePtr-
4640: 3e 69 50 61 64 58 20 2b 20 77 69 64 74 68 3b 0a  >iPadX + width;.
4650: 09 20 20 20 20 69 66 20 28 74 6d 70 20 3e 20 6d  .    if (tmp > m
4660: 61 78 57 69 64 74 68 29 20 7b 0a 09 09 6d 61 78  axWidth) {...max
4670: 57 69 64 74 68 20 3d 20 74 6d 70 3b 0a 09 20 20  Width = tmp;..  
4680: 20 20 7d 0a 09 20 20 20 20 68 65 69 67 68 74 20    }..    height 
4690: 2b 3d 20 54 6b 5f 52 65 71 48 65 69 67 68 74 28  += Tk_ReqHeight(
46a0: 73 6c 61 76 65 50 74 72 2d 3e 74 6b 77 69 6e 29  slavePtr->tkwin)
46b0: 20 2b 20 73 6c 61 76 65 50 74 72 2d 3e 64 6f 75   + slavePtr->dou
46c0: 62 6c 65 42 77 0a 09 09 20 20 20 20 2b 20 73 6c  bleBw...    + sl
46d0: 61 76 65 50 74 72 2d 3e 70 61 64 59 20 2b 20 73  avePtr->padY + s
46e0: 6c 61 76 65 50 74 72 2d 3e 69 50 61 64 59 3b 0a  lavePtr->iPadY;.
46f0: 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 74  .} else {..    t
4700: 6d 70 20 3d 20 54 6b 5f 52 65 71 48 65 69 67 68  mp = Tk_ReqHeigh
4710: 74 28 73 6c 61 76 65 50 74 72 2d 3e 74 6b 77 69  t(slavePtr->tkwi
4720: 6e 29 20 2b 20 73 6c 61 76 65 50 74 72 2d 3e 64  n) + slavePtr->d
4730: 6f 75 62 6c 65 42 77 0a 09 09 20 20 20 20 2b 20  oubleBw...    + 
4740: 73 6c 61 76 65 50 74 72 2d 3e 70 61 64 59 20 2b  slavePtr->padY +
4750: 20 73 6c 61 76 65 50 74 72 2d 3e 69 50 61 64 59   slavePtr->iPadY
4760: 20 2b 20 68 65 69 67 68 74 3b 0a 09 20 20 20 20   + height;..    
4770: 69 66 20 28 74 6d 70 20 3e 20 6d 61 78 48 65 69  if (tmp > maxHei
4780: 67 68 74 29 20 7b 0a 09 09 6d 61 78 48 65 69 67  ght) {...maxHeig
4790: 68 74 20 3d 20 74 6d 70 3b 0a 09 20 20 20 20 7d  ht = tmp;..    }
47a0: 0a 09 20 20 20 20 77 69 64 74 68 20 2b 3d 20 54  ..    width += T
47b0: 6b 5f 52 65 71 57 69 64 74 68 28 73 6c 61 76 65  k_ReqWidth(slave
47c0: 50 74 72 2d 3e 74 6b 77 69 6e 29 20 2b 20 73 6c  Ptr->tkwin) + sl
47d0: 61 76 65 50 74 72 2d 3e 64 6f 75 62 6c 65 42 77  avePtr->doubleBw
47e0: 0a 09 09 20 20 20 20 2b 20 73 6c 61 76 65 50 74  ...    + slavePt
47f0: 72 2d 3e 70 61 64 58 20 2b 20 73 6c 61 76 65 50  r->padX + slaveP
4800: 74 72 2d 3e 69 50 61 64 58 3b 0a 09 7d 0a 20 20  tr->iPadX;..}.  
4810: 20 20 7d 0a 20 20 20 20 69 66 20 28 77 69 64 74    }.    if (widt
4820: 68 20 3e 20 6d 61 78 57 69 64 74 68 29 20 7b 0a  h > maxWidth) {.
4830: 09 6d 61 78 57 69 64 74 68 20 3d 20 77 69 64 74  .maxWidth = widt
4840: 68 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20  h;.    }.    if 
4850: 28 68 65 69 67 68 74 20 3e 20 6d 61 78 48 65 69  (height > maxHei
4860: 67 68 74 29 20 7b 0a 09 6d 61 78 48 65 69 67 68  ght) {..maxHeigh
4870: 74 20 3d 20 68 65 69 67 68 74 3b 0a 20 20 20 20  t = height;.    
4880: 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a  }..    /*.     *
4890: 20 49 66 20 74 68 65 20 74 6f 74 61 6c 20 61 6d   If the total am
48a0: 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20 6e 65  ount of space ne
48b0: 65 64 65 64 20 69 6e 20 74 68 65 20 70 61 72 65  eded in the pare
48c0: 6e 74 20 77 69 6e 64 6f 77 20 68 61 73 0a 20 20  nt window has.  
48d0: 20 20 20 2a 20 63 68 61 6e 67 65 64 2c 20 61 6e     * changed, an
48e0: 64 20 69 66 20 77 65 27 72 65 20 70 72 6f 70 61  d if we're propa
48f0: 67 61 74 69 6e 67 20 67 65 6f 6d 65 74 72 79 20  gating geometry 
4900: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65  information, the
4910: 6e 0a 20 20 20 20 20 2a 20 6e 6f 74 69 66 79 20  n.     * notify 
4920: 74 68 65 20 6e 65 78 74 20 67 65 6f 6d 65 74 72  the next geometr
4930: 79 20 6d 61 6e 61 67 65 72 20 75 70 20 61 6e 64  y manager up and
4940: 20 72 65 71 75 65 75 65 20 6f 75 72 73 65 6c 76   requeue ourselv
4950: 65 73 20 74 6f 0a 20 20 20 20 20 2a 20 73 74 61  es to.     * sta
4960: 72 74 20 61 67 61 69 6e 20 61 66 74 65 72 20 74  rt again after t
4970: 68 65 20 70 61 72 65 6e 74 20 68 61 73 20 68 61  he parent has ha
4980: 64 20 61 20 63 68 61 6e 63 65 20 74 6f 0a 20 20  d a chance to.  
4990: 20 20 20 2a 20 72 65 73 69 7a 65 20 75 73 2e 0a     * resize us..
49a0: 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 69 66 20       */..    if 
49b0: 28 28 28 6d 61 78 57 69 64 74 68 20 21 3d 20 54  (((maxWidth != T
49c0: 6b 5f 52 65 71 57 69 64 74 68 28 6d 61 73 74 65  k_ReqWidth(maste
49d0: 72 50 74 72 2d 3e 74 6b 77 69 6e 29 29 0a 09 20  rPtr->tkwin)).. 
49e0: 20 20 20 7c 7c 20 28 6d 61 78 48 65 69 67 68 74     || (maxHeight
49f0: 20 21 3d 20 54 6b 5f 52 65 71 48 65 69 67 68 74   != Tk_ReqHeight
4a00: 28 6d 61 73 74 65 72 50 74 72 2d 3e 74 6b 77 69  (masterPtr->tkwi
4a10: 6e 29 29 29 0a 09 20 20 20 20 26 26 20 21 28 6d  n)))..    && !(m
4a20: 61 73 74 65 72 50 74 72 2d 3e 66 6c 61 67 73 20  asterPtr->flags 
4a30: 26 20 44 4f 4e 54 5f 50 52 4f 50 41 47 41 54 45  & DONT_PROPAGATE
4a40: 29 29 20 7b 0a 09 54 6b 5f 47 65 6f 6d 65 74 72  )) {..Tk_Geometr
4a50: 79 52 65 71 75 65 73 74 28 6d 61 73 74 65 72 50  yRequest(masterP
4a60: 74 72 2d 3e 74 6b 77 69 6e 2c 20 6d 61 78 57 69  tr->tkwin, maxWi
4a70: 64 74 68 2c 20 6d 61 78 48 65 69 67 68 74 29 3b  dth, maxHeight);
4a80: 0a 09 6d 61 73 74 65 72 50 74 72 2d 3e 66 6c 61  ..masterPtr->fla
4a90: 67 73 20 7c 3d 20 52 45 51 55 45 53 54 45 44 5f  gs |= REQUESTED_
4aa0: 52 45 50 41 43 4b 3b 0a 09 54 63 6c 5f 44 6f 57  REPACK;..Tcl_DoW
4ab0: 68 65 6e 49 64 6c 65 28 41 72 72 61 6e 67 65 50  henIdle(ArrangeP
4ac0: 61 63 6b 69 6e 67 2c 20 28 43 6c 69 65 6e 74 44  acking, (ClientD
4ad0: 61 74 61 29 20 6d 61 73 74 65 72 50 74 72 29 3b  ata) masterPtr);
4ae0: 0a 09 67 6f 74 6f 20 64 6f 6e 65 3b 0a 20 20 20  ..goto done;.   
4af0: 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20   }..    /*.     
4b00: 2a 20 50 61 73 73 20 23 32 3a 20 73 63 61 6e 20  * Pass #2: scan 
4b10: 74 68 65 20 73 6c 61 76 65 73 20 61 20 73 65 63  the slaves a sec
4b20: 6f 6e 64 20 74 69 6d 65 20 61 73 73 69 67 6e 69  ond time assigni
4b30: 6e 67 0a 20 20 20 20 20 2a 20 6e 65 77 20 73 69  ng.     * new si
4b40: 7a 65 73 2e 20 20 54 68 65 20 22 63 61 76 69 74  zes.  The "cavit
4b50: 79 22 20 76 61 72 69 61 62 6c 65 73 20 6b 65 65  y" variables kee
4b60: 70 20 74 72 61 63 6b 20 6f 66 20 74 68 65 0a 20  p track of the. 
4b70: 20 20 20 20 2a 20 75 6e 63 6c 61 69 6d 65 64 20      * unclaimed 
4b80: 73 70 61 63 65 20 69 6e 20 74 68 65 20 63 61 76  space in the cav
4b90: 69 74 79 20 6f 66 20 74 68 65 20 77 69 6e 64 6f  ity of the windo
4ba0: 77 3b 20 20 74 68 69 73 0a 20 20 20 20 20 2a 20  w;  this.     * 
4bb0: 73 68 72 69 6e 6b 73 20 69 6e 77 61 72 64 20 61  shrinks inward a
4bc0: 73 20 77 65 20 61 6c 6c 6f 63 61 74 65 20 77 69  s we allocate wi
4bd0: 6e 64 6f 77 73 20 61 72 6f 75 6e 64 20 74 68 65  ndows around the
4be0: 0a 20 20 20 20 20 2a 20 65 64 67 65 73 2e 20 20  .     * edges.  
4bf0: 54 68 65 20 22 66 72 61 6d 65 22 20 76 61 72 69  The "frame" vari
4c00: 61 62 6c 65 73 20 6b 65 65 70 20 74 72 61 63 6b  ables keep track
4c10: 20 6f 66 20 74 68 65 20 73 70 61 63 65 0a 20 20   of the space.  
4c20: 20 20 20 2a 20 61 6c 6c 6f 63 61 74 65 64 20 74     * allocated t
4c30: 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 77 69  o the current wi
4c40: 6e 64 6f 77 20 61 6e 64 20 69 74 73 20 66 72 61  ndow and its fra
4c50: 6d 65 2e 20 20 54 68 65 0a 20 20 20 20 20 2a 20  me.  The.     * 
4c60: 63 75 72 72 65 6e 74 20 77 69 6e 64 6f 77 20 69  current window i
4c70: 73 20 74 68 65 6e 20 70 6c 61 63 65 64 20 73 6f  s then placed so
4c80: 6d 65 77 68 65 72 65 20 69 6e 73 69 64 65 20 74  mewhere inside t
4c90: 68 65 0a 20 20 20 20 20 2a 20 66 72 61 6d 65 2c  he.     * frame,
4ca0: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 61 6e   depending on an
4cb0: 63 68 6f 72 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20  chor..     */.. 
4cc0: 20 20 20 63 61 76 69 74 79 58 20 3d 20 63 61 76     cavityX = cav
4cd0: 69 74 79 59 20 3d 20 78 20 3d 20 79 20 3d 20 69  ityY = x = y = i
4ce0: 6e 74 42 57 69 64 74 68 3b 0a 20 20 20 20 63 61  ntBWidth;.    ca
4cf0: 76 69 74 79 57 69 64 74 68 20 3d 20 54 6b 5f 57  vityWidth = Tk_W
4d00: 69 64 74 68 28 6d 61 73 74 65 72 50 74 72 2d 3e  idth(masterPtr->
4d10: 74 6b 77 69 6e 29 20 2d 20 32 2a 69 6e 74 42 57  tkwin) - 2*intBW
4d20: 69 64 74 68 3b 0a 20 20 20 20 63 61 76 69 74 79  idth;.    cavity
4d30: 48 65 69 67 68 74 20 3d 20 54 6b 5f 48 65 69 67  Height = Tk_Heig
4d40: 68 74 28 6d 61 73 74 65 72 50 74 72 2d 3e 74 6b  ht(masterPtr->tk
4d50: 77 69 6e 29 20 2d 20 32 2a 69 6e 74 42 57 69 64  win) - 2*intBWid
4d60: 74 68 3b 0a 20 20 20 20 66 6f 72 20 28 73 6c 61  th;.    for (sla
4d70: 76 65 50 74 72 20 3d 20 6d 61 73 74 65 72 50 74  vePtr = masterPt
4d80: 72 2d 3e 73 6c 61 76 65 50 74 72 3b 20 73 6c 61  r->slavePtr; sla
4d90: 76 65 50 74 72 20 21 3d 20 4e 55 4c 4c 3b 0a 09  vePtr != NULL;..
4da0: 20 20 20 20 73 6c 61 76 65 50 74 72 20 3d 20 73      slavePtr = s
4db0: 6c 61 76 65 50 74 72 2d 3e 6e 65 78 74 50 74 72  lavePtr->nextPtr
4dc0: 29 20 7b 0a 09 69 66 20 28 28 73 6c 61 76 65 50  ) {..if ((slaveP
4dd0: 74 72 2d 3e 73 69 64 65 20 3d 3d 20 54 4f 50 29  tr->side == TOP)
4de0: 20 7c 7c 20 28 73 6c 61 76 65 50 74 72 2d 3e 73   || (slavePtr->s
4df0: 69 64 65 20 3d 3d 20 42 4f 54 54 4f 4d 29 29 20  ide == BOTTOM)) 
4e00: 7b 0a 09 20 20 20 20 66 72 61 6d 65 57 69 64 74  {..    frameWidt
4e10: 68 20 3d 20 63 61 76 69 74 79 57 69 64 74 68 3b  h = cavityWidth;
4e20: 0a 09 20 20 20 20 66 72 61 6d 65 48 65 69 67 68  ..    frameHeigh
4e30: 74 20 3d 20 54 6b 5f 52 65 71 48 65 69 67 68 74  t = Tk_ReqHeight
4e40: 28 73 6c 61 76 65 50 74 72 2d 3e 74 6b 77 69 6e  (slavePtr->tkwin
4e50: 29 20 2b 20 73 6c 61 76 65 50 74 72 2d 3e 64 6f  ) + slavePtr->do
4e60: 75 62 6c 65 42 77 0a 09 09 20 20 20 20 2b 20 73  ubleBw...    + s
4e70: 6c 61 76 65 50 74 72 2d 3e 70 61 64 59 20 2b 20  lavePtr->padY + 
4e80: 73 6c 61 76 65 50 74 72 2d 3e 69 50 61 64 59 3b  slavePtr->iPadY;
4e90: 0a 09 20 20 20 20 69 66 20 28 73 6c 61 76 65 50  ..    if (slaveP
4ea0: 74 72 2d 3e 66 6c 61 67 73 20 26 20 45 58 50 41  tr->flags & EXPA
4eb0: 4e 44 29 20 7b 0a 09 09 66 72 61 6d 65 48 65 69  ND) {...frameHei
4ec0: 67 68 74 20 2b 3d 20 59 45 78 70 61 6e 73 69 6f  ght += YExpansio
4ed0: 6e 28 73 6c 61 76 65 50 74 72 2c 20 63 61 76 69  n(slavePtr, cavi
4ee0: 74 79 48 65 69 67 68 74 29 3b 0a 09 20 20 20 20  tyHeight);..    
4ef0: 7d 0a 09 20 20 20 20 63 61 76 69 74 79 48 65 69  }..    cavityHei
4f00: 67 68 74 20 2d 3d 20 66 72 61 6d 65 48 65 69 67  ght -= frameHeig
4f10: 68 74 3b 0a 09 20 20 20 20 69 66 20 28 63 61 76  ht;..    if (cav
4f20: 69 74 79 48 65 69 67 68 74 20 3c 20 30 29 20 7b  ityHeight < 0) {
4f30: 0a 09 09 66 72 61 6d 65 48 65 69 67 68 74 20 2b  ...frameHeight +
4f40: 3d 20 63 61 76 69 74 79 48 65 69 67 68 74 3b 0a  = cavityHeight;.
4f50: 09 09 63 61 76 69 74 79 48 65 69 67 68 74 20 3d  ..cavityHeight =
4f60: 20 30 3b 0a 09 20 20 20 20 7d 0a 09 20 20 20 20   0;..    }..    
4f70: 66 72 61 6d 65 58 20 3d 20 63 61 76 69 74 79 58  frameX = cavityX
4f80: 3b 0a 09 20 20 20 20 69 66 20 28 73 6c 61 76 65  ;..    if (slave
4f90: 50 74 72 2d 3e 73 69 64 65 20 3d 3d 20 54 4f 50  Ptr->side == TOP
4fa0: 29 20 7b 0a 09 09 66 72 61 6d 65 59 20 3d 20 63  ) {...frameY = c
4fb0: 61 76 69 74 79 59 3b 0a 09 09 63 61 76 69 74 79  avityY;...cavity
4fc0: 59 20 2b 3d 20 66 72 61 6d 65 48 65 69 67 68 74  Y += frameHeight
4fd0: 3b 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a  ;..    } else {.
4fe0: 09 09 66 72 61 6d 65 59 20 3d 20 63 61 76 69 74  ..frameY = cavit
4ff0: 79 59 20 2b 20 63 61 76 69 74 79 48 65 69 67 68  yY + cavityHeigh
5000: 74 3b 0a 09 20 20 20 20 7d 0a 09 7d 20 65 6c 73  t;..    }..} els
5010: 65 20 7b 0a 09 20 20 20 20 66 72 61 6d 65 48 65  e {..    frameHe
5020: 69 67 68 74 20 3d 20 63 61 76 69 74 79 48 65 69  ight = cavityHei
5030: 67 68 74 3b 0a 09 20 20 20 20 66 72 61 6d 65 57  ght;..    frameW
5040: 69 64 74 68 20 3d 20 54 6b 5f 52 65 71 57 69 64  idth = Tk_ReqWid
5050: 74 68 28 73 6c 61 76 65 50 74 72 2d 3e 74 6b 77  th(slavePtr->tkw
5060: 69 6e 29 20 2b 20 73 6c 61 76 65 50 74 72 2d 3e  in) + slavePtr->
5070: 64 6f 75 62 6c 65 42 77 0a 09 09 20 20 20 20 2b  doubleBw...    +
5080: 20 73 6c 61 76 65 50 74 72 2d 3e 70 61 64 58 20   slavePtr->padX 
5090: 2b 20 73 6c 61 76 65 50 74 72 2d 3e 69 50 61 64  + slavePtr->iPad
50a0: 58 3b 0a 09 20 20 20 20 69 66 20 28 73 6c 61 76  X;..    if (slav
50b0: 65 50 74 72 2d 3e 66 6c 61 67 73 20 26 20 45 58  ePtr->flags & EX
50c0: 50 41 4e 44 29 20 7b 0a 09 09 66 72 61 6d 65 57  PAND) {...frameW
50d0: 69 64 74 68 20 2b 3d 20 58 45 78 70 61 6e 73 69  idth += XExpansi
50e0: 6f 6e 28 73 6c 61 76 65 50 74 72 2c 20 63 61 76  on(slavePtr, cav
50f0: 69 74 79 57 69 64 74 68 29 3b 0a 09 20 20 20 20  ityWidth);..    
5100: 7d 0a 09 20 20 20 20 63 61 76 69 74 79 57 69 64  }..    cavityWid
5110: 74 68 20 2d 3d 20 66 72 61 6d 65 57 69 64 74 68  th -= frameWidth
5120: 3b 0a 09 20 20 20 20 69 66 20 28 63 61 76 69 74  ;..    if (cavit
5130: 79 57 69 64 74 68 20 3c 20 30 29 20 7b 0a 09 09  yWidth < 0) {...
5140: 66 72 61 6d 65 57 69 64 74 68 20 2b 3d 20 63 61  frameWidth += ca
5150: 76 69 74 79 57 69 64 74 68 3b 0a 09 09 63 61 76  vityWidth;...cav
5160: 69 74 79 57 69 64 74 68 20 3d 20 30 3b 0a 09 20  ityWidth = 0;.. 
5170: 20 20 20 7d 0a 09 20 20 20 20 66 72 61 6d 65 59     }..    frameY
5180: 20 3d 20 63 61 76 69 74 79 59 3b 0a 09 20 20 20   = cavityY;..   
5190: 20 69 66 20 28 73 6c 61 76 65 50 74 72 2d 3e 73   if (slavePtr->s
51a0: 69 64 65 20 3d 3d 20 4c 45 46 54 29 20 7b 0a 09  ide == LEFT) {..
51b0: 09 66 72 61 6d 65 58 20 3d 20 63 61 76 69 74 79  .frameX = cavity
51c0: 58 3b 0a 09 09 63 61 76 69 74 79 58 20 2b 3d 20  X;...cavityX += 
51d0: 66 72 61 6d 65 57 69 64 74 68 3b 0a 09 20 20 20  frameWidth;..   
51e0: 20 7d 20 65 6c 73 65 20 7b 0a 09 09 66 72 61 6d   } else {...fram
51f0: 65 58 20 3d 20 63 61 76 69 74 79 58 20 2b 20 63  eX = cavityX + c
5200: 61 76 69 74 79 57 69 64 74 68 3b 0a 09 20 20 20  avityWidth;..   
5210: 20 7d 0a 09 7d 0a 0a 09 2f 2a 0a 09 20 2a 20 4e   }..}.../*.. * N
5220: 6f 77 20 74 68 61 74 20 77 65 27 76 65 20 67 6f  ow that we've go
5230: 74 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  t the size of th
5240: 65 20 66 72 61 6d 65 20 66 6f 72 20 74 68 65 20  e frame for the 
5250: 77 69 6e 64 6f 77 2c 0a 09 20 2a 20 63 6f 6d 70  window,.. * comp
5260: 75 74 65 20 74 68 65 20 77 69 6e 64 6f 77 27 73  ute the window's
5270: 20 61 63 74 75 61 6c 20 73 69 7a 65 20 61 6e 64   actual size and
5280: 20 6c 6f 63 61 74 69 6f 6e 20 75 73 69 6e 67 20   location using 
5290: 74 68 65 0a 09 20 2a 20 66 69 6c 6c 2c 20 70 61  the.. * fill, pa
52a0: 64 64 69 6e 67 2c 20 61 6e 64 20 66 72 61 6d 65  dding, and frame
52b0: 20 66 61 63 74 6f 72 73 2e 20 20 54 68 65 20 76   factors.  The v
52c0: 61 72 69 61 62 6c 65 73 20 22 62 6f 72 64 65 72  ariables "border
52d0: 58 22 0a 09 20 2a 20 61 6e 64 20 22 62 6f 72 64  X".. * and "bord
52e0: 65 72 59 22 20 61 72 65 20 75 73 65 64 20 74 6f  erY" are used to
52f0: 20 68 61 6e 64 6c 65 20 74 68 65 20 64 69 66 66   handle the diff
5300: 65 72 65 6e 63 65 73 20 62 65 74 77 65 65 6e 0a  erences between.
5310: 09 20 2a 20 6f 6c 64 2d 73 74 79 6c 65 20 70 61  . * old-style pa
5320: 63 6b 69 6e 67 20 61 6e 64 20 74 68 65 20 6e 65  cking and the ne
5330: 77 20 73 74 79 6c 65 20 28 69 6e 20 6f 6c 64 2d  w style (in old-
5340: 73 74 79 6c 65 2c 20 69 50 61 64 58 0a 09 20 2a  style, iPadX.. *
5350: 20 61 6e 64 20 69 50 61 64 59 20 61 72 65 20 61   and iPadY are a
5360: 6c 77 61 79 73 20 7a 65 72 6f 20 61 6e 64 20 70  lways zero and p
5370: 61 64 64 69 6e 67 20 69 73 20 63 6f 6d 70 6c 65  adding is comple
5380: 74 65 6c 79 20 69 67 6e 6f 72 65 64 0a 09 20 2a  tely ignored.. *
5390: 20 65 78 63 65 70 74 20 77 68 65 6e 20 63 6f 6d   except when com
53a0: 70 75 74 69 6e 67 20 66 72 61 6d 65 20 73 69 7a  puting frame siz
53b0: 65 29 2e 0a 09 20 2a 2f 0a 0a 09 69 66 20 28 73  e)... */...if (s
53c0: 6c 61 76 65 50 74 72 2d 3e 66 6c 61 67 73 20 26  lavePtr->flags &
53d0: 20 4f 4c 44 5f 53 54 59 4c 45 29 20 7b 0a 09 20   OLD_STYLE) {.. 
53e0: 20 20 20 62 6f 72 64 65 72 58 20 3d 20 62 6f 72     borderX = bor
53f0: 64 65 72 59 20 3d 20 30 3b 0a 09 7d 20 65 6c 73  derY = 0;..} els
5400: 65 20 7b 0a 09 20 20 20 20 62 6f 72 64 65 72 58  e {..    borderX
5410: 20 3d 20 73 6c 61 76 65 50 74 72 2d 3e 70 61 64   = slavePtr->pad
5420: 58 3b 0a 09 20 20 20 20 62 6f 72 64 65 72 59 20  X;..    borderY 
5430: 3d 20 73 6c 61 76 65 50 74 72 2d 3e 70 61 64 59  = slavePtr->padY
5440: 3b 0a 09 7d 0a 09 77 69 64 74 68 20 3d 20 54 6b  ;..}..width = Tk
5450: 5f 52 65 71 57 69 64 74 68 28 73 6c 61 76 65 50  _ReqWidth(slaveP
5460: 74 72 2d 3e 74 6b 77 69 6e 29 20 2b 20 73 6c 61  tr->tkwin) + sla
5470: 76 65 50 74 72 2d 3e 64 6f 75 62 6c 65 42 77 0a  vePtr->doubleBw.
5480: 09 09 2b 20 73 6c 61 76 65 50 74 72 2d 3e 69 50  ..+ slavePtr->iP
5490: 61 64 58 3b 0a 09 69 66 20 28 28 73 6c 61 76 65  adX;..if ((slave
54a0: 50 74 72 2d 3e 66 6c 61 67 73 20 26 20 46 49 4c  Ptr->flags & FIL
54b0: 4c 58 29 0a 09 09 7c 7c 20 28 77 69 64 74 68 20  LX)...|| (width 
54c0: 3e 20 28 66 72 61 6d 65 57 69 64 74 68 20 2d 20  > (frameWidth - 
54d0: 62 6f 72 64 65 72 58 29 29 29 20 7b 0a 09 20 20  borderX))) {..  
54e0: 20 20 77 69 64 74 68 20 3d 20 66 72 61 6d 65 57    width = frameW
54f0: 69 64 74 68 20 2d 20 62 6f 72 64 65 72 58 3b 0a  idth - borderX;.
5500: 09 7d 0a 09 68 65 69 67 68 74 20 3d 20 54 6b 5f  .}..height = Tk_
5510: 52 65 71 48 65 69 67 68 74 28 73 6c 61 76 65 50  ReqHeight(slaveP
5520: 74 72 2d 3e 74 6b 77 69 6e 29 20 2b 20 73 6c 61  tr->tkwin) + sla
5530: 76 65 50 74 72 2d 3e 64 6f 75 62 6c 65 42 77 0a  vePtr->doubleBw.
5540: 09 09 2b 20 73 6c 61 76 65 50 74 72 2d 3e 69 50  ..+ slavePtr->iP
5550: 61 64 59 3b 0a 09 69 66 20 28 28 73 6c 61 76 65  adY;..if ((slave
5560: 50 74 72 2d 3e 66 6c 61 67 73 20 26 20 46 49 4c  Ptr->flags & FIL
5570: 4c 59 29 0a 09 09 7c 7c 20 28 68 65 69 67 68 74  LY)...|| (height
5580: 20 3e 20 28 66 72 61 6d 65 48 65 69 67 68 74 20   > (frameHeight 
5590: 2d 20 62 6f 72 64 65 72 59 29 29 29 20 7b 0a 09  - borderY))) {..
55a0: 20 20 20 20 68 65 69 67 68 74 20 3d 20 66 72 61      height = fra
55b0: 6d 65 48 65 69 67 68 74 20 2d 20 62 6f 72 64 65  meHeight - borde
55c0: 72 59 3b 0a 09 7d 0a 09 62 6f 72 64 65 72 58 20  rY;..}..borderX 
55d0: 2f 3d 20 32 3b 0a 09 62 6f 72 64 65 72 59 20 2f  /= 2;..borderY /
55e0: 3d 20 32 3b 0a 09 73 77 69 74 63 68 20 28 73 6c  = 2;..switch (sl
55f0: 61 76 65 50 74 72 2d 3e 61 6e 63 68 6f 72 29 20  avePtr->anchor) 
5600: 7b 0a 09 20 20 20 20 63 61 73 65 20 54 4b 5f 41  {..    case TK_A
5610: 4e 43 48 4f 52 5f 4e 3a 0a 09 09 78 20 3d 20 66  NCHOR_N:...x = f
5620: 72 61 6d 65 58 20 2b 20 28 66 72 61 6d 65 57 69  rameX + (frameWi
5630: 64 74 68 20 2d 20 77 69 64 74 68 29 2f 32 3b 0a  dth - width)/2;.
5640: 09 09 79 20 3d 20 66 72 61 6d 65 59 20 2b 20 62  ..y = frameY + b
5650: 6f 72 64 65 72 59 3b 0a 09 09 62 72 65 61 6b 3b  orderY;...break;
5660: 0a 09 20 20 20 20 63 61 73 65 20 54 4b 5f 41 4e  ..    case TK_AN
5670: 43 48 4f 52 5f 4e 45 3a 0a 09 09 78 20 3d 20 66  CHOR_NE:...x = f
5680: 72 61 6d 65 58 20 2b 20 66 72 61 6d 65 57 69 64  rameX + frameWid
5690: 74 68 20 2d 20 77 69 64 74 68 20 2d 20 62 6f 72  th - width - bor
56a0: 64 65 72 58 3b 0a 09 09 79 20 3d 20 66 72 61 6d  derX;...y = fram
56b0: 65 59 20 2b 20 62 6f 72 64 65 72 59 3b 0a 09 09  eY + borderY;...
56c0: 62 72 65 61 6b 3b 0a 09 20 20 20 20 63 61 73 65  break;..    case
56d0: 20 54 4b 5f 41 4e 43 48 4f 52 5f 45 3a 0a 09 09   TK_ANCHOR_E:...
56e0: 78 20 3d 20 66 72 61 6d 65 58 20 2b 20 66 72 61  x = frameX + fra
56f0: 6d 65 57 69 64 74 68 20 2d 20 77 69 64 74 68 20  meWidth - width 
5700: 2d 20 62 6f 72 64 65 72 58 3b 0a 09 09 79 20 3d  - borderX;...y =
5710: 20 66 72 61 6d 65 59 20 2b 20 28 66 72 61 6d 65   frameY + (frame
5720: 48 65 69 67 68 74 20 2d 20 68 65 69 67 68 74 29  Height - height)
5730: 2f 32 3b 0a 09 09 62 72 65 61 6b 3b 0a 09 20 20  /2;...break;..  
5740: 20 20 63 61 73 65 20 54 4b 5f 41 4e 43 48 4f 52    case TK_ANCHOR
5750: 5f 53 45 3a 0a 09 09 78 20 3d 20 66 72 61 6d 65  _SE:...x = frame
5760: 58 20 2b 20 66 72 61 6d 65 57 69 64 74 68 20 2d  X + frameWidth -
5770: 20 77 69 64 74 68 20 2d 20 62 6f 72 64 65 72 58   width - borderX
5780: 3b 0a 09 09 79 20 3d 20 66 72 61 6d 65 59 20 2b  ;...y = frameY +
5790: 20 66 72 61 6d 65 48 65 69 67 68 74 20 2d 20 68   frameHeight - h
57a0: 65 69 67 68 74 20 2d 20 62 6f 72 64 65 72 59 3b  eight - borderY;
57b0: 0a 09 09 62 72 65 61 6b 3b 0a 09 20 20 20 20 63  ...break;..    c
57c0: 61 73 65 20 54 4b 5f 41 4e 43 48 4f 52 5f 53 3a  ase TK_ANCHOR_S:
57d0: 0a 09 09 78 20 3d 20 66 72 61 6d 65 58 20 2b 20  ...x = frameX + 
57e0: 28 66 72 61 6d 65 57 69 64 74 68 20 2d 20 77 69  (frameWidth - wi
57f0: 64 74 68 29 2f 32 3b 0a 09 09 79 20 3d 20 66 72  dth)/2;...y = fr
5800: 61 6d 65 59 20 2b 20 66 72 61 6d 65 48 65 69 67  ameY + frameHeig
5810: 68 74 20 2d 20 68 65 69 67 68 74 20 2d 20 62 6f  ht - height - bo
5820: 72 64 65 72 59 3b 0a 09 09 62 72 65 61 6b 3b 0a  rderY;...break;.
5830: 09 20 20 20 20 63 61 73 65 20 54 4b 5f 41 4e 43  .    case TK_ANC
5840: 48 4f 52 5f 53 57 3a 0a 09 09 78 20 3d 20 66 72  HOR_SW:...x = fr
5850: 61 6d 65 58 20 2b 20 62 6f 72 64 65 72 58 3b 0a  ameX + borderX;.
5860: 09 09 79 20 3d 20 66 72 61 6d 65 59 20 2b 20 66  ..y = frameY + f
5870: 72 61 6d 65 48 65 69 67 68 74 20 2d 20 68 65 69  rameHeight - hei
5880: 67 68 74 20 2d 20 62 6f 72 64 65 72 59 3b 0a 09  ght - borderY;..
5890: 09 62 72 65 61 6b 3b 0a 09 20 20 20 20 63 61 73  .break;..    cas
58a0: 65 20 54 4b 5f 41 4e 43 48 4f 52 5f 57 3a 0a 09  e TK_ANCHOR_W:..
58b0: 09 78 20 3d 20 66 72 61 6d 65 58 20 2b 20 62 6f  .x = frameX + bo
58c0: 72 64 65 72 58 3b 0a 09 09 79 20 3d 20 66 72 61  rderX;...y = fra
58d0: 6d 65 59 20 2b 20 28 66 72 61 6d 65 48 65 69 67  meY + (frameHeig
58e0: 68 74 20 2d 20 68 65 69 67 68 74 29 2f 32 3b 0a  ht - height)/2;.
58f0: 09 09 62 72 65 61 6b 3b 0a 09 20 20 20 20 63 61  ..break;..    ca
5900: 73 65 20 54 4b 5f 41 4e 43 48 4f 52 5f 4e 57 3a  se TK_ANCHOR_NW:
5910: 0a 09 09 78 20 3d 20 66 72 61 6d 65 58 20 2b 20  ...x = frameX + 
5920: 62 6f 72 64 65 72 58 3b 0a 09 09 79 20 3d 20 66  borderX;...y = f
5930: 72 61 6d 65 59 20 2b 20 62 6f 72 64 65 72 59 3b  rameY + borderY;
5940: 0a 09 09 62 72 65 61 6b 3b 0a 09 20 20 20 20 63  ...break;..    c
5950: 61 73 65 20 54 4b 5f 41 4e 43 48 4f 52 5f 43 45  ase TK_ANCHOR_CE
5960: 4e 54 45 52 3a 0a 09 09 78 20 3d 20 66 72 61 6d  NTER:...x = fram
5970: 65 58 20 2b 20 28 66 72 61 6d 65 57 69 64 74 68  eX + (frameWidth
5980: 20 2d 20 77 69 64 74 68 29 2f 32 3b 0a 09 09 79   - width)/2;...y
5990: 20 3d 20 66 72 61 6d 65 59 20 2b 20 28 66 72 61   = frameY + (fra
59a0: 6d 65 48 65 69 67 68 74 20 2d 20 68 65 69 67 68  meHeight - heigh
59b0: 74 29 2f 32 3b 0a 09 09 62 72 65 61 6b 3b 0a 09  t)/2;...break;..
59c0: 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 09 09 70      default:...p
59d0: 61 6e 69 63 28 22 62 61 64 20 66 72 61 6d 65 20  anic("bad frame 
59e0: 66 61 63 74 6f 72 20 69 6e 20 41 72 72 61 6e 67  factor in Arrang
59f0: 65 50 61 63 6b 69 6e 67 22 29 3b 0a 09 7d 0a 09  ePacking");..}..
5a00: 77 69 64 74 68 20 2d 3d 20 73 6c 61 76 65 50 74  width -= slavePt
5a10: 72 2d 3e 64 6f 75 62 6c 65 42 77 3b 0a 09 68 65  r->doubleBw;..he
5a20: 69 67 68 74 20 2d 3d 20 73 6c 61 76 65 50 74 72  ight -= slavePtr
5a30: 2d 3e 64 6f 75 62 6c 65 42 77 3b 0a 0a 09 2f 2a  ->doubleBw;.../*
5a40: 0a 09 20 2a 20 54 68 65 20 66 69 6e 61 6c 20 73  .. * The final s
5a50: 74 65 70 20 69 73 20 74 6f 20 73 65 74 20 74 68  tep is to set th
5a60: 65 20 70 6f 73 69 74 69 6f 6e 2c 20 73 69 7a 65  e position, size
5a70: 2c 20 61 6e 64 20 6d 61 70 70 65 64 2f 75 6e 6d  , and mapped/unm
5a80: 61 70 70 65 64 0a 09 20 2a 20 73 74 61 74 65 20  apped.. * state 
5a90: 6f 66 20 74 68 65 20 73 6c 61 76 65 2e 20 20 49  of the slave.  I
5aa0: 66 20 74 68 65 20 73 6c 61 76 65 20 69 73 20 61  f the slave is a
5ab0: 20 63 68 69 6c 64 20 6f 66 20 74 68 65 20 6d 61   child of the ma
5ac0: 73 74 65 72 2c 20 74 68 65 6e 0a 09 20 2a 20 64  ster, then.. * d
5ad0: 6f 20 74 68 69 73 20 68 65 72 65 2e 20 20 4f 74  o this here.  Ot
5ae0: 68 65 72 77 69 73 65 20 6c 65 74 20 54 6b 5f 4d  herwise let Tk_M
5af0: 61 69 6e 74 61 69 6e 47 65 6f 6d 65 74 72 79 20  aintainGeometry 
5b00: 64 6f 20 74 68 65 20 77 6f 72 6b 2e 0a 09 20 2a  do the work... *
5b10: 2f 0a 0a 09 69 66 20 28 6d 61 73 74 65 72 50 74  /...if (masterPt
5b20: 72 2d 3e 74 6b 77 69 6e 20 3d 3d 20 54 6b 5f 50  r->tkwin == Tk_P
5b30: 61 72 65 6e 74 28 73 6c 61 76 65 50 74 72 2d 3e  arent(slavePtr->
5b40: 74 6b 77 69 6e 29 29 20 7b 0a 09 20 20 20 20 69  tkwin)) {..    i
5b50: 66 20 28 28 77 69 64 74 68 20 3c 3d 20 30 29 20  f ((width <= 0) 
5b60: 7c 7c 20 28 68 65 69 67 68 74 20 3c 3d 20 30 29  || (height <= 0)
5b70: 29 20 7b 0a 09 09 54 6b 5f 55 6e 6d 61 70 57 69  ) {...Tk_UnmapWi
5b80: 6e 64 6f 77 28 73 6c 61 76 65 50 74 72 2d 3e 74  ndow(slavePtr->t
5b90: 6b 77 69 6e 29 3b 0a 09 20 20 20 20 7d 20 65 6c  kwin);..    } el
5ba0: 73 65 20 7b 0a 09 09 69 66 20 28 28 78 20 21 3d  se {...if ((x !=
5bb0: 20 54 6b 5f 58 28 73 6c 61 76 65 50 74 72 2d 3e   Tk_X(slavePtr->
5bc0: 74 6b 77 69 6e 29 29 0a 09 09 09 7c 7c 20 28 79  tkwin))....|| (y
5bd0: 20 21 3d 20 54 6b 5f 59 28 73 6c 61 76 65 50 74   != Tk_Y(slavePt
5be0: 72 2d 3e 74 6b 77 69 6e 29 29 0a 09 09 09 7c 7c  r->tkwin))....||
5bf0: 20 28 77 69 64 74 68 20 21 3d 20 54 6b 5f 57 69   (width != Tk_Wi
5c00: 64 74 68 28 73 6c 61 76 65 50 74 72 2d 3e 74 6b  dth(slavePtr->tk
5c10: 77 69 6e 29 29 0a 09 09 09 7c 7c 20 28 68 65 69  win))....|| (hei
5c20: 67 68 74 20 21 3d 20 54 6b 5f 48 65 69 67 68 74  ght != Tk_Height
5c30: 28 73 6c 61 76 65 50 74 72 2d 3e 74 6b 77 69 6e  (slavePtr->tkwin
5c40: 29 29 29 20 7b 0a 09 09 20 20 20 20 54 6b 5f 4d  ))) {...    Tk_M
5c50: 6f 76 65 52 65 73 69 7a 65 57 69 6e 64 6f 77 28  oveResizeWindow(
5c60: 73 6c 61 76 65 50 74 72 2d 3e 74 6b 77 69 6e 2c  slavePtr->tkwin,
5c70: 20 78 2c 20 79 2c 20 77 69 64 74 68 2c 20 68 65   x, y, width, he
5c80: 69 67 68 74 29 3b 0a 09 09 7d 0a 09 09 69 66 20  ight);...}...if 
5c90: 28 61 62 6f 72 74 29 20 7b 0a 09 09 20 20 20 20  (abort) {...    
5ca0: 67 6f 74 6f 20 64 6f 6e 65 3b 0a 09 09 7d 0a 0a  goto done;...}..
5cb0: 09 09 2f 2a 0a 09 09 20 2a 20 44 6f 6e 27 74 20  ../*... * Don't 
5cc0: 6d 61 70 20 74 68 65 20 73 6c 61 76 65 20 69 66  map the slave if
5cd0: 20 74 68 65 20 6d 61 73 74 65 72 20 69 73 6e 27   the master isn'
5ce0: 74 20 6d 61 70 70 65 64 3a 20 77 61 69 74 0a 09  t mapped: wait..
5cf0: 09 20 2a 20 75 6e 74 69 6c 20 74 68 65 20 6d 61  . * until the ma
5d00: 73 74 65 72 20 67 65 74 73 20 6d 61 70 70 65 64  ster gets mapped
5d10: 20 6c 61 74 65 72 2e 0a 09 09 20 2a 2f 0a 0a 09   later.... */...
5d20: 09 69 66 20 28 54 6b 5f 49 73 4d 61 70 70 65 64  .if (Tk_IsMapped
5d30: 28 6d 61 73 74 65 72 50 74 72 2d 3e 74 6b 77 69  (masterPtr->tkwi
5d40: 6e 29 29 20 7b 0a 09 09 20 20 20 20 54 6b 5f 4d  n)) {...    Tk_M
5d50: 61 70 57 69 6e 64 6f 77 28 73 6c 61 76 65 50 74  apWindow(slavePt
5d60: 72 2d 3e 74 6b 77 69 6e 29 3b 0a 09 09 7d 0a 09  r->tkwin);...}..
5d70: 20 20 20 20 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a      }..} else {.
5d80: 09 20 20 20 20 69 66 20 28 28 77 69 64 74 68 20  .    if ((width 
5d90: 3c 3d 20 30 29 20 7c 7c 20 28 68 65 69 67 68 74  <= 0) || (height
5da0: 20 3c 3d 20 30 29 29 20 7b 0a 09 09 54 6b 5f 55   <= 0)) {...Tk_U
5db0: 6e 6d 61 69 6e 74 61 69 6e 47 65 6f 6d 65 74 72  nmaintainGeometr
5dc0: 79 28 73 6c 61 76 65 50 74 72 2d 3e 74 6b 77 69  y(slavePtr->tkwi
5dd0: 6e 2c 20 6d 61 73 74 65 72 50 74 72 2d 3e 74 6b  n, masterPtr->tk
5de0: 77 69 6e 29 3b 0a 09 09 54 6b 5f 55 6e 6d 61 70  win);...Tk_Unmap
5df0: 57 69 6e 64 6f 77 28 73 6c 61 76 65 50 74 72 2d  Window(slavePtr-
5e00: 3e 74 6b 77 69 6e 29 3b 0a 09 20 20 20 20 7d 20  >tkwin);..    } 
5e10: 65 6c 73 65 20 7b 0a 09 09 54 6b 5f 4d 61 69 6e  else {...Tk_Main
5e20: 74 61 69 6e 47 65 6f 6d 65 74 72 79 28 73 6c 61  tainGeometry(sla
5e30: 76 65 50 74 72 2d 3e 74 6b 77 69 6e 2c 20 6d 61  vePtr->tkwin, ma
5e40: 73 74 65 72 50 74 72 2d 3e 74 6b 77 69 6e 2c 0a  sterPtr->tkwin,.
5e50: 09 09 09 78 2c 20 79 2c 20 77 69 64 74 68 2c 20  ...x, y, width, 
5e60: 68 65 69 67 68 74 29 3b 0a 09 20 20 20 20 7d 0a  height);..    }.
5e70: 09 7d 0a 0a 09 2f 2a 0a 09 20 2a 20 43 68 61 6e  .}.../*.. * Chan
5e80: 67 65 73 20 74 6f 20 74 68 65 20 77 69 6e 64 6f  ges to the windo
5e90: 77 27 73 20 73 74 72 75 63 74 75 72 65 20 63 6f  w's structure co
5ea0: 75 6c 64 20 63 61 75 73 65 20 61 6c 6d 6f 73 74  uld cause almost
5eb0: 20 61 6e 79 74 68 69 6e 67 0a 09 20 2a 20 74 6f   anything.. * to
5ec0: 20 68 61 70 70 65 6e 2c 20 69 6e 63 6c 75 64 69   happen, includi
5ed0: 6e 67 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20  ng deleting the 
5ee0: 70 61 72 65 6e 74 20 6f 72 20 63 68 69 6c 64 2e  parent or child.
5ef0: 20 20 49 66 20 74 68 69 73 0a 09 20 2a 20 68 61    If this.. * ha
5f00: 70 70 65 6e 73 2c 20 77 65 27 6c 6c 20 62 65 20  ppens, we'll be 
5f10: 74 6f 6c 64 20 74 6f 20 61 62 6f 72 74 2e 0a 09  told to abort...
5f20: 20 2a 2f 0a 0a 09 69 66 20 28 61 62 6f 72 74 29   */...if (abort)
5f30: 20 7b 0a 09 20 20 20 20 67 6f 74 6f 20 64 6f 6e   {..    goto don
5f40: 65 3b 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20  e;..}.    }..   
5f50: 20 64 6f 6e 65 3a 0a 20 20 20 20 6d 61 73 74 65   done:.    maste
5f60: 72 50 74 72 2d 3e 61 62 6f 72 74 50 74 72 20 3d  rPtr->abortPtr =
5f70: 20 4e 55 4c 4c 3b 0a 20 20 20 20 54 6b 5f 52 65   NULL;.    Tk_Re
5f80: 6c 65 61 73 65 28 28 43 6c 69 65 6e 74 44 61 74  lease((ClientDat
5f90: 61 29 20 6d 61 73 74 65 72 50 74 72 29 3b 0a 7d  a) masterPtr);.}
5fa0: 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d  .../*. *--------
5fb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5fc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5fd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5fe0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
5ff0: 2a 0a 20 2a 20 58 45 78 70 61 6e 73 69 6f 6e 20  *. * XExpansion 
6000: 2d 2d 0a 20 2a 0a 20 2a 09 47 69 76 65 6e 20 61  --. *. *.Given a
6010: 20 6c 69 73 74 20 6f 66 20 70 61 63 6b 65 64 20   list of packed 
6020: 73 6c 61 76 65 73 2c 20 74 68 65 20 66 69 72 73  slaves, the firs
6030: 74 20 6f 66 20 77 68 69 63 68 20 69 73 20 70 61  t of which is pa
6040: 63 6b 65 64 0a 20 2a 09 6f 6e 20 74 68 65 20 6c  cked. *.on the l
6050: 65 66 74 20 6f 72 20 72 69 67 68 74 20 61 6e 64  eft or right and
6060: 20 69 73 20 65 78 70 61 6e 64 61 62 6c 65 2c 20   is expandable, 
6070: 63 6f 6d 70 75 74 65 20 68 6f 77 20 6d 75 63 68  compute how much
6080: 20 74 6f 0a 20 2a 09 65 78 70 61 6e 64 20 74 68   to. *.expand th
6090: 65 20 63 68 69 6c 64 2e 0a 20 2a 0a 20 2a 20 52  e child.. *. * R
60a0: 65 73 75 6c 74 73 3a 0a 20 2a 09 54 68 65 20 72  esults:. *.The r
60b0: 65 74 75 72 6e 20 76 61 6c 75 65 20 69 73 20 74  eturn value is t
60c0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 64 64  he number of add
60d0: 69 74 69 6f 6e 61 6c 20 70 69 78 65 6c 73 20 74  itional pixels t
60e0: 6f 20 67 69 76 65 20 74 6f 0a 20 2a 09 74 68 65  o give to. *.the
60f0: 20 63 68 69 6c 64 2e 0a 20 2a 0a 20 2a 20 53 69   child.. *. * Si
6100: 64 65 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 4e  de effects:. *.N
6110: 6f 6e 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d  one.. *. *------
6120: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6130: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6140: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6160: 0a 20 2a 2f 0a 0a 73 74 61 74 69 63 20 69 6e 74  . */..static int
6170: 0a 58 45 78 70 61 6e 73 69 6f 6e 28 73 6c 61 76  .XExpansion(slav
6180: 65 50 74 72 2c 20 63 61 76 69 74 79 57 69 64 74  ePtr, cavityWidt
6190: 68 29 0a 20 20 20 20 72 65 67 69 73 74 65 72 20  h).    register 
61a0: 50 61 63 6b 65 72 20 2a 73 6c 61 76 65 50 74 72  Packer *slavePtr
61b0: 3b 09 09 2f 2a 20 46 69 72 73 74 20 69 6e 20 6c  ;../* First in l
61c0: 69 73 74 20 6f 66 20 72 65 6d 61 69 6e 69 6e 67  ist of remaining
61d0: 0a 09 09 09 09 09 20 2a 20 73 6c 61 76 65 73 2e  ...... * slaves.
61e0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 63 61 76 69   */.    int cavi
61f0: 74 79 57 69 64 74 68 3b 09 09 09 2f 2a 20 48 6f  tyWidth;.../* Ho
6200: 72 69 7a 6f 6e 74 61 6c 20 73 70 61 63 65 20 6c  rizontal space l
6210: 65 66 74 20 66 6f 72 20 61 6c 6c 0a 09 09 09 09  eft for all.....
6220: 09 20 2a 20 72 65 6d 61 69 6e 69 6e 67 20 73 6c  . * remaining sl
6230: 61 76 65 73 2e 20 2a 2f 0a 7b 0a 20 20 20 20 69  aves. */.{.    i
6240: 6e 74 20 6e 75 6d 45 78 70 61 6e 64 2c 20 6d 69  nt numExpand, mi
6250: 6e 45 78 70 61 6e 64 2c 20 63 75 72 45 78 70 61  nExpand, curExpa
6260: 6e 64 3b 0a 20 20 20 20 69 6e 74 20 63 68 69 6c  nd;.    int chil
6270: 64 57 69 64 74 68 3b 0a 0a 20 20 20 20 2f 2a 0a  dWidth;..    /*.
6280: 20 20 20 20 20 2a 20 54 68 69 73 20 70 72 6f 63       * This proc
6290: 65 64 75 72 65 20 69 73 20 74 72 69 63 6b 79 20  edure is tricky 
62a0: 62 65 63 61 75 73 65 20 77 69 6e 64 6f 77 73 20  because windows 
62b0: 70 61 63 6b 65 64 20 74 6f 70 20 6f 72 20 62 6f  packed top or bo
62c0: 74 74 6f 6d 20 63 61 6e 0a 20 20 20 20 20 2a 20  ttom can.     * 
62d0: 62 65 20 69 6e 74 65 72 73 70 65 72 73 65 64 20  be interspersed 
62e0: 61 6d 6f 6e 67 20 65 78 70 61 6e 64 61 62 6c 65  among expandable
62f0: 20 77 69 6e 64 6f 77 73 20 70 61 63 6b 65 64 20   windows packed 
6300: 6c 65 66 74 20 6f 72 20 72 69 67 68 74 2e 0a 20  left or right.. 
6310: 20 20 20 20 2a 20 53 63 61 6e 20 74 68 72 6f 75      * Scan throu
6320: 67 68 20 74 68 65 20 6c 69 73 74 2c 20 6b 65 65  gh the list, kee
6330: 70 69 6e 67 20 61 20 72 75 6e 6e 69 6e 67 20 73  ping a running s
6340: 75 6d 20 6f 66 20 74 68 65 20 77 69 64 74 68 73  um of the widths
6350: 20 6f 66 0a 20 20 20 20 20 2a 20 61 6c 6c 20 6c   of.     * all l
6360: 65 66 74 20 61 6e 64 20 72 69 67 68 74 20 77 69  eft and right wi
6370: 6e 64 6f 77 73 20 28 61 63 74 75 61 6c 6c 79 2c  ndows (actually,
6380: 20 63 6f 75 6e 74 20 74 68 65 20 63 61 76 69 74   count the cavit
6390: 79 20 73 70 61 63 65 20 6e 6f 74 0a 20 20 20 20  y space not.    
63a0: 20 2a 20 61 6c 6c 6f 63 61 74 65 64 29 20 61 6e   * allocated) an
63b0: 64 20 61 20 72 75 6e 6e 69 6e 67 20 63 6f 75 6e  d a running coun
63c0: 74 20 6f 66 20 61 6c 6c 20 65 78 70 61 6e 64 61  t of all expanda
63d0: 62 6c 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67  ble left and rig
63e0: 68 74 0a 20 20 20 20 20 2a 20 77 69 6e 64 6f 77  ht.     * window
63f0: 73 2e 20 20 41 74 20 65 61 63 68 20 74 6f 70 20  s.  At each top 
6400: 6f 72 20 62 6f 74 74 6f 6d 20 77 69 6e 64 6f 77  or bottom window
6410: 2c 20 61 6e 64 20 61 74 20 74 68 65 20 65 6e 64  , and at the end
6420: 20 6f 66 20 74 68 65 0a 20 20 20 20 20 2a 20 6c   of the.     * l
6430: 69 73 74 2c 20 63 6f 6d 70 75 74 65 20 74 68 65  ist, compute the
6440: 20 65 78 70 61 6e 73 69 6f 6e 20 66 61 63 74 6f   expansion facto
6450: 72 20 74 68 61 74 20 73 65 65 6d 73 20 72 65 61  r that seems rea
6460: 73 6f 6e 61 62 6c 65 20 61 74 20 74 68 61 74 0a  sonable at that.
6470: 20 20 20 20 20 2a 20 70 6f 69 6e 74 2e 20 20 52       * point.  R
6480: 65 74 75 72 6e 20 74 68 65 20 73 6d 61 6c 6c 65  eturn the smalle
6490: 73 74 20 66 61 63 74 6f 72 20 73 65 65 6e 20 61  st factor seen a
64a0: 74 20 61 6e 79 20 6f 66 20 74 68 65 73 65 20 70  t any of these p
64b0: 6f 69 6e 74 73 2e 0a 20 20 20 20 20 2a 2f 0a 0a  oints..     */..
64c0: 20 20 20 20 6d 69 6e 45 78 70 61 6e 64 20 3d 20      minExpand = 
64d0: 63 61 76 69 74 79 57 69 64 74 68 3b 0a 20 20 20  cavityWidth;.   
64e0: 20 6e 75 6d 45 78 70 61 6e 64 20 3d 20 30 3b 0a   numExpand = 0;.
64f0: 20 20 20 20 66 6f 72 20 28 20 3b 20 73 6c 61 76      for ( ; slav
6500: 65 50 74 72 20 21 3d 20 4e 55 4c 4c 3b 20 73 6c  ePtr != NULL; sl
6510: 61 76 65 50 74 72 20 3d 20 73 6c 61 76 65 50 74  avePtr = slavePt
6520: 72 2d 3e 6e 65 78 74 50 74 72 29 20 7b 0a 09 63  r->nextPtr) {..c
6530: 68 69 6c 64 57 69 64 74 68 20 3d 20 54 6b 5f 52  hildWidth = Tk_R
6540: 65 71 57 69 64 74 68 28 73 6c 61 76 65 50 74 72  eqWidth(slavePtr
6550: 2d 3e 74 6b 77 69 6e 29 20 2b 20 73 6c 61 76 65  ->tkwin) + slave
6560: 50 74 72 2d 3e 64 6f 75 62 6c 65 42 77 0a 09 09  Ptr->doubleBw...
6570: 2b 20 73 6c 61 76 65 50 74 72 2d 3e 70 61 64 58  + slavePtr->padX
6580: 20 2b 20 73 6c 61 76 65 50 74 72 2d 3e 69 50 61   + slavePtr->iPa
6590: 64 58 3b 0a 09 69 66 20 28 28 73 6c 61 76 65 50  dX;..if ((slaveP
65a0: 74 72 2d 3e 73 69 64 65 20 3d 3d 20 54 4f 50 29  tr->side == TOP)
65b0: 20 7c 7c 20 28 73 6c 61 76 65 50 74 72 2d 3e 73   || (slavePtr->s
65c0: 69 64 65 20 3d 3d 20 42 4f 54 54 4f 4d 29 29 20  ide == BOTTOM)) 
65d0: 7b 0a 09 20 20 20 20 63 75 72 45 78 70 61 6e 64  {..    curExpand
65e0: 20 3d 20 28 63 61 76 69 74 79 57 69 64 74 68 20   = (cavityWidth 
65f0: 2d 20 63 68 69 6c 64 57 69 64 74 68 29 2f 6e 75  - childWidth)/nu
6600: 6d 45 78 70 61 6e 64 3b 0a 09 20 20 20 20 69 66  mExpand;..    if
6610: 20 28 63 75 72 45 78 70 61 6e 64 20 3c 20 6d 69   (curExpand < mi
6620: 6e 45 78 70 61 6e 64 29 20 7b 0a 09 09 6d 69 6e  nExpand) {...min
6630: 45 78 70 61 6e 64 20 3d 20 63 75 72 45 78 70 61  Expand = curExpa
6640: 6e 64 3b 0a 09 20 20 20 20 7d 0a 09 7d 20 65 6c  nd;..    }..} el
6650: 73 65 20 7b 0a 09 20 20 20 20 63 61 76 69 74 79  se {..    cavity
6660: 57 69 64 74 68 20 2d 3d 20 63 68 69 6c 64 57 69  Width -= childWi
6670: 64 74 68 3b 0a 09 20 20 20 20 69 66 20 28 73 6c  dth;..    if (sl
6680: 61 76 65 50 74 72 2d 3e 66 6c 61 67 73 20 26 20  avePtr->flags & 
6690: 45 58 50 41 4e 44 29 20 7b 0a 09 09 6e 75 6d 45  EXPAND) {...numE
66a0: 78 70 61 6e 64 2b 2b 3b 0a 09 20 20 20 20 7d 0a  xpand++;..    }.
66b0: 09 7d 0a 20 20 20 20 7d 0a 20 20 20 20 63 75 72  .}.    }.    cur
66c0: 45 78 70 61 6e 64 20 3d 20 63 61 76 69 74 79 57  Expand = cavityW
66d0: 69 64 74 68 2f 6e 75 6d 45 78 70 61 6e 64 3b 0a  idth/numExpand;.
66e0: 20 20 20 20 69 66 20 28 63 75 72 45 78 70 61 6e      if (curExpan
66f0: 64 20 3c 20 6d 69 6e 45 78 70 61 6e 64 29 20 7b  d < minExpand) {
6700: 0a 09 6d 69 6e 45 78 70 61 6e 64 20 3d 20 63 75  ..minExpand = cu
6710: 72 45 78 70 61 6e 64 3b 0a 20 20 20 20 7d 0a 20  rExpand;.    }. 
6720: 20 20 20 72 65 74 75 72 6e 20 28 6d 69 6e 45 78     return (minEx
6730: 70 61 6e 64 20 3c 20 30 29 20 3f 20 30 20 3a 20  pand < 0) ? 0 : 
6740: 6d 69 6e 45 78 70 61 6e 64 3b 0a 7d 0a 0c 0a 2f  minExpand;.}.../
6750: 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *. *------------
6760: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6770: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6780: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6790: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a  ----------. *. *
67a0: 20 59 45 78 70 61 6e 73 69 6f 6e 20 2d 2d 0a 20   YExpansion --. 
67b0: 2a 0a 20 2a 09 47 69 76 65 6e 20 61 20 6c 69 73  *. *.Given a lis
67c0: 74 20 6f 66 20 70 61 63 6b 65 64 20 73 6c 61 76  t of packed slav
67d0: 65 73 2c 20 74 68 65 20 66 69 72 73 74 20 6f 66  es, the first of
67e0: 20 77 68 69 63 68 20 69 73 20 70 61 63 6b 65 64   which is packed
67f0: 0a 20 2a 09 6f 6e 20 74 68 65 20 74 6f 70 20 6f  . *.on the top o
6800: 72 20 62 6f 74 74 6f 6d 20 61 6e 64 20 69 73 20  r bottom and is 
6810: 65 78 70 61 6e 64 61 62 6c 65 2c 20 63 6f 6d 70  expandable, comp
6820: 75 74 65 20 68 6f 77 20 6d 75 63 68 20 74 6f 0a  ute how much to.
6830: 20 2a 09 65 78 70 61 6e 64 20 74 68 65 20 63 68   *.expand the ch
6840: 69 6c 64 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c  ild.. *. * Resul
6850: 74 73 3a 0a 20 2a 09 54 68 65 20 72 65 74 75 72  ts:. *.The retur
6860: 6e 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 6e  n value is the n
6870: 75 6d 62 65 72 20 6f 66 20 61 64 64 69 74 69 6f  umber of additio
6880: 6e 61 6c 20 70 69 78 65 6c 73 20 74 6f 20 67 69  nal pixels to gi
6890: 76 65 20 74 6f 0a 20 2a 09 74 68 65 20 63 68 69  ve to. *.the chi
68a0: 6c 64 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20 65  ld.. *. * Side e
68b0: 66 66 65 63 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e  ffects:. *.None.
68c0: 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  . *. *----------
68d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
68e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
68f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6900: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f  ------------. */
6910: 0a 0a 73 74 61 74 69 63 20 69 6e 74 0a 59 45 78  ..static int.YEx
6920: 70 61 6e 73 69 6f 6e 28 73 6c 61 76 65 50 74 72  pansion(slavePtr
6930: 2c 20 63 61 76 69 74 79 48 65 69 67 68 74 29 0a  , cavityHeight).
6940: 20 20 20 20 72 65 67 69 73 74 65 72 20 50 61 63      register Pac
6950: 6b 65 72 20 2a 73 6c 61 76 65 50 74 72 3b 09 09  ker *slavePtr;..
6960: 2f 2a 20 46 69 72 73 74 20 69 6e 20 6c 69 73 74  /* First in list
6970: 20 6f 66 20 72 65 6d 61 69 6e 69 6e 67 0a 09 09   of remaining...
6980: 09 09 09 20 2a 20 73 6c 61 76 65 73 2e 20 2a 2f  ... * slaves. */
6990: 0a 20 20 20 20 69 6e 74 20 63 61 76 69 74 79 48  .    int cavityH
69a0: 65 69 67 68 74 3b 09 09 09 2f 2a 20 56 65 72 74  eight;.../* Vert
69b0: 69 63 61 6c 20 73 70 61 63 65 20 6c 65 66 74 20  ical space left 
69c0: 66 6f 72 20 61 6c 6c 0a 09 09 09 09 09 20 2a 20  for all...... * 
69d0: 72 65 6d 61 69 6e 69 6e 67 20 73 6c 61 76 65 73  remaining slaves
69e0: 2e 20 2a 2f 0a 7b 0a 20 20 20 20 69 6e 74 20 6e  . */.{.    int n
69f0: 75 6d 45 78 70 61 6e 64 2c 20 6d 69 6e 45 78 70  umExpand, minExp
6a00: 61 6e 64 2c 20 63 75 72 45 78 70 61 6e 64 3b 0a  and, curExpand;.
6a10: 20 20 20 20 69 6e 74 20 63 68 69 6c 64 48 65 69      int childHei
6a20: 67 68 74 3b 0a 0a 20 20 20 20 2f 2a 0a 20 20 20  ght;..    /*.   
6a30: 20 20 2a 20 53 65 65 20 63 6f 6d 6d 65 6e 74 73    * See comments
6a40: 20 66 6f 72 20 58 45 78 70 61 6e 73 69 6f 6e 2e   for XExpansion.
6a50: 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 6d 69  .     */..    mi
6a60: 6e 45 78 70 61 6e 64 20 3d 20 63 61 76 69 74 79  nExpand = cavity
6a70: 48 65 69 67 68 74 3b 0a 20 20 20 20 6e 75 6d 45  Height;.    numE
6a80: 78 70 61 6e 64 20 3d 20 30 3b 0a 20 20 20 20 66  xpand = 0;.    f
6a90: 6f 72 20 28 20 3b 20 73 6c 61 76 65 50 74 72 20  or ( ; slavePtr 
6aa0: 21 3d 20 4e 55 4c 4c 3b 20 73 6c 61 76 65 50 74  != NULL; slavePt
6ab0: 72 20 3d 20 73 6c 61 76 65 50 74 72 2d 3e 6e 65  r = slavePtr->ne
6ac0: 78 74 50 74 72 29 20 7b 0a 09 63 68 69 6c 64 48  xtPtr) {..childH
6ad0: 65 69 67 68 74 20 3d 20 54 6b 5f 52 65 71 48 65  eight = Tk_ReqHe
6ae0: 69 67 68 74 28 73 6c 61 76 65 50 74 72 2d 3e 74  ight(slavePtr->t
6af0: 6b 77 69 6e 29 20 2b 20 73 6c 61 76 65 50 74 72  kwin) + slavePtr
6b00: 2d 3e 64 6f 75 62 6c 65 42 77 0a 09 09 2b 20 73  ->doubleBw...+ s
6b10: 6c 61 76 65 50 74 72 2d 3e 70 61 64 59 20 2b 20  lavePtr->padY + 
6b20: 73 6c 61 76 65 50 74 72 2d 3e 69 50 61 64 59 3b  slavePtr->iPadY;
6b30: 0a 09 69 66 20 28 28 73 6c 61 76 65 50 74 72 2d  ..if ((slavePtr-
6b40: 3e 73 69 64 65 20 3d 3d 20 4c 45 46 54 29 20 7c  >side == LEFT) |
6b50: 7c 20 28 73 6c 61 76 65 50 74 72 2d 3e 73 69 64  | (slavePtr->sid
6b60: 65 20 3d 3d 20 52 49 47 48 54 29 29 20 7b 0a 09  e == RIGHT)) {..
6b70: 20 20 20 20 63 75 72 45 78 70 61 6e 64 20 3d 20      curExpand = 
6b80: 28 63 61 76 69 74 79 48 65 69 67 68 74 20 2d 20  (cavityHeight - 
6b90: 63 68 69 6c 64 48 65 69 67 68 74 29 2f 6e 75 6d  childHeight)/num
6ba0: 45 78 70 61 6e 64 3b 0a 09 20 20 20 20 69 66 20  Expand;..    if 
6bb0: 28 63 75 72 45 78 70 61 6e 64 20 3c 20 6d 69 6e  (curExpand < min
6bc0: 45 78 70 61 6e 64 29 20 7b 0a 09 09 6d 69 6e 45  Expand) {...minE
6bd0: 78 70 61 6e 64 20 3d 20 63 75 72 45 78 70 61 6e  xpand = curExpan
6be0: 64 3b 0a 09 20 20 20 20 7d 0a 09 7d 20 65 6c 73  d;..    }..} els
6bf0: 65 20 7b 0a 09 20 20 20 20 63 61 76 69 74 79 48  e {..    cavityH
6c00: 65 69 67 68 74 20 2d 3d 20 63 68 69 6c 64 48 65  eight -= childHe
6c10: 69 67 68 74 3b 0a 09 20 20 20 20 69 66 20 28 73  ight;..    if (s
6c20: 6c 61 76 65 50 74 72 2d 3e 66 6c 61 67 73 20 26  lavePtr->flags &
6c30: 20 45 58 50 41 4e 44 29 20 7b 0a 09 09 6e 75 6d   EXPAND) {...num
6c40: 45 78 70 61 6e 64 2b 2b 3b 0a 09 20 20 20 20 7d  Expand++;..    }
6c50: 0a 09 7d 0a 20 20 20 20 7d 0a 20 20 20 20 63 75  ..}.    }.    cu
6c60: 72 45 78 70 61 6e 64 20 3d 20 63 61 76 69 74 79  rExpand = cavity
6c70: 48 65 69 67 68 74 2f 6e 75 6d 45 78 70 61 6e 64  Height/numExpand
6c80: 3b 0a 20 20 20 20 69 66 20 28 63 75 72 45 78 70  ;.    if (curExp
6c90: 61 6e 64 20 3c 20 6d 69 6e 45 78 70 61 6e 64 29  and < minExpand)
6ca0: 20 7b 0a 09 6d 69 6e 45 78 70 61 6e 64 20 3d 20   {..minExpand = 
6cb0: 63 75 72 45 78 70 61 6e 64 3b 0a 20 20 20 20 7d  curExpand;.    }
6cc0: 0a 20 20 20 20 72 65 74 75 72 6e 20 28 6d 69 6e  .    return (min
6cd0: 45 78 70 61 6e 64 20 3c 20 30 29 20 3f 20 30 20  Expand < 0) ? 0 
6ce0: 3a 20 6d 69 6e 45 78 70 61 6e 64 3b 0a 7d 0a 0c  : minExpand;.}..
6cf0: 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ./*. *----------
6d00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6d10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6d20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6d30: 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 47 65 74 50 61  ----. *. * GetPa
6d40: 63 6b 65 72 20 2d 2d 0a 20 2a 0a 20 2a 09 54 68  cker --. *. *.Th
6d50: 69 73 20 69 6e 74 65 72 6e 61 6c 20 70 72 6f 63  is internal proc
6d60: 65 64 75 72 65 20 69 73 20 75 73 65 64 20 74 6f  edure is used to
6d70: 20 6c 6f 63 61 74 65 20 61 20 50 61 63 6b 65 72   locate a Packer
6d80: 0a 20 2a 09 73 74 72 75 63 74 75 72 65 20 66 6f  . *.structure fo
6d90: 72 20 61 20 67 69 76 65 6e 20 77 69 6e 64 6f 77  r a given window
6da0: 2c 20 63 72 65 61 74 69 6e 67 20 6f 6e 65 20 69  , creating one i
6db0: 66 20 6f 6e 65 0a 20 2a 09 64 6f 65 73 6e 27 74  f one. *.doesn't
6dc0: 20 65 78 69 73 74 20 61 6c 72 65 61 64 79 2e 0a   exist already..
6dd0: 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20   *. * Results:. 
6de0: 2a 09 54 68 65 20 72 65 74 75 72 6e 20 76 61 6c  *.The return val
6df0: 75 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  ue is a pointer 
6e00: 74 6f 20 74 68 65 20 50 61 63 6b 65 72 20 73 74  to the Packer st
6e10: 72 75 63 74 75 72 65 0a 20 2a 09 63 6f 72 72 65  ructure. *.corre
6e20: 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 6b 77 69  sponding to tkwi
6e30: 6e 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20 65 66  n.. *. * Side ef
6e40: 66 65 63 74 73 3a 0a 20 2a 09 41 20 6e 65 77 20  fects:. *.A new 
6e50: 70 61 63 6b 65 72 20 73 74 72 75 63 74 75 72 65  packer structure
6e60: 20 6d 61 79 20 62 65 20 63 72 65 61 74 65 64 2e   may be created.
6e70: 20 20 49 66 20 73 6f 2c 20 74 68 65 6e 0a 20 2a    If so, then. *
6e80: 09 61 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 73  .a callback is s
6e90: 65 74 20 75 70 20 74 6f 20 63 6c 65 61 6e 20 74  et up to clean t
6ea0: 68 69 6e 67 73 20 75 70 20 77 68 65 6e 20 74 68  hings up when th
6eb0: 65 0a 20 2a 09 77 69 6e 64 6f 77 20 69 73 20 64  e. *.window is d
6ec0: 65 6c 65 74 65 64 2e 0a 20 2a 0a 20 2a 2d 2d 2d  eleted.. *. *---
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 2d 2d 2d 2d 2d 2d 2d  ----------------
6ef0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6f00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a  -----------. */.
6f10: 0a 73 74 61 74 69 63 20 50 61 63 6b 65 72 20 2a  .static Packer *
6f20: 0a 47 65 74 50 61 63 6b 65 72 28 74 6b 77 69 6e  .GetPacker(tkwin
6f30: 29 0a 20 20 20 20 54 6b 5f 57 69 6e 64 6f 77 20  ).    Tk_Window 
6f40: 74 6b 77 69 6e 3b 09 09 2f 2a 20 54 6f 6b 65 6e  tkwin;../* Token
6f50: 20 66 6f 72 20 77 69 6e 64 6f 77 20 66 6f 72 20   for window for 
6f60: 77 68 69 63 68 0a 09 09 09 09 20 2a 20 70 61 63  which..... * pac
6f70: 6b 65 72 20 73 74 72 75 63 74 75 72 65 20 69 73  ker structure is
6f80: 20 64 65 73 69 72 65 64 2e 20 2a 2f 0a 7b 0a 20   desired. */.{. 
6f90: 20 20 20 72 65 67 69 73 74 65 72 20 50 61 63 6b     register Pack
6fa0: 65 72 20 2a 70 61 63 6b 50 74 72 3b 0a 20 20 20  er *packPtr;.   
6fb0: 20 54 63 6c 5f 48 61 73 68 45 6e 74 72 79 20 2a   Tcl_HashEntry *
6fc0: 68 50 74 72 3b 0a 20 20 20 20 69 6e 74 20 6e 65  hPtr;.    int ne
6fd0: 77 3b 0a 0a 20 20 20 20 69 66 20 28 21 69 6e 69  w;..    if (!ini
6fe0: 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 69 6e 69  tialized) {..ini
6ff0: 74 69 61 6c 69 7a 65 64 20 3d 20 31 3b 0a 09 54  tialized = 1;..T
7000: 63 6c 5f 49 6e 69 74 48 61 73 68 54 61 62 6c 65  cl_InitHashTable
7010: 28 26 70 61 63 6b 65 72 48 61 73 68 54 61 62 6c  (&packerHashTabl
7020: 65 2c 20 54 43 4c 5f 4f 4e 45 5f 57 4f 52 44 5f  e, TCL_ONE_WORD_
7030: 4b 45 59 53 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  KEYS);.    }..  
7040: 20 20 2f 2a 0a 20 20 20 20 20 2a 20 53 65 65 20    /*.     * See 
7050: 69 66 20 74 68 65 72 65 27 73 20 61 6c 72 65 61  if there's alrea
7060: 64 79 20 70 61 63 6b 65 72 20 66 6f 72 20 74 68  dy packer for th
7070: 69 73 20 77 69 6e 64 6f 77 2e 20 20 49 66 20 6e  is window.  If n
7080: 6f 74 2c 0a 20 20 20 20 20 2a 20 74 68 65 6e 20  ot,.     * then 
7090: 63 72 65 61 74 65 20 61 20 6e 65 77 20 6f 6e 65  create a new one
70a0: 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 68  ..     */..    h
70b0: 50 74 72 20 3d 20 54 63 6c 5f 43 72 65 61 74 65  Ptr = Tcl_Create
70c0: 48 61 73 68 45 6e 74 72 79 28 26 70 61 63 6b 65  HashEntry(&packe
70d0: 72 48 61 73 68 54 61 62 6c 65 2c 20 28 63 68 61  rHashTable, (cha
70e0: 72 20 2a 29 20 74 6b 77 69 6e 2c 20 26 6e 65 77  r *) tkwin, &new
70f0: 29 3b 0a 20 20 20 20 69 66 20 28 21 6e 65 77 29  );.    if (!new)
7100: 20 7b 0a 09 72 65 74 75 72 6e 20 28 50 61 63 6b   {..return (Pack
7110: 65 72 20 2a 29 20 54 63 6c 5f 47 65 74 48 61 73  er *) Tcl_GetHas
7120: 68 56 61 6c 75 65 28 68 50 74 72 29 3b 0a 20 20  hValue(hPtr);.  
7130: 20 20 7d 0a 20 20 20 20 70 61 63 6b 50 74 72 20    }.    packPtr 
7140: 3d 20 28 50 61 63 6b 65 72 20 2a 29 20 63 6b 61  = (Packer *) cka
7150: 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 50 61 63 6b  lloc(sizeof(Pack
7160: 65 72 29 29 3b 0a 20 20 20 20 70 61 63 6b 50 74  er));.    packPt
7170: 72 2d 3e 74 6b 77 69 6e 20 3d 20 74 6b 77 69 6e  r->tkwin = tkwin
7180: 3b 0a 20 20 20 20 70 61 63 6b 50 74 72 2d 3e 6d  ;.    packPtr->m
7190: 61 73 74 65 72 50 74 72 20 3d 20 4e 55 4c 4c 3b  asterPtr = NULL;
71a0: 0a 20 20 20 20 70 61 63 6b 50 74 72 2d 3e 6e 65  .    packPtr->ne
71b0: 78 74 50 74 72 20 3d 20 4e 55 4c 4c 3b 0a 20 20  xtPtr = NULL;.  
71c0: 20 20 70 61 63 6b 50 74 72 2d 3e 73 6c 61 76 65    packPtr->slave
71d0: 50 74 72 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20  Ptr = NULL;.    
71e0: 70 61 63 6b 50 74 72 2d 3e 73 69 64 65 20 3d 20  packPtr->side = 
71f0: 54 4f 50 3b 0a 20 20 20 20 70 61 63 6b 50 74 72  TOP;.    packPtr
7200: 2d 3e 61 6e 63 68 6f 72 20 3d 20 54 4b 5f 41 4e  ->anchor = TK_AN
7210: 43 48 4f 52 5f 43 45 4e 54 45 52 3b 0a 20 20 20  CHOR_CENTER;.   
7220: 20 70 61 63 6b 50 74 72 2d 3e 70 61 64 58 20 3d   packPtr->padX =
7230: 20 31 3b 0a 20 20 20 20 70 61 63 6b 50 74 72 2d   1;.    packPtr-
7240: 3e 70 61 64 59 20 3d 20 30 3b 0a 20 20 20 20 70  >padY = 0;.    p
7250: 61 63 6b 50 74 72 2d 3e 69 50 61 64 58 20 3d 20  ackPtr->iPadX = 
7260: 70 61 63 6b 50 74 72 2d 3e 69 50 61 64 59 20 3d  packPtr->iPadY =
7270: 20 30 3b 0a 20 20 20 20 70 61 63 6b 50 74 72 2d   0;.    packPtr-
7280: 3e 64 6f 75 62 6c 65 42 77 20 3d 20 32 2a 54 6b  >doubleBw = 2*Tk
7290: 5f 42 6f 72 64 65 72 57 69 64 74 68 28 74 6b 77  _BorderWidth(tkw
72a0: 69 6e 29 3b 0a 20 20 20 20 70 61 63 6b 50 74 72  in);.    packPtr
72b0: 2d 3e 61 62 6f 72 74 50 74 72 20 3d 20 4e 55 4c  ->abortPtr = NUL
72c0: 4c 3b 0a 20 20 20 20 70 61 63 6b 50 74 72 2d 3e  L;.    packPtr->
72d0: 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 54  flags = 0;.    T
72e0: 63 6c 5f 53 65 74 48 61 73 68 56 61 6c 75 65 28  cl_SetHashValue(
72f0: 68 50 74 72 2c 20 70 61 63 6b 50 74 72 29 3b 0a  hPtr, packPtr);.
7300: 20 20 20 20 54 6b 5f 43 72 65 61 74 65 45 76 65      Tk_CreateEve
7310: 6e 74 48 61 6e 64 6c 65 72 28 74 6b 77 69 6e 2c  ntHandler(tkwin,
7320: 20 53 74 72 75 63 74 75 72 65 4e 6f 74 69 66 79   StructureNotify
7330: 4d 61 73 6b 2c 0a 09 20 20 20 20 50 61 63 6b 53  Mask,..    PackS
7340: 74 72 75 63 74 75 72 65 50 72 6f 63 2c 20 28 43  tructureProc, (C
7350: 6c 69 65 6e 74 44 61 74 61 29 20 70 61 63 6b 50  lientData) packP
7360: 74 72 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  tr);.    return 
7370: 70 61 63 6b 50 74 72 3b 0a 7d 0a 0c 0a 2f 2a 0a  packPtr;.}.../*.
7380: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   *--------------
7390: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
73a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
73b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
73c0: 0a 20 2a 0a 20 2a 20 50 61 63 6b 41 66 74 65 72  . *. * PackAfter
73d0: 20 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69 73 20 70   --. *. *.This p
73e0: 72 6f 63 65 64 75 72 65 20 64 6f 65 73 20 6d 6f  rocedure does mo
73f0: 73 74 20 6f 66 20 74 68 65 20 72 65 61 6c 20 77  st of the real w
7400: 6f 72 6b 20 6f 66 20 61 64 64 69 6e 67 0a 20 2a  ork of adding. *
7410: 09 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 77 69 6e  .one or more win
7420: 64 6f 77 73 20 69 6e 74 6f 20 74 68 65 20 70 61  dows into the pa
7430: 63 6b 69 6e 67 20 6f 72 64 65 72 20 66 6f 72 20  cking order for 
7440: 69 74 73 20 70 61 72 65 6e 74 2e 0a 20 2a 0a 20  its parent.. *. 
7450: 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 41 20  * Results:. *.A 
7460: 73 74 61 6e 64 61 72 64 20 54 63 6c 20 72 65 74  standard Tcl ret
7470: 75 72 6e 20 76 61 6c 75 65 2e 0a 20 2a 0a 20 2a  urn value.. *. *
7480: 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 20   Side effects:. 
7490: 2a 09 54 68 65 20 67 65 6f 6d 65 74 72 79 20 6f  *.The geometry o
74a0: 66 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  f the specified 
74b0: 77 69 6e 64 6f 77 73 20 6d 61 79 20 63 68 61 6e  windows may chan
74c0: 67 65 2c 20 62 6f 74 68 20 6e 6f 77 20 61 6e 64  ge, both now and
74d0: 0a 20 2a 09 61 67 61 69 6e 20 69 6e 20 74 68 65  . *.again in the
74e0: 20 66 75 74 75 72 65 2e 0a 20 2a 0a 20 2a 2d 2d   future.. *. *--
74f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7500: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7510: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7520: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f  ------------. */
7530: 0a 0a 73 74 61 74 69 63 20 69 6e 74 0a 50 61 63  ..static int.Pac
7540: 6b 41 66 74 65 72 28 69 6e 74 65 72 70 2c 20 70  kAfter(interp, p
7550: 72 65 76 50 74 72 2c 20 6d 61 73 74 65 72 50 74  revPtr, masterPt
7560: 72 2c 20 61 72 67 63 2c 20 61 72 67 76 29 0a 20  r, argc, argv). 
7570: 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69     Tcl_Interp *i
7580: 6e 74 65 72 70 3b 09 09 2f 2a 20 49 6e 74 65 72  nterp;../* Inter
7590: 70 72 65 74 65 72 20 66 6f 72 20 65 72 72 6f 72  preter for error
75a0: 20 72 65 70 6f 72 74 69 6e 67 2e 20 2a 2f 0a 20   reporting. */. 
75b0: 20 20 20 50 61 63 6b 65 72 20 2a 70 72 65 76 50     Packer *prevP
75c0: 74 72 3b 09 09 2f 2a 20 50 61 63 6b 20 77 69 6e  tr;../* Pack win
75d0: 64 6f 77 73 20 69 6e 20 61 72 67 76 20 6a 75 73  dows in argv jus
75e0: 74 20 61 66 74 65 72 20 74 68 69 73 0a 09 09 09  t after this....
75f0: 09 20 2a 20 77 69 6e 64 6f 77 3b 20 20 4e 55 4c  . * window;  NUL
7600: 4c 20 6d 65 61 6e 73 20 70 61 63 6b 20 61 73 20  L means pack as 
7610: 66 69 72 73 74 0a 09 09 09 09 20 2a 20 63 68 69  first..... * chi
7620: 6c 64 20 6f 66 20 6d 61 73 74 65 72 50 74 72 2e  ld of masterPtr.
7630: 20 2a 2f 0a 20 20 20 20 50 61 63 6b 65 72 20 2a   */.    Packer *
7640: 6d 61 73 74 65 72 50 74 72 3b 09 09 2f 2a 20 4d  masterPtr;../* M
7650: 61 73 74 65 72 20 69 6e 20 77 68 69 63 68 20 74  aster in which t
7660: 6f 20 70 61 63 6b 20 77 69 6e 64 6f 77 73 2e 20  o pack windows. 
7670: 2a 2f 0a 20 20 20 20 69 6e 74 20 61 72 67 63 3b  */.    int argc;
7680: 09 09 09 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20  .../* Number of 
7690: 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 72 67 76  elements in argv
76a0: 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 2a  . */.    char **
76b0: 61 72 67 76 3b 09 09 2f 2a 20 41 72 72 61 79 20  argv;../* Array 
76c0: 6f 66 20 6c 69 73 74 73 2c 20 65 61 63 68 20 63  of lists, each c
76d0: 6f 6e 74 61 69 6e 69 6e 67 20 32 0a 09 09 09 09  ontaining 2.....
76e0: 20 2a 20 65 6c 65 6d 65 6e 74 73 3a 20 20 77 69   * elements:  wi
76f0: 6e 64 6f 77 20 6e 61 6d 65 20 61 6e 64 20 73 69  ndow name and si
7700: 64 65 0a 09 09 09 09 20 2a 20 61 67 61 69 6e 73  de..... * agains
7710: 74 20 77 68 69 63 68 20 74 6f 20 70 61 63 6b 2e  t which to pack.
7720: 20 2a 2f 0a 7b 0a 20 20 20 20 72 65 67 69 73 74   */.{.    regist
7730: 65 72 20 50 61 63 6b 65 72 20 2a 70 61 63 6b 50  er Packer *packP
7740: 74 72 3b 0a 20 20 20 20 54 6b 5f 57 69 6e 64 6f  tr;.    Tk_Windo
7750: 77 20 74 6b 77 69 6e 2c 20 61 6e 63 65 73 74 6f  w tkwin, ancesto
7760: 72 2c 20 70 61 72 65 6e 74 3b 0a 20 20 20 20 73  r, parent;.    s
7770: 69 7a 65 5f 74 20 6c 65 6e 67 74 68 3b 0a 20 20  ize_t length;.  
7780: 20 20 63 68 61 72 20 2a 2a 6f 70 74 69 6f 6e 73    char **options
7790: 3b 0a 20 20 20 20 69 6e 74 20 69 6e 64 65 78 2c  ;.    int index,
77a0: 20 74 6d 70 2c 20 6f 70 74 69 6f 6e 43 6f 75 6e   tmp, optionCoun
77b0: 74 2c 20 63 3b 0a 0a 20 20 20 20 2f 2a 0a 20 20  t, c;..    /*.  
77c0: 20 20 20 2a 20 49 74 65 72 61 74 65 20 6f 76 65     * Iterate ove
77d0: 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 77 69 6e  r all of the win
77e0: 64 6f 77 20 73 70 65 63 69 66 69 65 72 73 2c 20  dow specifiers, 
77f0: 65 61 63 68 20 63 6f 6e 73 69 73 74 69 6e 67 20  each consisting 
7800: 6f 66 0a 20 20 20 20 20 2a 20 74 77 6f 20 61 72  of.     * two ar
7810: 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 20 66 69  guments.  The fi
7820: 72 73 74 20 61 72 67 75 6d 65 6e 74 20 63 6f 6e  rst argument con
7830: 74 61 69 6e 73 20 74 68 65 20 77 69 6e 64 6f 77  tains the window
7840: 20 6e 61 6d 65 20 61 6e 64 0a 20 20 20 20 20 2a   name and.     *
7850: 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20   the additional 
7860: 61 72 67 75 6d 65 6e 74 73 20 63 6f 6e 74 61 69  arguments contai
7870: 6e 20 6f 70 74 69 6f 6e 73 20 73 75 63 68 20 61  n options such a
7880: 73 20 22 74 6f 70 22 20 6f 72 0a 20 20 20 20 20  s "top" or.     
7890: 2a 20 22 70 61 64 78 20 32 30 22 2e 0a 20 20 20  * "padx 20"..   
78a0: 20 20 2a 2f 0a 0a 20 20 20 20 66 6f 72 20 28 20    */..    for ( 
78b0: 3b 20 61 72 67 63 20 3e 20 30 3b 20 61 72 67 63  ; argc > 0; argc
78c0: 20 2d 3d 20 32 2c 20 61 72 67 76 20 2b 3d 20 32   -= 2, argv += 2
78d0: 2c 20 70 72 65 76 50 74 72 20 3d 20 70 61 63 6b  , prevPtr = pack
78e0: 50 74 72 29 20 7b 0a 09 69 66 20 28 61 72 67 63  Ptr) {..if (argc
78f0: 20 3c 20 32 29 20 7b 0a 09 20 20 20 20 54 63 6c   < 2) {..    Tcl
7900: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
7910: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
7920: 72 67 73 3a 20 77 69 6e 64 6f 77 20 5c 22 22 2c  rgs: window \"",
7930: 0a 09 09 20 20 20 20 61 72 67 76 5b 30 5d 2c 20  ...    argv[0], 
7940: 22 5c 22 20 73 68 6f 75 6c 64 20 62 65 20 66 6f  "\" should be fo
7950: 6c 6c 6f 77 65 64 20 62 79 20 6f 70 74 69 6f 6e  llowed by option
7960: 73 22 2c 0a 09 09 20 20 20 20 28 63 68 61 72 20  s",...    (char 
7970: 2a 29 20 4e 55 4c 4c 29 3b 0a 09 20 20 20 20 72  *) NULL);..    r
7980: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
7990: 0a 09 7d 0a 0a 09 2f 2a 0a 09 20 2a 20 46 69 6e  ..}.../*.. * Fin
79a0: 64 20 74 68 65 20 70 61 63 6b 65 72 20 66 6f 72  d the packer for
79b0: 20 74 68 65 20 77 69 6e 64 6f 77 20 74 6f 20 62   the window to b
79c0: 65 20 70 61 63 6b 65 64 2c 20 61 6e 64 20 6d 61  e packed, and ma
79d0: 6b 65 20 73 75 72 65 0a 09 20 2a 20 74 68 61 74  ke sure.. * that
79e0: 20 74 68 65 20 77 69 6e 64 6f 77 20 69 6e 20 77   the window in w
79f0: 68 69 63 68 20 69 74 20 77 69 6c 6c 20 62 65 20  hich it will be 
7a00: 70 61 63 6b 65 64 20 69 73 20 65 69 74 68 65 72  packed is either
7a10: 20 69 74 73 0a 09 20 2a 20 6f 72 20 61 20 64 65   its.. * or a de
7a20: 73 63 65 6e 64 61 6e 74 20 6f 66 20 69 74 73 20  scendant of its 
7a30: 70 61 72 65 6e 74 2e 0a 09 20 2a 2f 0a 0a 09 74  parent... */...t
7a40: 6b 77 69 6e 20 3d 20 54 6b 5f 4e 61 6d 65 54 6f  kwin = Tk_NameTo
7a50: 57 69 6e 64 6f 77 28 69 6e 74 65 72 70 2c 20 61  Window(interp, a
7a60: 72 67 76 5b 30 5d 2c 20 6d 61 73 74 65 72 50 74  rgv[0], masterPt
7a70: 72 2d 3e 74 6b 77 69 6e 29 3b 0a 09 69 66 20 28  r->tkwin);..if (
7a80: 74 6b 77 69 6e 20 3d 3d 20 4e 55 4c 4c 29 20 7b  tkwin == NULL) {
7a90: 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ..    return TCL
7aa0: 5f 45 52 52 4f 52 3b 0a 09 7d 0a 0a 09 70 61 72  _ERROR;..}...par
7ab0: 65 6e 74 20 3d 20 54 6b 5f 50 61 72 65 6e 74 28  ent = Tk_Parent(
7ac0: 74 6b 77 69 6e 29 3b 0a 09 66 6f 72 20 28 61 6e  tkwin);..for (an
7ad0: 63 65 73 74 6f 72 20 3d 20 6d 61 73 74 65 72 50  cestor = masterP
7ae0: 74 72 2d 3e 74 6b 77 69 6e 3b 20 3b 20 61 6e 63  tr->tkwin; ; anc
7af0: 65 73 74 6f 72 20 3d 20 54 6b 5f 50 61 72 65 6e  estor = Tk_Paren
7b00: 74 28 61 6e 63 65 73 74 6f 72 29 29 20 7b 0a 09  t(ancestor)) {..
7b10: 20 20 20 20 69 66 20 28 61 6e 63 65 73 74 6f 72      if (ancestor
7b20: 20 3d 3d 20 70 61 72 65 6e 74 29 20 7b 0a 09 09   == parent) {...
7b30: 62 72 65 61 6b 3b 0a 09 20 20 20 20 7d 0a 09 20  break;..    }.. 
7b40: 20 20 20 69 66 20 28 28 28 54 6b 5f 46 61 6b 65     if (((Tk_Fake
7b50: 57 69 6e 20 2a 29 20 28 61 6e 63 65 73 74 6f 72  Win *) (ancestor
7b60: 29 29 2d 3e 66 6c 61 67 73 20 26 20 54 4b 5f 54  ))->flags & TK_T
7b70: 4f 50 5f 4c 45 56 45 4c 29 20 7b 0a 09 09 62 61  OP_LEVEL) {...ba
7b80: 64 57 69 6e 64 6f 77 3a 0a 09 09 54 63 6c 5f 41  dWindow:...Tcl_A
7b90: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
7ba0: 72 70 2c 20 22 63 61 6e 27 74 20 70 61 63 6b 20  rp, "can't pack 
7bb0: 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 09 09 09 22  ", argv[0],...."
7bc0: 20 69 6e 73 69 64 65 20 22 2c 20 54 6b 5f 50 61   inside ", Tk_Pa
7bd0: 74 68 4e 61 6d 65 28 6d 61 73 74 65 72 50 74 72  thName(masterPtr
7be0: 2d 3e 74 6b 77 69 6e 29 2c 0a 09 09 09 28 63 68  ->tkwin),....(ch
7bf0: 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09 09 72  ar *) NULL);...r
7c00: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
7c10: 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 69 66 20 28  ..    }..}..if (
7c20: 28 28 54 6b 5f 46 61 6b 65 57 69 6e 20 2a 29 20  ((Tk_FakeWin *) 
7c30: 28 74 6b 77 69 6e 29 29 2d 3e 66 6c 61 67 73 20  (tkwin))->flags 
7c40: 26 20 54 4b 5f 54 4f 50 5f 4c 45 56 45 4c 29 20  & TK_TOP_LEVEL) 
7c50: 7b 0a 09 20 20 20 20 67 6f 74 6f 20 62 61 64 57  {..    goto badW
7c60: 69 6e 64 6f 77 3b 0a 09 7d 0a 09 69 66 20 28 74  indow;..}..if (t
7c70: 6b 77 69 6e 20 3d 3d 20 6d 61 73 74 65 72 50 74  kwin == masterPt
7c80: 72 2d 3e 74 6b 77 69 6e 29 20 7b 0a 09 20 20 20  r->tkwin) {..   
7c90: 20 67 6f 74 6f 20 62 61 64 57 69 6e 64 6f 77 3b   goto badWindow;
7ca0: 0a 09 7d 0a 09 70 61 63 6b 50 74 72 20 3d 20 47  ..}..packPtr = G
7cb0: 65 74 50 61 63 6b 65 72 28 74 6b 77 69 6e 29 3b  etPacker(tkwin);
7cc0: 0a 0a 09 2f 2a 0a 09 20 2a 20 50 72 6f 63 65 73  .../*.. * Proces
7cd0: 73 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 74 68  s options for th
7ce0: 69 73 20 77 69 6e 64 6f 77 2e 0a 09 20 2a 2f 0a  is window... */.
7cf0: 0a 09 69 66 20 28 54 63 6c 5f 53 70 6c 69 74 4c  ..if (Tcl_SplitL
7d00: 69 73 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ist(interp, argv
7d10: 5b 31 5d 2c 20 26 6f 70 74 69 6f 6e 43 6f 75 6e  [1], &optionCoun
7d20: 74 2c 20 26 6f 70 74 69 6f 6e 73 29 20 21 3d 20  t, &options) != 
7d30: 54 43 4c 5f 4f 4b 29 20 7b 0a 09 20 20 20 20 72  TCL_OK) {..    r
7d40: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
7d50: 0a 09 7d 0a 09 70 61 63 6b 50 74 72 2d 3e 73 69  ..}..packPtr->si
7d60: 64 65 20 3d 20 54 4f 50 3b 0a 09 70 61 63 6b 50  de = TOP;..packP
7d70: 74 72 2d 3e 61 6e 63 68 6f 72 20 3d 20 54 4b 5f  tr->anchor = TK_
7d80: 41 4e 43 48 4f 52 5f 43 45 4e 54 45 52 3b 0a 09  ANCHOR_CENTER;..
7d90: 70 61 63 6b 50 74 72 2d 3e 70 61 64 58 20 3d 20  packPtr->padX = 
7da0: 31 3b 0a 09 70 61 63 6b 50 74 72 2d 3e 70 61 64  1;..packPtr->pad
7db0: 59 20 3d 20 30 3b 0a 09 70 61 63 6b 50 74 72 2d  Y = 0;..packPtr-
7dc0: 3e 69 50 61 64 58 20 3d 20 70 61 63 6b 50 74 72  >iPadX = packPtr
7dd0: 2d 3e 69 50 61 64 59 20 3d 20 30 3b 0a 09 70 61  ->iPadY = 0;..pa
7de0: 63 6b 50 74 72 2d 3e 66 6c 61 67 73 20 26 3d 20  ckPtr->flags &= 
7df0: 7e 28 46 49 4c 4c 58 7c 46 49 4c 4c 59 7c 45 58  ~(FILLX|FILLY|EX
7e00: 50 41 4e 44 29 3b 0a 09 70 61 63 6b 50 74 72 2d  PAND);..packPtr-
7e10: 3e 66 6c 61 67 73 20 7c 3d 20 4f 4c 44 5f 53 54  >flags |= OLD_ST
7e20: 59 4c 45 3b 0a 09 66 6f 72 20 28 69 6e 64 65 78  YLE;..for (index
7e30: 20 3d 20 30 20 3b 20 69 6e 64 65 78 20 3c 20 6f   = 0 ; index < o
7e40: 70 74 69 6f 6e 43 6f 75 6e 74 3b 20 69 6e 64 65  ptionCount; inde
7e50: 78 2b 2b 29 20 7b 0a 09 20 20 20 20 63 68 61 72  x++) {..    char
7e60: 20 2a 63 75 72 4f 70 74 20 3d 20 6f 70 74 69 6f   *curOpt = optio
7e70: 6e 73 5b 69 6e 64 65 78 5d 3b 0a 0a 09 20 20 20  ns[index];...   
7e80: 20 63 20 3d 20 63 75 72 4f 70 74 5b 30 5d 3b 0a   c = curOpt[0];.
7e90: 09 20 20 20 20 6c 65 6e 67 74 68 20 3d 20 73 74  .    length = st
7ea0: 72 6c 65 6e 28 63 75 72 4f 70 74 29 3b 0a 0a 09  rlen(curOpt);...
7eb0: 20 20 20 20 69 66 20 28 28 63 20 3d 3d 20 27 74      if ((c == 't
7ec0: 27 29 0a 09 09 20 20 20 20 26 26 20 28 73 74 72  ')...    && (str
7ed0: 6e 63 6d 70 28 63 75 72 4f 70 74 2c 20 22 74 6f  ncmp(curOpt, "to
7ee0: 70 22 2c 20 6c 65 6e 67 74 68 29 29 20 3d 3d 20  p", length)) == 
7ef0: 30 29 20 7b 0a 09 09 70 61 63 6b 50 74 72 2d 3e  0) {...packPtr->
7f00: 73 69 64 65 20 3d 20 54 4f 50 3b 0a 09 20 20 20  side = TOP;..   
7f10: 20 7d 20 65 6c 73 65 20 69 66 20 28 28 63 20 3d   } else if ((c =
7f20: 3d 20 27 62 27 29 0a 09 09 20 20 20 20 26 26 20  = 'b')...    && 
7f30: 28 73 74 72 6e 63 6d 70 28 63 75 72 4f 70 74 2c  (strncmp(curOpt,
7f40: 20 22 62 6f 74 74 6f 6d 22 2c 20 6c 65 6e 67 74   "bottom", lengt
7f50: 68 29 29 20 3d 3d 20 30 29 20 7b 0a 09 09 70 61  h)) == 0) {...pa
7f60: 63 6b 50 74 72 2d 3e 73 69 64 65 20 3d 20 42 4f  ckPtr->side = BO
7f70: 54 54 4f 4d 3b 0a 09 20 20 20 20 7d 20 65 6c 73  TTOM;..    } els
7f80: 65 20 69 66 20 28 28 63 20 3d 3d 20 27 6c 27 29  e if ((c == 'l')
7f90: 0a 09 09 20 20 20 20 26 26 20 28 73 74 72 6e 63  ...    && (strnc
7fa0: 6d 70 28 63 75 72 4f 70 74 2c 20 22 6c 65 66 74  mp(curOpt, "left
7fb0: 22 2c 20 6c 65 6e 67 74 68 29 29 20 3d 3d 20 30  ", length)) == 0
7fc0: 29 20 7b 0a 09 09 70 61 63 6b 50 74 72 2d 3e 73  ) {...packPtr->s
7fd0: 69 64 65 20 3d 20 4c 45 46 54 3b 0a 09 20 20 20  ide = LEFT;..   
7fe0: 20 7d 20 65 6c 73 65 20 69 66 20 28 28 63 20 3d   } else if ((c =
7ff0: 3d 20 27 72 27 29 0a 09 09 20 20 20 20 26 26 20  = 'r')...    && 
8000: 28 73 74 72 6e 63 6d 70 28 63 75 72 4f 70 74 2c  (strncmp(curOpt,
8010: 20 22 72 69 67 68 74 22 2c 20 6c 65 6e 67 74 68   "right", length
8020: 29 29 20 3d 3d 20 30 29 20 7b 0a 09 09 70 61 63  )) == 0) {...pac
8030: 6b 50 74 72 2d 3e 73 69 64 65 20 3d 20 52 49 47  kPtr->side = RIG
8040: 48 54 3b 0a 09 20 20 20 20 7d 20 65 6c 73 65 20  HT;..    } else 
8050: 69 66 20 28 28 63 20 3d 3d 20 27 65 27 29 0a 09  if ((c == 'e')..
8060: 09 20 20 20 20 26 26 20 28 73 74 72 6e 63 6d 70  .    && (strncmp
8070: 28 63 75 72 4f 70 74 2c 20 22 65 78 70 61 6e 64  (curOpt, "expand
8080: 22 2c 20 6c 65 6e 67 74 68 29 29 20 3d 3d 20 30  ", length)) == 0
8090: 29 20 7b 0a 09 09 70 61 63 6b 50 74 72 2d 3e 66  ) {...packPtr->f
80a0: 6c 61 67 73 20 7c 3d 20 45 58 50 41 4e 44 3b 0a  lags |= EXPAND;.
80b0: 09 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28  .    } else if (
80c0: 28 63 20 3d 3d 20 27 66 27 29 0a 09 09 20 20 20  (c == 'f')...   
80d0: 20 26 26 20 28 73 74 72 63 6d 70 28 63 75 72 4f   && (strcmp(curO
80e0: 70 74 2c 20 22 66 69 6c 6c 22 29 29 20 3d 3d 20  pt, "fill")) == 
80f0: 30 29 20 7b 0a 09 09 70 61 63 6b 50 74 72 2d 3e  0) {...packPtr->
8100: 66 6c 61 67 73 20 7c 3d 20 46 49 4c 4c 58 7c 46  flags |= FILLX|F
8110: 49 4c 4c 59 3b 0a 09 20 20 20 20 7d 20 65 6c 73  ILLY;..    } els
8120: 65 20 69 66 20 28 28 6c 65 6e 67 74 68 20 3d 3d  e if ((length ==
8130: 20 35 29 20 26 26 20 28 73 74 72 63 6d 70 28 63   5) && (strcmp(c
8140: 75 72 4f 70 74 2c 20 22 66 69 6c 6c 78 22 29 29  urOpt, "fillx"))
8150: 20 3d 3d 20 30 29 20 7b 0a 09 09 70 61 63 6b 50   == 0) {...packP
8160: 74 72 2d 3e 66 6c 61 67 73 20 7c 3d 20 46 49 4c  tr->flags |= FIL
8170: 4c 58 3b 0a 09 20 20 20 20 7d 20 65 6c 73 65 20  LX;..    } else 
8180: 69 66 20 28 28 6c 65 6e 67 74 68 20 3d 3d 20 35  if ((length == 5
8190: 29 20 26 26 20 28 73 74 72 63 6d 70 28 63 75 72  ) && (strcmp(cur
81a0: 4f 70 74 2c 20 22 66 69 6c 6c 79 22 29 29 20 3d  Opt, "filly")) =
81b0: 3d 20 30 29 20 7b 0a 09 09 70 61 63 6b 50 74 72  = 0) {...packPtr
81c0: 2d 3e 66 6c 61 67 73 20 7c 3d 20 46 49 4c 4c 59  ->flags |= FILLY
81d0: 3b 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 69 66  ;..    } else if
81e0: 20 28 28 63 20 3d 3d 20 27 70 27 29 20 26 26 20   ((c == 'p') && 
81f0: 28 73 74 72 63 6d 70 28 63 75 72 4f 70 74 2c 20  (strcmp(curOpt, 
8200: 22 70 61 64 78 22 29 29 20 3d 3d 20 30 29 20 7b  "padx")) == 0) {
8210: 0a 09 09 69 66 20 28 6f 70 74 69 6f 6e 43 6f 75  ...if (optionCou
8220: 6e 74 20 3c 20 28 69 6e 64 65 78 2b 32 29 29 20  nt < (index+2)) 
8230: 7b 0a 09 09 20 20 20 20 6d 69 73 73 69 6e 67 50  {...    missingP
8240: 61 64 3a 0a 09 09 20 20 20 20 54 63 6c 5f 41 70  ad:...    Tcl_Ap
8250: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
8260: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
8270: 3a 20 5c 22 22 2c 20 63 75 72 4f 70 74 2c 0a 09  : \"", curOpt,..
8280: 09 09 20 20 20 20 22 5c 22 20 6f 70 74 69 6f 6e  ..    "\" option
8290: 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77 65   must be followe
82a0: 64 20 62 79 20 73 63 72 65 65 6e 20 64 69 73 74  d by screen dist
82b0: 61 6e 63 65 22 2c 0a 09 09 09 20 20 20 20 28 63  ance",....    (c
82c0: 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09 09  har *) NULL);...
82d0: 20 20 20 20 67 6f 74 6f 20 65 72 72 6f 72 3b 0a      goto error;.
82e0: 09 09 7d 0a 09 09 69 66 20 28 28 54 6b 5f 47 65  ..}...if ((Tk_Ge
82f0: 74 50 69 78 65 6c 73 28 69 6e 74 65 72 70 2c 20  tPixels(interp, 
8300: 74 6b 77 69 6e 2c 20 6f 70 74 69 6f 6e 73 5b 69  tkwin, options[i
8310: 6e 64 65 78 2b 31 5d 2c 20 26 74 6d 70 29 0a 09  ndex+1], &tmp)..
8320: 09 09 21 3d 20 54 43 4c 5f 4f 4b 29 20 7c 7c 20  ..!= TCL_OK) || 
8330: 28 74 6d 70 20 3c 20 30 29 29 20 7b 0a 09 09 20  (tmp < 0)) {... 
8340: 20 20 20 62 61 64 50 61 64 3a 0a 09 09 20 20 20     badPad:...   
8350: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
8360: 74 28 69 6e 74 65 72 70 2c 20 22 62 61 64 20 70  t(interp, "bad p
8370: 61 64 20 76 61 6c 75 65 20 5c 22 22 2c 0a 09 09  ad value \"",...
8380: 09 20 20 20 20 6f 70 74 69 6f 6e 73 5b 69 6e 64  .    options[ind
8390: 65 78 2b 31 5d 2c 0a 09 09 09 20 20 20 20 22 5c  ex+1],....    "\
83a0: 22 3a 20 20 6d 75 73 74 20 62 65 20 70 6f 73 69  ":  must be posi
83b0: 74 69 76 65 20 73 63 72 65 65 6e 20 64 69 73 74  tive screen dist
83c0: 61 6e 63 65 22 2c 0a 09 09 09 20 20 20 20 28 63  ance",....    (c
83d0: 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09 09  har *) NULL);...
83e0: 20 20 20 20 67 6f 74 6f 20 65 72 72 6f 72 3b 0a      goto error;.
83f0: 09 09 7d 0a 09 09 70 61 63 6b 50 74 72 2d 3e 70  ..}...packPtr->p
8400: 61 64 58 20 3d 20 74 6d 70 3b 0a 09 09 70 61 63  adX = tmp;...pac
8410: 6b 50 74 72 2d 3e 69 50 61 64 58 20 3d 20 30 3b  kPtr->iPadX = 0;
8420: 0a 09 09 69 6e 64 65 78 2b 2b 3b 0a 09 20 20 20  ...index++;..   
8430: 20 7d 20 65 6c 73 65 20 69 66 20 28 28 63 20 3d   } else if ((c =
8440: 3d 20 27 70 27 29 20 26 26 20 28 73 74 72 63 6d  = 'p') && (strcm
8450: 70 28 63 75 72 4f 70 74 2c 20 22 70 61 64 79 22  p(curOpt, "pady"
8460: 29 29 20 3d 3d 20 30 29 20 7b 0a 09 09 69 66 20  )) == 0) {...if 
8470: 28 6f 70 74 69 6f 6e 43 6f 75 6e 74 20 3c 20 28  (optionCount < (
8480: 69 6e 64 65 78 2b 32 29 29 20 7b 0a 09 09 20 20  index+2)) {...  
8490: 20 20 67 6f 74 6f 20 6d 69 73 73 69 6e 67 50 61    goto missingPa
84a0: 64 3b 0a 09 09 7d 0a 09 09 69 66 20 28 28 54 6b  d;...}...if ((Tk
84b0: 5f 47 65 74 50 69 78 65 6c 73 28 69 6e 74 65 72  _GetPixels(inter
84c0: 70 2c 20 74 6b 77 69 6e 2c 20 6f 70 74 69 6f 6e  p, tkwin, option
84d0: 73 5b 69 6e 64 65 78 2b 31 5d 2c 20 26 74 6d 70  s[index+1], &tmp
84e0: 29 0a 09 09 09 21 3d 20 54 43 4c 5f 4f 4b 29 20  )....!= TCL_OK) 
84f0: 7c 7c 20 28 74 6d 70 20 3c 20 30 29 29 20 7b 0a  || (tmp < 0)) {.
8500: 09 09 20 20 20 20 67 6f 74 6f 20 62 61 64 50 61  ..    goto badPa
8510: 64 3b 0a 09 09 7d 0a 09 09 70 61 63 6b 50 74 72  d;...}...packPtr
8520: 2d 3e 70 61 64 59 20 3d 20 74 6d 70 3b 0a 09 09  ->padY = tmp;...
8530: 70 61 63 6b 50 74 72 2d 3e 69 50 61 64 59 20 3d  packPtr->iPadY =
8540: 20 30 3b 0a 09 09 69 6e 64 65 78 2b 2b 3b 0a 09   0;...index++;..
8550: 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 28      } else if ((
8560: 63 20 3d 3d 20 27 66 27 29 20 26 26 20 28 6c 65  c == 'f') && (le
8570: 6e 67 74 68 20 3e 20 31 29 0a 09 09 20 20 20 20  ngth > 1)...    
8580: 26 26 20 28 73 74 72 6e 63 6d 70 28 63 75 72 4f  && (strncmp(curO
8590: 70 74 2c 20 22 66 72 61 6d 65 22 2c 20 6c 65 6e  pt, "frame", len
85a0: 67 74 68 29 20 3d 3d 20 30 29 29 20 7b 0a 09 09  gth) == 0)) {...
85b0: 69 66 20 28 6f 70 74 69 6f 6e 43 6f 75 6e 74 20  if (optionCount 
85c0: 3c 20 28 69 6e 64 65 78 2b 32 29 29 20 7b 0a 09  < (index+2)) {..
85d0: 09 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
85e0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
85f0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 5c 22 66  rong # args: \"f
8600: 72 61 6d 65 5c 22 20 22 2c 0a 09 09 09 20 20 20  rame\" ",....   
8610: 20 22 6f 70 74 69 6f 6e 20 6d 75 73 74 20 62 65   "option must be
8620: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 63   followed by anc
8630: 68 6f 72 20 70 6f 69 6e 74 22 2c 0a 09 09 09 20  hor point",.... 
8640: 20 20 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c     (char *) NULL
8650: 29 3b 0a 09 09 20 20 20 20 67 6f 74 6f 20 65 72  );...    goto er
8660: 72 6f 72 3b 0a 09 09 7d 0a 09 09 69 66 20 28 54  ror;...}...if (T
8670: 6b 5f 47 65 74 41 6e 63 68 6f 72 28 69 6e 74 65  k_GetAnchor(inte
8680: 72 70 2c 20 6f 70 74 69 6f 6e 73 5b 69 6e 64 65  rp, options[inde
8690: 78 2b 31 5d 2c 0a 09 09 09 26 70 61 63 6b 50 74  x+1],....&packPt
86a0: 72 2d 3e 61 6e 63 68 6f 72 29 20 21 3d 20 54 43  r->anchor) != TC
86b0: 4c 5f 4f 4b 29 20 7b 0a 09 09 20 20 20 20 67 6f  L_OK) {...    go
86c0: 74 6f 20 65 72 72 6f 72 3b 0a 09 09 7d 0a 09 09  to error;...}...
86d0: 69 6e 64 65 78 2b 2b 3b 0a 09 20 20 20 20 7d 20  index++;..    } 
86e0: 65 6c 73 65 20 7b 0a 09 09 54 63 6c 5f 41 70 70  else {...Tcl_App
86f0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
8700: 2c 20 22 62 61 64 20 6f 70 74 69 6f 6e 20 5c 22  , "bad option \"
8710: 22 2c 20 63 75 72 4f 70 74 2c 0a 09 09 09 22 5c  ", curOpt,...."\
8720: 22 3a 20 20 73 68 6f 75 6c 64 20 62 65 20 74 6f  ":  should be to
8730: 70 2c 20 62 6f 74 74 6f 6d 2c 20 6c 65 66 74 2c  p, bottom, left,
8740: 20 72 69 67 68 74 2c 20 22 2c 0a 09 09 09 22 65   right, ",...."e
8750: 78 70 61 6e 64 2c 20 66 69 6c 6c 2c 20 66 69 6c  xpand, fill, fil
8760: 6c 78 2c 20 66 69 6c 6c 79 2c 20 70 61 64 78 2c  lx, filly, padx,
8770: 20 70 61 64 79 2c 20 6f 72 20 66 72 61 6d 65 22   pady, or frame"
8780: 2c 0a 09 09 09 28 63 68 61 72 20 2a 29 20 4e 55  ,....(char *) NU
8790: 4c 4c 29 3b 0a 09 09 67 6f 74 6f 20 65 72 72 6f  LL);...goto erro
87a0: 72 3b 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 69  r;..    }..}...i
87b0: 66 20 28 70 61 63 6b 50 74 72 20 21 3d 20 70 72  f (packPtr != pr
87c0: 65 76 50 74 72 29 20 7b 0a 0a 09 20 20 20 20 2f  evPtr) {...    /
87d0: 2a 0a 09 20 20 20 20 20 2a 20 55 6e 70 61 63 6b  *..     * Unpack
87e0: 20 74 68 69 73 20 77 69 6e 64 6f 77 20 69 66 20   this window if 
87f0: 69 74 27 73 20 63 75 72 72 65 6e 74 6c 79 20 70  it's currently p
8800: 61 63 6b 65 64 2e 0a 09 20 20 20 20 20 2a 2f 0a  acked...     */.
8810: 0a 09 20 20 20 20 69 66 20 28 70 61 63 6b 50 74  ..    if (packPt
8820: 72 2d 3e 6d 61 73 74 65 72 50 74 72 20 21 3d 20  r->masterPtr != 
8830: 4e 55 4c 4c 29 20 7b 0a 09 09 69 66 20 28 28 70  NULL) {...if ((p
8840: 61 63 6b 50 74 72 2d 3e 6d 61 73 74 65 72 50 74  ackPtr->masterPt
8850: 72 20 21 3d 20 6d 61 73 74 65 72 50 74 72 29 20  r != masterPtr) 
8860: 26 26 0a 09 09 09 28 70 61 63 6b 50 74 72 2d 3e  &&....(packPtr->
8870: 6d 61 73 74 65 72 50 74 72 2d 3e 74 6b 77 69 6e  masterPtr->tkwin
8880: 0a 09 09 09 21 3d 20 54 6b 5f 50 61 72 65 6e 74  ....!= Tk_Parent
8890: 28 70 61 63 6b 50 74 72 2d 3e 74 6b 77 69 6e 29  (packPtr->tkwin)
88a0: 29 29 20 7b 0a 09 09 20 20 20 20 54 6b 5f 55 6e  )) {...    Tk_Un
88b0: 6d 61 69 6e 74 61 69 6e 47 65 6f 6d 65 74 72 79  maintainGeometry
88c0: 28 70 61 63 6b 50 74 72 2d 3e 74 6b 77 69 6e 2c  (packPtr->tkwin,
88d0: 0a 09 09 09 20 20 20 20 70 61 63 6b 50 74 72 2d  ....    packPtr-
88e0: 3e 6d 61 73 74 65 72 50 74 72 2d 3e 74 6b 77 69  >masterPtr->tkwi
88f0: 6e 29 3b 0a 09 09 7d 0a 09 09 55 6e 6c 69 6e 6b  n);...}...Unlink
8900: 28 70 61 63 6b 50 74 72 29 3b 0a 09 20 20 20 20  (packPtr);..    
8910: 7d 0a 09 0a 09 20 20 20 20 2f 2a 0a 09 20 20 20  }....    /*..   
8920: 20 20 2a 20 41 64 64 20 74 68 65 20 77 69 6e 64    * Add the wind
8930: 6f 77 20 69 6e 20 74 68 65 20 63 6f 72 72 65 63  ow in the correc
8940: 74 20 70 6c 61 63 65 20 69 6e 20 69 74 73 20 70  t place in its p
8950: 61 72 65 6e 74 27 73 0a 09 20 20 20 20 20 2a 20  arent's..     * 
8960: 70 61 63 6b 69 6e 67 20 6f 72 64 65 72 2c 20 74  packing order, t
8970: 68 65 6e 20 6d 61 6b 65 20 73 75 72 65 20 74 68  hen make sure th
8980: 61 74 20 74 68 65 20 77 69 6e 64 6f 77 20 69 73  at the window is
8990: 0a 09 20 20 20 20 20 2a 20 6d 61 6e 61 67 65 64  ..     * managed
89a0: 20 62 79 20 75 73 2e 0a 09 20 20 20 20 20 2a 2f   by us...     */
89b0: 0a 0a 09 20 20 20 20 70 61 63 6b 50 74 72 2d 3e  ...    packPtr->
89c0: 6d 61 73 74 65 72 50 74 72 20 3d 20 6d 61 73 74  masterPtr = mast
89d0: 65 72 50 74 72 3b 0a 09 20 20 20 20 69 66 20 28  erPtr;..    if (
89e0: 70 72 65 76 50 74 72 20 3d 3d 20 4e 55 4c 4c 29  prevPtr == NULL)
89f0: 20 7b 0a 09 09 70 61 63 6b 50 74 72 2d 3e 6e 65   {...packPtr->ne
8a00: 78 74 50 74 72 20 3d 20 6d 61 73 74 65 72 50 74  xtPtr = masterPt
8a10: 72 2d 3e 73 6c 61 76 65 50 74 72 3b 0a 09 09 6d  r->slavePtr;...m
8a20: 61 73 74 65 72 50 74 72 2d 3e 73 6c 61 76 65 50  asterPtr->slaveP
8a30: 74 72 20 3d 20 70 61 63 6b 50 74 72 3b 0a 09 20  tr = packPtr;.. 
8a40: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 70 61     } else {...pa
8a50: 63 6b 50 74 72 2d 3e 6e 65 78 74 50 74 72 20 3d  ckPtr->nextPtr =
8a60: 20 70 72 65 76 50 74 72 2d 3e 6e 65 78 74 50 74   prevPtr->nextPt
8a70: 72 3b 0a 09 09 70 72 65 76 50 74 72 2d 3e 6e 65  r;...prevPtr->ne
8a80: 78 74 50 74 72 20 3d 20 70 61 63 6b 50 74 72 3b  xtPtr = packPtr;
8a90: 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 54 6b 5f  ..    }..    Tk_
8aa0: 4d 61 6e 61 67 65 47 65 6f 6d 65 74 72 79 28 74  ManageGeometry(t
8ab0: 6b 77 69 6e 2c 20 26 70 61 63 6b 65 72 54 79 70  kwin, &packerTyp
8ac0: 65 2c 20 28 43 6c 69 65 6e 74 44 61 74 61 29 20  e, (ClientData) 
8ad0: 70 61 63 6b 50 74 72 29 3b 0a 09 7d 0a 09 63 6b  packPtr);..}..ck
8ae0: 66 72 65 65 28 28 63 68 61 72 20 2a 29 20 6f 70  free((char *) op
8af0: 74 69 6f 6e 73 29 3b 0a 20 20 20 20 7d 0a 0a 20  tions);.    }.. 
8b00: 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20 41 72 72     /*.     * Arr
8b10: 61 6e 67 65 20 66 6f 72 20 74 68 65 20 70 61 72  ange for the par
8b20: 65 6e 74 20 74 6f 20 62 65 20 72 65 2d 70 61 63  ent to be re-pac
8b30: 6b 65 64 20 61 74 20 74 68 65 20 66 69 72 73 74  ked at the first
8b40: 0a 20 20 20 20 20 2a 20 69 64 6c 65 20 6d 6f 6d  .     * idle mom
8b50: 65 6e 74 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20 20  ent..     */..  
8b60: 20 20 69 66 20 28 6d 61 73 74 65 72 50 74 72 2d    if (masterPtr-
8b70: 3e 61 62 6f 72 74 50 74 72 20 21 3d 20 4e 55 4c  >abortPtr != NUL
8b80: 4c 29 20 7b 0a 09 2a 6d 61 73 74 65 72 50 74 72  L) {..*masterPtr
8b90: 2d 3e 61 62 6f 72 74 50 74 72 20 3d 20 31 3b 0a  ->abortPtr = 1;.
8ba0: 20 20 20 20 7d 0a 20 20 20 20 69 66 20 28 21 28      }.    if (!(
8bb0: 6d 61 73 74 65 72 50 74 72 2d 3e 66 6c 61 67 73  masterPtr->flags
8bc0: 20 26 20 52 45 51 55 45 53 54 45 44 5f 52 45 50   & REQUESTED_REP
8bd0: 41 43 4b 29 29 20 7b 0a 09 6d 61 73 74 65 72 50  ACK)) {..masterP
8be0: 74 72 2d 3e 66 6c 61 67 73 20 7c 3d 20 52 45 51  tr->flags |= REQ
8bf0: 55 45 53 54 45 44 5f 52 45 50 41 43 4b 3b 0a 09  UESTED_REPACK;..
8c00: 54 63 6c 5f 44 6f 57 68 65 6e 49 64 6c 65 28 41  Tcl_DoWhenIdle(A
8c10: 72 72 61 6e 67 65 50 61 63 6b 69 6e 67 2c 20 28  rrangePacking, (
8c20: 43 6c 69 65 6e 74 44 61 74 61 29 20 6d 61 73 74  ClientData) mast
8c30: 65 72 50 74 72 29 3b 0a 20 20 20 20 7d 0a 20 20  erPtr);.    }.  
8c40: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
8c50: 0a 0a 20 20 20 20 65 72 72 6f 72 3a 0a 20 20 20  ..    error:.   
8c60: 20 63 6b 66 72 65 65 28 28 63 68 61 72 20 2a 29   ckfree((char *)
8c70: 20 6f 70 74 69 6f 6e 73 29 3b 0a 20 20 20 20 72   options);.    r
8c80: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
8c90: 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d  .}.../*. *------
8ca0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8cb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8cc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8cd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8ce0: 0a 20 2a 0a 20 2a 20 55 6e 6c 69 6e 6b 20 2d 2d  . *. * Unlink --
8cf0: 0a 20 2a 0a 20 2a 09 52 65 6d 6f 76 65 20 61 20  . *. *.Remove a 
8d00: 70 61 63 6b 65 72 20 66 72 6f 6d 20 69 74 73 20  packer from its 
8d10: 70 61 72 65 6e 74 27 73 20 6c 69 73 74 20 6f 66  parent's list of
8d20: 20 73 6c 61 76 65 73 2e 0a 20 2a 0a 20 2a 20 52   slaves.. *. * R
8d30: 65 73 75 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e  esults:. *.None.
8d40: 0a 20 2a 0a 20 2a 20 53 69 64 65 20 65 66 66 65  . *. * Side effe
8d50: 63 74 73 3a 0a 20 2a 09 54 68 65 20 70 61 72 65  cts:. *.The pare
8d60: 6e 74 20 77 69 6c 6c 20 62 65 20 73 63 68 65 64  nt will be sched
8d70: 75 6c 65 64 20 66 6f 72 20 72 65 70 61 63 6b 69  uled for repacki
8d80: 6e 67 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d  ng.. *. *-------
8d90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8da0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8db0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8dc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
8dd0: 20 2a 2f 0a 0a 73 74 61 74 69 63 20 76 6f 69 64   */..static void
8de0: 0a 55 6e 6c 69 6e 6b 28 70 61 63 6b 50 74 72 29  .Unlink(packPtr)
8df0: 0a 20 20 20 20 72 65 67 69 73 74 65 72 20 50 61  .    register Pa
8e00: 63 6b 65 72 20 2a 70 61 63 6b 50 74 72 3b 09 09  cker *packPtr;..
8e10: 2f 2a 20 57 69 6e 64 6f 77 20 74 6f 20 75 6e 6c  /* Window to unl
8e20: 69 6e 6b 2e 20 2a 2f 0a 7b 0a 20 20 20 20 72 65  ink. */.{.    re
8e30: 67 69 73 74 65 72 20 50 61 63 6b 65 72 20 2a 6d  gister Packer *m
8e40: 61 73 74 65 72 50 74 72 2c 20 2a 70 61 63 6b 50  asterPtr, *packP
8e50: 74 72 32 3b 0a 0a 20 20 20 20 6d 61 73 74 65 72  tr2;..    master
8e60: 50 74 72 20 3d 20 70 61 63 6b 50 74 72 2d 3e 6d  Ptr = packPtr->m
8e70: 61 73 74 65 72 50 74 72 3b 0a 20 20 20 20 69 66  asterPtr;.    if
8e80: 20 28 6d 61 73 74 65 72 50 74 72 20 3d 3d 20 4e   (masterPtr == N
8e90: 55 4c 4c 29 20 7b 0a 09 72 65 74 75 72 6e 3b 0a  ULL) {..return;.
8ea0: 20 20 20 20 7d 0a 20 20 20 20 69 66 20 28 6d 61      }.    if (ma
8eb0: 73 74 65 72 50 74 72 2d 3e 73 6c 61 76 65 50 74  sterPtr->slavePt
8ec0: 72 20 3d 3d 20 70 61 63 6b 50 74 72 29 20 7b 0a  r == packPtr) {.
8ed0: 09 6d 61 73 74 65 72 50 74 72 2d 3e 73 6c 61 76  .masterPtr->slav
8ee0: 65 50 74 72 20 3d 20 70 61 63 6b 50 74 72 2d 3e  ePtr = packPtr->
8ef0: 6e 65 78 74 50 74 72 3b 0a 20 20 20 20 7d 20 65  nextPtr;.    } e
8f00: 6c 73 65 20 7b 0a 09 66 6f 72 20 28 70 61 63 6b  lse {..for (pack
8f10: 50 74 72 32 20 3d 20 6d 61 73 74 65 72 50 74 72  Ptr2 = masterPtr
8f20: 2d 3e 73 6c 61 76 65 50 74 72 3b 20 3b 20 70 61  ->slavePtr; ; pa
8f30: 63 6b 50 74 72 32 20 3d 20 70 61 63 6b 50 74 72  ckPtr2 = packPtr
8f40: 32 2d 3e 6e 65 78 74 50 74 72 29 20 7b 0a 09 20  2->nextPtr) {.. 
8f50: 20 20 20 69 66 20 28 70 61 63 6b 50 74 72 32 20     if (packPtr2 
8f60: 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 70 61 6e  == NULL) {...pan
8f70: 69 63 28 22 55 6e 6c 69 6e 6b 20 63 6f 75 6c 64  ic("Unlink could
8f80: 6e 27 74 20 66 69 6e 64 20 70 72 65 76 69 6f 75  n't find previou
8f90: 73 20 77 69 6e 64 6f 77 22 29 3b 0a 09 20 20 20  s window");..   
8fa0: 20 7d 0a 09 20 20 20 20 69 66 20 28 70 61 63 6b   }..    if (pack
8fb0: 50 74 72 32 2d 3e 6e 65 78 74 50 74 72 20 3d 3d  Ptr2->nextPtr ==
8fc0: 20 70 61 63 6b 50 74 72 29 20 7b 0a 09 09 70 61   packPtr) {...pa
8fd0: 63 6b 50 74 72 32 2d 3e 6e 65 78 74 50 74 72 20  ckPtr2->nextPtr 
8fe0: 3d 20 70 61 63 6b 50 74 72 2d 3e 6e 65 78 74 50  = packPtr->nextP
8ff0: 74 72 3b 0a 09 09 62 72 65 61 6b 3b 0a 09 20 20  tr;...break;..  
9000: 20 20 7d 0a 09 7d 0a 20 20 20 20 7d 0a 20 20 20    }..}.    }.   
9010: 20 69 66 20 28 21 28 6d 61 73 74 65 72 50 74 72   if (!(masterPtr
9020: 2d 3e 66 6c 61 67 73 20 26 20 52 45 51 55 45 53  ->flags & REQUES
9030: 54 45 44 5f 52 45 50 41 43 4b 29 29 20 7b 0a 09  TED_REPACK)) {..
9040: 6d 61 73 74 65 72 50 74 72 2d 3e 66 6c 61 67 73  masterPtr->flags
9050: 20 7c 3d 20 52 45 51 55 45 53 54 45 44 5f 52 45   |= REQUESTED_RE
9060: 50 41 43 4b 3b 0a 09 54 63 6c 5f 44 6f 57 68 65  PACK;..Tcl_DoWhe
9070: 6e 49 64 6c 65 28 41 72 72 61 6e 67 65 50 61 63  nIdle(ArrangePac
9080: 6b 69 6e 67 2c 20 28 43 6c 69 65 6e 74 44 61 74  king, (ClientDat
9090: 61 29 20 6d 61 73 74 65 72 50 74 72 29 3b 0a 20  a) masterPtr);. 
90a0: 20 20 20 7d 0a 20 20 20 20 69 66 20 28 6d 61 73     }.    if (mas
90b0: 74 65 72 50 74 72 2d 3e 61 62 6f 72 74 50 74 72  terPtr->abortPtr
90c0: 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 2a 6d 61   != NULL) {..*ma
90d0: 73 74 65 72 50 74 72 2d 3e 61 62 6f 72 74 50 74  sterPtr->abortPt
90e0: 72 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 0a 20 20  r = 1;.    }..  
90f0: 20 20 70 61 63 6b 50 74 72 2d 3e 6d 61 73 74 65    packPtr->maste
9100: 72 50 74 72 20 3d 20 4e 55 4c 4c 3b 0a 7d 0a 0c  rPtr = NULL;.}..
9110: 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ./*. *----------
9120: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9130: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9140: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a  ------------. *.
9160: 20 2a 20 44 65 73 74 72 6f 79 50 61 63 6b 65 72   * DestroyPacker
9170: 20 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69 73 20 70   --. *. *.This p
9180: 72 6f 63 65 64 75 72 65 20 69 73 20 69 6e 76 6f  rocedure is invo
9190: 6b 65 64 20 62 79 20 54 6b 5f 45 76 65 6e 74 75  ked by Tk_Eventu
91a0: 61 6c 6c 79 46 72 65 65 20 6f 72 20 54 6b 5f 52  allyFree or Tk_R
91b0: 65 6c 65 61 73 65 0a 20 2a 09 74 6f 20 63 6c 65  elease. *.to cle
91c0: 61 6e 20 75 70 20 74 68 65 20 69 6e 74 65 72 6e  an up the intern
91d0: 61 6c 20 73 74 72 75 63 74 75 72 65 20 6f 66 20  al structure of 
91e0: 61 20 70 61 63 6b 65 72 20 61 74 20 61 20 73 61  a packer at a sa
91f0: 66 65 20 74 69 6d 65 0a 20 2a 09 28 77 68 65 6e  fe time. *.(when
9200: 20 6e 6f 2d 6f 6e 65 20 69 73 20 75 73 69 6e 67   no-one is using
9210: 20 69 74 20 61 6e 79 6d 6f 72 65 29 2e 0a 20 2a   it anymore).. *
9220: 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09  . * Results:. *.
9230: 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 20 53 69 64 65  None.. *. * Side
9240: 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 45 76 65   effects:. *.Eve
9250: 72 79 74 68 69 6e 67 20 61 73 73 6f 63 69 61 74  rything associat
9260: 65 64 20 77 69 74 68 20 74 68 65 20 70 61 63 6b  ed with the pack
9270: 65 72 20 69 73 20 66 72 65 65 64 20 75 70 2e 0a  er is freed up..
9280: 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   *. *-----------
9290: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
92a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
92b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
92c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a  -----------. */.
92d0: 0a 73 74 61 74 69 63 20 76 6f 69 64 0a 44 65 73  .static void.Des
92e0: 74 72 6f 79 50 61 63 6b 65 72 28 63 6c 69 65 6e  troyPacker(clien
92f0: 74 44 61 74 61 29 0a 20 20 20 20 43 6c 69 65 6e  tData).    Clien
9300: 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61  tData clientData
9310: 3b 09 09 2f 2a 20 49 6e 66 6f 20 61 62 6f 75 74  ;../* Info about
9320: 20 70 61 63 6b 65 64 20 77 69 6e 64 6f 77 20 74   packed window t
9330: 68 61 74 0a 09 09 09 09 09 20 2a 20 69 73 20 6e  hat...... * is n
9340: 6f 77 20 64 65 61 64 2e 20 2a 2f 0a 7b 0a 20 20  ow dead. */.{.  
9350: 20 20 72 65 67 69 73 74 65 72 20 50 61 63 6b 65    register Packe
9360: 72 20 2a 70 61 63 6b 50 74 72 20 3d 20 28 50 61  r *packPtr = (Pa
9370: 63 6b 65 72 20 2a 29 20 63 6c 69 65 6e 74 44 61  cker *) clientDa
9380: 74 61 3b 0a 20 20 20 20 63 6b 66 72 65 65 28 28  ta;.    ckfree((
9390: 63 68 61 72 20 2a 29 20 70 61 63 6b 50 74 72 29  char *) packPtr)
93a0: 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d  ;.}.../*. *-----
93b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
93c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
93d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
93e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
93f0: 2d 0a 20 2a 0a 20 2a 20 50 61 63 6b 53 74 72 75  -. *. * PackStru
9400: 63 74 75 72 65 50 72 6f 63 20 2d 2d 0a 20 2a 0a  ctureProc --. *.
9410: 20 2a 09 54 68 69 73 20 70 72 6f 63 65 64 75 72   *.This procedur
9420: 65 20 69 73 20 69 6e 76 6f 6b 65 64 20 62 79 20  e is invoked by 
9430: 74 68 65 20 54 6b 20 65 76 65 6e 74 20 64 69 73  the Tk event dis
9440: 70 61 74 63 68 65 72 20 69 6e 20 72 65 73 70 6f  patcher in respo
9450: 6e 73 65 0a 20 2a 09 74 6f 20 53 74 72 75 63 74  nse. *.to Struct
9460: 75 72 65 4e 6f 74 69 66 79 20 65 76 65 6e 74 73  ureNotify events
9470: 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a  .. *. * Results:
9480: 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 20  . *.None.. *. * 
9490: 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 20 2a  Side effects:. *
94a0: 09 49 66 20 61 20 77 69 6e 64 6f 77 20 77 61 73  .If a window was
94b0: 20 6a 75 73 74 20 64 65 6c 65 74 65 64 2c 20 63   just deleted, c
94c0: 6c 65 61 6e 20 75 70 20 61 6c 6c 20 69 74 73 20  lean up all its 
94d0: 70 61 63 6b 65 72 2d 72 65 6c 61 74 65 64 0a 20  packer-related. 
94e0: 2a 09 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20  *.information.  
94f0: 49 66 20 69 74 20 77 61 73 20 6a 75 73 74 20 72  If it was just r
9500: 65 73 69 7a 65 64 2c 20 72 65 70 61 63 6b 20 69  esized, repack i
9510: 74 73 20 73 6c 61 76 65 73 2c 20 69 66 0a 20 2a  ts slaves, if. *
9520: 09 61 6e 79 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d  .any.. *. *-----
9530: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9540: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9550: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9560: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9570: 2d 0a 20 2a 2f 0a 0a 73 74 61 74 69 63 20 76 6f  -. */..static vo
9580: 69 64 0a 50 61 63 6b 53 74 72 75 63 74 75 72 65  id.PackStructure
9590: 50 72 6f 63 28 63 6c 69 65 6e 74 44 61 74 61 2c  Proc(clientData,
95a0: 20 65 76 65 6e 74 50 74 72 29 0a 20 20 20 20 43   eventPtr).    C
95b0: 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74  lientData client
95c0: 44 61 74 61 3b 09 09 2f 2a 20 4f 75 72 20 69 6e  Data;../* Our in
95d0: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
95e0: 77 69 6e 64 6f 77 0a 09 09 09 09 09 20 2a 20 72  window...... * r
95f0: 65 66 65 72 72 65 64 20 74 6f 20 62 79 20 65 76  eferred to by ev
9600: 65 6e 74 50 74 72 2e 20 2a 2f 0a 20 20 20 20 58  entPtr. */.    X
9610: 45 76 65 6e 74 20 2a 65 76 65 6e 74 50 74 72 3b  Event *eventPtr;
9620: 09 09 09 2f 2a 20 44 65 73 63 72 69 62 65 73 20  .../* Describes 
9630: 77 68 61 74 20 6a 75 73 74 20 68 61 70 70 65 6e  what just happen
9640: 65 64 2e 20 2a 2f 0a 7b 0a 20 20 20 20 72 65 67  ed. */.{.    reg
9650: 69 73 74 65 72 20 50 61 63 6b 65 72 20 2a 70 61  ister Packer *pa
9660: 63 6b 50 74 72 20 3d 20 28 50 61 63 6b 65 72 20  ckPtr = (Packer 
9670: 2a 29 20 63 6c 69 65 6e 74 44 61 74 61 3b 0a 20  *) clientData;. 
9680: 20 20 20 69 66 20 28 65 76 65 6e 74 50 74 72 2d     if (eventPtr-
9690: 3e 74 79 70 65 20 3d 3d 20 43 6f 6e 66 69 67 75  >type == Configu
96a0: 72 65 4e 6f 74 69 66 79 29 20 7b 0a 09 69 66 20  reNotify) {..if 
96b0: 28 28 70 61 63 6b 50 74 72 2d 3e 73 6c 61 76 65  ((packPtr->slave
96c0: 50 74 72 20 21 3d 20 4e 55 4c 4c 29 0a 09 09 26  Ptr != NULL)...&
96d0: 26 20 21 28 70 61 63 6b 50 74 72 2d 3e 66 6c 61  & !(packPtr->fla
96e0: 67 73 20 26 20 52 45 51 55 45 53 54 45 44 5f 52  gs & REQUESTED_R
96f0: 45 50 41 43 4b 29 29 20 7b 0a 09 20 20 20 20 70  EPACK)) {..    p
9700: 61 63 6b 50 74 72 2d 3e 66 6c 61 67 73 20 7c 3d  ackPtr->flags |=
9710: 20 52 45 51 55 45 53 54 45 44 5f 52 45 50 41 43   REQUESTED_REPAC
9720: 4b 3b 0a 09 20 20 20 20 54 63 6c 5f 44 6f 57 68  K;..    Tcl_DoWh
9730: 65 6e 49 64 6c 65 28 41 72 72 61 6e 67 65 50 61  enIdle(ArrangePa
9740: 63 6b 69 6e 67 2c 20 28 43 6c 69 65 6e 74 44 61  cking, (ClientDa
9750: 74 61 29 20 70 61 63 6b 50 74 72 29 3b 0a 09 7d  ta) packPtr);..}
9760: 0a 09 69 66 20 28 70 61 63 6b 50 74 72 2d 3e 64  ..if (packPtr->d
9770: 6f 75 62 6c 65 42 77 20 21 3d 20 32 2a 54 6b 5f  oubleBw != 2*Tk_
9780: 42 6f 72 64 65 72 57 69 64 74 68 28 70 61 63 6b  BorderWidth(pack
9790: 50 74 72 2d 3e 74 6b 77 69 6e 29 29 20 7b 0a 09  Ptr->tkwin)) {..
97a0: 20 20 20 20 69 66 20 28 28 70 61 63 6b 50 74 72      if ((packPtr
97b0: 2d 3e 6d 61 73 74 65 72 50 74 72 20 21 3d 20 4e  ->masterPtr != N
97c0: 55 4c 4c 29 0a 09 09 20 20 20 20 26 26 20 21 28  ULL)...    && !(
97d0: 70 61 63 6b 50 74 72 2d 3e 6d 61 73 74 65 72 50  packPtr->masterP
97e0: 74 72 2d 3e 66 6c 61 67 73 20 26 20 52 45 51 55  tr->flags & REQU
97f0: 45 53 54 45 44 5f 52 45 50 41 43 4b 29 29 20 7b  ESTED_REPACK)) {
9800: 0a 09 09 70 61 63 6b 50 74 72 2d 3e 64 6f 75 62  ...packPtr->doub
9810: 6c 65 42 77 20 3d 20 32 2a 54 6b 5f 42 6f 72 64  leBw = 2*Tk_Bord
9820: 65 72 57 69 64 74 68 28 70 61 63 6b 50 74 72 2d  erWidth(packPtr-
9830: 3e 74 6b 77 69 6e 29 3b 0a 09 09 70 61 63 6b 50  >tkwin);...packP
9840: 74 72 2d 3e 6d 61 73 74 65 72 50 74 72 2d 3e 66  tr->masterPtr->f
9850: 6c 61 67 73 20 7c 3d 20 52 45 51 55 45 53 54 45  lags |= REQUESTE
9860: 44 5f 52 45 50 41 43 4b 3b 0a 09 09 54 63 6c 5f  D_REPACK;...Tcl_
9870: 44 6f 57 68 65 6e 49 64 6c 65 28 41 72 72 61 6e  DoWhenIdle(Arran
9880: 67 65 50 61 63 6b 69 6e 67 2c 20 28 43 6c 69 65  gePacking, (Clie
9890: 6e 74 44 61 74 61 29 20 70 61 63 6b 50 74 72 2d  ntData) packPtr-
98a0: 3e 6d 61 73 74 65 72 50 74 72 29 3b 0a 09 20 20  >masterPtr);..  
98b0: 20 20 7d 0a 09 7d 0a 20 20 20 20 7d 20 65 6c 73    }..}.    } els
98c0: 65 20 69 66 20 28 65 76 65 6e 74 50 74 72 2d 3e  e if (eventPtr->
98d0: 74 79 70 65 20 3d 3d 20 44 65 73 74 72 6f 79 4e  type == DestroyN
98e0: 6f 74 69 66 79 29 20 7b 0a 09 72 65 67 69 73 74  otify) {..regist
98f0: 65 72 20 50 61 63 6b 65 72 20 2a 73 6c 61 76 65  er Packer *slave
9900: 50 74 72 2c 20 2a 6e 65 78 74 50 74 72 3b 0a 0a  Ptr, *nextPtr;..
9910: 09 69 66 20 28 70 61 63 6b 50 74 72 2d 3e 6d 61  .if (packPtr->ma
9920: 73 74 65 72 50 74 72 20 21 3d 20 4e 55 4c 4c 29  sterPtr != NULL)
9930: 20 7b 0a 09 20 20 20 20 55 6e 6c 69 6e 6b 28 70   {..    Unlink(p
9940: 61 63 6b 50 74 72 29 3b 0a 09 7d 0a 09 66 6f 72  ackPtr);..}..for
9950: 20 28 73 6c 61 76 65 50 74 72 20 3d 20 70 61 63   (slavePtr = pac
9960: 6b 50 74 72 2d 3e 73 6c 61 76 65 50 74 72 3b 20  kPtr->slavePtr; 
9970: 73 6c 61 76 65 50 74 72 20 21 3d 20 4e 55 4c 4c  slavePtr != NULL
9980: 3b 0a 09 09 73 6c 61 76 65 50 74 72 20 3d 20 6e  ;...slavePtr = n
9990: 65 78 74 50 74 72 29 20 7b 0a 09 20 20 20 20 54  extPtr) {..    T
99a0: 6b 5f 4d 61 6e 61 67 65 47 65 6f 6d 65 74 72 79  k_ManageGeometry
99b0: 28 73 6c 61 76 65 50 74 72 2d 3e 74 6b 77 69 6e  (slavePtr->tkwin
99c0: 2c 20 28 54 6b 5f 47 65 6f 6d 4d 67 72 20 2a 29  , (Tk_GeomMgr *)
99d0: 20 4e 55 4c 4c 2c 0a 09 09 20 20 20 20 28 43 6c   NULL,...    (Cl
99e0: 69 65 6e 74 44 61 74 61 29 20 4e 55 4c 4c 29 3b  ientData) NULL);
99f0: 0a 09 20 20 20 20 54 6b 5f 55 6e 6d 61 70 57 69  ..    Tk_UnmapWi
9a00: 6e 64 6f 77 28 73 6c 61 76 65 50 74 72 2d 3e 74  ndow(slavePtr->t
9a10: 6b 77 69 6e 29 3b 0a 09 20 20 20 20 73 6c 61 76  kwin);..    slav
9a20: 65 50 74 72 2d 3e 6d 61 73 74 65 72 50 74 72 20  ePtr->masterPtr 
9a30: 3d 20 4e 55 4c 4c 3b 0a 09 20 20 20 20 6e 65 78  = NULL;..    nex
9a40: 74 50 74 72 20 3d 20 73 6c 61 76 65 50 74 72 2d  tPtr = slavePtr-
9a50: 3e 6e 65 78 74 50 74 72 3b 0a 09 20 20 20 20 73  >nextPtr;..    s
9a60: 6c 61 76 65 50 74 72 2d 3e 6e 65 78 74 50 74 72  lavePtr->nextPtr
9a70: 20 3d 20 4e 55 4c 4c 3b 0a 09 7d 0a 09 54 63 6c   = NULL;..}..Tcl
9a80: 5f 44 65 6c 65 74 65 48 61 73 68 45 6e 74 72 79  _DeleteHashEntry
9a90: 28 54 63 6c 5f 46 69 6e 64 48 61 73 68 45 6e 74  (Tcl_FindHashEnt
9aa0: 72 79 28 26 70 61 63 6b 65 72 48 61 73 68 54 61  ry(&packerHashTa
9ab0: 62 6c 65 2c 0a 09 09 28 63 68 61 72 20 2a 29 20  ble,...(char *) 
9ac0: 70 61 63 6b 50 74 72 2d 3e 74 6b 77 69 6e 29 29  packPtr->tkwin))
9ad0: 3b 0a 09 69 66 20 28 70 61 63 6b 50 74 72 2d 3e  ;..if (packPtr->
9ae0: 66 6c 61 67 73 20 26 20 52 45 51 55 45 53 54 45  flags & REQUESTE
9af0: 44 5f 52 45 50 41 43 4b 29 20 7b 0a 09 20 20 20  D_REPACK) {..   
9b00: 20 54 63 6c 5f 43 61 6e 63 65 6c 49 64 6c 65 43   Tcl_CancelIdleC
9b10: 61 6c 6c 28 41 72 72 61 6e 67 65 50 61 63 6b 69  all(ArrangePacki
9b20: 6e 67 2c 20 28 43 6c 69 65 6e 74 44 61 74 61 29  ng, (ClientData)
9b30: 20 70 61 63 6b 50 74 72 29 3b 0a 09 7d 0a 09 70   packPtr);..}..p
9b40: 61 63 6b 50 74 72 2d 3e 74 6b 77 69 6e 20 3d 20  ackPtr->tkwin = 
9b50: 4e 55 4c 4c 3b 0a 09 54 6b 5f 45 76 65 6e 74 75  NULL;..Tk_Eventu
9b60: 61 6c 6c 79 46 72 65 65 28 28 43 6c 69 65 6e 74  allyFree((Client
9b70: 44 61 74 61 29 20 70 61 63 6b 50 74 72 2c 20 44  Data) packPtr, D
9b80: 65 73 74 72 6f 79 50 61 63 6b 65 72 29 3b 0a 20  estroyPacker);. 
9b90: 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 65 76     } else if (ev
9ba0: 65 6e 74 50 74 72 2d 3e 74 79 70 65 20 3d 3d 20  entPtr->type == 
9bb0: 4d 61 70 4e 6f 74 69 66 79 29 20 7b 0a 09 2f 2a  MapNotify) {../*
9bc0: 0a 09 20 2a 20 57 68 65 6e 20 61 20 6d 61 73 74  .. * When a mast
9bd0: 65 72 20 67 65 74 73 20 6d 61 70 70 65 64 2c 20  er gets mapped, 
9be0: 6d 75 73 74 20 72 65 64 6f 20 74 68 65 20 67 65  must redo the ge
9bf0: 6f 6d 65 74 72 79 20 63 6f 6d 70 75 74 61 74 69  ometry computati
9c00: 6f 6e 0a 09 20 2a 20 73 6f 20 74 68 61 74 20 61  on.. * so that a
9c10: 6c 6c 20 6f 66 20 69 74 73 20 73 6c 61 76 65 73  ll of its slaves
9c20: 20 67 65 74 20 72 65 6d 61 70 70 65 64 2e 0a 09   get remapped...
9c30: 20 2a 2f 0a 0a 09 69 66 20 28 28 70 61 63 6b 50   */...if ((packP
9c40: 74 72 2d 3e 73 6c 61 76 65 50 74 72 20 21 3d 20  tr->slavePtr != 
9c50: 4e 55 4c 4c 29 0a 09 09 26 26 20 21 28 70 61 63  NULL)...&& !(pac
9c60: 6b 50 74 72 2d 3e 66 6c 61 67 73 20 26 20 52 45  kPtr->flags & RE
9c70: 51 55 45 53 54 45 44 5f 52 45 50 41 43 4b 29 29  QUESTED_REPACK))
9c80: 20 7b 0a 09 20 20 20 20 70 61 63 6b 50 74 72 2d   {..    packPtr-
9c90: 3e 66 6c 61 67 73 20 7c 3d 20 52 45 51 55 45 53  >flags |= REQUES
9ca0: 54 45 44 5f 52 45 50 41 43 4b 3b 0a 09 20 20 20  TED_REPACK;..   
9cb0: 20 54 63 6c 5f 44 6f 57 68 65 6e 49 64 6c 65 28   Tcl_DoWhenIdle(
9cc0: 41 72 72 61 6e 67 65 50 61 63 6b 69 6e 67 2c 20  ArrangePacking, 
9cd0: 28 43 6c 69 65 6e 74 44 61 74 61 29 20 70 61 63  (ClientData) pac
9ce0: 6b 50 74 72 29 3b 0a 09 7d 0a 20 20 20 20 7d 20  kPtr);..}.    } 
9cf0: 65 6c 73 65 20 69 66 20 28 65 76 65 6e 74 50 74  else if (eventPt
9d00: 72 2d 3e 74 79 70 65 20 3d 3d 20 55 6e 6d 61 70  r->type == Unmap
9d10: 4e 6f 74 69 66 79 29 20 7b 0a 09 50 61 63 6b 65  Notify) {..Packe
9d20: 72 20 2a 70 61 63 6b 50 74 72 32 3b 0a 0a 09 2f  r *packPtr2;.../
9d30: 2a 0a 09 20 2a 20 55 6e 6d 61 70 20 61 6c 6c 20  *.. * Unmap all 
9d40: 6f 66 20 74 68 65 20 73 6c 61 76 65 73 20 77 68  of the slaves wh
9d50: 65 6e 20 74 68 65 20 6d 61 73 74 65 72 20 67 65  en the master ge
9d60: 74 73 20 75 6e 6d 61 70 70 65 64 2c 0a 09 20 2a  ts unmapped,.. *
9d70: 20 73 6f 20 74 68 61 74 20 74 68 65 79 20 64 6f   so that they do
9d80: 6e 27 74 20 62 6f 74 68 65 72 20 74 6f 20 6b 65  n't bother to ke
9d90: 65 70 20 72 65 64 69 73 70 6c 61 79 69 6e 67 0a  ep redisplaying.
9da0: 09 20 2a 20 74 68 65 6d 73 65 6c 76 65 73 2e 0a  . * themselves..
9db0: 09 20 2a 2f 0a 0a 09 66 6f 72 20 28 70 61 63 6b  . */...for (pack
9dc0: 50 74 72 32 20 3d 20 70 61 63 6b 50 74 72 2d 3e  Ptr2 = packPtr->
9dd0: 73 6c 61 76 65 50 74 72 3b 20 70 61 63 6b 50 74  slavePtr; packPt
9de0: 72 32 20 21 3d 20 4e 55 4c 4c 3b 0a 09 09 70 61  r2 != NULL;...pa
9df0: 63 6b 50 74 72 32 20 3d 20 70 61 63 6b 50 74 72  ckPtr2 = packPtr
9e00: 32 2d 3e 6e 65 78 74 50 74 72 29 20 7b 0a 09 20  2->nextPtr) {.. 
9e10: 20 20 20 54 6b 5f 55 6e 6d 61 70 57 69 6e 64 6f     Tk_UnmapWindo
9e20: 77 28 70 61 63 6b 50 74 72 32 2d 3e 74 6b 77 69  w(packPtr2->tkwi
9e30: 6e 29 3b 0a 09 7d 0a 20 20 20 20 7d 0a 7d 0a 0c  n);..}.    }.}..
9e40: 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ./*. *----------
9e50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9e60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9e70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9e80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a  ------------. *.
9e90: 20 2a 20 43 6f 6e 66 69 67 75 72 65 53 6c 61 76   * ConfigureSlav
9ea0: 65 73 20 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69 73  es --. *. *.This
9eb0: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20   implements the 
9ec0: 67 75 74 73 20 6f 66 20 74 68 65 20 22 70 61 63  guts of the "pac
9ed0: 6b 20 63 6f 6e 66 69 67 75 72 65 22 20 63 6f 6d  k configure" com
9ee0: 6d 61 6e 64 2e 20 20 47 69 76 65 6e 0a 20 2a 09  mand.  Given. *.
9ef0: 61 20 6c 69 73 74 20 6f 66 20 73 6c 61 76 65 73  a list of slaves
9f00: 20 61 6e 64 20 63 6f 6e 66 69 67 75 72 61 74 69   and configurati
9f10: 6f 6e 20 6f 70 74 69 6f 6e 73 2c 20 69 74 20 61  on options, it a
9f20: 72 72 61 6e 67 65 73 20 66 6f 72 20 74 68 65 0a  rranges for the.
9f30: 20 2a 09 70 61 63 6b 65 72 20 74 6f 20 6d 61 6e   *.packer to man
9f40: 61 67 65 20 74 68 65 20 73 6c 61 76 65 73 20 61  age the slaves a
9f50: 6e 64 20 73 65 74 73 20 74 68 65 20 73 70 65 63  nd sets the spec
9f60: 69 66 69 65 64 20 6f 70 74 69 6f 6e 73 2e 0a 20  ified options.. 
9f70: 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a  *. * Results:. *
9f80: 09 54 43 4c 5f 4f 4b 20 69 73 20 72 65 74 75 72  .TCL_OK is retur
9f90: 6e 65 64 20 69 66 20 61 6c 6c 20 77 65 6e 74 20  ned if all went 
9fa0: 77 65 6c 6c 2e 20 20 4f 74 68 65 72 77 69 73 65  well.  Otherwise
9fb0: 2c 20 54 43 4c 5f 45 52 52 4f 52 20 69 73 0a 20  , TCL_ERROR is. 
9fc0: 2a 09 72 65 74 75 72 6e 65 64 20 61 6e 64 20 69  *.returned and i
9fd0: 6e 74 65 72 70 2d 3e 72 65 73 75 6c 74 20 69 73  nterp->result is
9fe0: 20 73 65 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20   set to contain 
9ff0: 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
a000: 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20 65 66 66  .. *. * Side eff
a010: 65 63 74 73 3a 0a 20 2a 09 53 6c 61 76 65 20 77  ects:. *.Slave w
a020: 69 6e 64 6f 77 73 20 67 65 74 20 74 61 6b 65 6e  indows get taken
a030: 20 6f 76 65 72 20 62 79 20 74 68 65 20 70 61 63   over by the pac
a040: 6b 65 72 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d  ker.. *. *------
a050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a060: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a070: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a080: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a090: 0a 20 2a 2f 0a 0a 73 74 61 74 69 63 20 69 6e 74  . */..static int
a0a0: 0a 43 6f 6e 66 69 67 75 72 65 53 6c 61 76 65 73  .ConfigureSlaves
a0b0: 28 69 6e 74 65 72 70 2c 20 74 6b 77 69 6e 2c 20  (interp, tkwin, 
a0c0: 61 72 67 63 2c 20 61 72 67 76 29 0a 20 20 20 20  argc, argv).    
a0d0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
a0e0: 72 70 3b 09 09 2f 2a 20 49 6e 74 65 72 70 72 65  rp;../* Interpre
a0f0: 74 65 72 20 66 6f 72 20 65 72 72 6f 72 20 72 65  ter for error re
a100: 70 6f 72 74 69 6e 67 2e 20 2a 2f 0a 20 20 20 20  porting. */.    
a110: 54 6b 5f 57 69 6e 64 6f 77 20 74 6b 77 69 6e 3b  Tk_Window tkwin;
a120: 09 09 2f 2a 20 41 6e 79 20 77 69 6e 64 6f 77 20  ../* Any window 
a130: 69 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 63  in application c
a140: 6f 6e 74 61 69 6e 69 6e 67 0a 09 09 09 09 20 2a  ontaining..... *
a150: 20 73 6c 61 76 65 73 2e 20 20 55 73 65 64 20 74   slaves.  Used t
a160: 6f 20 6c 6f 6f 6b 20 75 70 20 73 6c 61 76 65 20  o look up slave 
a170: 6e 61 6d 65 73 2e 20 2a 2f 0a 20 20 20 20 69 6e  names. */.    in
a180: 74 20 61 72 67 63 3b 09 09 09 2f 2a 20 4e 75 6d  t argc;.../* Num
a190: 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20  ber of elements 
a1a0: 69 6e 20 61 72 67 76 2e 20 2a 2f 0a 20 20 20 20  in argv. */.    
a1b0: 63 68 61 72 20 2a 61 72 67 76 5b 5d 3b 09 09 2f  char *argv[];../
a1c0: 2a 20 41 72 67 75 6d 65 6e 74 20 73 74 72 69 6e  * Argument strin
a1d0: 67 73 3a 20 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  gs:  contains on
a1e0: 65 20 6f 72 20 6d 6f 72 65 0a 09 09 09 09 20 2a  e or more..... *
a1f0: 20 77 69 6e 64 6f 77 20 6e 61 6d 65 73 20 66 6f   window names fo
a200: 6c 6c 6f 77 65 64 20 62 79 20 61 6e 79 20 6e 75  llowed by any nu
a210: 6d 62 65 72 0a 09 09 09 09 20 2a 20 6f 66 20 22  mber..... * of "
a220: 6f 70 74 69 6f 6e 20 76 61 6c 75 65 22 20 70 61  option value" pa
a230: 69 72 73 2e 20 20 43 61 6c 6c 65 72 20 6d 75 73  irs.  Caller mus
a240: 74 0a 09 09 09 09 20 2a 20 6d 61 6b 65 20 73 75  t..... * make su
a250: 72 65 20 74 68 61 74 20 74 68 65 72 65 20 69 73  re that there is
a260: 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 0a 09 09   at least one...
a270: 09 09 20 2a 20 77 69 6e 64 6f 77 20 6e 61 6d 65  .. * window name
a280: 2e 20 2a 2f 0a 7b 0a 20 20 20 20 50 61 63 6b 65  . */.{.    Packe
a290: 72 20 2a 6d 61 73 74 65 72 50 74 72 2c 20 2a 73  r *masterPtr, *s
a2a0: 6c 61 76 65 50 74 72 2c 20 2a 70 72 65 76 50 74  lavePtr, *prevPt
a2b0: 72 2c 20 2a 6f 74 68 65 72 50 74 72 3b 0a 20 20  r, *otherPtr;.  
a2c0: 20 20 54 6b 5f 57 69 6e 64 6f 77 20 6f 74 68 65    Tk_Window othe
a2d0: 72 2c 20 73 6c 61 76 65 2c 20 70 61 72 65 6e 74  r, slave, parent
a2e0: 2c 20 61 6e 63 65 73 74 6f 72 3b 0a 20 20 20 20  , ancestor;.    
a2f0: 69 6e 74 20 69 2c 20 6a 2c 20 6e 75 6d 57 69 6e  int i, j, numWin
a300: 64 6f 77 73 2c 20 63 2c 20 74 6d 70 2c 20 70 6f  dows, c, tmp, po
a310: 73 69 74 69 6f 6e 47 69 76 65 6e 3b 0a 20 20 20  sitionGiven;.   
a320: 20 73 69 7a 65 5f 74 20 6c 65 6e 67 74 68 3b 0a   size_t length;.
a330: 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20 46  .    /*.     * F
a340: 69 6e 64 20 6f 75 74 20 68 6f 77 20 6d 61 6e 79  ind out how many
a350: 20 77 69 6e 64 6f 77 73 20 61 72 65 20 73 70 65   windows are spe
a360: 63 69 66 69 65 64 2e 0a 20 20 20 20 20 2a 2f 0a  cified..     */.
a370: 0a 20 20 20 20 66 6f 72 20 28 6e 75 6d 57 69 6e  .    for (numWin
a380: 64 6f 77 73 20 3d 20 30 3b 20 6e 75 6d 57 69 6e  dows = 0; numWin
a390: 64 6f 77 73 20 3c 20 61 72 67 63 3b 20 6e 75 6d  dows < argc; num
a3a0: 57 69 6e 64 6f 77 73 2b 2b 29 20 7b 0a 09 69 66  Windows++) {..if
a3b0: 20 28 61 72 67 76 5b 6e 75 6d 57 69 6e 64 6f 77   (argv[numWindow
a3c0: 73 5d 5b 30 5d 20 21 3d 20 27 2e 27 29 20 7b 0a  s][0] != '.') {.
a3d0: 09 20 20 20 20 62 72 65 61 6b 3b 0a 09 7d 0a 20  .    break;..}. 
a3e0: 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 20     }..    /*.   
a3f0: 20 20 2a 20 49 74 65 72 61 74 65 20 6f 76 65 72    * Iterate over
a400: 20 61 6c 6c 20 6f 66 20 74 68 65 20 73 6c 61 76   all of the slav
a410: 65 20 77 69 6e 64 6f 77 73 2c 20 70 61 72 73 69  e windows, parsi
a420: 6e 67 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61  ng the configura
a430: 74 69 6f 6e 0a 20 20 20 20 20 2a 20 6f 70 74 69  tion.     * opti
a440: 6f 6e 73 20 66 6f 72 20 65 61 63 68 20 73 6c 61  ons for each sla
a450: 76 65 2e 20 20 49 74 27 73 20 61 20 62 69 74 20  ve.  It's a bit 
a460: 77 61 73 74 65 66 75 6c 20 74 6f 20 72 65 2d 70  wasteful to re-p
a470: 61 72 73 65 20 74 68 65 0a 20 20 20 20 20 2a 20  arse the.     * 
a480: 6f 70 74 69 6f 6e 73 20 66 6f 72 20 65 61 63 68  options for each
a490: 20 73 6c 61 76 65 2c 20 62 75 74 20 74 68 69 6e   slave, but thin
a4a0: 67 73 20 67 65 74 20 74 6f 6f 20 6d 65 73 73 79  gs get too messy
a4b0: 20 69 66 20 77 65 20 74 72 79 20 74 6f 0a 20 20   if we try to.  
a4c0: 20 20 20 2a 20 70 61 72 73 65 20 74 68 65 20 61     * parse the a
a4d0: 72 67 75 6d 65 6e 74 73 20 6a 75 73 74 20 6f 6e  rguments just on
a4e0: 63 65 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e  ce at the beginn
a4f0: 69 6e 67 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  ing.  For exampl
a500: 65 2c 0a 20 20 20 20 20 2a 20 69 66 20 61 20 73  e,.     * if a s
a510: 6c 61 76 65 20 61 6c 72 65 61 64 79 20 69 73 20  lave already is 
a520: 70 61 63 6b 65 64 20 77 65 20 77 61 6e 74 20 74  packed we want t
a530: 6f 20 6a 75 73 74 20 63 68 61 6e 67 65 20 61 20  o just change a 
a540: 66 65 77 0a 20 20 20 20 20 2a 20 65 78 69 73 74  few.     * exist
a550: 69 6e 67 20 76 61 6c 75 65 73 20 77 69 74 68 6f  ing values witho
a560: 75 74 20 72 65 73 65 74 74 69 6e 67 20 65 76 65  ut resetting eve
a570: 72 79 74 68 69 6e 67 2e 20 20 49 66 20 74 68 65  rything.  If the
a580: 72 65 20 61 72 65 0a 20 20 20 20 20 2a 20 6d 75  re are.     * mu
a590: 6c 74 69 70 6c 65 20 77 69 6e 64 6f 77 73 2c 20  ltiple windows, 
a5a0: 74 68 65 20 2d 61 66 74 65 72 2c 20 2d 62 65 66  the -after, -bef
a5b0: 6f 72 65 2c 20 61 6e 64 20 2d 69 6e 20 6f 70 74  ore, and -in opt
a5c0: 69 6f 6e 73 20 6f 6e 6c 79 0a 20 20 20 20 20 2a  ions only.     *
a5d0: 20 67 65 74 20 70 72 6f 63 65 73 73 65 64 20 66   get processed f
a5e0: 6f 72 20 74 68 65 20 66 69 72 73 74 20 77 69 6e  or the first win
a5f0: 64 6f 77 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20 20  dow..     */..  
a600: 20 20 6d 61 73 74 65 72 50 74 72 20 3d 20 4e 55    masterPtr = NU
a610: 4c 4c 3b 0a 20 20 20 20 70 72 65 76 50 74 72 20  LL;.    prevPtr 
a620: 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 70 6f 73 69  = NULL;.    posi
a630: 74 69 6f 6e 47 69 76 65 6e 20 3d 20 30 3b 0a 20  tionGiven = 0;. 
a640: 20 20 20 66 6f 72 20 28 6a 20 3d 20 30 3b 20 6a     for (j = 0; j
a650: 20 3c 20 6e 75 6d 57 69 6e 64 6f 77 73 3b 20 6a   < numWindows; j
a660: 2b 2b 29 20 7b 0a 09 73 6c 61 76 65 20 3d 20 54  ++) {..slave = T
a670: 6b 5f 4e 61 6d 65 54 6f 57 69 6e 64 6f 77 28 69  k_NameToWindow(i
a680: 6e 74 65 72 70 2c 20 61 72 67 76 5b 6a 5d 2c 20  nterp, argv[j], 
a690: 74 6b 77 69 6e 29 3b 0a 09 69 66 20 28 73 6c 61  tkwin);..if (sla
a6a0: 76 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 20  ve == NULL) {.. 
a6b0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
a6c0: 52 4f 52 3b 0a 09 7d 0a 09 69 66 20 28 54 6b 5f  ROR;..}..if (Tk_
a6d0: 49 73 54 6f 70 4c 65 76 65 6c 28 73 6c 61 76 65  IsTopLevel(slave
a6e0: 29 29 20 7b 0a 09 20 20 20 20 54 63 6c 5f 41 70  )) {..    Tcl_Ap
a6f0: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
a700: 70 2c 20 22 63 61 6e 27 74 20 70 61 63 6b 20 5c  p, "can't pack \
a710: 22 22 2c 20 61 72 67 76 5b 6a 5d 2c 0a 09 09 20  "", argv[j],... 
a720: 20 20 20 22 5c 22 3a 20 69 74 27 73 20 61 20 74     "\": it's a t
a730: 6f 70 2d 6c 65 76 65 6c 20 77 69 6e 64 6f 77 22  op-level window"
a740: 2c 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29  , (char *) NULL)
a750: 3b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54 43  ;..    return TC
a760: 4c 5f 45 52 52 4f 52 3b 0a 09 7d 0a 09 73 6c 61  L_ERROR;..}..sla
a770: 76 65 50 74 72 20 3d 20 47 65 74 50 61 63 6b 65  vePtr = GetPacke
a780: 72 28 73 6c 61 76 65 29 3b 0a 09 73 6c 61 76 65  r(slave);..slave
a790: 50 74 72 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4f  Ptr->flags &= ~O
a7a0: 4c 44 5f 53 54 59 4c 45 3b 0a 0a 09 2f 2a 0a 09  LD_STYLE;.../*..
a7b0: 20 2a 20 49 66 20 74 68 65 20 73 6c 61 76 65 20   * If the slave 
a7c0: 69 73 6e 27 74 20 63 75 72 72 65 6e 74 6c 79 20  isn't currently 
a7d0: 70 61 63 6b 65 64 2c 20 72 65 73 65 74 20 61 6c  packed, reset al
a7e0: 6c 20 6f 66 20 69 74 73 0a 09 20 2a 20 63 6f 6e  l of its.. * con
a7f0: 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72  figuration infor
a800: 6d 61 74 69 6f 6e 20 74 6f 20 64 65 66 61 75 6c  mation to defaul
a810: 74 20 76 61 6c 75 65 73 20 28 74 68 65 72 65 20  t values (there 
a820: 63 6f 75 6c 64 0a 09 20 2a 20 62 65 20 6f 6c 64  could.. * be old
a830: 20 76 61 6c 75 65 73 20 6c 65 66 74 20 66 72 6f   values left fro
a840: 6d 20 61 20 70 72 65 76 69 6f 75 73 20 70 61 63  m a previous pac
a850: 6b 69 6e 67 29 2e 0a 09 20 2a 2f 0a 0a 09 69 66  king)... */...if
a860: 20 28 73 6c 61 76 65 50 74 72 2d 3e 6d 61 73 74   (slavePtr->mast
a870: 65 72 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 20 7b  erPtr == NULL) {
a880: 0a 09 20 20 20 20 73 6c 61 76 65 50 74 72 2d 3e  ..    slavePtr->
a890: 73 69 64 65 20 3d 20 54 4f 50 3b 0a 09 20 20 20  side = TOP;..   
a8a0: 20 73 6c 61 76 65 50 74 72 2d 3e 61 6e 63 68 6f   slavePtr->ancho
a8b0: 72 20 3d 20 54 4b 5f 41 4e 43 48 4f 52 5f 43 45  r = TK_ANCHOR_CE
a8c0: 4e 54 45 52 3b 0a 09 20 20 20 20 73 6c 61 76 65  NTER;..    slave
a8d0: 50 74 72 2d 3e 70 61 64 58 20 3d 20 31 3b 0a 09  Ptr->padX = 1;..
a8e0: 20 20 20 20 73 6c 61 76 65 50 74 72 2d 3e 70 61      slavePtr->pa
a8f0: 64 59 20 3d 20 30 3b 0a 09 20 20 20 20 73 6c 61  dY = 0;..    sla
a900: 76 65 50 74 72 2d 3e 69 50 61 64 58 20 3d 20 73  vePtr->iPadX = s
a910: 6c 61 76 65 50 74 72 2d 3e 69 50 61 64 59 20 3d  lavePtr->iPadY =
a920: 20 30 3b 0a 09 20 20 20 20 73 6c 61 76 65 50 74   0;..    slavePt
a930: 72 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 46 49  r->flags &= ~(FI
a940: 4c 4c 58 7c 46 49 4c 4c 59 7c 45 58 50 41 4e 44  LLX|FILLY|EXPAND
a950: 29 3b 0a 09 7d 0a 0a 09 66 6f 72 20 28 69 20 3d  );..}...for (i =
a960: 20 6e 75 6d 57 69 6e 64 6f 77 73 3b 20 69 20 3c   numWindows; i <
a970: 20 61 72 67 63 3b 20 69 2b 3d 32 29 20 7b 0a 09   argc; i+=2) {..
a980: 20 20 20 20 69 66 20 28 28 69 2b 32 29 20 3e 20      if ((i+2) > 
a990: 61 72 67 63 29 20 7b 0a 09 09 54 63 6c 5f 41 70  argc) {...Tcl_Ap
a9a0: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
a9b0: 70 2c 20 22 65 78 74 72 61 20 6f 70 74 69 6f 6e  p, "extra option
a9c0: 20 5c 22 22 2c 20 61 72 67 76 5b 69 5d 2c 0a 09   \"", argv[i],..
a9d0: 09 09 22 5c 22 20 28 6f 70 74 69 6f 6e 20 77 69  .."\" (option wi
a9e0: 74 68 20 6e 6f 20 76 61 6c 75 65 3f 29 22 2c 20  th no value?)", 
a9f0: 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a  (char *) NULL);.
aa00: 09 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ..return TCL_ERR
aa10: 4f 52 3b 0a 09 20 20 20 20 7d 0a 09 20 20 20 20  OR;..    }..    
aa20: 6c 65 6e 67 74 68 20 3d 20 73 74 72 6c 65 6e 28  length = strlen(
aa30: 61 72 67 76 5b 69 5d 29 3b 0a 09 20 20 20 20 69  argv[i]);..    i
aa40: 66 20 28 6c 65 6e 67 74 68 20 3c 20 32 29 20 7b  f (length < 2) {
aa50: 0a 09 09 67 6f 74 6f 20 62 61 64 4f 70 74 69 6f  ...goto badOptio
aa60: 6e 3b 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 63  n;..    }..    c
aa70: 20 3d 20 61 72 67 76 5b 69 5d 5b 31 5d 3b 0a 09   = argv[i][1];..
aa80: 20 20 20 20 69 66 20 28 28 63 20 3d 3d 20 27 61      if ((c == 'a
aa90: 27 29 20 26 26 20 28 73 74 72 6e 63 6d 70 28 61  ') && (strncmp(a
aaa0: 72 67 76 5b 69 5d 2c 20 22 2d 61 66 74 65 72 22  rgv[i], "-after"
aab0: 2c 20 6c 65 6e 67 74 68 29 20 3d 3d 20 30 29 0a  , length) == 0).
aac0: 09 09 20 20 20 20 26 26 20 28 6c 65 6e 67 74 68  ..    && (length
aad0: 20 3e 3d 20 32 29 29 20 7b 0a 09 09 69 66 20 28   >= 2)) {...if (
aae0: 6a 20 3d 3d 20 30 29 20 7b 0a 09 09 20 20 20 20  j == 0) {...    
aaf0: 6f 74 68 65 72 20 3d 20 54 6b 5f 4e 61 6d 65 54  other = Tk_NameT
ab00: 6f 57 69 6e 64 6f 77 28 69 6e 74 65 72 70 2c 20  oWindow(interp, 
ab10: 61 72 67 76 5b 69 2b 31 5d 2c 20 74 6b 77 69 6e  argv[i+1], tkwin
ab20: 29 3b 0a 09 09 20 20 20 20 69 66 20 28 6f 74 68  );...    if (oth
ab30: 65 72 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09  er == NULL) {...
ab40: 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f  .return TCL_ERRO
ab50: 52 3b 0a 09 09 20 20 20 20 7d 0a 09 09 20 20 20  R;...    }...   
ab60: 20 70 72 65 76 50 74 72 20 3d 20 47 65 74 50 61   prevPtr = GetPa
ab70: 63 6b 65 72 28 6f 74 68 65 72 29 3b 0a 09 09 20  cker(other);... 
ab80: 20 20 20 69 66 20 28 70 72 65 76 50 74 72 2d 3e     if (prevPtr->
ab90: 6d 61 73 74 65 72 50 74 72 20 3d 3d 20 4e 55 4c  masterPtr == NUL
aba0: 4c 29 20 7b 0a 09 09 09 6e 6f 74 50 61 63 6b 65  L) {....notPacke
abb0: 64 3a 0a 09 09 09 54 63 6c 5f 41 70 70 65 6e 64  d:....Tcl_Append
abc0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
abd0: 77 69 6e 64 6f 77 20 5c 22 22 2c 20 61 72 67 76  window \"", argv
abe0: 5b 69 2b 31 5d 2c 0a 09 09 09 09 22 5c 22 20 69  [i+1],....."\" i
abf0: 73 6e 27 74 20 70 61 63 6b 65 64 22 2c 20 28 63  sn't packed", (c
ac00: 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09 09  har *) NULL);...
ac10: 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f  .return TCL_ERRO
ac20: 52 3b 0a 09 09 20 20 20 20 7d 0a 09 09 20 20 20  R;...    }...   
ac30: 20 6d 61 73 74 65 72 50 74 72 20 3d 20 70 72 65   masterPtr = pre
ac40: 76 50 74 72 2d 3e 6d 61 73 74 65 72 50 74 72 3b  vPtr->masterPtr;
ac50: 0a 09 09 20 20 20 20 70 6f 73 69 74 69 6f 6e 47  ...    positionG
ac60: 69 76 65 6e 20 3d 20 31 3b 0a 09 09 7d 0a 09 20  iven = 1;...}.. 
ac70: 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 28 63     } else if ((c
ac80: 20 3d 3d 20 27 61 27 29 20 26 26 20 28 73 74 72   == 'a') && (str
ac90: 6e 63 6d 70 28 61 72 67 76 5b 69 5d 2c 20 22 2d  ncmp(argv[i], "-
aca0: 61 6e 63 68 6f 72 22 2c 20 6c 65 6e 67 74 68 29  anchor", length)
acb0: 20 3d 3d 20 30 29 0a 09 09 20 20 20 20 26 26 20   == 0)...    && 
acc0: 28 6c 65 6e 67 74 68 20 3e 3d 20 32 29 29 20 7b  (length >= 2)) {
acd0: 0a 09 09 69 66 20 28 54 6b 5f 47 65 74 41 6e 63  ...if (Tk_GetAnc
ace0: 68 6f 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76  hor(interp, argv
acf0: 5b 69 2b 31 5d 2c 20 26 73 6c 61 76 65 50 74 72  [i+1], &slavePtr
ad00: 2d 3e 61 6e 63 68 6f 72 29 0a 09 09 09 21 3d 20  ->anchor)....!= 
ad10: 54 43 4c 5f 4f 4b 29 20 7b 0a 09 09 20 20 20 20  TCL_OK) {...    
ad20: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
ad30: 3b 0a 09 09 7d 0a 09 20 20 20 20 7d 20 65 6c 73  ;...}..    } els
ad40: 65 20 69 66 20 28 28 63 20 3d 3d 20 27 62 27 29  e if ((c == 'b')
ad50: 0a 09 09 20 20 20 20 26 26 20 28 73 74 72 6e 63  ...    && (strnc
ad60: 6d 70 28 61 72 67 76 5b 69 5d 2c 20 22 2d 62 65  mp(argv[i], "-be
ad70: 66 6f 72 65 22 2c 20 6c 65 6e 67 74 68 29 20 3d  fore", length) =
ad80: 3d 20 30 29 29 20 7b 0a 09 09 69 66 20 28 6a 20  = 0)) {...if (j 
ad90: 3d 3d 20 30 29 20 7b 0a 09 09 20 20 20 20 6f 74  == 0) {...    ot
ada0: 68 65 72 20 3d 20 54 6b 5f 4e 61 6d 65 54 6f 57  her = Tk_NameToW
adb0: 69 6e 64 6f 77 28 69 6e 74 65 72 70 2c 20 61 72  indow(interp, ar
adc0: 67 76 5b 69 2b 31 5d 2c 20 74 6b 77 69 6e 29 3b  gv[i+1], tkwin);
add0: 0a 09 09 20 20 20 20 69 66 20 28 6f 74 68 65 72  ...    if (other
ade0: 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 72   == NULL) {....r
adf0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
ae00: 0a 09 09 20 20 20 20 7d 0a 09 09 20 20 20 20 6f  ...    }...    o
ae10: 74 68 65 72 50 74 72 20 3d 20 47 65 74 50 61 63  therPtr = GetPac
ae20: 6b 65 72 28 6f 74 68 65 72 29 3b 0a 09 09 20 20  ker(other);...  
ae30: 20 20 69 66 20 28 6f 74 68 65 72 50 74 72 2d 3e    if (otherPtr->
ae40: 6d 61 73 74 65 72 50 74 72 20 3d 3d 20 4e 55 4c  masterPtr == NUL
ae50: 4c 29 20 7b 0a 09 09 09 67 6f 74 6f 20 6e 6f 74  L) {....goto not
ae60: 50 61 63 6b 65 64 3b 0a 09 09 20 20 20 20 7d 0a  Packed;...    }.
ae70: 09 09 20 20 20 20 6d 61 73 74 65 72 50 74 72 20  ..    masterPtr 
ae80: 3d 20 6f 74 68 65 72 50 74 72 2d 3e 6d 61 73 74  = otherPtr->mast
ae90: 65 72 50 74 72 3b 0a 09 09 20 20 20 20 70 72 65  erPtr;...    pre
aea0: 76 50 74 72 20 3d 20 6d 61 73 74 65 72 50 74 72  vPtr = masterPtr
aeb0: 2d 3e 73 6c 61 76 65 50 74 72 3b 0a 09 09 20 20  ->slavePtr;...  
aec0: 20 20 69 66 20 28 70 72 65 76 50 74 72 20 3d 3d    if (prevPtr ==
aed0: 20 6f 74 68 65 72 50 74 72 29 20 7b 0a 09 09 09   otherPtr) {....
aee0: 70 72 65 76 50 74 72 20 3d 20 4e 55 4c 4c 3b 0a  prevPtr = NULL;.
aef0: 09 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09  ..    } else {..
af00: 09 09 77 68 69 6c 65 20 28 70 72 65 76 50 74 72  ..while (prevPtr
af10: 2d 3e 6e 65 78 74 50 74 72 20 21 3d 20 6f 74 68  ->nextPtr != oth
af20: 65 72 50 74 72 29 20 7b 0a 09 09 09 20 20 20 20  erPtr) {....    
af30: 70 72 65 76 50 74 72 20 3d 20 70 72 65 76 50 74  prevPtr = prevPt
af40: 72 2d 3e 6e 65 78 74 50 74 72 3b 0a 09 09 09 7d  r->nextPtr;....}
af50: 0a 09 09 20 20 20 20 7d 0a 09 09 20 20 20 20 70  ...    }...    p
af60: 6f 73 69 74 69 6f 6e 47 69 76 65 6e 20 3d 20 31  ositionGiven = 1
af70: 3b 0a 09 09 7d 0a 09 20 20 20 20 7d 20 65 6c 73  ;...}..    } els
af80: 65 20 69 66 20 28 28 63 20 3d 3d 20 27 65 27 29  e if ((c == 'e')
af90: 0a 09 09 20 20 20 20 26 26 20 28 73 74 72 6e 63  ...    && (strnc
afa0: 6d 70 28 61 72 67 76 5b 69 5d 2c 20 22 2d 65 78  mp(argv[i], "-ex
afb0: 70 61 6e 64 22 2c 20 6c 65 6e 67 74 68 29 20 3d  pand", length) =
afc0: 3d 20 30 29 29 20 7b 0a 09 09 69 66 20 28 54 63  = 0)) {...if (Tc
afd0: 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 28 69 6e 74  l_GetBoolean(int
afe0: 65 72 70 2c 20 61 72 67 76 5b 69 2b 31 5d 2c 20  erp, argv[i+1], 
aff0: 26 74 6d 70 29 20 21 3d 20 54 43 4c 5f 4f 4b 29  &tmp) != TCL_OK)
b000: 20 7b 0a 09 09 20 20 20 20 72 65 74 75 72 6e 20   {...    return 
b010: 54 43 4c 5f 45 52 52 4f 52 3b 0a 09 09 7d 0a 09  TCL_ERROR;...}..
b020: 09 73 6c 61 76 65 50 74 72 2d 3e 66 6c 61 67 73  .slavePtr->flags
b030: 20 26 3d 20 7e 45 58 50 41 4e 44 3b 0a 09 09 69   &= ~EXPAND;...i
b040: 66 20 28 74 6d 70 29 20 7b 0a 09 09 20 20 20 20  f (tmp) {...    
b050: 73 6c 61 76 65 50 74 72 2d 3e 66 6c 61 67 73 20  slavePtr->flags 
b060: 7c 3d 20 45 58 50 41 4e 44 3b 0a 09 09 7d 0a 09  |= EXPAND;...}..
b070: 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 28      } else if ((
b080: 63 20 3d 3d 20 27 66 27 29 20 26 26 20 28 73 74  c == 'f') && (st
b090: 72 6e 63 6d 70 28 61 72 67 76 5b 69 5d 2c 20 22  rncmp(argv[i], "
b0a0: 2d 66 69 6c 6c 22 2c 20 6c 65 6e 67 74 68 29 20  -fill", length) 
b0b0: 3d 3d 20 30 29 29 20 7b 0a 09 09 69 66 20 28 73  == 0)) {...if (s
b0c0: 74 72 63 6d 70 28 61 72 67 76 5b 69 2b 31 5d 2c  trcmp(argv[i+1],
b0d0: 20 22 6e 6f 6e 65 22 29 20 3d 3d 20 30 29 20 7b   "none") == 0) {
b0e0: 0a 09 09 20 20 20 20 73 6c 61 76 65 50 74 72 2d  ...    slavePtr-
b0f0: 3e 66 6c 61 67 73 20 26 3d 20 7e 28 46 49 4c 4c  >flags &= ~(FILL
b100: 58 7c 46 49 4c 4c 59 29 3b 0a 09 09 7d 20 65 6c  X|FILLY);...} el
b110: 73 65 20 69 66 20 28 73 74 72 63 6d 70 28 61 72  se if (strcmp(ar
b120: 67 76 5b 69 2b 31 5d 2c 20 22 78 22 29 20 3d 3d  gv[i+1], "x") ==
b130: 20 30 29 20 7b 0a 09 09 20 20 20 20 73 6c 61 76   0) {...    slav
b140: 65 50 74 72 2d 3e 66 6c 61 67 73 20 3d 20 28 73  ePtr->flags = (s
b150: 6c 61 76 65 50 74 72 2d 3e 66 6c 61 67 73 20 26  lavePtr->flags &
b160: 20 7e 46 49 4c 4c 59 29 20 7c 20 46 49 4c 4c 58   ~FILLY) | FILLX
b170: 3b 0a 09 09 7d 20 65 6c 73 65 20 69 66 20 28 73  ;...} else if (s
b180: 74 72 63 6d 70 28 61 72 67 76 5b 69 2b 31 5d 2c  trcmp(argv[i+1],
b190: 20 22 79 22 29 20 3d 3d 20 30 29 20 7b 0a 09 09   "y") == 0) {...
b1a0: 20 20 20 20 73 6c 61 76 65 50 74 72 2d 3e 66 6c      slavePtr->fl
b1b0: 61 67 73 20 3d 20 28 73 6c 61 76 65 50 74 72 2d  ags = (slavePtr-
b1c0: 3e 66 6c 61 67 73 20 26 20 7e 46 49 4c 4c 58 29  >flags & ~FILLX)
b1d0: 20 7c 20 46 49 4c 4c 59 3b 0a 09 09 7d 20 65 6c   | FILLY;...} el
b1e0: 73 65 20 69 66 20 28 73 74 72 63 6d 70 28 61 72  se if (strcmp(ar
b1f0: 67 76 5b 69 2b 31 5d 2c 20 22 62 6f 74 68 22 29  gv[i+1], "both")
b200: 20 3d 3d 20 30 29 20 7b 0a 09 09 20 20 20 20 73   == 0) {...    s
b210: 6c 61 76 65 50 74 72 2d 3e 66 6c 61 67 73 20 7c  lavePtr->flags |
b220: 3d 20 46 49 4c 4c 58 7c 46 49 4c 4c 59 3b 0a 09  = FILLX|FILLY;..
b230: 09 7d 20 65 6c 73 65 20 7b 0a 09 09 20 20 20 20  .} else {...    
b240: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
b250: 28 69 6e 74 65 72 70 2c 20 22 62 61 64 20 66 69  (interp, "bad fi
b260: 6c 6c 20 73 74 79 6c 65 20 5c 22 22 2c 20 61 72  ll style \"", ar
b270: 67 76 5b 69 2b 31 5d 2c 0a 09 09 09 20 20 20 20  gv[i+1],....    
b280: 22 5c 22 3a 20 6d 75 73 74 20 62 65 20 6e 6f 6e  "\": must be non
b290: 65 2c 20 78 2c 20 79 2c 20 6f 72 20 62 6f 74 68  e, x, y, or both
b2a0: 22 2c 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c  ", (char *) NULL
b2b0: 29 3b 0a 09 09 20 20 20 20 72 65 74 75 72 6e 20  );...    return 
b2c0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 09 09 7d 0a 09  TCL_ERROR;...}..
b2d0: 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 28      } else if ((
b2e0: 63 20 3d 3d 20 27 69 27 29 20 26 26 20 28 73 74  c == 'i') && (st
b2f0: 72 63 6d 70 28 61 72 67 76 5b 69 5d 2c 20 22 2d  rcmp(argv[i], "-
b300: 69 6e 22 29 20 3d 3d 20 30 29 29 20 7b 0a 09 09  in") == 0)) {...
b310: 69 66 20 28 6a 20 3d 3d 20 30 29 20 7b 0a 09 09  if (j == 0) {...
b320: 20 20 20 20 6f 74 68 65 72 20 3d 20 54 6b 5f 4e      other = Tk_N
b330: 61 6d 65 54 6f 57 69 6e 64 6f 77 28 69 6e 74 65  ameToWindow(inte
b340: 72 70 2c 20 61 72 67 76 5b 69 2b 31 5d 2c 20 74  rp, argv[i+1], t
b350: 6b 77 69 6e 29 3b 0a 09 09 20 20 20 20 69 66 20  kwin);...    if 
b360: 28 6f 74 68 65 72 20 3d 3d 20 4e 55 4c 4c 29 20  (other == NULL) 
b370: 7b 0a 09 09 09 72 65 74 75 72 6e 20 54 43 4c 5f  {....return TCL_
b380: 45 52 52 4f 52 3b 0a 09 09 20 20 20 20 7d 0a 09  ERROR;...    }..
b390: 09 20 20 20 20 6d 61 73 74 65 72 50 74 72 20 3d  .    masterPtr =
b3a0: 20 47 65 74 50 61 63 6b 65 72 28 6f 74 68 65 72   GetPacker(other
b3b0: 29 3b 0a 09 09 20 20 20 20 70 72 65 76 50 74 72  );...    prevPtr
b3c0: 20 3d 20 6d 61 73 74 65 72 50 74 72 2d 3e 73 6c   = masterPtr->sl
b3d0: 61 76 65 50 74 72 3b 0a 09 09 20 20 20 20 69 66  avePtr;...    if
b3e0: 20 28 70 72 65 76 50 74 72 20 21 3d 20 4e 55 4c   (prevPtr != NUL
b3f0: 4c 29 20 7b 0a 09 09 09 77 68 69 6c 65 20 28 70  L) {....while (p
b400: 72 65 76 50 74 72 2d 3e 6e 65 78 74 50 74 72 20  revPtr->nextPtr 
b410: 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 20 20  != NULL) {....  
b420: 20 20 70 72 65 76 50 74 72 20 3d 20 70 72 65 76    prevPtr = prev
b430: 50 74 72 2d 3e 6e 65 78 74 50 74 72 3b 0a 09 09  Ptr->nextPtr;...
b440: 09 7d 0a 09 09 20 20 20 20 7d 0a 09 09 20 20 20  .}...    }...   
b450: 20 70 6f 73 69 74 69 6f 6e 47 69 76 65 6e 20 3d   positionGiven =
b460: 20 31 3b 0a 09 09 7d 0a 09 20 20 20 20 7d 20 65   1;...}..    } e
b470: 6c 73 65 20 69 66 20 28 28 63 20 3d 3d 20 27 69  lse if ((c == 'i
b480: 27 29 20 26 26 20 28 73 74 72 63 6d 70 28 61 72  ') && (strcmp(ar
b490: 67 76 5b 69 5d 2c 20 22 2d 69 70 61 64 78 22 29  gv[i], "-ipadx")
b4a0: 20 3d 3d 20 30 29 29 20 7b 0a 09 09 69 66 20 28   == 0)) {...if (
b4b0: 28 54 6b 5f 47 65 74 50 69 78 65 6c 73 28 69 6e  (Tk_GetPixels(in
b4c0: 74 65 72 70 2c 20 73 6c 61 76 65 2c 20 61 72 67  terp, slave, arg
b4d0: 76 5b 69 2b 31 5d 2c 20 26 74 6d 70 29 20 21 3d  v[i+1], &tmp) !=
b4e0: 20 54 43 4c 5f 4f 4b 29 0a 09 09 09 7c 7c 20 28   TCL_OK)....|| (
b4f0: 74 6d 70 20 3c 20 30 29 29 20 7b 0a 09 09 20 20  tmp < 0)) {...  
b500: 20 20 62 61 64 50 61 64 3a 0a 09 09 20 20 20 20    badPad:...    
b510: 54 63 6c 5f 52 65 73 65 74 52 65 73 75 6c 74 28  Tcl_ResetResult(
b520: 69 6e 74 65 72 70 29 3b 0a 09 09 20 20 20 20 54  interp);...    T
b530: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
b540: 69 6e 74 65 72 70 2c 20 22 62 61 64 20 70 61 64  interp, "bad pad
b550: 20 76 61 6c 75 65 20 5c 22 22 2c 20 61 72 67 76   value \"", argv
b560: 5b 69 2b 31 5d 2c 0a 09 09 09 20 20 20 20 22 5c  [i+1],....    "\
b570: 22 3a 20 6d 75 73 74 20 62 65 20 70 6f 73 69 74  ": must be posit
b580: 69 76 65 20 73 63 72 65 65 6e 20 64 69 73 74 61  ive screen dista
b590: 6e 63 65 22 2c 0a 09 09 09 20 20 20 20 28 63 68  nce",....    (ch
b5a0: 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09 09 20  ar *) NULL);... 
b5b0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
b5c0: 52 4f 52 3b 0a 09 09 7d 0a 09 09 73 6c 61 76 65  ROR;...}...slave
b5d0: 50 74 72 2d 3e 69 50 61 64 58 20 3d 20 74 6d 70  Ptr->iPadX = tmp
b5e0: 2a 32 3b 0a 09 20 20 20 20 7d 20 65 6c 73 65 20  *2;..    } else 
b5f0: 69 66 20 28 28 63 20 3d 3d 20 27 69 27 29 20 26  if ((c == 'i') &
b600: 26 20 28 73 74 72 63 6d 70 28 61 72 67 76 5b 69  & (strcmp(argv[i
b610: 5d 2c 20 22 2d 69 70 61 64 79 22 29 20 3d 3d 20  ], "-ipady") == 
b620: 30 29 29 20 7b 0a 09 09 69 66 20 28 28 54 6b 5f  0)) {...if ((Tk_
b630: 47 65 74 50 69 78 65 6c 73 28 69 6e 74 65 72 70  GetPixels(interp
b640: 2c 20 73 6c 61 76 65 2c 20 61 72 67 76 5b 69 2b  , slave, argv[i+
b650: 31 5d 2c 20 26 74 6d 70 29 20 21 3d 20 54 43 4c  1], &tmp) != TCL
b660: 5f 4f 4b 29 0a 09 09 09 7c 7c 20 28 74 6d 70 3c  _OK)....|| (tmp<
b670: 20 30 29 29 20 7b 0a 09 09 20 20 20 20 67 6f 74   0)) {...    got
b680: 6f 20 62 61 64 50 61 64 3b 0a 09 09 7d 0a 09 09  o badPad;...}...
b690: 73 6c 61 76 65 50 74 72 2d 3e 69 50 61 64 59 20  slavePtr->iPadY 
b6a0: 3d 20 74 6d 70 2a 32 3b 0a 09 20 20 20 20 7d 20  = tmp*2;..    } 
b6b0: 65 6c 73 65 20 69 66 20 28 28 63 20 3d 3d 20 27  else if ((c == '
b6c0: 70 27 29 20 26 26 20 28 73 74 72 63 6d 70 28 61  p') && (strcmp(a
b6d0: 72 67 76 5b 69 5d 2c 20 22 2d 70 61 64 78 22 29  rgv[i], "-padx")
b6e0: 20 3d 3d 20 30 29 29 20 7b 0a 09 09 69 66 20 28   == 0)) {...if (
b6f0: 28 54 6b 5f 47 65 74 50 69 78 65 6c 73 28 69 6e  (Tk_GetPixels(in
b700: 74 65 72 70 2c 20 73 6c 61 76 65 2c 20 61 72 67  terp, slave, arg
b710: 76 5b 69 2b 31 5d 2c 20 26 74 6d 70 29 20 21 3d  v[i+1], &tmp) !=
b720: 20 54 43 4c 5f 4f 4b 29 0a 09 09 09 7c 7c 20 28   TCL_OK)....|| (
b730: 74 6d 70 3c 20 30 29 29 20 7b 0a 09 09 20 20 20  tmp< 0)) {...   
b740: 20 67 6f 74 6f 20 62 61 64 50 61 64 3b 0a 09 09   goto badPad;...
b750: 7d 0a 09 09 73 6c 61 76 65 50 74 72 2d 3e 70 61  }...slavePtr->pa
b760: 64 58 20 3d 20 74 6d 70 2a 32 3b 0a 09 20 20 20  dX = tmp*2;..   
b770: 20 7d 20 65 6c 73 65 20 69 66 20 28 28 63 20 3d   } else if ((c =
b780: 3d 20 27 70 27 29 20 26 26 20 28 73 74 72 63 6d  = 'p') && (strcm
b790: 70 28 61 72 67 76 5b 69 5d 2c 20 22 2d 70 61 64  p(argv[i], "-pad
b7a0: 79 22 29 20 3d 3d 20 30 29 29 20 7b 0a 09 09 69  y") == 0)) {...i
b7b0: 66 20 28 28 54 6b 5f 47 65 74 50 69 78 65 6c 73  f ((Tk_GetPixels
b7c0: 28 69 6e 74 65 72 70 2c 20 73 6c 61 76 65 2c 20  (interp, slave, 
b7d0: 61 72 67 76 5b 69 2b 31 5d 2c 20 26 74 6d 70 29  argv[i+1], &tmp)
b7e0: 20 21 3d 20 54 43 4c 5f 4f 4b 29 0a 09 09 09 7c   != TCL_OK)....|
b7f0: 7c 20 28 74 6d 70 3c 20 30 29 29 20 7b 0a 09 09  | (tmp< 0)) {...
b800: 20 20 20 20 67 6f 74 6f 20 62 61 64 50 61 64 3b      goto badPad;
b810: 0a 09 09 7d 0a 09 09 73 6c 61 76 65 50 74 72 2d  ...}...slavePtr-
b820: 3e 70 61 64 59 20 3d 20 74 6d 70 2a 32 3b 0a 09  >padY = tmp*2;..
b830: 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 28      } else if ((
b840: 63 20 3d 3d 20 27 73 27 29 20 26 26 20 28 73 74  c == 's') && (st
b850: 72 6e 63 6d 70 28 61 72 67 76 5b 69 5d 2c 20 22  rncmp(argv[i], "
b860: 2d 73 69 64 65 22 2c 20 6c 65 6e 67 74 68 29 20  -side", length) 
b870: 3d 3d 20 30 29 29 20 7b 0a 09 09 63 20 3d 20 61  == 0)) {...c = a
b880: 72 67 76 5b 69 2b 31 5d 5b 30 5d 3b 0a 09 09 69  rgv[i+1][0];...i
b890: 66 20 28 28 63 20 3d 3d 20 27 74 27 29 20 26 26  f ((c == 't') &&
b8a0: 20 28 73 74 72 63 6d 70 28 61 72 67 76 5b 69 2b   (strcmp(argv[i+
b8b0: 31 5d 2c 20 22 74 6f 70 22 29 20 3d 3d 20 30 29  1], "top") == 0)
b8c0: 29 20 7b 0a 09 09 20 20 20 20 73 6c 61 76 65 50  ) {...    slaveP
b8d0: 74 72 2d 3e 73 69 64 65 20 3d 20 54 4f 50 3b 0a  tr->side = TOP;.
b8e0: 09 09 7d 20 65 6c 73 65 20 69 66 20 28 28 63 20  ..} else if ((c 
b8f0: 3d 3d 20 27 62 27 29 20 26 26 20 28 73 74 72 63  == 'b') && (strc
b900: 6d 70 28 61 72 67 76 5b 69 2b 31 5d 2c 20 22 62  mp(argv[i+1], "b
b910: 6f 74 74 6f 6d 22 29 20 3d 3d 20 30 29 29 20 7b  ottom") == 0)) {
b920: 0a 09 09 20 20 20 20 73 6c 61 76 65 50 74 72 2d  ...    slavePtr-
b930: 3e 73 69 64 65 20 3d 20 42 4f 54 54 4f 4d 3b 0a  >side = BOTTOM;.
b940: 09 09 7d 20 65 6c 73 65 20 69 66 20 28 28 63 20  ..} else if ((c 
b950: 3d 3d 20 27 6c 27 29 20 26 26 20 28 73 74 72 63  == 'l') && (strc
b960: 6d 70 28 61 72 67 76 5b 69 2b 31 5d 2c 20 22 6c  mp(argv[i+1], "l
b970: 65 66 74 22 29 20 3d 3d 20 30 29 29 20 7b 0a 09  eft") == 0)) {..
b980: 09 20 20 20 20 73 6c 61 76 65 50 74 72 2d 3e 73  .    slavePtr->s
b990: 69 64 65 20 3d 20 4c 45 46 54 3b 0a 09 09 7d 20  ide = LEFT;...} 
b9a0: 65 6c 73 65 20 69 66 20 28 28 63 20 3d 3d 20 27  else if ((c == '
b9b0: 72 27 29 20 26 26 20 28 73 74 72 63 6d 70 28 61  r') && (strcmp(a
b9c0: 72 67 76 5b 69 2b 31 5d 2c 20 22 72 69 67 68 74  rgv[i+1], "right
b9d0: 22 29 20 3d 3d 20 30 29 29 20 7b 0a 09 09 20 20  ") == 0)) {...  
b9e0: 20 20 73 6c 61 76 65 50 74 72 2d 3e 73 69 64 65    slavePtr->side
b9f0: 20 3d 20 52 49 47 48 54 3b 0a 09 09 7d 20 65 6c   = RIGHT;...} el
ba00: 73 65 20 7b 0a 09 09 20 20 20 20 54 63 6c 5f 41  se {...    Tcl_A
ba10: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
ba20: 72 70 2c 20 22 62 61 64 20 73 69 64 65 20 5c 22  rp, "bad side \"
ba30: 22 2c 20 61 72 67 76 5b 69 2b 31 5d 2c 0a 09 09  ", argv[i+1],...
ba40: 09 20 20 20 20 22 5c 22 3a 20 6d 75 73 74 20 62  .    "\": must b
ba50: 65 20 74 6f 70 2c 20 62 6f 74 74 6f 6d 2c 20 6c  e top, bottom, l
ba60: 65 66 74 2c 20 6f 72 20 72 69 67 68 74 22 2c 0a  eft, or right",.
ba70: 09 09 09 20 20 20 20 28 63 68 61 72 20 2a 29 20  ...    (char *) 
ba80: 4e 55 4c 4c 29 3b 0a 09 09 20 20 20 20 72 65 74  NULL);...    ret
ba90: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 09  urn TCL_ERROR;..
baa0: 09 7d 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b  .}..    } else {
bab0: 0a 09 09 62 61 64 4f 70 74 69 6f 6e 3a 0a 09 09  ...badOption:...
bac0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
bad0: 28 69 6e 74 65 72 70 2c 20 22 75 6e 6b 6e 6f 77  (interp, "unknow
bae0: 6e 20 6f 72 20 61 6d 62 69 67 75 6f 75 73 20 6f  n or ambiguous o
baf0: 70 74 69 6f 6e 20 5c 22 22 2c 0a 09 09 09 61 72  ption \"",....ar
bb00: 67 76 5b 69 5d 2c 20 22 5c 22 3a 20 6d 75 73 74  gv[i], "\": must
bb10: 20 62 65 20 2d 61 66 74 65 72 2c 20 2d 61 6e 63   be -after, -anc
bb20: 68 6f 72 2c 20 2d 62 65 66 6f 72 65 2c 20 22 2c  hor, -before, ",
bb30: 0a 09 09 09 22 2d 65 78 70 61 6e 64 2c 20 2d 66  ...."-expand, -f
bb40: 69 6c 6c 2c 20 2d 69 6e 2c 20 2d 69 70 61 64 78  ill, -in, -ipadx
bb50: 2c 20 2d 69 70 61 64 79 2c 20 2d 70 61 64 78 2c  , -ipady, -padx,
bb60: 20 22 2c 0a 09 09 09 22 2d 70 61 64 79 2c 20 6f   ",...."-pady, o
bb70: 72 20 2d 73 69 64 65 22 2c 20 28 63 68 61 72 20  r -side", (char 
bb80: 2a 29 20 4e 55 4c 4c 29 3b 0a 09 09 72 65 74 75  *) NULL);...retu
bb90: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 09 20  rn TCL_ERROR;.. 
bba0: 20 20 20 7d 0a 09 7d 0a 0a 09 2f 2a 0a 09 20 2a     }..}.../*.. *
bbb0: 20 49 66 20 6e 6f 20 70 6f 73 69 74 69 6f 6e 20   If no position 
bbc0: 69 6e 20 61 20 70 61 63 6b 69 6e 67 20 6c 69 73  in a packing lis
bbd0: 74 20 77 61 73 20 73 70 65 63 69 66 69 65 64 20  t was specified 
bbe0: 61 6e 64 20 74 68 65 20 73 6c 61 76 65 0a 09 20  and the slave.. 
bbf0: 2a 20 69 73 20 61 6c 72 65 61 64 79 20 70 61 63  * is already pac
bc00: 6b 65 64 2c 20 74 68 65 6e 20 6c 65 61 76 65 20  ked, then leave 
bc10: 69 74 20 69 6e 20 69 74 73 20 63 75 72 72 65 6e  it in its curren
bc20: 74 20 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 09 20  t location in.. 
bc30: 2a 20 69 74 73 20 63 75 72 72 65 6e 74 20 70 61  * its current pa
bc40: 63 6b 69 6e 67 20 6c 69 73 74 2e 0a 09 20 2a 2f  cking list... */
bc50: 0a 0a 09 69 66 20 28 21 70 6f 73 69 74 69 6f 6e  ...if (!position
bc60: 47 69 76 65 6e 20 26 26 20 28 73 6c 61 76 65 50  Given && (slaveP
bc70: 74 72 2d 3e 6d 61 73 74 65 72 50 74 72 20 21 3d  tr->masterPtr !=
bc80: 20 4e 55 4c 4c 29 29 20 7b 0a 09 20 20 20 20 6d   NULL)) {..    m
bc90: 61 73 74 65 72 50 74 72 20 3d 20 73 6c 61 76 65  asterPtr = slave
bca0: 50 74 72 2d 3e 6d 61 73 74 65 72 50 74 72 3b 0a  Ptr->masterPtr;.
bcb0: 09 20 20 20 20 67 6f 74 6f 20 73 63 68 65 64 75  .    goto schedu
bcc0: 6c 65 4c 61 79 6f 75 74 3b 0a 09 7d 0a 0a 09 2f  leLayout;..}.../
bcd0: 2a 0a 09 20 2a 20 49 66 20 74 68 65 20 73 6c 61  *.. * If the sla
bce0: 76 65 20 69 73 20 67 6f 69 6e 67 20 74 6f 20 62  ve is going to b
bcf0: 65 20 70 75 74 20 62 61 63 6b 20 61 66 74 65 72  e put back after
bd00: 20 69 74 73 65 6c 66 20 74 68 65 6e 0a 09 20 2a   itself then.. *
bd10: 20 73 6b 69 70 20 74 68 65 20 77 68 6f 6c 65 20   skip the whole 
bd20: 6f 70 65 72 61 74 69 6f 6e 2c 20 73 69 6e 63 65  operation, since
bd30: 20 69 74 20 77 6f 6e 27 74 20 77 6f 72 6b 20 61   it won't work a
bd40: 6e 79 77 61 79 2e 0a 09 20 2a 2f 0a 0a 09 69 66  nyway... */...if
bd50: 20 28 70 72 65 76 50 74 72 20 3d 3d 20 73 6c 61   (prevPtr == sla
bd60: 76 65 50 74 72 29 20 7b 0a 09 20 20 20 20 6d 61  vePtr) {..    ma
bd70: 73 74 65 72 50 74 72 20 3d 20 73 6c 61 76 65 50  sterPtr = slaveP
bd80: 74 72 2d 3e 6d 61 73 74 65 72 50 74 72 3b 0a 09  tr->masterPtr;..
bd90: 20 20 20 20 67 6f 74 6f 20 73 63 68 65 64 75 6c      goto schedul
bda0: 65 4c 61 79 6f 75 74 3b 0a 09 7d 0a 20 20 20 20  eLayout;..}.    
bdb0: 0a 09 2f 2a 0a 09 20 2a 20 49 66 20 6e 6f 6e 65  ../*.. * If none
bdc0: 20 6f 66 20 74 68 65 20 22 2d 69 6e 22 2c 20 22   of the "-in", "
bdd0: 2d 62 65 66 6f 72 65 22 2c 20 6f 72 20 22 2d 61  -before", or "-a
bde0: 66 74 65 72 22 20 6f 70 74 69 6f 6e 73 20 68 61  fter" options ha
bdf0: 73 0a 09 20 2a 20 62 65 65 6e 20 73 70 65 63 69  s.. * been speci
be00: 66 69 65 64 2c 20 61 72 72 61 6e 67 65 20 66 6f  fied, arrange fo
be10: 72 20 74 68 65 20 73 6c 61 76 65 20 74 6f 20 67  r the slave to g
be20: 6f 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 0a  o at the end of.
be30: 09 20 2a 20 74 68 65 20 6f 72 64 65 72 20 66 6f  . * the order fo
be40: 72 20 69 74 73 20 70 61 72 65 6e 74 2e 0a 09 20  r its parent... 
be50: 2a 2f 0a 20 20 20 20 0a 09 69 66 20 28 21 70 6f  */.    ..if (!po
be60: 73 69 74 69 6f 6e 47 69 76 65 6e 29 20 7b 0a 09  sitionGiven) {..
be70: 20 20 20 20 6d 61 73 74 65 72 50 74 72 20 3d 20      masterPtr = 
be80: 47 65 74 50 61 63 6b 65 72 28 54 6b 5f 50 61 72  GetPacker(Tk_Par
be90: 65 6e 74 28 73 6c 61 76 65 29 29 3b 0a 09 20 20  ent(slave));..  
bea0: 20 20 70 72 65 76 50 74 72 20 3d 20 6d 61 73 74    prevPtr = mast
beb0: 65 72 50 74 72 2d 3e 73 6c 61 76 65 50 74 72 3b  erPtr->slavePtr;
bec0: 0a 09 20 20 20 20 69 66 20 28 70 72 65 76 50 74  ..    if (prevPt
bed0: 72 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 77  r != NULL) {...w
bee0: 68 69 6c 65 20 28 70 72 65 76 50 74 72 2d 3e 6e  hile (prevPtr->n
bef0: 65 78 74 50 74 72 20 21 3d 20 4e 55 4c 4c 29 20  extPtr != NULL) 
bf00: 7b 0a 09 09 20 20 20 20 70 72 65 76 50 74 72 20  {...    prevPtr 
bf10: 3d 20 70 72 65 76 50 74 72 2d 3e 6e 65 78 74 50  = prevPtr->nextP
bf20: 74 72 3b 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09  tr;...}..    }..
bf30: 7d 0a 0a 09 2f 2a 0a 09 20 2a 20 4d 61 6b 65 20  }.../*.. * Make 
bf40: 73 75 72 65 20 74 68 61 74 20 74 68 65 20 73 6c  sure that the sl
bf50: 61 76 65 27 73 20 70 61 72 65 6e 74 20 69 73 20  ave's parent is 
bf60: 65 69 74 68 65 72 20 74 68 65 20 6d 61 73 74 65  either the maste
bf70: 72 20 6f 72 0a 09 20 2a 20 61 6e 20 61 6e 63 65  r or.. * an ance
bf80: 73 74 6f 72 20 6f 66 20 74 68 65 20 6d 61 73 74  stor of the mast
bf90: 65 72 2c 20 61 6e 64 20 74 68 61 74 20 74 68 65  er, and that the
bfa0: 20 6d 61 73 74 65 72 20 61 6e 64 20 73 6c 61 76   master and slav
bfb0: 65 0a 09 20 2a 20 61 72 65 6e 27 74 20 74 68 65  e.. * aren't the
bfc0: 20 73 61 6d 65 2e 0a 09 20 2a 2f 0a 20 20 20 20   same... */.    
bfd0: 0a 09 70 61 72 65 6e 74 20 3d 20 54 6b 5f 50 61  ..parent = Tk_Pa
bfe0: 72 65 6e 74 28 73 6c 61 76 65 29 3b 0a 09 66 6f  rent(slave);..fo
bff0: 72 20 28 61 6e 63 65 73 74 6f 72 20 3d 20 6d 61  r (ancestor = ma
c000: 73 74 65 72 50 74 72 2d 3e 74 6b 77 69 6e 3b 20  sterPtr->tkwin; 
c010: 3b 20 61 6e 63 65 73 74 6f 72 20 3d 20 54 6b 5f  ; ancestor = Tk_
c020: 50 61 72 65 6e 74 28 61 6e 63 65 73 74 6f 72 29  Parent(ancestor)
c030: 29 20 7b 0a 09 20 20 20 20 69 66 20 28 61 6e 63  ) {..    if (anc
c040: 65 73 74 6f 72 20 3d 3d 20 70 61 72 65 6e 74 29  estor == parent)
c050: 20 7b 0a 09 09 62 72 65 61 6b 3b 0a 09 20 20 20   {...break;..   
c060: 20 7d 0a 09 20 20 20 20 69 66 20 28 54 6b 5f 49   }..    if (Tk_I
c070: 73 54 6f 70 4c 65 76 65 6c 28 61 6e 63 65 73 74  sTopLevel(ancest
c080: 6f 72 29 29 20 7b 0a 09 09 54 63 6c 5f 41 70 70  or)) {...Tcl_App
c090: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
c0a0: 2c 20 22 63 61 6e 27 74 20 70 61 63 6b 20 22 2c  , "can't pack ",
c0b0: 20 61 72 67 76 5b 6a 5d 2c 0a 09 09 09 22 20 69   argv[j],...." i
c0c0: 6e 73 69 64 65 20 22 2c 20 54 6b 5f 50 61 74 68  nside ", Tk_Path
c0d0: 4e 61 6d 65 28 6d 61 73 74 65 72 50 74 72 2d 3e  Name(masterPtr->
c0e0: 74 6b 77 69 6e 29 2c 0a 09 09 09 28 63 68 61 72  tkwin),....(char
c0f0: 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09 09 72 65 74   *) NULL);...ret
c100: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 09  urn TCL_ERROR;..
c110: 20 20 20 20 7d 0a 09 7d 0a 09 69 66 20 28 73 6c      }..}..if (sl
c120: 61 76 65 20 3d 3d 20 6d 61 73 74 65 72 50 74 72  ave == masterPtr
c130: 2d 3e 74 6b 77 69 6e 29 20 7b 0a 09 20 20 20 20  ->tkwin) {..    
c140: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
c150: 28 69 6e 74 65 72 70 2c 20 22 63 61 6e 27 74 20  (interp, "can't 
c160: 70 61 63 6b 20 22 2c 20 61 72 67 76 5b 6a 5d 2c  pack ", argv[j],
c170: 0a 09 09 20 20 20 20 22 20 69 6e 73 69 64 65 20  ...    " inside 
c180: 69 74 73 65 6c 66 22 2c 20 28 63 68 61 72 20 2a  itself", (char *
c190: 29 20 4e 55 4c 4c 29 3b 0a 09 20 20 20 20 72 65  ) NULL);..    re
c1a0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
c1b0: 09 7d 0a 0a 09 2f 2a 0a 09 20 2a 20 55 6e 70 61  .}.../*.. * Unpa
c1c0: 63 6b 20 74 68 65 20 73 6c 61 76 65 20 69 66 20  ck the slave if 
c1d0: 69 74 27 73 20 63 75 72 72 65 6e 74 6c 79 20 70  it's currently p
c1e0: 61 63 6b 65 64 2c 20 74 68 65 6e 20 70 6f 73 69  acked, then posi
c1f0: 74 69 6f 6e 20 69 74 0a 09 20 2a 20 61 66 74 65  tion it.. * afte
c200: 72 20 70 72 65 76 50 74 72 2e 0a 09 20 2a 2f 0a  r prevPtr... */.
c210: 0a 09 69 66 20 28 73 6c 61 76 65 50 74 72 2d 3e  ..if (slavePtr->
c220: 6d 61 73 74 65 72 50 74 72 20 21 3d 20 4e 55 4c  masterPtr != NUL
c230: 4c 29 20 7b 0a 09 20 20 20 20 69 66 20 28 28 73  L) {..    if ((s
c240: 6c 61 76 65 50 74 72 2d 3e 6d 61 73 74 65 72 50  lavePtr->masterP
c250: 74 72 20 21 3d 20 6d 61 73 74 65 72 50 74 72 29  tr != masterPtr)
c260: 20 26 26 0a 09 09 20 20 20 20 28 73 6c 61 76 65   &&...    (slave
c270: 50 74 72 2d 3e 6d 61 73 74 65 72 50 74 72 2d 3e  Ptr->masterPtr->
c280: 74 6b 77 69 6e 0a 09 09 20 20 20 20 21 3d 20 54  tkwin...    != T
c290: 6b 5f 50 61 72 65 6e 74 28 73 6c 61 76 65 50 74  k_Parent(slavePt
c2a0: 72 2d 3e 74 6b 77 69 6e 29 29 29 20 7b 0a 09 09  r->tkwin))) {...
c2b0: 54 6b 5f 55 6e 6d 61 69 6e 74 61 69 6e 47 65 6f  Tk_UnmaintainGeo
c2c0: 6d 65 74 72 79 28 73 6c 61 76 65 50 74 72 2d 3e  metry(slavePtr->
c2d0: 74 6b 77 69 6e 2c 0a 09 09 09 73 6c 61 76 65 50  tkwin,....slaveP
c2e0: 74 72 2d 3e 6d 61 73 74 65 72 50 74 72 2d 3e 74  tr->masterPtr->t
c2f0: 6b 77 69 6e 29 3b 0a 09 20 20 20 20 7d 0a 09 20  kwin);..    }.. 
c300: 20 20 20 55 6e 6c 69 6e 6b 28 73 6c 61 76 65 50     Unlink(slaveP
c310: 74 72 29 3b 0a 09 7d 0a 09 73 6c 61 76 65 50 74  tr);..}..slavePt
c320: 72 2d 3e 6d 61 73 74 65 72 50 74 72 20 3d 20 6d  r->masterPtr = m
c330: 61 73 74 65 72 50 74 72 3b 0a 09 69 66 20 28 70  asterPtr;..if (p
c340: 72 65 76 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 20  revPtr == NULL) 
c350: 7b 0a 09 20 20 20 20 73 6c 61 76 65 50 74 72 2d  {..    slavePtr-
c360: 3e 6e 65 78 74 50 74 72 20 3d 20 6d 61 73 74 65  >nextPtr = maste
c370: 72 50 74 72 2d 3e 73 6c 61 76 65 50 74 72 3b 0a  rPtr->slavePtr;.
c380: 09 20 20 20 20 6d 61 73 74 65 72 50 74 72 2d 3e  .    masterPtr->
c390: 73 6c 61 76 65 50 74 72 20 3d 20 73 6c 61 76 65  slavePtr = slave
c3a0: 50 74 72 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09  Ptr;..} else {..
c3b0: 20 20 20 20 73 6c 61 76 65 50 74 72 2d 3e 6e 65      slavePtr->ne
c3c0: 78 74 50 74 72 20 3d 20 70 72 65 76 50 74 72 2d  xtPtr = prevPtr-
c3d0: 3e 6e 65 78 74 50 74 72 3b 0a 09 20 20 20 20 70  >nextPtr;..    p
c3e0: 72 65 76 50 74 72 2d 3e 6e 65 78 74 50 74 72 20  revPtr->nextPtr 
c3f0: 3d 20 73 6c 61 76 65 50 74 72 3b 0a 09 7d 0a 09  = slavePtr;..}..
c400: 54 6b 5f 4d 61 6e 61 67 65 47 65 6f 6d 65 74 72  Tk_ManageGeometr
c410: 79 28 73 6c 61 76 65 2c 20 26 70 61 63 6b 65 72  y(slave, &packer
c420: 54 79 70 65 2c 20 28 43 6c 69 65 6e 74 44 61 74  Type, (ClientDat
c430: 61 29 20 73 6c 61 76 65 50 74 72 29 3b 0a 09 70  a) slavePtr);..p
c440: 72 65 76 50 74 72 20 3d 20 73 6c 61 76 65 50 74  revPtr = slavePt
c450: 72 3b 0a 0a 09 2f 2a 0a 09 20 2a 20 41 72 72 61  r;.../*.. * Arra
c460: 6e 67 65 20 66 6f 72 20 74 68 65 20 70 61 72 65  nge for the pare
c470: 6e 74 20 74 6f 20 62 65 20 72 65 2d 70 61 63 6b  nt to be re-pack
c480: 65 64 20 61 74 20 74 68 65 20 66 69 72 73 74 0a  ed at the first.
c490: 09 20 2a 20 69 64 6c 65 20 6d 6f 6d 65 6e 74 2e  . * idle moment.
c4a0: 0a 09 20 2a 2f 0a 0a 09 73 63 68 65 64 75 6c 65  .. */...schedule
c4b0: 4c 61 79 6f 75 74 3a 0a 09 69 66 20 28 6d 61 73  Layout:..if (mas
c4c0: 74 65 72 50 74 72 2d 3e 61 62 6f 72 74 50 74 72  terPtr->abortPtr
c4d0: 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 20 20 20   != NULL) {..   
c4e0: 20 2a 6d 61 73 74 65 72 50 74 72 2d 3e 61 62 6f   *masterPtr->abo
c4f0: 72 74 50 74 72 20 3d 20 31 3b 0a 09 7d 0a 09 69  rtPtr = 1;..}..i
c500: 66 20 28 21 28 6d 61 73 74 65 72 50 74 72 2d 3e  f (!(masterPtr->
c510: 66 6c 61 67 73 20 26 20 52 45 51 55 45 53 54 45  flags & REQUESTE
c520: 44 5f 52 45 50 41 43 4b 29 29 20 7b 0a 09 20 20  D_REPACK)) {..  
c530: 20 20 6d 61 73 74 65 72 50 74 72 2d 3e 66 6c 61    masterPtr->fla
c540: 67 73 20 7c 3d 20 52 45 51 55 45 53 54 45 44 5f  gs |= REQUESTED_
c550: 52 45 50 41 43 4b 3b 0a 09 20 20 20 20 54 63 6c  REPACK;..    Tcl
c560: 5f 44 6f 57 68 65 6e 49 64 6c 65 28 41 72 72 61  _DoWhenIdle(Arra
c570: 6e 67 65 50 61 63 6b 69 6e 67 2c 20 28 43 6c 69  ngePacking, (Cli
c580: 65 6e 74 44 61 74 61 29 20 6d 61 73 74 65 72 50  entData) masterP
c590: 74 72 29 3b 0a 09 7d 0a 20 20 20 20 7d 0a 20 20  tr);..}.    }.  
c5a0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
c5b0: 0a 7d 0a                                         .}.