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

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.


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

 - Important Changes:
   * The enum value ResourceTypeUnknown has changed value because there was
     a mismatch between 5.6 and 5.7+ definitions. In general any unknown
     ResourceType value should be handled as unknown for forward
     compatibility, because more types are and can be added in later
     Qt versions.

 - Chromium Snapshot:
   * The Chromium version has been updated to 53.0.2785.148.
   * Security fixes from Chromium up to version 55.0.2883.75
    Including fixes for: CVE-2016-5181, CVE-2016-5182, CVE-2016-5183,
      CVE-2016-5185, CVE-2016-5186, CVE-2016-5187, CVE-2016-5189,
      CVE-2016-5192, CVE-2016-5199, CVE-2016-5201, CVE-2016-5203,
      CVE-2016-5204, CVE-2016-5205, CVE-2016-5206, CVE-2016-5208,
      CVE-2016-5207, CVE-2016-5210, CVE-2016-5211, CVE-2016-5212,
      CVE-2016-5213, CVE-2016-5214, CVE-2016-5215. CVE-2016-5216,
      CVE-2016-5217, CVE-2016-5218, CVE-2016-5219, CVE-2016-5221,
      CVE-2016-5222, CVE-2016-5223, CVE-2016-5224, CVE-2016-5225,
      CVE-2016-9650 and CVE-2016-9651

 - General:
   * Spellchecking support has been introduced.
   * Build time options can now be controlled via arguments to the global
     configure script or app.
   * [QTBUG-52999] Added focusOnNavigationEnabled setting which allows
     controlling whether a web view will receive focus on a navigation
     request. Previously the view always received the focus.
   * [QTBUG-54902] Added setting to allow secure content to run insecure
     content.
   * [QTBUG-54918] Printing will now include the CSS background of the
     printed elements by default. This restores the default behavior from Qt
     WebKit. It can be controlled via the PrintElementBackgrounds web
     setting.
   * Some chrome:// URLs are now supported. For instance chrome://gpu.
   * [QTBUG-53042] Pepper Flash glyph draw is now supported.
   * A DownloadType has been added to download items.
   * Greasemonkey attributes are now supported in user scripts.
   * [QTBUG-55766] Added support for colored underline and background
     to InputMethodEvent.
   * Qt no-opengl builds are now supported.


****************************************************************************
*                          Qt WebEngine[QML]                               *
****************************************************************************

 - General:
   * [QTBUG-53467][QTBUG-51177] Qt WebEngine (QML) now optionally uses Qt
     Quick 2 Controls to show standard dialogs.
   * [QTBUG-51190] Added ability to provide custom dialogs for HTTP and
     proxy authentication, JavaScript alerts, file and color picking, and
     form validation messages.
   * [QTBUG-52554] Added ability to show custom context menu.

 - QQuickWebEngineView:
   * ToolTip (HTML title attributes) are now handled.
   * View Source feature is now supported.


****************************************************************************
*                        Qt WebEngineWidgets                               *
****************************************************************************

 - Scenegraph Integration:
   * Using the software rasterizing scenegraph backend is now supported.

 - Printing:
   * Enables printing QWebPage content on a QPrinter. Currently does not
     support previewing the document. Widgets only for the moment.

 - QWebEnginePage:
   * Introduced a new save method to save a page to a predefined location.


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

 - Linux:
   * Pepper Flash is now also searched for in /usr/lib/adobe-flashplugin/

 - Windows:
   * MSVC2015 and Windows 10 SDK are now required.
