
Qt 3.1.2 is a bugfix release. It maintains both forward and backward
compatibility (source and binary) with Qt 3.1.1


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

Some build fixes on different platforms. Many small documentation
fixes.

XFree86 only: Tablet support now also looks for devices called "pen",
not just "stylus" and "eraser".


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

- QAccel
	Allow localization of status bar messages. Try harder to
	distinguish between an accelerator and the identical
	accelerator with Shift in case on of them is currently
	disabled.

- QAccessible
	Send accessibility notification for selection changes in
	menubars and popup menus. Send accessibility
	notifications for QListBox currentItem/selection changes.

- QActionGroup
	Implement visibility for drop-down actiongroups.

- QApplication
	Return focus to the widget that had it before a popup opened
	even if the focus is passed on during the show event handling.
	When the programmer/user explicitly sets the style (either
	with QApplication::setStyle or the -style command line
	option), do not reset the style on settings changes. Creating
	a second QApplication reads the settings again.
	Windows only: Emit aboutToQuit() when the user logs off. Send
	a focusOut event to the focus widget when the user tries to
	switch applications using Alt+Tab. Fixed setting of
	desktop-wide fade and scroll effects.
	Windows95/98/ME: Fixed enter/leave handling. Among other
	benefits this makes tooltips work more reliably.
	X11 only: Various fixes for input methods, e.g. Korean
	'ami'. Some startup performance improvements with
	QSettings. Mark the internal wakeUpGuiThread() pipe with
	FD_CLOEXEC. Call XFilterEvent before the public X11 event
	filters to avoid applications filtering out events that are
	necessary for input methods to operate. Removed old en_US
	locale workaround for Solaris. Close all open popups when 
	clicking on a screen different from the popup's screen. Do not
	force 256 colors on 8-bit display (used to be a workaround for
	a vnc bug).
	Mac only: Popupmenus that are dismissed by clicking outside of their
	bounds will no longer send the event to the widget clicked on (to avoid
	selection changing when canceling a context menu). QContextMenuEvents
	will be sent in the same style as Windows/X11 to make the platforms
	more consistent, additionally mapping of Ctrl+Click to RightButton has
	been added to allow easy context menu handling. Added warnings when a
	Qt application is run outside of an application bundle (in GUI mode)
	this will prevent accidental starving from events. Correct state when a
	modal dialog is shown (to disable the menubar) is used now, and is
	emulated to feel like Carbon applications. Fixed bug so that
	QApplication::processEvents() can be called before
	QApplication::exec(). Window activation will not change when a popup
	menu is displayed. Toolbar toggle button will only toggle the top dock
	in a QMainWindow. European text composition is supported now to take
	advantage of TextInput modules available on Mac OS X. Window activation
	has been improved to allow interleaving windows of different classes
	correctly (to decrease differences between X11/Windows and Mac).

- QBuffer
	IO_Truncate no longer detaches the explicitly shared byte array.

- QButton
	In setPixmap(), avoid laying out again if the new pixmap does
	not change the size. Use QSharedDoubleBuffer only if it is
	enabled (this avoids repainting errors).

- QButtonGroup
	Improve hit testing for cursor navigation.

- QCanvas
	Do not try to double buffer invalid areas.

- QCanvasEllipse
	Windows only: Workaround a Windows limitation that does not
	support 2x2 ellipse rendering without a pen. Do not try to
	double buffer invalid areas.

- QColorDialog
	Allow the setting of all 48 standard colors.

- QComboBox
	Close any popup menus or listboxes when disabling the combobox.
	Fix text alignment when large pixmaps were inserted into the
	combobox.

- QComplexText
	Added correct positioning specs for all of Thai and Lao. Some
	reordering fixes.

- QCursor
	Mac only: Correct interpretation of mask/data of a QCursor so that the
	mask will can be used as documented.

- QDate
	Fixed addYears() for days missing in certain years.

- QDateTimeEdit
	Compute an improved layout for the QDateEdit and QTimeEdit
	components of the QDateTimeEdit (based on the size hints). Set
	the size policy of the QDateTimeEdit to (Minimum, Fixed).
	In time edit: If the display is AM/PM, do not accept 13-24 as
	valid input for the hours. Go to the min/max value when
	stepping down/up goes out of the valid range.

- QDesktopWidget
	Mac only: Fixes to availableGeometry().

