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

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.

****************************************************************************
*                          Deprecation Notice                              *
****************************************************************************

 - The Q_COMPILER_xxx macros for C++14 compiler features introduced in Qt
   5.3 are deprecated and will not be updated for new compilers either.
   User code should be changed to use the macros from Standing Document 6
   instead:
   http://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations.
   This does not affect C++11 feature macros.

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

 - QExplicitelySharedDataPointer's copy constructor which performs a
   static_cast from "X *" to "T *" (when constructing a
   QExplicitlySharedDataPointer<T> from a QExplicitlySharedDataPointer<X>)
   doesn't perform a static_cast from "X *" to "T *" any more. Instead, an
   implicit cast is now performed. This change will break compilation of code
   that relied on the downcast (i.e.  cast towards a more derived type) of the
   templated type when copy constructing a QExplicitelySharedDataPointer
   object. Please refer to the class documentation for more information about
   this issue and a workaround to keep old code compiling.
 - QImageReader now automatically rotates JPEG images according to Exif
   orientation
 - [QTBUG-18980] HarfBuzz-NG is now the default shaper on all platforms.
   This results in a better shaping results for various languages, better
   performance, and lower memory consumption.
 - [QTBUG-41858] Changed QStringRef::right() to be consistent with
   QString::right(). The function now returns the N right-most characters,
   like the documentation already claimed.
 - The mutable Java-style iterators like QListMutableIterator and
   QHashMutableIterator no longer set the parent container to unsharable
   mode. If you create a copy of the container being iterated on after the
   iterator, any changes done with the iterator might affect the copy too.

 - Logging (including qDebug and qWarning):
   * Support for the deprecated environment variables QT_NO_JOURNALD_LOG
     and QT_ANDROID_PLAIN_LOG has been removed. Instead, set
     QT_LOGGING_TO_CONSOLE to 1 to force logging to the console (stderr).
     Set that variable to 0 to force logging to the system-specific event
     log (if any).
   * [QTCREATORBUG-12564] Log output will now go to the system log (if
     support for it was compiled into Qt) if the application has no
     controlling terminal or console window. Set QT_LOGGING_TO_CONSOLE to 1
     to force logging to go to stderr.

 - QSettings:
   * [QTBUG-41812] QSettings::value() now returns an invalid QVariant when
     passing an empty key. The code path ran into an assert, which was only
     noticeable in debug builds.
   * [QTBUG-21739] The locking mechanism inside QSettings has changed
     and is no longer compatible with the one of previous versions of
     Qt. There might be corruption if two applications running different
     versions of Qt are writing to the same config file at the same
     time. You must also now have write permissions in the directory
     containing the settings file in order to write settings.

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

QtConcurrent
------------

 - [QTBUG-17220] run() now optionally takes as its first argument the
   QThreadPool to run the task on.

