summaryrefslogtreecommitdiffstats
path: root/src/corelib
Commit message (Collapse)AuthorAgeFilesLines
* QStandardPaths: on Windows, add APPDIR and APPDIR/data for GenericDataLocationDavid Faure2015-08-132-5/+3
| | | | | | | | | | This allows multiple applications installed into the same directory, to share data files without polluting a more global directory like C:/ProgramData. Change-Id: Id5f4f9bc9d2ccb7ec677babcc08c1c5a641178f6 Reviewed-by: Samuel Gaist <samuel.gaist@edeltech.ch> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Move Q_ALWAYS_INLINE next to Q_NEVER_INLINE in qglobal.h.Erik Verbruggen2015-08-112-45/+39
| | | | | Change-Id: I7e3b7ecca6b5f142fa6cb5db2e9521ed3212afe8 Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
* Make Qt::Initialization a C++11 class enumThiago Macieira2015-08-101-0/+7
| | | | | | | | | | | | | | | | | | And declare Qt::Uninitialized to be the same value because we're not interested in the scoping rules of C++11 class enums. We're only interested in avoiding the cast from Qt::Uninitialized to an integer. That is to avoid the mistaken: QVector<Custom> vector(5, Qt::Uninitialized); which is actually implicitly: QVector<Custom> vector(5, Custom(Qt::Uninitialized)); and likely not what the developer wanted. Change-Id: I27eaacb532114dd188c4ffff13d374eb698bfbab Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
* Add a dedicated QListData::realloc_grow for growing QListThiago Macieira2015-08-102-3/+16
| | | | | | | | | This hides the call to ::grow to now two places in the source code, so it will be easier to fix the inefficient call to qAllocMore. Change-Id: I5d1e6f7607404caa96e4ffff13e80a3e4cb0ee93 Reviewed-by: Ulf Hermann <ulf.hermann@theqtcompany.com> Reviewed-by: Alex Trotsenko <alex1973tr@gmail.com>
* Add QTypeInfo::isRelocatableThiago Macieira2015-08-101-12/+49
| | | | | | | | | | It's the same as movable (i.e., the opposite of QTypeInfo::isStatic), except that it won't trigger the QList change in memory layout. For Qt 6, we should merge the two. Change-Id: Ib306f8f647014b399b87ffff13f1ece29e4b6e5c Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
* Silence warning about unused parameterThiago Macieira2015-08-101-0/+1
| | | | | | | | | | Happened on an iOS build io/qlockfile_unix.cpp:217:51: error: unused parameter 'pid' [-Werror,- Wunused-parameter] Change-Id: Id3d5c7bf4d4c45069621ffff13f7f7a30728c071 Reviewed-by: Jake Petroules <jake.petroules@petroules.com>
* Reduce memory usage of dynamic propertiesSimon Hausmann2015-08-101-1/+1
| | | | | | | | | The dynamic property variants are stored as QList<QVariant>, which unfortunately results in QList to behave as array-list because of the size of QVariant. By storing the variants in a vector directly we can eliminate the array-list element pointers. Change-Id: I8736e1cf48b9fc97df3007df4a439b793933f346 Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
* Merge "Merge remote-tracking branch 'origin/5.5' into dev" into refs/staging/devTimur Pocheptsov2015-08-0931-93/+344
|\
| * Merge remote-tracking branch 'origin/5.5' into devFrederik Gladhorn2015-08-0631-93/+344
| |\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: doc/global/qt-cpp-defines.qdocconf src/3rdparty/forkfd/forkfd.c src/corelib/codecs/qtextcodec.cpp src/corelib/kernel/qmetatype.cpp src/corelib/tools/qset.qdoc src/gui/accessible/qaccessible.cpp src/gui/image/qpixmapcache.cpp src/opengl/qgl.cpp src/tools/qdoc/generator.cpp src/widgets/kernel/qwidget.cpp tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp Change-Id: I4fbe1fa756a54c6843aa75f4ef70a1069ba7b085
| | * Don't check if Pentium's CPUID leaf 1 existsThiago Macieira2015-08-061-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It does. When CPUID was introduced in late 486, it already supported leaf 1. That means all Pentium-class systems (including Intel's new Quark systems) have CPUID and they have at least leaf 1. Change-Id: Ib306f8f647014b399b87ffff13f1d5d2530d9ddd Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
| | * Doc: update QDebug documentation to talk about the escapingThiago Macieira2015-08-061-8/+95
| | | | | | | | | | | | | | | | | | | | | Task-number: QTBUG-47316 Change-Id: Ib306f8f647014b399b87ffff13f303badb2a7a63 Reviewed-by: Martin Smith <martin.smith@digia.com> Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
| | * Change how QDebug escapes QStrings in the outputThiago Macieira2015-08-061-13/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | [ChangeLog][Important Behavior Changes] QDebug output for QStrings changed compared to Qt 5.5.0 to more closely match the output of previous Qt versions. Like Qt 5.5.0, QDebug will escape non-printable characters, the backslash and quote characters, but will no longer escape the printable characters. Task-number: QTBUG-47316 Change-Id: I52dd43c12685407bb9a6ffff13f62ef68cbc80c5 Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
| | * QLoggingCategory: fix default severity in Q_LOGGING_CATEGORY macroAlex Merry2015-08-031-3/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | [ChangeLog][QtCore][QLoggingCategory] Fixed behavior of default severity passed to constructor or Q_LOGGING_CATEGORY with regards to QtInfoMsg, which was previously treated as being more severe than QtFatalMsg. This is because the code was using the numeric value of QtMsgType as a proxy for severity (via the <= operator), but the value of QtInfoMsg is greater than QtFatalMsg. Instead, the severity ordering must be dealt with explicitly. Change-Id: I5f178afc735221b00cb67c2cea4fa964bd9079ce Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
| | * do not warn about "untested" Windows versionsJoerg Bornemann2015-08-031-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Remove the qWarning that was printed when running a Qt application on desktop Windows versions that Qt doesn't know about. This warning isn't helpful, it's only visible for command line applications and it can only be turned off by rebuilding the application with a newer Qt version. Removing the warning is also consistent with all other platforms - even non-Desktop Windows. Change-Id: If1cac92ce99974335319d0b9a74f1006069abd7a Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com> Reviewed-by: Jake Petroules <jake.petroules@petroules.com>
| | * Disable #pragma diagnostic [push|pop] for gcc 4.5Kai Koehne2015-08-031-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fix warnings like qalgorithms.h:40:16: warning: expected [error|warning|ignored] after `#pragma GCC diagnostic` As the comment below also indicates, #pragma GCC diagnostic [push|pop] is only supported from gcc 4.6 upwards. See also the GCC 4.6 changelog: https://gcc.gnu.org/gcc-4.6/changes.html [ChangeLog][Compiler specific Changes] GCC: Fixed a regression introduced Qt 5.5.0 that generated lots of compiler warnings in Qt public headers when using the (deprecated) version 4.5 of GCC. Change-Id: I425388b61cd5fbf464a0f7dd46ce403d35c532a4 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
| | * Revert "Fix performance of recursive read-write locks"Thiago Macieira2015-07-312-0/+58
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit 666486b3efec871301b82244ec661e1eaa6cca9c, which removed the QHash that protected against reader recursion deadlocks. Without this hash, a reader will block on d->readerWait.wait() until the writer finishes its task. However, the writer never starts because there's a reader that hasn't released the lock. That's a deadlock. Change-Id: I792373bb361db35eb9e5504229c099008821a665 Task-number: QTBUG-47530 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
| | * consistently handle empty program string in QProcess::start overloadsJoerg Bornemann2015-07-301-1/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | All overloads of QProcess::start will now check whether the program string is empty and in that case - set error to FailedToStart, - set errorString to "No program defined", - emit error. Until now only one of the three overloads behaved like this. As a side effect, start(QString(), QStringList()) will not crash on Windows anymore. Task-number: QTBUG-47404 Change-Id: I2f93657204fe3643b1d74a74817843c05fc4a96b Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Jake Petroules <jake.petroules@petroules.com> Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
| | * Fix typo in filterAcceptsColumn docs: row is used in place of columnSamuel Gaist2015-07-281-1/+1
| | | | | | | | | | | | | | | Change-Id: Ic0ec62e4d5c4a4b1d71f14c5d3133657341d4fe3 Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
| | * Fix compilation error while instantiating operator<< explicitlyOlivier Goffart2015-07-261-3/+11
| | | | | | | | | | | | | | | | | | Task-number: QTBUG-47375 Change-Id: Ibd260de88c174c1aa3833a56b153b8b74d337338 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
| | * Doc: Don't advertise QLocale::system() in QTranslator::load documentationKai Koehne2015-07-231-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Usually you want to use just QLocale(), and not QLocale::system(). They are both the same except when the user called QLocale::setDefault() beforehand. Change-Id: I2d9b13ac3ffec0005b1d9bf661eccdea276d34b1 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> Reviewed-by: Martin Smith <martin.smith@digia.com>
| | * Doc:added doc to undocumented functionsNico Vertriest2015-07-229-18/+58
| | | | | | | | | | | | | | | | | | Task-number: QTBUG-36985 Change-Id: Ic358682b276d67ef804f727bcf14191718613469 Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
| | * Replace old C-style castAndré Klitzing2015-07-221-2/+2
| | | | | | | | | | | | | | | | | | | | | User gets compiler warnings for plugins if "-Wold-style-cast" is enabled Change-Id: I142ae2676ca7690c8e8e10c73a4007e85d8f448d Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
| | * QTimeZone: Convert fractional timezones properly.Cesar Garcia Naranjo2015-07-211-6/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | [ChangeLog][QtCore][QTimeZone] Fixed a wrong timezone conversion when the POSIX timezone rule contains a fractional timezone (e.g. VET4:30). Task-number: QTBUG-47037 Change-Id: I5d9052929bbcde174614ccf07c329264603e6431 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
| | * Doc: update the Q_OS_MAC documentation to be less misleadingThiago Macieira2015-07-211-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | The "open source" version it's talking about is that of Darwin, not of Qt. Change-Id: Ib306f8f647014b399b87ffff13f27bc651d78707 Reviewed-by: Martin Smith <martin.smith@digia.com> Reviewed-by: Dirk Hohndel <dirk@hohndel.org>
| | * qglobal: Clarify that Q_OS_WINRT also implies Q_OS_WINSebastian Schuberth2015-07-211-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | This makes the docs match the code from qsystemdetection.h. Change-Id: Iec75e24d13e21f1800777bac5fa98b47b47e6001 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> Reviewed-by: Topi Reiniö <topi.reinio@digia.com> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
| | * Remove attempt at detecting compile-time HLEThiago Macieira2015-07-202-5/+1
| | | | | | | | | | | | | | | | | | | | | | | | There's no __HLE__ macro and there won't be, since the HLE prefix can be run on older CPUs. There's no need for runtime detection. Change-Id: Ib306f8f647014b399b87ffff13f1daba0e654b02 Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
| | * Fix Q_BASIC_ATOMIC_INITIALIZER for std::atomicThiago Macieira2015-07-201-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We can't have too many braces: one pair is just enough because we're actually calling the QBasicAtomicInt's constructor. That is, we're using the uniform initialization procedure. Required for Clang 3.7: qmetatype.h:1772:46: error: braces around scalar initializer [-Werror,-Wbraced-scalar-init] static QBasicAtomicInt metatype_id = Q_BASIC_ATOMIC_INITIALIZER(0); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ qatomic_cxx11.h:331:43: note: expanded from macro 'Q_BASIC_ATOMIC_INITIALIZER' #define Q_BASIC_ATOMIC_INITIALIZER(a) { {a} } ^~~ Change-Id: Ib306f8f647014b399b87ffff13f1f2db1fabe393 Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
| | * QtCore: Fix const correctness in old style castsThiago Macieira2015-07-2011-36/+37
| | | | | | | | | | | | | | | | | | | | | Found with GCC's -Wcast-qual. Change-Id: Ia0aac2f09e9245339951ffff13c8d4b2920a11fb Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
| | * Also disable constexpr support in ICC with MSVC before MSVC2015Thiago Macieira2015-07-181-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Because the MS standard library headers won't have the necessary constexpr markings, some types that should be literal (like std::atomic) aren't and some functions that should be constexpr (like std::numeric_limits:max()) aren't. Change-Id: Ib306f8f647014b399b87ffff13f1c74093b11af1 Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
| | * Don't complain about missing CPU features under ValgrindThiago Macieira2015-07-181-1/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If you're running Qt under valgrind, it stands to reason that you know what you're doing. In particular, Valgrind does support AVX and AVX2 instructions, but some versions seem to be missing the necessary CPUID bits. Change-Id: I9a75ad8521ae4e5cbbe5ffff13d1940f6fa5c4f4 Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com> Reviewed-by: David Faure <david.faure@kdab.com>
* | | Support logging direct to syslog, if enabled.Tasuku Suzuki2015-08-092-0/+36
| | | | | | | | | | | | | | | | | | | | | | | | [ChangeLog][QtCore][Logging] Systems with syslog may now pass -syslog to configure to send logging output to syslog. Change-Id: I80d58ee6e70d8deb2409fc666e7e7f2d7f52b8e1 Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
* | | Document AA_* that must be set before app constructionLaszlo Agocs2015-08-081-5/+8
|/ / | | | | | | | | | | | | | | | | | | | | After seeing multiple apps falling into the trap of setting AA_ShareOpenGLContexts after constructing the q(gui)app, it is time to add some more docs regarding this. Task-number: QTBUG-47637 Change-Id: I01b5be0980d038efc56fd649d4a1fee26c33aef8 Reviewed-by: Andy Shaw <andy.shaw@theqtcompany.com> Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
* | QLoggingRegistry: allow Rules section to be lower caseFrederik Gladhorn2015-08-051-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | In http://blog.qt.io/blog/2014/03/11/qt-weekly-1-categorized-logging/ the Rules section is given as: [rules] ... While in reality only Rules was accepted. Ignore casing instead. Change-Id: Ibf0da6b6df857988d508ba9ec354cbce0b2c56d6 Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
* | Doc: Fix qdoc warnings about missing \inmoduleKai Koehne2015-08-042-0/+2
| | | | | | | | | | Change-Id: Id04ac0d4825ad3e8489c0db186425e049e2c6108 Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
* | Doc: fix \sa for QT_NO_PROCESS_COMBINED_ARGUMENT_STARTJoerg Bornemann2015-08-041-1/+1
| | | | | | | | | | Change-Id: I4d2c1b1bc5773c23d3dfd8522268a422c3e513e6 Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
* | QTemporaryDir: fail early if the error isn't EEXISTThiago Macieira2015-08-011-0/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Before, stat -c on Linux (enabling this code path): % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 0.00 0.000000 0 256 256 mkdir After: 0.00 0.000000 0 1 1 mkdir “To err is human, to persist in error is diabolical” - Georges Canguilhem “The definition of insanity is repeating the same mistakes over and over again and expecting different results.” - Albert Einstein, Mark Twain or Benjamin Franklin (all mis-attributed) Change-Id: Ib306f8f647014b399b87ffff13f0a3c155053e6a Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> Reviewed-by: David Faure <david.faure@kdab.com>
* | Add QStorageInfo::blockSizeThiago Macieira2015-07-305-1/+17
| | | | | | | | | | | | | | | | | | | | [ChangeLog][QtCore][QStorageInfo] Added QStorageInfo::blockSize(), which returns the optimal block size for data transfer to and from the storage. Change-Id: Ib306f8f647014b399b87ffff13f4eba6000452d4 Reviewed-by: Jake Petroules <jake.petroules@petroules.com> Reviewed-by: Tobias Koenig <tobias.koenig@kdab.com>
* | Add a quick optimization for QVersionNumber's constructorsThiago Macieira2015-07-301-1/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If the data fits inline, let's store it using the dummy member. GCC, Clang and ICC optimize the code on all architectures I tested to one single store. Previously, the function for "return QVersionNumber(5,4,0);" was: x86-64: movb $7, (%rdi) movb $5, 1(%rdi) movb $4, 2(%rdi) movb $0, 3(%rdi) x86: movb $7, (%eax) movb $5, 1(%eax) movb $4, 2(%eax) movb $0, 3(%eax) ia64: addl r17 = 7, r0 adds r16 = 1, in0 adds r15 = 2, in0 adds r14 = 3, in0 st1 [in0] = r17 addl r17 = 5, r0 ;; st1 [r16] = r17 addl r16 = 4, r0 ;; st1 [r15] = r16 st1 [r14] = r0 armv7a: mov r1, #7 mov r2, #5 strb r1, [r0] mov r1, #4 strb r2, [r0, #1] mov r2, #0 strb r1, [r0, #2] strb r2, [r0, #3] mips32: li $3,7 # 0x7 sb $3,3($4) li $3,5 # 0x5 sb $3,0($4) li $3,4 # 0x4 sb $3,1($4) sb $0,2($4) mips64: li $3,7 # 0x7 sb $3,7($4) li $3,5 # 0x5 sb $3,0($4) li $3,4 # 0x4 sb $3,1($4) sb $0,2($4) ppc32: li 10,7 stb 10,3(3) li 10,5 stb 10,0(3) li 10,4 stb 10,1(3) li 10,0 stb 10,2(3) ppc64: li 10,7 stb 10,7(3) li 10,5 stb 10,0(3) li 10,4 stb 10,1(3) li 10,0 stb 10,2(3) Now it is: x86-64: movq $263431, (%rdi) x86: movl $263431, (%eax) ia64: addl r14 = 263431, r0 ;; st8 [in0] = r14 armv7a: movw r3, #1287 movt r3, 4 str r3, [r0] mips32: li $3,84148224 # 0x5040000 addiu $3,$3,7 sw $3,0($4) mips64: li $3,321 # 0x141 dsll $3,$3,50 daddiu $3,$3,7 sd $3,0($4) ppc64: lis 9,0x504 sldi 9,9,32 ori 9,9,7 std 9,0(3) ppc32: lis 9,0x504 ori 9,9,7 stw 9,0(3) All assembly listings from GCC 4.8.1, but the Clang and ICC outputs are identical or at least very similar (I tested Clang for ARM, MIPS and PowerPC). Both MIPS and PowerPC were compiled in big-endian mode and this listing shows that the 64-bit implementation is correct. Additionally, the output is also the same for GCC when using brace initialization (that is, return QVersionNumber{5,4,0}). Clang and ICC couldn't optimize that. Change-Id: I9a4a4c9fc83f1182401f63fd2da829c935a8c9da Reviewed-by: Keith Gardner <kreios4004@gmail.com> Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
* | Introduce cross platform high-dpi scalingMorten Johan Sørvig2015-07-302-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add a coordinate scaling layer to QtGui, which supports 'devicePixelRatio' type high-dpi on all platforms, in production and also for development and testing purposes. High-DPI scaling is opt-in, by setting environment variables: QT_SCALE_FACTOR - sets a global scale factor QT_AUTO_SCREEN_SCALE_FACTOR - sets per-screen scale factors, where the scale factors are provided by the platform plugin. This QtGui scaling can be used instead of or in addition to scaling done by the window system. This distinction is not visible to applications [when they use Qt API], which will see a change in the value returned by the devicePixelRatio() accessors as usual. Introduce a new (private to Qt) coordinate system: native pixels. The coordinate system stack now looks like: device-independent pixels (app, upper parts of Qt) native pixels (lower parts of Qt Gui, platform plugins) device pixels (backing stores and OpenGL) Add private QHighDpi namespace with scaling functions that convert between device-independent pixels and native pixels: T toNativePixels(T, QWindow *); T fromNativePixels(T, QWindow *); Add scaling calls the QWindow (and friends) cross-platform implementation, around the calls to QPlatformWindow functions. QPlatformWindow now uses native coordinates - platform code remains largely unchanged since native coordinates are window system coordinates. QWindow now uses (possibly) scaled coordinates. This means that platform plugins no longer can rely on QWindow::geometry() and related functions. QPlatformWindow::windowGeometry() and other convenience functions have been added for use when the platform plugin needs to convert scaled geometry to native geometry. Add Qt::AA_NoHighDpiScaling, which can be use to disable any scaling in QtGui, effectively ignoring the environment variables. (Note that this does not disable any scaling done by the window system.) Contributions from Friedemann and Paul. Task-number: QTBUG-46615 Change-Id: I673bbd69c130e73b13cce83be11bfb28f580bf60 Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
* | Refactor QVersionNumber so it stores values in-classThiago Macieira2015-07-292-21/+205
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The common case of QVersionNumber is that there are few segments and each segment is a small integers. So instead of allocating a QVector<int>, just store those numbers in the class itself if possible. Think of this as a "Small String Optimization" for QVersionNumber. QVector<int> costs 16 + 4*N bytes, plus malloc overhead. After this change, QVersionNumber(5,4,0) will have an overhead of zero. The memory layout is explained in the header. I've coded it so big endian also works, but I have not tested it at all. Aside from the special functions for QVersionNumber and operator>>, all the rest of the algorithm could have been left unchanged. I only updated segments(), normalized(), compare(), commonPrefix() and fromString() to take advantage of the smaller implementation in a more efficient way. Note: QVersionNumber's constructors often leave half of the object or more uninitialized. That's not a problem. Change-Id: I4a2a0ce09fce2580f02d678e2f80b1dba74bac9d Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
* | Replace ifdefs with QDir::listSeparator()Sérgio Martins2015-07-291-6/+1
| | | | | | | | | | Change-Id: I98fab8e0d83b2e7851ba8c0a4adfc02af1271a92 Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
* | Doc: Increase accuracy of QString documentation discussing size()Topi Reinio2015-07-291-13/+14
| | | | | | | | | | | | | | | | | | | | There are multiple QString and QStringRef functions that document behavior "if n is greater than size(), ...", but a comprehensive, correct statement is "if n is greater than or equal to size(), ...". Change-Id: I5d2112e08013edaf6f2f6d7e8a6740ea26a076e2 Task-number: QTBUG-47479 Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
* | Introduce QHash key iteratorsSérgio Martins2015-07-283-1/+194
| | | | | | | | | | | | | | | | | | | | | | So we can have interoperability with algorithms. Motivated by inefficient code like qDeleteAll(hash.keys()) [ChangeLog][QtCore][QHash] Added key iterators, accessible through keyBegin() and keyEnd(). Change-Id: I1f9db8a7a4294e1556cbb50b8fe5ebdcf0dc29a2 Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
* | Introduce QMap key iteratorsSérgio Martins2015-07-283-4/+197
| | | | | | | | | | | | | | | | | | | | | | So we can have interoperability with algorithms. Motivated by inefficient code like qDeleteAll(map.keys()) [ChangeLog][QtCore][QMap] Added key iterators, accessible through keyBegin() and keyEnd(). Change-Id: Ieee2f9ad031e9d1e845a71447746699bbe95b96c Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
* | doc: Corrected docs for QList and QVectorMartin Smith2015-07-273-73/+120
| | | | | | | | | | | | | | | | | | | | | | | | The docs for QList advised users to choose QList over QVector for efficiency reasons. The advise should be to use QVector over QList for efficiency reasons. This update corrects that misunderstanding. Change-Id: Ie04c99ab7fe6aef4bd1d39175c9564455b0122de Task-number: QTBUG-47196 Reviewed-by: Topi Reiniö <topi.reinio@digia.com> Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
* | QTimer: Force a compilation error with pmf without objectOlivier Goffart2015-07-271-2/+6
| | | | | | | | | | | | | | | | | | | | | | | | None of this should compile (foo is non-static): QTimer::singleShot(0, &TestObject::foo); QTimer::singleShot(0, SLOT(foo())); Task-number: QTBUG-47426 Change-Id: I54b7d14124459e450c6a0a93a3033f21b57605d9 Reviewed-by: Dario Freddi <dario.freddi@ispirata.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* | QStateMachine: add defaultTransition in QHistoryStateErik Verbruggen2015-07-236-21/+111
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The history state had the limitation that it was hard (or impossible) to use when more than one default state had to be entered. For example, using it in a parallel state was impossible without ending up in an infinite loop. This patch changes the QHistoryState to only have an initial transition, and the state selection algorithm is changed accordingly. It also brings QStateMachine closer to the SCXML standard. The existing defaultState is implemented on top of the defaultTransition: when used, a new transition, with the default state as its target, is set as the defaultTransition. Task-number: QTBUG-46703 Change-Id: Ifbb44e4f0f26b72e365af4c94753e4483f9850e7 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
* | StateMachine: remove initial state for parallel states.Erik Verbruggen2015-07-231-0/+8
| | | | | | | | | | | | | | | | | | | | | | | | A parallel state cannot have an initial state, as all children of the parallel state will be entered. Setting such an initial state on a QState marked as ParallelStates would already produce a warning and ignore the initial state. Now any initial state that has been set before changing the child-mode to ParallelStates will also produce a warning and remove the previously set initial state. Change-Id: Ie5fcd44b03516744f785f2d1880bf806918c44d4 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
* | QStateMachine: remove left-over method.Erik Verbruggen2015-07-232-68/+5
| | | | | | | | | | | | | | | | | | | | This method was probably there in older versions of the specification, but it is no longer used now. The only caller was in QStateMachinePrivate::setError, which has been changed to use the newer methods. Change-Id: Ic4961990d8d2c902676e63193d3f30ef427e6f0c Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
* | qvariant: Pass a couple of large types by const-ref in Qt6Sérgio Martins2015-07-222-0/+16
| | | | | | | | | | | | | | sizeof is approx 100 bytes Change-Id: Ibd5fb50674effee832ce4529d737c060c570ffa3 Reviewed-by: Marc Mutz <marc.mutz@kdab.com>