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

  http://qt-project.org/doc/qt-5.2

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

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

  http://bugreports.qt-project.org/

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

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

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

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

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

 - QSGMaterialShader::compile() will not be called on all instances anymore.
   To enforce the old behavior, set the QSGMaterial::CustomCompilation flag.

 - QSGMaterialShader::activate() and QSGMaterialShader::deactivate() are
   no longer responsible for calling glEnableVertexAttribPointer(),
   glDisableVertexAttribPointer() and binding the shader program. This is
   now done by the renderer. Reimplementations of these functions which
   are not calling the baseclass will need to take this into account.

 - The scene graph now requires a call to QSGNode::markDirty() with the
   flag QSGNode::DirtySubtreeBlocked whenever the state of
   QSGNode::isSubtreeBlocked() is changed.

 - When assigning double precision floating point values to integer properties,
   the engine now truncates instead of rounding. This is consistent with the
   ECMAScript specification's way of converting doubles to ints.

 - Comparing value based types with the JS strictly equal operator will
   now behave similar to the corresponding C++ == operator. Ie. two
   QPoints exposed on the JS side will be strictly equal if their values
   are equal. This brings the behavior of value based types in JS closer
   to what one would expect and more inline with primitive values in 
   Javascript.

 - QTBUG-32838: Setting the model property of ListView, GridView or PathView to
   an empty model will now correctly reset currentIndex to -1. In prior versions
   currentIndex was set to 0 regardless of the actual number of rows in the model
   when the model property was changed after the view's initialization.

 - QtQuick.Window will now correctly use Window.AutomaticVisibility by
   default, analogous to QWindow::show(), resulting in eg. maximized
   windows by default on iOS/Android.

 - QtQuick.Window will now warn when setting conflicting visible and visibility
   properties, as this use-case is broken with the current QWindow implementation
   of the two properties.

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

QtQml
------
New types and properties in this version can be accessed using
"import QtQml 2.2".

- New class QQmlFileSelectors allows applying a QFileSelector to QML assets
  and types. One is automatically set on QQmlApplicationEngines from now on,
  plain QQmlEngines must set their own in order to be affected.

- QML Singletons can now be defined in QML using the "pragma Singleton"
  directive, combined with a singleton entry in a qmldir file.

- The Locale type (from Qt.local()) is now available from the QtQml import as
  well as from the QtQuick import.

- New qmlProtectModule function for preventing type injection into built-in
  QML modules.

- Qt.application gained several new members
    * enumeration "state" replaces boolean "active", so as to indicate more
      states than just active/inactive
    * strings "organization" and "domain" added, exposing those properties
      from QCoreApplication.

QtQuick
------
New types and properties in this version can be accessed using
"import QtQuick 2.2".

- New scene graph renderer should reduce state changes, number of draw calls,
  CPU->GPU bandwidth and generally improve performance.

- QTBUG-33993: There is now one render thread per window in QtQuick.

- Textures in the scene graph can now be entered into an atlas, facilitating
  in better batching in the renderer. Atlas textures are enabled by passing
  QQuickWindow::TextureCanUseAtlas to QQuickWindow::createTextureFromImage()

- New "Animator" types available for running QtQuick animations on the render
  thread. This allows certain animations to continue when the GUI thread is
  blocked.

- Text gained a hoveredLink signal.

- TextEdit gained an append method for easier programmatic text controls.

- TextInput gained an editingFinished signal.

- Drag and DropArea elements now handle drag'n'drop from other applications.

- Screen type gained a pixelDensity property, deprecating logicalPixelDensity,
  as logicalPixelDensity is less portable across some mobile platforms.

- QTBUG-34368: Click signals are no longer propagated to disabled MouseAreas

- QTBUG-33644: Windows created dynamically now respond appropriately when
  modality is set.

- QTBUG-33699: PathView now follows the same pattern as Flickable for
  grabbing the mouse.

- QTBUG-32078: qmlClearTypeRegistrations now works when using QtQuick.

- QTBUG-33112: Setting an items state too early no longer crashes.

- QTBUG-32920: Dragging a MouseArea nested in a Flickable now works with touch
  to mouse translation.

- QTBUG-32513: Crash fix when changing image source repeatedly.

- QTBUG-32750: Fix over-clipping text on smaller fonts.

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


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


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


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

- qmltestrunner: qtest context property is deprecated. Use QTestRootObject
  from Qt.test.qtestroot instead.

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

- A new experimental QML Settings type provides means for applications to
  manage persistent settings in a platform-independent manner. The type is
  made available by importing the Qt.labs.settings 1.0 module. Note: types in
  the Qt.labs module are not guaranteed to remain compatible in future
  versions.

- Qt.labs.folderlistmodel FolderListModel type gained showFiles and
  showHidden properties in Qt.labs.folderlistmodel 2.1.

- QML-backed plugins, like QtQuick.Dialogs, now only deploy QML files in debug
  mode. In release mode QML files are built into the plugin and referenced via
  qrc URLs.

- New FontDialog and MessageDialog types available in QtQuick.Dialogs 1.1

- ColorDialog added currentColor property in QtQuick.Dialogs 1.1
