Qt 4.5.1 is a bug-fix release. It maintains both forward and backward
compatibility (source and binary) with Qt 4.5.0.  For more details,
refer to the online documentation included in this distribution. The
documentation is also available online:

  http://qt.nokia.com/doc/4.5

The Qt version 4.5 series is binary compatible with the 4.4.x series.
Applications compiled for 4.4 will continue to run with 4.5.

Some of the changes listed in this file include issue tracking numbers
corresponding to tasks in the Task Tracker:

  http://qt.nokia.com/developer/task-tracker

Each of these identifiers can be entered in the task tracker to obtain more
information about a particular change.

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

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

- Documentation and Examples
   * Added printing feature for the Spreadsheet demo.
   * [245675] Clarified the differences between QItemDelegate and
     QStyledItemDelegate.
   * [248752] Marked QPrintDialog::printer(), setPrinter() and addButton()
     as Unix only functions, part of Qt3Support.

- Embedded Dialogs demo
   * [246517] Fixed warnings and bugs in hover handling on Mac OS X


Optimizations
-------------

- Graphics View Framework has been optimized in several areas
   * Improved the performance of QGraphicsItem::clipPath().
   * Improved the performance of QGraphicsItem::setPos().
   * Improved the performance of QGraphicsItem::effectiveOpacity().
   * Improved the performance of QGrahicsScene::items(*).
   * Improved handling of updates.
   * Reduced the number of floating point operations.
   * Reduced QVariant overhead.

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


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

- QAbstractItemModel
   * Clarified some warning messages printed if the model is invalid.

- QAbstractEventDispatcher
   * [248805] Duplicate timerids could occur if a timer is running while the
     QObject is moved to another thread, stopping timers from working.

- QAbstractSocket
   * [192037] Emit the disconnected signal only if we were connected before.

- QAccessible
   * [221731] Fixed a bug where the accessibility plugin could crash if
     there was an "&" at the end or spin forever if a label had a sequence of
     "&&".
   * [241161] Fixed a bug in browsing menus with the keyboard.

- QAtomicInt
   * [216492] Fixed compilation on 64-bit PowerPC machines with gcc 4.3.

- QAuthenticator
   * [237979] Fixed implementation of md5-sess.

- QByteArray
   * [246233] QByteArray::fromHex() fails with input of size 1.

- QColorDialog
   * [247349] Fixed a bug causing the wrong alpha value to be returned.

- QCombobox
   * [248094] Fixed scrollbar from appearing when not required.

- QCompleter
   * [246056] Fixed an assertion failure in setCompletionPrefix().
   * [250064] Fixed a regression in focus policy propagation.

- QtConcurrent
   * [244718] Reduced the number of calls to QThread::idealThreadCount().

- QDirIterator
   * [247645] Fixed a bug that may loose all cached data inside QFileInfo.

- QFile
   * [244485] Renaming a file does not change QFile::fileName().
   * [244500] QFile::rename() does not always return false when the method
     fails

- QFileInfo
   * [205244] Return valid file info also for relative UNC paths.

- QFileDialog
   * [221323] Fixed a bug in QFileDialog's programmatical file selection.
   * [248332] QFileDialog is slow after visiting a large directory.
   * [250194] Fixed an issue with QFileDialog and QSortFilterProxyModel
     index mapping.

- QGLFramebufferObject
   * Framebuffer object extension resolution now works with OpenGL/ES 2.0.

- QGraphicsItem
   * Fixed a slow down regression in QGraphicsItem::ItemCoordinateCache.
   * [247890] Cached QGraphicsItems are not updated if update() is called
     when they are hidden.
   * [250272] Fixed a crash that could occur when an item is deleted but
     it does not get removed from the sceneeventfilters.

- QGraphicsGridLayout
   * [242472] Fixed a bug where the calculation of the maximum width of a
     column was incorrect.

