Qt 4.1.1 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)
        Better handling of preprocessor statements in combination with
        multi line comments.
	Fixed problem where moc would generate meta information for
	invalid signals/slots.

Configure / Compilation
        Fix build of dumpcpp-dependent projects in Visual Studio 6.
        Fixed compilation for solaris-cc-64.
        Respect the -no-sql-mysql flag.
	Fixed compilation with -no-qt3support on Mac OS 10.3
	qmake now places PkgInfo in the "Contents" directory of the
	.app bundle.

Porting (qt3to4)
	Fixed the issue where 'int red' would be translated to
	'Qt::red'.
	Improved handling of macros created by moc.

Qt Designer
	uic3: Prevent generation of invalid font tags
        uic: Fixed bug that caused retranslateUI() to add existing
        items in combo box once again
	Fixed dependency problem where qtDesigner modules would depend
	on a private class.
	Added missing generation of setColumnCount() and setRowCount()
	for QTableWidget.
	Fixed a platform incompatibility when saving icon properties on
	Windows.
	Fixed a crash when breaking the layout in a dock widget.
	Fixed a crash when opening a new .ui file while in "Edit Tab
	Order" mode.
	Fixed a crash when adding a widget to a QDockWidget.
	Improved preview of signal/slot connections.
	Fixed an issue where moving widgets in a form resulted in lost
	signal/slot connections and tab order to get.
	Fixed corruption of shortcut properties in .ui files when
	saving under some locales.
	Fixed preview of QComboBox with item icons.
	Fixed an issue preventing cancellation of 'New resource file'
	if previous resource file was deleted.
	Fixed use of F1 as help shortcut.

Qt Assistant 
	Fixed problem with restoring window geometry on multi screen
	configurations.

Qt Linguist / Internationalization
        Fixed tr() idioms, so that translation actually works.
	Fixed encoding of translated text.

Qt Translation
	Added translation files for Simplified Chinese.
	Fixed a problem with lupdate parsing output from uic.

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

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

- QAbstractItemView
        Fix selections when mouse-tracking is turned on.
	Fixed selection issues after row resizing.
	Fixed focus after pressing enter.

- QAbstractItemModel
        More consistent behavior in drag-and-drop code.

- QAbstractSlider
	Ensure changed-signals are only emitted when the value
	actually changed.

- QAbstractSocket
	Fixed a crash if disconnected during waitForReadyRead().

- QAccessibleWidget 
	Fix an off-by-one navigation error in the accessibility
	support for menu bar and menus.

- QByteArray
	Fixed leftJustified() and rightJustified() when array contains
	\0's.

- QComboBox
	Fixed a crash when setting and deleting the model.
	Fixed a crash when using a QListWidget as the view.

- QCoreApplication
	Fixes race condition during plugin loading.

- QCommonStyle
	Fixed wrong size hint of PM_MenuButtonIndicator.

- QDateTime
	Fixed a regression in fromString().
	Avoid potential hang when paring invalid date formats.

- QDialog
	Fixed an issue where setExtension()/showExtension() didn't
	work in a constrained size mode.

- QDir
        cd() now fails when attempting to cd to a non-directory.

- QDirModel
	Improved stability when appending network drives.
	Improved stability when handling symlinks with relative paths.

- QDockWidget
        Update toggleViewAction() when widget gets hidden with close
        button.

- QFile
        Changed behavior of rename() to fail if a file of the same
        name already exists.

- QFileDialog
        Make sure filter combo box gets enabled when changing from
        Directory to ExistingFile mode.
        Improve filename completion for files with the same name but
        different extension.
        Make sure the selection is updated when modifying the filename
        by removing characters.
        Allow typing in several file names in the file name line edit.
        Improve handling of non-existent windows shares.
        Improve handling of hidden directories.
        Make it possible to create new folder when a folder called
        "New Folder" already exists.
	Improve usability by not changing the filename text when
	directories are selected.
	Improve usability by not autoselecting the first item when
	changing directories.
	Ensure that calling setDirectory() with a path shows the
	directory when the path contains a file name.
	Avoid unnecessary resolving of mount points, leading to
	lockups on Unix.
	Fixed potential crash when selecting an extension filter with
	no matches in current directory.
	Fixed a problem where using selectFilter() didn't update the
	view.

- QFileInfo
	Fixed issue where copying a QFileInfo and calling refresh()
	could result in file info data being cleared.
	Fixed issue where calling readLink() would resolve link
	targets incorrectly.

- QGLWidget
	Switching from full screen mode to normal mode no longer
	results in incorrect window decorations.
	Fixed overline, underline and strikethrough for text drawn
	with renderText().