QtCore
------

 - Added QEnableSharedFromThis, a class that allows obtaining a
   QSharedPointer for an object already managed by a shared pointer.
 - Added qHashBits() to aid implementing qHash() overloads for custom
   types.
 - Added new QByteArrayList class.
 - Added QStorageInfo class to retrive information about mounted volumes
   and drives

 - Logging:
   * QT_MESSAGE_PATTERN can include a backtrace using %{backtrace}
   * QT_MESSAGE_PATTERN can include a timestamp using %{time}. By
     default, this shows the time in ISO format (YYYY-MM-DDTHH:mm:ss),
     but a different format string can be specified in the tag (e.g.,
     %{time YYYYMMDDHHmmsszzz}). If the format is "process", Qt will
     display the elapsed time since the process started.
   * Added QtMsgType argument to QLoggingCategory constructor and
     Q_LOGGING_CATEGORY macro that controls the default category
     configuration.
   * File, line, function information are not recorded anymore for logging
     statements in release builds. Set QT_MESSAGELOGCONTEXT explicitly to
     enable recording in all configurations.

 - QAbstractProxyModel:
   * [QTBUG-39549] QAbstractProxyModel now forwards the drop-related API.

 - QByteArray:
   * Added convenience methods to convert directly to and from std::string.
   * Fixed a bug that would cause QByteArray to stop converting toUpper or
     toLower at the first embedded null character.

 - QCommandLineParser:
   * Added addOptions() method.

 - QElapsedTimer:
   * Is no longer a POD; its default constructor now initializes the object to
     an invalid QElapsedTimer

 - QFlags:
   * [QTBUG-39786] Added initializer_list constructor

 - QFuture:
   * [QTBUG-17220] Can now be used with any QThreadPool, not just
     globalInstance().

 - QPair:
   * Can now be used in C++11 constexpr contexts.

 - QSaveFile:
   * Now follows symbolic links when writing to a link instead of
     replacing the link with the contents.

 - QSettings:
   * [QTBUG-21739] Fixed data loss while writing the config to the disk
     fails.

 - QStandardPaths:
   * [QTBUG-38483] QStandardPaths now has new enumeration values
     AppDataLocation, AppLocalDataLocation to be able to differentiate
     between roaming and local paths on the Windows operating system.
     DataLocation is deprecated in favor of AppDataLocation.

 - QString:
   * QString can now split a string to a list of QStringRef.
   * Added the QStringRef::split() function

 - QTextStream:
   * QTextStream now uses group separators when writing floating-point
     numbers when the locale is not the C locale. The old behavior can be
     restored by setting QLocale::OmitGroupSeparator on the locale.

 - QTimer:
   * [QTBUG-26406] Implemented new style connect syntax, including
     functors, in QTimer::singleShot

 - QUrl:
   * QUrl::fromLocalFile now returns an empty URL if the input string is
     empty.

 - QVariant:
   * [QTBUG-40363] Fixed ordered comparison between QVariants that do not
     match but produce identical toString output.

 - QVector:
   * Added removeOne() and removeAll() for QList compatibility.

 - QWeakPointer:
   * Added lock() method for std::weak_ptr compatibility.
   * Added member-swap function.

 - QtJson:
   * [QTBUG-26606] QJsonArray and QJsonObject now supports C++11
     initializer lists.

 - QtMath:
   * Introduced qNextPowerOfTwo methods.

QtDBus
------

 - Blocking calls that take a long time will now generate a warning. The
   time taken may be tuned using the environment variables
   Q_DBUS_BLOCKING_CALL_MAIN_THREAD_WARNING_MS and
   Q_DBUS_BLOCKING_CALL_OTHER_THREAD_WARNING_MS. The value represents (in
   milliseconds) how long before a blocking call is warned about. A value
   below zero disables the warning, a value of zero will warn about all
   blocking calls.

QtGui
-----

 - Added QPixelFormat class.
 - Added QOpenGLWidget class.
 - Added QOpenGLWindow class.
 - Added QRasterWindow class.
 - QOpenGLContext is now able to adopt existing native contexts.
 - [QTBUG-38168] QtGui's OpenGL headers are now automatically including the
   highest available header (gl31.h, gl3.h or gl2.h) in OpenGL ES builds.
 - [QTBUG-36483] Dynamic OpenGL implementation loading is now supported on
   Windows. This requires Qt to be configured with -opengl dynamic.
 - [QTBUG-39583] Keymaps are now changeable at runtime when using eglfs.
 - [QTBUG-40841] environment variable QT_DBL_CLICK_DIST customizes the
   amount of movement allowed when detecting a double click.
 - [QTBUG-37552] The eglfs mouse cursor properly resets the array buffer
   from now on to avoid rendering issues.
 - [QTBUG-40093] QWindow::close() is changed to send a QCloseEvent which
   must be accepted before destroy() will be called.

 - Clipboard:
   * [QTBUG-41852] Fixed a memory leak in setMimeData() when the platform
     plugin did not support the requested mode.

 - Painting:
   *[QTBUG-41413] Fixed some very rare cases of mismatched raster modes
    in QPainter.

 - QEvent:
   * [QTBUG-38858] The debug output for events has been significantly
     improved.

 - QFont:
   * [QTBUG-22814][QTBUG-22946] QFont now serializes its data properly,
     without any data loss.

 - QGuiApplication:
   * Add support for -icon command line argument on X11, add -qwindowicon
     on all platforms.
   * Added QGuiApplication::screenRemoved signal to inform that a screen
     has been removed, before Qt reacts to it.

 - QImage:
   * [QTBUG-25998] Added support for 10-bit per color channel image
     formats.

 - QImageReader now automatically rotates JPEG images according to Exif orientation

 - QOpenGLBuffer:
   * [QTBUG-38168] Added QOpenGLBuffer::mapBufferRange().

 - QOpenGLFramebufferObject:
   * Introduced an argument to QOpenGLFramebufferObject::toImage() to save
     mirroring the result.
   * Added support 10-bit per color channels formats as the internal
     framebuffer format, making it possible to render in that precision.

 - QOpenGLTextureCache:
   * Added support for uploading common QImage formats directly to OpenGL,
     if supported by the OpenGL implementation.

 - QPicture:
   * [QTBUG-20578] QPicture now serializes its data properly by also
     accounting for QDataStream versions greater than Qt 4.5.

 - Tablet support:
   * [QTBUG-39458] Added buttons to QTabletEvent.
   * [QTBUG-39666] Events correctly identify the tool.
   * [QTBUG-39570][QTBUG-40469] Corrected valuator ranges across platforms.
   * Better support for non-Wacom devices.
   * Better manual test to verify more features.

 - Text:
   * [QTBUG-41372] Fixed regression when rendering Uchen text in WebKit
     on Windows.
   * Fixed use of uninitialized memory in the FreeType font engine