- QGraphicsScene
   * [243707] Fixed a crash when adding a child before a parent to the
     scene.

- QGraphicsView
   * [245766] Rubber Band drag mode does not update correctly when
     scrolling.

- QGraphicsWidget
   * [246215] Fixed a regression where we could cache the wrong size hint
     because we called the virtual sizeHint() from the constructor.

- QHttp
   * Compile fixes for QT_BEGIN_NAMESPACE being in the wrong place in some
     private headers.
   * [208445] Cancel request upon receiving unknown authentication method.

- QHostAddress
   * [247330] Fixed compilation on MinGW by adding a missing QPair include.

- QLocalSocket
   * Fixed a bug that would cause QLocalSocket to disconnect 30 seconds
     after a succesful delayed connection on UNIX.

- QMacStyle
   * Adjusted the opacity value for popups.
   * [248769] Fixed a regression where QMacStyle would only draw tabs when
     passed a QStyleOptionTabV3.

- QMainWindow
   * [248048] Fixed a regression that would cause tooltips to disappear when
     using the unified toolbar.

- QMetaType
   * [248890] The detailed description of QMetaType no longer contradicts
     the documentation of QMetaType::type()

- QMutex
   * Fixed a performance regression for contended mutexes as reported on the
     qt4-preview-feedback list.

- QPainter
   * Compile fixes for OpenGL paint engine on OpenGL/ES 1.1 CommonLite and
     OpenGL/ES 1.0.
   * [246573] Fixed a very slow stroking of paths in the X11 paint engine.
   * [247083] Fixed the scale applied to antialiased cosmetic pens in X11
     paint engine.
   * [247492] Fixed a rendering bug in the raster paint engine causing
   * [247505] Fixed missing fills of rectangles with negative width/height
     in raster paint engine.
     one-pixel offset when drawing premultiplied ARGB32 images on RGB16
     images.
   * [249490] Fixed one-pixel offset between stroke and fills of ellipses in
     the X11 paint engine.
   * [249628] Fixed a crash in OpenGL paint engine when filling using
     Qt::NoBrush.


- QPixmap
   * [249175] Fixed QPixmap::fromImage() of monochrome images to result in
     black/white pixels and not transparent/white pixels.

- QProcess
   * [247865] Fixed a crash when calling QProcess::start() and
     startDetached() with an empty program string.

- QScrollBar
   * [247985] Stylesheet: added the feature to style scrollbar menus.

- QSharedPointer
   * [246843] Fixed a crash caused by using QSharedPointer in global statics.

- QSortFilterProxyModel
   * [247867] Properly sort when calling appendRows().
   * [248868] Re-sort when the model is reset if dynamicSort is enabled.
   * [248868] Fixed QSortFilterProxyModel::sort() if dynamicSort was disabled.

- QSSlSocket
   * [245668] Set also protocol, verifyMode and verifyDepth in
     setSslConfiguration().

- QString
   * [249517] Fixed a regression in replace(int, int, QChar) when the string
     is empty.

- QStyleSheetStyle
   * Improved support for setting background and foreground roles in styles
     such as the text color in a combo box popup on Mac and Cleanlooks, or
     the background of QScrollBar.
   * Fixed a crash that occured while styling the title bar of a QMdiArea.
   * [188195] Fixed the background of QAbstractScrollArea losing its color
     if styled with pseudo-class.
   * [246542] Fixed a bug in QToolButton::hover{ color:.... }.

- QThread
   * [249997] Added documentation indicating that the priority set by the
     programmer may be ignored, for example on Linux.

- QTreeView
   * Fixed a crash that may occur when events are processed immediately
     after a QSortFilterProxyModel is invalidated.
   * [246025] Fixed auto-expand that occured when quickly collapsing an item
     after clicking on a child.
   * [248163] Fixed a possible crash in the paintEvent() when spans are used.
   * [248805] Calling QTreeView::sortByColumn() programmatically was not
     working if manual sorting was disabled.

