Qt 4.1.3 is a bug-fix release. It maintains both forward and backward
compatibility (source and binary) with Qt 4.1.0.

The Qt version 4.1 series is binary compatible with the 4.0.x series.
Applications compiled for 4.0 will continue to run with 4.1.

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

Meta Object Compiler (moc)

Configure / Compilation
	Compile with NAS sound support enabled and no Qt 3 support.
	Fixed some issues with resolving absolute paths when configuring
	Qt using "-prefix".

Porting (qt3to4)
	qt3to4 now adds the needed include directive for
	qPixmapFromMimeFactory().
	Added rule for QDeepCopy.
	Improved handling of files with non-unix line endings.
	
Qt Designer
	Improved usability by letting the Find Icon dialog remember the last
	path visited.
	Fixed preview of DataTime and Date types.
	Generate correct .ui code when saving forms containing Q3DateEdit,
	Q3TimeEdit, Q3ProgressBar and Q3TextBrowser.
	Fixed cursor position when editing text in QListWidget and QComboBox.
	Fixed code generation for custom widgets containing a QComboBox.
	Fixed a bug that prevented the windowTitle property for QDockWidgets
        from being designable.
	Fixed problem where Designer would fail to reflect QTreeWidget column
        changes.
	Fixed potential assert when font size is specified in points.
	Fixed potential crash when breaking the layout of an empty splitter.
	Ensured that Designer saves the used pixmap function.
	Fixed potential crash on 64-bit platforms.
	Ensured that windows show when restarting after a crash.
	Improved geometry saving with multiple monitors.
	Fixed a potential crash when using QVBoxLayout with certain widget
        combinations.
	Fixed a bug where breaking splitter layout would not work after
        reopening the form.

Qt Assistant
	Assistant now sets the proper encoding attribute when saving files,
	solving problems when viewing the page in some browsers.
	Improved window placement on startup.
	Improved performance of first-time keyword loading.

Qt Linguist / Internationalization
	Improved window placement on startup.
	Fixed problem where .ts files for Qt 3 .ui files would be grayed out.

uic
	Fixed code generating bug for forms in namepsaces preventing
        connections from being made.
	Split large generated strings to avoid compiler errors.
	Fixed a bug causing QLabel's font not to be set when using uic3.
	Fixed a dependency issue when .ui files are in a subdirectory.
	Ensured that "uic3 -convert" will convert connections.
	Ensured that uic3 will convert QDataTable and QSqlCursor to Qt3
        support classes.

Demos / Examples
	Fixed a bug in the Tooltips example when moving the cursor from one
	circle to the next.
	Fixed a bug in the FTP example which caused the Download button to be
	incorrectly enabled/disabled.
	Fixed a crash in the FTP example.
	Made it easier to change the Arthur Widget properties in Designer.
	Fixed indexing issues in the Spreadsheet demo.

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

General improvements
--------------------

- Fixed rendering of some GIF images.
- Popup and Tool widgets are now correctly blocked by sibling modal dialogs.
- Group-leader widgets are no longer blocked by non-child modal widgets.
- A parent modal dialog of a child modal dialog can no longer be brought on
  top of the child.
- Made sure modal widgets are modal when opened on a closing parent.
- Fixed expose painting error when closing a child popup.
- Ensured that index widget pointers are maintained when a view is sorted.
- Ensured that closingDown() returns true when the application 
  objects are being destroyed.
- Fixed a potential crash in the PNG image handler.
- Improved stability of PDF font generation when embedding invalid fonts.

- Q3ButtonGroup
	Fixed incorrect behaviour when using setExclusive(false).

- Q3DockWindow
	Fixed placement when showing after being hidden.
	Fixed issue where calling show() on a hidden Q3DockWindow would
        make the dock window overlap the existing one.
		
- Q3GroupBox
	Removed empty row at the bottom.

- Q3TextEdit
	Fixed some input method issues.
	
- Q3TextBrowser
	Fixed a bug that prevented some Unicode HTML files from being
        displayed.

- Q3ToolBar
	Ensured that toolbar separators are painted in all styles.

- Q3IconView
	Fixed a crash when disabling the view while an item is being edited.

- Q3ListView
	Fixed incorrect background color.
	Fixed painting issues with disabled items.
	Added support for tooltips.

- Q3Table
	Fixed a painting bug in the headers that occurred when a cell was
	selected.
	Ensured that checkbox backgrounds are filled.
	Fixed issue where calling selectRow() would not deselect the current
        row in SingleRow selection mode.
	
