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

The Qt version 4.4 series is binary compatible with the 4.3.x series.
The Qt for Embedded Linux version 4.4 series is binary compatible with
the Qtopia Core 4.3.x series. Applications compiled for 4.0, 4.1, 4.2,
and 4.3 will continue to run with 4.4.

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.

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

General Improvements
--------------------

Third party components
----------------------



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

QtCore
------

- QVariant
    * [220112] correct documentation with respect to conversions
    involving QTime.

- QHash
    * [215348] Document that uniqueKeys() doesn't sort its keys.

- QFlags
    * [221702] Fix QFlags::testFlag gives a surprising result on enums with
    many bits.

- QLibrary
    * [219456] Fix QLibrary problems on Windows, loading the C runtime library
    without a manifest.

- QDataStream
    * Fixed storing a QPalette into a stream with a version older than Qt_2_1

- QtConcurrent
    * [221671] Fixed filtered() compile error when using filter functions that
      takes its argument by const reference.
    * [220804] Fix several compile errors with STL containers.
    
- QThreadPool
    * [215365] The Q[Core]Application destructor now waits for all QThreadPool
      threads to finish. This fixes ussues when unloading the Qt dlls on windows
      as well as when using Qt features that need on a QApplication instance
      in a worker thread.
QtGui
-------------

   * [215794] setWindowFilePath() didn't update window title until the
     window is resized.
   * [212316] Window position changed when setWindowFlags was called.
   * [223814] Fixed a crash in QDockWidget when the docking window was
     closed during the dock animation.
   * [223339] Fixed a crash when a pop-up widget had the
     WA_DeleteOnClose attribute.

   * [214742, 205222] QFormLayout - fix nested QFormLayouts expanding
     unnecessarily.
   * [217123] Fixed a regression in QWidgetItem::setGeometry() that made an item
     with both an Alignment and QSizePolicy::Ignored set got squeezed down to
     a size of 0.

- QCDEStyle
   * [220803] Improved the contrast of CE_RubberBand when painted on top of a dark background.

- QPlastiqueStyle
   * [312723] Fixed broken painting on QSpinBox when using NoButtons.

- QGraphicsEllipseItem
   * [207826] setStartAngle() and setSpanAngle() now call
     prepareGeometryChange(), removing rendering artifacts.

- QGraphicsLinearLayout
   * [218400] Fix crash when assigning a layout with stretches to a widget.

- QGraphicsView
   * [216741] Fix QGraphicsView::DontSavePainterState (regression to 4.3)

- QGraphicsWidget
   * [215417] Fixed setting the correct layoutDirection on the painter before
     we called QGraphicsWidget::paint.

- QMdiArea
   * [221527] Fixed a bug where the [*] placeholder was not updated correctly in tabbed view mode.

- QMdiSubWindow
   * [214964] Tooltips in children of the subwindow closed too fast

- QMessageBox
   * [221721] Fix crash when trying to obtain the default value for QMessageBox::iconPixmap().

- QSplitter
   * [214480] Improve docs on how the effective stretch facors are calculated.

- QTextEdit
   * [214956] Fix painting problems with text in floating frames
   * [215192] Fix HTML alignment in QLabels with RTL
   * [213259] Fix to handle ShortcutOverride for Ctrl+Shift+Right

- QTextCursor
   * [214457] Fix assert when deleting empty cells
   * [210496] Fix the usecase that  QTextCursor::select( QTextCursor::LineUnderCursor )
     doesn't work when the text has not been layed out yet

- QTextDocument
   * [207779] Fix HTML import of page-breaks on empty lines to not get lost
   * [212848] Fix  FullWidthSelection to work if LineWrapMode set to NoWrap
   * Fixes the positioning of bullets to always honor the text direction

- QWidget
   * [219446] Fixed a bug where calling repaint() before QApplication::exec() did not
     invoke a paintEvent().

QtScript
--------

    * [219126] Fixed bug that caused the decimal point to appear in
    the wrong position when converting a number with a negative
    exponent to a string.

QtGui
-----

- QDateTimeEdit
    * [220926] QDateTimeEdit::textFromDateTime: valueFromText vs. date
    TimeFromText -- clarify documentation

