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

  http://doc.qt.io/qt-5/index.html

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

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

  https://bugreports.qt.io/

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

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

* qmlInfo now reports messages with a QtMsgType of QtInfoMsg instead of
  QtWarningMsg. To continue to send warnings, callers should migrate to
  the newly-introduced qmlWarning function.

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

QtQml
-----

 - The garbage collector has been rewritten to provide better memory
   consumption, and improved, more predictable performance for JavaScript code.
 - Array.prototype.find and Array.prototype.findIndex from ES6 are now implemented.
 - Introduced qmlRegisterModule() that can be used to make a certain module
   version available, even if no types or revisions are registered for that
   version.
 - Introduced qmlDebug & qmlWarning functions to qqmlinfo.h, in addition to
   the pre-existing qmlInfo function. As a side effect, QQmlError has also
   gained messageType() and setMessageType().
 - [QTBUG-52013] Added QQmlEngine::offlineStorageDatabaseFilePath(dbName)
   to allow getting the actual storage path for a particular database.
 - [QTBUG-53091] Introduced Qt.application.displayName, to map the
   QGuiApplication::applicationDisplayName property to QML.
 - [QTBUG-45316] QML Settings has been fixed to handle JavaScript arrays.

QtQuick
-------

 - Global:
   * Improved stability of Animator's internals.
   * [QTBUG-55496] Added a disk cache for OpenGL shaders to QtQuick.
   * [QTBUG-58845] QWheelEvent delivered to all QQuickItems will now have a
     correct global position.
   * [QTBUG-57910] Touch events are now correctly ungrabbed if the touch event
     was stolen by a parent item, such as a Flickable.
   * [QTBUG-57098] Added Keys::shortcutOverride signal to allow prevention of
     e.g. Shortcut from stealing key events.
   * [QTBUG-56279] Added a shared memory image provider to conserve memory
     when several processes use the same local image files.

 - Window:
   * [QTBUG-60232] Added QQuickWindow::sceneGraphBackend() to allow querying
     which scene graph rendering backend is in use.
   * [QTBUG-56115] Added a screen property to Window, which can be used to
     declaratively associate a window with a specific screen. This is useful on
     multi-screen embedded systems. Added Qt.application.screens as an array of
     screens from which one can be chosen to assign to a Window. Added virtualX
     and virtualY properties to Screen to enable querying the screen's position
     within the virtual desktop.

 - Items:
   * [QTBUG-38515] Added horizontalOvershoot and verticalOvershoot
     properties to Flickable, for use in implementing custom boundary actions and effects.
   * [QTBUG-44762] Added a forceLayout method to Positioner types (Column, Row,
     Flow, Grid) to force positioning of children to happen earlier. Additionally,
     a positioningComplete signal has been added.
   * [QTBUG-57203] Added TextInput::textEdited signal to distinguish user edits from
     programmatical text changes.
   * [QTBUG-42074][QTBUG-57003] Added support for characters in Private Use Area,
     as well as zero-width joiners and zero-width non-joiners for TextInput and
     TextEdit.
   * [QTBUG-47662] Added MouseArea::pressAndHoldInterval to allow control over the
     elapsed time before the pressAndHold signal is emitted.
   * Item::grabToImage on an Image element will now work regardless of the
     Image's sourceSize or cache properties.
   * [QTBUG-52553][QTBUG-56501] Made it possible to enable horizontal
     flicking in a vertical ListView, and vice versa. The only thing apps
     must do is to specify the desired flick direction and the content
     width (vertical ListView) or content height (horizontal ListView),
     which is not calculated by ListView.
   * Added Shortcut::sequences, to provide support for multiple different shortcut
     sequences in a single Shortcut.
   * Added rotation, ellipseDiameters and uniqueId properties to
     MultiPointTouchArea.TouchPoint, and deprecated the area property.
     A TouchPoint is now modeled as an ellipse centered on a point,
     possibly rotated, depending on what the hardware and drivers support.
     Android and the TUIO plugin support rotation and ellipseDiameters, for example.
     The uniqueId is so far applicable only to the use of fiducials (tokens,
     knobs or game pieces with hardware-based identification) on a TUIO touch surface.

 - Accessibility:
   * [QTBUG-58340] Fixed focus handling so that keyboard and VoiceOver's
     virtual focus are in sync (QTBUG-58340).

 - Text:
   * Deprecated doLayout() in favor of forceLayout(), to improve consistency now
     that more types (Positioners, Layouts, etc) have a forceLayout() method.
   * [QTBUG-51133] Added fontInfo property to Text type, providing a way to
     query properties of the actual font used for presenting the text.
   * [QTBUG-58852] Text items with a renderType of Text.NativeRendering will no
     longer stop rendering with a large number of characters.


QtTest
------

 - [QTBUG-23083] Added TestCase::touchEvent to support simulating touch events
   in tests.
 - [QTBUG-56361] Added createTemporaryObject() and createTemporaryQmlObject()
   functions to ensure that dynamically created objects can be destroyed at the
   end of each test function.
