Qt 4.3.2 is a bug-fix release. It maintains both forward and backward
compatibility (source and binary) with Qt 4.3.0 and Qt 4.3.1.

The Qt version 4.3 series is binary compatible with the 4.2.x, 4.1.x and
4.0.x series. Applications compiled for Qt 4.0, 4.1 or 4.2 will continue to
run with Qt 4.3.

****************************************************************************
*                           General                                        *
****************************************************************************

General Improvements
--------------------

- Legal
    * This version adds the Academic Free License 3.0, Artistic License 2.0,
      Zope Public License 2.1 and Eclipse Public License to the GPL
      Exception for developers using the Open Source Edition of Qt.
      See the GPL Exception Version 1.1 page in the documentation
      for more information.

Tools
-----

- Designer
    * [175822] Fixed incorrect behavior of the widget editing mode that
      could occur when a form was resized.
    * [174797] Fixed a crash that could occur when several commands were
      redone in one go.

Build System
------------

    * Enabled MSVC project generator for the Qt Open Source edition.
    * Ensured that the QMAKE_CC and QMAKE_CXX variables are not defined in
      the Xcode project generator to allow distributed (distcc) builds to
      work again.
    * [165183] Make DESTDIR work again in the Xcode generator.
    * Fixed a bug in escape_expand() that could cause text to be corrupted.
    * Updated the compiler notes for version 10.0.026 of the Intel C++
      Compiler for Linux. Precompiled header support has been fixed in
      this version of the compiler, so the -no-pch workaround is no longer
      needed. Note that there is still one outstanding bug in the 64-bit
      compiler that requires configuring and building Qt with -debug.
    * Updated the compiler notes for HP-UX platforms and compilers.
    * Introduced support for 32-bit builds on HP-UXi Itanium: hpuxi-acc-32.
    * [163661] Fixed the dependency generator for ActiveQt server projects
      and certain custom compilers
    * [169756] Fixed mocinclude.tmp usage for Visual Studio 6.0 project
      files for cases where the length of the includes exceeds the amount
      allowed on the command line.
    * [166407] Fixed the generated target rules when using YACCSOURCES.
    * [156948] Ensured that QTPLUGIN libraries come before the Qt libraries
      on the link line.
    * Ensured that support for libtiff is not built if Qt is configured
      without zlib support.
    * [172629] Ensured that syncqt does not generate zero-size master
      include files for modules that are not found.
    * Fixed generation of dependencies for EXTRA_TARGETS.
    * [159113] Ensured that the description for the Post Link build step in
      VS 2003 does not contain any \n characters.

I18n
----
    * Fixed a crash in lupdate/lrelease that could occur if the XML parser
      reported an error.

****************************************************************************
*                           Library                                        *
****************************************************************************

General Improvements
--------------------

- Qt Script
    * QScriptEngine::evaluate() no longer throws a syntax error in the case
      where the script contains no actual statements.
    * [175714] Fixed parsing of octal numbers on Windows and Mac OS X.

- Style Sheets
    * QMainWindow now respects the background-image style property.
    * [171858] Ensured that QPushButton uses the correct color when the
      text-align property is set.
    * Fixed various bugs in QMenu styling.
    * [168286] Fixed a bug that prevented the background from being clipped
      correctly when the border-radius and background-clip properties were
      defined.
    * Fixed a QComboBox styling bug where the popup would show an extra row
      when a style sheet was used.
    * [177168] Fixed a memory leak where QStyleSheetStyle is never
      destroyed.
    * [172315] Fixed a stack-overflow when using the isActiveWindow
      property as a selector.

- Text rendering
    * [168625] Fixed rendering of text with perspective transforms on X11
      and Qtopia Core.
    * [173792] Fixed transformed rendering of non-scalable/bitmap Freetype
      glyphs.

- QAbstractItemView
    * [168493] Fixed drag and drop regression when a parent item in a tree
      doesn't allow item to be dropped on it.
    * [174848] Fixed a crash that could occur if the row currently being
      edited was removed.

- QCalendarWidget
    * [171532] Fixed keyboard navigation (pressing "w" doesn't select the
      "Wed" cell anymore).
    * [173852] Fixed SingleLetterDayNames mode for the Chinese language.

- QColorDialog
    * [153436] Fixed a crash in QColorDialog that could occur when choosing
      a color in the Gray colorspace.

