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


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

- Improved building of Qt on SCO OpenServer 5.0.5, Sun WorkShop 4.2, MIPSpro
7.2 and VC++.NET

- Added support for NIS to the build system

- BiDi on X11: direction key events for right-to-left are configurable
in QSettings via qt/useRtlExtensions. In 3.0.1 they were always turned
on.

- basic table support with XFree86

- unicode on X11: fix keysymbols 0x1000000-0x100ffff

- moc: Generate correct code for N::B which inherits M::B. Don't warn
on throw() specifications.


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

- QAbstractLayout
	Fixed heightToWidth handling.

- QApplication
	X11 only: Stop compressing keys when a non printable key is
	pressed. Fixed handling backtab (shift+tab) on HPUX. Better support
	for currency symbol keys like the Euro key. Also fixed a crash when
	tablet support is set up, but without a device attached.
	Mac only: Adjust the desktop widget size when the display size
	changes.

- QAquaStyle
	Better highlight color detection for the inactive case.

- QCanvas
	Let QCanvasPolygon::areaPoints() return a detached QPointArray
	for safeness.

- QColorDialog
	Save and restore the custom colors via QSettings between Qt
	applications.

- QComboBox
	Layout the popup listbox correctly before showing it. 

- QContextMenuEvent
	X11 only: Both the mouse press event and the context menu
	are always sent now.

- QClipboard
	Mac only: Fixed pasting text from non-Qt applications to Qt
	applications.

- QDataTable	
	Faster key event handling. Fixed crash when cancelling cell
	editing. Fixed autoEdit mode.

- QDesktopWidget
	X11 only: Fixed screenNumber() in Xinerama mode.

- QDateEdit
	Gray out background if the widget is disabled. Fixed small
	static memory leak on exit.

- QDialog
	On show(), send a tab-focus event to the focus widget, so that
	e.g. in lineedits, all the text is selected when becoming visible.
	Windows only: Position dialogs on the same screen as the mouse if
	there is no parent widget that can be used.

- QDockWindow
	Use correct minimum size, taking frame into account. Less
	flicker on (de)activation. undock() doesn't undock the window
	if the TornOff dockarea is disabled.

- QDragObject
	Fixed crash when a drag object is created without parent.
	
- QFileDialog
	Fixed an endless loop.
	Windows only: In getExistingDirectory(), use QFileDialog and not
	the Windows system one when the dirOnly flag is FALSE
	Mac only: Fixed filtering when using the native Mac filedialog.

- QFileInfo
	Windows only: Fixed isWriteable() to check Windows permissions as
	well.

- QFont
	Windows only: Fixed boundingBox() when called in a widget
	constructor. Internal fixes for invalid HDCs. More
	accurate exactMatch(). Fixed GDI resource leak.
	X11 only: Fixed calculating the point size of default font, so
	the default font on systems with only bitmap fonts doesn't look
	ugly. Support for Ukranian fonts.

- QFontDataBase
	Win9x only: Fixed problem with multiple entries.

- QGLWidget
	X11 only: Fixed pixmap rendering with TrueColor visuals
	on X servers with a default PseudoColor visual (introduced in
	3.0.1). Fixed context sharing (introduced in 3.0.1).

- QGroupBox
	More predictable focus handling.

- QHttp
	Enable downloading from non-default websites.

- QIconView
	Initialise internal variable.

- QImage
	Fixed xForm() for bigendian bitmaps. Accept dots in XM
	#define.

- QImageIO
	Correctly limit quality parameter when writing PNG and JPEG
	files.

- QLabel
	Smarter minimumSizeHint() for word-break labels.

- QLayout
	Fixed possible crash when deleting/adding layout items. More
	robust on runtime layout changes.

- QLibrary
	Windows only: Use an internal cache and refcount to avoid loading
	the same library multiple times into the memory on Windows NT.

- QLineEdit
	Ctrl-V now calls the virtual paste() rather than duplicating
	its functionality. Override accelerators for keypad keys.

- QListBox
	Center pixmaps in listbox items properly. Fixed isSelected().

- QListView
	Fix focus rects for QCheckList items that have a Controller as
	a parent. Also, fix drawing of selected checklist boxes so
	that the focus rect doesn't overlap it. Keep checklist items
	working after the user swapped columns. Fixed drawing check
	marks and the vertical branch lines for listview items with
	multiple lines of text. Optimized the clear() function.
	Improved the sorting for the case that entries have the same key.

- QMenuBar
	Fixed painting problems on content changes.
	mostly X11: when the focus widget is unfocused, the menubar
	should stop waiting for an alt release. On X11, when you use
	an alt-key shortcut to switch desktops back and forth, then
	you will get the menubar in altmode when you return to that
	desktop
	Mac only: Fixed keyboard modifiers.