- QWidget
   * [250388] Fixed a potential crash in QWidget::scroll() when using the
     raster graphics system.

- QWidget
   * [246852] Improved handling of WindowMaximizeButtonHint for widgets with
     layouts.

-QLocale
   * String-to-number conversion functions will now ignore trailing and
     leading whitespaces in all locales as documented.

- QWizard
   * [248107] Fixed a bug on Windows Vista causing the Back button to
     connect to the back() signal twice.

- Q3ListView
   * [248689] Fixed a bug in Q3ListView that would not update under certain
     conditions.

- QtWebKit
   * Fixed a bug in cookie handling (WebKit Bugzilla 24062, Benjamin Meyer).
   * Fixed a bug in calling from JavaScript into NPAPI plugins on Windows.
   * Fixed the updating state of WebActions (Erik Bunce)
   * Fixed a bug in HTML 5 Canvas clearRect() (Dirk Schulze)
   * Fixed the theming of text fields with KDE 4 Oxygen style (Zack Rusin)
   * Fixed path fill styles (Zack Rusin)
   * Fixed pre-edit text handling with input methods.
   * [248643] Fixed compiling with the "-pedantic" compile option.

- QSqlTableModel
   * Made setTable() try and use the database's letter case (uppercase/
     lowercase)  of the given tablename.
   * [189093] QSqlTableModel did not handle updates when one of the fields
     had a NULL value.

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

   * Fixed the DB2 driver returning a double field as empty.
   * Fixed a memory leak in the DB2 driver.
   * Fixed the DB2 driver not quoting table/field names properly.
   * Fixed an issue with ODBC & FreeTDS not accepting quotes in statements.
   * Fixed a bug in the sqlite2 driver not returning false on failing to
     execute a statement.
   * PrecisionPolicy now works in the oracle driver.
   * Fixed a bug in the ODBC driver returning a list of tables when
     requested.
   * Fixed Interbase retrieving scale/precision information on numeric/
     decimal fields.
   * Stopped drivers from quoting again when escapeIdentifier is called
     twice.
   * Fixed a bug in the sqlite2 driver not quoting fields correctly.
   * [232769] Fixed a memory overflow issue on bound out strings in ODBC
     Driver
   * [249059] Fixed a bug that handled QPSQL datetime/time fields with
     negative timezone offsets incorrectly.

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

Qt for Linux/X11
----------------

   * Ensured proper resetting for input contexts when switching between
     multiple input context plugins.
   * Input methods preedit strings are now reset properly when user switches
     focus without commiting a string.
   * Unicode conversion functions will handle Latin-1 character set only if
     they are used before a QCoreApplication/QApplication is constructed.
   * Improved handling of failed unicode conversion.
   * Fixed clipboard handling when the user manually creates an instance of
     the QDesktopWidget.
   * [226048] Ensured that the QDesktopWidget::resized() signal is emitted
     properly when a new screen appears or the screen geometry is changed
     without affecting the whole desktop's geometry.
   * [232632] Fixed a bug in reparenting widgets to a difference X11 screen.
   * [241888] The background of the drag-n-drop cursor is now respected,
     according to the stylesheet.
   * [244337] Improved input method handling when a widget's native window
     id is recreated.
   * [244607] Current focus widget is properly set and input method is
     properly initialized when showing a toplevel widget that accepts
     keyboard input.

- Phonon/GStreamer
   * [233188] Fixed a problem where the seek slider reset to 0 while being
     dragged.
   * [244259] Fixed a problem where the backend failed to indicate an error
     when the streaming failed.
   * [246097] Added support for the MediaController interface to allow audio
     CD playback.
   * [246189] Fixed a problem where the backend failed to correctly escape
     certain file names casuing playback to not start.


