Qt 3.3.3 is a bugfix release. It maintains both forward and backward
compatibility (source and binary) with Qt 3.3.2, Qt 3.3.1 and Qt 3.3.0.


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

Compilers
---------
Added support for GNU gcc on AIX 64-bit.

Fixed the issue of some compilers that produced bad output when
compiling qlocale.cpp with -O2.

Fixed include path problem with MinGW.

Meta Object Compiler (moc)
--------------------------
Allow classnames containing the substring 'const' in signal
parameters.

Qt Assistant
------------
Fixed crash when an empty file is part of the profile.

Qt Designer
-----------
Fixed occasional crash when closing the form window.

Fixed bug that removed '@' characters from .pro files.

Fixed bug resulting in invalid code for radio buttons with strong
focus.

Fixed crash when custom widget plugins based on QComboBox were edited or
previewed in certain styles.

Fixed bug in loading enum properties (e.g. slider tickmarks).

Handle comments of the form '# {' correctly.

Handle '$${}' variable expansion correctly.

Fixed missing actions in drop down action groups created with the menu
editor.

Made sure that the item labels for toolboxes can be translated.

Added CTRL + Key_Q as a shortcut to quit.

Do not add unnecessary blank lines in .pro files.


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

General Fixes
-------------
- Drag and drop
	Handle filenames with '#' characters properly.

- QAccel
	Fixed bug where Alt + non-ASCII letter would require an additional
	Shift.

- QButtonGroup
	Don't navigate out of the button group with the arrow keys.

- QComboBox
	Don't close the combobox when holding space down while clicking.
	(Fixes GUI lock-up on Windows.)

- QDateTimeEdit
	Propagate enabled state correctly when adding a QDateEdit/QTimeEdit
	to a disabled parent.

- QDataStream
	Fixed bug involving the output of doubles/floats in printable mode.

- QFileDialog
	Fixed crash when calling setContentsPreview() twice.

- QFontDatabase
	Made Tibetan text work even without OpenType tables.
	When using XLFD fonts, make sure that the size selected actually
	supports the script.
	Fixed bug that caused fixed-pitch XLFD fonts to be reported as
	variable pitch.
	Fixed some issues in the CJK compatibility area, where we did
	not always pick the correct CJK font.
	Made isSmoothlyScalable() work when a font only exists in bold.
	Fixed bug where font metrics for Asian fonts were wrong in some
	circumstances.
	Fixed bug involving certain open source Arabic fonts.

- QFontDialog
	Resize OK/Cancel buttons properly with large font sizes.

- QFtp
	Allow connection to FTP servers that return lower-case month
	names.

- QImage
	Included fix for buffer overflow in libPNG.
	Fixed bug that made copy constructor not copy the entire image.
	Allow XPM images with colors that have more than one word in the
	name.
	Fixed crash when trying to load a corrupt/invalid BMP image.
	Fixed crash when trying to load a corrupt/invalid GIF image.
	Fixed crash when trying to load a JPEG image that is too big.
	Fixed bug that caused dotsPerMeter() to be ignored when saving
        JPEG images.

- QLineEdit
	Fixed memory leak for line edits with masks.
	Fixed bug where QLineEdit::text() would return a null QString when
	an input mask was set on an empty line edit.
	Don't scroll when the text is wider than the widget.

- QListView
	Don't select a non-visible item when Right arrow key is pressed.
	Fixed crash in setOpen(QListViewItem*, bool).

- QLocale 
	Now supports string-to-int conversions with base up to 36.
	Handle space as a separator for large numbers in toDouble().

- QMovie
	Fixed offset bug.

- QPainter
	Don't crash if setWorldMatrix() is called on a painter that is not
	active.

- QPicture
	Fixed bounding rect calculation.

- QPixmap
	Fixed rounding errors in xForm().

- QPopupMenu
	Fixed updateSize().
	Fixed a crash when clearing and inserting new items while the tear
	off is visible.

- QRichText
	Clear the focusIndicator paragraph when clearing the text.
	Fixed bug with <td valign="middle">.

- QSemaphore
	Fixed possible starvation in operator-=().

