Qt 4.3.3 is a bug-fix release. It maintains both forward and backward
compatibility (source and binary) with Qt 4.3.0 through Qt 4.3.2.

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

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

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

- Legal

    * This version adds the Common Development and Distribution License
      (CDDL) to the GPL Exception for developers using the Open Source
      Edition of Qt.
      See the GPL Exception Version 1.1 page in the documentation
      for more information.
    * This version upgrades the Qt Commercial License to version 3.4,
      the Qtopia Core Commercial License to 1.2 and the Qt Academic
      License to 1.4

Build System
------------

    * [177865] Fixed the Unix configure script to correctly identify
      g++ 4.3.0 as "g++-4" in the build key.
    * [186588] Added the missing QSsl forwarding header file.
    * [181414] Fixed an issue that caused moc to bail out on C++0X >> as
      used in some templates.

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

- QDir
    * [186068] Fixed documentation for QDir::CaseSensitive.
    * [177988] Fixed a regression from 4.2.3 causing entryList() to ignore
      QDir::System.

- QDirIterator
    * [185502] Fixed fileInfo() which could return an incorrect value for
      some paths.

- QDockWidget
    * Fixed an issue that caused close buttons of dock widgets to be hidden
      when they were resized to their minimum sizes.
    * [180199] Dock widgets with vertical title bars can now be re-docked
      on Mac OS X.
    * [184668] Fixed crash that could occur when setting the title bar
      widget twice.

- QFileDialog
    * [178894] Fixed a bug that prevented the OK button from being enabled
      when there were files selected, but no current file.
    * [179146] Fixed abug in selectFile() that prevented the selection from
      being cleared when called with an empty string.
    * [279490] Ensured that filesSelected() is emitted in AnyFile mode and
      directoryEntered() is emitted when the sidebar is clicked.
    * [277161] Fixed a bug that caused incorrect permissions for files to be
      obtained, resulting in the Delete action being incorrectly enabled.
    * [184314] Fixed an assertion in completer on Windows and fixed top-
      level completion on all platforms.

- QGLWidget
    * [177996] Fixed a crash that could occur when drawing QImages created
      outside of the GUI thread.
    * [180832] Fixed potential crashes in renderText().

- QGraphicsScene
    * [182442] Fixed regression from 4.2 that could cause a crash when
      deleting a scene being viewed by more than one view.

- QGraphicsTextItem
    * [181027] Fixed regression from 4.3.0 that caused movable text items to
      jump around.

- QHeaderView
    * [178483] Fixed crash that would occur when attempting to compute a
      visual index for an invalid model index.
    * [182501] Fixed regression that caused stretched sections to use the
      minimum size when not visible.

- QTableView
    * [175328] Fixed grid drawing errors in table views containing spanned
      items.

- QListView
    * [184204] Fixed broken layout in right-to-left mode with no horizontal
      scroll bar.

- QTreeView
    * [182041] Fixed problem with drag and drop in cases where the columns
      were swapped.
    * [186624] Fixed branch expanding animation.

- QItemDelegate
    * [181221] Fixed problem with the rectangle that was used to check the
      mouse coordinates when clicking on the check box.

- QHttp
    * [178715] Fixed a problem where QHttp would not correctly parse the
      server response if Content-Length was 0 and authentication was
      required.
    * [170860] Fixed a problem where QHttp would emit the done() signal
      if the HTTP proxy server closed the connection after requesting
      authentication.

- QLabel
    * [173188] Fixed QLabel::setAlignment(Qt::AlignJustify) to have the
      desired effect.

- QMainWindow
    * [154834] Fixed restoreState() to be able to load data from previous
      minor releases.
    * [179713] Fixed failed assertions when inserting toolbars.
    * [180824] Fixed a crash when removing a toolbar on a main window with
      the unifiedTitleAndToolBarOnMac property set.

- QMdiArea
    * [185281] Fixed a bug where closing a modal dialog caused a different
      sub-window to be activated.

