Qt 4.5.2-tower
---------------

The Qt for S60 "Tower" release is the fifth pre-release from the Qt for
S60 porting project. "Tower" is based on the Qt 4.5 codebase (mostly Qt 4.5.2).

This list of changes lists S60 specific fixes only,
for general 4.5.x changes go to:

  http://qt.nokia.com/developer/changes/changes-4.5.0
  http://qt.nokia.com/developer/changes/changes-4.5.1
  http://qt.nokia.com/developer/changes/changes-4.5.2 (partially in Tower)

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

- Input methods
    * Added events to support opening and closing the virtual keyboard, called
      software input panel in Qt.
    * Added an option to QApplication to choose between single or double click
      input panel activation.
    * Added input method hints API to Qt. These can be used to instruct input methods
      to only allow certain characters or tailor their appearance.
    * Added Qt::ImAnchorPosition to support querying for selections through input
      methods.
    * Added QInputMethodEvent::Selection to support setting the selection through
      input methods.

- Phonon
    * The Phonon library is now part of Qt, but it comes without a backend.
      This means that applications can build and run against the Phonon
      library, but there is currently no S60 backend plugin providing actual
      multimedia playback. Possible alternatives such as Helix and MMF are
      being investigated.

- QtSql
    * Implemented QtSql module with sqlite3 backend. For now backend is
      provided only in binary format.

- QtWebkit
    * Experimental webkit build for S60. Can be enabled by passing -webkit
      to configure.

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

- QScopedPointer
    * Smart pointer, which deletes pointer when destroyed.

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

- QColormap
    * Added basic implementation of QColormap for Symbian.

- QLocalSocket and QLocalServer
    * Added support for QLocalSocket and QLocalServer on Symbian.

- QSound
    * Implemented CMdaAudioPlayerUtility based Symbian backend for QSound.

Features
--------

- QApplication
    * Implemented QApplication::beep() for Symbian.

- QPixmap
    * Added supported for converting to/from CFbsBitmap

- QSslSocket
    * Added support for -openssl option i.e. runtime resolving of OpenSSL
      symbols.

- QWidget
    * Basic widgets are now navigatable and usable via keypad on SDK 3
      FP 1 and FP 2.
    * Widgets can now be made semi-transparent on systems that support it
      using Qt::WA_TranslucentBackground.

- Exception safety
    * Improving the exception safety of Qt, not yet complete.
    * Added support for translating between Symbian leaves and standard C++
      exceptions.

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

- qdrawhelper
    * Optimized drawing operations for RVCT builds, particulary for ARMV6.

- QFont
    * Use cached DPI for metrics.

- qwidget_s60.cpp
    * Avoid unnecessary calls to FocusChanged in Symbian.

- qwindowsurface_s60.cpp
    * Avoid updating raster buffer pointer on window hide
    
Documentation
-------------

- exceptionsafety.qdoc
    * A guide to exception safety in Qt.
    
- symbian-exceptionsafety.qdoc
    * A guide to integrating exception safety in Qt with Symbian.

****************************************************************************
*                          Code clean-up                                   *
****************************************************************************

- Cleanup qeventdispatcher_unix.cpp
    * 247268: All qeventdispatcher_unix.cpp changes were reverted since
    this file is not anymore used in Symbian OS branch.

- Cleanup QtNetwork workarounds implemented earlier due to Open C bugs.
    * 247287: Removed getaddrinfo workaround.
    * 247288: Removed waitForConnected workaround.
    * 247289: Removed qt_socket_accept workaround.
    * 247290: Removed qt_socket_connect workaround.
    * 247290: Removed E32IONREAD workaround.
    * 247293: Removed nativeHasPendingDatagrams workaround.
    * 247295: Removed QNativeSocketEnginePrivate::nativeRead EPIPE
      workaround.

- Other code clean-ups
    * 247278: Removed unnecessary includes from qbackingstore.cpp.
    * Fixed Q_OS_SYMBIAN ifdef usage in qfiledialog_p.h.
    * 247272: Removed qtestnetworkservers.h dependency, used
      network-settings.h.
    * Revert "Work around compiler bug on Nokia Metrowerks compiler."
    * Remove UI highlights being inverted colors based on highlight text 
      colors.

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

- Macros
    * QT_NO_DEBUG now properly defined in release mode.

- QTest
    * Fixed testlib export macros for RVCT builds.

- Namespaces
    * Now builds when -qtnamespace option is defined.

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