QtNetwork
---------

 - QNetworkAccessManager:
   * Fixed behavior of upload QIODevice that generate data on readyRead()
     for HTTP PUT/POST

 - QSsl:
   * QSsl::SecureProtocols now also excludes SSLv3

 - QSslCertificate:
   * Can now be used as a key in QSet/QHash.

 - QSslError:
   * Can now be used in QSet/QHash.

 - QSslSocket:
   * [QTBUG-28471] Added support for finding the version of SSL/TLS in
     use by a connection.
   * Added accessors for the version of OpenSSL used at build-time. This
     will help when debugging problems caused by a mismatch with the
     run-time version.
   * [QTBUG-1565] Support for loading PKCS#12 bundles was added. These are
     often used to conveniently transport keys and certificates,
     particularly when making use of client certificates.

QtPrintSupport
--------------

 - QPrinter:
   * [QTBUG-11332] Added duplex support for Windows and OS X.

QtSql
-----

 - ibase: Fixed memory corruption due to LONG being 4 bytes in firebird.

 - QSqlDriver:
   * Add support for determining DBMS type from SQL driver using
     QSqlDriver::dbmsType()

QtTest
------

 - Tests now output build information.

QtWidgets
---------

 - All widgets with a setReadOnly method now send a ReadOnlyChange event
   (e.g., for app-specific palette changes)
 - [QTBUG-32888] Accessibility for widgets is now included in the widget
   library instead of being a separate plugin. For static builds this means
   that libqtaccessiblewidgets is no longer required.
 - [QTBUG-39814] Accessors for Qt::MouseEventSource and Qt::MouseEventFlags
   are now available in QGraphicsSceneMouseEvent.

 - QComboBox:
   * [QTBUG-33537] Fixed positions of items when QComboBox is set as
     editable in Fusion style.
   * [QTBUG-33537] Fixed updating appearance of popup menu when changing
     the editable state of the combo box.

 - QDialog / Windows:
   * [QTBUG-2027] Dialogs can now be menuless.

 - QGraphicsScene:
   * Added the minimumRenderSize property which can be used to speed up
     rendering by not painting items smaller than a give size.
   * The removal of items when using the linear index is now more
     efficient.

 - QLayout:
   * [QTBUG-37673] Widgets and dialogs containing layouts with
     heightForWidth (such as a label with word wrap) will no longer get a
     minimum size of 0x0.

 - QLineEdit:
   * [QTBUG-40287] The signal textEdited() is now emitted when the user
     clicks the clear button created by setClearButtonEnabled() as well.

 - QMainWindow:
   * [QTBUG-40410] Dock widgets will now be resized properly when the
     central widget has a fixed size.

 - QPlainTextEdit:
   * [QTBUG-36415] Fixed a crash when using full width selections and
     issuing a complex undo command chain which removes and inserts an
     empty block in one go.
   * [QTBUG-40347] Fixed a possible divide by zero crash when font metrics
     were missing for the font.

 - QTabBar:
   * Added changeCurrentOnDrag property.

 - QTableView / QTableWidget:
   * [QTBUG-29239] currentIndex() now reflects the top left cell when in a
     span.

 - QTreeView:
   * Indentation is now style-dependent by default.
   * Added resetIndentation().

 - Styles:
   * Allow overriding standardIcon() in a proxy style

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

