summaryrefslogtreecommitdiffstats
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
...
* Doc: More fixes of qdoc-reported doc errorsaavit2012-08-316-11/+9
| | | | | Change-Id: I2dd815c471e56d2c239a63e7c7ad3496af2a585b Reviewed-by: Kim M. Kalland <kim.kalland@nokia.com>
* Doc: Fixes for several doc errorsaavit2012-08-317-21/+24
| | | | | Change-Id: I5be9c8e9ff9c17fae0fbbe468f34439411aca06b Reviewed-by: Kim M. Kalland <kim.kalland@nokia.com>
* Make QGraphicsView respect scrollbar policiesJeremy Lainé2012-08-311-6/+8
| | | | | | | | | | | | | | | | | When calculating the maximum height / width which a QGraphicsView can display, make sure we only take the scrollbars' dimensions into account if their policy is set to Qt::ScrollBarAsNeeded: - if the policy is set to Qt::ScrollBarAlwaysOff, the scrollbar will not be displayed at all - if the policy is set to Qt::ScrollBarAlwaysOn, the scrollbar's dimensions have already been substracted from the available space by QAbstractScrollArea::maximumViewportSize() Task-number: QTBUG-14711 Change-Id: If5d24b41dbe7b089abca2bf61ccbd370d4de79a1 Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
* Force QT_NO_ICONV on win32:!win32-msvc*Lukas Geyer2012-08-311-1/+1
| | | | | | | | | | | | This behaviour was changed in Ide9800f6 to suppress macro redefinition warnings for MSVC, but MinGW has iconv support and therefore configure does not set QT_NO_ICONV, which prevents compilation on win32-g++ as QIconvCodec does not support Windows. Change-Id: Ic3c4ccceb3eaf9542c95b0c27847ca5ab51849b7 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Kai Koehne <kai.koehne@nokia.com>
* Use the right getter for the QScreen::primaryOrientation property.Jason Barron2012-08-311-1/+1
| | | | | Change-Id: I408e4941163cd676133b2e41613162f52b685076 Reviewed-by: Frederik Gladhorn <frederik.gladhorn@nokia.com>
* Fix updating of drag icons.Friedemann Kleint2012-08-312-53/+66
| | | | | | | | | | | | Try to find a target widget that accepts drops; ignore the event if none can be found. Split the handleDrag*() functions to reduce indentation. Add an autotest. Task-number: QTBUG-22987 Change-Id: I516ac5f0c002caaf83c52ac16f821246e565230f Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Fix the name of the arguments of qAtan2 to match std::atan2Thiago Macieira2012-08-312-6/+6
| | | | | | | | | There is no change in functionality, just swapping of the names x and y. The std::atan2 function uses (y, x) in that order, so we should too. Task-number: QTBUG-27090 Change-Id: I7d4597a6c6909f574c517033f5d49fe17b7a7ead Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
* Add missing QT_{BEGIN,END}_NAMESPACESergio Ahumada2012-08-311-0/+4
| | | | | | | Fix src/network/kernel/qnetworkfunctions_wince.h Change-Id: Ia59c1e67f9409abb97fce3fcaa3840e0d77c0978 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Header contains `signals' - use `Q_SIGNALS' instead!Sergio Ahumada2012-08-311-1/+1
| | | | | Change-Id: I5ee1bfd0ce9c98d64b50cc727d414037fafb91c5 Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
* Document the purpose of QDateTimeParser::cachedDay.Mitch Curtis2012-08-311-0/+13
| | | | | | | | | It's useful to know what this member variable is used for, since there is very little documentation for QDateTimeParser, which makes maintenance yucky. Change-Id: I9ecf5aa5ef0b5d778ceb858c323e3bab1ebaa7dc Reviewed-by: Frederik Gladhorn <frederik.gladhorn@nokia.com>
* Doc: Simplify qtbase qdocconfs.Casper van Donderen2012-08-3112-170/+30
| | | | | | | | | | We should be using the global qdocconf for the common variables. This change also allows you to just specify -installdir without using a templatedir. Change-Id: I207d279d9b5199212e896fc5ccab5c212b1896c6 Reviewed-by: Lars Knoll <lars.knoll@nokia.com> Reviewed-by: Frederik Gladhorn <frederik.gladhorn@nokia.com>
* Doc: Fix various errorsaavit2012-08-307-54/+37
| | | | | Change-Id: I07503dd379779148b674ab0f806f6eeac5d7d4b7 Reviewed-by: Kim M. Kalland <kim.kalland@nokia.com>
* Fix QScreen::grabWindow() on Windowsaavit2012-08-301-3/+1
| | | | | | | | | | Finish up 94ac17c2ccbe3b3f3671848afda9430be214f8d5 Task-number: QTBUG-26963 Change-Id: I13f52f0a6cf460d525b53338738aecd4b3cf313c Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
* Fix MinGW-w64 TDM64-GCC 4.6.1 compilationJonathan Liu2012-08-301-5/+28
| | | | | | | | | | | This fixes a regression introduced by f58390e0f495e229d9f2f1301c3a9dec978af9c2 because __MINGW64_VERSION_MAJOR is the same in older releases of shobjidl.h that do not declare the IFileDialogEvents interface. Task-number: QTBUG-24699 Change-Id: I000a5b9baf52363dfdedff2fb29bbe7ab24df5ca Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
* MSVC/OpenGL: Fix warnings about macro redefinition..Friedemann Kleint2012-08-302-16/+0
| | | | | | | | Introduced by fc41ee4c92ce703f3e4374bf493505a1d847a657 . Change-Id: I4c924b0b0a38401ab02c3cc4edb7d78dbd9ef356 Reviewed-by: Sean Harmer <sean.harmer@kdab.com> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
* Doc: Fix misc. documentation errorsaavit2012-08-304-26/+5
| | | | | Change-Id: I9481ed452922ed5ecd159a8f60d7fbcb3683cec1 Reviewed-by: Kim M. Kalland <kim.kalland@nokia.com>
* Avoid a warning from the QNX QPA plugin.James Turner2012-08-301-0/+11
| | | | | | | | | | | | The HDMI display on the Playbook is listed, but (normally) unattached, and hence generates an error if we attempt to register for events. This patch avoids the warning; a future change will actually watch for screens being attached / detached and update the QPlatformScreens and event registration correctly. Change-Id: I5a9cc773648d50f657fe1b3611fd42495ca7e836 Reviewed-by: Sean Harmer <sean.harmer@kdab.com> Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com>
* QSqlQueryModel: suppress insert and remove signals while resettingMark Brand2012-08-302-4/+86
| | | | | | | | | | There is no need to emit signals for inserting and removing rows and columns while resetting the model. Suppress these signals in such a way that subclasses can benefit without worrying about it. Change-Id: I04447c87173be54a7323b97608cdd40ae245b80b Reviewed-by: Andy Shaw <andy.shaw@digia.com> Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* QSqlQueryModel: fix nested beginResetModel/endResetModelMark Brand2012-08-302-10/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Follow-up to 83c9ebbd6692cde99ee692e6549c591100f12545. Consider the case where calls to the reset methods on the same object are nested as in the following sequence: 1. beginResetModel() 2. beginResetModel() 3. endResetModel() 4. endResetModel() In such cases, only the outermost calls, i.e., 1) and 4), should emit signals. After 83c9ebbd6692cde99ee692e6549c591100f12545, 1) and 3) emitted the signals, which is wrong. This is corrected by keeping track of the nesting level. Such sequences can come about when a base class calls the begin/end methods between the calls made by the subclass. QSqlTableModel::select() is an example of this. Test included. Change-Id: Ia62b45cb1abaab00a32bb8357de4a958bcff83e5 Reviewed-by: Andy Shaw <andy.shaw@digia.com> Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* docs: remove \reimp from non-virtual methodsMark Brand2012-08-302-3/+2
| | | | | | | It seems we need \internal in this case. Change-Id: I3f290bb0d22f9f3b5d04d27b13a7ef8961b2dd6c Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* Fix static plugins for classes in namespaces.Friedemann Kleint2012-08-302-7/+8
| | | | | | | | | | | Breakage introduced by 819d0203e6fd9d27dc4c22e8c3cb8b437998f62a . Extend QT_MOC_EXPORT to take the unqualified class name as well for the function names. Change-Id: I736097b564caa37c522d723780663d03341f9032 Reviewed-by: Lars Knoll <lars.knoll@nokia.com> Reviewed-by: Lukas Geyer <lgeyer@gmx.at>
* Ensure that printer orientation is preservedTitta Heikkala2012-08-301-2/+15
| | | | | | | | | | | | | | | | | After setting the printer name the initialization is no longer done for a printer with a name. Instead doReinit() method is called to preserve the orientation (set with setOrientation() method before calling setPrinterName()). Before the orientation was changed back to default when setPrinterName() method was called ignoring the orientation set. Updated also the autotest because the case: taskQTBUG4497_reusePrinterOnDifferentFiles() is no longer expected to fail on Windows. Task-number: QTBUG-26008 Change-Id: Ia6bc9ae14d79a646e61bfc97652f9f5af90738b3 Reviewed-by: Andy Shaw Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
* Logging: Remove mutex for OutputDebugStringKai Koehne2012-08-302-16/+0
| | | | | | | | | | | | OutputDebugString seems indeed to be thread safe, at least according to http://www.unixwiz.net/techtips/outputdebugstring.html . I also didn't manage to run into any deadlocks on Windows 7 ... The comment + code was already there (in qcoreapplication_win.cpp) in the first git commit that imported Qt. Change-Id: I442e22575558958ef21ab8c6b4cc8b03aee906b2 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Fixes possible memory leak in QContiguousCacheFabian Bumberger2012-08-301-2/+4
| | | | | | | | When inserting an item on a position that is already occupied, the destructor of the old item was never invoked. Change-Id: I01dc4ec9f2da5027284eba94e1a9ad36b062a50d Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* QVarLengthArray: C++11-ify insert/erase signaturesMarc Mutz2012-08-302-10/+10
| | | | | | | | | | | | | | | | | | | In C++11, container insert and erase operations take const_iterators instead of iterators. This is a bug fix compared to C++98, where the mere lookup step of a lookup-or-insert operation had to be done using (mutable) iterators, which is particularly worrisome for Qt containers that are implicitly shared, because of the unneeded detach in the positive case. QVarLengthArray is not implicitly shared, but for consistency, the signatures should be changed here, too. The reason this commit contains only the change to QVarLengthArray is that this is by far the easiest container. The implictly shared containers are harder, because detaching invalidates other iterators (more than the sister STL container would). Change-Id: Ib3d98360bfe376b782b9d1283c5fa3555e8a719e Reviewed-by: João Abecasis <joao.abecasis@nokia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* QString::append: add (const QChar*, int len) overloadMarc Mutz2012-08-302-0/+19
| | | | | | | | | | | Both insert and replace have this overload, so one reason to add it to append(), too, is consistency. But I can also make good use of this overload in the the new QStringList::join(QChar) overload, so it's actually useful in its own right. Change-Id: Iccd48f9cb84831399e4db7e3e78eba25c0ced30d Reviewed-by: João Abecasis <joao.abecasis@nokia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Document how to remove a QGraphicsEffect.Richard Moore2012-08-291-1/+2
| | | | | | | You can remove an effect by setting 0, but this wasn't documented. Change-Id: I2d86875d8554cb26b4d88b8ce04b4daa9792c5d5 Reviewed-by: Casper van Donderen <casper.vandonderen@nokia.com>
* Fixed the QTreeView expansion/collpasing when animatedThierry Bastian2012-08-291-2/+6
| | | | | | | | | | | | | | | | | | If you had a QTreeView with expandable items, if you tried to expand and while the animation was still running you'd try to collpase the node, the display would be completely broken: the items below that items would not be visible any more except for a fraction of a second when expanding or collapsing it again. The problem is in the fact that when starting an animation the QTreeView stores the state before animating. And it does that even if an animation is already running. So the stateBeforeAnimation becomes AnimatingState and when the animation finishes, AnimatingState is the state that is restored breaking the painting. Unit test is included. Change-Id: I015212c1ed8962e6df705655099a5660f195caf3 Reviewed-by: Olivier Goffart <ogoffart@woboq.com> Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
* Made QImage::fill(uint pixel) for RGB888 accept QRgb values.Samuel Rødal2012-08-292-4/+4
| | | | | | | | | | | | Previously QImage::fill() for Format_RGB888 expected a BGR value instead of the RGB order defined by QRgb, making it counter intuitive to use related to the 32-bit formats. Fixed the QPixelLayout data for RGB888 and changed the byte order of quint24 based on what the optimized image conversion routines expect. Change-Id: I72926debbc6f5b5cb10b8aa0b2a2a916a04db946 Reviewed-by: Kim M. Kalland <kim.kalland@nokia.com>
* Added OpenGL example and documentation.Samuel Rødal2012-08-291-4/+13
| | | | | Change-Id: I2d9d4e52caf0a39fef9648d8a9e83a0c1328f650 Reviewed-by: Paul Olav Tvete <paul.tvete@nokia.com>
* Ensure child items are updated even if the parent item has no contentAndy Shaw2012-08-291-1/+2
| | | | | | | | | | | | When a parent item had its visiblity toggled, then the child item would not update if the parent item had ItemHasNoContents and ItemClipsChildrenToShape set. This is a common use case in declarative as the root item has ItemHasNoContents set. Task-number: QTBUG-26846 Change-Id: Id6592ebc4ba2caa4331a4a71f7247e40993131b6 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
* Document obsolete functions in QImage to silence qdoc errors.Jason Barron2012-08-291-0/+44
| | | | | Change-Id: I78f3335e5c088641c56d5e682425c7e4b26b7d3e Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
* Fix mistake in docs. Return type should be QSurfaceFormatJason Barron2012-08-291-1/+1
| | | | | | Change-Id: I4f4bf2542bb89b28ee84773507d4a121b134e730 Reviewed-by: Shawn Rutledge <shawn.rutledge@nokia.com> Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
* Add support for explicit TLS 1.1 and 1.2Brendan Long2012-08-295-0/+48
| | | | | | | | | | | | Add SslProtocol enums TlsV1_1 and TlsV1_2 and use the appropriate OpenSSL methods when they're selected (TLSv1_1_client_method, TLSv1_2_client_method, TLSv1_1_server_method and TLSv1_2_server_method). This allows us to explicitly use TLS 1.1 or 1.2. Task-number: QTBUG-26866 Change-Id: I159da548546fa746c20e9e96bc0e5b785e4e761b Reviewed-by: Richard J. Moore <rich@kde.org> Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
* Blackberry: Fix QFileSystemEngine::tempPath()Thomas McGuire2012-08-291-2/+5
| | | | | | | | | | Apparently it depends on the user and/or firmware version on whether TMPDIR or TEMP is set, so try both. Additionally, fall back to /tmp if neither is set, as that seems to be present on all devices. Change-Id: Ia49499729df525276e145d2e35e94559eac45c98 Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
* SSL: remove unneeded volatile qualificationsMarc Mutz2012-08-291-2/+2
| | | | | | | | | | These two variables are only ever accessed under mutex protection, and don't otherwise look like they could be changed by the hardware, so remove the volatile qualifier. Change-Id: I714451bb3e80778b971a901d53fe13e1b01dd84f Reviewed-by: Richard J. Moore <rich@kde.org> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* QNativeWifiEnginePlugin: replace a volatile bool with an atomic intMarc Mutz2012-08-291-4/+4
| | | | | | | | | | | | Since there is non-atomic data that is protected by 'triedResolve', the (outer) read from triedResolve needs to have acquire, and the store needs to have release semantics. The release implied by the mutex unlock is not good enough because it only synchronises-with the locking of the same mutex, which not all threads execute. Change-Id: I90b62c4c0213472ecf2b95a1674a1c6c79dc3786 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
* QDnsLookupRunnable: replace a volatile bool with an atomic intMarc Mutz2012-08-291-4/+4
| | | | | | | | | | | | Since there is non-atomic data that is protected by 'triedResolve', the (outer) read from triedResolve needs to have acquire, and the store needs to have release semantics. The release implied by the mutex unlock is not good enough because it only synchronises-with the locking of the same mutex, which not all threads execute. Change-Id: If46b3ea6ccfdd66ca41ce44d4f45bef2c2c30f72 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
* QHostInfo: replace a volatile bool with an atomic intMarc Mutz2012-08-292-8/+10
| | | | | | | | | | | | A volatile bool read/store is documented on MSVC to have acquire/release semantics, respectively, but that doesn't need to be true for MinGW, so use explicit memory ordering. Apply the same fix to the Unix implementation, too. Change-Id: Ica466cec50beed830aafa4e3384d82f02e1a47e8 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
* Exclude the examples/widgets/doc dir for all but widgets.Frederik Gladhorn2012-08-2910-0/+20
| | | | | | | | There are too many references to the QWidget lib documentation in there. On the other hand this keeps snippets working. Change-Id: I7dd63b7fba1758accea2663f7b427940a8857e32 Reviewed-by: Martin Smith <martin.smith@nokia.com>
* Let qdoc respect excludedirs for examples.Frederik Gladhorn2012-08-293-5/+4
| | | | | Change-Id: I01063b38122aea3615801ff013c8c4a1589327fc Reviewed-by: Martin Smith <martin.smith@nokia.com>
* Don't do path conversions on isEmpty()João Abecasis2012-08-291-2/+1
| | | | | | Change-Id: I4b5eefe74c6f741d1d0870d502798a5e3d0e7a2a Reviewed-by: Prasanth Ullattil <prasanth.ullattil@nokia.com> Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
* Use QString for user-visible stringsJoão Abecasis2012-08-291-1/+1
| | | | | | | | | | | | | | dirPath is kept as the "user visible" path string and is used to construct paths during directory iteration. In QFileSystemEntry (and in Qt, more generally) these are represented with QString. While on Windows QFileSystemEntry::NativePath and QString are one and the same, dirPath does not represent a native path. So, basically, don't do that. Change-Id: I987477cb41b37018634ac43aeda004d254181dc5 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
* Revert "Fix transformation in eglfs backingstore"Jon Trulson2012-08-291-2/+2
| | | | | | | | | | This reverts commit 12491f35bbea7008b15fb0ba0ee7ea5bf6eb6b6c. This change is not needed on eglfs. It causes widget based apps to be rendered with Y inverted. Change-Id: Idb23fa22c438442b81882b64bf84d6aa0662d27b Reviewed-by: Laszlo Agocs <lagocs83@gmail.com>
* wrap the implementation with NO_SETTINGS macroJing Bai2012-08-291-0/+3
| | | | | | | | To fix a compile issue where the header is wrapped but the implementation is not. Change-Id: I9d4e30a251e9f5de71710eb6bf784fb2eb396698 Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* documentation: grammar nitpickMark Brand2012-08-291-3/+3
| | | | | | Change-Id: Ibf16731f04f2c53adeff1b8b1fcc6f1555e3613d Reviewed-by: Andy Shaw <andy.shaw@digia.com> Reviewed-by: Bill King <bill.king@nokia.com>
* Drawing fix for overlay scrollbars on Mac.Christoph Schleifenbaum2012-08-291-1/+1
| | | | | | | | | A wrong check lead to a scrollbar with value 0 never been draw. This is the fix for it. Instead is has to be checked for a length of 0. Change-Id: I0c4e2f7e0014074e3c22554bcbea0ebfc3122952 Reviewed-by: Toby Tomkins <toby.tomkins@nokia.com> Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
* qplatformclipboard.h does not need qplatformdefs.h, so removeThiago Macieira2012-08-291-1/+1
| | | | | | | | | | | | It's not using anything from the qplatformdefs.h header in the public API (and it shouldn't, since qplatformdefs.h can change) nor in inline functions, so there's no need to include it here. Include qglobal.h, which includes qconfig.h, which is where the QT_NO_CLIPBOARD define will be, if anywhere. Change-Id: I913db9aface297e75f91b6346c0dc48439d7d1f6 Reviewed-by: Paul Olav Tvete <paul.tvete@nokia.com>
* Use qualified name for QT_MOC_EXPORT_PLUGIN()Lukas Geyer2012-08-291-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Using non-qualified name for QT_MOC_EXPORT_PLUGIN() breaks template instatiation for QPointer<T>::operator=(T*) in qt_plugin_instance() when the class is embedded a namespace with the same name. namespace Test { class Test : public QObject { Q_OBJECT Q_PLUGIN_METADATA(IID "Test") public: Test(QObject *parent = 0) : QObject(parent) {} }; } // namespace Test In function 'QObject* qt_plugin_instance()': error: expected type-specifier before 'Test' error: no match for 'operator=' in '_instance = (int*)operator new(4u)' note: candidates are: In file included from qtbase\include\QtCore/qpointer.h:1:0, from qtbase\include\QtCore/QtCore:68, from test.cpp:1: qtbase/src/corelib/kernel/qpointer.h:87:25: note: QPointer<T>& QPointer<T>::operator=(T*) [with T = QObject] qtbase/src/corelib/kernel/qpointer.h:87:25: note: no known conversion for argument 1 from 'int*' to 'QObject*' qtbase/src/corelib/kernel/qpointer.h:79:7: note: QPointer<QObject>& QPointer<QObject>::operator=(const QPointer<QObject>&) qtbase/src/corelib/kernel/qpointer.h:79:7: note: no known conversion for argument 1 from 'int*' to 'const QPointer<QObject>&' error: expected ';' before 'Test' Change-Id: Idd3e57ab1c888352ad2a8e8f6efca75d858089df Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Harfbuzz: fix build with NO_OPENTYPE macro definedKonstantin Ritt2012-08-294-2/+7
| | | | | | | | Remove `DEFINES += QT_NO_OPENTYPE` since there are no QT_NO_OPENTYPE guards and I'm not sure defining NO_OPENTYPE won't break some things. Change-Id: I7b36d3f200408aee99db73c56baa9b4a21cb54f9 Reviewed-by: Lars Knoll <lars.knoll@nokia.com>