This file summarizes all changes made to Tk since version 1.0 was released on March 13, 1991. Changes that aren't backward compatible are marked specially. 3/16/91 (bug fix) Modified tkWindow.c to remove Tk's Tcl commands from the interpreter when the main window is deleted (otherwise there will be dangling pointers to the non-existent window). 3/16/91 (bug fix) Modified tkColor.c not to free black or white colors: some X servers get upset at this. 3/18/91 (bug fix) Modified tkShare.c to fix bug causing "DeleteGroup couldn't find group on shareList" panic. 3/18/91 (bug fix) Several changes to tkListbox.c and tkScrollbar.c to handle listboxes (and scrollbars) with zero total entries in them. 3/22/91 (bug fix) Fixed a few ='s in tkListbox.c that should be ==. 3/22/91 (bug fix) Fixed error in main.c that caused BadWindow errors in some cases where wish scripts invoke "destroy ." 3/23/91 (new feature) Added Tk_CancelIdleCall to remove Tk_DoWhenIdle handler. 3/23/91 (bug fix and new feature) Added -name option to main.c, made it more clever about choosing name (was always using the name "wish" on most Unix systems). 3/23/91 (new feature) Added TK_CONFIG_STRING option to Tk_ConfigureWidget, used it to malloc strings for various widget options that used to be Tk_Uid's (e.g. button text, message strings, etc.). Eliminates core leaks when values change in continuous non-repeating fashion. 3/29/91 (new feature) Added Tk_Preserve, Tk_Release, and Tk_EventuallyFree procedures to help manage widget records and avoid premature memory free-ing. 4/4/91 (bug fix) Fixed problem in tkWm.c where top-level window geometry wasn't tracking correctly when wm-induced size change also changed window position (e.g. menus wouldn't be displayed at the right places). 4/5/91 (new feature) Added "invoke" option to widget command for buttons, check buttons, and radio buttons. 4/5/91 (new feature) Added "unpack" option to "pack" command. 4/5/91 (bug fix) Changed tkPack.c to use new Tk_Preserve code and be more careful about window deletions that occur while repacking is in progress. 4/6/91 (bug fix) Major overhaul of deletion code in all widgets to use Tk_Preserve and Tk_Release. Should fix many problems. 4/6/91 (bug fix) Changed "winfo children" to generate correct lists when child names have embedded spaces. 4/6/91 (new feature) Added "screenheight" and "screenwidth" options to "winfo". 4/18/91 (bug fix) Binding mechanism didn't correctly handle very long %-substitutions in commands (e.g. long path names) and caused memory to be overwritten. Modified tkBind.c to fix. ---------------------- Release 1.1, 4/18/91 ------------------------- 4/19/91 (bug fix) Inconsistent ICCCM handling of coordinates of reparented windows causes windows to gradually walk south when moved or resized. Fixed tkWm.c to patch around the problem. ---------------------- Release 1.2, 4/24/91 ------------------------- 4/26/91 (new feature) Added -geometry and -display switches to wish. Also wrote wish manual entry. 5/3/91 (bug fix) Fixed bug in tkListbox.c that caused garbage to appear at right edge of window when strings were to large to fit in window. 5/3/91 (bug fix) Fixed bug in tkListbox.c where topIndex wasn't getting updated when elements were deleted: tended to cause errors in communication with scrollbars. 5/16/91 (bug fix) Fixed bug in tk3d.c, which caused core dumps when consecutive points in a polygon were the same (happened with some configurations of radio buttons, for example). 5/16/91 (bug fix) Fixed main.c to allow stdin to be redirected. 6/1/91 (bug fix) Make sure that pointers are never used after being freed. 6/15/91 (bug fix) Fixed bug in tkBind.c that caused current binding values to not always be printed correctly. 6/15/91 (bug fix) Make sure that interpreters are always unregistered when their main windows are deleted, and make wish delete the main window before exiting. 8/21/91 (misfeature correction) Automatically set source of window position to "user" in "wm geometry" command, unless it has been explicitly set to "program". 9/5/91 (bug fix) Modified option code to accept '#' as a comment character in .Xdefaults files, in addition to '!'. 9/10/91 (misfeature correction) Changed binding mechanism so that numeric %-sequences are output in decimal instead of hex. 9/19/91 (bug fix) Fixed bug in Tk_DoOneEvent(1) where it wasn't checking files and X connections properly so it missed events. 10/6/91 (new feature) Reorganized tkBind.c to provide generic "binding table" structure, which can be used to create bindings on items in canvases as well as windows. 10/6/91 (new feature) Upgraded buttons and menus to use new tracing code in Tcl 6.0. Allows radio buttons and check buttons to both set and clear themselves when associated variable changes. 10/17/91 (bug fix) Fixed 2 bugs in listboxes: accidentally advanced the selection when new entries were inserted in the listbox after the location of the selected item(s), and goofed up on redisplay if selected item was deleted and then selection was immediately lost. 10/27/91 (bug fix) "pack unpack" wasn't telling Tk that it no longer manages window; this led to core dumps in some situations. 10/31/91 (reorganization) Renamed manual entries so that they are no more than 14 characters in length. 10/31/91 (reorganization) Changed tk.h and tkInt.h so that tkInt.h doesn't needed to be included by tk.h. 11/3/91 (portability improvement) Eliminated use of "class" as a variable name, since it's a reserved word in C++. 11/7/91 (reorganization) Many changes to upgrade for Tcl 6.1 including use of Tcl hash tables instead of separate "Hash_" module. The "lib" subdirectory is no longer needed in Tk. ---------------------- Release 1.3, 11/7/91 ------------------------- 11/24/91 (bug fix) Fixed bug causing occasional errors if existing bindings are modified (FindSequence in tkBind.c forget to set *maskPtr). 11/24/91 (bug fix) Used wrong hash table in Tk_GetColorByValue. Could cause new entries to get created unnecessarily. 12/2/91 (bug fix) Changed "bind" code to put backslashes in front of special characters (e.g. [ or \) that appear in %-replacements, so that they can be parsed cleanly. 12/10/91 (bug fix) Manual entries had first lines that caused "man" program to try weird preprocessor. Added blank comment lines to fix problem. 1/2/92 (documentation cleanup) Changed manual entries for Tk_GetBitmap and the like to make it more clear that the argument must be a Tk_Uid and not a string. 1/2/92 (bug fix) Fixed problem where scrollbars that were very short or very narrow (too small to hold both arrows) could cause negative values in calls to XClearArea, which crashed some servers. 1/2/92 (bug fix) Fixed bug in TkMeasureChars occurring when maxChars is 0. Occasionally affected things like message window geometry. 1/3/92 (new feature) Added procedures Tk_GetJustify, Tk_GetAnchor, Tk_GetCapStyle, and Tk_GetJoinStyle, plus support for these things in Tk_ConfigureWidget. ---------------------- Release 1.4, 1/10/92 ------------------------- 1/12/92 (bug fix) TkMenubutton.c wasn't cleaning up mbPtr->varName properly during menubutton cleanup if an error occurred during menubutton creation. 1/19/92 (bug fix) Fixed off-by-one bug in tkListbox.c that caused scrollbars to display a slider that was too large. 2/10/92 (bug fix) Tk_CreateFileHandler didn't correctly handle case where new mask was specified for existing handler. 2/13/92 (bug fix) Tk_DeleteAllBindings wasn't correctly removing bindings from the pattern table: only did the removal for the first pattern in a pattern list. 2/15/92 (new feature) Added procedures Tk_DefineBitmap and Tk_SizeOfBitmap. Tk_GetBitmapFromData is now considered obsolete and probably shouldn't be used anymore. Tk_GetBitmapFromData is now implemented by calling Tk_DefineBitmap and Tk_GetBitmap. 2/15/92 (new feature) Added "curselection" and "select clear" options to widget command for listboxes. 2/15/92 (new feature) Added Tk_3DBorderColor procedure. 2/17/92 (relaxed limitations) Changed scrollbars so they no longer limit the slider position to lie within the object's range: can scroll off the end of an object, if the object permits it. Changed listboxes and entries to explicitly prevent viewing off the ends. Also relaxed listbox index checks so that out-of-range indices are automatically adjust to fit within the listbox range. 2/19/92 (bug fix) tkWindow.c tended to leave half-created windows around if a new window's name was found to be in use already. Fixed to clean them up. 2/22/92 (new feature) Added -anchor, -bitmap, -height, -textvariable, -width options to labels, buttons, check buttons, menu buttons, and radio buttons. This means that (a) size can be controlled better, (b) bitmaps can be displayed in any buttons, (c) the position of the text within the button can be controlled, and (d) a button can be made to display the value of a variable, continuously updating itself. Also changed -selector option so that if it's specified as an empty string then no selector is drawn for the button. 2/22/92 (new feature) Changed menus to support bitmaps in menu entries: added new -bitmap option for entries. 2/26/92 (bug fix) "after" command, when invoked with just one argument, called Tk_Sleep rather than registering a timer handler and looping on Tk_DoOneEvent. As a result, it caused the application to become non- responsive to X events during the sleep. Changed to use a Tk_DoOneEvent loop so that it is responsive. 2/26/92 (bug fix) Tk's main program didn't map the main window until after the startup script returned. Changed to map the window as a do-when-idle handler, so that scripts can cause the window to be mapped immediately with a call to "update" or "after". 2/28/92 (bug fix) "wm withdraw" wasn't working if invoked before window was originally mapped: window got mapped anyway. Fixed so that the window doesn't get mapped as long as it's withdrawn. 2/29/92 (new feature) Can use "focus none" to clear input focus. 2/29/92 (bug fix) Fixed tkEvent.c to generate SubstructureNotify events properly. These weren't being generated previously. 2/29/92 (bug fix) Fixed entries so that newline characters can be properly displayed (as `\x0a'). Had to change interface to TkDisplayChars in order to do this (added flags argument). 2/29/92 (bug fix) Change Tk not to update size and position of top-level windows directly during calls like Tk_ResizeWindow. Instead, wait until actual event is received. This makes updates happen at same time as callbacks. 3/6/92 (bug fix) TkMenubutton.c was dumping core when a menubutton was pressed at a time when there was no associated menu for the button. 3/6/92 (new feature) Added Tk script library directory with official Tk initialization file "tk.tcl". Other procedures used by Tk are in other files. Tk procedures and variables all have names starting with "tk_". Also added Wish startup script "wish.tcl", which sources both the Tk and Tcl startup scripts. This means that things like auto-loading and abbreviation expansion are now available in wish. Added new variables tk_library, tk_priv, and tk_version. 3/6/92 (new feature) It's now possible to set bindings for whole classes by using the class name in the bind command. For example, "bind Button {puts stdout Hi!}" will cause a mesage to be printed whenever any mouse button is entered. Can also use "all" to set bindings for all widgets. Widget-specific bindings override class bindings which override "all" bindings. 3/6/92 (reorganization) Changed buttons (all flavors) and listboxes to eliminate all hard-wired behavior. Instead, default behavior is set by class bindings in tk.tcl. Also set up class bindings for menus, menubuttons, and entries, which previously had no default behavior at all. Scrollbars and scales still have hard-wired behavior that can't be overridden. 3/7/92 (look-and-feel change) Changed listboxes and entries and menus to use button 2 for scanning instead of button 3. This is more consistent with the official Motif use of button 2 for dragging. 3/10/92 (new features) Added more options to "winfo" command: screencells, screendepth, screenmmheight, screenmmwidth, and screenvisual. 3/13/92 (bug fix) Event sharing mechanism (tkShare.c) wasn't checking to see whether window was mapped before sharing events with it. 3/16/92 (bug fix) Tk_SetInternalBorderWidth was passing wrong window to geometry-management procedures, causing core-dumps when menu buttons had their border widths changed. 3/16/92 (bug fix) Menus were setting their geometry directory rather than using Tk_GeometryRequest mechanism. 3/17/92 (new feature) Added -cursor option to all widgets to set the active cursor for the widget. Also added TK_CONFIG_ACTIVE_CURSOR configure type. 3/18/92 (new feature) Implemented generalized screen coordinates to allow resolution-independent specification in many cases (but pixel- based coordinates are still OK). Added Tk_GetScreenMM(), Tk_GetPixels(), new configure types TK_CONFIG_SCREEN_MM and TK_CONFIG_PIXELS. Changed widgets to use this new configure types wherever possible (a few of the more complex cases still haven't been taken care of yet). Added "pixels" and "fpixels" options to "winfo" command. 3/18/92 (new feature) First cut at canvas widgets is done and part of the official Tk now. Canvases display text and structured graphics, and allow you to bind commands to events related to the text and graphics. 3/21/92 (new feature) Added new "place" command. It implements a new geometry manager that provides fixed placement, rubber-sheet placement, and combinations of the two. Eliminated the commands "move", "resize", and "map" that were provided by main.c but never officially supported; the placer provides all of this functionality. 3/23/92 (bug fix) Fixed bug in tkWm.c where top-level windows were occasionally not being given the right size. The problem occurred when a string of resizes happened all in a row (such as deleting all the windows in an application and then recreating them). 3/23/92 (new feature) Added Tk_CoordsToWindow procedure and "winfo containing" command. These may be used to locate the window containing a given point. 3/28/92 (new feature) Added "-exportselection" option to listboxes, so that listbox selection need not necessarily be the X selection. 4/12/92 (bug fix) Changed menu buttons to store name of menubutton in the associated variable, rather than the name of the menu. This is necessary in order to allow several menu buttons to share the same menu. *** POTENTIAL INCOMPATIBILITY *** 4/12/92 (bug fix) Fixed core dump that occurred in tkError.c when removing the first error record from the error list. 4/15/92 (bug fix) Fixed bug in tkBind.c that prevented event specifications from being processed correctly: the "1" was treated as a button name rather than a keysym. 4/18/92 (new feature) Added Tk_DefineCursor and Tk_UndefineCursor procedures. 4/18/92 (new feature) Major revision to listboxes. Can now scroll and scan in both x and y, plus -exporselection option allows selection not to be exported. The "view" widget command has been replaced by "xview" and "yview", and the "scan" widget command has a new syntax. *** POTENTIAL INCOMPATIBILITY *** 4/18/92 (new feature) Added -exportselection option to entries, so you can select whether you want the entry selection to be the X selection or not. 4/24/92 (new features) Added TK_CONFIG_CUSTOM type to Tk_ConfigureWidget, plus added new flags TK_CONFIG_NULL_OK, TK_CONFIG_DONT_SET_DEFAULT, and TK_CONFIG_OPTION_SPECIFIED. Several other new types, such as TK_CONFIG_CAP_STYLE, were also added as part of implementing canvases. 4/29/92 (bug fix) Changed "-selector" default for menus to have separate values for mono and color. 4/30/92 (bug fix) Fixed bug in tkListbox.c where it occasionally generated bogus scroll commands (last index less than first). 4/30/92 (reorganization) Moved demos directory to "library/demos". ---------------------- Release 2.0, 5/1/92 ------------------------- 5/2/92 (bug fix) Fixed problem in tkListbox.c where it was doing too many redisplays after repeated insertions. Also reduced number of invocations of scrollbar commands. 5/7/92 (portability improvement) Changed main.c not to use TK_EXCEPTION flag; it isn't needed and it causes problems on some systems. 5/9/92 (bug fix) Plugged core leaks in tkListbox.c and tkBind.c 5/9/92 (bug fix) TkBind.c was accidentally deleting bindings during attempts to print non-existent bindings. 5/11/92 (bug fix) Maximum name length for applications (name used in "send" commands) was too short (only 20); increased to 1000. Also fixed bug related to over-long names that caused core dumps. 5/13/92 (bug fix) tkShare.c was using a dangling pointer if a share group was deleted as a side-effect of a shared event. 5/13/92 (bug fix) Various initialization and core leak problems in tkGC.c, tkSend.c, tkMenu.c, tkEvent.c, tkCanvas.c, tkCanvPoly.c, tkCanvLine.c, tkListbox.c, tkEntry.c. 5/13/92 (bug fix) Empty entries could be scanned off the left edge, displaying a garbage character. 5/13/92 (bug fix) Fixed a few problems with window manager interactions, such as tendency for windows to spontaneously shrink in size. By no means are all of the problems fixed, though. 5/13/92 (performance optimization) Changed Tk_GeometryRequest not to invoke geometry manager unless requested size has changed. ---------------------- Release 2.1, 5/14/92 ------------------------- 5/1/92 (new features) Added flags like TK_IDLE_EVENTS to Tk_DoWhenIdle, plus added "idletasks" option to "update" command. Tk_DoWhenIdle arguments look different now, but the change should be upward-compatible. 5/17/92 (new feature/bug fix) Added support for VisibilityNotify events to the "bind" command. For some reason they weren't supported previuosly. 5/17/92 (new feature) Added "tkwait" command. 5/17/92 (new feature) Added "grab" command. 5/17/92 (new feature) Added "-width" option to messages. Also changed messages to use the computed (i.e. desired) line length when displaying, not the actual width of the window. 5/17/92 (bug fixes) Did some more fiddling with tkWm.c in the hopes of improving window manager interactions. Now there won't be more than one configure request outstanding to the wm at a time. 5/17/92 (bug fix) Arrowheads on canvas lines weren't being translated or scaled correctly. 5/20/92 (bug fix) Page-mode scrolling didn't work correctly for canvases (wrong windowUnits was passed to scrollbars). 5/20/92 (bug fix) Changed scrollbars not to lose highlight when pointer leaves window with button down. Also changed redisplay to double-buffer for smoother redraws. 5/21/92 (new feature) Added "gray50" and "gray25" as predefined bitmaps. 5/22/92 (new feature) Buttons can now be disabled using the "-state" and "-disabledforeground configuration options. The "activate" and "deactivate" widget commands for buttons are now obsolete and will go away soon. Please change Tcl scripts not to use them. 5/23/92 (new feature) Entries can now be disabled using the "-state" config option. Also improved class bindings for entries to keep the cursor visible in the window when operations occur. Also made slight improvements in the way redisplay is done. 5/23/92 (new feature) Added "-textvariable" option to entries so that the text in an entry can be tied to the value of a global variable in a fashion similar to buttons. 5/27/92 (new feature) Added "-textvariable" and "-anchor" options to messages. 5/28/92 (new feature) Added "-padx" and "-pady" and "-underline" options to menubuttons. 5/28/92 (feature change) Changed "-width" and "-height" options on all flavors of buttons and menubuttons so that they are orthogonal to "-padx" and "-pady". It used to be that -width overrode -padx (no padding). Now they accumulate. 5/29/92 (new feature) Added "-disabledforeground" option to menus and all flavors of buttons (can specify color for disabled things rather than just using stipple to gray out). 5/29/92 (new features) Added many new options to menu entries: -activebackground, -background, -font, -state, -underline. The "disable" and "enable" widget commands for menus are now obsolete and will go away soon. Please change Tcl scripts not to use them. 5/29/92 (new features) Added "atom" and "atomname" options to "winfo" command. 5/29/92 (new feature) Wrote tk_listboxSingleSelect procedure, which can be used to change listbox behavior so that only a single item is selected at once. 6/1/92 (new feature) Added new modifier names "Meta" and "Alt" for "bind" command. 6/3/92 (new feature) Added "winfo toplevel" command. 6/3/92 (new feature) Made several changes for greater Motif compliance, including: - menu retention if you click and release in the menu button, - keyboard traversal of menus (see traversal.man) - no widget flashing if you set $tk_strictMotif to 1 6/15/92 (bug fix) Fixed problem in tkBind.c where command string for a binding could get reallocated while the command was being executed (e.g. bindings that delete or change themselves). 6/15/92 (bug fix) Don't allow "tabWidth" field to become zero in tkFont.c: can cause core dumps for fonts that don't enough information to compute tab widths. 6/19/92 (bug fix) Fixed bug in binding mechanism that caused structure- related events to be reported both to the correct window and its parent. 7/14/92 (bug fix) Changed tkColor.c not to free colors for visual types StaticGray or StaticColor. 7/15/92 (new feature) Text widgets now exist. They display any number of lines of text with a variety of display formats, and include hypertext facilities. See the manual page for details. 7/20/92 (bug fix) If a top-level window was put in the iconic state to begin with, it could be deiconified with "wm deiconify .foo" until it had first been deiconified by hand from the window manager. Tk was getting confused and thought the window was mapped when it wasn't. 7/29/92 (bug fix) Don't permit rectangles or ovals to have zero-sized dimensions. Round up to at least one pixel. 7/29/92 (new features) Major upgrade to canvases: - new item types: arc, window, bitmap - added Bezier spline support for lines and polygons - rectangles and ovals now center their outlines on the shape, rather than drawing them entirely inside the shape - new "coords" and "bbox" widget commands - new "-tags" option for all item types. - new "-confine" option to prevent scrolling off edge of canvas. 8/6/92 (new feature) Added "-width" and "-height" options to frames. The "-geometry" option is now obsolete and should be removed from Tcl scripts: it may go away in the future. 8/7/92 (bug fix) Error messages in Tk_ParseArgv were sometimes including the option name where they should have included its value. ---------------------- Release 2.2, 8/7/92 ------------------------- 8/7/92 (bug fix) Changed tkCanvas.c to be more conservative in the area it passes to XCopyArea. 8/8/92 (bug fix) Fixed bug in tkTextDisp.c that sometimes caused core dumps when text views changed (e.g. typing return on last line of screen). 8/8/92 (bug fix) Fixed bug in menu.tcl that caused errors when using keyboard to traverse over separator menue entries. 8/10/92 (bug fix) Changed to use OPEN_MAX instead of MAX_FD to compute maximum # of open files. 8/10/92 (bug fix) Canvases weren't updating scrollbars on window size changes. They also weren't recentering canvases on window size changes. 8/10/92 (bug fix) There were still a few places where commands were being invoked at local level instead of global level (e.g. commands associated with buttons and menu entries). 8/10/92 (bug fix) TkBind.c used to ignore explicit shift modifiers for all keys (i.e. was treated the same as ). Modified to allow explicit request for shift modifier, like . 8/13/92 (feature change) Changed default fonts to request "Adobe" fonts explicitly. 8/16/92 (bug fixes) Modified tkCanvArc.c and tkTrig.c to increase slightly the bounding boxes for arcs, in order to make sure that proper redisplay occurs when arcs are moved (little turds were getting left behind). 8/16/92 (bug fix) Modified tkCanvas.c not to redraw at all if the redisplay area is off the screen. Also, only do a background clear for the portion of the redraw area that is on-screen. Also, reduced size of off-screen pixmaps used for redisplaying, which speeds up redisplay in some cases. 8/19/92 (bug fix) Canvases that were taller than wide were not being redisplayed properly. 8/20/92 (new feature) Added Tk_CreateGenericHandler procedure for trapping all X events (useful for tracing, watching non-Tk windows, etc.). 8/21/92 (bug fix) Widgets weren't always being notified when they got the focus back again (the problem had to do with grabs and menus in particular). 8/21/92 (new feature) Added "-state" option to scale widgets. 8/22/92 (new feature) Changed tkBitmap.c to allow tilde-substitution to occur in bitmap file names.