- QGridLayout 
        Respect specified alignment over default alignment.

- QHeaderView
        Respects dragDistance.
        Respects TextColorRole.
        Fixed painting problems caused by clicking both mouse buttons
        at the same time.
        Fixed painting flaws when using sort indicators.
	Fixed issue where QStyleOptionHeader::End would not be set by
	paintSection.
	Only the left mouse button can now be used to move and resize
	header sections.
	Fixed incorrect header size after swapping header sections.
	Fixed resize mode of header sections after section moves.
	Fixed an assert when changing the selection model.

- QHash / QSet
        Make the operator==() not take the internal order of elements
        into account when comparing.

- QIcon
	Fixed issue where creating QIcons with an invalid path could
	result in a crash.

- Improved handling of focus events when using input methods.

- QInputDialog
	Fixed handling of ampersands in labels.

- QImage
	Fixed drawing of QBitmap's onto a QImage.

- QImageIOHandler
        Made all supported image formats support the Size option.

- QItemSelectionModel
	Fixed an infinite loop in isRowSelected().

- QItemDelegate
        Better handling of QStyleOptionViewItem::Bottom.
        Increased the delegate horizontal margin.

- QLayout
        Warn instead of crash when adding two layouts to a widget.

- QLocale
	Add missing entry for "nb".

- QList
	Fixed a memory leak when repeatedly removing items from the
	end and inserting items in the middle.

- QListView
	Fixed an assert when using QProxyModel as the model.

- QMainWindow
        Handle RTL layout for dockwidgets properly.
        Make dockwidgets remember their sizes after being hidden.
	Improved reliability when saving and restoring state.

- QMenu
	Fixed shortcut handling of already selected submenus.
        Fix setting the window title on torn off menus.
        Fix bug where exec() returned the wrong QAction on some cases.

- QMenuBar
	Improved widget placement in setCornerWidget().

- QMenuItem
	Ensure space for both check mark and icon when using
	QPlastiqueStyle.

- QMYSQLDriver 
        Fix crash when formatValue() is called without connection.

- QMessageBox
        information() now works correctly when calling it after
        returning from QApplication::exec()

- QPaintEngine
	Fixed an out of memory issue when drawing very long lines.
        OpenGL : Make sure the image and pixmap cache is used.
        OpenGL : Faster rect outlining for the most common case.

- QPrintEngine
        Better font underlining/overlining.
        Support PDF font embedding, resulting in smaller PDF files and
        selectable text.
        Made our generated PDFs readable by Ghostscript.
        Support pens that have patterns/pixmaps for PDFs.
	Support landscape mode for PDFs.

- QPixmap
	Fixed issue where save() in some cases would return true on
	failure.

- QProgressBar
        Fix incorrect progress in some cases.

- QPushButton
        Buttons reparented into a dialog parent through the layout are
        now auto-default.

- QRadioButton
	Fixed a potential crash in QRadioButton Qt 3 support
	constructors.

- QSortFilterProxyModel
	Improve stability when adding rows to source model.
	Fixed issue where some nodes would show up as expandable even
	if all it's children had been filtered.
	Fixed a crash when deleting rows.

- QSizeGrip
	Fixed size grip painting when maximizing a QMainWindow in a
	QWorkspace.

- QSvgRenderer
        Better handling of invalid files.

- QSvg
        Improve stroking with pen width 0.
        Fix rectangle filling bug.

- QSyntaxHighlighter
	Fixed missing handling of blocks of text under certain
	conditions.
	Improved interaction with input methods.

- QScrollArea
	Fixed an issue where the scroll area sometimes would not
	resize to compensate for content change.

- QString
	Fixed regression in fromLocal8Bit().

- QTextDocument
        Support span style background-color.
        Fix nested tables in html documents regression.

- QTextLayout
	Added support for soft-hyphens.
        
- QToolButton
        Make popup menus appear on the correct screen.
	Fixed ToolButtonPopupMode when QToolButton has a
	QAction.

- QToolBar
        Combo boxes now appears as submenus in a toolbar extension.
        setIconSize() now works correctly.
	Relative position within toolbars are now kept when saving and
	restoring state.

- QTextBrowser
	Fix missing line break after paragraph.
        
- QTextEdit
        Improve handling of the TITLE tag.
        Fixed navigating links via tab.
        Improved handling of malformed html.
        Fixed rendering for tables with thead/tbody/tfoot elements.
	Improved copy and paste of content with whitespace
	Make undo/redo update the cursor position.
	Fixed lost cursorPositionChanged() signal in read-only mode.
	Fixed memory leak when calling setHtml() repeatedly.
	Significantly improved performance when appending and editing
	text.
	Improved performance when selecting all text.
	Emit copyAvailable() on mouse selection.