- QDialog
	Fixed a visibility issue with setExtension().
	X11 only: Modal dialogs that have no parent set their
	WM_TRANSIENT_FOR hint to the main application widget (not
	root). Do not raise the active modal widget if another one
	gets focus. This used to be an incorrect workaround for a
	now-obsolete problem where CDE would not keep modal dialogs
	above their parents. 
	Do not reposition laid out dialogs that restore their geometry
	in a polish() reimplementation.

- QDict
	Handle zero sized hash tables.

- QDns
	Slightly more reliable now, fixed a memory leak.

- QDockArea
	Fixed resizing of a QDockWindow is no longer affected by
	another closed QDockWindow in the same QDockArea. If a QDockWindow
	has changed its sizeHint layout items use now the new size.

- QDockWindow
	When undocking a window, use the last undocked size if we have
	one.
	X11 only: Make sure the moving frame is drawn on the correct screen.
	Windows only: Fixed some focus issues.

- QDom
	Create entity references for unknown entities.

- QDragManager
	X11 only: Raise cursor decoration. Improved Motif drop support
	to support non-textual data.
	Windows only: Do not send any drag events if we don't have a receiver.
	Windows 2000 only: Ignore illegal requests for error-clipboard
	format when dropping files onto Explorer.

- QEffects
	Less CPU-consuming roll effects.
	X11 only: Disable effects on displays with <16bpp (rather than
	falling back to the scrolling).

- QEventLoop
	Window only: Fixed mutex lock problem. Fixed processEvents()
	with ExcludeUserInput. Fixed QSocketNotifiers not being
	removed when the notifier gets deleted and the event
	loop is blocking.
	Unix only: Fixed a 64 bit problem.
	Mac only: Fixed hasPendingEvents() for non-gui apps.

- QFileDialog
	Fix drag'n'drop for the first click into the listbox. Do not
	auto-complete when saving a file. Enabled drag'n'drop of files
	for all modes. In Directory* mode, do not set the filter to a
	non-existent directory if one is specified.
	Windows only: Fixed icon lookup.
	Win 98/ME only: Make sure getExistingDirectory() doesn't
	modify the current directory.
	Mac only: Encoding fixes.

- QFont
	Win95 only: Make symbol fonts work.
	X11 only: Don't change the Xft enabled/disabled setting
	at runtime. Avoid some X server roundtrips when loading fonts.

- QFontDialog
	Fixed getFont() in case no default font is specified.

- QFrame
	Turn on focus and mouse-over style flags for frame painting.

- QFtp
	If the server does not expect a password (i.e. if you are
	already logged in after you sent the username), do not send
	the password since this might lead to errors.

- QGLWidget
	X11 only: Xft fonts won't work with glXUseXFont() - so do not
	try to use them.
	Win32 only: Fixed text rendering to pixmap issues.
	Mac only: Improved responsiveness when resizing opengl widgets.
	Mac only: Optimized swapping between accelerated and
	non-accelerated case.
	Mac 10.2 only: Improved performance in the case of overlapping
	opengl widgets.

- QHBoxLayout
	Handle direction changes in user code.

- QHeader
	Improved sizeHint() takes the arrows of sorted columns
	into account. Fix redrawing problems when moving header
	sections. Ignore grip-margin in mouse handling for
	non-resizable sections.

- QHttp
	Fixed a memory leak. (With thanks to valgrind's developer for
	this useful tool). Improved head() implementation to actually
	use HEAD requests. Accepts responses from web servers that
	return \n instead of \r\n as line separators. Fixed a rare
	infinite loop issue.

- QIconView:
	Clip item drawing to current container to fix drawing of
	pixmaps with alpha channels.

- QImageIO
	jpegio: Fixed potential buffer overrun.
	gif: Fixed a crash for invalid gif files.

- QInputContext
	X11 only: Try harder to provide the input method with an
	appropriate - and available - fontset.

- QInputDialog
	Fixed size hint when using height-for-width rich text.

- QKeySequence
	Fixed operator==() for some special cases.

- QLabel
	When the the label is disabled, use identical color roles for both
	rich text and plain text.

- QLibrary
	Mac only: Return failure response when a library cannot be opened
	due to missing symbols.

- QLineEdit
	Do not truncate the text when we validateAndSet a text which
	is longer than maxLength, but disallow the input. Respect
	maxLength() in setText(). Make displayText() and selectedText()
	not strip non-breaking spaces anymore. Fixed memory leak when
	adding and deleting line edits. Undo now clears the current
	selection. Undo/redo now works when overwriting the selection.
	Fixed memory leak on constructing/destructing line edits. Give
	line edit ownership of the popup menu returned by the default
	createPopupMenu() implementation.