- Q3Header
	Fixed incorrect vertical text alignment.
	Fixed issue where a header label would be lost after swapping two
        column headers.
	
- Q3UrlOperator
	Fixed listChildren() for the case when setProtocol() hasn't been 
	called.

- Q3WhatsThis
	Fixed handling of dynamic "What's This?" texts.

- Q3WidgetStack
	Fixed a potential crash.
	Fixed a bug preventing arrows from showing up in some cases.

- QAbstractButton
	Ensured that QAbstractButton::setPixmap() also sets the size of the
        pixmap.

- QAbstractItemView
	Fixed QStatusTipEvents for item views.
	Fixed a crash occurring when removing a row in a slot connected to
	selectionChanged().
	Fixed issue where itemChanged() would be emitted twice.
	Fixed issue where input methods would not work on editable itemviews.
	Fixed potential crash.
	Made sure the editor does not open when expanding and collapsing
        branches in QTreeView. Note that this change introduces a system
        dependent delay to differentiate between single and double clicks.
	Made sure setIndexWidget() does not delete an old widget if one is
        already set.
	Fixed a bug causing fetchMore() to behave incorrectly with empty
        models.
	Fixed an issue that sometimes caused tab order to be incorrect after
        editing items.

- QAbstractSocket
	Fixed potential crash when connecting to local sockets on BSD
        systems.

- QCheckBox
	Only emit the stateChanged() signal when the state actually changes.
	Improved performance.

- QColorDialog
	Improved usability.

- QComboBox
	Corrected escape of '&' in items.
	Reset input context when showing the popup.
	Fixed a missing update after model is reset.
	Ensured that TextElideMode is respected.

- QCommonStyle
	Fixed incorrect values returned from sizeHintFromContents() for the
        header sections.

- QCheckBox
	Fixed some painting issues when using CDE or Motif style.

- QDatabase
 	Fixed bool values in prepared queries in the MYSQL driver.
	Fixed use of stored procedures that returns a result set in MySQL
        5.x.
	Fixed queries on tables with a LONG field type in Oracle databases.
	Fixed reading of large blobs from an Interbase database.

- QDir
	Fixed infinite loop in rename() when renaming a directory without
        write permission.

- QDirModel
	Fixed possible assert on broken links.
	Fixed a bug preventing links to "/" on Unix system from working
        correctly.

- QFile
	Corrected error reporting on flush() and close().
	Fixed caching issues causing wrong file sizes to be returned in some
        cases.
	Ensure that write() will fail when trying to write to a full disk.
	
- QFileDialog
	Fixed a bug that allowed selection of multiple files in
	getOpenFileName().
	Ensured that the proper error message is given when deleting a
        directory fails.
	Fixed a bug preventing an update when changing the FileMode.
	Added support to allow several new characters (such as @{},*~^) to be
        used in dialog file filters.
	Ensured that files are hidden when browsing in DirectoryOnly mode.
	
- QFtp
	Fixed crash that occurred if an FTP session got deleted in a slot.

- QGridLayout
	All addWidget() functions now invalidate the layout.
	Fixed minimum size for layouts containing widgets that maintain
        a height-for-width size policy.

- QGroupBox
	Fixed some painting issues appearing on all styles except Windows XP.
	Fixed keyboard handling if checkable.

- QHeaderView
	Fixed a bug preventing tooltips from being shown.
	Fixed a painting error occurring when the sort indicator was enabled
	and the column width became smaller than the indicator width.
	Fixed a usability issue when resizing small headers in a fixed-width
        QTreeWidget.
	Ensured that the header has the correct size when the font changes.
	Fixed a painting error that occurred when the header was hidden.
	Fixed a painting error that occurred when the user activated the
        context menu while pressing the left mouse key.
	Fixed a bug giving the last section a resize cursor event though it
        cannot be resized.
	Icons in header views now respect the layout direction.
	Added support for setting a pixmap.
	Prevented views from deleting a view it does not own.

- QHttp
	Fixed issue where setProxy() would only work for the first get()
        call.

- QIcon
	Ensured that visible icons on QToolButtons and QMenus are updated
        when the icon of a QAction changes.
	Fixed issue where actualSize() would return a bigger size than the
        requested size.

- QImage
	Fixed writing to a PNG file when the alpha value is premultiplied.
	Fixed a bug where dotsPerMeter was not preserved after a call to
	convertToFormat().
	Handle out of memory conditions gracefully.