- QTableView
        Fixed drawing of selections after moving columns.
        Do not wrap to the top if Page Down is pressed.
        Improve scrolling behavior.
        QTableView now takes ownership of QHeaders set using
        setHorizontalHeader()
	Fixed issue where calling setModel(0) could result in a
	crash.
	
- QTreeView
        Fixed scrolling-related item expand bug.
        Improve scrolling behavior.
        QTreeView now takes ownership of QHeaders set using
        setHorizontalHeader()
        Avoid crash when calling setRowHidden with no model.
	Avoid crash when calling sizeHintForColumn() in some cases.
	Improved performance when adding rows.
	Fixed update of view when changing row heights.
	Fixed a bug where calling setCurrentIndex() did not update the
	view correctly.
	Removed extra emit of the expanded() signal on already
	expanded branches.

- QTreeWidget
	Fixed tristate check item behavior.

- QTabWidget
        Fixed bug that caused missing resize when dynamically adding
        widgets.
	Fixed text positioning in a tab with an icon.

        
- QTemporaryFile
	Fixed issue where calling open() could potentially change the
	file name.

- QTextDocument
        Improved stability when importing incorrectly formed html
        tables.
	Improved stability when importing closing tags without
	corresponding opening tags.
        
- QTextStream
	Ensure valid codec converter state after calling seek(0).
	Fixed issue where readAll() would not work with sequential
	devices.

- QTabBar
        Improve handling of tab removal.

- QUrl
	Improve handling of hostnames containing digits.
        Fix crash when calling hasQueryItem() on QUrl without any
        query items.
	Added support for parsing file names with '[' and ']'
	characters.

- QVariant
        Improve operator==() behavior when comparing different types.
        The QVariant(const char *) constructor is now unavailable when
        QT_NO_CAST_TO_ASCII is set. Otherwise, it uses
        QString::fromAscii to convert the const char * to a Unicode
        QString to prevent loss of information.

- QWidget
        Fix regression in setMask().
	Fixed issue where incorrect minimum size was reported after
	reparenting from a top level widget.
	Fixed return value of normalGeometry() after the widget has
	been maximized.
	Fixed crash on application exit if the widget was created
	before the widget mapper is initialized.

- QXpmHandler
        Fixed handling of non-transparent XPM images.

- XMLInputReader
	Fixed issue where entities in XML files were not
	resolved.

- QXmlSimpleReader
        A significant (approx. 50x) speedup in QXmlSimpleReader when
        parsing documents which contain internal or external entities.

- Q3DataTable
	Drivers not supporting the QuerySize feature would display one
	row of data too little.

- Q3IconView
	Fixed selection appearance.

- Q3TextEdit
        Fixed focus indicator tabbing through tables.
	Fixed coloring when inserting text after use of setColor().

- Q3TabDialog
	Added missing selected() signal

- Q3ListView
	Fixed occasional crashes when deleting items.
	Fixed wrong label after addLabel(QString()).

- Q3ScrollView
	Fixed default focus policy for deriving classes.

- Q3ToolBar
        Q3Action::setOn() now works correctly.
	Adding an action now sets all action properties correctly.

- Q3ActionGroup
        Fix drop down drawing error.

- Q3MainWindow
	Fixed a regression in setUsesIconText().


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

Windows:

- QApplication
	Timers now continue to fire when windows enters a modal event
	loop.

- QAxServer
	Fixed issue where updateRegistry() would report success, even
	though the operation failed.
	Fixed comparison of class attributes.

- QAxWidget
	Support parameters of type short* and char* in signal/slots.

- QClipboard
        Make sure the dataChanged() signal is emitted correctly.

- QColordialog
	Fixed various selection issues in WindowsXP style.

- QDockWidget
        Improve the look of title bar buttons.
        Improved appearance of dock widget title and frame.

- QFileDialog
        Improve handling of path names with special characters.
        Maintain modality chain when showing a native modal inside a
        qt modal.
        Speedup when browsing dirs containing broken shortcuts.

- QHeaderView
	Improved header highlighting in WindowsXP style.

- QInputDialog
	Calling setText() also selects all text to be consistent with
	other platforms.

- QLabel
	Improved appearance when disabled.

- QLineEdit
        Make QLineEdit respect the XP color scheme.

- QOpenGL
	Added workaround for missing OpenGL sample buffers on the
	Mobile Intel 915GM Express Chipset.
	Fixed rendering into a QPixmap.

