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

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

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

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

- Configuration/Compilation
    * Fixed architecture detection on UltraSPARC-T1 systems.
    * Fixed compilation on embedded architectures when qreal is not double.
    * Compile on OpenBSD.

- Documentation
    * Completed documentation for "Implementing Atomic Operations",
      which is useful for people porting Qt to a new hardware architecture.

- Translations
    * Added a new unofficial Portuguese translation courtesy of Helder
      Correia.

- Qt Linguist
    * Made the columns in the phrasebook resizeable.

- lupdate
    * Fixed bug in the .pro parser of lupdate. It should accept backslashes.
    * Fixed a severe slowdown in lupdate. (~400x speedup.)
    * Fixed traversal of subdirectories.

- moc
    * Don't create trigraphs in the generated code for C++ casts.

- uic
    * Fixed a bug that generated excessive margins for Q3GroupBox.

Third party components
----------------------

- libpng

  * Security fix: Avoid null dereferences.

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

General improvements
--------------------

- Graphics View

    * Calling QGraphicsScene::update() without arguments now correctly
      updates the entire scene.
    * Changing the background brush in QGraphicsScene now correctly updates
      the entire scene
    * Fixed a crash in QGraphicsScene due to stale pointers in the BSP tree.
    * QGraphicsScene::createItemGroup() now allows you to create an empty
      group (previously caused an assert in debug mode).
    * Fixed rendering bugs with QGraphicsPixmapItem::offset().
    * Adding an item to a QGraphicsScene now always implicitly causes an
      update.
    * Fixed a crash caused by deleting a QGraphicsScene that is being viewed
      by a QGraphicsView.
    * Items with zero width or height (e.g., a horizontal or vertical line
      with a zero-width cosmetic pen) are now rendered correctly.
    * Fixed a crash in QGraphicsScene::destroyItemGroup(), and when removing
      items from a group.

- Item views
    * Fixed data loss in QTreeWidget, QTableWidget and QListWidget that
      occurred when performing a drag and drop copy operation on items
      containing data in custom roles.

    * Fixed signal emission bugs in QSqlQueryModel and QSqlTableModel that
      caused the view to contain invalid items when used with a
      QSortFilterProxyModel.

    * Fixed a bug in word-wrapped text that could cause all new-line
      characters, and the last line in string containing at least one
      newline character, to be removed.

    * Fixed bug in QListView where the last item of a batch was not always
      displayed.

- QAction
    * Fixed a possible crash when using alternate shortcuts on a QAction.

- QByteArray
    * Fixed a crash in toUpper().

- QCleanlooksStyle
    * Indeterminate progress bars are now correctly animated.

- QComboBox
    * Fixed broken case sensitive completion.
    * Changing the font on a QComboBox now changes the font on the popup as
      well.

- Q3TextEdit
    * Fixed regression where some shortcuts didn't work on Mac OS X.

- Q3Canvas
    * Fixed potential memory overrun when determining a clipping chunk.

- Q3Socket
    * Fixed unexpected remote disconnection bugs (also QTcpSocket).

- QFile
    * Performance enhancements in QFile::copy().
    * Allow reading past the previous end of the file if the file grows.
    * Reliably allow QFile::readLine() and QFile::readAll() to be used to
      read from stdin on all platforms.

- QFileDialog
    * Fixed crash that could occur when the filter began with ';;'.
    * Fixed assertion caused by calling setFilters() with an empty list.
    * Fixed problem with file entries not being laid out correctly.

- QGridLayout
    * Fixed bug in handling of fixed size spacers spanning multiple
      rows/columns

- QLayout
    * Fixed bug caused by setting minimumSize() and SizePolicy::Fixed on a
      widget that implements minimumSizeHint() but not sizeHint().

- QLineEdit
    * Fixed crash caused by moving the cursor over a QChar::LineSeparator
      in the text.

- QPainter
    * Fixed bug in QPainter::drawPoints() when using the raster paint engine
      which caused some points to be missing.
    * Removed memory leak in raster paint engine when drawing complex
      polygons/paths.