- QIODevice
	Fixed return values for Qt 3 support members getch(), putch() and
	ungetch().

- QItemDelegate
	Proper painting in inactive windows.
	Improved hit detection for QTreeWidgetItem checkboxes.

- QItemSelectionModel
	Emit currentChanged() when the current item is deleted.
	Fixed a bug causing the selection to be lost when an item was
        removed.

- QLibrary
	Added support for suffixes before library extensions.

- QLineEdit
	Made sure QT_NO_CLIPBOARD is respected.
	Fixed incorrect background color when disabled.

- QListView
	Fixed setRowHidden().
	Made the decision to showing scrollbars independent of the previous
        scrollbar state.
	Ensured that setting the icon position programatically works as
        intended.

- QLocale
	Fixed a bug causing toString() to return the wrong day of the week in
        some cases.

- QMainWindow
	Fixed a crash when deleting the widget returned by
        QMainWindow::statusBar().
	Fixed a bug causing wrong behavior when removing a QToolBar with
        removeToolBar()
	Fixed layout error when showing the status bar after the main window.
	Fixed incorrect assert in QMainWindowLayout::dockWidgetArea().
	Fixed a bug making it impossible to have a dock widget under two
        others in the same dock widget area.
	Fixed a regression preventing insertToolBar() from inserting a
        toolbar before an existing toolbar.
	Ensured that QDockWidget's maximumWidth() is honored.
	Ensured that window menu shortcuts are available before the window is
        shown.

- QMenu
	Allowed setActiveAction() open a submenu, to be consistent with
        QMenuBar.
	Made it possible for the Alt key to be used to close a context menu.
	Improved navigation behavior when using Home/End.  
	Improved navigation behavior when using up/down arrows on a menu with
        no selected items.
	Fixed crash when clicking on cleared or disabled submenus.
	Ensured that only the currently highlighted submenu is visible.

- QMenuBar
	Improved calculation of sizeHint().
	Fixed a bug causing menu items after a spacer item to always appear
	in the extension menu.
	Changed activateItemAt() to behave more like its behavior in Qt 3.

- QMotifStyle
	Draw QSlider tick marks.
	Fixed a bug preventing the focus frame background from being cleared.

- QMovie
	Improved frame delay calculations.

- QObject
	Fixed a crash when calling disconnect() on the last connection.

- QPainter
	Optimized drawing of dotted lines.
	Fixed potential assert after calling setClipping(true).

- QPainter
	Fixed a bug causing contains(QPoint) to return the wrong result in some
        cases.
	Fixed some painting issues with drawArc().
	Improved performance of drawLine() and drawEllipse().

- QPen
	Fixed a bug that caused the wrong dash patterns to be drawn when
        changing styles.

- QPicture
	Fixed a DPI issue when drawing into a QLabel.
	Made sure that the bounding rectangle is updated for all drawing
        operations.
	Improved stability when handling complex scenes.
	Made sure SVG files saved by QPicture include namespace bindings in
        the SVG tag.

- QPlastiqueStyle
	Improved usability in QSlider by making the hit rectangle for mouse
	clicks wider.
	Fixed animation of indeterminate progress bars.
	Ensured that lines are drawn for the hierarchical relationships in
        QTreeWidgets.

- QPrinter
	Optimized the size of PDF documents containing the same picture in
	several places.
	Ensured that systems with high resolution are correctly handled.
	Fixed a bug preventing the setup() function from displaying the print
        dialog.
	Improved positioning of tiled pixmaps.

- QPrintDialog
	Fixed a crash that occurred when opening a page setup dialog on a PDF
        printer.

- QPushButton
	Made sure that flat push buttons paint their contents.
	
- QProcess
	Ensured that the exit status is reset after a sub-process crash.
	Fixed a bug causing the system to lock on X11 after calling
        startDetached() 65536 times.
	Enabled QProcess to be used outside the GUI thread.

- QScrollArea
	Fixed problem where focusing the next child in a scroll area would
        make the top-left part of the child scroll out of view.

- QSettings
	Made it possible to use the "Default" registry entry on Windows.

- QSortFilterProxyModel
	Fixed a crash that occurred when deleting rows.
	Improved stability by checking the model index for validity.

- QStandardItemModel
	Made sure that the column count is updated after calling
        removeColumn().

- QSplashScreen
	Made sure the font set with setFont() is actually used.

- QSqlRelationalTableModel
	Fixed a bug where inserting using the OnManualSubmit edit strategy
        failed in some cases.
	Fixed removeColumn() for columns that contain relations.

