Qt 4.7.1 is a bug-fix release. It maintains both forward and backward
compatibility (source and binary) with Qt 4.7.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.7

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

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
Merge Request:  http://qt.gitorious.org

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

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

 - Improved the benchmarking library's timing code
    * Uses a faster access to the system clock

 - Introduction of SSSE3 for alpha blending of images.

 - On x86 and 86_64, the memory access has been improved for alpha blending
   and for some composition functions.


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

QtCore
------

 - Containers
    * [QTBUG-13079] Fix assignment of a container included in the container
      itself.

 - QEventDispatcherUnix
    * [QTBUG-13633] Do not process too many timer events if other events need
      to be processed first.

 - QLibrary
    * [QT-3825] System libraries are only loaded from the system directories.

 - QUuid
    * [QTBUG-11213] QUuid::createUuid() should not generate identical sequences
      on UNIX.


QtGui
-----

 - QGraphicsEffect
    * [QT-3633] Wrong bounding rect.

 - QGraphicsItem
    * [QTBUG-3633, QT-3828] Wrong children bounding rect when applying effects.

 - QGraphicsScene
    * [QT-3674] Spurious assert triggered from render().

 - QGraphicsWidget
    * [QTBUG-13188] Make sure a font that has propagated from a parent can
       be set on a QPainter.
    * [QT-3808] Issues when applying effects in combination with
      ItemHasNoContents flag.

 - QGtkStyle
    * [QTBUG-13125] Fixed a regression with custom itemview background color.

 - QLineEdit
    * [QTBUG-13520] Fixed the scrolling of text with right alignment.

 - QPainter
    * [QTBUG-13429] Fixed scale point drawing with square cap in the raster
      engine, plus some potential floating point overflows in the rasterizer.
    * Optimized pixmap drawing with SmoothPixmapTransform.

 - QPinchGesture
    * The scaleFactor and totalScaleFactor now represent a value that allows
      an object to track a touchpoint during a Pinch Gesture even when using
      sequences for zooming.
      Therefore the scale factors are initialized to 1.0 and for every new
      sequence the totalScaleFactor is multiplied with the scaleFactor of the
      new sequence.

 - QPixmap
    * [QTBUG-12560] Fixed a regression preventing loading images without
      extensions.

 - QStaticText
    * [QTBUG-12614] Fix crash with zero-width string.
    * [QTBUG-12540] Fix rendering of large glyphs with OpenGL2 paint engine.

 - QTreeView
    * [QTBUG-13567] Do not scroll to top if last item is removed.


QtMultimedia
------------
 - QAudioOutput
    * [QTBUG-11586] Support audio with more than two channels.
    * [QTBUG-11755] Fixed outputing audio in push mode with ALSA.
    * [QTBUG-11883] Fixed segmentation fault when closing a QAudioInput or
      QAudioOutput.


QtNetwork
---------
 - Bearer Management
    * Improved reliability on Symbian and Maemo.
    * Added connman/meego backend.
 - IPv6
    * Disable on Symbian until OpenC properly supports it.
 - QSslConfiguration
    * [QTBUG-13265] Fixed crash with empty configuration.
 - QSslCertificate
    * [QTBUG-12489] Support dates > 2049.
 - QNetworkAccessManager
    * [QTBUG-12285] Crash fix related to aborted uploads.


QtOpenGL
--------
 - QGL2PaintEngineEx
    * Fixed drawing a large number of glyphs with the same font on systems
      with small texture size limits.


QtXml
-----
 * Fixed a crash when parsing invalid tag names.


QtXmlPatterns
-------------
 - XML Schema internals:
    * [QTBUG-11559] Only parse 3 digits of time fraction.


