
The following are the bugs fixed in Smalltalk/V Windows 2.0


-  Made it more CUA complient by always processing the non-client
mouse event messages (i.e, menu & scrollbar).  In 1.1, the first mouse
click into non-client area only activated the window.

-  Fixed the scrolling, paging and thumbtrack problems in GraphPane.

-  Took out WsVisible style DialogTopPane>>defaultFrameStyle method.
This was done to speed up drawing of dialog boxes.  

-  Changed ScrollBar>>maximum: and >>minimum: method so that it checks
to see that the handle is not nil before calling the API.

-  Changed WinHandle>>atomToString: method so that the string buffer
is increased from 80 to 256.  This was done to accommodate longer DDE item
names.

-  Changed Menu>>popUpAt:in: method so that // operator is used instead
of /.  This fixes the problem where a popup menus in non 640x480 resolution
display sometimes produced walkbacks.

-  Added ListBox>>setHorizontalExtent: method and added WS_HSCROLL
style to ListBox>>defaultFrameStyle method.  This change allows horizontal
scrolling of listBox.  The user must still set the horizontal extent
to get a horizontal scrollbar in the ListBox.

-  String>>asFloat method was returning incorrect values in certain cases.
This has been fixed.

-  The Edit menu's menu items are now enabled and disabled according
to the state of the text selection.  (A "real" Undo feature has not been
implemented yet)

-  Popup menu events were not being handled properly in Windows 3.1.
    This has been fixed.

-  Changed RecordingPen>>drawSegment: method so that the DC is
    saved and restored in that method instead at RecordingPen>>openSegment
    and RecordingPen>>closeSegment.

-  ComboBox now sends #select event when it loses focus.

-  Removed FontRefCountTable class variable from Font class.
    It was not being used.

-  Changed Font>>initFontHandle method so that it does not
    manipulate SysFont global variable.

-  Changed ControlPane>>drawControl method so that the DC is saved before
    being set with DC from a WM message.

-  Changed selectIndex: method in ListBox, ComboBox and MultiSelectListBox
    to allow selection before the ApplicationWindow is opened.

-  Changed ListBox>>initialize method so that it does not set the curFont
    instance variable.

-  Added ListBox>>font: method to set the height of the ListBox to the font's
    height.

-  Made changes so that cursor turns into a I-beam when inside a
    EntryField or ComboBoxes (EntryField portion).

-  Removed GroupBox>>wmErasebackground: method.  This method was
    artificially creating an order dependency during Subpane creation.

-  For VPM compatibility reasons, renamed Bitmap>>saveBits private method
    to saveBitmap.

-  Changed Bitmap>>fromFile method to allow reading of  24 bits/pixel bitmaps.

-  Removed GDILibrary>>loadBitmap:fileName: method.  This API resides
    in UserLibrary.

-  Changed Windows>>wmMouseMove method so that when a point's x axis
    is 0 the y axis no longer erroneously report 0.

-  Changed Window>>close method to check to see if the property handle is
    non zero before unlocking and freeing.

-  Removed Window>>setCursor method.  It was a private method that
    was no longer being used.

-  Changed  TextSelection>>showSelection:to:with: methods to use ClrHighlight
    and ClrHighlighttext.  This change allows the text to be selected with the
    proper colors set in the Control Panel.

-  Added TextTool>>displaySelectedText:at: private method so that
    it calls extTextOut API for selecting text.  

-  Removed Window>>releaseOldProc method.  This was an obsolete
    method.

-  Changed ApplicationWindow>>validate method to hide the subpanes
    that are not zoomed in a zoomed TopPane.

-  In ApplicationWindow>>defaultFrameStyle and DialogTopPane>>
    defaultFrameStyle, tookOut out WsClipchildren style.  This should
    allow opening of windows to be slightly faster.

-  Took out self validate from Subpane>>buildWindow: method.  This was
    an obsolete method.

-  Second level subpanes were resizing incorrectly.  Changed it
    so that it resize based on the parent's client rect instead of
    parent's frame rect.

-  Changed the implementation of WinLong>>highHalf >>highHalf:
    and >>lowHalf >>lowHalf: methods so that it returns a ushort instead of
    short.

-  Changed the implementation of WinAddress to access using an
    offset of 1 instead of 0.   This was done to be compatible with V/PM's
    implementation of PMAddress.   Any code that directly accessed
    memory location at a WinAddress (i.e. WinAddress>at:) needs to
    be changed so that its offset is decreased by one.

-  Changed Directory>>freeDiskSpace method so that asLowerCase is
    applied to the drive character.

-  Directory>>current method has been changed to allocate 260 byte
    buffer instead of 64 byte buffer.

