Qt 4.5.0-garden
---------------

The Qt for S60 "Garden" release is the fourth pre-release from the
Qt for S60 porting project. "Garden" is based on the Qt 4.5 codebase
and release focus has been on proper GUI integration.

Up to and including change: b7621555cb1d1c97967dd40d63dd7e85a418407c

Lists just S60 fixes, for general 4.5.0 changes go to:

  http://qt.nokia.com/developer/changes/changes-4.5.0

Some of the changes listed in this file include issue tracking numbers
corresponding to tasks in the Task Tracker:

  http://qt.nokia.com/developer/task-tracker

Each of these identifiers can be entered in the task tracker to obtain
more information about a particular change. Sometimes the task is internal
and cannot be viewed by the public, a lot of them are non-public for Qt for
S60 at the moment.

****************************************************************************
*                          New features                                    *
****************************************************************************

New modules
-----------

- qtmain
  * Added a small static library called qtmain which is linked in
    automatically for Qt applications on S60. qtmain includes an
    implementation of E32Main() that sets up Qt correctly for S60. This
    means that Qt no longer links to libcrt0.lib but uses qtmain instead.
    However, if you are not linking against QtGui, you'll still have to
    link to libcrt0.

New classes
------------

- QS60Style
    * Native look for Qt applications on S60 3.1 and later versions. The
      style picks up the current theme parts, palettes and font settings
      through the skinserver and uses these when painting in Qt.
      The layout data for different resolutions is considered.

Ported classes
--------------

- QDesktopServices
    * Provides methods for accessing common desktop services: Opening the
      browser with an url, launching documents with the standard application
      and getting default system directories.

- QClipboard
    * Provides access to the window system clipboard.

- QSysInfo
    * QSysInfo class provides information about the system.

Features
--------

- Input methods
    * QInputMethodEvent will now be generated by Qt.
      To use it, widgets must set the attribute WA_InputMethodEnabled and
      implement QWidget::inputMethodQuery(...).
    * Qt will use the underlaying FEP framework from S60.
    * Multitap and T9 supported.
    * Virtual keyboard for touch phones is supported.
    * Most of the Qt widgets already have support for input methods.

- Drag-n-Drop
  * At the moment works only within same Qt process.

- STL support for QtS60
  * use -stl switch when configuring Qt.

Optimizations
-------------


****************************************************************************
*                          Build issues                                    *
****************************************************************************

- Fixed compilation on private S60 platforms by adding neccessary include paths.
- Fix compiler error if --gnu flag is given to RVCT.


****************************************************************************
*                          Changes to existing classes                     *
****************************************************************************

- qapplication_s60.cpp (non-public)
    * Simplified by introduction of qtmain.
    * added CCoeControl to be the native representation of QWidget.
    * Use window group from CEikonEnv instead of creating our own.
    * No need to create/destroy RWsSession, this is now done by the Avkon
      application.
    * Handle pointer events from QSymbianControl.
    * Stopped using QETWidget for translation, now handled by
      QSymbianControl.
    * MouseButtonDblClick mapped to EModifierDoubleClick (after dblclick
      Symbian will send mouseButtonRelease.

- QApplication
    * Implemented setDoubleClickInterval(...).
    * Improved widgetAt().
    * Added support for resizing widget's when the screen orientation
      changes from portrait to landscape. For fullscreen and maximized
      widgets this will ensure that they look correct in the new screen
      layout.

- qwindowsurface_s60.cpp (non-public)
    * Stopped creating our own CWindowGc based on the RWindow and get
      SystemGc from the CCoeControl we are currently painting on instead.

- qeventdispatcher_s60.cpp
    * Stopped using Active Objects to receive events, we get them from
      C*AppUi and CCoeControl instead.

- QWidget
    * Proper implementation for QDesktopWidget::availableGeometry.
    * Improved raising and lowering widgets.
    * Implemented setWindowTitle(...).
    * Implemented QWidget::setWindowIcon(...) and made it to react to
      different statuspane layouts.
    * Improved focus handling (improved setFocus_sys).
    * Fixed native window scrolling. Only use accelerated scroll if we are
      scrolling a window owning widget.
    * Improved setWindowState(...).
    * Added implementation for createDefaultWindowSurface_sys().
    * Added implementation for setMask_sys().
    * Not creating a backing store for the top level widget (saves memory).
    * winId() now returns a CCoeControl instead of RWindow.

- QMenuBar
    * Added support for using native S60 menues.
    * Supported infinite level of menues inside menues.
    * Supported checkboxes next to menu items).