- QApplication
    * 252798: Fixed layout when orientation changed via
      AknAppUi::SetOrientationL.
    * Generating MouseEvents has gone through several changes.
    * qt_init() has been changed: auto flush is always enabled for
      window server sessions on 3.1 SDK for both UDEB and UREL.
    * Added support for '-graphics-system' command line option

- QCoeFepInputContext (non-public)
    * Fixes FEP crash when changing the focused Qt widget to NULL.
    * Fixed a bug where the virtual keyboard could not be opened if there
      was only one input widget.
    * Fixed a crash in FEP when exiting application.

- QDebug
    * Fixed debug printing (incl. qWarning, qFatal) for strings longer
      than 256 characters.
    * introduce a breakpoint to get the emulator to stop in the debugger 
      when qFatal is called

- QDesktopServices
    * Fixed forwardslash/backslash usage as an path separator.
    * Switched QDesktopServices mail-to URL handling to RSendAs in Symbian,
      due to the fact that CSendUi requires extensive capabilities to work
      correctly. Currently e-mail sending with qdesktopservices::openUrl
      works in Symbian only if e-mail account already exists.

- QDesktopWidget
    * 253930: Implement proper resize behavior and emit necessary signals.

- QEventDispatcherSymbian (non-public)
    * Lowered the timeout for reprioritizing the process to 100ms.
    * Fixed ASSERT panic in Symbian event dispatcher.
    * 246600: Fix problem in eventdispatcher destructor / AO canceling.
    * Fixed active scheduler removal when calling QThread::terminate.
    * Fix to Open C bug: select sometimes returns -1 and errno is
      ECONNREFUSED.
    * Fix a crash when using QEventLoop::ExcludeSocketNotifiers flag.
    * Changed to round robin scheduling for Qt's active objects. Other
      active objects will still be scheduled like before.
    * Fixed crash if events are posted before QApplication construction

- QFontDataBase
    * Now, also fonts from the user's /resources/fonts directories are
      available.

- QFontEngine
    * Fix the vertical advance of glyph metrics.

- QFontMetrics
    * Fixed the boundingRect calculation for text.

- QGraphicsView
    * Added support for virtual keyboard to the the viewport.

- QGraphicsTextItem
    * Added support for virtual keyboard.

- QHostInfo
    * Added support for host lookups with multiple ipv4 addresses.

- QInputContext
    * Added QInputContext::s60FilterEvent().

- QIoDevice
    * Fixed compilation error when QIODEVICE_DEBUG is defined.

- QKeyMapper (non-public)
    * Fixed a broken keymapping where Enter key would be mapped to Tab.

- QLocale
    * Removed workaround for missing tzname symbol, fixes QLocal timeZone
      implementation for Symbian.

- QLocalSocket
    * Connecting to QLocalServer is always done in blocking mode.

- QMenuBar
    * Native menus are handled properly even when application has multiple
      QMainWindows.
    * Fixed a bug causing both native and qt menu to be created.
    * Fix for disappearing options menu after coming back from dialog.

- QNativeSocketEnginePrivate (non-public)
    * Socket connect and listen failure is indicated in exception set.
      (Workaround to Open C bug)

- QNetworkInterface
    * Fixed R-handle leak in Symbian version of qnetworkinterface_unix.cpp.
    * Introduced a new qnetworkinterface_symbian.cpp, because there wasn't
      really anything common to UNIX equivalent.

- QPixmap
    * Added fromSymbianCFbsBitmap() and toSymbianCFbsBitmap().

- QPlainTextEdit
    * Added support for virtual keyboard.

- QPluginLoader
    * QPluginLoader will look for plugin stubs from the same folder on other
      drives if it can't find them from the indicated drive.

- QS60Style
    * Added subElementRect implementation for SE_ItemViewItemCheckIndicator.
    * Added support for E90 layouts.
    * Added support for QScrollArea, QTextEditor, QGroupBox, QTreeView, 
      QToolBar and QDial styling.
    * Better support for theme and layout changes.
    * Better support for themed palettes and themed text colors.
    * Better support for multiselection in item views.
    * Better theming for QTable and QPanel.
    * Better support of highlight graphics and texts for QLists, QTreeViews, 
      QCalendarWidgets and QComboBoxes.
    * Support polishing fonts. Fonts are no longer changed within the drawing 
      code.
    * Draw spinbox arrowbuttons side-by-side, instead one on top of the other.
    * Harmonize widget drawing so that widgets are of similar height.
    * Support check states for QLists and QPushButtons.
    * Support flat QPushButtons.
    * Support busy indicator.
    * Support QScrollBar pressed state.
    * Support QPushButton disabled theme graphics.
    * Separate theme background for QDialogs.
    * Clarify QToolButton pressed state.
    * Removed linedrawing of panels and groupboxes.
    * Fix palette-polution for a style that is activated from an application 
      after S60Style has been in use.
    * Fix for frame masks with color depth other than EGrey2.
    * Fix for squeezed QTabBars.
    * Fix memory leak when color skinning graphics.
    * Show focus/Editfocus visualization for KeyPad navigation on
      SDK 3 FP 1 and FP 2.
    * Fix for overwriting user specified palettes.

