Qt 4.4.1 is a bug-fix release. It maintains both forward and backward
compatibility (source and binary) with Qt 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
--------------------

- Documentation and Examples
   * [202630] Fixed a problem in the network/http example: it couldn't
   download anything if the URL had a space.

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

- Updated Qt's libpng version to 1.2.29.


****************************************************************************
*                          Library                                         *
****************************************************************************
- QAbstractItemView
    * [199822] Fixed issue with broken extended selections.

- QButtonGroup
    * [209485] Prevented a crash caused by removing a button from its button
      group while inside a slot triggered by the button's clicked() signal.

- QDirModel
    * [213519] Fix crashes when drag'n'dropping files into a subdirectory

- QFtp
    * [189374] Fixed a bug that would cause QFtp to fail to parse
    dates if the application was being run on some locales, like fr_FR.

- QGraphicsProxyWidget
    * [208773] Input methods now work properly for embedded widgets.
    * [207644] Fixed a bug where the painter was restored incorrectly.

- QGraphicsScene
    * [209125] QGraphicsScene::style() and QGraphicsWidget::style() fixes.
    * [202774] [207076] Focus and activation fixes for embedded widgets.
    * [212950] The scene no longer removes focus from the focus item if a
      mouse press propagates to the scene (and then to the view). This was
      a behavior regression to QWidget.

- QString
    * [205093] Printing QString after using replace()followed by truncate(-1) crashes
    * [209078] Problem in QString::resize

- QGraphicsView
    * [209154] Mouse replay regressions since 4.3 have been fixed.

- QObject
    * Fixed a regression from 4.3 to 4.4 in QObject::receivers() where
      the function would return >0 even after disconnection all
      signals.

- QScriptEngine
    * [208489] Made the instanceof operator work when used with
      QMetaObject wrappers created by newQMetaObject().
    * [206188] Fixed a bug that caused scripts to hang when using
      "continue;" inside a switch-case block.
    * [205473] Fixed a bug that caused slots to be called even when
      argument conversion failed.

- QSslSocket
    * [212177] QSslSocket::peerVerifyError() supports all errors now.
    * [212022] Fixed a bug that would cause no default CA certificates
    to be present in static Qt builds.
    * [212412] Fixed a bug that could cause a deadlock in
    waitForReadyRead() in encrypted mode.

- QtWebKit
    * Ensured that relative URLs are converted to absolute URLs.
    * Ensured that the cursor is changed into a resize cursor when hovering
      over and dragging the resizeable frame borders.
    * [206999] Fixed a problem which would make an empty URL being passed to
      QWebPluginFactory::create()
    * [208215] Fixed a bug that prevents linkClicked signal to be emitted
      when opening a local HTML file.
    * [208342] Ensured that the cursor is updated after a web frame or page
      has finished loading.
    * [210920] Fixed showing/hiding of the Web Inspector.
    * [207050] Fixed input of characters into form elements using AltGr on Windows.
    * Fixed a crash related to XML HTTP requests.
    * Fixed QWebPage::acceptNavigationRequest not being called when opening new Windows.
    * Fixed emission of linkClicked() signal when clicking on target=_blank links.
    * Fixed painting artifacts when scrolling embedded widgets.
    * Fixed logic errors in QWebHitTestResult::isNull() and QWebHistory::forward().
    * Fixed encoding of [ and ] in the host part of URLs
    * Fixed a crash related to QWebPage::unsupportedContent.
    * Fixed a memory leak on application shutdown.
    * Fixed painting errors when scrolling embedded widgets.
    * Fixed support for custom cursors set on a QWebView.
    * Fixed various build problems on Mac OS X, Windows and Solaris
    * Fixed crash with CSS text transformations.
    * Fixed infinite recursion when converting DOM objects with cyclic references to QVariants.

- QVariant
    * [201918] QVariant convert to QDateTime warnings

- QWidget
    * Fixed a regression when setting masks for splashscreens on Mac OS X Tiger.
    * [210544] Fixed a regression where Qt::WA_PaintOnScreen widgets were painted on
      top of overlapping siblings.
    * [211796] Fixed a crash occurring when calling render() from a resize event.
    * [210960] Fixed a regression where an invisible top-level widget was resized when calling render().
    * [210822] Fixed a bug causing QGLWidgets to not behave correctly when setting window title.
    * [208413] Fixed issues when creating a child widget of Qt::WA_PaintOnScreen widgets.
  
- QWidgetAction
    * [207433] Fix enabling and disabling toolbar containings actions widget.