- QColumnView
    * Ensured that selectAll() selects all items in cases where the
      selection range contained multiple items.
    * [170751] Fixed incorrect selection behavior caused by clicking on a
      previously selected folder.
    * [170753] Prevented items from being reselected on deselection in some
      cases.
    * [170753] Ensured that the full path is selected when passing an index
      to select.
    * [170753] Fixed a bug that could occur when deselecting an item that
      caused its parent to be deselected.

- QCoreGraphicsPaintEngine
    * [170352] Fixed aliased strokes that were drawn 1 pixel too far to the
      left on Mac OS X versions < 10.4.
    * [172006] Fixed point drawing with a scaled painter on Mac OS X.

- QDataWidgetMapper
    * [172427] Fixed a crash that could occur when submitting data from the
      mapped widget to the model.

- QDateTimeEdit
    * [118867] Fixed a bug that prevented valid values from being entered
      when certain range restrictions were applied.
    * [171920] Fixed a bug with parsing long day names.

- QDir
    * [176078] Fixed a crash that could occur when entering directories with
      very long path entries.

- QDirIterator
    * [176078] Fixed a crash that could occur when entering directories with
      very long path entries.

- QDockWidget
    * [174249] Fixed bug where it was possible to dock into a minimized
      QMainWindow.

- QFile
    * [175022] Fix regression in handle() on Windows.

- QFileDialog
    * Fixed possible deadlock.
    * Ensured that selection changed signals are reconnected when setting a
      filter on a dialog.
    * [171158] Fixed a crash that could occur when using the Forward button
      to navigate into a folder that was deleted.
    * [166786] (Windows) Fixed bug that prevented some files from being
      shown in certain cases.
    * [165289] (Windows) Fixed issue that caused UNC paths to be ignored
      when used as initial paths for a file dialog.
    * [140539] (Windows) Dialog no longer accesses floppy drives
      automatically when launched.

- QFontDatabase
    * [176450] Added some missing tr() calls and made all strings
      localizable.

- QFSFileEngine
    * [177363] Fixed a bug in fileTime() that caused the time returned to
      depend on whether or not it was called during a Daylight Saving Time
      period.

- QGLPixelBuffer
    * [179143] (Windows) Fixed a memory leak that would occur when a
      QGLPixelBuffer was deleted. This would appear as a slowdown in
      performance to the user.

- QGLWidget
    * [169131] Fixed an issue with renderPixmap() where text drawn with
      renderText() was clipped to the size of widget, not the resulting
      pixmap.
    * [175513] Fixed an issue with renderText() which would cause artifacts
      when bitmap fonts were used.
    * [172474] (Windows) Fixed an issue with disappearing text when using
      renderText() together with renderPixmap().
    * [173944] (Mac OS X) Fixed a crash that could occur when requesting a
      GL context with an overlay.

- QGraphicsItem
    * [174299] Fixed and improved bounding rect calculations for most
      standard items.

- QGraphicsScene
    * [174450] Flat items are now rendered correctly also when NoIndex is
      set.

- QGraphicsTextItem
    * [174429] This item now respects QGraphicsItem::ItemClipsParentToShape.

- QGraphicsView
    * (X11) A workaround has been applied to resolve random clipping errors
      that would sometimes leave trailing artifacts and horizontal/vertical
      white lines in the viewport.

- QHeaderView
    * [178483] Prevented crash that could occur when recomputing the layout
      under certain conditions.

- QHttp
    * [176822] Fixed a bug that caused POST requests to submit an empty body
      after a proxy authentication request.
    * [176403] QHttp no longer resets proxy settings on sockets set with
      QHttp::setSocket() (regression from 4.2.3).
    * [175170] Prevent live lock when response ends with a stray '\r'.
    * [172763] Fixed a bug that caused QHttp to ask the proxy server to
      connect to the wrong address when in SSL (non-caching) mode.
    * [172775] Fixed the emission of the done() signal under some conditions
      (mostly SSL only).

- QImage
    * [176831] Fixed a bug that caused conversions to Format_RGB16 to give
      incorrect colors.
    * [169908] Fixed a crash that could occur when reading 4 bits per pixel
      uncompressed BMP images.

- QItemDelegate
    * [173969] QDoubleSpinBox editors now allow negative input.
    * [179119] Item checkboxes were rendered without a margin.

- QLabel
    * Fixed a crash that could occur when changing the contents of a label
      in a slot connected to the linkActivated() signal.

- QLayout
    * Fixed a performance regression from Qt 4.2 related to the introduction
      of QStyle::layoutSpacing().