- QMdiSubWindow
    * [183647] Improved WindowBlinds support.
    * [188849] Fixed a crash that occurred when using a regular QWidget as
      the menu bar in a QMainWindow.

- QMenuBar
    * [173556] Fixed a bug where the corner widgets did not swap sides when
      changing layout direction.

- QProcess
    * [180836] Fixed issue with defunct processes on Unix.

- QPainter
    * Made the QPainter::drawText() overload with the QTextOption argument
      support justified text.
    * [179726] Fixed a problem with the bounds calculation for handling
      fallback in certain painting operations. This could be perceived as a
      clipping bug on some platforms.

- QPainterPath
    * [169280, 170046, 173034] Fixed cases where calling
      QPainterPath::united(), QPainterPath::intersected(), or
      QPainterPath::subtracted() would cause infinite loops or would not
      produce the expected result.
    * [178260] Fixed a bug in the stroking of painter paths which could
      cause uninitialized data access for paths with extreme curvature.
    * [183725] Fixed a bug where intersecting a path against itself would
      return an empty path.

- QPixmap
    * [178986] Fixed a regression from 4.2: image/pixmap scaling caused the
      sampling to be shifted by half a pixel.

- QRasterPaintEngine
    * [177919] Fixed a problem with drawing bitmaps.

- QScriptEngine
    * Fixed the parsing of large numbers (larger than 2^32).

- QStyle
    * [186511] Fixed the default QStyle() constructor to create a
      QStylePrivate object, which is required by QStyle::layoutSpacing().

- QStyleSheet
    * [178598] Fixed a memory leak when using border images.
    * [175722] Fixed a bug which broke mouse handling in checkbox items
      when styling the check mark.

- QStyleSheetStyle
    * [182862] Setting a stylesheet with background-image on QMenu::item
      now works.

- QSvgGenerator
    * [176705] Fixed a bug which caused radial gradients to produce
      malformed XML output.
    * [182196] Fixed a regression which caused gradient fills to be stored
      as image data instead of native data.
    * [182244] Fixed a bug in SVG export of ObjectBoundingMode gradients.

- QStringListModel
    * [180184] Fixed a bug that prevented sorting from updating persistent
      model indexes.

- QTableView
    * [182210] Fixed a bug which caused the table view to hang when it had
      views with 100,000,000 rows.

- QTextBrowser
    * [176042] Fixed incorrect behavior with selectAll() that caused it to
      select all links if a link had the focus.

- QTextDocument
    * [177489] Fixed a bug in page breaking of text frames which could cause
      missing page breaks and overdrawing.

- QTreeView
    * Fixed a possible crash that could occur when setting scrollPerPixel
      while height was 0.
    * [178771] Fixed an assertion that could occur when pressing the left or
      right arrow key when the root index had no children, but when the
      current index had not been set to invalid.
    * [182618] Improved the performance of adding expanded or spanned items.
    * [184072] Improved the performance of hiding rows.

- Q3DockWindow
    * [176167] Fixed an issue that made it impossible to move a Q3DockWindow
      with the mouse if it did not have a title.

- Q3ToolBar
    * [182657, 185381] Fixed crashes caused by calling clear() and then
      re-adding items.

- Q3Wizard
    * [176548] Fixed a crash caused by calling removePage() before a wizard
      is shown.

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

X11
---

- QApplication
    * Fixed a bug that could cause a programmer specified application font
      to be overridden by the automatically-detected system font.

- QCUPSSupport
    * [180669] QCUPSSupport::QCUPSSupport() no longer crashes when the CUPS
      library cannot be loaded.

- QPrintDialog
    * Fixed a bug that caused the selected file to be truncated before the
      overwrite dialog was shown.

- QWidget
    * Fixed a bug that caused QWidget::windowState() to return an incorrect
      state after restoring a maximized window.

- QX11EmbedContainer
    * [186819] Fixed embedClient() to not cause an X server lock-up when
      passed an invalid window ID.

  HP-UX
  -----
    * [179538] Fixed a bug that caused uic3 to hang in q_atomic_lock()
      on PA-RISC based HP-UX machines.
    * [177397] Fixed a QGL module compile problem on HP-UX systems.