- QWorkspace
    * [206368] Fixed a crash occurring when deleting a QWorkspaceChild.

- QPainter
    * [186327] Fixed inconsistent outline and fill drawing for drawPolygon in
      raster paint engine, where the fill would be visible outside the outlines
      or there would be missing pixels between outline and fill.
    * [208530] Fixed some drawing issues with projective transform related to
      near-plane clipping.
    * [209095] Fixed infinite loop that could occur on certain architectures on
      rare occasions when drawing outlines.
    * [208090] Fixed issue with outline drawing where subsequent points on a
      path or polygon are equal according to qFuzzyCompare, but treated as
      different, causing stroke artifacts.
    * [206785] Fixed potential pixmap drawing artifacts when drawing stretched
      pixmaps at non-integer coordinates.
    * Fixed potential rect/line drawing issue when drawing on non-integer
      offsets in raster paint engine.
    * [209462] Fixed regression when redirecting widgets to another paint device.

- QPainterPath
    * [209056] Fixes potential assert in the boolean operations (difference,
      intersect, and union).

- QRasterPaintEngine
    * [208644] Fixed a crash in qt_intersect_spans.

- QApplication
    * [213116] Fixd a regression on Mac OS X where you could not access the
    menu bar after minimizing a window with no click through.

- QColor
    * [193671] Fixed a problem with QColor::setNamedColor() not returning the correct
    alpha value for the "transparent" color.

- QMacStyle
    * [212037] Adjusted the size of text in an editable combo box on Mac OS X Panther.
    * [216905] Fix a regression when drawing table headers on Mac OS X Panther.

- QMainWindow
    * [210216] Calling setCentralWidget, setMenuBar, setMenuWidget or setStatusBar
    several times could cause a crash.
    * [206870] Fixed a bug causing dual screen layouts to not restore correctly.

- QMdiArea
    * [202657] Fixed focus issue when navigating between window with focus on the DockWidget
    * [211302] Fixed a bug where the activation order was not respected when tiling and cascading.

- QOpengGLPaintEngine
    * [208419] Fixed wrong clipping of widgets.

- QDockWidget
    * [179989] Maximum size is now taken into account by the dock widget.

- QCommonStyle
    * [204016] Fixed west tab positions.

- QCryptographicHash
    * [206712] Fixed a bug that would make QCryptographicHash return
    invalid results if you called result() before the last addData()
    call.

- QTcpSocket
    * [208948] Fixed a bug that would cause QTcpSocket and QSslSocket
    not to flush all of their buffers if the socket disconnects and
    reconnects.
    * [182669/192445] Fixed a bug that would cause QTcpSocket to stop
    emitting readyRead() if a previous waitForReadyRead() timed out.

- QDataStream
    * [211301] Fixed an issue where Qt 2 and Qt 3 applications might
    crash or hang when run under KDE 4.

- QDateTime
    * [137698] Fixed a bug that caused QDateTime to perform weird
    1-hour jumps when dealing with dates in Daylight Savings Time.

- QSslCertificate
    * [185067/186087] Fixed a bug that would cause QSslCertificate
    parsing of certificate timestamps to be off by a few hours
    (timezone issue).

- QFile
    * [192752] Fixed a bug that would make QFile leak file descriptors
    if QFile::handle() was called.

- QFileDialog
    * [208383] Crash when a proxy model is set and multiple files are selected.
    * [165503] DirectoryEntered not emitted when go-to-parent button is clicked.

- QFileInfo
    * [212291] Fixed a bug that would cause QFileInfo to return empty
    group or owner names for files under MacOS X and maybe some other
    Unix platforms.

- QFuture
    * [214874] Fixed possible deadlock when using nested calls to QtConcurrent::run().

- QGLContext
    * [210427] In 4.4.0 we removed the automatic mipmap generation for
    textures bound with QGLContext::bindTexture(). This change has been
    reverted for compatibility reasons.
    * [214078] Fixed a problem that caused OpenGL textures to always be
    downscaled to 64x64 in size on Intel graphics hardware. This caused,
    among other things, the Qt Demo to look utterly broken on these systems.

- QOpenGLPaintEngine
    * [191777] Set default values for GL_PACK_*/GL_UNPACK_* values with
    glPixelStore() when QPainter::begin() is called.
    * [201167] Don't assume the GL error state is cleared when QPainter::begin()
    is called. Clear the state explicitly before we make internal state checks.
    * [204578] Fixed a problem where the GL error state was set on
    some system because an extension enum was used unprotected.