- QListView 
	Fixed background brush origin when using double buffering. Do
	not resize a stretchable column in widthChanged(). Fixed
	selecting when auto-scrolling. Initialize multi-selection
	anchor. Accept drops outside items when acceptDrops() is true.
	Use anchor correctly in Extended selection mode (also for
	mouseMove). Make right clicking on a selected item not change
	the selection. The AlignHCenter flag of a QCheckListItem now
	behaves like for normal QListViewItems. Speed up opening and
	closing of invisible items. Fixed a memory leak in removeColumn()
	Single selection mode: If the selected item is taken out of the 
	listview, unselect it and emit selectionChanged(). Fixed
	deselecting in multi-selection modes. Right release outside an
	item in a listview no longer clears the selection if
	ControlButton is set.

- QListViewItem
	Invalidate column sorting in moveToJustAfter().

- QLocalFs
	The network protocol for local file systems sets sets the
	right permissions for the QUrlInfo objects if you do a
	QUrlOperator::listChildren().

- QMainWindow
	Fixed orientation handler calls.

- QMap
	Fixed conversion from std::map.

- QMenuBar
	Mac only: Fix for destruction of menu bars.
	Mac only: Use process name instead of argv.

- QObject
	Always emit the destroyed() signal, even when signals are
	blocked.

- QPaintDevice
	Mac only: Fixed raster op. for bitBlt.

- QPainter
	X11 only: Fix for rotated rectangles. Fixed drawPolygon() with
	winding being false.
	Mac only: drawText() fixes.
	Mac only: Fix for drawPie().

- QPicture
	Warn about and catch save operations on still active devices.

- QPixmap
	Made grabWidget() more robust. 
	X11 only: Fixed a bug in grabWindow(), fixes in 
	convertFromImage() for MonoOnly.

- QPointArray
	The makeArc() function is now inclusive in respect of the start and
	end points.

- QPopupMenu
	If there is a custom QWhatsThis installed for the whole menu
	but no whatsThis set for the item, use the custom QWhatsThis
	to get the help text. Improved size for multi-column popups.
	Mac only: Improved scrollable popups
	Mac only: Fix handling of popupmenu dismissing mouse presses.

- QPrintDialog
	Fix reentrancy issues when reading printer dialog settings.
	Windows only: Handle lack of default printers more
	gracefully.

- QPrinter
	Windows only: Fix reentrancy issues and make sure that all
	handles are updated correctly. Improved bottom and right
	margin calculation. Fixed some problems with image printing.
	Mac only: Support for high resolution printing. Support 1-bit
	masking for pixmaps.

- QProcess
	If the process's file descriptor is closed for stdout or
	stderr, but the line in the buffer does not end with a \n or
	\r\n, it is still possible to read this data using readLine().
	Windows only: Make it safe to call qApp->processEvents() in a
	slot connected to QProcess::readyReadStdout(). Fixed start()
	with no arguments. Use a non-blocking file descriptor for
	writes to stdin. Avoid leaking of handles.

- QPSPrinter
	Fixed codec for Korean PostScript fonts (ksc5601.1987-0, not
	the listbox. Do not auto-complete when saving a
	fileeucKR). Fixed memory leak.

- QRichText
	Improved Asian line breaking: Avoid breaking before
	punctuation and closing braces and after opening braces. Fixed
	a freed memory access problem with floating items on
	destruction. When copying rich application/x-qrichtext, include
	format information for the initial characters until the first
	complete span. Make text="color" attributes in qt and body
	tags work again.

- QScrollView
	Restored the Qt 3 default sizeHint() that depends on the
	scroll view's content, restricted within a 'sane' range (this
	has no impact on most child classes, which already reimplement
	sizeHint()).

- QSemaphore
	Fixed race condition in operator-=().
	Unix only: A bit more robust.

- QSettings
	Implement scoping for file-based settings (Unix and
	Ini-modes). Support storing and reading null strings. Other
	fixes.
	X11 only: Fixed rehash issues when using multiple screens.
	Windows and Mac: Completed Ini mode.

- QSocket
	If the read retruns 0, safely assume that the peer closed the
	connection. Fixed readyRead sometimes not being
	emitted. Fixed a select bug when the other end terminates
	the connection. Some 64 bit fixes.

