
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".

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


****************************************************************************
*                               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.

- 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 detect 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.