- QHostInfo
    * [213187] Made QHostInfo not issue IPv6 name lookups if the
    machine does not have any IPv6 addresses configured (Unix change
    only).

- QHttp
    * [213220] Fixed a bug that could make QHttp open unencrypted
    connections if HTTPS mode was requested but SSL support was not
    present in Qt.
    * [193738] Fixed a bug that would make QHttp continue reading the
    HTTP server's response and emit a readyRead() signal even if
    abort() had already been called.

- QNetworkAccessManager
    *  When a http 302 location url is not an encoded url try QUrl's human readable parsing for more compatibility with websites.

- QPainter
    * [211403] Fixed handling of negative target rect offsets and negative
    source offsets in QPainter::drawPixmap()/drawImage().

- QPixmap
    * [202903] Fix an infinite recursion in QPixmap::fromImage() that occured
    when converting mono images.
    * [206174] Reverse the order of the tests done in QPixmap::hasAlpha()
    in order to speed it up.
    * [210275] Fixed a crash in QPixmap::resize().

- QSharedMemory
    * Compile fix on QNX when QT_NO_SHAREDMEMORY was defined

- QStyleSheetStyle
   * [179629] Fixed SpinBox with gradient background.
   * [188305] Respect the max-with property for more elements (such as QTabBar::tab)
   * [189951] Fixed the align: property for QTabBar
   * [194149] Fixed the background:transparent property
   * [198926] Fixed the background:none property on some component of the scrollbar
   * [206238] Fixed inconsistency with rules without selector applied to widget. They
     now always applies to all childs
   * [207420] Fixed the ~= attribute selector.
   * [207819] Fixed few performences issues.
   * [208001] Fixed crash crash with QMenu[title=...] in the stylesheet.

- QHeaderView
    * [207869] Fixed possible division by zero.

- QTableView
    * [207270] Painting errors in reverse mode and when there was spans.
    * [210608] Fixed regression in the handling of spanning cells.

- QTableWidget
    * [213118] Fixed a bug where moving the first or the last row triggered an assert.

- QTreeView
    * [213737] Fixed regression where ctrl+a would select all items regardless of the selection mode.
    * [202355] Fixed issue where items inserted in a view with all header sections hidden did not show
      themselves properly later.
    * [211296] When a column is hidden QItemSelectionModel::selectedRows and QItemSelectionModel::selectedColumns returns the wrong values.

- QTreeWidget
    * [305084] Fixed duplicate items that may appears when programaticaly
      expanding items.
    * [209590] itemSelectionChanged was being emited before item selection was updated

- Q3DragObject
    * [203288] Fixed regression against Qt 3 so that the drag() function now correctly uses
      MoveAction (and not CopyAction) as the default action.

- Q3TextBrowser
    * [197836] Fix assert when zooming out.

- QTextDocument
    * [204965] Fix html export to use indent as textIndent

- QTextBrowser
    * [192803] Fix loading of files from resources with a resource prefix.

- QTextEdit
    * [211617] Fixed crash when moving the first paragraph by drag and Drop

- QTextTable
    * [194229] Fix removing of a row with merged cells causing a crash.
    * [194253] Fix calling removeColumn on a Column with selectedCell causing an assert.
    * Fix assert on selecting the whole table after an insert/remove of column.
    * [175676] Fix calling of resize() making updates in layouting fail.

- QSpinBox
    * [213137] Fixed thousand-delimiters to not show for value = INT_MIN.

- QScrollArea
    * [210567] Fixed issues when scrolling a native widget.

- QScrollBar
    * [209492] Fixed a bug causing the scroll bar actions to be invoked twice.

- QToolbBarLayout
    * [207946] Prevented a crash caused by assuming that the parent widget always exists.

- QThreadPool
    * Fixed issues with thread termination during dll unloading on windows. QThreadPool::
      waitForDone() now completely stops all threads, on all platforms. In addition, the
      QCoreApplication destructor now calls waitForDone() to make sure all threads are 
      stopped before the Qt dlls are unloaded.
      
- QNetworkReply
    * [207283] Fixed support for HTTP 101 responses.
    * Fixed parsing of cookies with special timezone specifiers.

- QWebHistory
    * Fixed a bug where calling forward() would go backwards and not forwards.

- QFontMetrics
    * [212485] Fixed boundingRect() returning the proper size when there is a tab.

- QItemDelegate
    * [206762] Fixed painting when using a QBrush() for the text.

