Qt 3.3.5 is a bug-fix release. It maintains both forward and backward
compatibility (source and binary) with Qt 3.3.4, Qt 3.3.3, Qt 3.3.2,
Qt 3.3.1 and Qt 3.3.0.

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

Platforms
---------

- Qt now supports Mac OS X 10.4 (Tiger)

Compilers
---------

- Added support for VS 2005
- Added support for GCC 4

Windows Installer
-----------------

- The environment variables no longer contain invalid paths.
- The user is warned if QTDIR is not set and the evaluation edition is
  already installed, to avoid conflicts between the two packages.
- A bug was fixed where a '\0' was appended to the end of a path.
- Fixed the dependencies for image formats and styles.

Qt Designer
-----------

- Fixed a problem with long string literals on certain Visual Studio
  C++ compilers.
- UIC now uses the include hints from the .ui file when generating
  source files.
- The "paste" action is now enabled and disabled correctly.
- QWidgetFactory::supportsWidget() now returns true for QSplitter.
- Parse files with more than one '.' in the file name correctly.
- The project name is now displayed correctly also when the project is
  created in a root directory.
- Fixed a bug where Windows end-of-line terminators would be included
  in string literals, which broke translation.
- Several crashes were fixed related to cutting/copying/pasting menu
  items.
- Fixed some problems with designer generating corrupted pro files.
- A crash was fixed for when designer loads a pro file with the same
  file listed more than once.
- The action editor is now closed when there is no main window form.
- Stability fixes

Qt Linguist
-----------

- lupdate now understands strings longer than 16384 characters.
- Fixed escaping bugs for string that contain both ampersands and
  double quotes.

Qt Assistant
------------

- When printing, assistant now always uses the Active color group.
- Fixed a rendering bug for paragraphs that start with a line break.
- Support for setting the documentation root path, allowing
  documentation files to be moved.
- When opening a link in a new window, assistant will now properly
  scroll to the correct anchor after the window has been shown.
- Fixed full text search for documents not listed in the 'ref'
  attribute of the <section> tag in the current .adp file.
- The state of the forward/backward buttons now work properly when the
  tabs are changed.

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

General Fixes
-------------

Added security patches for zlib: CAN-2005-1849, CAN-2005-2096
The FreeType library was upgraded from version 2.0.9 to 2.1.9

- Build system
        Improved build keys for gcc 4 compilers, so plugins no longer
        need rebuilding after upgrading gcc to a new patch release.

- QCanvas
        Fixed wrong text scaling and cut-off text.
        Fixed drawing with a brush when double buffering is enabled.

- QCommonStyle
        Fixed the appearance of QSlider after setBackgroundOrigin has
        been called.
        Fixed an overflow in calculating the handle position for
        QScrollBar.

- QCString
        Fixed a crash in qUncompress() if the resulting QByteArray was
        too large to fit in memory.
        Fixed potential security problems by using vsnprintf() instead
        of the less secure vsprintf().

- QDataStream
        Fixed a data corruption bug when using stream version Qt_3_1 and using
        operator<<(qint64).

- QDateTime
        Fixed QDateTime::secsTo() when crossing daylight savings hours
        boundaries.

- QDockWindow
        Undocked windows now remember their size also if the user
        changes it.

- QDom
        The default constructor for QDocDocument now creates an empty
        document that can be used to create elements.
        A warning is now displayed when trying to construct or save an
        invalid document.
        Characters that are not allowed in XML are now escaped
        properly when saving.

- QFileDialog
        Shortcuts now show the icons of what they point to.
        Entry sorting is now locale-aware, as opposed to sorting based
        on Unicode order.
        You can now select files by pressing 'enter' when using
        QFileDialog::getOpenFileNames().
        Fixed a missing repaint in contents preview after selecting a
        file, then a directory, then the same file again.
        dirPath() no longer chops off the last directory in a path.

- QGVector
        Fixed a bug that caused a memory leak and data corruption if
        resize() failed.

- QHeader
        The header text is now rendered correctly next to the icon in
        reverse layout mode.

- QImage
        Fixed comparison of images with alpha data, but with the alpha
        channel disabled.

- QKeySequence
        Key sequences that ended with a ',' now work properly.

- QLineEdit
        Fixed the behavior of the delete key on the keypad.
        Fixed support for transparent line edits.
        Fixed a crash when opening the context menu in a QTextEdit
        subclass that returns 0 for createPopupMenu().