- QSqlTableModel
	Made the OnFieldChange edit strategy behave like OnRowChange when
        inserting rows.

- QStackedLayout
	Fixed a bug causing a focus change when calling removeWidget().

- QSvgRenderer
	Fixed rendering into a QPicture.
	Fixed issue where id attributes containing certain characters would
	not render correctly.

- QSplashScreen
	Fixed rendering of pixmaps with alpha channels.

- QSplitter
	Ensured that non-collapsible children are respected.

- QSqlRelationalTableModel
	Fixed handling of mixed-case field names for relations.

- QSqlTableModel
	Fixed a bug preventing the value 'false' from being set on a field of
        boolean type.

- QSyntaxHighlighter
	Fixed a regression.

- QTabBar
	Ensured that currentChanged() is only emitted when the current index
        actually changes.

- QTabWidget
	Ensured that QTabWidget has the same behavior as QStackedWidget when
        inserting a page at index <= currentIndex().

- QTableView
	Fixed selection handling in situations after rows/columns have been
        moved.
	Made decision to show scrollbars independent of the previous
        scrollbar state.
 	Fixed a bug causing mouse clicks to be lost.
	Fixed potential assertion when hiding columns in QTableView.
	Fixed potential crash if indexes are invalid and sections have been
        moved.

- QTabWidget
	Fixed drawing of icons.

- QTextCodec
	Fixed detection of locales with the '@' modifier.

- QTextDocumentLayout
	Made sure the right margin of a QTextBlock is filled with the
        background color.

- QTextEdit
	Fixed a bug causing setPlainText() to emit textChanged() three times.
	Fixed an infinte loop triggered when calling setHtml() inside
	resizeEvent().
	Added support for pasting text with '\r' line feeds.
	Fixed a bug causing tables loaded from HTML to be saved incorrectly.
	Made it possible to delete images using the Backspace key.
	Fixed some issues with justified text in combination with forced line
        breaks.
	Improved stability when setting a null cursor.
	Increased accuracy when moving text by drag and drop.

- QTextBrowser
	Fixed incorrect mouse cursor after right-clicking a link.
	Fixed incorrect mouse cursor in read-only mode.
	Fixed issue where arrow cursor would override custom cursors.
	Fixed potential crash when inserting HTML.
	Improved support for relative links.
	Improved parsing of internal document anchors.

- QTextHtmlParser
	Fixed a bug in the whitespace handling.

- QTreeWidget
 	Fixed a bug that caused itemChanged() to be emitted with a null
        pointer.

- QTreeWidgetItemIterator
	Fixed incorrect assert caused by creating an iterator for an empty
        QTreeWidget.

- QToolBar
	Fixed potential crash when resizing a tool bar with certain types of
	widgets.
	Fixed a bug causing hidden widgets to be shown when the toolbar is
        moved.

- QToolTip
	Enable word breaking in rich-text tool tips.

- QTextStream
	Fixed a bug causing aboutToClose() to be connected to a NULL slot
	after calling unsetDevice().
	Fixed a bug causing read() or readLine() to sometimes return an empty
        string.

- QTreeView
	Fixed some drag and drop issues.
	Fixed a bug where the check state of an item was unchanged after an
	itemClicked() signal was emitted.
	Made decision to show scrollbars independent of the previous
        scrollbar state.
	Fixed a bug causing horizontal scrolling when only vertically
        scrolling should occur.
	Fixed painting of parent-child hierarchy decorations.
	Fixed scrollbar visibility bug.
	Fixed branch indicator painting error in right-to-left mode.
	Fixed painting issues when using reverse layout on hidden headers.
	Fixed a bug preventing the view from being scrolled when column 0 was
        hidden.
	Fixed a bug causing some custom index widgets to be incorrectly
        placed.

- QTreeWidget
	Fixed selection handling in situations after sortItems() has been
        called.

- QUdpSocket
	Fixed issue where unbuffered sockets would continuously emit
        readyRead().

- QUrl
	Fixed behavior of setPort() when -1 is given as the port number.
	setEncodedUrl() now escapes '[' and ']' after the host in tolerant
        mode.
	Made handling of IP encoding more consistent.

- QUtf16Codec
	Fixed bug in covertFromUnicode() on big-endian machines.

- QVariant
	Fixed handling of variants of type "QList<QVariant>".

