Qt 5.7 introduces many new features and improvements as well as bugfixes
over the 5.6.x series. Also, there is a change in the licensing terms.
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.7 series is binary compatible with the 5.6.x series.
Applications compiled for 5.6 will continue to run with 5.7.

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 License Changes                       *
****************************************************************************

  This module is no longer available under LGPLv2.1. The libraries are
  now available under the following licenses:
    * Commercial License
    * GNU General Public License v2.0 (LICENSE.GPL2) and later
    * GNU Lesser General Public License v3.0 (LICENSE.LGPL3)

  The tools are now available under the following licenses:
    * Commercial License
    * GNU General Public License 3.0 (LICENSE.GPL3) with exceptions
      described in The Qt Company GPL Exception 1.0 (LICENSE.GPL3-EXCEPT)

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

QtQuick
-------

   * [QTBUG-41833] QQuickItem::childAt was incorrectly including any child
     whose right or bottom edge was adjacent to the point being checked,
     as if it had width+1 and height+1. An Item with a width of 100
     covers pixels from x=0..x=99, and likewise with height; so now,
     calling childAt(100, 100) on its parent will not return it.

   * [QTBUG-51115] TextEdit and TextInput now clear their selection when
     becoming read-only.

   * QtQuick.Layouts moved to the qtdeclarative repository.

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

QtQml
-----

 - [QTBUG-52556] Made the QML Engine capable of locating QML sub-modules
   from within a versioned parent module path. For example, QtQml.Models
   2.x can be either in QT_INSTALL_QML/QtQml/Models.2 or in
   QT_INSTALL_QML/QtQml.2/Models.
 - [QTBUG-36350] Added Connections::enabled property to allow toggling of the
   signal handlers inside a Connections element.
 - Enabled JIT for x86/x64 targets on Windows 10 and later.
 - Enabled JIT for Aarch64.

QtQuick
-------

 - Window:
   * Added Window.window attached property, allowing access to the QQuickWindow
     an Item belongs to.

 - GridView & ListView:
   * [QTBUG-17051] Added keyNavigationEnabled property to allow mouse and
     keyboard interaction to be selectively enabled/disabled.
   * Sticky headers or footers are now correctly positioned in the case of
     an empty view.

 - MouseArea:
   * Added mouse.source property to enable distinguishing genuine mouse
     events from those that are synthesized from touch or tablet events.

 - PathView:
   * Added PathView::movementDirection, which sets the direction in which items
     move when setting currentIndex.

 - QQuickItem:
   * Added isAncestorOf() to determine if an item is the ancestor of another
     item (i.e. the parent, or a parent further up the item tree).
   * [QTBUG-28668] Added support for mapping item's coordinates to and from global
     screen coordinates, in the form of Item::mapToGlobal() and
     Item::mapFromGlobal().

 - TextEdit/TextInput:
   * [QTBUG-49503] Added TextEdit::preeditText & TextInput::preeditText,
     which allow access to partial (uncommitted) text from an input method.
   * [QTBUG-50428] Added TextEdit::clear() and TextInput::clear() which sets the
     text to an empty string, but in addition, also clears partial (uncommitted)
     text.

 - Loader:
   * [QTBUG-29789] Object creation previously started asynchronously can be
     forced to complete synchronously by changing the "asynchronous" property
     from true to false.

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

 - FolderListModel
   * [QTBUG-45566] Added FolderListModel::caseSensitive, to control whether or
     not filtering is applied case sensitively.