- QListBox
        Fixed a crash when removing the current item while selecting
        items with a rubberband.

- QListView
        Fixed the behavior of the Home and End keys when QListView
        contains disabled and hidden items.
        Fixed a problem with the QListView::...Clicked() signals were
        emitted also when the root decorated section was not in the
        left-most column.
        HTML control characters in QListView's tool tip text are now
        escaped properly.
        sortChildren() now also sorts children of items with no
        siblings.
        Fixed a missing redraw after removing columns.
        contentsWidth() now returns the correct value after
        setContentsWidth() has been called.
        Fixed a crash after a sequence of deleting and selecting
        items.
        Fixed the size of headers with multi-line text.
        Fixed a lock-up and possible crash caused by an internal state
        restore on controllers with no children.
        Fixed keyboard navigation when jumping to entries by pressing
        the key for the first character in the text of an item.

- QLocale
        Fixed support for NaN, which failed on certain compilers.
        Passing Q_LLONG to toString() now properly includes the group
        symbols.
        Fixed locale detection when locale environment variables are
        not set.
        Added workarounds for compiler optimization bugs when parsing
        doubles.

- QLocalFS
        Fixed a crash when canceling a QUrlOperator transfer before
        completion.

- QMenuData
        Fixed a crash when closing an MDI application while the menu
        bar has Alt-focus.

- QMessageBox
        Message boxes now work correctly in right-to-left mode.

- QPaintDevice
        Fixed drawing errors when using bitBlt() on a printer.

- QPainter
        Fixed drawing of rectangles with a negative (or 0) width.

- QPopupMenu
        The height of new columns is now initialized properly when
        menu items are shown in multiple columns.

- QProcess
        Close socket connections properly when a
        process is created after creating the socket connection.

- QPSPrinter
        Generate PS font names correctly.

- QPushButton
        Fixed a crash caused by deleting the button while the popup
        menu is shown.

- QRichText
        Tab stops are now adjusted correctly when printing in high
        resolution mode.
        Reduced the number of memory allocations when deleting large
        blocks of text.
        Fixed parsing of hexadecimal HTML entities
        Fixed a bug where the font changed after calling setText()
        repeatedly.

- QScriptEngine
        Fixed an issue with shaping of Hebrew text, which lead to
        layout problems in QTextLayout.
        Fixed rendering of Hebrew text with punctuation.
        Fixed bugs in Gurmukhi shaping.

- QScrollView
        Fixed the size hint when scrollbars are set to be permanently
        on.
        Fixed a drawing error seen on certain graphics drivers when a
        scroll view spans multiple screens.
        Fixed a bug where wheel events' horizontal/vertical status
        were not forwarded to viewportWheelEvent().
        Fixed a crash when mouse wheel events were sent to a scroll
        view with disabled scroll bars.

- QSettings
        Fixed a bug when comparing keys with common prefixes.

- QSGIStyle
        Fixed the size of QComboBox.

- QSizeGrip
        Fixed a bug that caused the window to move when resizing to
        the minimum size using the size grip.

- QSocketDevice
        Improved error reporting when the connection is unexpectedly
        closed.
        Fixed a bug where the socket would be closed if 0 was passed
        as maxlen to readBlock().

- QString
        Fixed a lock-up in QString::section().
        Let replace() behave as documented when the index is larger
        than the length of the string.

- QTable
        Fixed positioning of QComboTableItems that span several rows.

- QTextCodec
        Fixed occasional crash in fromUnicode().
        Fixed Big5 support to comply with the standards.

- QTextEdit
        Fixed bug in undo/redo history when input methods are used.
        Fixed a crash caused by inserting text with an input method
        during a focus change.
        Fixed the behavior of the delete key on the keypad.
        Fixed setMaxLogLines() when there are already too many lines.
        Fixed crash when clearing a QTextEdit when the IME is active.
        Fixed crash when the text edit is deleted while dragging text.

- QTextLayout
        Fixed layout of lines that are too long and do not contain a
        possible break point.

- QTimeEdit
        Fixed several issues with stepUp() and stepDown().

- QToolButton
        Fixed a crash when assigning a tooltip to a tool button which
        does not have QMainWindow as an ancestor.

- QToolTip
        Fixed an occasional crash.

- QTranslator
        Fixed a bug when calling messages() before tr() when using
        compressed .qm files.

- QUrlOperator
        Fixed a crash when accessing invalid paths on an FTP server
        using QFileDialog.
        Fixed a bug where the source would be removed if the source
        and destination were the same.

