4.  ICCCM compliant colormap support is needed.
    Currently color maps are not dealt with very well, and are completely
    untested (I don't have a color machine).
    Currently the "tkwm colormap pathName" command installs
    the colormap for the given pathName, where plugs have
    the same colormap as their clients at the time of creation.
    The colormap is not tracked beyond the first instant,
    and the WM_COLORMAP_WINDOWS lists are not dealt with at all.
    [FIXED. I ripped off ctwm's colormap management scheme almost
    verbatim.]

6.  Some error checking is missing in the ExpandPercents routine.
    I think it just results in garbage returns in cases where percent
    substitutions are invalid, but I should do it right anyway.
    [FIXED. Returns "??" in all cases where modifier is invalid.]

8.  Something sometimes causes a crash in TkPointerEvent.
    It seems that sometimes a grab release does not properly take
    effect, and if the window that used to have the grab is destroyed
    to soon, then it is freed, and the grab code dies.
    It is not clear to me that this is not just a bug in TK that I
    happen to be tickling...
    UPDATE: There seems to be something sometimes causing a random
    crash in TKWM period. I suspect a memory leak of some kind, but
    I'm not sure what. I should probably compile with the debugging
    memory allocators.
    UPDATE: I found the memory leak (or one of them), and now I
    only seem to get the TkPointerEvent crash occasionally. (Say once a week)
    NOTE: This may be related to 24.
    [FIXED: I have found the bug in TK that is causing this. The problem
    is that a pointer to a freed block of memory is being dereferenced in
    tkGrab.c. I'm not sure how to fix TK, but I know how to work around
    it. To work around it, never destroy a window that has the grab,
    and always force an update before destroying a window that has
    just released the grab. I have reported the bug to John O.]

9.  None of the protocols defined by the WM_PROTOCOLS property are supported.
    [FIXED. All three defined protocols are supported.]

10. There is no way to set either the WM_STATE property.
    This makes programs like xprop fail to
    find the client windows.
    [FIXED]

11. Border widths are not reset on termination of the window manager.
    [FIXED]

16. The max_width, max_height, min_width and min_height WMSizeHints are not
    yet available from the "tkwm info" command, and therefore the sample
    TCL resizer ignores these hints. I should go over all the hints one
    by one and make sure they are returned.
    [FIXED. All hints are now accessible.]

21. I should check to be sure all possible window hints are filled
    with default values when the client does not supply them.
    [FIXED. All hints that can be defaulted are.]


23. The XPointer type is missing from X11R4. Changing to (char *) compiles
    cleanly under X11R4.
    [FIXED. Removed unneeded XPointer casts.]

24. tkwm doesn't work under X11R4. Why?
    [FIXED. This was the same problem as 8.]

25. Colormap focussing seems to miss when entry to a window is too fast.
    [Probably the same problem as 26.]
    [FIXED? Can someone check please. I don't have color.]

26. Focus fails to change into a window when it is mapped under the
    pointer. Focus can also sometimes fail to follow the pointer.
    [FIXED. I needed to bind focus tracking to <Any-Enter> instead of
     <Enter>. I should ask John O. if this is the intended behavior of TK.]

27. Grabevent screws up and grabs everything when the keysym does not exist.
    [FIXED]

28. [Carl Witty] The variable "tkwm_registery" should be named "tkwm_registry".
    [FIXED]

29. [Carl Witty] proc wset_withdraw does "global tkwm_winstate" but doesn't use
    tkwm_winstate afterward. [FIXED]

30. [Carl Witty] set_remove won't work if either of its arguments has spaces or
    other Tcl special characters.
    [FIXED. (I think)]

31. [Carl Witty] I don't understand the purpose of the interaction between
    create_new_window, window_titled_q, and decorate.  Why not just have
    create_new_window always pass a namevar to decorate, and then decorate
    can call window_titled_q itself to decide whether or not to include a
    titlebar?
    [FIXED. This was a historical artifact. The logical fix has been done.]

32. [david d `zoo' zuhn] Tkwm will run even if another window manager
    is running.
    [FIXED]

33. [david d `zoo' zuhn] Moving windows will leave "outline" droppings
    on the contents of a window.  [This is related to grabs. It can be
    fixed, but I am reluctant to do so in the demo code at this time
    due to the risk of locking up the X server. I may add this in at
    a later date along with an "escape" mechanism to relinquish the
    server grab at the users demand.]
    [FIXED. I bit the bullet and put in the server grabs. Things should
     even survive blow ups in the TCL code wrapped in grab/ungrab pairs,
     but an infinite loop could still cause grief. There aren't any
     right now, but if you plan on modifying things in the code for
     moving, resizing or initial positioning watch out!]


34. [david d `zoo' zuhn] Refresh blanks the screen to do a refresh.
    [TKWM does the same thing as other window managers, possibly just with
     a different color.]

36. Add copyright message into every important file! [FIXED]

37. Spelling patches from david d `zoo' zuhn. [FIXED]

38. [Tom Tromey] Clients that force a change in focus screw up tkwm.
    e.g. emacs.
    [FIXED. Two problems. First problem. Configure events where not
     dealing with restacking requests. Taken care of by adding "tkwm restack"
     and two new percent modifiers to the tkwm bindings.
     Second problem. FocusIn events generated by clients were ignored.
     Added client binding to follow focus. This must ignore NotifyAncestor
     detail events because these are generated by TK internally for the
     entire hierarchy.
     Thanks to Tom Tromey for spotting the two problems.]

39. Cascade entries don't work on pop up menus over the root.
    This reflects the rather poor state of the current popup menu
    implementation.
    [FIXED. Cascades work, many other improvements to menus.
     See the CHANGES file.]

44. The menu and zoom buttons on window decorations do nothing right now.
    [FIXED 1/2. I've added code to deal with menu button activation.
     I still need to do zooms.]
    [FIXED. Zoom code has been added.]

45. Raise_lower does not work correctly when a window is partially off
    the screen.
    [FIXED. I added a new core command "tkwm restack" that lets you
     get at the stacking portion of a configure command.]

46. There is no way to set the WM_ICON_SIZE property on the root window.
    I will need to add a new core command for this.
    [FIXED. Added "tkwm iconsize" core command.]

47. If a client withdraws or destroys when in the iconic state,
    the client fails to be withdrawn from the icon list.
    [FIXED. I just fixed this by adding a catch to the icon packing
     code so that it ignores icons that have disappeared. I'm not
     bothering with a more correct fix in anticipation of the release
     of Kim Q. Liu's icon package.]

48. Some applications (such as TK!) attempt to manipulate the stacking
    order of their windows by tracking reparenting and then manipulating
    the stacking of the window managers frames directly. Nasty nasty nasty.
    [FIXED. I've changed the ConfigureRequest code in the core to
     deal with configure requests on windows that it is not managing
     directly by just doing the exact request. This seems to yield the
     desired behavior. In a way I think this reflects a bug in TK,
     which really should not be mucking with the status of windows
     it does not own. But I'm not sure what the ICCCM says TK should
     be doing, that section of the ICCCM is less than clear.]

49. Some clients do not get size correctly when brought
    up initially. e.g. xbmbrowser's help window, and the htext demo in
    the BLT extension to wish.
    [FIXED.
     The htext demo fails because I introduced a bug in ExpandPercents
     causing configuration requests to become ignored.
     The xbmbrowser help window fails because xbmbrowser sends a
     NORMAL_HINTS property event, but the XGetWMNormalHints fail.
     I'm not sure why it should fail, but I've added code to test for this.
    ]

50. [Kim Q. Liu] Some code assumes the ANSI C semantics of concatenating
    adjacent strings.
    [FIXED]

51. [Tom Tromey] Menus bound to buttons with modifiers fail to pop down.
    [FIXED. Menus must still, however, be bound to mouse buttons. It
     might be nice if keyboard accelerators can be added.]

52. [Tom Tromey] Some code uses atoi() to parse numbers. Tcl_GetInt
    would be better since it does error checking.
    [FIXED]

53. [Tom Tromey] The default case in the "%d" code should return "??"
    since the detail field is unknown at that point.
    [FIXED]

54. [Tom Tromey] The move procedure assumes button 2 will be used.
    This should be user selectable.
    [FIXED? Bound motion events to <Any-Motion> and added a parameter
     for indicating what event to watch for to end the move. 
     Did the same for resizing. Perhaps I should allow for multiple
     ending events?]

55. [Tom Tromey] grabevent does not support the full range of TK key and
    button event names. Perhaps it should.
    [FIXED. Added: ButtonPress, ButtonRelease, Motion, KeyPress,
     and KeyRelease to the list of possible event type specifiers.]

56. [Tom Tromey] Add a procedure to do per window refresh.
    [FIXED]

57. When calling up a new window focus can end up in it
    even if the pointer does not.
    [FIXED.
     This seems to be caused by FocusIn events arriving after a pointer
     movement causes a focus change out of a window that just was given
     the focus. I've "fixed" this by adding a count of the number of
     focus events we have generated to each window, and ignoring that
     many events for each window.]

58. If an application (e.g. seyon) makes two map-requests in a row fast
    enough, then both requests can be interpreted as positioning requests.
    I need to add code to trap requests that arrive while one is being
    processed and defer the request till later.
    [FIXED. I've added request deferral.]

59. [Kim Q. Liu] Missing typecast in tkTkwm. Line 1804 (tkwm-0.1a3).
    [FIXED]

60. [Kim Q. Liu] Deiconifying under program control does not work properly.
    [FIXED. Initializing window_state variable inappropriately in
     map-request. It should only be initialized if it does not yet exist.]

61. [Tuomas Lukka] Many missing casts in X11R4 compilation.
    [FIXED (against tkwm-0.1a3 release)]

62. When a window that starts iconic is initially placed is deiconifyed,
    it has not been sent a configuration description. (i.e. sendconfig
    has not been run). This screws up menu positions in the client.
    [FIXED. Deiconifying by the user failed to do a sendconfig.]

63. If you are moving a window when a new one makes a map requests
    the new window will be placed at +0+0 instead of waiting for
    the move to terminate. There are two ways to fix this:
    1) Use "tkwm grabserver" commands to prevent new requests from
       arriving. This can still miss two map-requests that occur
       very quickly in succession.
    2) Queue requests that arrive while a major operation that is
       grabbing the pointer is being processed. I think this
       approach is perhaps the better one. In general I want to
       minimize the need to grab the server as much as possible.
    [FIXED. I've implemented a general dispatch queue.]

64. When a new window is created it may get the focus even after the
    pointer has been moved out of the window (and the highlight border
    is turned off!)
    Update: This is a problem with following FocusIn events
    generated by "tkwm focus" events, which may arrive out of order
    with respect to the events which cause them.
    [FIXED. I've added a new core binding for <FocusIn> events on
     client plugs, and changed the "tkwm focus" command so that
     it never generates a TK <FocusIn> event directly. This is
     a bit of a kludge, but I can't think of a cleaner way to do this.]

65. Move's and resizes that get cancelled by a fast release of the button
    will block future map_requests.
    [FIXED. Mailed out patch.]

66. Transient and grouping information not being removed for deleted windows.
    [FIXED. One error in deregister, another in the code to call deregister.]

67. If a window is destroyed in the middle of a move or resize bad things
    will happen. This can be partially fixed by doing a grabserver/ungrabserver
    around the move code, but after the grab server an update should be
    run and then a check for the existence of the window. Sigh. One more
    thing that I could fix if I wasn't so worried about locking up the
    server for ever.
    [FIXED. I've modified the code for resizing and moving to tolerate
     the window disappearing underneath them without complaint.]

68. Moves and resizes should do a global grab so that they can always
    get the pointer value even if a client is actively doing a grab
    at the time. (Perhaps a server grab is really needed. I think this
    would have the desired effect.)
    [FIXED. I can no longer reproduce this, although I didn't explicitly
     fix it. I assume other changes in the code fixed this.]

69. Configure requests do not take the current gravity into account.
    They should.
    [FIXED]

70. Something in the full colormap handling code can cause a core dump.
    I have no idea what yet, and it doesn't seem to happen often.
    Update: it appears to be a problem with InstallColormap getting
    a pointer to a defunct window. I am now running this with the zeroing
    memory allocator to help track it down.
    [FIXED. Tk window context was not getting properly deleted, causing
     the colormap installation to use an old pointer if an event arrived
     after deletion.]

71. Transient windows are titled. This should be switchable.
    [FIXED. Added "transientsTitled" resource to control if a clients
     transients are given a titlebar. This will allow per application
     control of this feature.]

71. The variable colormapwin is not always checked for null.
    [FIXED]

72. Left three lines to load new widget code out of stkwm.tcl.
    [FIXED]

73. The method of tracking geometry changes in the frame does not
    quite work correctly. Originally changes in the configuration
    of the frame where used to update the plug geometry information.
    However, this looses in two ways. First, the final plug width
    and height must be known in order for the computation to be
    correct, but this doesn't get set until the plug is configured,
    usually after the frame. I have hacked a correction to this
    by updating the geometry info also when the plug is configured.
    Second, the plug will not be configured until it is mapped.
    Thus we cannot look at the geometry of a plug that is changed
    until after it is mapped.
    [FIXED.  One way to fix this is to change the packer to finish its job
    even if windows are not yet mapped. I've implemented this, but
    I am NOT happy about it, because it means there is one more
    file I must change from the standard TK release.]

74. Colormap code was not checking for a null colormapPlug pointer.
    If you had overlapping windows on startup this would cause a core dump.
    [FIXED]

75. The num_protocols counter was not correctly initialized, this caused
    core dumps when checking protocols on windows that had none.
    [FIXED]

76. If another application has the global grab, then the window
    manager will fail to wait for the grab to be released.
    [FIXED. Substituted a new grab routine that loops on failure.
     This is polling, but I don't know a better way to detect a grab
     release under X.]

77. TK requires us to take actions like posting menus before grabbing
    the keyboard globally. This leaves open the possibility that a
    positioning notifier or menu will be posted but will remain inactive
    until the grab is released by another application.
    [FIXED.
     For the posting of the ".notifier" window I've found that posting
     the ".notifier" window initially off the screen works.
     I haven't tried to do anything similar with menus, and I'm
     not sure I can come up with an event sequence that should cause it
     to be a problem.]

78. If a window makes a map requests during the "update" in stkwm.tcl
    it will fail to have any defaults.
    [FIXED. Read in defaults before this update.]

79. If the user decoration code fails, then any window decorated
    with the default decoration will not be in the window list.
    [FIXED.]

80. If the window disappears at the right time in the placement
    procedure an error will occur.
    [FIXED? I've added a few checks into the map request handling
     code. I think I have all the cases now.]

82. There is still a race condition possible in the mapping of new
    windows. If the user initiates an event during the mapping process
    (since the map must execute a few updates) then there will be
    some loss of exclusion control. This is because moving, menus
    and such do not actually currently do exclusion control.
    [FIXED. Made all of the routines (move, resize, menus and map-requests)
     do complete exclusion control using the dispatch mechanism.]

83. The initial window shape is smaller than the final window
    in the positioning code.
    [FIXED.]

84. Wish windows fail to resize when the new size is smaller than
    the initial 200x200.
    [FIXED. This was a problem with gridding. I was setting the 
     base_width and height to the min_width and height as per ICCCM,
     but I should only have been doing it for windows that set the
     PResizeInc hint, since otherwise the grid was not being requested
     by the client.]

85. Property changes are not registering for some programs.
    [FIXED. For reasons I don't understand adding keyboard
     events and pointer motion events to the XSelectInput
     masks was disabling some property change propagation.
     It turns out I don't need the mask settings, so I just
     left them out.]

86. [Tom Tromey] On restart all decorations appear at the same time
    after a 5 second delay.
    [FIXED. Added an update so each decoration is displayed before
     the next one is drawn. I don't think this speeds things up,
     but it makes things appear smoother.]

87. [Tom Tromey] Xterm's with geometry 80x48+0-0 slowly crawl off the
    screen under repeated restarts.
    [FIXED. This was a problem in the initial placement of items with
     negative edge geometries. When creating a window the size must be
     fixed before the position can be fixed, and an update idletasks
     must intervene between them.]

88. [Tom Tromey] Sometimes title buttons are incorrectly colored when
    the window is active.
    [FIXED. This was a bug in tkFrame.c. I have a patch, now I need
     to find either a work around or include the patch.]

89. [Tom Tromey] "option readfile" should use "startupfile" priority.
    [FIXED. Also removed explicit reading of .Xdefaults file since
     TK does that anyway.]

90. [Tom Tromey] The WM_COLORMAP_WINDOWS property does not appear to
    be correctly tracked.
    [FIXED. Changes in the property on the focus window were not causing an
     install of the new colormaps. Furthermore, changes in the colormaps
     on target windows were not being tracked. This has also been fixed.]

91. [Tom Tromey] The placement outline is sometimes wrong.
    [FIXED. The same problem as was causing windows with negative geometries
    to be mis-placed was causing this.]

92. [Tuomas Lukka] XGrabKey and XGrabButton errors occur when
    a "tkwm grabevent" tries to do a grab on a button that does not
    exist on a particular X keyboard.
    [FIXED. These should have been returning a result but not setting
     the error flag.]

93. [Tuomas Lukka] XGrabServer failures were happening on some machines.
    [FIXED. There was a spurious error check in the core. XGrabServer
     cannot fail.]

95. Motif menu buttons still activate when the release happens
    outside the button.
    [FIXED. Used the standard TK bindings for the menu buttons.]

96. XGrabPointer can fail. Uses of "tkwm grabpointer" should loop on
    failure.
    [FIXED. Added in a looping procedure to catch this possibility.]

97. [Tuomas Lukka] Something seems to sometimes cause an "XUngrabServer"
    to be lost.
    [Perhaps the unwindProtect is not working correctly? Must check.]
    [FIXED? I've added catches just in case individual statements are failing
     in the protected branch causing later statements to fail. I must
     find out if this fixes the problem.]

98. [Tom Tromey] Initial placement should wait for the button release
    event before ungrabbing the pointer. Otherwise motion events after
    the button down, as well as the release get through to clients.
    [FIXED.]

99. There is still a possible error if the window disappears at the right
    time in the placement procedure. I must think about this carefully.
    [FIXED. Once more I think I've got this one nailed down. I've taken
     a different approach now. Instead of checking if the window exists
     all the time, I've added existance checks after each point that
     it can disappear and had the code terminate early in those cases.]

100. Resizing of windows without a grid set is not working correctly.
     If the grid is not present then the width_inc and height_inc
     seem to be inherited from the last window resized.
     [FIXED. Added check for empty grid parameters.]

101. Clients that change their grid without resizing get resized by
     the window manager. This should never happen.
     [FIXED. I had to rework the geometry management to get this fixed.
      I've found that I cannot have clients gridding information reflected
      into their frames since the clients gridding information can change
      in ways that the Tk toolkit cannot change its own gridding system.]

102. [Hume Smith] Some clients make circular group/transient lists.
     This causes an infinite loop.
     [FIXED. I've added loop checking to the traversal code.]

103. [Dan Wallach] Windows do not always know where they are.
     [FIXED. The problem was that in many (most) cases "tkwm sendconfig"
      was not followed by an "update idletasks" to force the send
      to occur.]
     
104. [Hume Smith] The "wm client" command in wish is causing a core dump
     in tkwm.
     [FIXED. The problem was the wm client property reading code.]

107. [Tom Tromey] Specifying a non-existent button in the button list
     for a title bar causes an enormous number of error messages.
     One would be enough.
     [FIXED. I've trapped all these error messages. Putting up an
      error dialog about creating a frame caused an infinite recursion
      of error messages as error dialogs are created and themselves cause
      errors.]

108. [Tom Tromey] The "constrained" option should apply to placement as well.
     [FIXED.]

112. [Eric Schenk] Unset a variable that was already being unset elsewhere.
     [FIXED.]

113. [Eric Schenk] Button bindings failed when there where spaces in the
     titles of a window.
     [FIXED.]