-  Changed FileHandle>>open:in: method so that it sends lopen:style:
    method instead of open:style: method.

-  Changed Directory>>extraDirNameFrom: method to use "bitAnd: 16r10"
    instead of  "= 16r10".

-  Changed DynamicLinkLibrary's "Types" global variables "handle" entry
    to 4 from 7.

-  Changed WinStructure>>uShortAtOffset:, WinStruct>>uShortAtOffset:put:
    methods so that it does not increase the offset by 1 if the contents is a
    WinAddress.  This was needed for Remote WinStructures.

-  Added Notifier>>initializeWindowHandles private method.  This method
    sets the window handles in the Notifier to nil. And it is call from
    SystemDictionary>>startUp method.

-  Changed WinEvents at 285 to nil instead of #wmChar:with:.  #wmChar:with:
    already existed at 258 (this is correct).

-  Changed the name of wmVScroll:with: method in SubPane, ControlPane,
    GraphPane,  & Window class to wmVscroll:with: method.  Also changed it in
    WinEvents.

-  Float>>printOn: method has been fixed.  Previously this method returned
    a string with one number precision after the decimal point.

-  Implemented ControlPane>>receiveAllWindowMessages method.
    To be compatible with VPM, now only ListBox and EditFields are
    MS Windows subclassed.  To subclass a MS Windows control,
    recieveAllWindowsMessages message must be sent during creation
    of a control.

-  Changed NotificationManager>>notify so that for all the pre-creation
    messages are sent to NewWindow.  Previously only WM_CREATE
    message was sent to NewWindow.

-  "File In" menu item in the "File" menu has been changed to
    "Install" menu item.

-  #loosingFocus event in SubPane>>supportedEvents has been changed
    to #losingFocus event.

-  Processor initialize has been moved from Notifier>>startRun to
    SystemDictionary>>startUp to fix a problem of forking a Process at
    startUp for a runtime application.

-  Changed NotificationManager so that CurrentEvents is copied before
    events are removed from it.

-  Fixed the constant folding bug in the Compiler.

-  KernelLibrary>>makeProcInstance:withInstance: method has been
    changed to return ulong instead of long.  DialogBox>>initialize has been
    changed because of this fix.

-  String>>fileName and >>fileExtension methods have been changed so
    that they do not pad it with extra spaces.

-  Changed FileHandle, File and Directory classes to support UNC file name.

-  Changed the Window subclasses to better handle errors from APIs.

-  Window>>wmMouseActivate method has been changed so that if the
    CUA flag is true, it does not discard the mouse event.

-  Creation of menu and subpanes has been moved from
    ApplicationWindow>>buildWindow: to ApplicationWindow>>wmCreate:with:
    method.

-  ApplicationWindow>>resize:repaint: method has been changed so that
    it uses aRectangle instead of 0@0 extent: aRectangle.

-  ApplicationWindow>>wmEraseBackground  method has been changed
    so that the background is not erased for minimized window.

-  WinAddress>>asInteger has been changed to use uLongAtOffset:0
    instead of at 1.

-  The ids of controls in dialog boxes (i.e. Prompter, FindReplaceDialog) have
    been changed to allow the "escape" key to cancel out of the dialog box.
    The following additional changes have been made:

-  Window>>getNextChildId method has been changed to enumerate the child
    ids starting from 101 instead of 1.

-  Added DrawnButton>>stretchToFit and >>fixedSize method to be
   compatible with VPM.

-  Changed ApplicationWindow>>buildWindow >>resizeWindow
    Window>>resizeWindow: SubPane>>resizeWindow: methods
    to use SwpNozorder flag for the setWindowPos message.
    This fixes the problem where the Z order was being swapped
    during creation of window.

-  Also added GroupPane>>wmNchittest:with: method to allow subpanes
    added after to GroupPane to receive the mouse messages.

-  Changed ApplicationWindow>>wmErasebkgnd:with: method so
    that it sets the background color during a WM_ERASEBACKGRND message.

-  Changed the implementation of FixedSizeCollection>>deepCopy to use
    "self objectDeepCopy" instead of "self shallowCopy".

-  Fixed the ComboBox bug of the drop down list box not closing when
    the parent window gets a click.

-  Fixed the following problem reported by the Windows debug messages.
    GlobalCompact with 0xFFFF.
    Property object not being freed before the property is freed.

-  Changed the WinAddress validity checking to use the VERW
    assembly instruction instead of GlobalHandle API.  This fixes a problem
    of accessing certain system addresses.

