summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* QRegularExpression: Fix warnings about deprecated tr()-function.Friedemann Kleint2012-05-211-2/+2
| | | | | Change-Id: I2325bcab9bb80e5507f53887b282a859d0fdb58c Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
* QNetworkReplyHttpImplPrivate::migrateBackendMartin Petersson2012-05-211-29/+2
| | | | | | | | | | | | | If the QNetworkSession change while we are handling a QNetworkRequest we should try to resume this request if possible. In that case we set the offset for where to continue the request. Abort the operation in the http thread. And then post the request again. The offset will then be set using the range header in postRequest() so that the operation is resumed. Task-number: QTBUG-25762 Change-Id: Ib7946905bcc633f8cc3dd7a7ad1ae74579e6bf56 Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
* Cocoa: Fix memory leak in the accessibility code.Morten Johan Sorvig2012-05-211-0/+1
| | | | | | | | QCocoaAccessibleElement takes ownership of the QAccessibleinterface pointer. Delete it in dealloc(). Change-Id: I45a5540b9cf564c639bfa119ff4882008d63fd96 Reviewed-by: Jan-Arve Sæther <jan-arve.saether@nokia.com>
* Fallback to IPv4 when IPv6 is not present.Jonas M. Gastal2012-05-2110-41/+107
| | | | | | | In tests when IPv6 is not present QSKIP IPv6 tests. Task-number: QTBUG-23660 Change-Id: I02abc7322d765a93cbf661e53c76257f03dca73e Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
* Fix QtNetwork compilation for -qconfig largeTasuku Suzuki2012-05-211-0/+12
| | | | | | | Disables two variables completely in QNetworkProxy Change-Id: I76483310b37032c44a25e05fb879de1e9d5282f5 Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
* Don't create QBackingStore for QDesktopWidgetGirish Ramakrishnan2012-05-211-1/+1
| | | | | | | | | | QDesktopWidget doesn't need a backing store since it cannot be painted on. Since the QDesktopWidget is always created, this change avoids any resources created in the QPlatformBackingStore contructor. Change-Id: I33679c98363f9c0d7ea64d9c5e27327679ad92a0 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
* Fix MSVC warnings about struct/class mismatch for dynamic metaobjects.Friedemann Kleint2012-05-211-1/+1
| | | | | Change-Id: I263f25161fa1861ca5e7da9440214fd3ba6e944e Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
* Elaborate QUrl::toString() documentation.Leonard Lee2012-05-211-0/+2
| | | | | Change-Id: If2d726e7b4e8d408312fcb138c3dd146926bfd9a Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Get rid of ambiguous overload for xgetbv.Jan-Arve Saether2012-05-211-2/+2
| | | | | | | | | | | | | | The patch that broke this was assuming the signature of xgetbv was _xgetbv(int). This lead to that there were no exact match for the function resolver, thus the ambiguity. Apparently, the signature of _xgetbv is _xgetbv(unsigned int). Changing the static xgetbv to uint makes the match exact, thus no more ambiguity. Change-Id: I8db95e00a9fef264d7a1f84d02bb929db84e6e5a Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
* qdoc: Write <qmlinheritedby> before <qmlinstantiates>Martin Smith2012-05-211-1/+1
| | | | | | | | | | The order of these two elements has been switched in DITA XML files for QML types. <qmlinheritedby> now comes before <qmlinstantiates>. Change-Id: I1a041c087351734d20629336bbc1c136e04d345a Reviewed-by: Jerome Pasion <jerome.pasion@nokia.com> Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Input: evdevmouse plugin cleanupJohannes Zellner2012-05-212-22/+13
| | | | | | | Remove unused code and variables from the evdevmouse plugin. Change-Id: Id7881bc726b5ffb2fa452e4d4dd082fe70f7ed28 Reviewed-by: Girish Ramakrishnan <girish.1.ramakrishnan@nokia.com>
* Move rarely used QObjectPrivate data to extraDataMartin Jones2012-05-215-40/+49
| | | | | | | | | | | Move runningTimers, eventFilters and objectName data members to ExtraData. Saves 12 bytes per QObject for 95% of use cases (QObjectPrivate goes from 76B -> 64B). Change-Id: I5648c89f65a7be3ea51bd703ee8a9dcff6222c3c Reviewed-by: Olivier Goffart <ogoffart@woboq.com> Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com> Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Change QSslCertificate::toText() to return a QString.Richard Moore2012-05-214-10/+10
| | | | | | | | | | A couple of people reviewing the toText() method (which is new in 5.0) have said that since the string returned is human readable it should be a QString not a QByteArray. This change follows their advice. Change-Id: Ibade9a24870805f7fbe2d299abeb9c6e964f0cf4 Reviewed-by: Girish Ramakrishnan <girish.1.ramakrishnan@nokia.com> Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Add the LICENSE.GPL file to the module referenced from license headersLaszlo Papp2012-05-201-0/+674
| | | | | | Change-Id: I3821a2679883a8a340acacba24b5ea44607d374e Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* -device: c01621ec8 broke device featureGirish Ramakrishnan2012-05-191-0/+2
| | | | | | | result was never returned by resolveDeviceMkspec Change-Id: Ibd2f647e5524cdc9dbf4ea06f7b815f9dcc43212 Reviewed-by: Andy Nichols <andy.nichols@nokia.com>
* Cocoa implementation of QPA menu interface.James Turner2012-05-1922-256/+1423
| | | | | | | | | | | Implement the QPA platform menu interface for Cocoa, including native menubar support and merging with the predefined menus created from the bundled .nib. Cleanup code previously used to maintain the menus, and add a manual test of the menus code. Change-Id: Ia99267ddb6485e18e05c540eb32c5aee6cbb85db Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
* Fixed unused variable warning in anchorlayout example.Mitch Curtis2012-05-191-23/+23
| | | | | Change-Id: I54c6e471531485e33b20b6a6da7f52dab5c3a32a Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* Fixed unused variable warning in chart example.Mitch Curtis2012-05-191-5/+0
| | | | | Change-Id: I0985ff1b1224b29a394ae2a594aeaa783d650ffa Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* QPA menu abstraction, originally based on Morten's workJames Turner2012-05-1916-191/+348
| | | | | | | | | | Create a QPA abstraction for native menus, derived from the Cocoa support in 4.8, but with the expectation to support other platforms too. Update the QtWidget QMenu and QMenuBar code to maintain their QPA equivalents if they exist. Change-Id: Id605de3da8811dc832bf48b35f9107778ad320ff Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
* Fix QtNetwork compilation for -qconfig largeTasuku Suzuki2012-05-195-3/+8
| | | | | Change-Id: I231272e59101e9492a7a1edbacab165b96927877 Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
* Adding QPlatformTheme support for Blackberry devices.Sean Harmer2012-05-197-2/+306
| | | | | | | | Starting off simple with fonts that follow the Playbook guidelines. Change-Id: If772f9a20c5e7566543be6bba47b49cdf3bf1524 Reviewed-by: Kevin Krammer <kevin.krammer@kdab.com> Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
* QNX: Special case z-ordering of the QDesktopWidget windowSean Harmer2012-05-191-1/+11
| | | | | | | | | | | | | | | | | The assumption that window creation order implies correct initial z-ordering is broken when dealing with certain window types. In this commit we special case the QDesktopWidget's window which maybe created after normal application windows yet still need to be layered below them. Without this fix we may accidentaly activate the Desktop window when the blackberry navigator service sends an event to activate the window group. That results in broken focus handling. Change-Id: I42dfde2efb4a0011e37e7bd2e7c5442590606a24 Reviewed-by: Kevin Krammer <kevin.krammer@kdab.com> Reviewed-by: Kevin Ottens <kevin.ottens.qnx@kdab.com> Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
* Compile fix: Do not rely on __cpuidex() for msvc2008Jan-Arve Saether2012-05-191-4/+5
| | | | | | | | | | | | | | | Since its hard to detect if __cpuidex() is actually available at compile time, we'll add a function overload that will be chosen if the intrinsic __cpuidex() is not available. Note that the QtXgetbvHack that was used for _xgetbv did not really work (MS compiler will bail out because of ambiguous overloads if the intrinsic _xgetbv existed). Therefore, we apply the same workaround for _xgetbv. Change-Id: Iee3bf8bc6352ba0861b05d779f1f001d4eb013ff Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* device: Allow specifying shortnames for device mkspecsGirish Ramakrishnan2012-05-191-1/+17
| | | | | | | | | Specifying -device linux-amlogic-8726M-g++ is error prone. With this change, one can specify any substring of the mkspec names under devices/ and the first one will be picked. Change-Id: I7c4522fdaefe4a11e9292f7831075aa766a62c0b Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
* Save configuration feedback into config.summaryGirish Ramakrishnan2012-05-191-101/+115
| | | | | | | | commit d60d98450ada232fc3e8d0c5762a2b7a90beb921 adds the support for unix configure. This commit adds the same for Windows configure. Change-Id: Ibcc604154fd7d0d9c6112ae5459d9bb842daf180 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
* QRegExp: fix usage of uninitialized valuesGiuseppe D'Angelo2012-05-192-3/+1
| | | | | | | | | | | | | | | | | | A (probable) typo was causing the code dealing with anchors to use uninitialized values. This used to work by chance, but was indeed detected by Valgrind f.i. when running tst_qregexp -- the indexIn test on anc11 data reported: ==3015== Conditional jump or move depends on uninitialised value(s) ==3015== at 0x514B4EA: PeppeQt::QRegExpMatchState::testAnchor(int, int, int const*) (qregexp.cpp:1813) [...] ==3015== Uninitialised value was created by a stack allocation ==3015== at 0x514B3EB: PeppeQt::QRegExpMatchState::testAnchor(int, int, int const*) (qregexp.cpp:1803) Fixing the code also makes the aforementioned test to succeed. Change-Id: If7b3e518c1bbfcf12573d2637c33ef2eca27c4d5 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
* Don't use the deprecated translate() method anymoreLars Knoll2012-05-18100-986/+981
| | | | | | | | | | The Encoding argument of QCoreApplication::translate() is deprecated and source code is always assumed to be encoded in Utf8. Simply remove the encoding argument from the generated .ui.h files. Change-Id: If6c40f6df13abd45a0303c863077972c3d1fb685 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Move QIcon metatype handlers back to QtGuiOlivier Goffart2012-05-1831-72/+51
| | | | | | | | | | | QIcon has been moved back from QWidget to QtGui, so the QIcon QVariant and QMetaType handler can now be moved back to QtGui. Also we can give back QIcon its old number, allowing to get rid of some compatibility hack when unstreaming QVariant Change-Id: I439d5c2987c06ecd619f394407850f678164afb8 Reviewed-by: Lars Knoll <lars.knoll@nokia.com> Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
* QIcon: move back to QtGuiOlivier Goffart2012-05-1850-65/+92
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Move the files and tests git mv src/widgets/kernel/qicon* qrc/gui/image/ git mv tests/auto/widgets/kernel/qicon/ tests/auto/gui/image/ - update the include of QIcon git grep -O"sed -i s,QtWidgets/qicon,QtGui/qicon," "QtWidgets/qicon" git grep -O"sed -i s,QtWidgets/QIcon,QtGui/QIcon," "QtWidgets/QIcon" - Adapt QIcon \ingroup documentation sed -i s/QtWidgets/QtGui/ src/gui/images/qicon* - Adapt export macro sed -i s/Q_WIDGETS_EXPORT/Q_GUI_EXPORT/g src/gui/image/qicon* - Update .pri and .pro files - Remove the use of QStyle::alignedRect by copying its content (and adapt slightly - Use QGuiApplication::palette() instead of QApplication::palette() - Add a hook in QGuiApplicationPrivate to call the QStyle::generatedIconPixmap() from QtWidgets Another commit follows to adjust QMetaType::Icon and move the QVariant and QMetaType icon handler back in QtGui Change-Id: I1b63759f892ebc02dfc30f41bb6e76e0b7451182 Reviewed-by: Lars Knoll <lars.knoll@nokia.com> Reviewed-by: Girish Ramakrishnan <girish.1.ramakrishnan@nokia.com>
* Make QCoreApp::translate and related methods use UTF-8Lars Knoll2012-05-186-70/+40
| | | | | | | | | Deprecate the Encoding enum in QCoreApplication and the trUtf8() methods. Qt now assumes that source code is always encoded in UTF-8 to be consistent with QString. Change-Id: Ic62d6947046dee9be0cbd37f2d2f6976b9e572a7 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Fixed unused parameter warning in hellowindow example.Mitch Curtis2012-05-181-0/+2
| | | | | Change-Id: I48ea19b5548a179d8116685fa481c4d1b3804bba Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
* Fixed unused variable warning in diagramscene example.Mitch Curtis2012-05-181-1/+0
| | | | | | Change-Id: I85cc038602e22c140f0564b15ebcb3872750b162 Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com> Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* Use QMetaType API directly instead of going through QVariant.Jędrzej Nowacki2012-05-181-4/+4
| | | | | | Change-Id: I418ccca7cb6e2aa1ba678e24dd36b39ebecadcbe Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Fix backingstore crash with QAxWidgetsMiikka Heikkinen2012-05-182-5/+4
| | | | | | | | | | | | | | The crash was caused by the fact that backingStore parameter is always null (there seems to be no call in codebase that uses anything else but the default values for this function). Using "store" member variable instead of "backingStore" parameter gets rid of the crash, and it is how it was in Qt4 - probably the bug crept in when the paremeter and member variables were renamed in Qt5. Task-number: QTBUG-25803 Change-Id: I4b1ccf540fddd6baa1dffa7f8165272b54caf238 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com> Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
* eglfs: hooks can never be nullGirish Ramakrishnan2012-05-181-8/+4
| | | | | | | | | | e60ca0de6015a8ee16c7be54d0d430252ef525c1 reworked the hooks design. hooks is initialized with a stub pointer if we don't have a platform hook. Change-Id: Ia60facfebd9e4d9c08d237c6d49793efb598130f Reviewed-by: Donald Carr <donald.carr@nokia.com> Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
* eglfs: Add support for cursor hotspotsGirish Ramakrishnan2012-05-184-14/+69
| | | | | | | | | Cursor information is now loaded from cursor.json. Done-with: Johannes Zellner Change-Id: I093cf8e944d495269973e777d0b444ae4ececee1 Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
* qdoc: Report multiple QML property docssMartin Smith2012-05-183-20/+75
| | | | | | | | | | | | | | | | | | | | | | | | | | Documentation authors sometimes make the mistake of documenting a QML property more than once. Here, we refer to cases where a C++ class is documented in a .cpp file as a QML type. In this context one QML property might be documented in two qdoc comments, because the author of the second comment does not search the file for an existing qdoc comment for the property before adding the second one. When DITA XML is generated for this case, the QML type element will contain two <qmlproperty> elements with identical id attributes, which is invalid XML. id attributes must be unique within an XML document. qdoc now reports an error for this case, indicating that the QMLN property has been documented multiple times. This problem can't occur when documenting QML in a .qml file because in .qml files, each comment must appear directly above the thing it applies to. Change-Id: I3a22650a58371fbda2ac7a5429fc036f41750423 Reviewed-by: Martin Smith <martin.smith@nokia.com>
* Add test of automated container metatype declaration.Stephen Kelly2012-05-181-0/+104
| | | | | Change-Id: Iddaf444ead6d9f0147b9b11452ccea46aa712ba3 Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
* Merge two simple version of translate() functions for QT_NO_TRANSLATIONTasuku Suzuki2012-05-181-13/+0
| | | | | | | | the commit 53a420a4d1a2d845603dd85ce9ce345c6819088e merged translate() functions. The simple versions need to be merged too. Change-Id: Ie873483beb8ed0b911ae0568e97b427f4c6b74e3 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
* Make the windows socket handle non inheritableShane Kearns2012-05-181-1/+23
| | | | | | | | | | | | This is for behaviour consistency with Qt on unix, as well as the socket close issues described in the task. Task-number: QTBUG-4465 Change-Id: Ida95650d8a9bd7b5bc3d3926d22e20a6d7eeb30b Reviewed-by: Robin Burchell <robin+qt@viroteck.net> Reviewed-by: Joerg Bornemann <joerg.bornemann@nokia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
* Fix FreeType glyph caching for high resolutionJiang Jiang2012-05-182-21/+25
| | | | | | | | | | | | | | | | | | | | For high resolution or extremely large font sizes, the advance cached here is likely to overflow, since FreeType returns 26.6 fixed point value and we only take signed char here for advance. In those cases we should skip caching because there won't be that many big glyphs after all. Also move the metrics caching block a bit down to take glyph embolden and oblique into account. As a result we also don't need to increase the linearAdvance size because any linearAdvance less than 128 should fit in the old 10.6 fixed format. Change-Id: Ic4920ada49954ce1e0a8673c9f33f30e385e3046 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
* QMetaObject::activate() overload that doesn't require a metaobjectAaron Kennedy2012-05-182-0/+8
| | | | | | | | | This allows QML to emit signals without having to built lazily created metaobjects. Change-Id: If8068fb3cb35d79dc8f3ef79253d9c2eb7c93205 Reviewed-by: Lars Knoll <lars.knoll@nokia.com> Reviewed-by: Kent Hansen <kent.hansen@nokia.com>
* Avoid qobject_castAaron Kennedy2012-05-181-1/+2
| | | | | | | | | This is slightly faster, and also avoids accessing the object's meta object that would cause any lazily created meta objects from being built. Change-Id: I0a78e09511c120bdbe707a1efc91ba480ab7680c Reviewed-by: Lars Knoll <lars.knoll@nokia.com> Reviewed-by: Kent Hansen <kent.hansen@nokia.com>
* Encapsulate the dynamic meta object pointerAaron Kennedy2012-05-185-13/+28
| | | | | | | | | This change allows us to delay creating the actual meta object until it is actually required. Change-Id: I1c4a4226bd82fa606b206dd60322f49b49c32463 Reviewed-by: Kent Hansen <kent.hansen@nokia.com> Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Clean up some QT_HAVE_xxx macros in qcompilerdetection.hThiago Macieira2012-05-182-12/+3
| | | | | | | | | | | | | | We no longer have code doing MMX or 3dNow! on Qt 5, so nothing defines those macros. If nothing defines them, we don't need to undef them. Note that the SSE case is a mislabel: the old "SSE" code on Qt 4 wasn't real SSE, it was MMX with some instructions added at the same time as SSE was added. It's MMX that Windows 64 doesn't support. As for QT_HAVE_ARMV6, this macro is replaced by the sub-arch detection in qprocessordetection.h. Change-Id: Ic3b00e1533e6b4cea32ba7824233de0a5c0fb32b Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
* Blacklist Apple clang 3.0 and previous support for AVXThiago Macieira2012-05-181-1/+22
| | | | | | | | | | | | | | | | | | | | In at least one case found in our testfarm, the compiler runs into an ICE (Internal Compiler Error) compiling the new AVX code. The error it reported was: fatal error: error in backend: Cannot select: 0x7fbf1aa42210: f64 = sint_to_fp 0x7fbf1aa88a10 [ORD=1936] [ID=37] 0x7fbf1aa88a10: i32,ch = CopyFromReg 0x7fbf19538768, 0x7fbf1a9f2610 [ORD=1936] [ID=27] 0x7fbf1a9f2610: i32 = Register %vreg38 [ORD=1936] [ID=9] As is the nature of ICEs, juggling the code around will probably make it pass. But since I have plenty more AVX changes pending, which make the code even more complex, it's also very likely that this issue will happen in other places. For that reason, I choose to blacklist the compiler instead. Change-Id: Ide3201f0cc49c7ceb63e966f6de65a8315cbea4b Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com> Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
* Remove parallel flag for qsemaphore because of flaky nature.Toby Tomkins2012-05-181-1/+1
| | | | | | | | | The CI system is now using the parallel_test flag to run tests in parallel. This test has become flaky, or at least more flaky than it was previously. Mark it to no longer run in parallel. Change-Id: I47bca3be620a8f648a0eb9c9b9f26d2d925efc01 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Remove optimization flag from QMAKE_CFLAGSRomain Pokrzywka2012-05-174-6/+3
| | | | | | | | | -O2 is already the default optimization level for release builds, as defined in gcc-base.conf. In addition, it shouldn't be set for debug builds. Change-Id: Idd7406b0d135d9579676b389050fd6e5776e722c Reviewed-by: Girish Ramakrishnan <girish.1.ramakrishnan@nokia.com>
* Apply compiler platform flags to debug builds as wellRomain Pokrzywka2012-05-174-8/+8
| | | | | | | | | Compiler flags like CPU architecture and FPU should be set on QMAKE_CFLAGS instead of QMAKE_CFLAGS_RELEASE, as the latter only applies to release builds Change-Id: I2e729a9e413934e904fc2810394e118940b8557f Reviewed-by: Girish Ramakrishnan <girish.1.ramakrishnan@nokia.com>
* testlib: added missing newline to error messageRohan McGovern2012-05-171-1/+1
| | | | | Change-Id: I8b205da4d225d99f8505a46d8d78ad302cb2b9e3 Reviewed-by: Toby Tomkins <toby.tomkins@nokia.com>