Qt 4.6 introduces many new features and improvements as well as bugfixes
over the 4.5.x series. For more details, refer to the online documentation
included in this distribution. The documentation is also available online:

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

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

Some of the changes listed in this file include issue tracking numbers
corresponding to tasks in the Qt Bug Tracker, the (now obsolete) Task
Tracker, or the Merge Request queue of the public source repository.

Qt Bug Tracker: http://bugreports.qt.nokia.com
Task Tracker: http://qt.nokia.com/developer/task-tracker
Merge Request: http://qt.gitorious.org

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

New features
------------

 - QState, QStateMachine
    * New classes for state machine framework added to QtCore.

 - QAbstractAnimation
    * New animation framework added to QtCore

 - QTouchEvent
    * New class for handling multitouch events added to QtGui

 - QGesture, QGestureRecognizer
    * New gesture framework added to QtGui

 - QMatrix4x4, QGenericMatrix, QVector2D, QVector3D, QVector4D, QQuaternion
    * New classes to support 3D applications.

 - QGLShaderProgram, QGLShader
    * New classes for using shader programs written in the GL Shading Language.

 - QGraphicsEffect
    * New classes for applying graphics effects to graphics items and widgets.

 - QWebElement
    * New class for DOM access added to QtWebKit

 - QAudioInput, QAudioOutput
    * New audio input and output classes.

 - QAbstractVideoSurface, QVideoFrame
    * New abstract video output classes.

 - OpenVG graphics system added.

 - Added 800x480 screen mode to qvfb configuration dialog.

 - Improved support for input methods in graphics view.

 - [MR#1742] Added new multimedia keys to the Qt::Key enum.

 - Boxes demo ported to use new 3D math and shader program classes.

 - QtTest now supports outputting XUnit XML documents, for integrating
   with existing continuous integration systems. This is enabled by
   running the test program with the -xunitxml option.

 - QtDBus
   * The minimum required version of the D-Bus reference library is
     now 0.93.
   * Support for reading and writing of custom property types added.
   * Support for getting return arguments in remote method invocation
     via QMetaMethod::invokeMethod.

 - The QtScript module is now based on the 3rdparty JavaScriptCore library. It
   is only available under the LGPL or a compatible license.

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

 - Optimized rendering strategy in QGraphicsView
    * See list of Important Behavior Changes below

 - Improved delivery of posted events on Windows


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

QtCore
------
 - QAbstractItemModel
    * [MR#972] Added API to move items
    * [MR#1072] Added function beginResetModel() / endResetModel()


 - QByteArray
    * New overloads for QByteArray::insert() and QByteArray::prepend().
    * [MR#1286] Added value_type typedef for STL compatibility

 - QEventDispatcherGlib (internal class)
    * Fix a regression introduced in 4.5.3 that would cause timers to not
      be delivered.

 - QEventDispatcherUNIX (internal class)
    * Improve detection of monotonic clock support to include
      non-POSIX.1-2001 compliant systems.
    * [250681] Fix time change detection on UNIX systems without monotonic
      timers.

 - QEventDispatcherWin32 (internal class)
    * Changed the threshold for using multimedia timers to 20ms (was 10ms).
    * Changed the way Qt's posted events are sent by the event
      dispatcher. They are now driven on top of a Windows message
      instead of an explicit call in processEvents(). This means that
      posted events are sent even when a Windows modal message loop is
      running (for example, when the user is moving a window or when a
      native modal dialog is visible).
    * Fixed a bug that would allow the same timer id to be used by multiple
      QTimer instances.

 - QFile
    * Make QFile::resize() more robust when operating on buffered files.

 - QObject
    * [259514] fixed a possible dead-lock in the destructor.
    * Added the possibility to pass the flag Qt::UniqueConnection to
      QObject::connect.
    * Fixed race conditions that occured when moving object to threads
      while connecting.

 - QPluginLoader
    * Improved performance of plugin loading by reusing the plugin cache
      instead of loading it every time.

 - QProcessEnvironment
    * New class; support for easy access to key/value pairs in the process
      environment.

 - QRegExp
    * New pattern syntax "QRegExp::WildcardUnix" with wildcard character
      escaping.

 - QScopedPointer
    * New pointer class for cleaning up objects when leaving the current
      scope.

 - QSharedPointer
    * Added support for creating the object along with the internal private
      data in one single memory allocation. (QSharedPointer::create)
    * Fixed a bug where, in a race condition, QSharedPointer could track a
      pointer that was being deleted.

 - QTextCodec
    * Instantiate the CP949 codec when building with -no-iconv.

 - QTextStream
    * [221316] Fixed crash on large input.
    * Improved reading utf8/utf16/utf32 data by correctly skipping the
      ByteOrderMark when reading data by one character at a time.

 - QThread
    * [249997] Document that QThread priority has no effect on Linux.

 - QUrl
    * Made QUrl hostname parser a lot stricter, requiring compliance
      to STD3 to validate, thus preventing invalid hostnames from
      being accepted. See below in "Important Behavior Changes".

 - QUuid
    * [QTBUG-3543] Fixed a bug in createUuid() which caused multiple
      threads to generate the identical UUID sequences.

 - QVariant
    * Many optimisations.
    * Added QVariant::toFloat() and QVariant::toReal().
    * Added QVariant(float) constructor.
    * qvariant_cast<QVariant> and QVariant::fromValue<QVariant> are now
      identity functions.
    * Added support for math3d types.

 - QWeakPointer
    * Added support for tracking QObject-derived classes that aren't
      attached to a QSharedPointer.
    * Added QWeakPointer::data which allows you to obtain the pointer
      being tracked (without protection).
    * Added operator-> like the above data(), but requires a #define.

 - QXmlStreamWriter
    * [256468] Fixed comment indentation.

QtGui
-----

 - Qt::escape
    * Now escape the double quote (&quot;).

 - QAbstractItemView
    * [256502] Fixes selectionModel::hasSelection return value after
      model::reset.
    * [MR#1426] Fixes some issues with Shift-selection
    * [MR#1668] New QAbstractItemView::setDefaultDropAction

 - QApplication
    * [QTBUG-739] Removed internal widgets from QApplication::topLevelWidgets().

 - QCalendarWidget
    * [252943] QCalendarWidget::setDateTextFormat() reset the format if the
      date is invalid.

 - QColumnView
    * [246999] Fixed view not updating when the model changed dynamically.

 - QComboBox
    * [220195] Fixed keyboard search when current index is -1.

 - QCompleter
    * [246056] Fixed a possible assertion when setting the completer prefix.

 - QEvent
    * Introduced RequestSoftwareInputPanel and CloseSoftwareInputPanel events.

 - QFontDialog
    * [256466] Fixed the dialog not always returning the selected style.

 - QFontEngine
    * [QTBUG-2354] Support certain 'Microsoft' platform symbol fonts which
      also contain a regular unicode table for exactly the symbol range of
      code points.

 - QFontEngineQPF
    * Make alphaMapForGlyph() generate the correct color table for
      Indexed8 and Mono glyph images.  Fixed the "all glyphs are white
      boxes" problem in OpenGL1 paint engine.

 - QFontMetrics
    * [176401] Account for right bearing in bounding rect.

 - QGraphicsAnchorLayout
    * Support for expanding size policy has been removed. (The Qt 4.6 Beta
      had support for it).

 - QGraphicsBlurEffect
    * Since the 4.6 Beta, Qt::RenderHint has been moved to
      QGraphicsBlurEffect::BlurHint.
    * Input contexts are not activated for disabled widgets anymore.
    * [250555] Data copied from Mozilla Firefox can now be pasted correctly to
      a Qt application.

 - QGraphicsItem
    * Many optimizations.
    * Fixed bug and improved accuracy of QGraphicsItem::childrenBoundingRect().
    * Introduced QGraphicsItem::ItemHasNoContents.
    * Introduced QGraphicsItem::ItemSendsGeometryChanges (see Behavioral
      Changes).
    * Introduced QGraphicsItem::focusProxy(), focus proxy support.
    * Introduced QGraphicsItem::ItemNegativeZStacksBehindParent.
    * Introduced QGraphicsItem::ItemIsPanel, light-weight window support.
    * Introduced modality support for QGraphicsItem panels.
    * Introduced activation support.
    * Introduced QGraphicsItem::stackBefore().
    * Cached items are now always invalidated when update() is called.
    * Added input hints.
    * Added a new set of properties to set a transformation on an item.

 - QGraphicsLayout
    * Introduced QGraphicsLayout::addChildLayoutItem().

 - QGraphicsObject
    * New class; inherits QGraphicsItem and adds notification signals and
      property declarations.

 - QGraphicsProxyWidget
    * [251407] Fixed window flag handling. Now QGraphicsProxyWidget's flags
      win.
    * Fix Qt::ClickFocus policy.

 - QGraphicsScene
    * Many optimizations.
    * [245317] Fixes to mouse grabbing behavior.
    * Fixed delivery of double-click events after explicit grab and then ungrab.
    * Rewrote the internal rendering to use a recursive instead of an iterative
      approach.
    * Ensure hover enter events are delivered when an item is pressed.
    * Introduced activation support.
    * Fixed bugs in initial focus support.

 - QGraphicsTextItem
    * Now inherits from QGraphicsObject instead.

 - QGraphicsTransform
    * New class; eases animation of transformations for QGraphicsItem.

 - QGraphicsView
    * Many optimizations.
    * Fix mapToScene(QRect) to avoid extra unnecessary adjustments.
    * Introduced QGraphicsView::isTransformed().
    * [QTBUG-4151] Items with parent that sets ItemClipsChildrenToShape were
      sometimes invisible.

 - QGraphicsWidget
    * Now inherits from QGraphicsObject instead.
    * Interactive resizing of top level windows now respects height-for-width
      constraints.
    * Reduced memory footprint.

 - QHeaderView
    * [208320] Make sure the sort indicator is taken into account for the size
      hint.
    * [255574] Make sure the size hint for the section depends on visible
      sections.

 - QImageReader
    * [255627] Fix floating point exception in
      QImageReader::setScaledSize(QSize(0, 0)).

 - QLineEdit
    * [248948] Clear selection when redoing a delete operation.
    * [QTBUG-5261] Fixed bug where erasing characters from a textedit did not
      update the text.

 - QListView
    * [243335] Fixed the visualRect to return correct values when the widget is
      not yet shown.
    * [MR#666] Fixed selection with Shift-Arrow/Shift-Click in QListView's IconMode

 - QMainWindow
    * [226060] Adding actions to a toolbar would always make the next toolbar
      move.

 - QMenu
    * [252610] Fixed position of the shortcut text while setting a stylesheet
      on menu items

 - QMenuBar
    * [260873] Fix mouse interaction while undocking a widget from the main
      window
    * Dock areas didn't get a splitter if their dock widgets were not
      resizable.

 - QPaintDevice
    * New qt_paint_device_metric() function to replace the friend declarations
      for window surface classes that need to access metric().

 - QPainter
    * [QTBUG-1666] Made QPainter::drawText() respect Qt::TextDontClip flag
      also in vertical direction.
    * [254658] Improved clipping performance in OpenGL paint engine.

 - QPainterPath
    * [QTBUG-1537] Fixed bug where the points of a rounded rectangle were added
      in counter-clockwise order instead of clockwise order like other shapes.

 - QPen
    * [QTBUG-2738] Made QPen::setDashOffset() work with non-custom dashed lines.

 - QPixmap
    * Optimized width(), height(), isNull() and depth().
    * [QTBUG-2832] Fixed bug where calling fill on pixmap with active painter
      could crash.

 - QPlainTextEdit
    * Fixed crash when clicking on a text edit which was smaller than the
      height of the font used.

 - QPlastiqueStyle
    * [QTBUG-3555] Fixed a bug in the Plastique style that would cause an
      ASSERT failure in QFont when the application font has a pixel size set.

 - QPrinter
    * [QTBUG-4497] Removed redundant SetPen command in the postscript code when
      reusing a QPrinter object.

 - QPrintPreviewDialog now uses a QMainWindow with a proper QToolBar, instead
   of a plain layout.

 - QPushButton
    * [255581] Fixed sizeHint recalculation bug.

 - QRasterPaintEngine
    * [QTBUG-4210] Fixed bug where bitmaps were painted black instead of in pen
      colour.

 - QRegion
    * Minor optimizations.

 - QSortFilterProxyModel
    * [251296] Fixed bugs in which filtered items could not be filtered.

 - QSplitter
    * [206494] Added ability to style pressed slider with stylesheet.

 - QSpinBox
    * [259226] Fixed setting a stylesheet on a QSpinBox to change the arrow
      position.
    * [255051] Fixed sizeHint update bug.

 - QStandardItemModel
    * [255652] Fixed crash while using takeRow with a QSortFilterProxyModel.

 - QStroker
    * [QTBUG-5212] Fixed bug where thick strokes around small shapes could
      cause holes in the stroke.

 - QTabBar
    * [196326] Fixed having a stylesheet on a QTabBar resulted in some tab
      names being slightly clipped.
    * [241383] Added ability to style the close tab button with style sheet

 - QTableView
    * [191545] Selections work more similarly to well-known spreadsheets.
    * [234926] Fixed sorting after changing QTableView header.
    * [244651] [245327] [250193] [QTBUG-5062] Spans get plenty of love with
      performance improvements, support for row/column insertioa and removal,
      and better keyboard navigation.

 - QTableWidget
    * [234641] Fixed takeItem to cause the view to be updated.

 - QTextDocument
    * [207189] Support setting font size using short hand syntax in the
      CSS "font" property.
    * [201228] Remove implicit margin on bullet lists when exporting to HTML.
    * [240086] Fixed bug which caused floating objects which span several
      pages to float into the second page of the document even when it's
      the only existing object, causing the document to contain a blank
      first page.
    * [240325] Even with wrap mode set to Qt::TextWordWrap, the layout
      would sometimes break outside word boundaries when floating objects
      affected the width available to the text.
    * [MR#681] Added support for roman numbering for lists
    * [MR#1753] Fixed escaping HTML attributes QTextDocument::toHtml()


 - QTextLayout
    * [QTBUG-4468] Count tabs as multiple characters when applying a fixed
      column width.
    * [176401] Take into account the negative right bearing of the last
      character in an item of text if the glyph extends beyond its ascent.

 - QToolTip
    * Fixed a bug where tooltips were not shown in popups (Windows only).

 - QTreeView
    * [234930] Be able to use :has-children and :has-sibillings in a stylesheet.
    * [252616] Set QStyleOptionViewItemV4::OnlyOne flag when painting spanning
      columns.
    * [245654] Fixed expandAll when deleting and recreating a mode for the tree.
    * [239271] Fixed missing update when adding a row when the first column is
      hidden.
    * [258225] Fixed scrollTo with center and bottom.

 - QTreeWidget
    * [253109] Shows the widget when calling setItemWidget.
    * [MR#1393] Use stable sorting.

 - QWidget
    * Added inputMethodHints property.
    * [201649] Added QWidget::previousInFocusChain.
    * [254563] Fixed a crash when setting focus in a widget tree that
      contains invisible widgets.
    * [QTBUG-5012] Fixed uninitialized background when using QWidget::render
      with Qt::WA_NoSystemBackground and window opacity set.

QtDBus
------

 - QDBusConnection
    * Made sending of invalid/incomplete messages consistently fail with error
      (no more assertions).
    * [249528/QTBUG-3833] Added an overload of connect() that allows one to
      specify strings for matching arguments.

 - QDBusServiceWatcher
    * New class; supports efficiently watching for a service to be created,
      deleted or to change owners.

QtNetwork
---------

 - QAbstractSocket
    * Only disconnect from host when all bytes have been written.
    * New setSocketOption method.

 - QHttp
    * Do not buffer the complete POST data anymore when HTTPS is used.
    * QHttp is now obsolete and replaced by QNetworkAccessManager.

 - QLocalServer
    * Fix timeout when waiting for a connection on Unix.

 - QNativeSocketEngine
    * Do not set the OS socket send and receive buffer size. The OS
      should auto tune these values for us.

 - QNetworkAcessManager
    * [242916] Add possibility to send HTTP DELETE requests.
    * Connection count per HTTP server increased to 6 on Desktop, 3 on Symbian.
    * Optional HTTP pipelining support.
    * General HTTP performance improvements.

 - QNetworkReply
    * [257322] Add possibility to ignore specific SSL errors.
    * New isFinished() method.

 - QSslCertificate
    * [251830] Fix version() and serialNumber() methods.

 - QSslSocket
    * [257322] Add possibility to ignore specific SSL errors.
    * Fix build with openssl 1.0.0 betas.
    * Trigger a SSL transmission when reading from the socket. In certain
      cases the connection stalled when a buffer limit was used.

QtOpenGL
--------

 - QGLColormap
    * setEntry() was inserting entries instead of replacing them.
    * Clarified documentation for isEmpty().

 - QGLContext
    * Fix RGB565 mode in bindTexture().
    * Map mipmaps work on OpenGL/ES 2.0 systems in bindTexture().
    * Improve performance of QGLContext::currentContext().

 - QGLFormat
    * Increase unit test coverage and fix some long-standing issues.
    * Improve performance of code that tests QGLFormat options.
    * operator==() now tests for equality on all fields.

 - QGLFramebufferObject
    * Add support for the ARB_framebuffer_object, OES_framebuffer_object,
      and OES_packed_depth_stencil extensions.
    * Unbind the texture after it is initialized.
    * Don't destroy the texture target on cleanup if one wasn't created.

 - QGLFramebufferObjectFormat
    * New class for controlling fbo options.

 - Improvements to context sharing and object cleanup logic.

 - QGLGradientCache
   * [249919] Clean up the gradient cache in the right context.

 - OpenGL (ES) 2.0 Paint Engine
    * Re-written the OpenGL (ES) 2.0 Paint Engine's shader manager to use new
      shader API and to allow custom code from E.g. Pixmap Filters to be
      instered into the fragment "pipeline".
    * Fixed conical gradients.

 - Added a static function, QGL::setPreferredPaintEngine(), to allow users
   to set the preferred GL paint engine.

 - Cleaned up usage of OpenGL extensions. QtOpenGL now uses the OpenGL 2.0
   names of methods rather than using the EXT postfix. However, when resolving
   extensions, QtOpenGL will also try postfixing EXT if the OpenGL 2.0 name is
   not found.

 - Fix QGLWidget::showFullscreen() on EGL platforms.

 - Added lots of OpenGL autotests.

QtScript
--------

 - Many optimizations.
 - Improved ECMA script compliance.
 - New method, QScriptString::toArrayIndex(), for converting QScriptString
   to a QtScript array index.

QtSql
-----

 - [QTBUG-3162] Views for Sql table models should not reset state on failed
   queries.
 - [QTBUG-5251] Fix retrieval of SQL 'TIME' information for PostgreSQL.
 - Better error checking in case of failed query.
 - [QTBUG-5179] Fixed floating point number truncation in qsqlpsql plugin.
 - [QTBUG-551] Fixed Oracle batchExec using strings as out params.
 - Updated sqlite to 3.6.19 + readded our patches.
 - [QTBUG-3736] ODBC: Retrieved in ascii, should be stored in ascii.
 - Fixed issue with multiple lookups to same table/field in
   QSqlRelationalTableModel.
 - Updated documentation of setForwardOnly.
 - [QT-754] TDS: Fixed improper formatting of date values.
 - TDS: Fixed missing field/table name escaping.
 - ODBC: Fixed setForwardOnly not being reset on when the query is reset.
 - [QTBUG-4510] Add reconnection option to the mysql driver.
 - [222678] Fixed QSqlTableModel: trying to delete the wrong row.
 - Interbase: Fixed crash when calling numRows on unknown query type.
 - DB2: Don't return an error when the table is just empty.
 - [17327] Added OCI support for synonyms to tables created by another user.
 - [176267] Fixed mysql driver not knowing the difference between tables and
   views.
 - Fixed determination of end of ODBC string on deficient drivers.
 - Added ability to open sqlite databases readonly.
 - Fixed race condition on reopening an ODBC connection.
 - Fixed invalid use of statics in the defaultCasing code.
 - Fixed proper quoting under odbc.
 - [252450 & 246125] Fixed failed queries due to MySql driver auto-preparing.
 - QSqlDatabase now has a database level precisionPolicy. Queries now default
   to this.
 - Add proper iODBC linking support.

QtSvg
-----

 - QSvgHandler
   * [245602] [204686] Fixed gradient and solid-color referencing.
   * [202426] Made attribute inheritance work with 'use' tags.
   * [250618] Fixed gradient on strokes.
   * [254040] Added support for 'vector-effect'.

 - QSvgPaintEngine
   * [257052] Changed drawImage() to ignore aspect ratio.

QtWebKit
--------

 - Many bug fixes.

 - QWebElement
   * New class; introduced to implement DOM like operations on a web page.

 - QWebFrame
   * New properties for an URL and a focus management.
   * New signals delivering current loading status.

 - QWebInspector
   * New class for embedding the WebInspector as a QWidget

 - QWebHistory
   * Streaming operators for saving and restoring QWebHistory's state.

 - QWebPage
   * New property; preferredContentsSize for setting layout of the page in the
     viewport.
   * New slot; shouldInterruptJavaScript, called when JavaScript program is
     running too long.

 - QWebSecurityOrigin:
   * New functions for defining local URL schemes.

 - QWebSettings
   * New options for text encoding and off-line web application cache (HTML5).

 - QWebView
   * Support for render hints.

QtXml
-----

 - QDomDocument
    * Set the codec to UTF-8 if codec not present or unknown.

QtXmlPatterns
-------------

 - QXmlQuery
    * [245219] Added QXmlQuery::setFocus(const QString &focus).

Qt Plugins
----------

 - Tiff plugin
    * [258526] Rotate the image if the tiff file contains an orientation tag.
    * [254317] Add support for mono and indexed format

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

 - Updated FreeType to version 2.3.9.

 - Updated harfbuzz to the latest version from fd.org.

 - Updated sqlite to version 3.6.19.

 - Updated libpng to version 1.2.40


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

 - Added support for the Symbian platform with integration for the S60
   framework.

 - Added community supported Qt ports for QNX and VxWorks. See platform
   notes in the Qt documentation for details.

 - Improved support for AIX using IBM's Visual Age C/C++ compiler
   version 7 (xlC).

 - Improved support for Solaris using Sun Studio 12 (CC 5.9).

Qt for Unix (X11 and Mac OS X)
------------------------------

 - Added support for thread-safe FD_CLOEXEC file-descriptor creation
   where supported by the operating system (currently only Linux).

 - Ensured that system calls where EINTR is a possible result are
   properly restarted.

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

 - KDE Integration: Improved the integration into KDE desktop (loading of KDE
   palette, usage of KColorDialog and KFileDialog) using the GuiPlatformPlugin

 - Fixed pasting the clipboard content to non-Qt application on X11 when the
   requested format is image/ppm.

 - On X11, Qt now supports the _NET_WM_SYNC protocol.

 - On X11, Qt now supports the SAVE_TARGET protocol that allows to keep
   clipboard contents if the application that owns the clipboards exits

 - [QTBUG-4652] On X11, clipboard content can be properly retrieved even when
   an application asks for the unsupported target. This fixes copying and
   pasting data when using Synergy.

 - [MR#797] Fixed a crash when using QX11EmbedContainer/Widget on x86_64.

 - [MR#1111] Emit workAreaResized when _NET_WORKAREA is changed on X11.

 - [QTBUG-3620] Fixed bug on X11 that caused bitmap fonts to become so small
   it was unreadable when printed or presented in a print preview widget.

 - Improved EGL integration on X11 (including better visual selection).

 - Made Qt::WA_TranslucentBackground work in combination with native
   child widgets.

 - Support Qt::WA_TranslucentBackground on top-level QGLWidgets on X11, both
   (EGL & glX). This allows OpenGL (& ES) rendering to semi-transparent widgets
   if a compositing window manager is running.

 - Support OpenGL texture_from_pixmap extension on X11 (EGL & glX) when
   calling QPainter::drawPixmap() with the OpenGL paint engine, or calling
   QGLContext::bindTexture() on an X11 QPixmap. If the
   GLX_EXT_texture_from_pixmap or EGL_NOKIA_texture_from_pixmap extensions are
   present, Qt will attempt to use glXBindTexImageEXT or eglBindTexImage to
   bind the pixmap to a texture, rather than copying the pixel data.

 - Add new experimental QX11GLPixmapData backend for QPixmap. This pixmap
   backend uses regular X11 pixmaps to store the image data, however it uses
   OpenGL to render into them.

 - Tablet: Disable event compression of events of type QTabletEvent when the
   current event is accepted by the receiver.

 - [QTBUG-4242] Fixed a bug that allowed the user to close a window
   event though the program is using the QEventLoop::ExcludeUserInputEvents
   flag.

 - [255559] Fixed generation of XdndLeave events to include the correct
   source id.

 - [258319] Avoid division by zero on some Xlib/Xserver implementations.

 - Fixed the default QWidget size on X servers with Xinerama to give widgets
   a default size that should fit on a single screen.

 - Support _NET_WORKAREA on X servers with Xinerama (previously this property
   was ignored).

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

 - Significant external contribution from Milan Burda for planned removal
   of (non-unicode) Windows 9x/ME support.

 - QRegion is no longer a GDI object by default. This means it is no
   longer subject to gui-thread only nor does it potentially impact
   the 10.000 GDI object limit per process. By explicitly calling
   .handle() a GDI object will be created and memory managed by
   QRegion. The native handle is for reading out only. Any GDI calls
   made on the HRGN handle will not affect the QRegion.

 - The reading code of QLocalSocket on Windows has been rewritten to improve
   reading performance.

 - On Windows when a file cannot be accessed (stat()ed), we are now restoring
   the error mode to the original value.

 - [259221] QFileInfo::symLinkTarget() now supports NTFS symbolic links
   thanks to Konstantin Ritt (merge request 1217).
 - [251554] Fixed openUrl("mailto:") with Thunderbird on Windows.
 - [254501] QDestopServices now supports cyrillic file names.
 - Fixed an issue which prevents moving fixed size windows using titlebar.
 - [258087] Fixed an issue on Vista which returns incorrect file paths when
   using QFileDialog::getOpenFileNames()
 - [253763] Fixed a focus issue when using out-of-process ActiveQt controls.
 - [255912] Mouse move events will not be delivered to a blocked widget.
 - [225588] Enabled IME reconversion support.

 - Phonon on Windows
   * Now much more reliable when reading a file through a QIODevice.
   * If Video Mixing Renderer 9 is not available, falls back to software
     rendering.
   * Fixed a flicker issue when switching source with a transition time of 0.

 - [QTBUG-4445] Fixed bug on Windows that caused problems when printing
   text where several characters were represented by a single glyph, e.g.
   a double 't' with the Calibri font.

 - Added QSysInfo::WV_WINDOWS7 and QSysInfo::WV_6_1.

 - Changed QPrintDialog under Windows to use PrintDlgEx, instead of the old
   deprecated PrintDlg call.

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

 - General changes on Mac OS X:
   * Mac OS X version support: Support for 10.3(Panther) has been dropped and
     support for 10.6(Snow Leopard) has been added.
   * The Cocoa port now supports static linking.
   * The Cocoa port now supports the Qt3Support library (with the exception of
     Q3FileDialog) to ease the transition from Carbon to Cocoa.
   * The Cocoa binary packages are now Intel only (universal i386 and x86_64).
   * Snow Leopard notes:
     - Gcc 4.2 is used by default. Configure with -platform macx-g++40 to
       select 4.0.
     - Using the 10.4u SDK requires gcc 4.0.
     - Configuring for the Cocoa port (-cocoa) produces 64-bit binaries by
       default. Use the -arch flags to override.
     - Building for ppc64 is no longer supported by the gcc tool chain.
     - Building for ppc is still supported.
   * Added support for GetURL events on Mac OS X.

 - General bug fixes:
   * [123740] Fixed an issue with dead keys on Mac (cocoa) on French keyboard
     layout.
   * [258438] Enabled Emacs style keyboard shortcuts.
   * [QTBUG-4418] Fixed maximizing and restoring a window.

 - Cocoa bug fixes:
   * [252088] Drag Leave events will be delivered correctly on Cocoa.
   * [257661] Cocoa now uses the correct line ending for clipboard plain text.
   * [258173] Fixed an issue which caused "whatsthis" pointer to flicker.
   * Fixed some warnings that might get printed when reparenting QGLWidget.
   * Fixed stacking order of modal dialogs so that they never rearrange level,
     or hide in the background.
   * Fixed problem with plugins written with Qt that closes down the native
     application when hiding a modal dialog.
   * Fixed problem that native applications cannot quit when using plugins
     written with Qt from a native application.
   * Fixed problem that the menubar is not restored correctly when using
     plugins written with Qt from a native application.
   * The event dispatcher now integrates better with native applications that
     spin the event loop themselves.
   * Using Qt::AA_MacPluginApplication will now disable the use of native
     menubars on Mac.
   * Sliders and scroll views in Qt now use pixel scrolling for mouse devices
     that support this.
   * Wheel events can now contain a delta with a value as low as 1 for mouse
     devices that use pixel scrolling.

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

 - Added QMAKE_LIBS_OPENGL_ES1, QMAKE_LIBS_OPENGL_ES1CL and
   QMAKE_LIBS_OPENGL_ES2 qmake variables for specifying OpenGL ES
   specific libraries.

 - Compilation fixes for OpenGL/ES 1.0 and OpenGL/ES 1.1 Common Lite.

 - Phonon on Windows
   * Now much more reliable when reading a file through a QIODevice.
   * If Video Mixing Renderer 9 is not available, falls back to software
     rendering.
   * Fixed a flicker issue when switching source with a transition time of 0

 - [QTBUG-3620] Fixed bug on X11 that caused bitmap fonts to become so small
   it was unreadable when printed or presented in a print preview widget.

 - [QTBUG-4445] Fixed bug on Windows that caused problems when printing
   text where several characters were represented by a single glyph, e.g.
   a double 't' with the Calibri font.

 - EGL and OpenGL/ES
   * Protect the use of version-specific EGL symbols with #ifdef's.
   * Make sure an EGL context is current when resolving GL extensions.
   * Introduce "lazyDoneCurrent" for optimizing context switching in
     paint engines.
   * Separate EGLSurface from QEglContext so that the same context can
     be used with multiple surfaces.
   * Move common functions from system-specific files to qgl_egl.cpp.
   * Fix a memory leak of EGLSurface's in QGLContext.
   * Fix detection of pbuffers on OpenGL/ES systems.
   * EGL_SAMPLES was being set to the wrong value for multisampled surfaces.

 - PowerVR
   * Make the code better at detecting MBX vs SGX header files.
   * Fix 32-bit screen support - some code was still assuming 16-bit.
   * Stop GL window surfaces double-flushing their contents.
   * Remove surface holder, which never worked all that well.
   * Implement screen rotations.

 - Mouse and keyboard drivers
   * Removed obsolete drivers (vr41xx, yopy, sl5000, bus mouse).
   * Added a new LinuxInput driver for both mouse and keyboard.
   * Added keymap support for QWS via standard Linux .kmap files.
     (complete with dead-keys, compose-key and LED handling).

 - Remove obsolete OpenGL/ES screen drivers: hybrid, ahigl.

 - Send enter/leave events also to child widgets.

 - Fix crash when instantiating multiple QApplications.

 - Optimize software cursor by using native image format instead of 8-bit.

 - [255828] Avoid window decoration flicker on show.

 - [255495] Fix blend function crash on AVR32.

 - Fix qconfig configurations.

 - Add powerpc mkspec and remove "empty" ppc mkspec .

DirectFB
--------

 - When running Qt/DirectFB the DirectFB window id of a top level QWidget can
   be queried using property("_q_DirectFBWindowID")

 - Allow setting the background color of the primary layer in DirectFB with
   connect options. QWS_DISPLAY=directfb:bgcolor=red or
   QWS_DISPLAY=directfb:bgcolor=\#aabbccdd

 - Add support for rendering mouse cursor using a top level window when cursor
   support is not working in IDirectFBDisplayLayer. Define
   QT_DIRECTFB_WINDOW_AS_CURSOR to enable.

 - Add experimental support for optimized locking/unlocking of surfaces. Enable
   by defining QT_DIRECTFB_SUBSURFACE.

 - Fix a bug to conceptually allow using QDirectFBScreen as a subscreen of a
   proxy screen. Don't make QDirectFBScreen::instance() assume that
   QScreen::instance() is a QDirectFBScreen.

 - Optimize move/resize operations with DirectFB. With a properly configured
   DirectFB these operations are handled for us and we don't need to force a
   repaint of the window.

 - Support top level window opacity in DirectFB

 - Fix a bug when loading RGB32 images that would lead to rendering issues.

 - Fix a bug when painting with invalid pens/brushes.

 - Fix a bug that would show up when QWidget::scroll is called.

 - Implement support for loading pixmaps using IDirectFBImageProvider.

 - Disable color table support by default. This seems to work incorrectly on
   most boards and loading these images will generally require an image
   conversion anyway.

 - Fix a crash when resizing windows.

 - Compile with versions < 1.0. We still recommend using newer versions.

 - Considerable code cleanup

 - Various optimizations regarding painting, loading of images and creation of
   surfaces.

 - Allow forcibly falling back to raster engine for painting operations by
   exporting QT_DIRECTFB_FORCE_RASTER=1

 - Reenable support for RGB32 primary surface.


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

 - On Windows CE the link time code generation has been disabled by default to
   be consistent with win32-msvc200x.
 - The default button size has been reduced in the Windows mobile style.
 - [QTBUG-3613] QWizard issues have been fixed on Windows mobile.
 - [254673] Restoring minimized widgets fixed for Windows mobile and
   Windows CE.
 - [255242] Seeking within large files (bigger than 0x80000000 bytes) fixed
   on Windows CE.
 - [257352] When configuring Qt for Windows CE, configure points the user to
   setcepaths, when its done.
 - [259850] Added a makespec template for Windows CE 6.
 - Fixed the hardcoded GL library names for Windows CE.

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

 - Designer
   * [233683] Promoted Widgets are now stored correctly in scratchpad.
   * [249823] Added search functionality to the resource browser.
   * [254282] Enabled the use of promoted widgets in form templates.
   * [254824] Made it possible to override the createAction()/createWidget()
     functions of QUiLoader.
   * [256332] Enabled deleting all pages of a QTabWidget or QStackedWidget.
   * [259238] Fixed menubar/menu editing in right-to-left mode.
   * [259918] Fixed setting of object names for container pages not to use
     localized strings.
   * [260658] Fixed saving of alpha values set in the palette editor.
   * It is now possible to further specify the kind of custom widget string
     properties using XML tags.

 - uic
   * [260784] Generated code for retranslateUi doesn't cause compiler warnings
     anymore.

 - uic3
   * [128859] Fixed code generation of QLabel's wordWrap property.

 - qdoc3
   * Changed qdoc3 binary to be in bin/ instead of a platform specific location.

 - Linguist
   * Linguist GUI: Experimental support for editing multi-length strings.
   * lupdate is now again the only tool which can parse program code.
   * lupdate
     - Actually guess the target language from the file name.
     - Make -{source,target}-language actually override values from files.
     - C++ parser
       * Properly support "using namespace", etc.
       * Remove the obsolete TRANSLATOR hack relating to "using namespace".
       * Support attaching meta data to translatable message.
       * Actually use the argument of Q_DECLARE_TR_FUNCTION.
       * Optimization.
       * Bug fixes and robustness improvements.
   * lrelease
     - Add -markuntranslated <prefix> option.
   * Both lupdate & lrelease
     - Accuracy improvements of the qmake .pro file parser.
     - Support for ID-based translations. Somewhat experimental.
   * lconvert
     - Add --sort-contexts option.
     - Add --locations option (complementing lupdate).
     - Add --no-ui-lines option (complementing lupdate).


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

 - The experimental Direct3D paint engine has been removed. The reason for
   this is that Nokia focuses on OpenGL for desktop hardware accelerated
   rendering.

 - The default engine used to draw onto OpenGL buffers has changed in
   Qt 4.6. The QPaintEngine::OpenGL2 engine is now used as the default
   engine. This *may* cause compatibility problems for applications
   that use a mix of QPainter and native OpenGL calls to draw into a GL
   buffer. Use the QGL::setPreferredPaintEngine() function to enforce
   usage of the old GL paint engine.

 - When mixing OpenGL and QPainter calls you need to surround your
   custom OpenGL calls with QPainter::beginNativePainting() and
   QPainter::endNativePainting().
   This is to ensure that the paint engine flushes any pending drawing and sets
   up the GL modelview/projection matrices properly before you can issue custom
   OpenGL calls, and to let the paint engine synchronize to the painter state
   before resuming regular QPainter based drawing.

 - Graphics View has undergone heavy optimization work, and as a result of
   this work, the following behavior changes were introduced.

   a) QStyleOptionGraphicsItem::exposedRect now contains the item's bounding
      rectangle, and QStyleOptionGraphicsItem::matrix is uninitialized by
      default. You can enable an exact exposed rectangle and a correct matrix
      by enabling the flag QGraphicsItem::ItemUsesExtendedStyleOptions.

   b) QStyleOptionGraphicsItem::levelOfDetails is obsoleted and its value is
      always initialized to 1. Instead you can call
      QStyleOptionGraphicsItem::levelOfDetailFromTransform(const QTransform &)
      to determine the level of detail.

   c) QGraphicsView no longer calls QGraphicsView::drawItems(), and in turn
      QGraphicsScene::drawItems(), by default. You can get the old behavior
      back by enabling QGraphicsView::IndirectPainting.

   d) QGraphicsItem no longer calls itemChange() for position and
      transformation changes. If you want to receive notifications for changes
      to the item's position and transformation, you can set the flag
      QGraphicsItem::ItemSendsGeometryChanges (which is enabled by default by
      QGraphicsWidget and QGraphicsProxyWidget).

 - QDesktopWidget on X11 no longer emits the resized(int) signal when screens
   are added or removed. This was not done on other platforms. Use the
   screenCountChanged signal instead.

 - QUrl's parser is more strict when for hostnames in URLs. QUrl now
   enforces STD 3 rules:

    * each individual hostname section (between dots) must be at most
      63 ASCII characters in length;

    * only letters, digits, and the hyphen character are allowed in the
      ASCII range; letters outside the ASCII range follow the normal
      IDN rules

   That means QUrl no longer accepts some URLs that were invalid
   before, but weren't interpreted as such.

 - The Unix configure-time check for STL is stricter now in Qt
   4.6. This means some legacy STL implementations may fail to pass
   the test and, therefore, Qt will automatically disable STL support.

   This is a binary-compatible change: existing code will continue to
   work without being recompiled. However, it affects the source code,
   since some STL-compatibility API will not be enabled.

   Platforms affected by this change:
     * solaris-cc-* with the default (Cstd) C++ STL library
       recommendation: use -library=stlport4
       See Sun Studio's documentation for the effects of this option

 - QVariant has now a new implicit constructor that takes a float. This
   means that code that assigned a float to a variant would create a
   variant with userType QMetaType::Float, instead of QVariant::Double.

 - QDataStream will now read and write all floating point numbers with the
   same precision, regardless of whether it's streamed into or out from a
   float or double. This is to maintain compatibility across platforms with
   a different default precision for qreal. The default is 64-bit precision
   for all floating point numbers, and this can be changed using the new
   function setFloatingPointPrecision(). Set Qt_4_5 as the version of the
   QDataStream to get the behavior of previous versions.

 - On Mac OS X, QDesktopServices::storageLocation(DataLocation) now includes
   QCoreApplication::organizationName() and QCoreApplication::applicationName()
   if those are set. This matches the behavior on the other platforms.

 - The Animation Framework
   * currentTime() now returns the complete current time including previous
     loops.
   * currentLoopTime() returns the time inside the current loop.
   * stateChanged signal sends the new state as first parameter and old state
     as the second.
   * QAnimationGroup::clearAnimations() has been renamed to clear().
   * QAnimationGroup::insertAnimationAt() has been renamed to
     insertAnimation().
   * QAnimationGroup::takeAnimationAt() has been renamed to takeAnimation().
   * QSequentialAnimationGroup::insertPauseAt() has been renamed to
     insertPause().
   * [QT-941] Avoids timer ticks when there are only pause animations running.

- Refactoring in OpenGL examples to improve portability and utilize the
  Animation framework for animation.  The hellogl and overpainting examples
  now compile on OpenGL/ES 1.1.  Also common code is factored.

- Changed QWebFrame::setHtml() and setContent() to not affect the back/forward
  and the session history.

- qmake no longer adds Qt internal dependencies to the linker when Qt
  is built in shared mode (not static). This means that applications
  that made use of platform-specific API may need to adjust the LIBS
  variable in their .pro files to match:

    X11: LIBS += -lX11
    Mac: LIBS += -framework AppKit -framework Carbon

- QtScript: Behavior changes due to using JavaScriptCore in the back-end:
  * QDateTime is no longer used for date parsing and string conversion of
    Date objects; instead the (more compliant) date processing from
    JavaScriptCore is used.
  * RegExp objects are no longer thin wrappers around QRegExp; they are now
    "proper" JavaScript RegExp objects.