- QSelectThread (non-public)
    * We force monitoring sockets exception status as well, and not
      just read/write.
    * Notification related to the particular socket signaled via exception
      fd_set will be mapped to the appropriate read/write notification.

- QTemporaryFile
    * Fixed temporary file rename in Symbian OS.

- QTest
    * Disable keypad navigation for autotests by default

- QTextEdit
    * Added support for virtual keyboard.

- QThread
    * Fixed thread termination in Symbian OS.

- QUdpSocket
    * Updated BindFlag documentation to reflect behaviour on Symbian OS.
    * Wrote hack for QUdpSocket::writeDatagram return value in Symbian OS.

- QWidget
    * Added API for setting softkeys.
    * Fixed background painting. Background can now be overwritten from
      setting the respective palette role.
    * Add support for Qt::WA_TranslucentBackground.

- Many classes
    * Improved exception safety.

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

- Anomaly browser 
    * Added to demonstrate QtWebkit usage.

- Deform, Pathstroke, and Wiggly
    * Removed Symbian specific animation timer fixes since more generic
      fix was made to event dispatcher.

- DesktopServices
    * Implemented content filters for desktopservices example.
    * Added error handling to qdesktopservices example when openUrl fails.

- Drilldown
    * Added to demonstrate QtSql usage in Symbian OS.

- Fluidlauncher
    * Removed ugly workaround to make emulator deployment work correctly,
      since the issue has been fixed in qmake.
    * Included drilldown to demonstrate QtSql usage.
    * Updated screenshots to S60 style.
    * Added softkeys example.
    * Added Anomaly browser to fluidlauncher.

- Ftp
    * Enabled default IAP setting for FTP example.
    * IAP dialog will show after FTP UI is on screen.
    * If active IAP exist that one will be used.

- SecureSocketClient
    * Fixed build issue caused by lack of cursor.

- Softkeys
    * New example showing how to use softkeys API in QWidget.

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

- configure
    * -cetest is no longer a supported switch for configure.
    * -stl option is enabled by default for Symbian OS
    * -openssl option is enabled by default for Symbian OS.
    * -fpu option enables vfpu type selection for ARM targets.

- qmake
    * Support for generating Symbian "test" targets: CONFIG += symbian_test.
    * Support for Symbian Build System, version 2 (aka Raptor) via
      symbian-sbsv2 mkspec.
    * PAGED keyword is added to all MMP files by default, except in S60 3.1
      builds.
    * Read-only flag is no longer preserved when deploying files into
      emulator environment.
    * Changed the timestamp to ISO format in all files generated
      by qmake for symbian-* mkspecs.
    * Qt's VERSION variable will now generate VERSION keyword in mmp files.
    * Made Open C include paths handling bit more robust.
    * Support both Symbian Foundation header structure in /epoc32/include,
      as well as old Symbian/S60 structure

- Release package creation
    * Removed the obsolete script to create release package.

- Createpackage script
    * Now creates packages with .sis suffix.

- Patch_capabilities script
    * Will now patch also vendor id in binaries and the UID in the pkg file.   


****************************************************************************
*                          Documentation                                   *
****************************************************************************

- qmake-manual
    * 250370: Added documentation for ICON keyword.

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

- S60 version specific plugins
    * Isolated S60 version dependent functionality to S60 version specific
      plugins (qts60plugin_x_y.dll) to make it possible for single build to
      run on any supported device, even if with reduced functionality on
      some.

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

- Qt libs
    * Qt libs are now built with "All -Tcb" capabilities always. It is now
      always necessary to run patch_capabilities.pl script if self-signing
      of Qt libs is desired.
    * QtCore and QtSql made UNPAGED when installed via SIS file as a 
      workaround for an obscure crash when they are paged.
    * qt_libs.pro updated to reflect Open C dependencies, as Qt requires
      1.5.0 and newer release.
    * Qt libs are now build with the "STDCPP" mmp flag. On platforms from 
      TB9.2, Qt code will throw std::bad_alloc exceptions on allocation
      failure.