-  Added ApplicationWindow>>noSmalltalkMenuBar method.
    By sending this message, the ApplicationWindow subclass
    will not create the the default Smalltalk menu bar.  Menubar (i.e. File,
    Edit and Smalltalk menus)  will not be created.  By sending this
    message, the owner takes the responsibility for creating the menu bar
    upon reception of #menuBuilt event."
    Also added ViewManager>>noSmalltalkMenuBar and >>hasSmalltalkMenuBar
    methods.

-  Before letting a user delete a class, references to that class
    are checked. The user is warned if the class is referenced elsewhere.
    Because of the check for references, deleting a class is now slower.

-  Added GraphicsTool>>paletteToRgb: class method to obtain RGB
    value from a color palette index.

-  To be compatible with VPM, "isXXX" methods (e.g., isCharacter) have
    been either added or have been changed to public.

-  Float>>fromString: class method has been added.

-  Menu>>changeItem:label: method has been added.

-   NotificationManager>>selectorFor: method has been changed
    to accomodate WM messages greater than WinEvents size (1124)
    by processing messages in WinEventsExtra dictionary.
    For WM messages greater than WinEvent size, add the message
    to the WinEventsExtra dictionary, with the message number as the
    key and the selector as the value.

-  To be compatible with VPM, the following methods have been added
    to ByteArray:

    asParameter
        "Answer the receiver in a form suitable for passing
         as a parameter to a Win procedure call."

    asString
        "Answer a String whose contents are the
         bytes of the receiver."

    asWinAddress
        "Answer the receiver as a WinAddress."

    asWindowHandle
        "Answer the receiver as a WindowHandle."

    asWinHandle
        "Answer the receiver as a WinHandle."

    asWinLong
        "Answer the receiver as a WinLong."

    isNullHandle
        "Answer true if the receiver is all zeros."

-  Added horizontal scrollbar capability to ListBox.   Changed
    ControlDemo class to use the new horizontal scrollbar capability.

-  Added Bitmap>>fromOS2BitmapFile: method to allow reading of OS/2
    bitmaps.

-  Added WindowDialog class >>inDialogUnits method to allow conversion
    of  point (or rectangle) in pixel units into dialogUnits.

-  Added DialogBox>>queryTextAtIndex:inComboBox: and
    queryTextAtIndex:inListBox: methods to answer a string at index
    in listbox or combobox.

-  Added WinAddress>>asInteger private method to return a large
    positive integer

-  To speed up start up of Smalltalk, moved DynamicLinkLibrary
    clearCachedAddresses and File handle initialization code from
    SystemDictionary>>startUp method to SystemDictionary>>save method.

-  Added Window>>defaultBackColor and Window>>defaultForeColor class
    methods to answer the default background color and default foreground
    color of the system.  When Window>>foreColor or >>backColor returns
    nil (default), Window>>defaultBackColor and Window>>defaultForeColor
    methods should be used to get the RGB color value.

-  Added ByteArray>>asCstring method.

-  Font class implementation has been changed extensively. However,
the old public methods are still there, so any existing applications should
not 'break'.  The following new public methods have been added to the
Font class.

New public Font class methods

allFonts: graphicsMedium
        "Answer an array of all available fonts in the device
         identified by graphicsMedium."

chooseAPrinterFont
        "Open a dialog which lets the user choose a  screen font.
         Answer an instance of Font."

chooseAScreenFont
        "Open a dialog which lets the user choose a  screen font.
         Answer an instance of Font."

New public Font instance methods

charWidth: aCharacter graphicsMedium: aGraphicsMedium
        "Answer the width in pixels of aCharacter in aGraphicsMedium."

pointSize
        "Answer the point size of the Font.
         Font's point size indicates the height of the characters
         in 1/72 inch."

pointSize: anInteger graphicsMedium: aGraphicsMedium
        "sets the point size of the Font for aGraphicsMedium.
         Font's point size indicates the height of the characters
         in 1/72 inch."

stringWidth: aString graphicsMedium: aGraphicsMedium
        "Answer the aGraphicsMedium pixel width of aString using
         the receiver font."

Previous public Font class method made private

chooseAFont: aTitleString
        "Private - Obsolete method retained for compatibility.
            Use Font class>>chooseAScreenFont method instead.
            Open a dialog which lets the user choose a font.
         aTitleString is displayed as the title of the dialog.
         Answer an instance of Font."

Previous public Font instance method made private

  basePoint: aPoint
      "Private - Obsolete method retained for compatibility.
        base point can not be set since it can not be defined
        in the LOGFONT structure."

-  Because of the restriction imposed on by NLS/DBCS, the "sources.sml"
    file produced by Smalltalk>>compressSources methods is no longer
    compressed text.


