1.7.2
-----

New features:

  - New events and event handling facilities:

    - Support for multiple mouse buttons. The mouse_down and
      mouse_up events now have a 'button' attribute.
  
    - Views can define methods to handle mouse_drag and mouse_up
      events as an alternative to using track_mouse().
    
    - New mouse events: mouse_enter, mouse_leave.
    
    See "Mouse Events" under the "Event Handling" topic for a
    discussion of the new event features.
  
  - Improved alignment of different control types when they
    are laid out by place_row().
  
  - New file dialog functions for requesting multiple files
    and requesting old and new directories.
  
  - New Application properties: open_file_types, save_file_type,
      file_type

Enhancements:

  - Changed Gtk implementation of file dialogs to use newer
    widgets, and implemented file type filtering.
  
  - Tidied up the APIs of FileRef and DirRef, and made them
    immutable.
  
  - Cocoa: Slider in discrete mode now only calls action when
    the value changes, instead of whenever the mouse is dragged.
  
  - Cocoa: Undo and Redo supported in TextFields.
  
  - Cocoa: File open requests sent to a running application
    from the Finder are handled.
  
  - Cocoa: Expanded BlobEdit example to demonstrate
      - resource handling
      - building an application using py2app, with file and
        application icons and launching from the Finder by
        opening an associated file.

API changes:

  - Application.make_new_document() and make_file_document()
    abstract methods collapsed into a single make_document()
    method.
  
  - You should no longer call new_cmd() from your application's
    __init__. Instead, do this in your implementation of
    Application.open_app() if needed.

Bug fixes:

  - Frames did not work.

  - Error in the installation instructions in the README file
    corrected.
  
  - Cocoa: Attempting to create a Font with an unsupported
    combination of attributes now results in fallback to the
    application font instead of a crash.
  
  - Cocoa, Gtk: Canvas.xxx_arc() methods did not work.
  
  - Gtk: Stroking an unclosed path did not work.
  
  - Cocoa: Return/Enter in single-line text field was not
    propagated to containing components.
  
  - Setup.py did not install the standard cursor resources.
  
  - Documentation of alert functions adjusted (caution_alert
    removed, stop_alert added).
  
  - Cocoa: Drawing text with a foreground colour other than
    black did not work.
  
  - Gtk: Fixed glitches in selection handling when switching
    focus between TextFields.
  
  - Gtk: Text can no longer be copied out of a password
    entry field.
  
  - Cocoa: Edit menu commands did not work in a Cocoa-defined
    dialog (e.g. save file dialog).
  
  - Cocoa: Custom cursor of a ScrollableView now appears only in
    the content area, instead of over the scroll bars as well.
  
  - Cocoa: Update the window change dot when document need saving.


1.7.1
-----

New features:

  - Slider control.
  
  - run() convenience function, equivalent to application().run().

  - Geometry.rects_intersect() function.

Enhancements:

  - Files given on the command line will be opened when run() is
    called.
  
  - BlobEdit example application now demonstrates use of the
    update_rect parameter to View.draw().

Bug fixes:

  - Disabled a debugging statement that was inadvertently left on
    in Cursor.__init__.

  - Changed the package name in setup.py to something more meaningful
    than 'foo'.


1.7
---

New features:

  - OpenGL: DisplayList class for managing display lists,
    analogous to the Texture class.
  
  - Cursor class and 'cursor' property of Views.
  
  - Facilities for locating resource files associated with the
    application.

Modifications:

  - Cocoa: More informative error message produced when an application
    is run with python instead of pythonw.
  
  - Cocoa: View.track_mouse() now allows Tasks to run while the mouse is
    being tracked.
  
  - Cocoa: Exceptions occurring during the firing of a Task are propagated
    to the main event loop for handling.
  
  - Documentation added for class Task.
  
  - OpenGL: API for context sharing has been changed. Instead of passing one
    GLView or GLPixmap as the 'share' argument to the constructor of another,
    there is now a class GL.ShareGroup which is passed to a GLView or GLPixmap
    constructor as 'share_group'.
  
  - GL.Texture instances now deallocate associated OpenGL resources
    when they are no longer referenced.
  
  - The 'binary' attribute of class Document now defaults to true. If false,
    the document's file is opened for reading in universal newlines mode.
  
  - Cocoa: Setting the Macintosh creator and type code of a file using a
    FileRef and FileType is now implemented.
  
  - RadioGroups are now iterable, so they can be used directly in the
    place_row() and place_column() methods of a Container.