- QTimeEdit
    * [215426] Fixed a typo in the declaration of a Q_PROPERTY

- QPainter
    * [216948] Fix one-pixel shifting of integer lines in raster paint
      engine when current matrix has negative dx or dy.
    * [218682] Fixed bug in QBitmap::fromData that could cause the bitmaps
      to turn completely black on Windows and Embedded Linux.
    * [220544] Fix issue in Freetype font engine where painting text using
      the same font and transform on both images and pixmaps would result in
      text not being transformed or not shown at all.
    * [222520] Fixed issue in raster paint engine where StretchToDevice
      mode for gradients wasn't respected.
    * [222848] Prevent potential crash on NaN in qt_curves_for_arc()
      when drawing squiggly underlined text.

- QBrush
   * [215090] Avoid "QPixmap created outside the GUI thread" warning when
     creating a QImage based brush.

- QFileDialog
    * [223813] Prevent an assert when "Shift + C" was pressed if the directory
      set was "C:/".
- QImage
    * [215985] Reduce memory usage in TIFF import/export to avoid failing
      due to out-of-memory errors on large images.
    * [217101] Make sure QImage::setPixel() doesn't call detach twice, to
      improve the performance a bit.

- QPicture
    * [215227] Fixed a problem that could occur when drawing a QPicture to a
      QImage or QPixmap due to differing device DPIs.

- QPixmap
    * [214340] Prevent QPixmap::scaled() from leaving white lines at right/lower
      edges in some cases.
    * [214344] Make QPixmap::transformed() work correctly with perspective
      transforms.
    * [214855] Make sure QPixmap::transformed with a 90-degree rotation transform
      doesn't increase the size of the pixmap.
    * [215190] Fixed crash on Windows and Embedded Linux due to QPixmap::detach()
      not detaching the underlying QImage.
    * [216648] QPixmap turned a QBitmap into a 32 bit QPixmap
      when QPixmap::resize() was called on the QBitmap.

- QMatrix
    * [198791] Fixed bug in QMatrix::map(const QPolygon &) causing a behavioral
      difference from Qt 3's QWMatrix.

* Fixed bugs in QPolygon to QRegion conversion causing to many rectangles to be
  generated.

* [206138] Fix unaligned double access in src/corelib/global/qnumeric_p.h

* [216189] Fix a crash when calling QObject::dumpObjectInfo() after
  disconnecting a signal.

* [216910] Use the 'eieio' instruction instead of 'lwsync' in the
  PowerPC implementation of QAtomicInt and QAtomicPointer since the
  latter is not available in all hardware implementations. The 'eieio'
  instruction was used successfully in Qt 4.3 and earlier.

- QDockWidget
    * [222222] The sizeHint for dockwidget is now respected when it is redocked
    * [222030] The minimum size and minimum size hint are now respected

- QToolBar
    * [216929] Fixed the extension when the orientation is vertical

- QTabBar
    * [214527] Fixed the geometry of QTabBarnot being correctly updated when
               adding a tab.

- QMainWindow
    * [218288] Fixed save/restore that would not work correctly if the window
               was not yet shown on screen.

- QStyleSheetStyle
    * [158984] Fixed crash while using stylesheet in combinaison with a proxy style
    * [217470] Fixed setting a stylesheet on a QDockWidget remove its border

- QTreeView
    * [220298] Fixed regression where clicking outside of the first column doesn't
               always select the item.
    * [224598] Fixed item not always appearing when QStandardItemModel::appendColumns
               was used
    * [212056,216390] Fixed bug where hidden items in the treeview got visible after
      a sort.
    * [209473] Fixed assert/crash when selectAll were called on a treeview with no
      items.

- QTableView
    * [314519] Fixed crash with very big models.
    * [211039] Fixed assert when moving a header section in a vertical header.

QtGui
-----
* [214146, 215170] Fix a regression with multiple screens on
  X11. Multiple screens are now reported with their correct size
  regardless of how X11 is configured.

QtOpenGL
--------

* [217429] Fixed issue on certain Intel drivers causing a GL error to be
  generated when computing the max texture size in qt_gl_maxTextureSize().

