Qt 5.2.1 is a bug-fix release. It maintains both forward and backward
compatibility (source and binary) with Qt 5.2.0.

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

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

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.

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

 - [QTBUG-34345][QTBUG-26008][QTBUG-26430] QPrinter no longer allows you to
   set an invalid printer name.
 - [QTBUG-34141] Parsing of Qt::ISODate by QDate::fromString() and
   QDateTime()::fromString() is not as lenient as before, the date
   component separators are now required to be non-numeric. This means a
   string like "2000901901" will no longer be recognized as a valid ISO
   Date, but "2000/01/01" will still be even though it doesn't strictly
   meet the ISO format of "2000-01-01".

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

QtCore
------

 - [QTBUG-35069] Fixed a bug that caused negative number input using '-' to
   be rejected because the current locale uses U+2212. QLocale::toString()
   as well as QIntValidator and QDoubleValidator now accept both '-' and
   U+2212, as well as the locale minus sign. QString also accepts '-' and
   U+2212.
 - Fixed sign conversion warnings in code using QMetaTypeId.

 - QTemporaryDir:
   * Fixed a bug in QTemporaryDir name generator that dramatically reduced
     randomness of the name.

 - QThread:
   * [QTBUG-34840] Fixed handle leaks on Windows.

QtGui
-----

 - [QTBUG-35421] Fixed crash when sending accessibility updates when the
   corresponding widget does not have a corresponding QAccessibleInterface.
   This showed on Mac for example with QStatusBar.
 - Qt's generic font database now adds OpenType fonts (.otf).

 - Accessibility
   * On Linux action names were returned as empty strings in AT-SPI
     getActions, now returns the proper names.

 - QKeySequence:
   * [QTBUG-24406] return Qt::Key_unknown with invalid modifiers on OS X

 - Text:
   * [QTBUG-35740] Fixed regression when shaping some strings containing
     characters from multiple fonts.

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

 - [QTBUG-34700][QTBUG-35500] Fixed bugs that caused QtPrintSupport
   not to report the correct the paper sizes on Windows and on OS X.

QtSql
-----

 - IBase support:
   * [QTBUG-33345] Custom port numbers are now supported.
   * [QTBUG-13435] Fixed the internal state of IBase driver after a failed
     open call.

 - MySQL / MariaDB support:
   * [QTBUG-31124] Fixed handling of fractions of second.

 - Oracle support:
   * [QTBUG-34794] Fixed the compilation

 - Sqlite support:
   * [QTBUG-24200] Fixed handling of fractions of second.
   * [QTBUG-35186] Fixed evaluation of driver options

QtTestLib
---------

 - [QTBUG-34630] The (default) plain text logger on Windows now logs to
   either the system debug log (in case no console is open), or stdout, not
   both.

QtWidgets
---------

 - QSpinBox:
   * [QTBUG-20691] Entering positive values with the '+' prefix is now
     allowed.

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

Android
-------

 - [QTBUG-34984] Added workarounds for OpenGL bugs on Samsung Galaxy
   Tab 3.

OS X
----

 - [QTBUG-34411] Implemented QMainWindow::setUnifiedTitleAndToolBarOnMac.

X11 / XCB
---------

- [QTBUG-32683] Fixed a bug that caused Qt applications to think the
  screen DPI had changed when it had not, after connecting or
  disconnecting monitors.

Windows
-------

 - [QTBUG-8361] Maximizing frameless windows will no longer cover the
   taskbar
 - [QTBUG-34799] Updated QWidgetBackingStore and the Windows
   implementation to support Qt::WA_StaticContents.
 - [QTBUG-35357] Fixed a regression from Qt4 in QProcess that
   prevented altering the pipe modes of stdin in the child process.


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

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

 - [QTBUG-34949] EGL works with desktop OpenGL now
 - A build from source will not install the Qt DLLs into lib/ any more.
   The canonical location is bin/.

qmake
-----

 - [QTBUG-35530] Fixed the detection of multiple VS installations.
 - [QTBUG-35610] Fixed the generation of VS 2010 project files.
 - [QTBUG-32412] Numerous fixes to Windows PDB file handling.
 - [QTBUG-3883] Fixed make distclean not removing static library targets.
 - Added makespec for clang using libc++ on Linux.
 - qmake will not look for mkspecs/ directories in project trees any more.
   Use .qmake.conf and/or .qmake.cache to "anchor" project roots.
