This document contains a brief list of the most important OS/2-specific changes in the Qt library from release to release. CHANGES Beta 5 (06-12-2009) Improvements: - gui: Added support for the system clipboard. Qt can now exchange plain text, HTML (Mozilla application suite) and bitmaps with other PM applications, as well as all supported MIME data types with other Qt-based applications. - corelib: Use system unicode conversion routines to convert from the system code page to Unicode and back. This makes it unnecessary to specify the system encoding in the LANG environment variable -- Qt will use the system encoding of the current process. - gui: Implemented support for the IME input box (used on DBCS systems) in Qt applications with a known limitation that the input box is always positioned at the lower left corner of the top-level window. - gui: Improved font handling on DBCS systems (patch by komh): * Read national face names from font files instead of always taking the Latin name. * Use the PM_AssociateFont registry key to select a fallback font for missing characters. - gui: Implemented QPixmap::grabWindow() which takes a screenshot of a window. - gui: Steal the Alt key from the PM which prevents the PM system menu to be shown when single Alt is pressed in a Qt application. The system menu may still be called using Alt+Space. Note that this also disables all default shortuts from the system menu (Alt+F7, Alt+F10 etc.) so that they available to Qt applications now. Exceptions are Alt+F4, Ctrl+Esc, Alt+Esc which are not passed to Qt and will function as in regular PM applciations. - general: Binary Qt library builds are made portable: they do not contain hard-coded paths to various Qt components any more and use relative locations whenever possible. See http://svn.netlabs.org/qt4/browser/tags/4.5.1-os2-beta5/doc/src/qt-conf.qdoc for more info. - corelib: Improved the polling QFileSystemWatcher implementation so that it doesn't eat all CPU when there are more than 100 items to watch, like when showing a file open dialog with many files in a directory. - qmake: Improved processing of the project library list (LIBS variable) to avoid appearance of raw library names that require substitution (fixes the debug build of linguist). - qmake: Added support for DEF_FILE_VERSION, DEF_FILE_DESCRIPTION and DEF_FILE_VENDOR project variables that allow to embed the description string into a generated DLL or executable. For compatibility with other platforms, these variables by default are mapped to VERSION, QMAKE_TARGET_PRODUCT + QMAKE_TARGET_DESCRIPTION + QMAKE_TARGET_COPYRIGHT and QMAKE_TARGET_COMPANY, respectively. Fixes: - gui: Table views showed alternate rows in black color instead of light gray. - gui: If some font style (e.g. Bold) does not provide characters for some script (e.g. Cyrillic) while the Normal style does, a different font will be chosen for Bold Cyrillic instead of drawing empty boxes. - corelib: Fixed two issues related to loading text codec plugins from the application's directory. - corelib: Fixed QDir::absoluteFilePath(), midir()/mkpath(), rmdir()/rmpath() that didn't properly handle relative and UNC paths which could cause various path-related failures. - corelib: Properly report root directories of drives to Qt. This makes letters of removable drives always seen by Qt (for example, in the file open dialog) even if the medium isn't currently inserted. - corelib: Fixed unnecessary access to removable drives and a long delay and noice caused by it when showing a file open dialog in Qt applications. Beta 4 (11-11-2009) Improvements: - Added sound support (implemented QSound class). - Added system tray support (QSystemTrayIcon class). This support requires the Extended system tray XCenter plugin to be installed. See the note above on how to compile and install this plugin. - Enabled QPlugin support on OS/2. This in turn enables SVG support for QIcon (which is built as a Qt plugin DLL by default). - Better widget modality support (widgets blocked by modality cannot be activated and moved using the mouse and the title bar anymore). - Added support for 'console' and 'windows' CONFIG options in .pro files. Now, if 'windows' is present, the target executable will have the WINDOWAPI attribute set which effectively makes it a PM application. This, in particular, disables standard input, output and error streams so that when started, the application will not have a console window attached to it. By default, 'console' mode is active unless you perform a release build and the application is linked against the QtGui library ('QT = gui' in .pro), in which case the default is 'windows'. - Improved paint speed in Qt windows which should increase overall graphical UI performance by 10%-20% in Qt4 applications. - Implemented setting window icons for top-level windows (using QWidget::setWindowIcon()). - Added LxLite support to provide compression for executables and DLLs. The compression is controlled by the 'exepack' CONFIG option which is turned on by default for release builds if the LxLite executable is present in PATH during the configure.cmd invocation. The compression may be turned off on a per-project basis by adding a 'CONFIG -= exepack' line to the .pro file. - Improved the section of this README.OS2 file that describes how to properly set the LANG variable to have correct national characters in file names and in window titles of Qt applications. Fixes: - QProcess: The executable's path was not always added to BEGINLIBPATH. - Fixed-size top-level widgets could not be moved. - Application crash after pressing a button in a dialog window that resizes this dialog (for example, makes it bigger to show more information). - Resizing top level windows using the top border broke mouse coordinates so that Qt tought you pressed the mouse button in a different place of the window than where you actually did it. - Events posted with QCoreApplication::postEvent() were only processed upon receiving a next message from the system. This caused funny delays such as controls in a Qt window still indicating the input focus (the dotted rectangle) after the window was deactivated and losing this indication only when the mouse pointer was moved over the window. - Don't replay mouse button press on a push button that is showing a popup menu but instead hide the popup menu and unpress the button to get more native look and feel. - Deactivating the window with a push button showing a popup menu would hide the popup but leave the button pressed. - Fixed incorrect Qt dirty widget region calculation when processing WM_PAINT messages. This fixes a lot of redraw problems (menu items in the main menu bar, text in combo-boxes, various redraw problems in smplayer when switching interfaces and going to/from fullscreen, and similar). Beta 3 (17-10-2009) Improvements: - Added proper font support. All outline (scalable) fonts visible in the Font Palette should be now recognized by Qt. The fonts are hinted and antialiased using the Freetype2 library when drawing text. - System fonts and colors are now used by default for Qt widgets. - configure.cmd now generates the main Makefile to simplify building of Qt. - corelib: QProcess: Implemented child termination detection. - corelib: QProcess: Implemented redirection to another QProcess. - corelib: QProcess now uses native pipes for stream redirection. This fixes various issues like 'Socket operation on non-socket' errors during parent-child communication. - corelib: QProcess: Make sure that the directory containing the executable file is always searched (first) for DLLs needed by this executable. This makes it unnecessary to change the current directory to the executable's directory or add it to LIBPATH before starting the Qt application. - corelib: QProcess can now start applications of different type (e.g. PM applications from text-mode applications) directly. QProcess::startDetached() also works. - qmake: In debug_and_release mode, 'release-(all|clean|distclean|install| uninstall)' and 'debug-(all|clean|distclean|install|uninstall)' make targets are now available. Fixes: - Doing 'make clean' could result into a hang due to CMD.EXE command line length limitation. - corelib: Fixed: QProcess: Lost data during stream redirection. - corelib: QSettings could sometimes distort data when saving it to the registry (by replacing some characters with codes 0x80 and above with '?'). Beta 2 (17-09-2009) Improvements: - Ported the network module (QtNetwork4.dll) and added to the default build. - Added modules sql, svg, xmlpatterns, scripttools, plugins to the default build. - gui: Added recognition of dead keys which makes it possible to type umlauts and other accented characters that require composition. - gui: Implemented standard cursor shapes in Qt applications. Fixes: - qmake: Fixed the trailing slash problem which caused qmake to generate incorrect makefiles and fail to build the Qt library on some platforms. - configure.cmd: Return to the root source tree directory after building qmake. - qmake: Automatically use different link flags when linking qmake with WLINK. - qmake: Recognize TARGET_SHORT that allows to specify a short DLL name (vital for OS/2 which reqires DLL names to be in 8x3 format). - build: Set short DLL names for Qt modules on OS/2 using TARGET_SHORT. - corelib: Various fixes to file system classes that deal with the file name case (which should be ignored on OS/2) and forward and back slashes. - corelib: Fixed: QMutex could let more than one thread access the protected resource. - corelib: Standard stream redirection in QProcess should now work for kLIBC-based child processes. Redirection for all other applications (such as CMD.EXE) will be added later (seems to be a kLIBC bug/feature). - gui: Fixed erroneous QFileDialog behavior (duplicate entires in the list, incomplete contents of the root directory of the current drive). - gui: Fixed: Ctrl+A..Z should generate characters with codes 0x01-0x1F. - gui: Fixed: Close popups when resizing/moving the top level window. - gui: Enabled actual enforcing min/max Qt widget constraints for top-level windows. - gui: Fixed child widget duplication when resizing top level widgets after showing a popup; moving native child widgets should now work correctly. This also fixed a number of redraw problems (for example, drawing the main menu and tool bars in smplayer, moving tool bars around in other applications such as textedit from the demo folder). Beta 1 (29-08-2009) - First public release.