QtWebKit
--------
* Fixed potential crash when deleting QWebView instances.
* Fixed blurry widgets in the web page due to antialiased painting.
* [221518] Fixed using modifiers to type special symbols (e.g '@','$')
           does not work on Mac OS X.
* [216179] Fixed potential crash on Windows, when performing JavaScript
           date conversion.
* Fix rendering of scrollbars with some styles
* Fix state of web actions when showing the context menu
* Fix parsing of stylesheets and JavaScripts to not depend on the current locale
* Fix return value of QWebPage::isModified()
* Fix QWebFrame::setHtml() not setting the contents immediately
* [218789] Fix WebKit not displaying content on 403 HTTP responses

QtXml
-----

- QDomElement
    * [220115] Document QDomElement::setAttribute(double)'s behavior with
    respect to locale.

QtXmlPatterns
-------------

- QXmlQuery
    * [219070] Fix after the QXmlQuery object is deleted it doesn't
    seem to be cleaning up afterwards.

QtNetwork
---------

- QNetworkReply & QNetworkAccessManager
    * [223580] Fixed the handling of HTTP replies with code 400.
    * [215010] Fixed a bug that made SOCKSv5 proxies not be used.
    * [217091] Fixed a bug that made the HTTP backend issue CONNECT
    commands for HTTP (not HTTPS) requests to proxy servers

- QHttp
    * [197694] Fixed a bug that prevented QHttp from uploading data of
    length 0 when reading from a QIODevice.


QtTest
------

- QCOMPARE
    * [219067] Document behavior of qFuzzyCompare/QCOMPARE when
    comparing with 0.0.

QtDBus
------

- QDBusConnection
    * [220140] Fixed a bug that would make objects registered with
    ExportSlots not have interfaces inherited from parent classes
    callable.
    * [218733] Fixed the delivery of errors resulting of an outgoing
    method call timing out.

- QDBusReply
    * [190546] Improved the error messages generated by QDBusReply in
    case of mismatched signatures.

QtHelp
------

   * [219454] Index also .htm and .txt files for the full text search.
   * [233415] Use the proper encoding when parsing the title of a html
   document.

Qt3Support
----------

    * [216806] Fixed a crash in Q3ScrollView when setting a null corner widget
    * [215041] Fixed a crash in Q3Table when using a Q3TextEdit as the editor
    * [217218] Fix support for images in Q3TextBrowser

Phonon
------
    * [214080] Fixed a failure on path reconnections between VideoWidget and MediaObject


Accessibility
-------------
    * [222660] Made it possible to navigate from the application through the menubar,
      toolbars etc, and down to the textedit without ending up on a QRubberBand or QMenu.
      This left the AT client in a confused state.

****************************************************************************
*                          Database Drivers                                *
****************************************************************************


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

X11
---
   * [211678] Fixed a problem where using widgets and pixmaps on two different
     X11 screens resulted in X11 errors.
   * [217250] Fixed a problem where QGLWidgets on some older X servers would
     not get the correct colormaps set, resulting in distorted colors.
   * [214713] Fixed a problem where text would get clipped incorrectly
     when using QPainter::drawText() on a QGLWidget, or QGLWidget::renderText().
   * [223085] Fixed a regression where creating a style before QApplications could
    result in incorrect font metrics.

Windows
-------
   * [207506] Fixed a bug that causes input widgets to switch the text alignment
     when pressing 'Ctrl+Shift' on Vista platforms (regardless of supported
     keyboard layouts).
   * [223951] Fixed a crash while accessing 'QAxObject*' for methods returning a
     VARIANT with IDispatch inside.
   * [223145] Fixed a regression which prevented use of Qt::WindowSystemMenuHint
     together with flags like Qt::FramelessWindowHint.
   * [224063] Fixed a crash in QFile when QFile::handle() was called.
   * [221924] Fixed the binary installer for Visual Studio 2005 Express.
   * [218215] Fix custom paper sizes for printing under Windows.
   * [210830] Fixed incorrect tooltip text color on Vista.