- QWidget
	Made sure that the application does not close if a widget with a
        visible parent exists.
	Fixed issue where scroll() would scroll child widgets in some cases.
	Fixed painting issues when resizing very large child widgets.
	Fixed a bug preventing setCursor() from working with platform-
	dependent cursors.

- QWorkspace
	Ensured that the correct position is set when maximizing a child with
        the NoBorder hint.
	Fixed MDI title bar text wrapping in Plastique style.
	Fixed some painting issues when resizing child windows.
	Improved accuracy when resizing child windows.

- QXml
	Improved parsing of entities.

Platform-Specific changes
-------------------------

Windows:

- Ensured that the correct default font is used on Windows 2000 and later
  versions. This also fixes issues with international characters on some
  systems.

- Improved painting of rubber bands in Windows XP and Windows style.
  
- Calling showMaximixed() on a QDialog without minimize and maximize buttons
  now behaves properly.

- Improved calculation of bounding rectangles for text.

- Fixed a bug making it possible to open multiple context menus using the 
  context menu key.

- Fixed writing of large files which failed on some systems.

- Optimized painting of ellipses.

- Fixed problem with release version of IDC.

- Fixed window state bug when restoring minimized and maximized windows.

- Fixed painting error on Windows XP style tabs in right-to-left mode.

- Fixed incorrect toolbar button spacing in Windows XP and Windows style.

- Fixed bug that caused QFontInfo::family() to return an empty string.

- Ensured that tool windows are now resizable by default.

- Improved precision for tablet coordinates.

- Improved probing and detection for OpenGL overlay mode.

- Improved the native look and feel of QComboBox.

- Improved appearance of QToolButtons with menus.

- Fixed issue where certain fonts would be incorrectly replaced when
  printing.

- Fixed issue where minimized fixed-size dialogs would not respond to user
  input.

- Fixed issue preventing bitmap fonts from being drawn using a scaled
  painter.

- Made sure that QMAKE_PRE_LINK is respected by qmake on Windows.

- Fixed a bug causing tab widget contents to move when resized in Windows XP
  style.

- Q3FileDialog
	Fixed potential crash in Q3FileDialog when resolving shortcuts.

- QPainter
	Fixed an issue where drawText() on a QPrinter would sometimes be
        clipped away.
	Fixed the behavior of drawEllipse() and drawLine() when used with
        negative coordinates.
	Fixed painting in OpaqueMode.
	Fixed a bug preventing rectangles with negative coordinates from
        being painted correctly by the raster engine.

- QAxBase
	Fixed a bug preventing proper interaction with Excel.

- QAxWidget
	Fixed conversion of short* and char* output parameters.

- QFile
	Made sure that copy() returns false when the copy target already
        exists.

- QFileInfo
	Fixed crash that occurred when calling exists() on a invalid
        shortcut.
	Fixed absolute and canonical paths for files in the root directory.

- QGLWidget
	Fixed a bug causing renderPixmap() to fail on 16-bit color depths.

- QLibrary
	Enabled loading of filenames with non-standard suffixes.

- QLocale
	Added support for 'z' in time format strings.

- QPrinter
	Fixed setPageSize() to correctly update the page and paper
        rectangles.

- QTextBrowser
	Made sure that QTextBrowser does not override
        QApplication::setOverrideCursor().

- QWindowsStyle
	Ensured that the platform specific icons provided by the system are
        used when appropriate.


X11:

- Fixed a bug in QFontDatabase which made isFixedPitch() return true for
  certain non-fixed-pitch fonts, like "Sans Serif".

- Correctly handle the .so file extension on HP/UX IA-64.

- Fixed a crash that could occur when clicking a mouse button while dragging.

- Improve QProcess resource usage by making sure it closes all unused pipes.

- Made QFontEngine honor the autohinter setting from FontConfig. 

- Fixed a potential crash that could occur when drawing a large number of
  polygons/trapezoids.

- QtConfig
	Fixed missing update of window decorations.
	Fixed assert when editing font family substitutions.

- Fixed X Error that occurred when closing applications using the Motif
  style.

- Ensured that -style command line arguments are respected when using
  customized visuals.

- Fixed issues with multiple painters on the same device.

- Improved backward compatibility for XCursors.

- Fixed a bug causing text to be clipped incorrectly when printed.

- Fixed issue where Qt::KeyPadModifier was not being set for non-numeric
  keypad keys.

- Ensured that files written by QSettings will only get user-readable
  permissions by default.

- Ensured that QContextMenuEvent is also delivered when a popup menu is
  already open.