- QGtkStyle
   * The system palette is no longer strictly forced. Also improved behavior
     related to system theme changes.
   * Fixed palette and styling issues with the background color of combo box
     popups.
   * [238196] Allowed middle click to set scrollbar position, following GTK+
     behavior.
   * [239829] Disabled alt-key navigation for QGtkStyle following GTK+
     behavior.
   * [247653] Fixed a compilation issue on Solaris.
   * [249363] QFrame is now styled as a GtkScrolledWindow.

- Font rendering
   * Improved performance of subpixel antialiased text rendering by using a
     mask in the calls to XRender's text compositing function.
   * [248387] Properly respect the font config LCD filter settings for
     subpixel antialiased text rendering when Freetype's native subpixel
     rendering is disabled.
   * [248498] Fix garbled rendering of subpixel antialiased text when using
     Freetype's native subpixel rendering for vertical subpixel layouts.
   * [248644] Fall back to Qt's subpixel rendering if Freetype's subpixel
     rendering was available at compile-time but not at run-time.

- QEventDispatcherGlib
   * Event posted to a thread before it is started are not processed until
     others events are posted.

- QWidget
   * [213512] Fixed a bug that caused wrong clipping when using the
     Qt::WA_PaintOutsidePaintEvent attribute.


Qt for Windows
--------------

   * [240891] Corrected the focus behavior of native file dialogs, when an
     application has multiple toplevel widgets.
   * [243583] Improved drag-and-drop handling when switching mouse buttons
     quickly.
   * [244875] The system menu will now be shown for a fullscreen  window.
   * [245330] Fixed a bug that caused mouse inputs to be ignored on modal
     dialogs, when shown from an ActiveQt control.
   * [249576] Fixed a crash when using a combobox with Qt::NoFocus.


- QCoreApplication
   * [247401] Fixed a bug that caused a restarted timer to fire too early,
     resulting in QtWebKit's Javascript consuming 100% CPU on Windows.
- QWindowsXPStyle
   * [248036] Fixed an issue where tool buttons were hovering incorrectly
     when disabled.

- QWidget
   * [248391] Fixed a bug that made it impossible to dynamically switch from
     QPainter-based graphics to native graphics API and back.


Qt for Mac OS X
---------------

   * Fixed a crash when showing a widget that is a modal window but has no
     parent.
   * Added QSysInfo::MV_10_6 as an enum to test against.
   * Various compile fixes for the preliminary supported Snow Leopard.
   * The uninstall-qt.py script included in the binary package no longer
     complains about removing itself multiple times.
-  * Improved the documentation for how qt_mac_set_dock_menu() works.
   * Fixed an issue with the focus frame's transparency as it was difficult
     to use the QWidget with stylesheets.
   * [223525] Fixed a crash in the MacMainWindow Demo.
   * [248803] Ensured that two dialogs shown at the same time will both not
     have visible default buttons.

- QDesktopWidget
   * [244004] Properly support multiple screens with different sizes.

- QDialog
   * [195904] Parent dialog is displayed on top of its modal child.
   * [218980] Modeless dialogs should be stacked above normal windows.
   * [239155] QDialog(foo, Qt::Sheet) with QComboBox has non-native
     behavior.

- QFileDialog
   * [219844] Fixed a crash caused by QFileDialog::getOpenFileName()'s
     search buttons (native version).
   * [225705] QFileDialog::getSaveFileName()'s filter does not display
     correctly.

- QMenu
   * [228017] Ensured that QMenu closes when expanding a system menu.

- QTestLib
   * Activate the test application when launched from the command line.

- Event system
   * [210912] Fixed a bug where ShowEvent not sent when reshowing a window
     after it was minimized.

- macdeployqt 
   * The binary packages now include this tool.
   * macdeployqt now runs 'strip' on the deployed binaries.
   * Fixed an issue that prevented the QtSvg module from being deployed.

- configure script
   * Now supports "-arch i386" as an alias for "-arch x86".
   * Detects invalid arch arguemnts and exits.