- QSlider
	Fixed mouse handling for vertical sliders in reverse mode.

- QSocket
	Preserve readBufferSize() when doing connectToHost().

- QSql
	Fixed crash in ODBC-Driver in connection with Informix SE.

- QSqlCursor
	Fixed bug in del(true)

- QSqlQuery
	Fixed thread reentrancy bug.

- QString
	Made toFloat() fail if the number is too large for a float.
	Fixed crash in fromUtf8 when argument is not 0-terminated.
	Don't end up in an endless loop when setLength() is called with a
	ridiculously large value (> 2^31).

- QSvgDevice
	Fixed some clipping issues.

- QTable
	Fixed memory leak in key event handling.
	Fixed bug where calling setNumRows() or setNumCols() would not
	change the sizeHint().
	Improved speed of deleting rows/columns in big tables.

- QTextEdit
	Hide the cursor again when a drag leaves the text edit.
	Don't crash if the text edit is deleted while the popup menu is
	active.
	Fixed undo/redo bug in overwrite mode.
	Fixed crash when entering text in overwrite mode when entire text is
	selected, on a single line, and the cursor is at the start of the
	text.

- QTextEngine
	Fixed a small bug in the bidi engine.
	Fixed two small issues with Bengali rendering.
	Fixed small issue with Khmer rendering.
	Fixed an issue with ideographic space (U+0x3000).

- QThread
	Fixed bug on HP-UX when starting a thread with LowPriority.
	Provide a safety mechanism when trying to use QThreadStorage from
	non-QThread threads: spit out a warning and do nothing.

- QToolBar
	Create a disabled popup menu when a disabled combobox is added to
	the extension menu.

- QWidget
	Fixed bug that would sometimes make showMaximized() fail.

- QWidgetStack
	Set background properly when the current page has a maximum size
	that is less than the size of the QWidgetStack.

- QWorkspace
	Fixed problems involving widgets with size constraints.
	Don't normalize minimized widgets when cascading and tiling.

- QXml
	Speed optimizations.

Platform-Specific Issues
------------------------
Windows:

- Drag and drop
	Ignore drag and drop events for modally shadowed windows.

- Build system
	Fixed qmake problem with QMAKE_EXTRA_WIN_TARGETS.