- QLibrary
    * [178304] Fixed a bug that caused a crash if QLibrary::errorString()
      was called before QLibrary had a file name associated with it.

- QListView
    * [270837] Fixed assert that could occur when setting a root index with
      no children in icon mode.

- QMainWindow
    * [175479] Fixed unified toolbar handling on Mac OS X to prevent
      assertions in the layout engine.
    * [174575] Several crashes fixed.

- QMdiArea
    * [173391] (Windows) Fixed bug where a subWindowActivated() signal was
      not emitted when the top-level window was minimized.
    * [173628] Fixed bug that could cause an endless resize loop when using
      Qt::ScrollBarAsNeeded as the scroll bar policy.

- QMdiSubWindow
    * [176769] Fixed bug where the title bar font was not updated on
      QEvent::FontChange.
    * [173087] Ensured that double-clicking the system menu closes the
      window.
    * [173363] Fixed bug where the title bar was not immediately updated
      after changing the window title.

- QMenu
    * [111348] QMenu now takes focus with the QPopupMenuReason.
    * [176201] Fixed possible crash when clearing the menu from a triggered
      signal.

- QPainter
    * [168621] Fixed an offset bug in drawing with perspective transforms.
    * [172017] (X11 and OpenGL) Fixed drawing of non-cosmetic points with
      the FlatCap cap style.
    * [175010] Fixed some bugs related to dash offsets.
    * [170517] Fixed issue with missing tab stops when painting to a
      printer.

- QPainterPath
    * Fixed the behavior of addText() when used with italic fonts.
    * [178515] Fixed QPainterPath::pointAtPercent() to work correctly on
      line segments in a path.

- QPicture
    * [168621] Ensured that the correct scale is used when rendering to a
      device with different x and y resolutions.

- QPixmap
    * Ensure that the proper color space is used in QPixmap::grabWindow() on
      Mac OS X.

- QPlastiqueStyle
    * [174104] Fixed a regression in Plastique that caused spin boxes to
      have incorrect heights.

- QRasterPaintEngine
    * [169997] Fixed aliased rendering of complex paths with a large number
      of subpaths.
    * [174914] Fixed use of QPainter::setOpacity() when drawing a pixmap
      into a 16-bit buffer.
    * [177919] Fixed a problem with drawing bitmaps.
    * [177654] (Windows) Fixed an issue with transformed bitmaps being
      returned as pixmaps.

- QSqlQuery
    * [173710] Fixed a bug that caused value() to return null-variants
      instead of real values after re-executing a prepared query.

- QSqlRelationalTableModel
    * [176374] Fixed an unfortunate change in 4.3.0. Display column names
      were aliased to prevent duplicate column names in records in order to
      fix a bug in insertRecord().
      However all display columns were always aliased - even when not
      necessary. From now on, display column names will only be aliased when
      there are name clashes, and only the conflicting columns will be
      aliased.

- QSqlTableModel
    * [170783] Fixed a bug that caused empty rows to be displayed in a
      QTableView when a new model was set on the view. This was caused by
      QSqlTableModel emitting the rowsAboutToBeInserted() and rowsInserted()
      signals even when the new model was empty.

- QSslSocket
    * [177198] Fixed the emission of the proxyAuthenticationRequired()
      signal.
    * [174625] Ensured that only one attempt is made to resolve OpenSSL
      symbols.
    * [173734] Removed two memory leaks.
    * [172285] (Windows) Fixed link error that occurred when Qt was built
      as a static library with OpenSSL enabled.

- QSvgGenerator
    * [167921] Fixed a rounding error; improved precision.
    * [167921] Allow rendering to a device that's not open; warn if the
      device is not writable.
    * [167921] Fixed a bug that caused QSvgGenerator to confuse 'cm' units
      with 'mm' units.

- QSvgRenderer
    * [172550] Fixed incorrect linear gradient parsing for certain SVGs.
    * [175651] Fixed a crash that could occur when loading SVGs with
      undefined URLs.

- QTableView
    * [171128] Fixed painting problems caused by deleting hidden rows.
    * [175462] Fixed a bug where the region for selection spanning items was
      calculated incorrectly.

- QTcpSocket
    * Fixed a crash that could occur when using SOCKS5 proxy before
      constructing a QCoreApplication.
    * [174517] (Windows) Prevented stalling when connecting to offline
      hosts.

- QTextBrowser
    * [173945] Fixed bug that could prevent scrolling to an anchor in an
      HTML file from working successfully.