- Cocoa port
   * Fixed a bug where actions in the native menubar were not disabled
     properly.
   * Made shortcuts work properly when using the Dvorak-QWERTY+CMD keyboard
     layout.
   * Fixed a bug where dialogs were positioned in the wrong place on the
     screen.
   * The build-key for Cocoa was changed in the unlikely case that a plugin
     may make assumptions on how Qt was built. All Cocoa plugins built
     against Qt 4.5.0 will NOT work with Qt 4.5.1; we do not foresee
     changing this again.
   * Fixed a bug where some windows did not get activation when they
     normally should.
   * Fixed a bug where key events sent to popups were not propagated
     onwards.
   * QFileOpenEvents will no longer be sent for items passed via command
     line.
   * Various fixes for determining the metrics of text and the ability to
     disable kerning.
   * Modified the Colliding Mice Example to work better with coalesced
     updates.
   * Fixed a bug where the drag cursor was not updated when modifier keys
     were used.
   * [239043] Fixed a bug that caused QGraphicsProxyWidget to shrink when
     moved.
   * [244369] Window flags on Cocoa windows should look similar to the
     Carbon ones.
   * [247947] Fixed a crash in drag and drop.
   * [248918] Fixed color matching for themed text items.
   * The command + h shortcut is now enabled. (Hides the current window.)
   * [249296] Fixed a bug where line edits on a second page of a stack
     widget were not getting key events.

Qt for Embedded Linux
---------------------

-  * Various improvements to the Qt DirectFB plugin.
   * Fixed recreation of temporary EGL surfaces in the PowerVR QScreen
     driver.
-  * Document some necessary #define's for building the PowerVR QScreen
     driver.

Qt for Windows CE
-----------------

   * [246619] Fixed a tap and hold bug for QCheckbox.

****************************************************************************
*                      Compiler Specific Changes                           *
****************************************************************************


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

- Build System

- Assistant


- Designer
   * [245503] Fixed redundant backslashes in string property in the property
     browser.
   * [245961] Restricted objectname-validation to known object name
     properties only.
   * [247995] Fixed a crash occurring after layout operations that caused
     an instance of QGridLayout or QFormLayout to shrink.
   * [248000] Fixed a crash ocurring when re-layouting empty grid layouts.
   * [249097] Fixed a crash related to undoing a QGridLayout re-layout
     operation.

- Linguist

  - Linguist GUI

     * [248076] Fixed a crash caused by opening files for which we have no
       plural rules.
     * [249519] Fixed a crash upon dropping text into a non-focused line
       edit.

  - Entire Linguist toolchain

     * [244035] Fixed an infinite loop in PO writer.
     * [247738] Improved handling of duplicated messages.
     * [248849] Fixed the encoding in XLIFF writer.
     * [249022] Fixed TS' and QM's handling of messages which appear in
       multiple encodings.

  - lupdate

     * [248724] Fixed the encoding of messages from .ui files if CODECFORTR
       is not utf8.
     * [249633] Fixed the processing of C++ backslash line continuations.

- rcc


- moc
   * [240368] moc parsing issue with "unsigned" subphrase

- uic
   * [244998] Fixed include file generation for phonon widgets.
   * [248070] Fixed code generation for QStringList-type properties to use
     encoding properly.
   * [242447] Made uic generate class-specific code correctly in the case of
     multiple levels of inheritance.

- uic3


- qmake
   * On Mac OS, properly escape file names in QMAKE_BUNDLE_DATA.
   * Fixed moc and uic features to make shadow builds work even if a
     non-shadow build is present
   * [201495] Comment processing in qmake prevented file from being moc'ed
   * [248806] Ensured that the Xcode generator includes the right path to
     frameworks.

- configure


- qtconfig


- qt3to4


****************************************************************************
*                          Plugins                                         *
****************************************************************************


****************************************************************************
*                   Important Behavior Changes                             *
****************************************************************************

