Qt 5.3 introduces many new features and improvements as well as bugfixes
over the 5.2.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.3

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

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

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

QtBluetooth
-----------

 - Documentation:
   * The documentation for the Bluetooth discovery classes has been
     improved.
   * QBluetoothSocket's local name, port and address property documentation
     improved.
   * Documentation of all examples improved.

 - General:
   * Added a new Object-Push example.
   * QML scanner example was optimized for high DPI displays and
     error handling was improved. This ensures a better user interface
     for Android and BlackBerry devices.
   * Replaced tennis example against new QML based PingPong example.
   * Test application added. This application enables easier testing
     and debugging of the various API features.

 - BluetoothDiscoveryModel (QML):
   * Improved error handling of device discovery process.
   * Fixed incorrect behavior when changing from device to service discovery
     and vice versa.

 - QBluetoothDeviceDiscoveryAgent:
   * Added checks and error enum value to avoid incorrect handling of
     non-existing local Bluetooth adapter addresses.

 - QBluetoothHostInfo:
   * Copy operator added.

 - QBluetoothLocalDevice:
   * Added a new API elements to retrieve connected Bluetooth devices
     and to receive notifications about connection changes.

 - QBluetoothServiceDiscoveryAgent:
   * Fixed the fallback backend's initial state and error values.
   * Duplicated code was removed.
   * QBluetoothServiceDiscoveryAgent::clear() was improved to avoid
     unpredictable class behavior.

 - QBluetoothServer:
   * Checks added to avoid calls to listen() while the server socket is
     already listening for incoming sockets.
   * Fixed inconsistent state() of server object after failed service
     registration attempt during listen() call.
   * Fixed incorrect parameter type of error() signal. This fixed issues
     whereby QObject::connect() could not find the signal.
   * Added custom uuid to serial port service SDP data set. This enables
     the discovery of such profiles on Android devices.

 - QBluetoothServiceInfo:
   * Fixed broken implementation of serviceClassUuids().

 - QBluetoothSocket:
   * Fixed a crash in Bluez part of QBluetoothSocket() which was caused
     triggered when calling the sequence connect() - abort() - connect().
   * Fixed missing initialization of the internal socket error state
     variable. This caused incorrect QBluetoothSocket::error() right after
     class instantiation.
   * Synchronized handling of errors across all supported platforms.

 - QBluetoothUuid:
   * Fixed wrong value of PnpInformation enum value.
   * Added newly defined ServiceClassUuid's defined  Bluetooth forum.


QtNfc
-----

 - Documentation:
   * Added missing documentation to QQmlNdefRecord.
   * General documentation fixes add.

 - General:
   * Added a new corkboard example displaying the content of NDEF text
     records.
   * A new NFC share API was added. The API provides sharing of NDEF
     messages and arbitrary files via NFC and may potentially use other
     communication protocols such as wifi or Bluetooth as part of its
     implementation.



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

Android
-------

 - [QTBUG-33792] QtBluetooth has been ported to Android.

BlackBerry 10:
--------------

 - [QTBUG-36626] Fixed a memory leak in QBluetoothServer::listen().
 - Fixed incomplete implementation of QBluetoothServer::close().
 - Fixed wrong pairingStatus() returned by QBluetoothLocalDevice.
 - Fixed accidental loss of remote device information in QBluetoothServer.
 - Added incomplete implementation of QBluetooth::setMaxPendingConnections().
 - Fixed always failing call to QBluetoothServerInfo::unregisterService().
 - Fixed missing emission of ConnectedState by QBluetoothSocket.
 - Fixed implementation of QBluetoothTransferManager::put() when using
   together with a QFile.

Bluez/Linux
-----------

 - The handling of powered-off local Bluetooth adapters was improved.
 - Fixed memory leaks in service and device discovery classes.
 - Removed dead code from SDP discovery implementation.
 - Fixed crash during service discovery.
 - Fixed incorrect invocation of QBluetoothDiscoveryAgent where the
   remote service address was incorrectly assumed to be the local Bt
   adapter address. This prevented the detection of the remote service.
 - Removed caching of QBluetoothSocket::localName() and peerName() values. Under
   certain circumstances those functions returned wrong values.
 - Fixed missing update of internal QBluetoothSocket::state during SDP discovery.
 - Removed assertion during service discovery due to unknown SDP attribute.
 - Prevented calls to QBluetoothSocket::connectToService() while the socket
   is already in the ServiceLoockupState.
 - Fixed failing call to QBluetoothServer::listen(QBluetoothAddress) if the passed
   address was null.