Mac OS X
--------
   * [216650] Fix a regression from 4.4 in the handling of DeferredDelete
     events. This solves the reported problem that using Cmd+W does not
     close a form properly in the Designer.
   * Fix an error in the qconfig.h header file that occurred on Mac OS X
     during configure when not using Terminal.app.
   * [222349] Fix a potential out-of-bounds read when getting data from the clipboard.
   * [213116] Fix a regression where minimizing a window would cause a window
     with widgets that had no click through enabled to never get enabled.
   * [215985] Fixed QPixmap::fromImage() to not do an extra copy of the image data
     which could cause a lot of memory to be used.
   * [217197] Fix crash when dragging text with object replacement characters on the Mac.
   * [212884] Fixed a crash that could occur when printing images on the Mac.
   * [215909] Fixed a problem where text drawn into a QGLWidget on the Mac would appear
     to be drawn with a bold type, when it shouldn't have.
   * [215761] Fixed a problem that could make top part of text drawn
     into a QGLWidget appear cropped.
   * [214960] Fixed a problem where custom page margins were not taken
     into account, unless QPrinter::fullPage() was set to true. Also,
     margins from the QPageSetupDialog should now update the internal
     QPrinter margins correctly.
   * [216563] Fix "black widgets" regression from 4.4.
   * [214681] Fixed bug that the menu bar and other parts of the application
     responds to the same shortcuts.
   * [312012] Fixed support for secondary shortcuts on menu bar.
   * [315450] Fixed build issue for Phonon on OS 10.4/Macbooks regarding OpenGL headers.

Qt for Embedded Linux
---------------------

- Raster paint engine
   * Fixed pixel errors when drawing pixmaps into a semi-transparent window.
   * Fixed an assert when drawing an 16-bit image onto an image of format
     QImage::Format_ARGB8565_Premultiplied.
   * [217400] Fixed painting errors with Qt::WA_NoSystemBackground used on
     a 16bit screen.
   * Fixed CompositionMode_Source with new QImage formats introduced in 4.4.0.

- QWSServer
   * [210865] Fixed crash due to missing null-pointer check in
     QWSServer::sendIMEvent().

- DirectFB screen driver
   * Fixed a cache corruption which randomly resulting in painting errors
     when using QPainter::drawImage().
   * Fixed use of Qt::SmoothTransformation with QPixmap::scaled().
   * Fixed painting errors when drawing transparent windows and compiled
     width QT_NO_DIRECTFB_VM.
   * Added QT_NO_DIRECTFB_PREALLOCATED to work around issues with drivers
     not properly implementing blitting to/from preallocated surfaces.

- VNC screen driver
   * Fixed a crash when used on top of a screen with a non-standard line step.
   * Fixed remote cursor when used on top of a hardware accelerated cursor.

Qt for Windows CE
-----------------
   * [219644] Maximized MDI windows had a double title bar on Windows Mobile.
   * [223975] Qt version displayed wrong in Windows Explorer.
   * [217576] QLocale always displayed "C" as language.
   * [215020] Windows with parent were always embedded into the parent window
     instead of being toplevel itself.


****************************************************************************
*                      Compiler Specific Changes                           *
****************************************************************************



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

- Build System

- Assistant
   * [221298] When triggering the sync contents action, activate the contents
   widget.
   * [171654] Use the title of the .html file as the about dialog window title.
   * [219939] When specifying a .html file for the about dialog contents,
   ensure that the referenced image files are displayed as well.
   * [219936] When a collection file has been changed, make sure to syncronize
   all relavant settings with the cached collection file.
   * [206321] Display .svg files in Assistant.
   * [219176] Escape '&' characters in the title of a document.


- Designer
    * [219670] Fixed a bug related to layout handling of form classes generated
      by the Visual Studio integration.
    * [220299] Fixed a crash that occurred when breaking a layout containing
      zero-sized spacers.
    * [217464] Fixed a bug related to using resource-dependent properties
      for QDialog-based forms.
    * [215188] Stabilized reading of corrupted ui files.
    * [215648] Don't show the rich text editor for iconText property of QAction
    * [214854] Fix displaying of icons in the VS integration
    * [217093] Make non-letter shortcuts with Shift modifier working
    * [223114] Fixed a crash when removing a dynamic url property
    * [220998] Default precision of float property in property editor changed to 6

- Linguist

- lupdate

- lrelease


- rcc


- moc


- uic


- uic3


- qmake


- configure


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


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