- QMovie
	Animated gifs with a frame delay of 0 work nicer. Initialize
	internal cache variable.

- QMutex
	Made tryLock() work on recursive mutexes.

- QPainter
	Return translated coordinates in pos(). Fixed translation in
	calls to clipRegion(CoordPainter).

- QPopupMenu
	More fixes for the animate and fade effects. Fixed opening of
	menus that was impossible under certain circumstances. Fixed
	painting problems on content changes.

- QPixmap
	Make grabWidget() work with internally double-buffered widgets
	X11 and Mac: Fixed a memory leak.

- QPrinter
	Win32 only: Resolution fix.

- QRichText
	Fixed crash bug when clearing a document. Fixed various layout
	bugs, esp. with HTML tables. Fixed a memory leak. Fixed a
	crash when placing a cursor on a hidden paragraph. Arabic and
	Hebrew fixes. Make moving the cursor to the next word not
	stumble upon multiple whitespaces.

- QScrollBar
	Make sure middle clicking a scrollbar doesn't allow the slider
	to move outside the groove.

- QSettings
	In readEntry(), report 'ok' in all cases.  Make sure the
	default value is returned correctly for bool entries that
	do not exist in the settings files. Both readNumEntry()
	and readDoubleEntry() report a false ok parameter if the
	conversion fails
	win32 only: Fixed default values

- QSgiStyle
	Minor visual improvements.

- QSlider
	Make setting a new size policy in Designer work.

- QSound
	Stop sound playing when distroying a QSound object.
	Windows only: QSound::stop() really stops the sound now.

- QSqlCursor
	Fixed setMode().

- QSqlDriver
	Escape '\' characters in strings. Fix the QOCI8 driver so that
	it compiles with the Oracle9i client libs. Major speedup fix 
	for the QMYSQL3 driver.

- QSqlRecord
	Fixed crash when accessing values of non-existing fields.

- QString
	mid() works safely now for len > length() && len !=
	0xffffffff. Some speed optimizations. Replace non-latin1
	characters with '?' in unicodeToAscii().

- QStyle
	Added a style hint for a blinking text cursor when text is
	selected.

- QStyleFactory
	Windows only: Don't load style plugins for static Qt builds.

- QTable
	Use correct style flags for QCheckTableItem drawing. The
	internal event filter no longer consumes FocusIn/FocusOut,
	meaning those events are accessible for subclasses now. Fixed
	redraw problem with dynamically resized cells. Always return
	the right text for items (fixed a caching problem). Fixed
	emitting valueChanged(). Fixed a redraw problem with multispan
	cells.

- QTextCode
	Support for @euro locales.

- QTextEdit
	The internal event filter no longer consumes FocusIn/FocusOut,
	meaning these events accessible for subclasses now. Override
	accelerators for keypad keys. Reduced memory consumption for
	contents with many paragraphs. Emit selectionChanged() when
	the selected text has been removed. Emitting the linkClicked()
	signal may result in the cursor hovering over a new, valid link
	- check this and set the appropriate cursor shape. Overwrite
	mode fixed. Always emit currentAlignmentChanged() when the
	paragraph alignment changed. Ignore key events which are not
	handled. Fixed right-alignment in BiDi mode. Key_Direction_L/R
	will now affect the whole document for non-richtext content.
	X11 only: Fixed copy on mouse release. Lower impact of an
	XFree memory leak.
	Mac only: Always draw selections extended to the full width of the
	view.

- QTextStream
	Speed optimization for QTextStream::write().

- QToolBar:
	Hint about explicit show() call for child widgets to ensure
	future operability.

- QToolTip
	Fixed wordbreaking when using both rich text and plain text
	tooltips. Fixed placement of tooltips for multi-head and Xinerama
	systems.

- QVariant
	In toDateTime(), allow conversion from QDate.

- QWhatsThis
	X11 only: Fixed positioning on dualhead setups.
	Windows XP only: Improved drawing.

- QWidget
	X11 only: fixed a show() problem that occurred
	after few reparents from and to toplevel.
	Mac only: Fixed showNormal().

- QWindowsStyle
	Minor visual improvements (popupmenu checkitems, listview
	branches).

- QWorkspace
	Obey minimumSizeHint() of document widgets. Do not emit
	windowActivated() for the already active document window.

- QUrlOperator
	Relaxed checks for directories.


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

****************************************************************************
*			      Other					   *
****************************************************************************


****************************************************************************
*		    Qt/Embedded-specific changes		           *
****************************************************************************

****************************************************************************
*		    Qt/Mac-specific changes		           	   *
****************************************************************************

Optimizations and fixes in QPainter and QFont fixed creation and
raising of top level widgets fixed hovering over titlebar problems.
