Qt 5.4 introduces many new features and improvements as well as bugfixes
over the 5.3.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.4 series is binary compatible with the 5.3.x series.
Applications compiled for 5.3 will continue to run with 5.4.

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
--------------------

 - The Declarative State Machine Framework extends Qt's State Machine
   Framework (QSM) into QML. This gives you the power of deterministic
   state machines, but declaratively.

 - Added QML linter tool.

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

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

 - [QTBUG-40431] When a JavaScript object/array is passed to C++ through
   a QVariant, the engine no longer immediately converts the object
   recursively into a QVariantMap or QVariantList but instead stores a
   QJSValue in the QVariant. This prevents a loss of data when the JS
   object contains non-primitive types such as function objects for
   example. Code that expects the variant type to be exactly
   QVariant::Map or QVariant::List may need to be adapted. Registered
   conversion functions however ensure that code that merely calls
   toMap() or toList() continues to work.
 - [QTBUG-39971] Qt 5.3 changed the mapping of "var" parameters in QML
   declared signals to QJSValue. This was reverted to the behavior of
   earlier Qt versions to use QVariant. The original issue of not being
   able to pass function objects through var parameters of QML declared
   signals is solved by wrapping a QJSValue inside the QVariant.



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

QtQml
-----

 - qmldir:
   [QTBUG-41489] added the ability to declare dependencies on other
   modules in a module definition qmldir file


QtQuick
-------

 - Accessibility for Qt Quick is now included in the qtquick library
   instead of being a separate plugin.
 - QQuickWindow will compresses touch events and delivers at most one touch
   event per frame.
 - [QTBUG-38539] Added property MouseArea.drag.smoothed for toggling
   whether the drag target is moved to the current mouse position after a
   drag operation has started.
 - [QTBUG-37944] Introduced QQuickRenderControl as a public API.
 - [QTBUG-37589] Added QQuickWidget::grabFramebuffer() for capturing the
   content into a QImage.
 - tools and examples consistently use the QtProject organization name
 - [QTBUG-40130] Add containsPress property to MouseArea
 - Added QQuickFontMetrics, which provides a subset of QFontMetricsF's API.
 - Added QQuickTextMetrics, which provides a declarative API for the
   functions in QFontMetricsF which take arguments.
 - Introduced OpenGLInfo attached type that provides information about the
   currently used OpenGL version.
 - Images exceeding GL_MAX_TEXTURE_SIZE will be downscaled to fit so they
   will still show.
 - [QTBUG-42096] Fixed nodes sometimes disappearing when adding many new
   nodes to the tree.

 - Canvas:
   * Implement antialiasing on FramebufferObject based render targets
     through super-sampling (SSAA) when framebuffer multisampling is not
     available.

 - Important Behavior Changes:
   * Drag and Drop events now propagate to child items before their
     parents.
   * [QTBUG-40329] TextInput::displayText now includes also partial input
     from an input method and thus matches with the actual displayed text.

 - Item:
   * Added functions QQuickItem::grabToImage() and Item::grabToImage() to
     allow grabbing of items into system-memory images.
   * When Item.opacity is set to a value outside the range of 0 to 1, it
     will be clamped.

 - ListView:
   * Introduced headerPositioning and footerPositioning properties to
     control whether header and footer are positioned inline, as overlays,
     or so that they slide away and can be pulled back regardless of the
     content position.

 - QQuickItem:
   * Added signals sceneGraphInitialized and sceneGraphInvalidated

 - QQuickWindow:
   * Added QQuickWindow::scheduleRenderJob(), a convenience alternative to
     the equivalent signals for one-shot tasks.

 - SceneGraph:
   * There might not be an OpenGL context bound when
     QQuickWindow::sceneGraphInvalidated() is emitted if an error occurs
     while cleaning up the scene graph (such as EGL_CONTEXT_LOST). This is
     according to the documentation, but has never occurred in practice
     before.

 - TextInput:
   * Added passwordMaskDelay property
   * [QTBUG-38934] Added TextInput::ensureVisible(int pos) method to be
     able to control the scrolling position of a TextInput that has
     automatic scrolling enabled.

 - Window:
   * Added Item.Window attached property

QtQuick.Dialogs
---------------

 - [QTBUG-39365] FontDialog: support keyboard navigation
 - [QTBUG-39231] FileDialog: added sidebarVisible property and button