- QtXmlPatterns
    * [207584] When using the same QXmlQuery for a new query then evaluateTo()
      can return false even if the query is valid.
    * [214180] Fixed fn:replace fails when inside function.
    * Fixed crash when unary operator has empty sequence as operand.
    * Fixed that axis preceding or descendant-or-self when combined with
      function last() on a custom node model crashes.
    * Fixed that xml:id is not whitespace normalized.
    * Fixed that QXmlFormatter produces no output on single top-level text nodes.
    * Fixed infinite loop triggered by fn:matches().
    * Fixed crash when compiling one of the FunctX queries.

- VideoPlayer
    * [210170] Fixed an issue that prevented VideoPlayer::play to start when 
      called with an argument. 

- Accessibility
    * [199241] Fix an issue where the screen reader would read the content of
      a password line edit. The screen reader will now only read it if its Normal.

- QLocalSocket
    * [210886] Fixed a bug that would cause QLocalSocket to overrun
    its buffers on very long socket names.

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


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

X11
---
    * [208354] Fixed a crash in Qt's XIM implementation when exiting
      applications after using the skim input method.
    * [207800] Fixed a regression from 4.3 to 4.4 where putting a
      QX11EmbedContainer into a QWidgetStack would case the container
      stay visible permanently.
    * [207423] In QDesktopWidget, workaround a change in behavior in
      newer X.Org X servers where Xinerama would always be used even
      when using a multi-screen setup.
    * [206139] Fixed a bug where Qt could incorrectly recurse into the
      Xlib error handler (causing Xlib to assert).
    * [207057] Fixed a regression from 4.3 to 4.4 where
      QX11EmbedContainer would sometimes destroy the embedded client's
      window.
    * [209057] Fixed a Q3Process which triggered a "Do not delete
      object" warning.
    * QPrintDialog crashed on unix in some cases.
    * [214103] Fixed a regression with string to double conversion
      becoming locale-aware in QTextStream.
    * [210922] Fix crash in input methods when toggling the InputMethodEnabled
      attribute.
    * [210831] Fixed a problem where preview pages in the QPrintPreviewDialog
      would not appear or be drawn correctly on X servers without
      Xrender support.
    * [206165],[213457] Fixed bugs which show the wrong cursor on some widget.
	* Fixed bug regarding the usage of encoded URLs in Phonon


Windows
-------

    * [207888] Fixed a regression from 4.3 which caused crashes in
      Assistant and Designer when an accessibility client is running
      (this includes applications that query for accessibility
      features, like Notepad++).
    * Several fixes related to crashes and hangs when the user has an
      accessibility client running in the background.
    * [208782] Fixed a problem with non-cosmetic lines with widths < 2
      not being printed correctly with certain printer drivers.
    * [208859] Fixed a problem with strokes not being printed correctly. Both
      the stroke offsets and thinkness of the stroke were sometimes printed
      incorrectly.
    * [206473] Entering UNC paths is slow in the Qt file dialog.
    * [309241] Trying to stream mp3 content with phonon would cause a crash.
    * [210115] Fixed a problem causing "mailto" links not to work when the
      mail application path contains unexpanded environment variables.
    * [203012] Fixed a problem where "WriteOnly named pipes" failed to
      open using QFile.
    * [205685] Fixed the handling of TranslateAccelerator for windows key messages.
    * Add support for (not) embedding manifests in plugins, on Windows.
    * [211893] Fixed a crash related to using QtDotNetStyle.


Mac OS X
--------
    * Fix a regression where inserting widgets into native menus would cause
      the program to crash.
    * [209785] Fixed a regression from 4.3 to 4.4 in DeferredDelete
      event handling.
    * The "debuglibraries" binary package now includes dSYM bundles, which
      makes it possible to debug with them.
    * [207371] The CoreGraphics paint engine ignored the transform set
      on a QBrush with QBrush::setTransform().
    * Fixed insertation of 'space' char in QLineEdit when EISU key is being held down
    * Fixed fullscreen widget not regaining full focus after a dialog has been shown
    * Fixed bug regarding the usage of encoded URLs in Phonon
    * [212719] Fixed a bug that could cause text drawn into a QImage to be clipped
      incorrectly.
    * [216563] Fixed a case where failing to get the display's colorspace
      would result in many widget being painted all black.
    * [216544, 213316] Fixed several accessibility-related crashes.
    * [210401] Fixed memory leak in QWidget::setWindowIcon().
    * [211195] Fixed problem that caused crashes with the Mac binary package
      when entering long licensee names during the installation.

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

- QWSEmbedWidget
   * Fixed propagation of the Qt::WindowStaysOnTopHint window property.