Windows
-------

- QFileDialog
    * Fixed occasional crashes when dealing with the system icons.
    * [175041] [181912] Ensured that shortcuts are handled correctly.
    * Fixed a crash that could occur when opened with QDir::temp() as the
      initial path.

- QGLPixelBuffer
    * [177154] Fixed support for floating point buffers with NVIDIA hardware
      through the GL_NV_float_buffer extension.
    * [179143] Fixed a memory leak that could occur when deleting a
      QGLPixelBuffer.

- QPixmap
    * [185715] Fixed an assertion that could occur when reading icon
      information for file types.

- QPixmapCache
    * [182363] Fixed a crash that could occur when inserting a null pixmap.

Mac OS X
--------

- Fixed multiple issues preventing binaries built on Leopard from being
  deployed on Tiger and Panther systems.

- QCoreGraphicsPaintEngine
    * [170352] Fixed a problem where all aliased strokes were offset by
      1 pixel to the left on Mac OS X < 10.4.
    * [172006] Fixed a problem with drawing points when FlatCap or
      SquareCap was set as the pen style.

- QGLWidget
    * [181819] Fixed a bug that caused the contents of QGLWidgets not to
      be moved or updated.

- QCheckBox
    * [182827] Fixed a crash caused by deleting a QCheckBox in an event
      posted from the toggled() slot.

- QDialog
    * [281331] Fixed a bug that caused a QDialog with a modal parent to not
      be modal.
    * [279513] Fixed a bug that could occur when using the
      Qt::WindowStaysOnTopHint flag on dialogs that would cause the drop down
      menu to be hidden.

- [180466] Ensured that an Embedded HIWebView in a floating window will
  receive an activation.

- Fixed brushed metal windows on Leopard.

- Made QMenus have proper rounded edges on Leopard.

- Fixed a regression that caused text to always be rendered with anti-
  aliasing in OpenGL.

- [179882] Fixed a regression where applications with both full-screen and
  non-full-screen windows could get into an indeterminate state.

- [182908] Fixed a crash on PPC which was caused by using a static Qt in a
  plugin in another application.

Qtopia Core
-----------

    * [179060] Fixed a potential crash when Qtopia Core is compiled without
      FreeType support.
    * [187589] Fixed a problem that caused windows not to appear on screen
      when using gcc 4.1.1 ARM EABI toolchains.
    * [179533] Fixed temporary blitting of uninitialized data to the screen
      areas of some windows when they are shown for the first time.
    * [180487] Fixed the use of FreeType fonts for unprivileged processes
      in a LIDS environment.
    * [179883] Fixed the use of -D QT_QWS_DEPTH_GENERIC configure options
      when using a transformed screen driver.
    * [182150] Fixed the use of incorrect colors that resulted from using
      the VNC driver on top of the Linux framebuffer driver on big-endian
      systems.
    * Optimized drawing of images on 16-bit screens when using a painter
      with an opacity value of less than 1.0.
    * [183118] Updated the framebuffer test application to work on 18 bit
      screens.
    * [184181] Ensured that the QDesktopWidget::workAreaChanged() is emitted
      when the available screen geometry is changed.
    * [185508] Fixed missing mouse move/press event on touch screens when
      pressing on a newly-activated window.
    * [185301] Fixed a crash in QImage::convertToFormat() that could occur
      when converting an image having a stride that is not a multiple of 4.
    * [186266] Fixed a race condition which could result in painting errors
      around the window decoration under certain circumstances.
    * [186409] Fixed string to number conversions in QtScript when
      configured with -D QT_QLOCALE_USES_FCVT.
    * [186611] Fixed color conversion in QScreen::solidFill() (used when
      drawing the screen background) when configured with
      -D QT_QWS_DEPTH_GENERIC.
    * [125481] Fixed a painting error with RGBA framebuffers and partially
      transparent windows.
    * Fixed inconsistency in 16-bit alpha blending which caused the
      leftmost/rightmost pixels to be calculated differently due to
      rounding errors.