- Added missing support for clipping of bitmaps on non-XRender systems.

- Fixed platform inconsistency with cosmetic pens.

- Fixed a potential crash when starting a QProcess for a non-existant
  process.

- QPainter
	Improved stability of QPainter::setClipPath().
	Fixed painting issues with transformed points drawn with an aliased
        cosmetic pen.

- QFontMetrics
	Fixed a bug in boundingRect().
	Fixed a potential crash in the constructor when it is passed a zero
        paint device.


Mac OS X:

- Fixed issues with pasting of Japanese characters.

- Fixed a bug that made the close button unavailable on modal windows.

- Fixed icon rendering on x86 CPUs.

- Fixed painting of QBitmap into a QPixmap.

- Added the -framework and -F configure options.

- Fixed a bug where the menu bar would not show all items.

- Fixed several drag and drop issues.

- Fixed a bug that caused the font size to change when clicking checkable
  toolbar buttons.

- Fixed a crash that occurred when using a Qt-plugin in a non-Qt application.

- Fixed use of newlines in a QMessageBox.

- Fixed painting of QGroupBox without any text.

- Fixed rendering of Qt::FDiagPattern and Qt::BDiagPattern.

- Fixed building with -no-qt3support.

- Fixed painting of the sort indicator in item view headers.

- Fixed text placement in QGroupBox.

- Fixed icon placement in QPushButton when used with RTL scripts.

- Fixed painting of read-only line edit widgets.

- Fixed animation of the Composition Modes demo.

- Fixed painting of QSpinBoxes smaller than 25 pixels.

- Fixed a bug preventing the page ranges in the print dialog from being set.

- Fixed a bug causing QPrinter::pageSize() to return incorrect sizes.

- Fixed printer resolution setting.

- Improved quality of PDF output.

- Ensured that calling setDirtyRegion() from within dragMoveEvent() updates
  item views correctly.

- Fixed a bug resulting in painting and performance issues for embedded
  QGLWidgets when using MacMetalStyle.

- Fixed a bug that sometimes prevented widgets from being shown.

- Ensured that the correct number of tick marks are painted on sliders.

- Fixed issue where Qt::FramelessWindowHint widgets were not visible in
  Expose.

- Fixed a painting error that occurred when unchecking checkboxes.

- Fixed a bug that caused file dialogs and frameless windows to appear
  outside screen bounds.

- Prevented windows from losing their shadows after using QRubberBand.

- Fixed a potential crash in QPixmap::copy() when given an area outside image
  bounds.

- Improved QToolButton arrow appearance.

- Fixed an issue causing QDateTime::toString(Qt::LocalDate) to return
  incorrect dates.

- Improved performance of QPainter::drawImage().

- Fixed sometimes incorrect drawing with QPainterPath.

- Improved key translation for non-Latin keyboard layouts.

- QGLWidget
	Fixed update issues when QGLWidgets are embedded in a QTabWidget.

- QLibrary
	isLibrary() now supports .dylib libraries with version numbers.

- QWidget
	Fixed a platform inconsistency with isActiveWindow().

- Designer
	Fixed some painting issues with widgets that are not laid out.
	Allow dragging of widgets in Designer when the toolbox is hidden.
        Fixed a bug preventing Designer from being hidden using
        "Command + H".


Qtopia Core:

- Added configure options to build decorations and mouse drivers as plugins.

- Lots of new documentation.

- Added support for 8 and 16 bit screens.

- Fixed a bug that could result in painting errors after setting a new
  decoration with QApplication::qwsSetDocoration().

- New skins for QVfb provided in the X11 package.

- Fixed the transparent corners of the window decoration using the Plastique
  style.

- Removed dependency of shared memory when using QT_NO_QWS_MULTIPROCESS.

- Fixed input method focus change problems.

- Ensured that fonts are searched for using QLibraryInfo::LibrariesPath
  instead of PrefixPath.

- Ensured that the smooth font flag is respected when parsing the 'fontdir'
  file.

- Fixed crash on systems where Helvetica font is not available.

- Reduced memory usage with large fonts.

- Added support for QIODevice::canReadLine().

- Ensured that the Qtopia Core data directory owner is checked against the
  effective user.

- Fixed appearance of the title bar font when the application font has not
  been set.

- Ensured that the correct keycodes are generated for SysRq and PrtSc.

- Added support for transformed screens to QDirectPainter.

- Fixed issues with -title and -geometry command line arguments.

- Improved sound support.