- QTextEdit
    * [171130] Fixed bug that could occur when appending text lists to a
      document, causing the first list element to be treated as normal text
      instead of a list element.
    * [172367] Fixed a bug that caused the result of setPlainText() to use
      HTML attributes if preceded by a call to setHtml().
    * [173574] Fixed a bug that prevented floating image links from being
      clickable.
    * [174276] Fixed resizing performance in cases where wrapping is
      disabled.
    * [172646] Fixed a bug that caused leading spaces in marked up text to
      be lost when the text was copied and pasted.

- QTextLayout
    * Fixed a regression in the line breaking algorithm that lead to wrong
      results for justified text.

- QTextStream
    * [174516] (Windows) Fixed a bug in readLine() when reading "\r\r\n"
      from devices opened in QIODevice::Text mode.

- QToolBar
    * [270967] Fixed the behavior of floating toolbars.

- QTreeView
    * [171947] Fixed a bug that prevented alternate colors in an inactive
      QTreeView from being painted with the correct inactive palette role.
    * Prevented a number of possible crashes that could occur when there are
      pending changes.
    * [177165] Fixed a bug that caused minimum column widths to become
      independent of the width of the text in the header.
    * [177945] (Mac OS X) Fixed a crash that could occur when dragging over
      an empty region.
    * [174437] Fixed a bug that made it possible to interactively change
      the check state of an item, even if it was disabled.
    * [172426] Fixed a segmentation fault in QModelIndex that would occur
      when showing QTreeView with QSortFilterProxyModel and delayed layout
      changes were pending.

- QTreeWidget
    * [174396] Fixed an issue that could cause setItemExpanded() to fail.
    * [172876] Ensured that itemBelow() and itemAbove() return correct
      values.
    * [171271] Fixed a possible crash caused by updating items too quickly.

- QUtf8Codec
    * [175794] Fixed an off-by-one buffer overflow bug.

- QWidget
    * [157496] (Windows) Fixed a memory leak in setWindowIcon().
    * [175114] Fixed issue with missing update after hiding a child of a
      hidden widget.
    * [176455] Fixed a regression that prevented a parent layout from being
      invalidated in certain situations if the widget had a fixed size.

- QWizard
    * [177716] Ensured that the commit button is enabled and disabled
      correctly according to QWizardPage::isComplete().

- QX11PaintEngine
    * [173977] Fixed drawing of tiled bitmaps into a bitmap when XRender is
      used.
    * [175481] Fixed a crash that could occur when performing complex
      transformations with a QRegion.

- Q3Action
    * [175536] Fixed a formatting error in the tool tip string
      representation of actions with shortcuts.

- Q3ButtonGroup
    * [177677] Fixed a application freeze that could occur when resetting
      the ID of a button inside a button group.

- Q3FileDialog
    * [165470] Fixed broken scrolling behavior that occurred after toggling
      between detail/list view mode.

- Q3Header
    * [176202] Fixed memory leak when replacing icons using setLabel().


****************************************************************************
*                          Tools                                           *
****************************************************************************

Build System
------------

- Q3ToolBar
    * [176525] Ensured that the tool buttons of a vertical tool bar are
      center-aligned instead of left-aligned.

I18n
----
    * Fix crash in lupdate/lrelease that occured if the xml parser threw an error.

Linguist
--------

    * [276076] Let Linguist show existing translations to other languages
      as "auxillary sources" 


****************************************************************************
*                           Library                                        *
****************************************************************************


****************************************************************************
*                          Database Drivers                                *
****************************************************************************

- Interbase driver
    * [175144] Fixed a build issue that prevented the QIBASE driver from
      being built at the same time as the QODBC driver if Firebird header
      files older than v2.0 were used.
    * [177530] Fixed a regression introduced in Qt 4.3.0 that broke stored
      procedure support for Interbase/Firebird. When executing a procedure
      without parameters, the values were not retrievable.

****************************************************************************
*                               Examples                                   *
****************************************************************************

- Draggable Text Example
    * Fixed usability bugs.

- Torrent Client Example
    * Several stability fixes have been applied.

- Ported Asteroids Example
    * Modifications to significantly improve performance.

- Ported Canvas Example
    * [139392] Prevented a crash that could occur when adding items after
      shrinking the canvas to zero width and zero height.

- Secure Socket Example
    * [173550] Usability fixes.

****************************************************************************
*                      Platform Specific Changes                           *
****************************************************************************