QtDeclarative
-------------
 - QML language
    * [QTBUG-13799] QML core module renamed to QtQuick to decouple it from Qt
      releases.  Old "import Qt 4.7" will co-exist with "import QtQuick 1.0' at
      least during Qt 4.7 releases.
    * [QTBUG-13047] Support passing QObject derived types to QML methods.
    * [QTBUG-12837] Support JS "in" operator on QML objects.
    * [QTBUG-13045] Prevent calling deleteLater() from QML.
    * [QTBUG-13043] Ignore non-scriptable properties in QML.
    * [QTBUG-13114] Don't double call classBegin().
    * [QTBUG-12946] Ensure the onDestruction handlers are called before the
      expressions are cleared.
    * [QTBUG-12599] Re-enabled script program caching on Symbian.
    * [QTBUG-13374] Don't modify the signal order on the second dynamic meta
      object pass.
    * Support for qsTrId and meta-data in comments for QML.
 - QML debugging
    * [QTBUG-5162] The debugger is now activated with -qmljsdebugger command
      line arg to enable support for platforms without environment variables.
    * Various improvements to ease debugging in creator.
 - AnchorAnimation
    * [QTBUG-13398] Fix AnchorAnimation for multiple AnchorChanges with
      dependancies.
 - AnchorChanges
    * [QTBUG-11834] Restore any absolute geometry changed by AnchorChanges when
      returning to the base state.
 - Component
    * [QTBUG-13170] Complete Component::createObject() creation after setting
      the parent.
 - GridView
    * [QTBUG-13166] GridView.view property should not be writable.
 - Flickable 
    * [QTBUG-13095] Ensure Flickable visibleArea is updated when view height
      changes.
    * [QTBUG-13176] Avoid Flickable view jumping when drag threashold is
      exceeded.
    * [QTBUG-13078] Fix poor flicking behavior with slower flicks.
    * Handle QGraphicsWidgets in Flickable.
 - FocusScope
    * [QTBUG-12649] Make sure onFocusChanged is correctly emitted for items
      in a FocusScope.
 - FontLoader
    * [QTBUG-13419] Don't add the same font to the font database multiple
      times.
 - Image
    * [QTBUG-13454] Changing the Image 'source' no longer goes through the
      'Loading' state if the image is cached.
    * [QTBUG-13383] Do not reset sourceSize when changing image source url.
    * [QTBUG-13002] Setting one dimension of the sourceSize should set the other
      dimension.
    * [QTBUG-12302] Fix remote image url redirects are done in the right thread.
    * Ensure all image states are updated before emitting statusChanged signals.
 - ListModel
    * [QTBUG-12363] Modifying an object returned by ListModel.get(0) didn't
      update the view.
    * [QTBUG-13666] Calling set() and setProperty() on ListModel from a
      WorkerScript didn't update the view.
    * Fix Worker ListModel to emit the right signal when items change.
    * Fix crash with invalid role indexes.
    * improved ListModel error messages.
 - ListView
    * [QTBUG-13664] Models with a single role didn't always update correctly.
    * [QTBUG-13543] Ensure flickable velocity is updated when view is moved by
      setCurrentIndex.
    * [QTBUG-12664] Ensure highlight is positioned correctly in
      positionViewAtIndex().
    * [QTBUG-13166] Fix ListView.view attached property with VisualItemModel.
    * [QTBUG-13039] Fix crash in synchronization of ListModel in WorkerThread.
    * [QTBUG-11341] Flicking a ListView sometimes made it lose focus.
    * [QTBUG-13166] ListView.view property should not be writable.
 - MouseArea 
    * [QTBUG-12250] When onDoubleClicked: is handled don't emit a second
      onPressed/onClicked.
 - NumberAnimation
    * [QTBUG-12805] Clear previous animation data for non-triggering animations.
 - ParentChange
    * [QTBUG-13554] ParentChange fails to apply rotation changes of exactly 180
      degrees.
 - PathView 
    * [QTBUG-13689] Moving items in a PathView caused PathView.onPath to be set
      to false.
    * [QTBUG-13687] PathView didn't accept mouse events, preventing it from
      working in a Flickable.
    * [QTBUG-13416] Fix PathView item position on insertion and removal.
    * [QTBUG-13017] Fix PathView when setting an empty model that is later
      filled.
    * [QTBUG-12747] PathView required some diagonal movement before a drag was
      initiated.
 - Positioners
    * made positioners work with QGraphicsWidgets.
 - PropertyChanges
    * [QTBUG-12559] Correctly apply PropertyChanges when entering an extended
      state directly from the base state.
 - QDeclarativeImageProvider:
    * Fixed memory leak.
    * Improved concurrency when using in asynchronus mode.
 - Repeater
    * [QTBUG-12905] Emit countChanged where appropriate in Repeater.
 - SmoothedAnimation
    * [QTBUG-12336] Update running animations if a SmoothedAnimation is changed.
 - SpringAnimation
    * [QTBUG-13044] SpringAnimation velocity animation stop logic was fragile.
 - Text
    * [QTBUG-13453] Fix jerky scrolling caused by unnecessary repaints of Text
      element.
    * [QTBUG-13142] Fix alignment of shadow for rich text when using text
      styles.
    * [QTBUG-11002] Improve QML text rendering when LCD smoothing is enabled
      for OS X.
 - TextInput
    * [QTBUG-11127] Fix autoScroll implementation.
 - VisualDataModel
    * [QTBUG-13754] Fixed a crash when updating a property in ListModel with
      multiple roles.
    * [QTBUG-13038] Fix VisualDataModel model update handling when rootIndex is
      specified.
    * [QTBUG-13146] Handle layoutChanged() properly in QML views.
 - WebView
    * [QTBUG-13342] Ensure WebView gets focus when an editable node is clicked.
 - XmlHttpRequest
    * [QTBUG-13117] Fix responseText to check the charset encoding field and
      also to not assume that the data is xml.
 - XmlListModel 
    * [QTBUG-13041] XmlListModel thread was left hanging on Symbian application
      exit.


Qt Plugins
----------
 - Jpeg image IO plugin
    * [QTBUG-13653] Fixed infinite loop when loading jpeg without EOI marker
      from memory.

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

Qt for Unix (X11 and Mac OS X)
------------------------------
 - Event System:
   * [QT_3553] Fix invalid memory write during recursive timer activation.

Qt for Linux/X11
----------------
 - The configure script now detects all vector extensions of x86 and x86_64.