- QDirectPainter
   * [209068] Fixed region coordinates for QDirectPainter when used on a
     rotated screen.

- DirectFB screen driver
   * Fixed window placements of windows with initial top-left coordinate (0,0).
   * Improved deallocation of resources when an application exits unexpectedly.
   * Fixed bug in QPixmap::rotate().
   * Fixed QPixmap::fromImage() with an image of format QImage::Format_Indexed8
     when compiling with QT_NO_DIRECTFB_PALETTE.
   * Fixed small memory leak in QPainter::drawImage()

- LinuxFB screen driver
   * Added a workaround screen driver when the kernel fails to report the
     length of the color components.
   * Improved performance of the non-accelerated screen cursor.
   * Disable the console cursor in graphics mode.

- Tslib mouse driver
   * [200995] Fixed crash when initialization fails.
   * [207117] Improved filtering during calibration.

- Ahi screen driver
   * Fixed link issue.
   * Fixed QScreen::setMode().
   * Improved support for different screen modes.

Qt for Windows CE
-----------------

   * Support for Visual Studio 2008 added
   * Improved QRegion to perform faster

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

- [212852] Fixed GCC 4.3 compiler warnings.


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

- Build System
    * [209866, 213084] Fix compilation errors in QtWebKit when using
      GCC 3.4 with precompiled headers. Precompiled header support is
      documented as experimental in the GCC 3.4 documentation, and as
      such, precompiled header support is disabled by default with
      this compiler.
    * [212330] Correct Makefile generation for src/corelib, which
      would sometimes include multiple qatomic.o targets.
    * [210016] Fix a build failure on 64-bit Linux when using the
      linux-*-32 mkspecs.
    * [206966] Fixed compilation errors on Linux when building for the
      MIPS architecture.
    * [212132] Workaround compiler crash bug for Linux on
      SPARC64. This is a generalization of a similar change done for
      Solaris in the 4.3 series.
    * [211326, 211703] Fixed compilation errors when using the Intel
      C++ Compiler for Linux on IA-64 (Itanium) hardware.
    * [171222] Ignore duplicate -L<path> options

- Assistant
    * [212875] Don't sort the entries in the contents view according to the
      help files names.
    * [212444] Use the default help collection when registering or unregistering
      help files without having a collection file specified.
    * [210704] Make sure the sql-plugin is correctly used when building
      Qt statically.
    * [208834] When highlighting a find result, ensure that the active
      highlighting color is used.
    * Introduced the -assistant-webkit configure flag to make use of WebKit as
      html renderer in Qt Assistant.


- Designer

    * [213481] Fixed crash that occurs when encountering an invalid .ui file.
    * [211422] Fixed a crash resulting from a conflict between the newly added
      support for QScrollArea and custom widgets derived from QScrollArea.
    * [209995] Fixed a bug in the property editor that caused it not to
      select values in spin boxes on editing.
    * [205448] Fixed a bug related to drag and drop and Windows accessibility.
    * [205899] Removed the windowModality property for non-form children to
      prevent it from locking up the form preview.
    * [212077] Fixed retranslateUi call in case of combo box items
    * [210866] Dynamic properties of type QByteArray are not converted anymore to type QString when reloading the form
    * [207187] Designer's property editor has better colors in case of inverted color scheme
    * [202257] The geometry of the resource dialog is saved in settings
    * [211677] Remove a crash in case of reloading resources

- Linguist

- lupdate
    * [209122] Fixed same-text heuristic missing existing plurals
    * [212465] Standardize on the default context being empty, not "@default"

- lrelease


- rcc


- moc

   * [189996] Fixed a bug that caused inline slots with throw()
     declarations to be parsed incorrectly.
   * [192552] Fixed a bug that caused "< ::" to be parsed incorrectly
     (e.g. "QList< ::Foo>").
   * [199427] Fixed the code generator so that it generates normal
     spaces everywhere, no tabs.
   * [204730] Fixed a skipt token after Q_PRIVATE_SLOT

- uic

   * [205439] Added a warning that is  printed when encountering
   non-obvious Qt3 dependencies (qPixmapFromMimeSource).

- uic3

   * [205834] Process non-ASCII filenames correctly.

- qmake


- configure

    * Fixed auto-detection of the XKB library on old Unix systems
    * Fixed auto-detection of getaddrinfo on old Unix systems

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


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

Unix
----
    * [203063] Changed the behaviour of qFatal and Q_ASSERT to always
    produce a SIGABRT signal in all build modes of Qt. (Previous
    versions called the exit function if Qt was built in release mode)
