summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Ensure proper format of Info.plist6.4Maximilian Blochberger2023-03-281-4/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The Information Property List (Info.plist) is a property list that contains information about macOS and iOS application and framework bundles. There are multiple supported formats, those property lists can be stored in, most notably XML and binary. Problem If the Info.plist file is edited with an external editor, such as Xcode, it is possible that it is stored in binary format. A Makefile generated by the qmake tool contains a call to sed, which works on text but not binary files. Consequently, this call would fail. Solution Since Mac OS X 10.2, the plutil tool is available. It can be used to convert the property lists into a specific format. The plutil tool is now used to convert the plist to XML, so that the sed invocation succeeds. [ChangeLog][qmake] Fixed handling binary Info.plist files in generated Makefiles by always converting them to XML before substituting placeholders. Fixes: QTBUG-45357 Change-Id: I066039301c391a5034710458500a096f09e5ca24 Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> (cherry picked from commit bbad6440aecdba29d8808c4fa6e3e6353b39c887) Reviewed-by: Maximilian Blochberger <maximilian.blochberger@qt.io> Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* git: ignore ._* filesLiang Qi2023-03-281-0/+1
| | | | | | | Change-Id: Idbf7dcd76f176f098bfbeb516c51933c2b7a08b6 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io> (cherry picked from commit e8622fb2046f94fb2c8b9a9d0c1cec6d082485e8) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* xcb: ignore the xscreens which don't belong to current connectionLiang Qi2023-03-241-12/+12
| | | | | | | | | | | | | | | | | This amends 9a4c98e55659b32db984612e6247ac193812a502. When a X server has multiple xscreens, for example, ":0.0" and ":0.1", a Qt application, which uses ":0.1" as display, can't use the randr monitor from other connection(":0.0") to show contents there. Then we don't need to generate QXcbScreen for them. Fixes: QTBUG-110898 Change-Id: I04c1512664b763ffabb55b75db4411d100536255 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: JiDe Zhang <zhangjide@uniontech.com> Reviewed-by: Liang Qi <liang.qi@qt.io> (cherry picked from commit 2b94453cbdab5c691c830ff539e81408d5330e3b) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* QSQL/ODBC: fix regression (trailing NUL)Marc Mutz2023-03-221-2/+4
| | | | | | | | | | | | | | | | | | | | When we fixed the callers of toSQLTCHAR() to use the result's size() instead of the input's (which differ, if sizeof(SQLTCHAR) != 2), we exposed callers to the append(0), which changes the size() of the result QVLA. Callers that don't rely on NUL-termination (all?) now saw an additional training NUL. Fix by not NUL-terminating, and changing the only user of SQL_NTS to use an explicit length. Amends 4c445ef0bae8b36ec4a742552f0ebd81a1a90723 and 46af1fe49f7f419dc1b3231de9860e2da0ea48f8. Done-with: Christian Ehrlicher <ch.ehrlicher@gmx.de> Change-Id: I6210b77e9417f46294df94cb32ab4134af8dc4c2 Reviewed-by: Andy Shaw <andy.shaw@qt.io> (cherry picked from commit 9020034b3b6a3a8118e5959beed699bb8aaa3f95) Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* rhi: metal: Fix offscreen frame command completion waitLaszlo Agocs2023-03-211-9/+7
| | | | | | | | | | | | Does what 711c55b63226c30532b39ec8d5191330512eb2e0 did for Vulkan, i.e. removes the there-is-more-than-one-swapchain condition. Fixes: QTBUG-109971 Change-Id: If631748c50482389a3ef894823a1aaf1ebb38bee Reviewed-by: Andy Nichols <andy.nichols@qt.io> (cherry picked from commit 2305f8af9f24cd5a71e1eb7129b518ad621a1770) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* fbconvenience: use smart pointer for QFbCursorLiang Qi2023-03-212-2/+2
| | | | | | | | Fixes: QTBUG-110785 Change-Id: Id82fc300c5716ce68a2609b7fb36195f2d37e322 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io> (cherry picked from commit bb84232b0540ba834747459b68458054b7107541) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* Doc: Update docs to reflect method being renamedAndreas Eliasson2023-03-172-4/+4
| | | | | | | | | | The new method has been renamed from markDirty to notify. Fixes: QTBUG-111267 Change-Id: Ib7926a315cfd11ca6930c785290089b7031d34ff Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> (cherry picked from commit 12c62dd243dd139023fa1fc5c3a7c0fd8e3ee0ba) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* QPlainTextEdit: Don't block signals on page stepAxel Spoerl2023-03-172-12/+29
| | | | | | | | | | | | | | | | | | | | | | | | | | Signals of the vertical scroll bar were blocked when scrolling with pageUp/pageDown keys or clicking on the scroll range outside the scroll bar. This has lead to inconsistent signal emissions: The vertical scroll bar's valueChanged signal was emitted only on single steps and when the scroll bar was moved with the mouse. When it was moved in page steps by clicking on the scroll range or pressing pageUp/pageDown, it was not emitted. This patch removes the signal blocker for page step movements, which was added in 94fd108ea42a99dacefa819bc3fd4363fb95e886 to replace explicit calls to blockSignals(), which were added in c14d442b08ac81327b173b0a220c7b1840667899. The patch also adds test function to tst_QPlainTextEdit to check if the valueChanged signal is emitted correctly. Fixes: QTBUG-8682 Fixes: QTBUG-25365 Change-Id: I4385a5387c91497f623978e35bbbe3e06f473afe Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io> (cherry picked from commit 09c3cd8503102c70c7d5bf41c0b662b2c86b4ad0) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* Android: demistify the "No platform plugin" androiddeployqt errorAssam Boudjelthia2023-03-161-9/+4
| | | | | | | | | | | | | | | | | | | | | | Make the error message clearly mention that a Qt for Android app require linking to Qt Gui library. Along the way get rid of the libqtforandroidGL mention which was valid when Qt for Android had separate plugins for raster and opengl, which was removed some time ago in 8a9bd001c947e6888d37e99fc456339fd2b51b36. Task-number: QTBUG-111933 Task-number: QTBUG-111934 Task-number: QTBUG-108643 Task-number: QTBUG-97636 Task-number: QTBUG-83997 Fixes: QTBUG-85544 Task-number: QTBUG-93185 Change-Id: I24f6c08f619d805e0d82758d35aebaf32038206c Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io> (cherry picked from commit a9c8870b5e6eddc31b78b7e4afe46b28110e7863) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* emit QAbstractSlider::valueChanged() only on value changeAxel Spoerl2023-03-152-5/+16
| | | | | | | | | | | | | | | | | | The signal has been emitted also, when the slider position has changed without a value change (e.g. on QWidget::show() or on resizing). This patch stops emitting the signal without a value change. It adds a verification to tst_QAbstractSlider::setValue(), that valueChanged is not emitted on a no-op value change. As a drive-by, the patch removes an unnecessary assignment and changes signal spy constructions to PTMF syntax. Task-number: QTBUG-25365 Change-Id: I9932e45d4e680aa53422ca75aa42a16306213a38 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io> (cherry picked from commit 8b84374892512faa43e5deeeef22ca558ac5543a) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* CMake: Pass CMAKE_EXE_LINKER_FLAGS to project-based try_compileAlexandru Croitor2023-03-141-0/+1
| | | | | | | | | | | | | | | CMake does it for non-project-based try_compile calls if the CMP0056 policy is set to NEW. That was introduced in CMake 3.2, thus set it unconditionally. The use case is to pick up custom -rpath-link paths when cross-compiling. Change-Id: I726b90267dd46de116052b5b7f19b9354a568200 Reviewed-by: Dimitrios Apostolou <jimis@qt.io> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io> (cherry picked from commit 595ac662ed707bf56162c6234a3f52895f6b0502) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* QNetwork[http]: Discard or ignore corrupted cache entriesMårten Nordheim2023-03-142-1/+7
| | | | | | | | | | | | | | | | | In an attempt to avoid situations like the linked bug-report from happening again, discard cached entries with no headers and ignore entries where the payload is smaller than what the header specified (if it specified anything). In a future revision we might want to add a length to the cache's metadata, potentially with a checksum trailing the content. Task-number: QTBUG-111397 Change-Id: Ie40149ffdaff7886bcd44cbd45605bdb7918e105 Reviewed-by: Konrad Kujawa <konrad.kujawa@qt.io> Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io> (cherry picked from commit a6776de0c70d23ac197682c7bef603450cb8b03f) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* Propagate QT_DISABLE_DEPRECATED_UP_TO to QtLibraryInfo libraryIvan Solovev2023-03-141-0/+3
| | | | | | | | | | | | | This helps to fix the static build, which was previously failing with QT_DISABLE_DEPRECATED_UP_TO, because it was the only library that did not see the definition. Fixes: QTBUG-111884 Change-Id: I9324019bc8cbb7ba7a87dd348ea60e25cb681005 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io> Reviewed-by: Marc Mutz <marc.mutz@qt.io> (cherry picked from commit eaae969ac604df5aef0c36a0ddaa20209bff70db) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* QFSFileEngine: fix overflow bug when using lseek64Ahmad Samir2023-03-142-2/+2
| | | | | | | | | | | | | | | | | | | | | | QT_LSEEK (lseek64()) returns QT_OFF_T, which is off64_t on 32bit systems. The return from the lseek64() call was being assigned to an int, which meant that if the returned value is > INT_MAX it will overflow and the value becomes -1, and since errno would be EOVERFLOW the code would fail to open the file. Fix the issue by assigning the return value to QT_OFF_T. Thanks to Giuseppe for pointing out the issue in the code review. Found by compiling with -Wshorten-64-to-32. [ChangeLog][QtCore][QFile] Fixed a bug where opening a file in append mode may fail if the file size was bigger than INT_MAX. Change-Id: Iad33e3192f37466643a1218d38e5ecc2baaa7dc9 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> (cherry picked from commit 5bffb47d6e45260953bc679e1e9582322064b753) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* QStandardPaths/unix: ignore relative paths in all $XDG_* env varsAhmad Samir2023-03-142-5/+47
| | | | | | | | | | | | | | | This is a continuation of commit 5c9d671bfb5b511106. [ChangeLog][QtCore][QStandardPaths] Improved conformance to the Freedesktop basedir spec by ignoring any relative paths in XDG_* environment variables. Fixes: QTBUG-58043 Change-Id: I7c34143ced97d6d3de6ecbf13bccf9e935462d1e Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io> (cherry picked from commit d4f72b4de63fe0622908c7657f9724bad359574e) (cherry picked from commit 80a6048ab1806e695764abebe1d9d682ac346a78)
* QNetworkDiskCache: use QSaveFileMårten Nordheim2023-03-133-46/+24
| | | | | | | | | | | | | | | | QTemporaryFile is not designed to promote temporary files to non-temporary files. So, it, quite importantly, does not care if the content of the files are flushed to disk before renaming it into its 'final' destination. This is what QSaveFile is for. This was much more time-consuming than intended since I had to debug this quirk about calling size(). Fixes: QTBUG-111397 Change-Id: I15b300f6a5748ad3a0be983545ea621269a12ecd Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> (cherry picked from commit e5f295c8a458dcd336f7cf3768ca62aded69e659)
* QMenuBar: Mark items as dirty when switching away from native menu barTor Arne Vestbø2023-03-131-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | QMenuBarPrivate::updateGeometries() returns early if the native menu bar is in use, skipping the call to calcActionRects, so the action rects are not in sync with the actions in this mode. When switching to non-native menu bars, we would then crash in QMenuBar::minimumSizeHint() because we're iterating the action rects assuming the match the actions. To fix this we need to ensure the action rects are computed by our call to updateGeometries() in setNativeMenuBar(), which we can do by explicitly marking the items as dirty. Note that it's currently not possible to switch back to the native menu bar, as the native menu bar is populated in QMenuBar::actionEvent via QEvent::ActionAdded, and we're not doing anything to re-add these actions once we've recreated the native menu bar. Fixes: QTBUG-102107 Change-Id: I7cf2b25539da633727693f5894ea22ea0d0d9aa5 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io> (cherry picked from commit 5a9fbae0ba12622e12287aa1c89f4f3d58379ecc) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* Fix listed files for sha3_keccakKai Köhne2023-03-131-1/+1
| | | | | | | | | | | | JSON allows duplicated fields, but the last one will prevail. Therefore move the new "comment" before the actual list of files. Amends fa4b7495b741c3e7943860c5ff15212afceda710. Change-Id: I06874745c8c51e55d79d7a373236cc8d9151079d Reviewed-by: Marc Mutz <marc.mutz@qt.io> (cherry picked from commit d4dba80863324302f9d5d26b184352845263adc3) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* GL paint engine: Fix drawPixmapFragments when using buffer objectsLaszlo Agocs2023-03-131-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Until recently the buffer object-based code path (so not client-side pointers) was only hit with a core profile context. This changed at some point in 6.4 and later to support WebGL (that has no client-side pointers, unlike OpenGL ES 2.0 it is based on). Now buffer objects are preferred over client-side pointers, always. Problem is, drawPixmapFragment() was never functional on this code path, it seems. Expecting that transferMode() does all the uploadData() needed is wrong. transferMode() bails out if the mode is the same as before, and that's exactly what happens when an application calls drawPixmapFragments() on the painter twice, after each other. How exactly this works with client-side pointers is not fully clear, but presumably the data buffer address stays the same so all pointers passed in to the glVertexAttribPointer calls are valid, and it sources the data for each draw call (probably), thus the rendering is all correct even though only the first, not the second, drawPixmapFragment() led to calling uploadData() internally. Amends e487b07e18f1cb7ff126744be57b2ae1b9839c6c although this patch on its own is just as applicable pre-6.4 as well (to fix drawPixmapFragments when using a core profile context). Fixes: QTBUG-111416 Change-Id: I2ad358424e613192a51b99b937aef7660f5dbe08 Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io> (cherry picked from commit d6c5a2f9177f427d14aae64d111c172d1bf28b6c) Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* QHash: tame HasQHashSingleArgOverload ODR violationsGiuseppe D'Angelo2023-03-114-16/+46
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | qhashfunctions.h defines a catch-all 2-arguments qHash(T, seed) in order to support datatypes that implement a 1-argument overload of qHash (i.e. qHash(Type)). The catch-all calls the 1-argument overload and XORs the result with the seed. The catch-all is constrained on the existence of such a 1-argument overload. This is done in order to make the catch-all SFINAE-friendly; otherwise merely instantiating the catch-all would trigger a hard error. Such an error would make it impossible to build a type trait that detects if one can call qHash(T, size_t) for a given type T. The constraint itself is called HasQHashSingleArgOverload and lives in a private namespace. It has been observed that HasQHashSingleArgOverload misbehaves for some datatypes. For instance, HasQHashSingleArgOverload<int> is actually false, despite qHash(123) being perfectly callable. (The second argument of qHash(int, size_t) is defaulted, so the call *is* possible.) -- Why is HasQHashSingleArgOverload<int> false? This has to do with how HasQHashSingleArgOverload<T> is implemented: as a detection trait that checks if qHash(declval<T>()) is callable. The detection itself is not a problem. Consider this code: template <typename T> constexpr bool HasQHashSingleArgOverload = /* magic */; class MyClass {}; size_t qHash(MyClass); static_assert(HasQHashSingleArgOverload<MyClass>); // OK Here, the static_assert passes, even if qHash(MyClass) (and MyClass itself) were not defined at all when HasQHashSingleArgOverload was defined. This is nothing but 2-phase lookup at work ([temp.dep.res]): the detection inside HasQHashSingleArgOverload takes into account the qHash overloads available when HasQHashSingleArgOverload was declared, as well as any other overload declared before the "point of instantiation". This means that qHash(MyClass) will be visible and detected. Let's try something slightly different: template <typename T> constexpr bool HasQHashSingleArgOverload = /* magic */; size_t qHash(int); static_assert(HasQHashSingleArgOverload<int>); // ERROR This one *does not work*. How is it possible? The answer is that 2-phase name lookup combines the names found at definition time with the names _found at instantiation time using argument-dependent lookup only_. `int` is a fundamental type and does not participate in ADL. In the example, HasQHashSingleArgOverload has actually no qHash overloads to even consider, and therefore its detection fails. You can restore detection by moving the declaration of the qHash(int) overload *before* the definition of HasQHashSingleArgOverload, so it's captured at definition time: size_t qHash(int); template <typename T> constexpr bool HasQHashSingleArgOverload = /* magic */; static_assert(HasQHashSingleArgOverload<int>); // OK! This is why HasQHashSingleArgOverload<int> is currently returning `false`: because HasQHashSingleArgOverload is defined *before* all the qHash(fundamental_type) overloads in qhashfunctions.h. -- Now consider this variation of the above, where we keep the qHash(int) overload after the detector (so, it's not found), but also prepend an Evil class implicitly convertible from int: struct Evil { Evil(int); }; size_t qHash(Evil); template <typename T> constexpr bool HasQHashSingleArgOverload = /* magic */; size_t qHash(int); static_assert(HasQHashSingleArgOverload<int>); // OK Now the static_assert passes. HasQHashSingleArgOverload is still not considering qHash(int) (it's declared after), but it's considering qHash(Evil). Can you call *that* one with an int? Yes, after a conversion to Evil. This is extremely fragile and likely an ODR violation (if not ODR, then likely falls into [temp.dep.candidate/1]). -- Does this "really matter" for a type like `int`? The answer is no. If HasQHashSingleArgOverload<int> is true, then a call like qHash(42, 123uz); will have two overloads in its overloads set: 1) qHash(int, size_t) 2) qHash(T, size_t), i.e. the catch-all template. To be pedantic, qHash<int>(const int &, size_t), that is, the instantiation of the catch-all after template type deduction for T (= int) ([over.match.funcs.general/8]). Although it may look like this is ambiguous as both calls have perfect matches for the arguments, 1) is actually a better match than 2) because it is not a template specialization ([over.match.best/2.4]). In other words: qHash(int, size_t) is *always* called when the argument is `int`, no matter the value of HasQHashSingleArgOverload<int>. The catch-all template may be added or not to the overload set, but it's a worse match anyways. -- Now, let's consider this code: enum MyEnum { E1, E2, E3 }; qHash(E1, 42uz); This code compiles, although we do not define any qHash overload specifically for enumeration types (nor one is defined by MyEnum's author). Which qHash overload gets called? Again there are two possible overloads available: 1) qHash(int, size_t). E1 can be converted to `int` ([conv.prom/3]), and this overload selected. 2) qHash(T, size_t), which after instantiation, is qHash<MyEnum>(const MyEnum &, size_t). In this case, 2) is a better match than 1), because it does not require any conversion for the arguments. Is 2) a viable overload? Unfortunately the answer here is "it depends", because it's subject to what we've learned before: since the catch-all is constrained by the HasQHashSingleArgOverload trait, names introduced before the trait may exclude or include the overload. This code: #include <qhashfunctions.h> enum MyEnum { E1, E2, E3 }; qHash(E1, 42uz); static_assert(HasQHashSingleArgOverload<MyEnum>); // ERROR will fail the static_assert. This means that only qHash(int, size_t) is in the overload set. However, this code: struct Evil { Evil(int); }; size_t qHash(Evil); #include <qhashfunctions.h> enum MyEnum { E1, E2, E3 }; qHash(E1, 42uz); static_assert(HasQHashSingleArgOverload<MyEnum>); // OK will pass the static_assert. qHash(Evil) can be called with an object of type MyEnum after an user-defined conversion sequence ([over.best.ics.general], [over.ics.user]: a standard conversion sequence, made of a lvalue-to-rvalue conversion + a integral promotion, followed by a conversion by constructor [class.conv.ctor]). Therefore, HasQHashSingleArgOverload<MyEnum> is true here; the catch-all template is added to the overload set; and it's a best match for the qHash(E1, 42uz) call. -- Is this a problem? **Yes**, and a huge one: the catch-all template does not yield the same value as the qHash(int, size_t) overload. This means that calculating hash values (e.g. QHash, QSet) will have different results depending on include ordering! A translation unit TU1 may have #include <QSet> #include <Evil> QSet<MyEnum> calculateSet { /* ... */ } And another translation unit TU2 may have #include <Evil> #include <QSet> // different order void use() { QSet<MyEnum> set = calculateSet(); } And now the two TUs cannot exchange QHash/QSet objects as they would hash the contents differently. -- `Evil` actually exists in Qt. The bug report specifies QKeySequence, which has an implicit constructor from int, but one can concoct infinite other examples. -- Congratulations if you've read so far. ========================= === PROPOSED SOLUTION === ========================= 1) Move the HasQHashSingleArgOverload detection after declaring the overloads for all the fundamental types (which we already do anyways). This means that HasQHashSingleArgOverload<fundamental_type> will now be true. It also means that the catch-all becomes available for all fundamental types, but as discussed before, for all of them we have better matches anyways. 2) For unscoped enumeration types, this means however an ABI break: the catch-all template becomes always the best match. Code compiled before this change would call qHash(int, size_t), and code compiled after this change would call the catch-all qHash<Enum>(Enum, size_t); as discussed before, the two don't yield the same results, so mixing old code and new code will break. In order to restore the old behavior, add a qHash overload for enumeration types that forwards the implementation to the integer overloads (using qToUnderlying¹). (Here I'm considering the "old", correct behavior the one that one gets by simply including QHash/QSet, declaring an enumeration and calling qHash on it. In other words, without having Evil around before including QHash.) This avoids an ABI break for most enumeration types, for which one does not explicitly define a qHash overload. It however *introduces* an ABI break for enumeration types for which there is a single-argument qHash(E) overload. This is because - before this change, the catch-all template was called, and that in turn called qHash(E) and XOR'ed the result with the seed; - after this change, the newly introduced qHash overload for enumerations gets called. It's very likely that it would not give the same result as before. I don't have a solution for this, so we'll have to accept the ABI break. Note that if one defines a two-arguments overload for an enum type, then nothing changes there (the overload is still the best match). 3) Make plans to kill the catch-all template, for Qt 7.0 at the latest. We've asked users to provide a two-args qHash overload for a very long time, it's time to stop working around that. 4) Make plans to switch from overloading qHash to specializing std::hash (or equivalent). Specializations don't overload, and we'd get rid of all these troubles with implicit conversions. -- ¹ To nitpick, qToUnderlying may select a *different* overload than the one selected by an implicit conversion. That's because an unscoped enumeration without a fixed underlying type is allowed to have an underlying type U, and implicitly convert to V, with U and V being two different types (!). U is "an integral type that can represent all the enumerator values" ([dcl.enum/7]). V is selected in a specific list in a specific order ([conv.prom]/3). This means that in theory a compiler can take enum E { E1, E2 }, give it `unsigned long long` as underlying type, and still allow for a conversion to `int`. As far as I know, no compiler we use does something as crazy as that, but if it's a concern, it needs to be fixed. [ChangeLog][Deprecation Notice] Support for overloads of qHash with only one argument is going to be removed in Qt 7. Users are encouraged to upgrade to the two-arguments overload. Please refer to the QHash documentation for more information. [ChangeLog][Potentially Binary-Incompatible Changes] If an enumeration type for which a single-argument qHash overload has been declared is being used as a key type in QHash, QMultiHash or QSet, then objects of these types are no longer binary compatible with code compiled against an earlier version of Qt. It is very unlikely that such qHash overloads exist, because enumeration types work out of the box as keys Qt unordered associative containers; users do not need to define qHash overloads for their custom enumerations. Note that there is no binary incompatibity if a *two* arguments qHash overload has been declared instead. Fixes: QTBUG-108032 Fixes: QTBUG-107033 Change-Id: I2ebffb2820c553e5fdc3a341019433793a58e3ab Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> (cherry picked from commit fb4bc5fa262336504e0f28603658bb2572796ce5) Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* QMimeDatabase: add a test to ensure we can detect Unix specialsThiago Macieira2023-03-102-0/+82
| | | | | | Change-Id: I570832c9ac8b4e03bde8fffd173f7e743f42f22b Reviewed-by: David Faure <david.faure@kdab.com> (cherry picked from commit 9d2f3e63b86b48fd402aa126569746c9111f5ccc)
* tst_QTimer: suppress the cross-thread timer stopping warningsThiago Macieira2023-03-101-0/+1
| | | | | | | | | | | | | | | | | | | Both QTimer's and QObjectPrivate's destructors print a warning if the current object lives on another thread and has an active timer: QWARN : tst_QTimer::moveToThread() QObject::killTimer: Timers cannot be stopped from another thread QWARN : tst_QTimer::moveToThread() QObject::~QObject: Timers cannot be stopped from another thread This timer is used to ask the thread to quit, which in turn allows us to destroy this QObject without a cross-thread warning. Because it's already fired once and done its duty, we can make sure it's not active by simply making it single-shot. Change-Id: Ieec322d73c1e40ad95c8fffd17465067b27c044b Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> Reviewed-by: Marc Mutz <marc.mutz@qt.io> (cherry picked from commit 5f32c9edce208125f642c86a4bc9e73564386243) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* QVarLengthArray: fix UBs in insert(it, n, v) ([basic.life], invariants)Marc Mutz2023-03-101-22/+6
| | | | | | | | | | | | | | | | | In the same vein as e24df8bc726d12e80f3f1d14834f9305586fcc98 for emplace(it, v) and insert(it, rv), this patch addresses the identical issues in insert(it, n, v). The solution is unsurprisingly the same: q_rotate() after a resize(size() + n, v). The 6.2- code will need to look different, because resize(n, v) didn't exist there. Change-Id: I1ce91969abc20f2a1e5d05a8545b009a2e0994f6 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io> (cherry picked from commit fed5f2445480f7cf045e93761dc902f771cbf3da) Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* qstrncpy(): document that we don't implement strncpy() fill-all-[dst,len)Marc Mutz2023-03-101-0/+4
| | | | | | | | | | The Windows version didn't, ever since we started using strncpy_s(), and we might change the non-Windows version, too. Change-Id: Iee1c09674d296be806d4be42b1891940120b4a01 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> (cherry picked from commit cbb484b713f2ed7d1f18d8e9ecbc74d7c59a3c07) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* tst_QVariant: check fromValue() with a non-default-constructible typeMarc Mutz2023-03-101-1/+1
| | | | | | | | | | | | | | | | | | | ... by just using fromValue() instead of the QVariant(QMetaType, void*) ctor. Code coverage isn't reduced, because fromValue() will, of course, call that exact ctor itself. Amends df0085d3a28005e84eb7688cc2575a121ba322aa. Task-number: QTBUG-105140 Task-number: QTBUG-111598 Change-Id: I02464803090fa7078947625616e6fc20e623ef31 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> (cherry picked from commit fd17eaca8396288f34e89f5f66d2779c42ffc414) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* tst_QCryptographicHash: Extract Method ensureLargeData()Marc Mutz2023-03-101-1/+11
| | | | | | | | | ... to make large data usable from other test functions. Change-Id: I302070121a8bb49f373c7711bc3ab9e6418874ef Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io> (cherry picked from commit f7ea9b36b7c56bb288f3ea55f587d2ccb8a9b7fa) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* Fix overflow in SHA-3/KeccakMårten Nordheim2023-03-104-2/+64
| | | | | | | | | | | | | state->rate is always larger than or equal to state->bitsInQueue; when bitsInQueue == rate the queue is consumed and bitsInQueue is set to 0 again. Done-with: Marc Mutz <marc.mutz@qt.io> Change-Id: I56d268a19fb3cd542cc027edc962253f09d97a14 Reviewed-by: Marc Mutz <marc.mutz@qt.io> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> (cherry picked from commit fa4b7495b741c3e7943860c5ff15212afceda710) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* Simplify and relax UTF-8 locale override machinery for DarwinEdward Welbourne2023-03-101-6/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There's no need to try the various permutations of the language and region specific locales, as they all point back to the same CTYPE in /usr/share/locale/UTF-8/LC_CTYPE In addition, processes started from launchd come with an empty locale environment (LC_ALL/LC_*/LANG), and hence will default to the "C"/POSIX locale, even after picking up the environment. This primarily applies to applications launched from Finder, but also affects processes launched as background services. And since a child process will inherit its parent's environment the empty locale environment is propagated when running apps from IDEs such as Qt Creator or Xcode, or commands in an SSH login session (as sshd is a background service), unless the environment has been explicitly set up by the shell (Zsh). Since neither of these situations is the result of user misconfiguration, it makes little sense to spit our a warning. We however still warn if we detect that the character encoding has changed from the default "C" encoding, or if the encoding is "C", but we detect that the user has modified any of the relevant locale environment variables, as this indicates either a change in the system default behavior, or that the user has explicitly requested a "C" locale, which is wrong. Done-with: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Fixes: QTBUG-111443 Change-Id: I6fd14d1f8adddc2914d6ff4d3b5ad34a3871ef82 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> (cherry picked from commit ac6c7aa12fb6203855a745b2c1b4a1e07149b4af) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* QCoreApplication::initLocale(): Improve warning on failureEdward Welbourne2023-03-101-8/+18
| | | | | | | | | | | | | | | | | | | | | | If we fail to set a UTF-8 locale, the warning claims Qt shall use a UTF-8 locale, for which it reports an empty string, when in fact it isn't using a UTF-8 locale, although it'll interact with the system as if it were. Also, the user is liable to understand "system locale encoding" as referring to the underlying system rather than whatever they may have configured in a local shell; and a non-native speaker assures me the use of "shall" is also apt to confuse; so reword the messages. As the old locale is only needed for the code path prints the warning we can defer resolving it until we know we're going to use it, by querying the locale at that point. Done-with: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Change-Id: Ie6a6e7a707200e58335fcb64cb1584f0c307895a Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> (cherry picked from commit fff9395c2899841bdca07f400392595963d9ff93) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* Android: fix and document QStandardPaths behavior on different versionsAssam Boudjelthia2023-03-072-15/+81
| | | | | | | | | | | | | | | | | Partially revert e1440dd7bc1a5da9a536f88b9733d04ec8fa6e61 for Android versions below 11 which could take advantage of the manifest flag android:requestLegacyExternalStorage. And for other newer versions avoid returning them while adding a note to the docs about this behavior. Fixes: QTBUG-108013 Fixes: QTBUG-104892 Task-number: QTBUG-81860 Change-Id: I10851c20e2831bddaa329164c941e2ae71f0a497 Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io> Reviewed-by: Rami Potinkara <rami.potinkara@qt.io> (cherry picked from commit 81a748efb742092f5a0a1c33b8340478e52cc79f) Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* qsimd_p.h: remove LZCNT feature from the ARCH_HASWELL listThiago Macieira2023-03-041-2/+2
| | | | | | | | | | | | | | | | | | And for good measure, I'm also removing BMI2. The one we really care about ensuring gets enabled instead of -mavx2 is FMA anyway. Complements commit 29d3938aa56663f09666a0ac58b33e70e00abff2 (which in turn complemented commit a98cf15ed1b57aee695de01b04a974637b2cd44a), which removed BMI1 because AMD introduced it before AVX2. Looks like they also introduced LZCNT in some earlier processor too (family 10h) or GCC 12 began emitting __LZCNT__ for that family -- IIRC the AMD feature list was bigger than just the lzcnt instruction. Fixes: QTBUG-111698 Change-Id: I7f354474adce419ca6c2fffd1748f5b24f69a692 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> (cherry picked from commit 8413824ca00188fa36b6adf46d4a5bddb9515ec7) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* Tidy up QCoreApplicationPrivate::initLocale()'s #if-eryEdward Welbourne2023-03-021-12/+20
| | | | | | | | | | | | | | | | | | Explain each exception cleanly and as itself, thereby avoiding the need for long and tangled #if-ery conditions. Make sure to setlocale(LC_ALL, "") everywhere we think we have initialized the locale, including Integrity - it plainly has setlocale(), since we call it for LC_CTYPE - since we should at least give it the chance to set its implementation-defined default locale, instead of the standard-defined POSIX locale in use on entry to main(). Done-with: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Change-Id: Iab00984ba45dfc9a324b6a3c12e3d330b655a5a9 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> (cherry picked from commit 91bea4470ea25c1e6fe7e46559a37bdd7b703b63) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* Android: avoid duplicate paths from QStandardPaths::standardLocations()Assam Boudjelthia2023-03-021-49/+37
| | | | | | | | | | | Don't return duplicate path entries from calling QStandardPaths::standardLocations() and as a pass by no empty entries either. Task-number: QTBUG-104892 Change-Id: If05b20d2c07d75428cb572d9549a39cf21bdef99 Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io> (cherry picked from commit 30014ed850bbe62005b4aa789586b01c1281cab4)
* QVarLengthArray: Extract Method QtPrivate::q_rotate()Marc Mutz2023-03-022-6/+21
| | | | | | | | | It seems like we'll need this in lots of other places, too. Change-Id: I767495c2eb02a2fc85b6f835ad9003fa89315c7f Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io> (cherry picked from commit 147dd6e82f41778060bdadf9b2a792bd11e1bc1e)
* Update to Freetype 2.13.0Eskil Abrahamsen Blomfeldt2023-03-02514-7721/+6158
| | | | | | | | | | | | Also adds a file to patches which is a required modification to the update in order to make it compile. Fixes: QTBUG-111536 Change-Id: Iaabc1b7736cfd98217a8aff2b7f9bc65402d0451 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> (cherry picked from commit 18aa3309a4e4b5a874298af1243095db9aa207d3) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* Rely on Windows to generate CF_TEXT when active code page is UTF-8Ilya Fedin2023-03-021-2/+3
| | | | | | | | | | | | | | | | | | It's possible since Windows 10 1903 to set the active code page to UTF-8 using the manifest. In that mode, QString::toLocal8Bit converts to UTF-8 and the legacy programs not using UTF-8 codepage can't interpret the value. We can detect whether the UTF-8 code page is used, and in that case only provide data as CF_UNICODETEXT. Windows will then synthesize the CF_TEXT format when the clipboard data is consumed, using the right code page for the target application. https://learn.microsoft.com/en-us/windows/apps/design/globalizing/use-utf8-code-page Change-Id: Ie024a618556d9bb5b5c7ac70507d279b959ff6db Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> (cherry picked from commit 481771a331b904810ce3da459d4b6293a83fcec0)
* Android: document limitation for QFile::copy() operation for content uriAssam Boudjelthia2023-03-011-0/+6
| | | | | | | | | | | Document that the operation is not supported. Task-number: QTBUG-98974 Change-Id: I1faacb7af7e11943d6da62313ed104fda063d30d Reviewed-by: Rami Potinkara <rami.potinkara@qt.io> Reviewed-by: Nicholas Bennett <nicholas.bennett@qt.io> (cherry picked from commit 7af39be05295c5743d04ef83468a0d250141b145) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* Update Harfbuzz to 7.0.1Eskil Abrahamsen Blomfeldt2023-03-01338-28976/+44685
| | | | | | | | | | | | | | This is the 6.4-specific update of Harfbuzz, since Harfbuzz was currently on an older version in 6.4 compared to other branches. This also backports the change to the qtextlayout test that was done on other branches for the 6.0.0 update. Pick-to: 6.4.3 Fixes: QTBUG-111535 Change-Id: Ie8217f1541a02d3800142b88cf0007be0ed0d1e2 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* tst_qvarlengtharray: add test for QVLA(n) ctorMarc Mutz2023-03-011-0/+44
| | | | | | | | | | | Also add one for types that are neither copy- nor move-constructible. In contrast to resize(n), the QVLA(n) ctor worked for such types, so make sure it stays that way. Change-Id: If54fbc9dd6a4808175c4bcb0ffb492b33c879746 Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io> (cherry picked from commit e7c792ba7179c4c81fb2e26f66031ec81234b0d7) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* tst_QMutex: use constexpr variables instead of 'enum-trick'Marc Mutz2023-03-011-2/+2
| | | | | | | | | | | | C++20 doesn't like arithmetic with enums anymore. While this hasn't caused immediate pain, yet, fix it pro-actively for an imminent patch. As a drive-by, fix the missing space at start of comment. Change-Id: Id08bb227c587bc7b900c593a7b6d2655ca32eefd Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> (cherry picked from commit b8966021ffb2cfddc77aee6dbe145eb74ef22f9d) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* Avoid resetting CMAKE_AUTOMOC_MACRO_NAMESAmir Masoud Abdol2023-03-011-1/+2
| | | | | | | | | | | | | Instead of overwriting the CMAKE_AUTOMOC_MACRO_NAMES, we try to append our desired moc names to it, and don't get rid of what's there. Thanks for Friedrich W. H. Kossebau for filling a descriptive bug report and offering a solution as well. Fixes: QTBUG-110497 Change-Id: I582af431151cacfe24085b890ae9dba0a0e53f3f Reviewed-by: Alexey Edelev <alexey.edelev@qt.io> (cherry picked from commit 38ee9ee8497291c899c2a72e0ed24bfffe9ced4e)
* SQLite: Update SQLite to v3.41.0Andy Shaw2023-02-283-1354/+2979
| | | | | | | | | [ChangeLog][QtSQL][SQLite] Updated SQLite to v3.41.0 Fixes: QTBUG-111539 Change-Id: Ia90939bf57222a290fe7bcb3741013c2576eec13 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> (cherry picked from commit 8f33a0424f5799a87d6d56691f3e47a09156c720)
* QAbtractItemView: deselect before click opens editorVolker Hilsheimer2023-02-282-17/+14
| | | | | | | | | | | | | | | A click on the selected item should deselect all other items before editing starts. Remove the part of the test case that assumes that we can have multiple items selected in ExtendedSelection mode, and click on an item to start editing while maintaining selection. That can never happen. Fixes: QTBUG-111131 Change-Id: I0312eed4614502cfb77eca26d3f7615427493d7d Reviewed-by: Axel Spoerl <axel.spoerl@qt.io> (cherry picked from commit 3f2d02e2f4436ace5f0fbbf432878a963f5ee969) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* QAbstractItemView: execute posted layouts before paintingVolker Hilsheimer2023-02-281-0/+6
| | | | | | | | | | | | | | | | | | | | | | | tst_QListView::moveLastRow asserts now and again, unless only that test function is running. We repeat failing test functions individually, so this never blocked CI. The reason seems to be that we get a paint event only for the viewport, after the item model's structure has been changed by the test. Moving rows does trigger a delayed layout, and in some circumstances the entire view is updated, rather than just the viewport. But if only the viewport is updated, then layout execution in QAbstractItemView::event never happens, and the data structure that the paintEvent implementation relies on is outdated and contains invalid item pointers, resulting in an assert. If we need to execute delayed layouts when the entire view gets painted, then we also need to execute them when only the viewport gets painted. Change-Id: Ibb46c2315825d99c82b884226817c494a3d95975 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io> (cherry picked from commit 85ab3f26656b2b51eaa5b5247cc0d90d401fd8df) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* SQL/OCI: Correctly calculate utc offset string when icu is not availableChristian Ehrlicher2023-02-281-2/+11
| | | | | | | | | | | | | | When ICU is not available, QTimeZone::displayName() does not return a valid timezone offset string so the OCI driver will get a wrong utc offset string and inserting a QDateTime will go wrong. Fix it by creating the utc offset string by ourself (toOffsetString() inside qdatetime.cpp is static and therefore not accessible for us). Fixes: QTBUG-111275 Change-Id: Ib724d760688614e162246e1e028ee5e004cc9477 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> (cherry picked from commit 6b9977c4adfa0ffd9cb87b4aec288c7a335aef6c) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* QStyleSheet: never treat styled scrollbars as transientVolker Hilsheimer2023-02-284-20/+42
| | | | | | | | | | | | | | | | | | | | | | | | If a style sheet is applied to a scrollbar, then we cannot treat it as transient, as the QStyleSheetStyle doesn't implement any fade-in/out animation logic. And we also need to set the overlap to 0 (in both the style sheet and the macOS style) if the scrollbars are not transient; otherwise the opaque scrollbar will be placed on top of the content. Since a style sheet might only apply to a scrollbar based on its orientation, we also have to pass the style option through to all calls of the styleHint function. And since that function is also called from other QStyle implementations in the macOS style, we have to make sure that we call styleHint() on the widget's style to get the correct value based on the style sheet. Fixes: QTBUG-63381 Change-Id: Ic67ce3a7cb5089f885dabfd5a1951e3029915446 Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io> Reviewed-by: Axel Spoerl <axel.spoerl@qt.io> (cherry picked from commit f5105ea89a76d6051f058834d99385582cc61f85) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* QtGui: Use single precision for mouseMove detectionVolker Hilsheimer2023-02-281-0/+22
| | | | | | | | | | | | | | | | | | | | QGuiApplication::lastCursorPosition is a QPointF, and (at least on macOS) compares always different from the QPointF stored in the event. This might be due to the translation from system coordinates to QPointF introducing noise. The result is that even a simple button press causes mouseMove events to be delivered. To prevent this event noise, overload equality operators for the special QLastCursorPosition type when comparing with QPointF to explicitly use single precision comparison. Fixes: QTBUG-111170 Change-Id: I82ea23ac9f4fa80c55c9c5c742527dd7ee74fd99 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io> (cherry picked from commit 519e3963fad0761bac5629b1f6eabc58060265c0) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* Examples doc: Tag 'To Do List Example' for iOSDoris Verria2023-02-271-7/+14
| | | | | | | | | | | | All QtQuickControls examples are marked for android by default. However, the To Do List example is iOS specific so don't include it. Add it to the list of iOS tags instead. Fixes: QTBUG-111426 Change-Id: Ic89d6b40d263f81ed402a2064f2e44b2fa826940 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io> (cherry picked from commit 276bf8cb239a678e9c9b4b5b36cfa7015780b292) Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Windows drag&drop: Use correct window for drag target processingOliver Wolff2023-02-271-1/+2
| | | | | | | | | | | | | | | GetFocus will return the window that currently has keyboard focus. This is not what we want for drag and drop handling though. Use the window under mouse and process events for that window when doing the touch/pen input workaround. If no window is found we fall back to the focus window. Followup to 31e7790102b260344893eaa8bf8b7b1a0f95e3b7 Fixes: QTBUG-111149 Change-Id: Ib8233debc267df0cc19b21c1dc5c6881d018d84a Reviewed-by: Timothée Keller <timothee.keller@qt.io> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> (cherry picked from commit c912bde52a1b85a782db6aed8d6f9917d597f58b) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* QListView: Reset style after using a temporary proxyVolker Hilsheimer2023-02-271-0/+5
| | | | | | | | | | Amends 0242be90606b377864c6fd02d5a8e0afaf635acf, and removes unwanted side effect of having a modified style behavior for later functions. Change-Id: If3dff0d7ab9e6c6c10e7a92d0a3eaff98fa1457f Reviewed-by: Axel Spoerl <axel.spoerl@qt.io> (cherry picked from commit f75b29fbbde79d66ee539162441a007a90035b96) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>