
Qt 2.2.1 is a maintainance release. It keeps backward binary compatibility
with Qt 2.1 and both forward and backward source compatibility with Qt 2.2.x.

Qt 2.2.0 had a binary compatibility problem with the following:

   bool QRect::contains( const QRect &r, bool proper=FALSE ) const

Qt 2.2.1 corrects this. Programs compiled with 2.1.x now continue
running with 2.2.1. Programs compiled with versions other than 2.2.0
may not run with 2.2.0, so upgrading to 2.2.1 is additionally important.


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

- Various compilation problems on particular platforms fixed

- Many improvments in QThread. More platforms supported
  (e.g. HPUX 11.x), uses native threads on Solaris rather than
  compatibility posix threads

- A few newly discovered memory leaks and free memory reads fixed

- As usual, many minor bugfixes, too small to be mentioned here.


****************************************************************************
*			   Designer					   *
****************************************************************************

- in KDE mode: don't show all KDE widgets in the toolbars, since we do
  not have icons for them (yet). They are accessible through the menu
  structure, though.

- Introduced concept of a global /etc/designerrc and a templatePath
  for the sake of Linux Standard Base (LSB) and the way Linux
  ditributors like to package the Qt Free Edition.

- Support for tab names in a QTabWidget, and page names in a QWizard.

- Support for button IDs in a button group, makes it possible to utilize
  one single slot for all buttons in a group.

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

QClipboard: 	X11 only: fixed occasional crashes, possibly corrupted
		list of provided types and hangups of several seconds under
		certain circumstances.

QFileDialog:	Fixed update when renaming a file to an existing file
		Unix only: Reset error status after attempting to read an
		empty file
		Fixed magical resetting of the "Open" label
		Fixed duplicate entries in the history combobox

QFont:		Fixes for Hewbrew, Arabic and Thai encodings
		Added support for Ukrainian encodings
		X11 only: loading fonts for a locale other than the
		current now possible (allows displaying japanese characters
		in a latin1 application without relying on the existence of
		a unicode font)

QHeader:	removing labels fixed, important for QTable and QListView

QIconView:	drawing problem with missleading font metrices and
		bounding rectangles fixed

QInputDialog,
QMessageBox:	use the main widget's or parent's icon if available

QLayout:	synchronize the behaviour of sublayouts and subwidgets with
		layouts.

QLineEdit: 	Update cursor position if QValidator::fixup() truncates the
		string

QMainWindow:	Fixed calculated minimum size. Sometimes, the minimum width
		of the central widget was disregarded.

QMenuBar:	Sizing fixed for frameless menubars in toolbars in
		Motif-based styles

QMotifPlusStyle: correct drawing of triangular tabs

QMovie:		keep frameImage() during EndOfMovie signal

QDom:		add comments when reading a xml file into the dom

QPrinter:	MS-Windows only: Fixed invalidation when setup dialog was
		cancelled

QSgiStyle:	Small drawing problem with QTabBar fixed.
		Fixed drawing of special prefix in menu items

QSizePolicy:	setHeightForWidth() was broken, works now

QTextCodec:	significant speedups for latin1 conversion

QTextStream:	small speed improvements for readLine()
		Added codec for ukrainian (koi8-u) encoding

QWheelEvent:	Support for the MSH_MOUSEWHEEL extension on MS-Windows 95

QWidget:	X11 only: Fixed possible mouse lock-ups when re-entering
		the event loop on mouse events for widgets of type
		WType_Popup.
		X11 only: set input context when setting the active
		window
		X11 only: when dialogs were closed, the main window looked
		like it	lost focus with some window managers. This has been
		fixed now.

QWidgetStack:	potential flicker issue fixed

QWorkspace: 	normalize minimized children when they get focus
		removed occasional flashing (e.g. when maximizing child
		windows)
		Look and feel adjustments to emulate MS-Windows even
		closer
		Documented that the active window can be 0 if there is no
		active window
		Slightly modifed the button decorations to be more general
		and less KDE2 specific


****************************************************************************
*               Changes that might affect runtime behavior                 *
****************************************************************************

QLayout:

We synchronized the behaviour of sublayouts and subwidgets with
layouts. This shows great effect in the designer, were you usually
operate on container subwidgets in the design phase, but get a
complete layout in the preview mode or the generated code. For
example, the influence of a spacer item on a sublayout's size policy
has been reduced. The modifications may slightly affect the layout of
some dialogs.


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

- Rotated displays & fonts
- QCOP, a simple interprocess messaging system
- Threading support
- Auto-detected mouse
- VGA16 support
- Improved thick lines
- Optimize some double-painting
- Allow setting of custom 8bpp colors: QApplication::qwsSetCustomColors()
- Fix masked widget drawing and clicking
- Fix mouse grabbing for popups