Qt for Windows
--------------
 - Event System:
   * [QTBUG-12721] Fix Qt applications freezing until mouse/keyboard events
     occur.

 - Drag & Drop:
   * [QTBUG-13787] Fixed a possible crash with mingw.

 - QPrinter
   * [QTBUG-12263] Strokes were in some cases not printed with the correct
     color under Windows.

 - QGLWidget
   * [QTBUG-13141] Fixed multi-sampling support for ATI based cards under
     Windows.

Qt for Mac OS X
---------------
 - The configure script now detects all vector extensions of x86 and x86_64
    * [QTBUG-10500] Fixed a bug which causes the QMainWindow geometry
      to be calculated wrongly, when used with native toolbars.
    * [QTBUG-13878] Application menu entries can now also be translated
      using the QMenuBar context.

Qt for Symbian
--------------
 - configure
   * [QTBUG-4586] Fixed wrong paths in include/ActiveQt/headers.pri.
   * [QTBUG-11671] Fixed audio-backend detection in configure tests.

 - qmake & mkspecs
   * [QTBUG-13523] Added support for using -L notation in the LIBS variable
     when building with the symbian/linux-armcc or gcce mkspec.
   * [QTBUG-12851] Fix assertion on Windows when DESTDIR is empty in static
     libs.
   * [QTBUG-12802] Fix vcxproj generator when using /Fd in QMAKE_CXXFLAGS.
   * [QTBUG-13080] vcxproj generator: fix bug when using CharacterSet=1 in
     .pro file.
   * [QTBUG-13081] vc[x]proj generators: support /MAP option without file
     name.
   * [QTBUG-13902] Added support for unsigned smart installer package creation.
   * [QTBUG-13991] No longer need to manually edit smart installer pkg file for
     publishing.
   * [QT-3949] Load environment.prf from Symbian SDK if it exists there.
   * [QTBUG-13499] Provide a way to compile with RVCT 4.0 using generated
     Makefile.
   * [QTBUG-13336] Ignore MAKEFILE variable for Symbian abld and sbsv2 builds.
   * [QTBUG-13363] Fix Symbian handling of projects with special characters in
     TARGET.
   * [QTBUG-12762 & QTBUG-13307] Gcce building support for symbian-sbsv2
   * [QTBUG-13147] Added support for DEPLOYMENT.pkg_build_version
   * [QTBUG-12884] Fix "installer_sis" and "deploy" targets when TARGET has path.
   * [QTBUG-12879] Fix check to remove unnecessary deployments in Symbian.
   * [QTBUG-12716] Make bld.inf target in Symbian mkspecs to depend on .pro file.
   * [QTBUG-12715] Rename Symbian generated mmp/mk files to include target in 
     filename.
   * [QTBUG-12617] Fix package header in cases where VERSION doesn't contain all
     values.
   * Fix run and runonphone targets for projects that have TARGET with path.
   * Fix QT_LIBINFIX for QT_PLUGINS_BASE_DIR.
   * No longer require PRE_TARGETDEPS items to be absolute for symbian-sbsv2
     mkspec.
   * Do smart command replacement for commands containing $$QMAKE_*
     command variables, such as $$QMAKE_COPY, when generating bld.inf
     extensions for QMAKE_EXTRA_* variables for symbian-sbsv2 mkspec.

 - s60installs
   * Fixed qsymbianbearer.qtplugin exports in s60installs.pro.

 - patch_capabilities.pl
   * [QTBUG-13760] Improved output of patch_capabilities.pl script.

 - QInputContext
   * [QTBUG-12949] Fixed a bug where passwords would not be committed when
     confirming.
   * [QTBUG-13472] Fixed crash in input methods when using symbols menu and
     numbers only.

 - QDesktopWidget
   * [QTBUG-14058] Fix QApplication::desktop()->availableGeometry().

 - QtCore
   * [QTBUG-13802] Symbian^4 platform detection for QSysInfo::symbianVersion().
   * [QTBUG-13612] Do not wait for QThread exit when destroying global statics.
   * [QT-3895] Change RLibrary handle in QS60PluginResolver to be process wide.
   * [QTBUG-11218] Fix QProcessManager destruction.

 - Qt Plugins
   * [QT-3949] Remove pre-Symbian3 plugins from Symbian3 and later builds and
     Check S60_VERSION instead of existence of certain files in bearer plugin.

 - Demos & Examples
   * [QTBUG-13461] Remove some .pro statements left behind after IAP usage
     cleanup.
   * [QTBUG-12276] Assigned valid UID3 for fortuneserver example.

Qt for Windows CE
-----------------
 - Gui
   * [QTBUG-8408] Show the [X] button on Windows mobile when maximizing.


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

 - uic
  * Improve warnings and error reports.

 - moc
  * Show an error if NOTIFY refer to a wrong signal in Q_PROPERTY.

 - QML Viewer
    * [QTBUG-13347] Paused orientation sensors in Qml Viewer when the
      application window is not active to save device battery.
    * [QTBUG-11019] Add a menu option to open remote files in the QML viewer.
    * QML Viewer is deployed under QtDemos folder instead of QtExamples
      folder in Symbian application menu.

