Qt 5.6 introduces many new features and improvements as well as bugfixes
over the 5.5.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

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

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.

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


QtQml
-----

 - Enabled Just-In-Time compilation for JavaScript on MIPS

 - ObjectModel:
   * Added get(), append(), insert(), move() and remove() methods.

 - Profiling:
   * QtQml can now write additional information so that perf is able to give
     function names of JavaScript methods when profiling. To enable this, set
     the environment variable QV4_PROFILE_WRITE_PERF_MAP=1 when running the
     process in question.

 - XMLHttpRequest:
   * Added support for the PROPFIND method in HTTP requests.
   * Added support for the "json" binary response type.
   * Fixed a memory leak in the use of the responseXML property.

 - qml tool:
   * The qml tool now quits immediately if Qt.quit() is called before all scenes
     complete creation.
   * Make it possible to make script without .qml suffix

 - QJSEngine:
   * Introduced an extension API that allows installing various function and
     object extensions (qsTr(), console.log(), etc.) to QJSEngine.
     installTranslatorFunctions() was deprecated in favor of the new extension
     API (see installExtensions()).

 - QQmlComponent:
   * Synchronously complete the loading of an asynchronous QQmlComponent, if a
     PreferSynchronous QQmlComponent is created for the same url (provided that
     this url does support synchronous loading).

 - URLs from Qt.include() are now passed through the URL interceptor (if
   present).

QtQuick
-------

 - Added padding, leftPadding, topPadding, rightPadding and bottomPadding
   properties to Text, TextInput, TextEdit in addition to all positioning items,
   such as Column, Row, Grid, and Flow.

 - Items may now listen for the ItemDevicePixelRatioHasChanged event in
   QQuickItem::itemChange() in order to become aware of when DPI scaling has
   changed (for instance, when the window has moved to a different screen).
   Text elements take advantage of this in order to rerender when the DPI has
   changed.

 - Images now support looking for higher pixel ratios, not just @2x.

 - Added the possibility to mirror the generated OpenGL texture via the newly
   added Item::layer.textureMirroring and ShaderEffectSource::textureMirroring
   properties.

 - QQuickFramebufferObject:
   * Added a mirrorVertically property to QQuickFramebufferObject.

 - Shortcut:
   * Added Shortcut.nativeText and portableText properties to read back the key
     sequence as a string
   * Added Shortcut.sequenceString property to read back the key sequence as a
     displayable string

 - Flickable:
   * The movement related signals and properties are now updated for flicks
     started via the flick function.
   * Mouse wheel movement will no longer cause Flickable to overshoot past its
     boundaries.

 - Flipable:
   * Flipable now toggles the 'enabled' property on whichever side is active.
     This restores broken behavior compatibility with QtQuick1, and blocks
     input to whichever side is not active.

 - Item:
   * Added EnterKey attached property that allows to change the appearance of
     the Enter key on an on-screen keyboard.

 - MultiPointTouchArea:
   * Fixed released() signal duplication on mouseReleaseEvent.

 - QQuickPaintedItem:
   * Implement high-dpi support and add function textureSize. This obsoletes
     the existing contentsSize, contentsScale and contentsBoundingRect
     functions.
   * A QQuickPaintedItem with Item.layer set will now include child items in the
     layer.

 - QQuickWindow:
   * Add TextureIsOpaque option to createTextureFromImage()
   * Added a render job stage: NoStage. This allows scheduling jobs for
     execution on the render thread.

 - Repeater:
   * Positioners will now always ignore Repeaters. Previously, Repeaters were
     ignored by positioners when their width or height were 0.

 - Text:
   * Fixed baseline of Text elements where the vertical alignment was something
     other than top.

 - TextEdit:
   * Add an editingFinished signal, emitted when the text edit loses focus. This
     mirrors the same signal already available on TextInput since Qt 5.2.

 - Item Views:
   * positionViewAtIndex() will now reliably work on a view with a sticky
     header/footer set.
   * ListView no longer ends up with "holes" between delegates (or missing
     delegates) under some circumstances.

QuickTest
---------

 - TestCase:
   * Added equals() function to image object returned from TestCase's
     grabImage() function.
   * Key events in TestCase are now sent to the window with active focus,
     meaning that tests that create custom windows can receive key events.

QtQuick.Particles
-----------------

 - Turbulence:
   * Noise source image is now correctly read from QRC files as well as local
     files.

Qt.labs.folderlistmodel
-----------------------

 - FolderListModel:
   * Add an indexOf(file) function to determine the index of a given file.

