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.

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

 - Introduced a native Android style
 - Added text selection handles to all editable controls on Android and iOS
 - Added translation support to dialogs
 - Made all controls and dialogs use native text rendering on mobile
   platforms

****************************************************************************
*                          Examples                                        *
****************************************************************************

 - Revised the Qt Quick Controls Gallery and Table View examples to be more
   mobile friendly
 - Removed the Split View example - a similar snippet is available in the
   detailed description section of SplitView documentation
 - Made the Styles tab of the former Gallery example a standalone example

****************************************************************************
*                          Controls                                        *
****************************************************************************

 - ApplicationWindow:
   * Introduced ApplicationWindowStyle for styling the window background

 - Button:
   * Added support for mnemonics

 - Calendar:
   * Added navigationBarVisible property
   * Added pressAndHold(date) signal

 - CheckBox:
   * Added support for mnemonics

 - ComboBox:
   * Added inputMethodComposing property

 - Menu:
   * Fixed key navigation on Windows

 - RadioButton:
   * Added support for mnemonics

 - ScrollView:
   * Added horizontalScrollBarPolicy and verticalScrollBarPolicy properties

 - Slider:
   * [QTBUG-39099] Fixed the step size used on increase/decrease key press
   * Made the hovered property follow the hovered state of the handle
     instead of the whole groove

 - SpinBox:
   * Added inputMethodComposing property

 - SplitView:
   * [QTBUG-35281] Added addItem() method

 - StackView:
   * Changed the linear slide with a smooth animation

 - Switch:
   * Added pressed property
   * Added clicked() signal

 - TableView:
   * Added pressAndHold(int row) signal
   * Fixed support for Keys-attached property
   * [QTBUG-41444] Fixed leaking of key events
   * Made focused and selected rows to be raised above other rows

 - TabView:
   * [QTBUG-38425] Added contentItem property

 - TextArea:
   * [QTBUG-38324] Added contentWidth and contentHeight properties
   * Added cursorRectangle property
   * Added inputMethodComposing property
   * Made selection persistent

 - TextField:
   * Added cursorRectangle property
   * Added selectByMouse property
   * Added inputMethodComposing property
   * [QTBUG-38282] Added support for sticky VKB with Qt.ImhMultiLine

 - ToolButton:
   * Added support for mnemonics

****************************************************************************
*                          Dialogs                                         *
****************************************************************************

 - Fixed deployment dependencies
 - [QTBUG-41844] Fixed centering of dialogs over parent windows
 - [QTBUG-41734] Fixed several sizing problems
 - [QTBUG-38578] Fixed dynamically created dialogs

 - I18n:
   * Added translation support

 - ColorDialog:
   * Fixed rendering on non-windowing platforms

 - FileDialog:
   * Fixed array key navigation to always navigate the file list
   * Replaced icons with scalable ones from an icon font
   * [QTBUG-39231] Added sideBarVisible property and button
   * [QTBUG-39435] Fixed Save As and directory-choosing scenarios

 - FontDialog:
   * [QTBUG-39365] Added support for key navigation

 - Dialog:
   * Focus is given to the contentItem automatically

****************************************************************************
*                          Layouts                                         *
****************************************************************************

 - Increased the default spacing on mobile platforms
 - [QTBUG-39045] Fixed a crash when removing children from hidden layouts

****************************************************************************
*                          Styles                                          *
****************************************************************************

 - Introduced ApplicationWindowStyle

 - ComboBoxStyle:
   * Added font property
   * Added textColor, selectionColor and selectedTextColor properties

 - MenuBarStyle:
   * Added font property

 - MenuStyle:
   * Added font property
   * Added styleData.pressed context property

 - SpinBoxStyle:
   * Added font property

 - TableViewStyle:
   * Added styleData.pressed context property for itemDelegate & rowDelegate
   * Added styleData.hasActiveFocus context property for itemDelegate

 - TabViewStyle:
   * Added styleData.pressed context property for tab

 - ToolBarStyle:
   * Added menuButton property

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

Android
-------
 - Introduced a native Android style
 - [QTBUG-38934] Added text selection handles to all editable controls

iOS
---
 - [QTBUG-38934] Added text selection handles to all editable controls
 - Made ComboBox open a native selection menu
 - Added edit menu (cut, copy, paste) support to all editable controls
 - Added text cursor and scroll bar styling

Windows
-------
 - Fixed Menu key navigation