Bug fixes:

  - Cocoa: Getting the extent property of a ScrollableView did not work.
  
  - Cocoa: Worked around a PyObjC bug that was causing Tasks to leak memory.
  
  - Cocoa: Request New File dialog with a file type having a Macintosh
    type code did not work.

1.6.1
-----

Bug fixes:

  - Mouse down event in a GLView caused a crash.
  
  - Canvas methods fill_poly() and stroke_poly() didn't work. Added
    a test for these.


1.6
---

Implementation changes:

  - The Macintosh implementation has been completely rewritten to
    use Cocoa instead of Carbon. The Carbon version is no longer
    supported.

API changes:

  There are some backward-incompatible changes to the API in this
  version. Apologies if this causes inconvenience, but I feel it's
  important to get the API right while there's still a chance.

  - A ScrollableView class has been introduced which encapsulates all
    details of scrolling. The View class is no longer scrollable.
    The ScrollFrame class has been removed.
  
  - View.draw() is now passed a second parameter indicating the
    rectangle needing to be drawn.
  
  - Canvas.frame_arc() and Canvas.fill_arc() only support circular
    arcs, and take a centre and radius instead of a rectangle.
  
  - Menu constructor now takes a single parameter containing a list
    of item descriptors, instead of taking each descriptor as a
    separate argument.
  
  - The Application.std_menu_bar property has been removed. Use the new
    StdMenus.basic_menus() function instead.
  
  - The visible property and the show() and hide() methods are now
    only defined for Windows, not Components in general.

Behaviour changes:

  - ModalDialog.dismiss() also hides the dialog.
  
  - Setting TextField.selection also makes the text field the target.
  
  - TextField.select_all() also makes the text field the target.

New features:

  - FileType class for platform-specific file type metadata
  
  - Window.auto_position property
  
  - Alpha channel support added to API (not fully implemented
    on all platforms yet).
  
  - New Canvas methods: stroke_rect(), stroke_arc(), stroke_oval(),
    stroke_poly()
  
  - New OpenGL-related classes: GLConfig, GLPixmap, Texture
  
  - Key names for function keys added
  
  - Frame class (general-purpose plain vanilla Container)
  
  - Enhanced facilities for creating and modifying menus (still under
    development):
  
    - StdMenus module to hold stuff related to standard menus
    
    - MenuList class with facilities for finding menus by command
    
    - Menu class can have items added to it after construction
    
    See the new doc section "Customising the Standard Menu Bar" for
    more information.
  
  - The BlobEdit example application has been improved. You can now
    get rid of unwanted blobs by shift-clicking on them.


1.5.3 (not released)
-----

Bug fixes:

  - Modal dialogs can now be dismissed with None as the return value.
  
  - Mouse events in a GLView were being reported in the coordinate
    system of the view's container rather than the view itself.
  
  - Menu items were not being disabled and unchecked before menu
    setup.
   
  - The list of objects observing a Model is now kept outside of
    the model object, to make pickling of models easier.
  
  - Mac: Shift & option menu command key modifiers did not work.
  
  - Mac: Setting the width or height of a view's extent to zero caused a
    crash when calculating scroll bar values.
  
  - Mac: Reading the font property of a Canvas did not work.
  
  - Mac: Setting the selection of a TextField did not work.
  
  - Mac: Font, colour and justification settings of controls interacted
    in strange ways.

Enhancements:

  - update() method added to View and GLView for immediate redrawing.
  
  - ModalDialog.dismiss() now hides the dialog.


1.5.2 (not released)
-----

Modifications:

  - GLView.with_context() now returns the return value of the supplied
    function.
  
  - Application.quit_cmd() now destroys all windows before exiting
    the event loop (previously only those belonging to a document
    were destroyed).


1.5.1
-----

Bug fixes:

  - Menu item groups did not work.
  
  - Mac: Labels were not updated properly on changing the text property.
  
  - Mac: Setup script failed when Pyrex was not available.

New examples:

  - Tests/08-menu.py now includes an example of using a menu item group.

1.5
---

New features:

  - OpenGL view component added.


1.4
---

New features:

  - Image class for loading and drawing RGB images.
  
  - Pixmap class for offscreen drawing.
  
  - Containers now have a shrink_wrap() method to facilitate
    bottom-up component layout strategies. See class Frame.

Bug fixes:

  - Access to 'text' property of TextField in password mode didn't work.
  
  - TextField not refreshed properly when 'text' property changed.
  
  - Distutils script did not install subdirectories of the GUI package.

API changes:

  - 'password' property of TextField is now initialize-only.