- QProcess
    * Fixed a crash that could occur when calling QProcess::waitForFinished()
      from inside a slot connected to a signal emitted by QProcess.
    * Fixed a race condition on Windows where QProcess::bytesToWrite() would
      return a short byte count.

- QTextDocument
    * Fixed find() with backward searches.
    * Match CSS style selector case insensitively.
    * Fixed HTML import for tables with missing cells and rowspan/colspan
      attributes. 

- QSortFilterProxyModel
    * Fixed a crash caused by calling filterChanged().
    * Fixed a crash caused by removing items from the source model.
    * Fixed a bug that could cause a model to enter an invalid state when
      filtering items in a hierarchy, causing items in a QTreeView to
      erroneously be collapsed.
    * Fixed a bug that could cause invalid items to be added when inserting
      new items to the source model.

- QSyntaxHighlighter
    * Fixed failing assertion that could occur when installing a syntax
      highlighter before the document has created a layout.

- QPluginLoader
    * Fixed compilation of Q_EXPORT_PLUGIN when used with templates.

- QTcpSocket
    * Fixed a bug where QTcpSocket would time out when connecting to a
      closed service on Windows.
    * Fixed a race condition when calling waitFor...() functions with a very
      short timeout value.
    * Fixed unexpected remote disconnect problems on Windows.
    * Improved the reliability of the waitFor...() functions with SOCKS5
      proxy support.

- QTextLayout
    * Fixed rendering of surrogate pairs and cursor navigation with them.

- QTextEdit
    * Fixed crash in QTextEdit::setExtraSelection() that could occur when
      used with null cursors.
    * Fixed scrollbar bug which could cause the bottom of the text to be
      unreachable.

- QTextStream
    * Fixed QTextStream::readLine() so it can be used reliably with stdin on
      all platforms, and updated the documentation to reflect this.

- QMacStyle
    * Ensured that tab bars are drawn correctly regardless of the font used.

- QMenuBar
    * Properly marked the "text heuristic matching" strings for translation.

- QMenu
    * Fixed incorrect scrolling on large menus on Mac OS X.

- QPlastiqueStyle
    * Ensured that indeterminate progress bars are now always animated and
      fixed a rendering bug.

- QPrinter
    * Fixed a bug on X11 that caused the printer to generate too many
      copies.
    * Fixed a bug in the PostScript driver that could cause invalid
      PostScript to be generated.

- QSqlRelationalTableModel
    * Ensured that the internal cache is cleared after
      QSqlRelationalTableModel::submitAll() is called. 

- QSqlDriver
    * Ensured that QSqlDriver::formatValue() doesn't cut off characters from
      field names.

- QTextTable
    * Removed false assertion when deleting the first row or column in a
      table.
    * Fixed crash when splitting cells in the rightmost column of a table.
    * Fixed issue where QTextTable::splitCells() would shift cells further
      down in the table.
    * Fixed crash in QTextTable::mergeCells() caused by merging an already
      merged cell.
    
- QToolTip
    * Fixed QToolTip sizes when used with HTML tags like <BR>.

- QUdpSocket
    * Fixed a busy-wait causing the event loop to spin when writing a
      datagram to an unbound port.
    * QUdpSocket now reliably emits readyRead() in connected mode.

- QUrl
    * Fixed a crash that would occur as a result of calling errorString() on
      an empty URL.

- SQL plugins
    * Prevent crashes in QSqlQuery after reopening a closed ODBC connection.
    * Prevent crash when retrieving binary data from ODBC.
    * The Interbase driver now returns a valid handle through
      QSqlDriver::handle().

- QMutex
    * Fixed race condition in QMutex::tryLock() that would prevent all
      other threads from acquiring the mutex

- QList
    * Fixed crash when modifying a QList that must be detached from a
      separate thread

- QWidget
    * Fixed case where a modal dialog could be stacked below its parent
      window when the dialog was shown first
    * Fixed an erroneous hideEvent() from being sent immediately after
      window creation
    * Fixed problem with missing text in QWidget::whatsThis().

- QWindowsStyle
    * Fixed a crash that could occur when deleting a QProgressBar after its
      style was changed.

- QVariant
    * Fixed assertion caused by streaming in a variant containing a float.

