summaryrefslogtreecommitdiffstats
path: root/src/corelib
Commit message (Collapse)AuthorAgeFilesLines
* QEvent: Don't give DeferredDelete special treatmentBradley T. Hughes2012-06-191-12/+8
| | | | | | | | | | After commit 9b07fd0d5cae6846f0eaccf3dc51bc9e78559a05, Qt no longer keeps the loop-level in QEvent's d-pointer. This means we no longer need to special case this event type in the QEvent copy constructor, assignment operator, and destructor. Change-Id: Iff71713d38303674f4517fdfa169cc448ed41dd4 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Make QUuid compile with QT_NO_QUUID_STRINGJeremy Katz2012-06-181-1/+1
| | | | | | | Task-number: QTBUG-24816 Change-Id: I0cbb0581a1c3abefdde75b7cd45fdafd31640f0d Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
* Improve the code generation by using Q_LIKELY/Q_UNLIKELYKonstantin Ritt2012-06-161-36/+34
| | | | | | | + reorder conditions in getWordBreaks() to make further updates more clear Change-Id: I1ca9adde066c3a48830f310202f7181585fac194 Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Add automatic metatype declaration for QPointer and QWeakPointer.Stephen Kelly2012-06-151-26/+34
| | | | | Change-Id: Ic9a04fa68d0bb14ef07455a6559e59f4b887f38b Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
* Forward-declare QLatin1String tooThiago Macieira2012-06-151-1/+1
| | | | | | | | | | | | qhash.h doesn't include qstring.h and was depending on an indirect inclusion (probably via qpair.h -> qdatastream.h -> qiodevice.h -> qobject.h -> qstring.h, which I've broken). Since it forward-declares QString and QStringRef, let's add QLatin1String too. Change-Id: I179ebb22f761b88423ef13643afa2e5ce91ef6a2 Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* Make qurlinfo private, now that QFtp is private.David Faure2012-06-143-14/+2
| | | | | | Change-Id: I0bb641b397b7087c89009f92d9973e0922dce653 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
* Extend JSON QStandardPaths to support multiple paths per locationJeremy Katz2012-06-141-32/+77
| | | | | | | | | | | | | | | | | Allow a location to be specified as an array of paths. LOCATION: ["first", "second"] The first value is selected for writableLocation(). Define the first entry as an empty string for no writable path. LOCATION: ["", "second"] A single path may be expressed as a string. LOCATION: "only" Change-Id: I897cf40a039ad7cb680bdf643bfa78020e8eb1cb Reviewed-by: Lincoln Ramsay <lincoln.ramsay@nokia.com> Reviewed-by: David Faure <faure@kde.org>
* Add since 5.0 markers to new QCryptographicHash enums/functionsAlbert Astals Cid2012-06-141-4/+5
| | | | | | Change-Id: If367d365510cc7f6bf8f87808f5843c4a41d13e1 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
* disable codecs for asian language when QT_NO_BIG_CODECS definedTasuku Suzuki2012-06-1425-60/+71
| | | | | Change-Id: I45025b13bacc5f63946b02a87c742beff1946c0b Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
* Regenerate the Unicode tablesKonstantin Ritt2012-06-142-7140/+5998
| | | | | Change-Id: I64b93ba8ec85eff5e308d92c57e98e8745c43d66 Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Compile.Morten Sorvig2012-06-141-1/+1
| | | | | | | | | Expressions containing "reinterpret_cast" are not constant expressions according to C++11 rules. Change-Id: Id97729f184983e5bdda180b99cfbe27e2768e09e Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Remove unneeded #includes and namespace wrappersJoão Abecasis2012-06-141-10/+0
| | | | | | | | qvector.cpp no longer contains any code, now that inline functionality has been deferred to QArrayData. Change-Id: I000ef8507e5b8438edd32a762750e4ceaa8aa8ee Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
* Fix QUrl documentation: FullyDecoded and DecodedMode are a pairThiago Macieira2012-06-141-4/+4
| | | | | | | DecodedMode with FullyEncoded makes no sense whatsoever. Change-Id: I182db7aceb38e4e9398138066022912adec9c413 Reviewed-by: David Faure <faure@kde.org>
* Partial fix for WebKit compilation on WindowsSimon Hausmann2012-06-131-9/+0
| | | | | | | | | | | | | | | | | | | | | | qdatetime.h uses std::min/max and on Windows windows.h (or some subsequent header file) may under certain circumstances define min/max as macros. The easiest way to prevent the windows header files from doing that is to define NOMINMAX in the place right before windows.h is included. The other way is to define min and max to min/max themselves to prevent windows.h from doing its evil thing. If a user of Qt (WebKit in this case) chooses the approach of defining min/max to themselves and then includes qdatetime.h, then a subsequent inclusion of windows.h doesn't work because qdatetime.h undefines min/max. We should not enforce the type of workaround needed, therefore this patch removes the workaround from qdatetime.h and requires user code that happens to include windows header files before qdatetime.h (seldom case) to choose either workaround. Change-Id: I7347eec7369491a065e894cff557004e069453d5 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Don't use gcc extension for QByteArrayLiteral neitherLars Knoll2012-06-121-16/+0
| | | | | | | | | This extension doesn't work for e.g. default arguments in function declarations. Change-Id: I32b7afa6e01b6af55fb2409179b4fd94cb04cd8d Reviewed-by: Olivier Goffart <ogoffart@woboq.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Keep the #ifdef for tracking shared pointers in a single functionThiago Macieira2012-06-121-23/+26
| | | | | | | | | | | | | | | If we have it in different functions, then different out-of-line implementations could be selected for each object file, resulting in invalid states. The error I caught was when wrapper.cpp was compiled without tracking and, therefore, did not place a call to internalSafetyCheckAdd. However, it called an out-of-line copy of QtSharedPointer::ExternalRefCountWithCustomDeleter::create, which did set the deleter to remove the safety check. Therefore, keep everything in one function. Change-Id: Ib2c6a606699db49d102704bccdd331ec22a8bd78 Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Simple optimisation for the construction of a QSharedPointerThiago Macieira2012-06-121-9/+3
| | | | | | | | | | Let the constructor initialise the "value" member. In the case of create(), which already initialised "value", simply merge the two functions for more readability. Change-Id: I5638b3d42af3d0f5988f815e0f91d591fa1897a8 Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Use the copy & swap trick to simplify some code in QSharedPointerThiago Macieira2012-06-121-3/+4
| | | | | Change-Id: I5fa2fae19126bea60b9682ed7765681dd6da8c15 Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Now merge the QtShared::ExternalRefCount class into QSharedPointerThiago Macieira2012-06-121-157/+133
| | | | | | | | | Completing the work of the previous commit: we don't need separate classes. Merge into the main class's body. Change-Id: I2f89b34cb6b7f5f9e8d8b809bebd86656f458644 Reviewed-by: Lars Knoll <lars.knoll@nokia.com> Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
* Merge QtSharedPointer::Basic into QtSharedPointer::ExternalRefCountThiago Macieira2012-06-121-54/+27
| | | | | | | | | | The basic class existed for legacy only, when internal reference counting was a goal. Since it isn't anymore, we can remove the distinction and simply merge the two classes. Change-Id: Ib7a1c4158a8d71e71fa6afa447938b8b85ddae87 Reviewed-by: Lars Knoll <lars.knoll@nokia.com> Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
* Merge two internal classes of QSharedPointer and de-virtualise themThiago Macieira2012-06-122-116/+69
| | | | | | | | | | | | | | | | | | | | | The two classes are QtSharedPointer::ExternalRefCountData and ExternalRefCountWithDestroyFn. The split existed because of what Qt 4.5 did before custom deleters existed: the ExternalRefCountData class was a virtual class that contained a destroy() virtual, which was in charge of deleting the data or returning false if it didn't. Turns out that virtual classes was a mistake. This commit de-virtualises them -- we couldn't do it in Qt 4 because of binary compatibility. This saves us one pointer-size in the size of the private, plus the fact that fewer symbols are required (there is no virtual table to be initialised). Additionaly, since a deleter is always stored with the reference count, we don't need the split between the two classes anymore. Change-Id: I1cd9400561dcee089a406a57bd856b1730f18afc Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com> Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Remove "delete value" from QSharedPointerThiago Macieira2012-06-121-26/+8
| | | | | | | | | | | | | | | | | | | | | | | | This allows a QSharedPointer to be used in contexts where the class in question is still forward-declared. This produced a warning in Qt 4 due to the expansion of the template, even if there was no chance of the pointer being deleted there (because the reference count could not drop to zero). Now, not only is the warning removed, but you can actually have the reference count drop to zero in a forward-declared class and it will do the right thing. That's because the deleter function is always recorded from the point of construction and we're sure that it wasn't forward-declared. The unit test for forward-declarations had to be rewritten. The previous version was passing only because the QSharedPointer object was created under the "tracking pointers" mode, which causes a custom deleter to be used in all cases. Task-number: QTBUG-25819 Change-Id: Ife37a4cea4551d94084b49ee03504dd39b8802c1 Reviewed-by: Lars Knoll <lars.knoll@nokia.com> Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
* Remove unused static functions from qlogging.cpp, qstring.cpp.Friedemann Kleint2012-06-122-10/+1
| | | | | Change-Id: I4e9642b5e7fb57ac56511ae06af6ce416d0401ec Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Export qMemSet and qMemCopy properlyThiago Macieira2012-06-122-2/+5
| | | | | | | | | | Commit d839564c94a73e3dd2816a8c2196e612e1f5cb79 was incomplete. It added the Q_CORE_EXPORT macro to qmalloc.cpp, but the qMemSet and qMemCopy function bodies are in qglobal.cpp. Change-Id: I24ee44f04365d8dbdf3f1c0f22b6a72cae9f96bb Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com> Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
* Make sure you can link against more than one static pluginLars Knoll2012-06-121-3/+3
| | | | | | | | The old macro was leading to symbol clashes. Change-Id: I090c511d4090bc96fc6c88537fae7bbe7f143b6c Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Jason McDonald <jason.mcdonald@nokia.com>
* Fix automatic declaration of QSharedPointer<T> metatypes.Stephen Kelly2012-06-121-1/+30
| | | | | | | | | | | | | | | | | | | | | | | QSharedPointer doesn't work like the other automatic template metatype declarations because in some cases T* is declared as a metatype, but we are interested in QSharedPointer<T> (eg QObject*). In other cases, T is declared as a metatype and we are interested in QSharedPointer<T> (eg char). In particular the macro used before this patch was attempting to get the metatype id of the element_type using for example qMetaTypeId<QObject>() instead of qMetaTypeId<QObject*>(), which did not work. Similarly, the variadic macro driven test is no good, because it was testing QSharedPointer<QObject*> instead of QSharedPointer<QObject>, so that is removed. In the end, the only thing we can sensibly automatically declare as metatypes are QSharedPointers to QObject derived types. That is also the type that makes the most sense in a QML context anyway. Change-Id: I13dd40147e2e6bedf38661f898102abaaaa96208 Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
* Windows/ICU: Compile fix.Friedemann Kleint2012-06-121-1/+1
| | | | | | Change-Id: I95c281b0e577a89e4d92dd16fd039ab9e53036f5 Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com> Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Fix compilation of tests/auto/corelib/tools with QT_STRICT_ITERATORSThiago Macieira2012-06-121-1/+1
| | | | | | | | | Most fixes are simple and quite obvious. The ones more involved are the ones to QArrayData, which had probably not been compiled with strict iterators thus far. Change-Id: Ic4ff84c34fd9a04fd686fecaa98149b1c47c9346 Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
* Change internal QDeclarativeData hooks to use signal index rangeKent Hansen2012-06-122-9/+5
| | | | | | | | | | | This also changes the qtdeclarative-specific QMetaObject::activate() overload to not take a methodOffset argument, since it's no longer needed. Change-Id: I4f7ece9f43339f3327419598c032e48fb37b97f0 Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com> Reviewed-by: Michael Brasser <michael.brasser@nokia.com> Reviewed-by: Aaron Kennedy <aaron.kennedy@nokia.com>
* Don't use the gcc extension for QStringLiteral & Q_ARRAY_LITERALLars Knoll2012-06-122-24/+0
| | | | | | | | | | | The extension doesn't work outside of function scopes, so a function declaration such as void foo(const QString &str = QStringLiteral("bar")); would fail on certain gcc versions. Change-Id: I2971301f2859edd3fc81b95dfa5a7c15f29e395c Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* Use a QVector<int> instead of a QSet<int> in itemviews/models.Stephen Kelly2012-06-122-6/+7
| | | | | | | | | | | | | | The QSet<int> is a more expensive container to use and create, so it should be avoided. This is source incompatible compared to earlier Qt 5 for QAbstractItemView subclasses which reimplement dataChanged, but this patch changes nothing compared to already-present SiC compared to Qt 4. Change-Id: Id95391dfd62a0a7f487a8765790b007badefb937 Reviewed-by: Lars Knoll <lars.knoll@nokia.com> Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* Avoid a type name normalization during auto-registration.Jędrzej Nowacki2012-06-121-6/+38
| | | | | | | Containers are auto-registered and use normalized names. Change-Id: Id65c3940401f69436929220e1f6a971135e147ed Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
* update QStandardPaths::standardLocations() documentationJeremy Katz2012-06-111-2/+5
| | | | | | | | | | Remove the reference to PATH, as it may confuse developers who expect a separator between locations. The ordering has been made explicit, including the position of writableLocation() if it can be determined. Note that some implementations may allow the empty string. Change-Id: I134db44dd8bea437824a1d0bf8ed373ec655ab04 Reviewed-by: David Faure <faure@kde.org>
* Use QCollator in QString and remove it from qlocale_icuLars Knoll2012-06-103-33/+4
| | | | | Change-Id: Ic94439943999382f8050668edfb67d3b75ac1df4 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Add proper collation support to QtLars Knoll2012-06-104-0/+712
| | | | | | | | | | | | | | | | QString::localeAwareCompare() has always been a broken way to support collation. The current implementation is not even thread safe. This adds a proper collation class that fixes the problems and finally allows Qt to sort properly according to locale rules. The class is private for now, but is intendent to be made public with 5.1 Change-Id: Idb4e75ff68a398c9813af622af884a90898d2be9 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Refactor the ICU code for QLocaleLars Knoll2012-06-106-238/+99
| | | | | | | | | | | | | | | | | Clean up the ICU code and make it thread-safe. Add a QIcuData structure to QLocalePrivate, that contains ICU specific data. Link against ICU directly, greatly simplifying the code. Also fix a bug in the locale specific case conversion code that would cause it to fail and fall back to the QString code if the output string was larger than the input. Change-Id: Ie67e5ea14fa204ebc5887d7aaeb1a4f3ecaf8697 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Regenerate the Unicode tables with UCD 6.1.0Konstantin Ritt2012-06-102-6417/+8518
| | | | | | | | | | | Task-number: QTBUG-1963 Task-number: QTBUG-5472 Task-number: QTBUG-12144 Task-number: QTBUG-18360 Task-number: QTBUG-23654 Change-Id: Ida09ad657c4b012eca654fcb79608b7cdeb5d60d Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Line Breaking Algorithm: handle the Object Replacement CharacterKonstantin Ritt2012-06-101-30/+31
| | | | | | | | See http://www.unicode.org/reports/tr14/#CB and http://www.unicode.org/reports/tr14/#LB20 for details Change-Id: Ice0aa2b2ce81f6e39839a353240420436eddd754 Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Line Breaking Algorithm: don't break inside numeric expressionsKonstantin Ritt2012-06-101-6/+107
| | | | | Change-Id: I8362663454e4c6604ecb6289ae8009d47c78aeb1 Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Update the Unicode Text Breaking Algorithm implementationKonstantin Ritt2012-06-102-286/+336
| | | | | | | | | | | | | | | | | | to make it conformant to the Unicode 6.1 specifications #14 and #29. The most important changes are: * The implementation has been reworked from scratch to fix all known bugs; * Separate-out the grapheme and the line breaking implementation to eliminate an overhead due to calculating unnecessary breaks; * Stop using deprecated SG class in favor of resolving pairs of surrogates; * A proper support for SMP code points; * Support for extended grapheme clusters (a drop-in replacement for the legacy grapheme clusters as of Unicode 5.1); * The hardcoded tailoring of UBA has been eliminated which breaks the 7 years-old lineBreaking test. Some later, we'll investigate if such a tailoring is still needed. Change-Id: I9f5867b3cec753b4fc120bc5a7e20f9a73d89370 Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Update the qunicodetables generator to deal with UCD 6.1 filesKonstantin Ritt2012-06-102-2/+10
| | | | | Change-Id: If22018ff83cfc6b9c984f689648da038fce11d84 Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Logging: Remove outdated QMessageHandlerKai Koehne2012-06-102-24/+0
| | | | | | | | Commit d9a1c2dff replaced QMessageHandler with QtMessageHandler. However, the old signature was still supported for a grace period. Change-Id: I3141499efdc749460b77de1ceec82f312e904bec Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Add support for the x86intrin.h header on GCC systems.Thiago Macieira2012-06-091-0/+6
| | | | | | | | | | | | This header can be included at any time on x86 systems and is present since the GCC versiosn that also support AVX. It contains intrinsics for instructions that have been present in x86 CPUs since the dawn of time. Change-Id: I9adb066c2c0b56ce8fd5ed7366716038f1254502 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com> Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
* Allow ISODate string without seconds in QTime::fromString().Mitch Curtis2012-06-081-0/+4
| | | | | | | | | According to ISO 8601 (section 4.2.2.3), seconds can be omitted from a string representing time. Task-number: QTBUG-2813 Change-Id: I2578f290845e46a8f49be489f1d7427984ae7f08 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Shift positions for lineBreakTypeKonstantin Ritt2012-06-072-6/+8
| | | | | | | | | | | | | | | | | | | to keep them consistent with positions for all other flags. This changes the internal behavior so that attributes[0].lineBreakType now means "break opportunity at start of the text (before the first character in the string)" and is always assigned with HB_NoBreak to conform rule LB2 (see http://www.unicode.org/reports/tr14/#LB2). The current implementation is based on the sample implementation from tr14 that aimed to be as simple as possible rather than to be optimal. From now, we can use pieces of the attributes array "as is" without having to adjust some positions. Or we can analize some long text by chunks (e.g. paragraph by paragraph) and consume less memory. This introduces a minor overhead that will be eliminated shortly. Change-Id: Ic873a05a9d5203b1c3d5aff2e4445a3f034c4bd2 Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* QTextBoundaryFinder: Consider soft hyphen as line breaking opportunityKonstantin Ritt2012-06-072-5/+11
| | | | | | | SoftHyphen enum value was added to specify such a boundary reason Change-Id: I4248909eed6ab8cbca419de4dcf9fe917620a158 Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Set the whiteSpace flag outside the grapheme and the line breaking loopKonstantin Ritt2012-06-071-7/+21
| | | | | | | | | | | | | | | The white spaces determination doesn't belong to the text breaking algorithm. A proper breaking implementation shouldn't assume spaces are break opportunities (actually, space is allowed to be a grapheme base); However, the whiteSpace flag should never be checked alone while iterating over the text to find the space sequence; the grapheme boundaries should always be taken into account. This covers the SMP code points in UTF-16 text and graphemes that consist of a space followed with one or more grapheme extenders. This introduces a minor overhead that would be eliminated some later. Change-Id: Ic2cc7f485631fd0b436fc256ce112ded5f94fc07 Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Deprecate the use of QWeakPointer to track QObjects.Stephen Kelly2012-06-073-52/+28
| | | | | | | | | | | | | | The main problem with using QWeakPointer to track QObjects is that it has API to convert to QSharedPointer, which is undefined behavior. There is no need to overload the meaning of QWeakPointer with QObject tracking. QPointer is more suitable and should be used instead. Because QPointer is implemented in terms of QWeakPointer, we need to add some overloads which are not deprecated. Change-Id: If0333e4800c9fd277629cc69185c9ca3e4e7e81d Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Expand the 'existing target guard' in generated CMake files.Stephen Kelly2012-06-071-4/+1
| | | | | | | | | | | | | | | | | | | | This way the target will be created and have its properties populated only one time. I tried wrapping the whole file in an 'include guard', but that broke the unit test in tests/auto/cmake/pass1 (and the qt5_use_module function), because the function causes the variables in the Config file to not exist outside of the scope (eg for include directories), and yet, Qt5${Module}_FOUND is still true even when the find_package was previously called in a function, so it is not found and processed again. The change in Qt5CoreConfigExtras.cmake does not need to be guarded as it is only ever included from Qt5CoreConfig. Change-Id: Iaa016563db5eb61294360ac9e003c9c923393d8c Reviewed-by: Brad King <brad.king@kitware.com> Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
* get rid of "uninitialized member" gcc warningKonstantin Ritt2012-06-071-2/+1
| | | | | Change-Id: I486212829ec9309239645222e7f03f36ae4847f0 Reviewed-by: Joerg Bornemann <joerg.bornemann@nokia.com>