- Several QPA logging categories are added under qt.qpa to enable logging
  of various platform-specific details. qt.qpa.input is now used
  consistently.

Android
-------

 - [QTBUG-36019] Enable using native style also when Ministro deployment
   mechanism is not in use.
 - [QTBUG-29069] Release all windows when the application is suspended.
 - Added Gradle support to build the APK.
 - [QTBUG-39688] Back key no longer kills the application when no window is
   visible.
 - [QTBUG-41365] Default open-source license for Qt for Android is now
   LGPLv3. For compatibility with the LGPLv2.1 license, add
   "-no-android-style-assets" to your configuration.
 - [QTBUG-32399] Input panels are now hidden when focus changes to an object
   that does not accept input.
 - [QTBUG-41854] Added support for QClipboard::clear()
 - [QTBUG-41852] Fixed memory leak in QClipboard::setMimeData()
 - [QTBUG-41817] QClipboard::mimeData() now returns an empty object instead
   of null pointer from QClipboard when clipboard is empty for consistency
   with other platforms.
 - New bearer plugin. It's now possible to get more information about the
   different network configurations on Android.
 - Important Behavior Changes:
   * [QTBUG-36274] The main event loop is now stopped when the app is
     suspended

iOS
---

 - [QTBUG-39097] Accessibility was added to the iOS platform port. This
   enables Qt applications to be read by VoiceOver on iOS devices.
 - [QTBUG-42276] Fixed path to QStandardPaths::DataLocation. Until now,
   DataLocation was pointing to the Document directory. With this patch,
   it will return the more accurate Library/Application Support.
   Applications making use of DataLocation should move these data to the
   new location. This can be done using the path provided by
   DocumentLocation as the source path.
 - [QTBUG-41458] screen resolution update after device rotation now works.
 - [QTBUG-42345] fixed crash on startup on iOS 7.1
 - iOS is now using fat builds with both 32-, and 64-bit support.
 - New launch screen added to support iPhone6/6+.
 - QtQuick Controls now support native text selection and popup menus.
 - Virtual keyboard visibility is now automatically managed by the platform plugin.
 - Default theme fonts now uses Dynamic Type, which is based on user system settings.

Linux/XCB
---------

 - [QTBUG-35832] Fixed transparency of tray icons in cases where there
   is no alpha channel or system tray visual.
 - environment variables QT_XCB_DEBUG_XINPUT and
   QT_XCB_DEBUG_XINPUT_DEVICES are deprecated and replaced with logging
   categories qt.qpa.input and qt.qpa.input.devices respectively
 - [QTBUG-39572] Wacom touch devices are now working correctly.
 - [QTBUG-42249] A path to a font file can now contain non-Latin characters.

OS X
----

 - OS X 10.6 is no longer supported.
 - OS X 10.10 is now supported.
 - QMacStyle has been updated with better OS 10.10 support.
 - The Qt binary packages are now configured with C++11 enabled.
 - [QTBUG-41208] Fixed detection of writing system support in fonts for
   some scripts such as Mkhedruli.
 - Fixed menu item shortcuts without keyboard modifiers.
 - [QTBUG-31301] Drag-and-drop QMimeData requests are now delayed until
   drop time.
 - [QTBUG-10899] Added support for ApplicationState
   capability. Application can now detect when an application states
   have changed as well when the dock icon has been clicked.

 - Fonts:
   * [QTBUG-40986][QTBUG-40549] Fixed missing glyph box shown in place of
     some uncommon Unicode code points.