- QtCore and QtGui
    * link to CONE and Uikon libraries and stop linking to glib and gthread.
    * Renamed qt_deployment.pro to qt_libs.pro as it is more consistent.

- Event loop / Event dispatcher
    * We now integrate with the native loop, allowing CActiveScheduler and
      QEventLoop to be used interchangably.
    * Enabled posted events to work from the Symbian active scheduler too.
    * Enable use of QEventLoop::ExcludeSocketEvents on Symbian.
    * Improved handling of zero timers.

- QColumnView
    * Fixed a typo in one instance of QT_NO_QCOLUMNVIEW.

- font rendering
    * Speed increase
    * Correctly render RTL text
    * Proper shaping of complex writing systems
    * Automatic font linking (aka merging) of different writing systems
    * Rudimentary fallback glyph outline support
    * Defaults to Symbians native (usually iType based) font rendering.
      Alternatively, supports FreeType. Configure with -qt-freetype.

- qcore_symbian_p.h (non-public)
    * Added helper functions to convert QRect <-> TRect.
    * Renamed qstringToTPtrC to qt_QString2TPtrC.
    * Added helper function qt_TDisplayMode2Format.
    * Added helper function to convert QSize <-> TSize.
    * Added helper function to convert QString ->HBufC.
    * Added helper function to convert TDesC -> QString.

- QGraphicsSystem
    * QRasterPixmapData(...) is specified as default pixmap data for S60.

- QPixmap
    * Improved grabWindow(...) when it comes to selecting client rect.

- QDirModel
    * Returns root dir name similary as done in Windows

- QFSFileEngine
    * copy(...) now uses Symbian native copy implementation which is more efficient
      and doesn't leave temp files behind

- QLocale
    * Now has Symbian system locale support.

****************************************************************************
*                          Examples and demos                              *
****************************************************************************

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

- qmake
    * Support for QMAKE_EXTRA_TARGETS and QMAKE_EXTRA_COMPILERS variables.
    * Support BLD_INF_RULES variable. Adds entries to generated bld.inf file
    * Added 'make' targets '<build>-<platform>' 'distclean' and 'run'
    * New platform_paths.prf and data_caging_paths.prf contain several
      variables and replacement functions for including known paths.
    * The .pro file qt_libs.pro was moved to src/s60installs.
    * Support for ICON variable for setting application icon.
    * Support for RSS_RULES variable, which enables entries to be added to
      generated application registration files.
    * When bulding qmake and other bootstrapped tools we now use
      "-warnings on" instead of "-warnings all".
    * Improved error message if calls to $$system() fails.
    * Fixed several issues when qmake is built for platform win32-mwc.
    * Moved mocing step to the build step so it is not longer required to
      do "abld build" or "abld makefile" to remoc.
    * Improved "make clean".
    * Increased max heap to 8Mb.
    * Enabled __CC_ARM flag used by some versions of RVCT.
    * Removed hard coded INCLUDEPATH from qmake - developer can control
      the whole include path hierachy.
    * Symbian export mechanism is no longer used for emulator deployment,
      instead copy commands are generated to wrapper makefile and
      executed during final phase of building, after post link.
    * Removed -O1 flag from WINSCW builds.
    * Added qmake function (size) to ask number of items in QStringList.
    * Qt demos are now installed to QtDemos folder in S60 emulator.
    * Qt examples are now installed to QtExamples folder in S60 emulator/HW.
    * Plugin stubs suffix changed to ".qtplugin".
    * Paths containing $${EPOCROOT}/epoc32 will now properly generate
      absolute paths in mmps.


-configure
    * Defaults for FREETYPE and SCRIPTTOOLS set to "no".

****************************************************************************
*                          Plugins                                         *
****************************************************************************

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