- QSound
	Mac only: Implemented stop().

- QSplitter
	Make sizes() return 0 for collapsed widgets.

- QSqlDriver
	All drivers: Fixed crashes when accessing out of bound
	fields. Clear the openError() flag when opening a connection
	successfully.
	MySQL only: Make use of mysql_use_result() in forward-only mode.
	TDS only: Return NULL QVariants for NULL fields.
	ODBC only: Do not require the SERVER keyword to be in a
	connection string. Fix Unicode issues with MS Access. Allow 
	MS Access people to create a connection string without 
	creating a DSN entry first.

- QSqlQuery
	Real values in queries containing placeholders were in some
	cases incorrectly replaced in emulated prepared queries.
	Added support for forward only queries in MySQL.

- QStatusBar
	Make sure QStatusBar updates the minimum height when a child
	widget triggers a relayout (e.g. from size/font/etc. changes).

- QString
	Safer QString->std::string conversion (handles null-string
	case). Fixed 64-bit issue in toLong() and toULong(). Make
	prepend(), append() and operator+=() work with a QByteArray
	argument that is not 0-terminated. Since this
	fix is done in inline functions, you must recompile your
	application to benefit from it. Make QString(const
	QByteArray&) respect the array's size where a codec for
	C strings is defined. Performance improvements for lower() 
	and upper(). Fix toDouble() when string contains trailing
	whitespace.

- QSvgDevice
	No background for Bezier curves. Fixed omission of font-family
	attribute in SVG generator. Fixed bounding rect mapping.

- QStyle (and subclasses)
	Usable size for subcontrols for small scrollbars. Fixed MDI
	document window titlebar clipping.
	XP style: Support non-default group boxes. Corrected tab
	widget border drawing. More compliant dock window
	appearance. Fixed translations for QCheckTableItem and
	QComboTableItem.
	Windows style: Use the highlighted text color role for arrows
	in menus. Allow drawing of list view expand controls without
	branches.
	SGI style: Use correct background brush on pushbuttons with
	popdown arrows.
	Mac style (Mac only): Comboboxes will now be smaller (and closer to
	Aqua Style suggested sizes). Expansion widgets (in a listview) will
    now draw in the correct background color to allow non-white listviews.

- QSpinBox
	Stop spinning when users press a button other than the
	left one. Support Key_Enter in addition to Key_Return as the
	documentation always stated.

- QTabBar
	Let arrow buttons react correctly on style changes.

- QTabDialog
	Fix reverse layout for right to left languages.

- QTable
	Catch hideColumn() on tables with too few columns. Fixed an
	endless recursion when swapping header sections. Fixed SingleRow
	selection when using the vertical header. Emit the
	sizeChange() signal when resizing a table header section with
	a double click. Fixed set*MovingEnabled() when the selection
	mode is NoSelection. Fix selection drawing for focusStyle ==
	FollowFocus. Fixed a memory leak.

- QTableItem
	Use virtual text() method for calculations instead of accessing the
	data member directly. Do not crash when destroying a table item that
	is not in a table.

- QTextCodec:
	Fixed a bug in the Unicode -> jisx0208 conversion table.

- QTextEdit
	Made setFormat() much faster when undo/redo is
	disabled. Fixed double deletion crash when clearing a document
	with floating custom items. AccelOverride events with Shift
	pressed now work the same as for a normal key press.
	LogText mode: Allow spaces in the font color tag. Fixed
	background redraw issue. Stop scrollbar from disappearing
	due to laying out the document incorrectly.

- QThread
	Unix only: Do not rely on PTHREAD_MUTEX_INITIALIZER and
	PTHREAD_COND_INITIALIZER. Fixed timeout calculation in
	sleep().

- QTimeEdit
	Typing in input for the first time now overwrites the existing
	value.

- QToolButton
	Fixed width calculation for multiline text.

- QTooltip
	Try hard to avoid tooltips for widgets in inactive
	windows. Use screen geometry rather than available geometry
	for positioning. Avoid the mouse cursor covering part of the
	tooltip.

- QTranslator
	Notify main windows when installing an empty translator.

- QUrlOperator
	Make setNameFilter() work with FTP.

- QValueVector
	Fix operator==() to work as expected if the two vectors do not have
	the same size.

- QVariant
	Fixed canCast() for Bool -> String and ByteArray -> String conversion. 
	Fixed operator==() for maps. Fixed the asDouble() function to
	detach first before a conversion is done. After streaming into
	a QVariant isNull() now returns false.