Windows
-------

 - [QTBUG-38259] Changed configure defaults so that Qt5Core does not link
   against ICU libraries anymore. Pass '-icu' to enable it.
 - [QTBUG-35432][QTBUG-23687] Command line parsing on Windows now uses
   the WinAPI function CommandLineToArgvW() to exactly match the quoting
   behavior used by the majority of applications.

 - Fonts:
   * [QTBUG-41783] Fix off-by-one in font descent when using the
     DirectWrite font engine.
   * [QTBUG-39961] Set default fallback font to MS Shell Dlg 2 instead of
     Arial.

****************************************************************************
*                      Compiler Specific Changes                           *
****************************************************************************

 - Release builds with Microsoft Visual Studio 2013 now enable the
   standard-conforming C and C++ strict string behavior. This option will
   be enabled in all builds with future Visual Studio versions.
   Non-conforming code should be fixed for maximum portability and
   correctness. See http://msdn.microsoft.com/en-us/library/dn449508.aspx
   for more information.

****************************************************************************
*                                Tools                                     *
****************************************************************************

 - [QTBUG-30900] The obsolete findtr script was removed.

configure & build system
------------------------

 - The -process/-fully-process/-dont-process configure options have been
   removed due to being unnecessary and counterproductive.
 - [QTBUG-36955] The -vcproj configure option was removed. Use "qmake -r -tp vc"
   _after_ building Qt in case you want to use Visual Studio to work on Qt.
 - [QTBUG-37961] Qt plugins contain version info again.
 - [QTBUG-39216] Fixed more cases where the Qt build would pick up headers
   from a pre-existing Qt installation.
 - [QTBUG-41267] Fixed parallelized (jom) -debug-and-release builds.

moc
---

 - Fixed "zero as null pointer constant" warnings in moc's generated
   code.

qmake
-----

 - [QTBUG-21910][Unix] Added 'make dist' target for SUBDIRS projects.
 - [QTBUG-32895][iOS] Fixed structure of bundles. They can be signed now.
 - [QTBUG-26782][VS] Fixed handling of TARGET_EXT.
 - [QTBUG-30712][VS] Fixed handling of QMAKE_LIBFLAGS.
 - [QTBUG-30373][VS] Using different RESOURCES in different build variants
   no longer produces invalid vcxproj files.
 - [QTBUG-37520][VS] Made it possible to suppress qmake warnings about
   unknown compiler options. CONFIG+=suppress_vcproj_warnings.
 - [QTBUG-37363][MSVC2012+] embed_manifest_exe is now properly supported.
 - [QTBUG-41504][MSVC2012+] Building DLLs targeting Windows XP is now
   supported. As a side effect, Windows CE makespecs must not add /ENTRY: to
   QMAKE_LFLAGS_CONSOLE any more. The flag is hard-coded in console.prf now.
 - [QTBUG-35318][Xcode] Fixed QMAKE_BUNDLE_DATA's path resolution.
 - [QTBUG-39527] Fixed qtCompile() when used with jom -jN.
 - QMAKE_EXTRA_COMPILERS' commands and depend_command are no longer mangled.
   Use $$shell_path() and $$shell_quote() to prepare the commands correctly.
 - Added link-time optimization support for Clang, GCC and ICC. CONFIG+=ltgc.

rcc
---

 - rcc now supports an optional, two-pass compilation that improves build
   times for large resource bundles. This feature can be enabled by adding
   "CONFIG += resources_big" to your .pro file. Note that this feature may
   interfere with builds that enable link-time code generation or other
   optimization techniques.

****************************************************************************
*                          Third-party libraries                           *
****************************************************************************

 - ANGLE has been upgraded to version 2.1, bringing partial support for
   OpenGL ES3 over Direct3D 11, numerous bug fixes, and several new vendor
   extensions.
 - [QTBUG-40649][QTBUG-40658][QTBUG-41031][QTBUG-41081][QTBUG-41308][QTBUG-
   41563] ANGLE updated to 2.1~f8602ad91e4f
 - [QTBUG-41031] The ANGLE D3D11 renderer is now enabled by default. Systems
   which cannot use the new renderer will automatically fall back to the D3D9
   renderer at runtime.