- QPainter
	Improve Type 1 font rendering.
	Improved performance of font rendering.
	Use the standard fallback fonts for Asian languages.

- QPrinter
	Fixed issue where the orientation for a QPrinter would be
	ignored.
        Fix PCL printer line drawing bug.

- QPrintDialog
	Fix unhandled exception when a print dialog is launched from
	within Visual Studio.

- QPrintEngine
	Ensure correct pageRect() and paperRect() when printer
	resolution is set manually.

- QTableView
	Improved checkbox coloring within selections.

- QUdpSocket
        Better handling when sending to an unbound port.

- QWidget
        Fix setWindowOpacity() flicker.

- QWindowsXPStyle
	Fixed QApplication::setStyle() if called before construction
	of the application object.

- QWorkSpace
        Improve window resizing.
        Improve title bar and button appearance in XP style.
	Improved focus handling.
	Fixed update of child masks on style change.
	Fixed restore action not being enabled on maximize and
	minimize.
	Fixed a potential crash in maximizeWindow().

X11:

	Reintroduced qt_x11_set_global_double_buffer() for binary
	compatibility.
	Improved tablet event handling.

- QApplication
	The KeypadModifier is now set when NumLock is enabled.

- QBitmap
	Fixed text drawing errors under some fontconfig
	settings.

- QLibrary
	isLibrary() now returns true for .a and .so on AIX.

- qmake
	Improved stability when modifying environment variables
	Allow '/' as a path separator on all platforms.

- QPaintEngine
	Fixed issue where filling and stroking ellipses could leave
	pixel gaps.

- QPainter
        Implemented Porter-Duff composition support.
        Fix artifacts when drawing aliased primitives with an alpha
        pen.
        Fixed issue where rotating pixmaps could add a pixel row in
        some cases.
	Fixed drawing of arcs of less than 1 degree.
	Made drawText() honor the Qt::TextWrapAnywhere flag.

- QPrinter
	Fixed cleanup of child processes.

- QPrintDialog
	Fixed problems when using "From page" and "To page" spin
	boxes.
	Made it impossible to choose "OK" when no printers are
	configured.

- QProcess
	Fixed possible deadlock when calling startDetatched().

- QScrollArea
	Catch double click also when size exceeds window system size
	limits.

- QTextEdit
	Fixed an issue where the horizontal scrollbar did not show up.

- QWorkspace
	Fixed missing mouse event propagation to child widgets.

Mac OS X:

	General fixes to the drag and drop support.
	Improved performance when resizing widgets.
	Fixed font issues for input methods with Japanese.
	Fixed issue with pasting Japanese text.
	Correctly set architecture and SDKROOT when creating a Xcode
	project.

- QCursor
        Fix alpha pixmap cursors.

- QDesktopWidget
	Improve stability when changing users.

- QDockWidget 
        Improve dock widget appearance.

- QGroupBox
	More conformant styling.

- QHeaderView
        Fix text truncating issue on headers.

- QLabel
	Fix labels painted incorrectly when using MacMetalStyle.

- QMenu
	Improved menu styling.
	Improved popup appearance.

- QPainter
	Add support for SmoothPixmap transform.

- QPushButton
        Make Mac style obey the icon size set by setIconSize().
	Make sure buttons are not shown as default on inactive
	windows.

- QPrintEngine
	Fixed truncated PDF generation of large documents.

- QSplashScreen
        Fix painting errors when using showMessage().

- QTextEdit
	Fixed focus issues with Japanese input.
	Fixed issue with pasting Unicode text between
	applications.

- QToolBar 
        Improve tool bar appearance.

- QTextFormat
	Fixed a crash when setting a font's pixel size to -1.

- QWorkSpace 
        Improve workspace children appearance.

- Q3TextEdit
	Fixed a crash in paragraphRect() when all content had been
	deleted.

- Q3ListViewItem
	Fixed a infinite loop when editing an item.

Qtopia Core:

	Removed flickering when mouse cursor is above an animation.
	Optimized use of shared memory.
	Optionally use iwmmxt intrinsics to optimize painting.
	Added a simple example on how to calibrate touch screen mouse
	handlers.

- Fonts
	Handle BDF fonts without the PIXEL_SIZE property.
	Added Chinese and Japanese fonts.

- PDF
        Support PDF font embedding.

- qvfb
	Fixed a crash when increasing the display size in the
	configuration dialog.

- QPixmap
	Implement QPixmap::grabWindow().

3rd-party libraries
-------------------

- FreeType
	Fix memory leak.