- QApplication
	Fixed restoring of windows when minimized using something other than
	the window menu.
	When restoring a modally blocked application after using "Minimize
	All Windows" from the task bar, activate the modal dialog rather
	than the blocked window.
	Support Unicode application directories in applicationFilePath()
	independently of the current locale.
	Fixed accelerators with Ctrl+@ and Ctrl+[ to Ctrl+_ instead.

- QAxWidget 
	Fixed bug that could lead to windows no longer responding to mouse
	events.
	Fixed bug that would eat a mouse release event in some cases.

- QFileDialog
	Don't let getOpenFileName() fail immediately, even if passed invalid
	characters.
	Fixed bug that gave spurious mouse move events to other widgets when
	closing a file (or printer) dialog.

- QFontDatabase
	Select correct font when family is empty and style hint is set.
	Fixed problem where Chinese fonts were a pixel smaller than with
	older Qt versions.

- QFtp
	Improved performance by increasing buffer sizes.

- QLocale
	Obtain correct locale information on Win95, so that
	QTextCodec::locale() works properly.

- QPixmap
	Fixed problems when alpha blending in 32bpp depth.

- QPrinter
	Fixed problems caused by printing without first calling setup() when
	using certain printers.

- QSettings
	Fixed bug that would add unnecessary size to the registry on Win98
	in some circumstances.

- QSocket
	Worked around Windows bug which caused bytesAvailable() to be 1,
	even if no data was available.

- QSound
	Removed race condition.

- QTextEngine
	Draw CJK compatibility characters in the 0xffxx range correctly.
	Fixed crash on invalid UTF-8 when using the newest Uniscribe library
	on XP.

- QWidget
	Don't clear the maximized state when moving a maximized window.
	Don't move the widget to a silly position when showMinimized() is
	called on a visible widget.
	Let the size grip respect the same size limits as the window
	manager.
	Fixed bug where a widget with an empty region as mask would still
	have one visible pixel.

- QWindowsStyle
	Always underline accelerator cues on Windows 98.

- QWindowsXPStyle
	Draw up/down buttons of QDateTimeEdit disabled when the widget is
	disabled.
	Draw toggle-toolbuttons as toggled even if they are not in a
	toolbar.

Mac:

- Drag and drop
	Fixed bug that would disrupt drag and drop when toggling
	full-screen status.
	Ignore drag and drop events for modally shadowed windows.
        Show the correct cursor when copying.

- QApplication
	Fixed bug that could cause crash when allocating and deleting
	QApplication repeatedly.
	Properly animate the toolbar button.

- QAquaStyle
	Made sure that OK and Cancel buttons are big enough when icons are
	added.
	Fixed bug that would show focus rectangles around hidden widgets in
	a QScrollView.
	Fixed drawing errors in QComboBox and QSpinBox when building on
	Panther and deploying on Jaguar.
	Fixed bug that caused artifacts on the focus widget when embedded
	inside a widget with a background pixmap.

- QComboBox
	Fixed crash when calling setListBox() and later popping up the popup
	list.
	Fixed size hint problems.

- QFileDialog
	Made the filter functionality work in getSaveFileName().

- QFontEngine
	Fixed bug showing strikeout text.

- QHeader
	Fixed drawing errors when moving columns.

- QListView
	Don't draw the disclosure triangle for items that aren't visible.

- QMenuBar
        Disable the quit option when there is a modal dialog.

- QPixmap
	Made copyBlt() copy the alpha channel properly again.

- QPrinter
	Fixed page range bug.

- QProgressBar
	Show something for indeterminate progress bars.

- QScrollView
	Fixed colors for the scrollview frame.

- QSettings
	Fixed bug that caused settings files to end up in the wrong place.

- QTableHeader
	Fixed sizing bug.

- QWidget
	Don't disable children of WStyle_Tool widgets.
        The window proxy icon is only set for document windows.

X11:

- QApplication
	Made the '-inputstyle' command line option override the ~/.qt/qtrc
	setting.
	Fixed crash when using the QApplication( Display *,...) constructor
	without any settings file in ~/.qt/.
	Fixed bug when passing a Tk Visual* to the QApplication constructor.

- QClipboard
	Fixed race condition in clear().

- QFontDatabase
	Fixed bug that caused some special TTF fonts to display incorrectly.
	Fixed bug where Qt would not find some non-scalable fonts.

- QFontEngine
	Fixed bug that caused incorrect metrics and drawing in some cases
	when a painter scales down very large fonts for display.

- QMotif
	Fixed crash when passing X11 command line parameters.
	Fixed GUI freeze when using the system close menu on a QMotifWidget
	window with some window managers.

- QPainter
	Fixed memory leak when more than 256 GCs are allocated.

- QPrinter
	Allow multiple space-separated options in
	setPrinterSelectionOption().
	Fixed printing to A3 sized paper.
	Fixed printing using certain PFB fonts (e.g. the ones generated from
	TeX).

- QWidget
	Fixed restoration from fullscreen/maximize on non-EWMH supporting
	window managers.
	Do not clear the fullscreen/maximize state if the window manager
	ignores a resize request from Qt.
	Worked around bugs in window placement for the SGI 4Dwm window
	manager.

Embedded:

Makeqpf tool
	Use the same way of finding the font directory as the rest of Qt.

- QVNCServer
	It is now possible to have several different VNC servers active on
	the same machine (and even in the same process).
	Fixed bug connecting a little-endian client to a big-endian server.

- QPainter
	Fixed bug making thick vertical lines one pixel too wide.
	Worked around compiler bug in gcc 3.3.1 and 3.3.3 (but apparently
	not in 3.3.2), causing artifacts when drawing anti-aliased text on
	16-bpp displays in release mode. 

- QWidget
	Avoid creating a paint event in setMask() if the new mask is the
	same as the old.

- QWSManager
	Fixed crash when widget is deleted during a window system mouse
	grab.
	Only move window on left mouse press.

- QWSServer
	Avoid possible race condition in sendPropertyNotifyEvent()
	when client quits.