X11
---
    * [169366] Fixed intermittent program hangs in the 64-bit PowerPC
      implementation used on AIX.
    * [176192] Fixed the behavior of show() followed by move() to correctly
      place the window when called before the event loop is running.
    * [133870] Fixed crashes in the 64-bit PowerPC implementation used
      on Linux.
    * [177143] Fixed a bug where the last activated QShortcut would be
      incorrectly repeated when pressing a key with no KeySym defined.
    * [171224] Fix copy and paste of non-ASCII text from Qt 3 to Qt 4
      applications.
    * Applied a workaround for a bug in gcc 3.4.2 that would cause 64-bit,
      bootstrapped applications to crash on Solaris.
    * [170792] Fixed subpixel anti-aliasing of fonts across X11
      server/clients with different endianness.

Windows
-------
    * [172621] Fixed an issue that caused large pixmaps to be printed
      incorrectly.
    * [170000, 171239, 173213] Fixed several issues with printing that
      resulted in single and multipage printing being garbled.
    * [168642] Fixed an issue with text disappearing when printing.
    * [175517] Fixed a crash that could occur when calling setNumCopies() on
      an invalid/non-existing printer.
    * [173219] Fixed an issue that caused fonts to be incorrectly scaled
      beyond 64 point font sizes.
    * [276527] Fixed a memory leak in QWindowsVistaStyle.

Mac OS X
--------
    * Note for Leopard pre-release builds: Qt 4.3.x applications running on
      the August Leopard pre-release (build 9A527) will not show any windows
      because of a regression in the Carbon library. This has been addressed
      for a future OS X release. In the meantime, if you *must* test your
      application against this Leopard build, please contact us.
    * [178551] Fixed a regression that made it impossible to deliver mouse
      move events to other widgets after a double-click on a widget that was
      immediately hidden as a result of the double-click event.
    * [172475] Ensured that OpenGL top-level widgets are not repainted when
      another, independent, top-level widget is resized.
    * Ensured that the maximized bit is removed when a window is resized by
      user interaction.
    * [170000] Fixed an issue that caused QPrinter::newPage() to incorrectly
      reset the current QPainter state.
    * [178531] Fixed an OpenGL text rendering issue that could cause garbled
      text.
    * [171173] Fixed a crash at application exit that could occur if
      accessibility features had been used.
    * [175164] Fixed a regression where font base lines for labels,
      checkboxes and radio buttons were not properly aligned.
    * [173007] Fixed a regression that prevented qt_mac_set_native_menubar()
      from working.
    * [130809] Ensured that bold fonts are used correctly when generating
      PDFs.
    * [164962] Improved support for Mac drawers in QMainWindow.

Qtopia Core
-----------
    * Ensured that the font database cache is preserved across QWS server
      restarts.
    * Made some start-up time improvements for the server process.
    * [272527] Fixed a bug in the internal crash handler that released
      resources in some non-fatal incidents.
    * [169569] Fixed a bug that caused uninitialized data to be blitted to
      the screen when a window was shown and resized before the first paint
      event.
    * [274291] Added support for setting the QT_QWS_FONTDIR environment
      variable to set the font installation path.
    * [174264] Fixed synchronization of QDirectPainter::startPainting() to
      be able to guarantee that QDirectPainter::allocatedRegion() returns
      the correct result.
    * [175994] Fixed missing updates in parent and sibling widgets when
      using the QWindowSurface::buffer() and QWindowSurface::flush()
      mechanism to paint outside a paint event.
    * [170488] Implemented true synchronous behavior when creating a
      QDirectPainter with the ReservedSynchronous flag.
    * [275284] Fixed implementation of the Hybrid OpenGL integration.
    * [178269] Fixed loading of the VNC screen driver when compiled as a
      plugin.
    * [178261] Fixed loading of the Transformed screen driver when compiled
      as a plugin.
    * [276651] Fixed mouse calibration in some configurations when using the
      tslib mouse driver.
    * [173037] Fixed re-entrancy problem that could cause
      QClipboard::mimeData() to block in some situations.
    * [174076] Added the QWS_CONNECTION_TIMEOUT environment variable to
      allow the time out to be customized for client applications connecting
      to the QWS server.
    * [167661] Added support to enable some "broken" BMP images to be
      rendered correctly.
    * [176445] Added support for the Glib event loop; this is disabled by
      default.
    * Added livelock protection: events from the QWS server can no longer
      starve local timer events or posted events.