- QVariant
        Fixed a memory leak in clear().

- QWidget
        Fixed excessive flicker when reparenting a widget that has
        tool windows.

- QWorkspace
        Fixed flickering when switching between maximized windows.
        Fixed a lock-up when modal dialogs were created with
        QWorkspace as parent.
        Fixed a bug where modeless dialogs with QWorkspace as parent
        would be drawn with no title bar.

- SQL, DB2 driver
        Compile fixes.
        Fixed a bug where QSqlCursor::insert() would fail to insert
        two blob fields at the same time.

- SQL, MySQL driver
        Fixed a crash when using empty database names.

- SQL, Oracle driver
        Fixed truncation of numeric data types to 22 digits.
        Fixed UTF-8 support by ensuring that there is enough space to
        store the text.

- SQL, ODBC driver
        Fixed problems with sorting and comparing strings larger than
        8192 characters.

- SQl, PostgreSQL driver
        Temporary tables are now only visible for the connection that
        created them.

- SQL, TDS driver
        Fixed problems with compiling the plugin with later versions
        of the TDS library.

- SVG support
        Fixed support for SVG viewbox.
        Added basic support for stroke-dasharray.


Platform-Specific Issues
------------------------

Windows:

- ActiveQt
        Unrelated types are no longer converted.
        The control container is now only reset if the CLSID changes.
        Fixed a bug where QAxObject::clear() did not reset the
        metaobject when it was cached.
        Fixed a memory leak.
        Fixed a bug that caused flicker when navigating away from a
        page embedding a control.
        The VARIANT out-parameters in signals now map to "QVariant &"
        and not "const QVariant &".
        Signal parameters of type "bool" are marshalled to the bool
        slot also when the control sends an integer parameter.

- Drag & drop
        Fixed a bug with sending single-color pixmaps.
        Fixed a crash caused by reading a drag object after it has
        been deleted (before the drop event).
        Dragged pixmaps are now cleaned up before drawn to avoid
        problems with broken alpha values and resetting masked pixels.

- QApplication
        Fixed a lockup caused by showing a dialog while resizing a
        window.
        QWidget::grabKeyboard() now also grabs the menu button.
        Fixed a bug where mouse events were sent to the wrong widget
        after calling QEventLoop::processEvents() with
        ExcludeUserInput.
        Windows Server 2003 can now also use the Windows XP style.
        Fixed a memory leak in QEventLoop.

- QColor
        Fixed failed initialization of the Qt colors (e.g., Qt::red) when
        using the MinGW compiler.
 
- QFile
        Fixed a bug where a read error was not handled properly.

- QFileInfo
        permission() now uses the correct file name on Windows 9x.

- QFontDataBase
        Added support for scalable fonts.

- QFontEngine
        Fixed a problem with symbol fonts.
        Fixed support for user defined characters.

- QLibrary
        Fixed the directory separators.
        Fixed some library loading errors.

- QLocale
        The locale() function now returns the correct ISO name instead
        of a number.

- QNPWidget (NPAPI)
        Fixed a bug where the widget was not clipped properly by the
        browser.

- QPainter
        Fixed a bug where QPainter failed to fill ellipses of size
        2x2.
        Fixed a potential lock-up after failed GDI allocations.

- QPrinter
        Rich text tables are now printed correctly when the table
        spans pages.
        Fixed text printing errors on page 2 and out caused by the
        background mode being reset to OPAQUE.

- QProcess
        The directory separators for the current working directory are
        now converted properly, so that a UNC path can be used on
        Windows.

- QTranslator
        Fixed an issue with isReadable() on NTFS.

- QWindowsXPStyle
        XP style now works when compiled as a plugin.
        Fixed menu bar placement.
        Fixed a bug in setting the background color of QTabWidget.
        Fixed the position of the size grip in large QSizeGrip
        widgets.
        QGroupBox now uses the correct colors.

- QWorkspace
        Fixed bug where hidden windows would be shown after restoring
        from maximized mode.

- qmake
        The Makefile generator now only searches for the latest
        version of the Qt library, as opposed to searching all
        libraries.
        Dependency checking for pre-compiled headers were fixed.
        Fixed support for listing .pro files in SUBDIRS in subdir .pro
        files.
        Fixed support for multiple -L and -I entries in QMAKE_LIBS.

Mac:

- Build system
        When using Xcode, the optimization level is set to 0 in debug
        mode.
        Added support for Xcode 2.1 and up.
        Fixed copying of target files when DESTDIR is set.

- Drag & drop
        Fixed a crash when deleting the drag object before dropping.

- QApplication
        The default font is now only set if the user has not set one.
        Fixed a problem where popup menus would not go away after
        releasing the mouse button outside the popup.
        Added support for dual axis mouse wheels.
        Fixed a bug in tablet identification.
        Added support for tablet erasers.
        Fixed a deadlock in postEvent() when there was contention for
        a wakeup.
        Fixed a crash when switching displays at the same time as
        QApplication is destroyed.
        Stability fixes.

- QColorDialog
        Fixed modality support.

- QFileDialog
        Let the file dialog remember the previous directory.
        Fixed keyboard navigation when jumping to entries using the
        first letter of a file name.
        Fixed a memory leak.

- QFontDatabase
        Fall back to the "Geneva" font, which is guaranteed to be
        available, instead of "Helvetica".

- QFontEngine
        Fixed a memory leak.
        Fixed rendering of glyphs that modify previous glyphs,
        including Indic text.

- QMacStyle
        Title bars are now shown as deactivated when the window is
        deactivated.
        Fixed a bug where buttons in button groups inside a container
        would look like they were pressed.
        Fixed a crash caused by drawing onto a non-pixmap background.
        Fixed the width of QComboBox.
        Improved drawing of size grips.
        Improved drawing of sliders, and made QSlider slightly wider
        by default.

- QMenuBar
        Fixed a lockup caused by menu items ending with an '&'.
        Menu items with disabled popups are now also disabled.

- QMessageBox
        The resize handle is now shown.

- QPainter
        Fixed double transformation of ellipses with a transformed
        width or height of 1.

- QPixmap
        Fixed a crash when loading a cursor from an embedded image.
        The color depth is now set properly when converting a QBitmap.

- QPrinter
        Fixed a crash when using bitBlt() to copy a QBitmap onto a
        printer.

- QProcess
        Fixed support for launching bundles.

- QPushButton
        Icons are now drawn properly.

- QTextBrowser
        Fixed a bug where a text browser popup triggered by a
        hyperlink would pop up again when the user clicks inside the
        first popup.

- QToolButton
        Fixed a painting problem when the button was pressed.

- QWidget
        Menubar popups no longer steal focus from QTextEdit.
        Fixed collapsing of windows with no title bar decorations.
        Several window activation bugs have been fixed.
        Fixed a bug where modal dialogs would be modal to its own
        children.
        Fixed tablet support for multiple screens.
        Fixed a memory leak.

X11:

- Build system
        Removed aliasing/redefinitions of the 'which' command to fix
        failures in the configure script on certain Unix systems.
        Added some missing flags for the yacc tool on 64-bit Linux.
        The -fn application command line option, which selects the
        default application font, works again.
        Fixed copying of target files when DESTDIR is set.

- Drag and drop
        Fixed a crash in the dragging application when the drop target
        crashes.
        Fixed a bug in finding the widget under the cursor while
        dragging.
        Some problems were fixed with the internal timestamp in the
        drop event.

- OpenGL
        Fixed colors when rendering using glColor() onto an 8 bit
        pixmap.

- QApplication
        Support the F11 and F12 keys on Sun keyboards.

- QCanvasView
        Support multiple shared views of a single canvas on multiple X11
        screens.

- QClipboard
        Fixed a rare crash related to cut & paste with the Motif
        extension.

- QFontDatabase
        Fixed a bug where QFontInfo would return an empty family and
        point size after trying to select a font that was not
        installed on the system.

- QFontEngine
        Fixed a bug where scaling italic fonts would sometimes cut
        overhangs.

- QInputContext
        Fixed a bug that led to a corrupted display in QLineEdit and
        QTextEdit when using Japanese input methods with very long
        input selections.

- QPainter
        Fixed a crash when setting a pen on an inactive painter.

- QPrinter
        Fixed printing on Tru64 by removing the -o argument to the lp
        command.

- QScriptEngine
        Added support for Khmer fonts.
        Fixed shaping of Telugu text.
        Fixed a crash when scaling Japanese XLFD fonts by a factor of
        1000.

Embedded:

- QApplication
        Fixed a memory leak.

- VNC driver
        Fixed a memory leak.

- QWidget
        Fixed a potential crash when reparenting widgets.
