summaryrefslogtreecommitdiffstats
path: root/src/corelib/tools
Commit message (Collapse)AuthorAgeFilesLines
* BlackBerry: The MeasurementSystem port was for BlackBerry OS not QNXmfekari2012-11-212-20/+20
| | | | | | | Change-Id: I87708aad18ebe1c6a08fe89376290be66f9c0577 Reviewed-by: Kevin Krammer <kevin.krammer@kdab.com> Reviewed-by: Sérgio Martins <sergio.martins.qnx@kdab.com> Reviewed-by: Nicolas Arnaud-Cormos <nicolas@kdab.com>
* Update Qlocale data up to CLDR 22.1Konstantin Ritt2012-11-213-3929/+4402
| | | | | Change-Id: Ie6ddfec14cb052e0b89230dc93290ff79488fb25 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Update Qlocale data up to CLDR 2.0.1Konstantin Ritt2012-11-213-3414/+3933
| | | | | Change-Id: I4279fac57436d7009a6d61dab5936b72fd39fc14 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Use likelySubtags to instantiate a locale id from it's short formKonstantin Ritt2012-11-213-764/+1321
| | | | | | | | | ...just like described in http://www.unicode.org/reports/tr35/#Likely_Subtags. This is much more effective than current "guessing" algorithm + makes it possible to instantiate a locale by the script or territory code only. Change-Id: I674f8476e65b01c56960b6e83a1a346df0715274 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [SIC/BIC] QLocale: update enums up to CLRD 1.9.1Konstantin Ritt2012-11-214-1194/+1411
| | | | | | | | | | This patch adds some missing codes (two-letter ones only), removes an outdated ones, and updates some names. The legacy language codes are handled in QLocalePrivate::codeToLanguage() (fortunately, there are only 4 of such codes). Change-Id: Iff50aecd1c762b6399cd151aebb955f341d366c6 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Qnx: Handle the MeasurementSystem value in QNXmfekari2012-11-202-0/+103
| | | | | | | Change-Id: I00837421431d82aa831b785d3effb0920b4541f3 Reviewed-by: Fabian Bumberger <fbumberger@rim.com> Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* exclude 3rdparty from lupdateOswald Buddenhagen2012-11-201-0/+1
| | | | | | Change-Id: I00c569787943a87dda60786b179af1f55a94ea68 Reviewed-by: hjk <qthjk@ovi.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
* QLocale: replace hard-coded default country-for-language mapKonstantin Ritt2012-11-191-283/+283
| | | | | | | | | | ...with a generated one in a way similar to what http://www.unicode.org/reports/tr35/#Likely_Subtags suggests. The supplemental/likelySubtags.xml contains all the required data. This changes some default countries to a most-expected ones. Change-Id: I920a5623601d8661a943e78197d3bcc838191483 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* MinGW: Add missing constants for float control.Friedemann Kleint2012-11-161-0/+9
| | | | | | | | Change-Id: Ibce64ed1ec2809551b0cd334b53b33ed445f90f7 Reviewed-by: Jonathan Liu <net147@gmail.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com> Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com> Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Remove qSort from QCollator docsGiuseppe D'Angelo2012-11-161-1/+1
| | | | | Change-Id: I4523b7e4cd2a7f9e07a39e48e8024ceb0d7eb839 Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
* Remove qSort from QList/QSet docsGiuseppe D'Angelo2012-11-162-3/+3
| | | | | Change-Id: I82ac7cafbda3bb6d54a0ba26903ab11113640067 Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
* Assign correct codes to QLocale::AnyCountry and AnyScriptKonstantin Ritt2012-11-151-2/+2
| | | | | | | as their meaning, in fact, is unknown (or default) country/script. Change-Id: Id75a70d4b33c2092de414f3ac357f6bcb627ba47 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Add a bunch of missed scriptsKonstantin Ritt2012-11-152-1/+101
| | | | | Change-Id: I078bf95cb50c7ef634f9f3133ab9f9d25439e4ef Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Add missing Bodo language introduced in CLDR 1.9.1Konstantin Ritt2012-11-152-9/+28
| | | | | Change-Id: I4feb6ba781299d65ff3bf2717f08a0ac7eae7928 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* QHash: constify some QHashNode membersGiuseppe D'Angelo2012-11-151-6/+6
| | | | | | | | | | They're read-only member variables (key, hash value of the key) set only in the ctors, or a "comparison" member function. All of them can be constified. Change-Id: Ifd9242577213f38439a4f998b678f5b05413ad21 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: João Abecasis <joao@abecasis.name>
* QTBF: Remove StartOfItem/EndOfItem enum valuesKonstantin Ritt2012-11-092-13/+3
| | | | | | | | | Since the behavior of boundaryReasons() method has been changed a lot, remove the StartWord/EndWord enum values to force the affected code be revised; StartOfItem/EndOfItem must be used instead. Change-Id: I3d1d97d2dbe9680d290646d8c3adb5558ca26bd7 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Fix for compiling with clang with c++11.Erik Verbruggen2012-11-071-1/+1
| | | | | | | Change-Id: Ibb1e3290edbb2bdc68bb8164be6c484e49b9c69e Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Improve QByteDataBuffer::read() performance with partial readsAntti Harju2012-11-031-22/+48
| | | | | | | | | | | | | Add a read position variable to eliminate excessive memcpy'ing when reading a partial buffer. Specifically, fix performance issue of reading large files from QNetworkDiskCache in QtWebKit2. Task-number: QTBUG-27522 Change-Id: I21edc909bf9223971b2c3db5f1fa6b89c5b61c5f Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Antti Harju <antti.harju@ixonos.com>
* Fix the gregorian date <-> julian day calculations in QDateJon Severinsson2012-11-022-54/+56
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The old code is just plain wrong for negative julian days. Replaced with plain math from The Calendar FAQ [1], which is correct for all julian days, provided you use mathematical integer division (round to negative infinity) rather than c++11 integer division (round to zero). [1] http://www.tondering.dk/claus/cal/julperiod.php While the conversion code works for up to around JD +/- (2^63/4), we only use an int for the year in the API, so this patch limits minJd() and maxJd() to 1 Jan (2^31) BC and 31 Dec (2^31-1) AD, respectively. Note that while the new conversion code looks like it would be more expensive than the old, gcc will in fact be able to optimize it to be slightly faster (probably because x86 hardware implements round to negative infinity, and so GCC manages to optimize floordiv to a single instruction, compared to the three instuctions needed for operator/). In the following test application, run with a release mode Qt and redirecting stderr to /dev/null, I measured an improvement from 6.81s +/- 0.08s to 6.26s +/- 0.16s user time over five runs on an otherwise idle x86_64 system. int main(int, char *[]) { int year, month, day; qint64 jd; for (qint64 i = Q_INT64_C(-1048576) ; i < Q_INT64_C(1048576); ++i) { QDate::fromJulianDay(i).getDate(&year, &month, &day); jd = QDate(year, month, day).toJulianDay(); qDebug() << jd << year << month << day; } } Change-Id: Ifd0dd01f0027f260401f7f9b4f1201d2b7a3b087 Reviewed-by: David Faure (KDE) <faure@kde.org> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Improve QDateTime test coverage.Mitch Curtis2012-11-021-1/+2
| | | | | Change-Id: Ic521d9d2ffb1b8e3b14d9cebdeb3dc7a5e08580e Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
* Fix warnings when using QImage as QtConcurrent::mapped return typeLiang Qi2012-11-021-3/+3
| | | | | | | | Task-number: QTBUG-27391 Change-Id: I68b37ffa645be21d4d23b205bc052540b9aba7f4 Reviewed-by: Olivier Goffart <ogoffart@woboq.com> Reviewed-by: João Abecasis <joao@abecasis.name>
* Check for both A and P when converting QDateTime to string.Mitch Curtis2012-10-301-1/+2
| | | | | | | | | | hasUnquotedAP currently only checks for an a or A, which is wrong according to both the toString documentation and the comments for hasUnquotedAP. Change-Id: I03015734b846fe761085cf8f8fca2b29210cff97 Reviewed-by: Jon Severinsson <jon@severinsson.net> Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
* QMap - improve QMap stl-map ctorThorbjørn Lund Martsum2012-10-291-1/+1
| | | | | | | | | | We can insert directly on the most left-most Node. We always enforce an insert here (unlike the insert call), but that is not a problem since the keys in a std::map are unique. Change-Id: Ib409b90ffc57a5a43dab4a4b08d34f6fdabd057f Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Remove some dead code in switch statementsSergio Ahumada2012-10-291-3/+0
| | | | | | | | | | Following the Code Style described in http://qt-project.org/wiki/Qt_Coding_Style#e289ee44592e9c32d4212069f0806daf There is no need for a 'break' after a 'return'. Change-Id: I1eca350391a7e4e14e504d60b24b69982cc5ac47 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* QMap 5.0 - keep track of leftmost node (BIC)Thorbjørn Lund Martsum2012-10-272-3/+23
| | | | | | | | | | | | | | | | | | | | | This suggestion keeps track of the most left node. The point is that constBegin() becomes a lot faster. That speeds up iteration a bit, and makes it O(1) to get the first element. The penalty in insert and remove is very small. On large trees it seems to be less than 1%. It should be noticed that constBegin() is a very common hint on my planned change to 5.1, and this opperation will without this patch cost 2 x log N. One when the user calls the hint with begin - and one where it is compared with begin. Other std::maps has a very fast begin(). E.g http://www.cplusplus.com/reference/stl/map/begin/ (begin with constant time) Change-Id: I221f6755aa8bd16a5189771c5bc8ae56c8ee0fb4 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* QMap - use hint on insert in QMap::toStdMapThorbjørn Lund Martsum2012-10-271-1/+1
| | | | | | | | | Giving the std-map a hint (normally) improves insert performance. There seems to be no reason not to provide this hint. Change-Id: I4344607ebf54574a3ae9666d87a41a3c14762361 Reviewed-by: Robin Burchell <robin+qt@viroteck.net> Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Change one int to qint64 in QDateTime::setMSecsSinceEpoch(qint64)Jon Severinsson2012-10-261-1/+1
| | | | | | | | This one was missed when the QDate range was extended. Change-Id: I0dbcc9fdebca88f7397203d8e539429dcff9ac30 Reviewed-by: Lars Knoll <lars.knoll@digia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Quieten warning about uninitialized use of d pointerTobias Hunger2012-10-241-1/+1
| | | | | | | | | | We had this issue in Qt 4 before: Clang considers the use of d uninitialized in the initializer list for d. This might or might not be legal, the clang devs are divided on that topic. Let's just use a more common form and ignore the issue language lawyers. Change-Id: I3324255963a6d0f4a9057fe0d1d9ae868d3efef7 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Return invalid datetime when calling addMSecs with invalid QDateTime.Mitch Curtis2012-10-241-0/+7
| | | | | | | | | This is in line with what QTime::addMSecs and QDate::addDays do, for example. Change-Id: I902112486727f74f669a97bde6c42028e0838f8d Reviewed-by: Jon Severinsson <jon@severinsson.net> Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
* Improve QTime test coverage.Mitch Curtis2012-10-241-1/+1
| | | | | | | Change-Id: If47de3dc047ac4f8a4a1498cf225e03bbbf4110e Reviewed-by: Mitch Curtis <mitch.curtis@digia.com> Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com> Reviewed-by: Jon Severinsson <jon@severinsson.net>
* Improve QDate test coverage.Mitch Curtis2012-10-241-5/+4
| | | | | | | | | | | | Some statements could not be tested, such as default cases of switches where all possible cases are already handled and some statements where the system locale is used. I also removed some statements that would never be reached and hence will never be able to be covered by tests. Change-Id: I8ea3071f66d942d986e65708732af6751d36b5e3 Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
* Output leading zeroes for yyyy date formats in QLocale::toString().Mitch Curtis2012-10-241-1/+1
| | | | | | | | | | Converting the date 1 January 0001 to a string in the format "dd MMMM yyyy" currently results in the string "01 January 1", but it should be "01 January 0001". Task-number: QTBUG-27287 Change-Id: Ia025da7343d1c36aaee34c47c6db551a6e89595f Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* detach() safely in QVector::erase(), and update callers to not detach.Andreas Hartmetz2012-10-191-4/+6
| | | | | | | | | | | | | | | | remove() can use non-detaching iterators internally before calling erase(), which hasn't been exploited so far, so that the detach() in erase() never actually detached. When using erase() from outside, you can't do it legally without calling begin() or end() that detach() before erase() is called. Now remove() doesn't detach anymore, and detaching in erase() works. With new tests that fail after changing only the erase() callers and pass again after fixing erase(). Change-Id: I47c0a9e362dce8628ec566f5437d951755de96c8 Reviewed-by: Thorbjørn Lund Martsum <tmartsum@gmail.com> Reviewed-by: Olivier Goffart <ogoffart@woboq.com> Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
* Make QContiguousCache with zero capacity not crashThiago Macieira2012-10-192-2/+15
| | | | | | | | | | | | | | These containers don't make sense and will just result in no action being taken (all items added will simply be discarded), but it shouldn't crash due to a division by zero. Update the documentation to explain the fact. Task-number: QTBUG-27339 Change-Id: Ib9acf5c0a9a826e6853e7beaf5e56511fde98dc6 Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> Reviewed-by: Ian Walters <ian@walters.id.au> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Make sure functions returning iterators have an iterator as parameterThiago Macieira2012-10-192-6/+17
| | | | | | | | | | | | | | | | | | | | | The IA-64 C++ ABI does not encode the return type for non-template functions (QVector is the template, not the function), which means that these two functions have the same signature: Node *QVector<Node>::begin() typename class QTypedArrayData<Node>::iterator QVector<Node>::begin() [both are _ZN7QVectorI4NodeE5beginEv] When linking compilation units compiled with different QT_STRICT_ITERATORS settings, only one of the two out-of-line copies will survive. Depending on the ABI, we may have a problem: the ABI can say that a function returning a structure takes an implicit first parameter, which a function returning a regular pointer doesn't. Task-number: QTBUG-27277 Change-Id: I57a59e5a7c46f55faabfe85c073dca89d2a7bbf3 Reviewed-by: Jan Kundrát <jkt@flaska.net> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Doc fix in return value of QDate::setYMDFrederik Gladhorn2012-10-191-0/+1
| | | | | | | Change-Id: Ie107e451a7b2a084fb6131939f212acd412a9df6 Reviewed-by: Mitch Curtis <mitch.curtis@digia.com> Reviewed-by: Jerome Pasion <jerome.pasion@digia.com> Reviewed-by: Jan Arve Sæther <jan-arve.saether@digia.com>
* Add new error strings to QRegularExpressionGiuseppe D'Angelo2012-10-181-1/+3
| | | | | | | | They are introduced in PCRE 8.31. Change-Id: Id0447b381d5e23996d4e87ae0368b07a8bc1c318 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
* Add documentation for ucs4 overloads.Frederik Gladhorn2012-10-161-11/+43
| | | | | Change-Id: Ibacd8f260950db195a17cffe8396e8460f227eb9 Reviewed-by: Jan Arve Sæther <jan-arve.saether@digia.com>
* Review of documentation.Michele Caini2012-10-122-3/+9
| | | | | | | | Documentation has been updated to reflect changes in Qt5. Change-Id: I3d54d1875962bd27c43bb360ae7b3fda0b7702ba Reviewed-by: Andreas Holzammer <andreas.holzammer@kdab.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* QTextBoundaryFinder: Fix handling of break opportunitiesKonstantin Ritt2012-10-122-59/+99
| | | | | | | | | | | | | | | | | Add BoundaryReason::BreakOpportunity flag that will be returned by the boundaryReasons() when the boundary finder is at the break opportunity position that might be not an item boundary. This is the same as (StartWord || EndWord) in Grapheme and Sentence modes; in Word and Line modes, BreakOpportunity flag might occur between the words or in between of Line boundaries (e.g. in conjunction with SoftHyphen flag). In other words, the text boundaries are always break opportunities, but not vice versa. StartWord and EndWord flags has been deprecated by new StartOfItem and EndOfItem flags which are not about the word boundaries only. In line breaking, StartOfItem and EndOfItem are set for the mandatory breaks only. Change-Id: I79bf297e2b988f5976f30cff0c8ca616385f6552 Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
* QVarLengthArray: use memory on stack if possiblePeter Kümmel2012-10-111-5/+10
| | | | | | | | | | After allocating memory on the heap it is ATM not possible to use the memory on the stack again, QVarLengthArray then uses/resizes only the memory on the heap. But the memory on stack could be used if it is big enough. Change-Id: I566003c25dd1093eb6ba8087a1e5378a11712934 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Make QVarLengthArray exception safe in case of OOMPeter Kümmel2012-10-111-26/+22
| | | | | | | | | | | | | After a exception is thrown in resize(), QVarLengthArray has an invalid state with ptr == 0. On the next resize call when malloc returns a valid pointer, oldPtr is 0 and it could crash in memcpy because the pointer to the source is 0. The patch ensures the valid pointer isn't overwritten with NULL. When exceptions are disabled the user must ensure that malloc will not fail. Change-Id: Id12a5e3e1eacc551e4d1b64cba8e8414cfebd6e1 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Fix a "warning: 'operator+=' is deprecated" when building with clangJocelyn Turcotte2012-10-111-2/+1
| | | | | | | | | | | Any file including qstringbuilder.h would trigger a warning when compiled with QT_ASCII_CAST_WARNINGS defined since it implicitely converts a QString to QByteArray. Explicitely call toUtf8() to fix the issue. Change-Id: If20f9d4571c5d1ed789564196c9f1331e1efd1d9 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* QTextBoundaryFinder: Introduce BoundaryReason::MandatoryBreak flagKonstantin Ritt2012-10-104-8/+14
| | | | | | | | | | that will be returned by boundaryReasons() when the boundary finder is at the line end position (CR, LF, NewLine Function, End of Text, etc.). The MandatoryBreak flag, if set, means the text should be wrapped at a given position. Change-Id: I32d4f570935d2e015bfc5f18915396a15f009fde Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com> Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Optimise the deletion of a QSharedPointer with no custom deleterThiago Macieira2012-10-102-18/+40
| | | | | | | | | | | | | | | | When QSharedPointer is created with no user-specified custom deleter, instead of storing a pointer in ExternalRefCount::destroyer to a static function which, in turn, calls normalDeleter<T> indirectly (via another function pointer), specialise the CustomDeleter class and make it not store the pointer, but instead do the deleting directly. The benefits are: - the QSharedPointer's private data is smaller - there is no double-indirection via indirect jumps to the actual deleter Change-Id: Ice5653c144912efb1226e432267a047b9799aaca Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* QElapsedTimer: Instead of two ints, store only the clock typeThiago Macieira2012-10-101-46/+82
| | | | | | | | | | | | | | | | | | We don't need two ints if we can do it with one. We need to store only the clock type to be used, which is either CLOCK_MONOTONIC or CLOCK_REALTIME. In addition, we need an invalid value to indicate that the test hasn't been done yet. This also gets rid of an atomic that wasn't QBasicAtomicInt. Disassembly of the compiled code indicates this is the most optimal solution: - one single variable load - one test-and-branch to verify that a test is needed - straight call to clock_gettime afterwards Change-Id: I49788e45b50b6b7fcb7ba4e9332e5352a4428933 Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* Simplify QDate::addDays() impementationJon Severinsson2012-10-101-14/+3
| | | | | | | | | No need to check for overflows since the change to qint64. as less than half the qint64 range is a valid julian day, any overflow will be detected as an invalid date anyway. Change-Id: I3b6cad24e245ed9418c5804484f846b0b692153a Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Change QDateTime::addSecs() and QDateTime::secsTo() to use qint64.Jon Severinsson2012-10-102-5/+5
| | | | | | | | | | addMSecs() / msecsTo() have always used qint64, and when QDate was changed to use a 64-bit julian day, QDateTime::addDays() and QDateTime::daysTo() was changed to use qint64 in order to support the full extended range, but addSecs() and secsTo() seems to have been forgotten. Change-Id: I3acc35ee2bcc9f353650eb42f97d428f706b2db6 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Update the Unicode Data and Algorithms up to Unicode 6.2Konstantin Ritt2012-10-095-3150/+3170
| | | | | | | | | | | | | Version 6.2 of the Unicode Standard is a special release dedicated to the early publication of the newly encoded Turkish lira sign. In addition, there are some significant changes to the Unicode algorithms for text segmentation and line breaking to improve breaking for emoji symbols. For more details, see http://www.unicode.org/versions/Unicode6.2.0/ Change-Id: I21cfd4f307e41b41a19d36cce87f7a44c2661bc2 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* QMap - remove unused maximumNode() functionsThorbjørn Lund Martsum2012-10-081-4/+0
| | | | | | | | | QMap has 4 different maximumNode() functions, but they are all unused and just in the way. Change-Id: I012145cfae32898830ec95e229514d9be838ae2f Reviewed-by: Lars Knoll <lars.knoll@digia.com> Reviewed-by: Robin Burchell <robin+qt@viroteck.net>