- QAbstractItemView
    * Fixed focus problem with cell widgets.

- QTableView
    * Fixed problem with context menus clearing the selections.

- QHeaderView
    * Fixed assertion that could occur when removing all sections when some
      sections had been moved.
    * Fixed a bug that could prevent the user from resizing the last 
      visible section if the "real" last section was invisible.

- QListView
    * Fixed crash when calling reset.

- QTableWidget
    * Fixed painting problem that could occur when rows were swapped.

- QTreeView
    * Fixed a crash that could appear when removing all the children of an
      item.

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

X11
---
    * Fixed detection of Type1 symbol fonts.
    * Fixed crash on exit in QSystemTrayIcon when QApplication is used
      as the parent.
    * Fixed animation GUI effects on tooltips, menus, and comboboxes.
    * Fixed crashes in threaded programs when Qt uses the Glib main
      loop.
    * Fixed bug where an empty LANG environment variable could prevent input
      of non-ASCII chars in Qt widgets.
    * Fixed leak of initial style created by QApplication after calling
      QApplication::setStyle().
    * Fixed erroneous event delivery to a widget that has been destroyed.
    * Prevent shortcuts for keypad arrow keys from being activated when
      Num Lock is on.
    * Fixed bug which caused incorrect drawing of subrectangles of bitmaps.
    * Fixed bug in rendering of the Bengali script.

Windows
-------
    * Fixed compilation with -no-stl.
    * Fixed compilation with Windows SDK for Vista.
    * Fixed an issue that could cause missing text when Cleartype was used.
    * Fixed the hot-spot locations for OpenHandCursor and CloseHandCursor.
    * Fixed infinite warning loop about adopted threads in applications with
      many threads.
    * Fixed assertion caused by hiding a child widget whose window has not
      yet been created.
    * Fixed QWindowsXPStyle so that it is possible to draw a
      QStyle::CE_DockWidgetTitle without having an actual instance of
      QDockWidget.
    * Fixed crash when drawing text with large font sizes.
    * Fixed support for the Khmer language.
    * Fixed incorrect reporting of frameGeometry() after a window is closed.
    * Fixed crash when handling spurious WM_CHAR from Remote Desktop Client.
    * Fixed crash in JPEG plugin while loading.
    * Fixed crash in QFileDialog::getExistingDirectory() when specifying
      a parent that has not been shown yet.

Mac OS X
--------
    * Fixed regression where dragging/copying Unicode text in Qt to another
      application would only export the non-Unicode version.
    * Fixed regression where releasing the mouse button would send two mouse
      releas events to a widget.
    * Fixed regression where the drop action would be reset after a native
      "DragLeave" event was received.
    * Wrapping a (non-Qt) window's content view and resizing before showing
      the window for the first time now works correctly.
    * Ensured that the content view is always created before we QWidgets are
      added to a window - this allows better integration with Cocoa apps.
    * Fixed regression where text/uri-list was inadvertently disabled for
      clipboards.
    * Fixed regression where setting the brushed metal style on a message
      box would show the label in a non-metallic style.
    * Fixed the open source binary package to have the correct definitions
      for development.

Qtopia Core
-----------
    * Fixed a data corruption bug in QDataStream on ARM processors where
      reading and writing doubles/qreals would be incompatible with streams
      on other platforms.
      Note: corrupt data streams generated with previous versions of Qtopia
      Core on ARM platforms cannot be read with this version.
    * Fixed a possible buffer overflow in the VNC driver.
    * Fixed a memory leak in the windowing system.
    * Fixed painting errors occuring with use of QT::WA_PaintOnScreen on
      certain screen configurations.
    * Improved performance when using a 16-bit brush as the background on a 
      16-bit screen.
    * Improved performance of 16-bit semi-transparent solid fills.
    * Fixed crash that could occur when saving a 16-bit image in BMP or PPM
      formats.
    * Fixed bug where window icons would not be shown in Plastique style.
    * Fixed bug in QWSServer::setMaxWindowRect() on rotated displays.
    * Fixed crash with normalized Unicode characters and QPF fonts.
    * Ensured that QWidget::minimumSize() does not become larger than the
      screen size.