- QWaitCondition
	Unix only: Make sure the mutex is destroyed after it is
	unlocked.

- QWhatsThis
	Use screen geometry rather than available geometry
	for positioning.

- QWidget
	In adjustSize(), process LayoutHint events for all widgets,
	not only this widget. Fixed a visibility issue with
	reparent(). Fixed recursive update of child widgets with
	background origin not being WidgetOrigin. Fixed isEnabledTo().
	Windows only: Fixed mapFromGlobal() / mapToGlobal() for
	widgets that are not visible.
	X11 only: Set the WM_CLIENT_LEADER and SM_CLIENT_ID properties
	according to the ICCCM (section 5.1). We accomplish this by
	creating a hidden toplevel window to act as the client leader,
	and all toplevel widgets will use this window as the client
	leader. Fixed calling show() on minimized windows. Fixes to
	grabWindow() for platforms that support different color depths
	on one display.
	Windows only: Handle frameGeometry() changes when users change
	the titlebar font.
	Mac only: Reparent fixes so that visiblity of a toplevel window will be
	retained as well as to avoid painting errors when reparented onto a
	different window. Fixed painting errors when a widget is interactively
	moved off screen. showNormal() will now toggle correctly when a window
    is minimized, additionally toggling between
    showMaximized()/showNormal() will operate as expected. Qt will now try
    to prevent placing a window partially offscreen. This will not
    over-ride explicit window positioning, but it will correct default
    placement.

- QWidgetStack
	Make removeWidget() safe when there are several widgets
	with the same id.

- QWorkspace
	If the active window is clicked on, transfer focus to
	the child. Restore focus to old subcontrol when changing the
	active MDI window. Make sure a MDI window is not resized below
	a child widget's minimum size. Do not allow resizing windows
	when we have an active popup window. Another fix to the
	windowActivated() signal. Fixed resize handling for fixed-size
	windows.

- QXmlSimpleReader
	Fixed a memory leak for incremental parsing.


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

- Qt Designer
	Some small usability improvements and crash fixes. Fixed
	editing properties of multiple selected widgets for custom
	widgets. Fixed some problems with pixmaps, when using a pixmap
	function. Allow entering ':' in the class name in the
	form settings dialog (for namespaces). Do not show deleted
	toolbars in the object explorer. Fixed inserting widgets into
	toolbars. Fixed displaying nested widget stacks in the object
	explorer. Added an option to enable auto saving. Fixed some
	issues with auto-indent in the C++ editor plugin. Fixed
	problems with slots which have namespaces in their function
	arguments. Do not save invalid pixmaps. whatsThis properties
	can now be edited with the richtext editor.

- Qt Assistant
	Fixed crash when printing to file was cancelled. Fixed
	mimesource settings when a link is opened in a new window.
	Added missing translator. Fixed reloading pages when the
	font was changed. Added accelerator for exiting Assistant.
	Full text search now supports Unicode. Search accepts special
	characters like '_'. Added option for disabling the first run
	initialization. Now it is possible to open a link or new
	window directly from the sidebar.

- moc
	Make 'moc -p foo bar/baz.h' generates #include "foo/baz.h"
	instead of #include "foo/bar/baz.h". Also avoid redundant "./"
	at the beginning. Accept identifiers trailing the function
	signature to allows sneaking in compiler specific attributes
	via a macro.

- qmake
    Qmake will no longer put the version number on plugins. These are not a
    necessary part of the filename. A parser bug got into qmake causing
    (right hand side) functions from being evaluated properly, additionally
    the argument parser has been improved to allow functions calling
    functions. Qmake now has support for ProjectBuilder 2.1, it will no
    longer respect OBJECTS_DIR in ProjectBuilder (as this exposed a bug in
    ProjectBuilder itself). It will automatically detected qt-mt (when
    linking against Qt) so "CONFIG += thread" is not necessary, however
    this will not turn on Q_THREAD_SUPPORT. A new test operator has been
    added 'equals()' to allow testing for equality to a variable. In
    'project mode' qmake will now detect TRANSLATIONS files automatically.

- uic
	Some small fixes in code generation.

****************************************************************************
*                              Extensions                                  *
****************************************************************************

- Netscape Plugin
	The Netscape Plugin is supported again, now on both Netscape 4.x and
	current versions based on the Mozilla code.

- ActiveQt
	Activate socket notifiers and process config requests even if
	Qt does not own the event loop.

