[neon/qt/qtquickcontrols2/Neon/unstable] debian: Add patches from KDE's Qt 5 Patch Collection up to 2022-06-17.
Dmitry Shachnev
null at kde.org
Mon Apr 29 17:44:21 BST 2024
Git commit 0af2f498f52819fd0a1628145f8d833ca00b1dc9 by Dmitry Shachnev.
Committed on 17/07/2022 at 21:33.
Pushed by jriddell into branch 'Neon/unstable'.
Add patches from KDE's Qt 5 Patch Collection up to 2022-06-17.
This removes file which erroneously had a commercial-only license header.
M +1 -0 debian/changelog
A +172 -0 debian/patches/0001-Unset-mouseGrabberPopup-if-it-s-removed-from-childre.patch
A +76 -0 debian/patches/0002-Ensure-we-don-t-crash-when-changing-sizes-after-clea.patch
A +44 -0 debian/patches/0003-QQuickAction-don-t-grab-the-same-shortcut-multiple-t.patch
A +80 -0 debian/patches/0004-QQuickAbstractButton-fix-crash-on-destruction.patch
A +423 -0 debian/patches/0005-Revert-Allow-creation-of-custom-QQuickPopupItem-deri.patch
M +5 -0 debian/patches/series
https://invent.kde.org/neon/qt/qtquickcontrols2/-/commit/0af2f498f52819fd0a1628145f8d833ca00b1dc9
diff --git a/debian/changelog b/debian/changelog
index 9e58c15..58fd240 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -4,6 +4,7 @@ qtquickcontrols2-opensource-src (5.15.5+dfsg-1) UNRELEASED; urgency=medium
* New upstream release.
* Bump Qt build-dependencies to 5.15.5.
* Use symver directive to catch all private symbols at once.
+ * Add patches from KDE's Qt 5 Patch Collection up to 2022-06-17.
-- Debian Qt/KDE Maintainers <debian-qt-kde at lists.debian.org> Sun, 03 Jul 2022 16:44:40 +0300
diff --git a/debian/patches/0001-Unset-mouseGrabberPopup-if-it-s-removed-from-childre.patch b/debian/patches/0001-Unset-mouseGrabberPopup-if-it-s-removed-from-childre.patch
new file mode 100644
index 0000000..aca89a4
--- /dev/null
+++ b/debian/patches/0001-Unset-mouseGrabberPopup-if-it-s-removed-from-childre.patch
@@ -0,0 +1,172 @@
+From bfdaef37a08a24f043e7b24023ae3835e03ef68a Mon Sep 17 00:00:00 2001
+From: David Redondo <qt at david-redondo.de>
+Date: Mon, 19 Jul 2021 10:06:17 +0200
+Subject: [PATCH] Unset mouseGrabberPopup if it's removed from children
+
+The mouseGrabberPopup is supposed to be unset in handleRelease, however
+when the exit transition of the mouseGrabberPopup (that closed itself on
+button press) finishes before the release event is delivered, it
+unparents itself from the overlay (see
+QQuickPopupPrivate::finalizeExitTransition) and the overlay sets itself
+invisible if there is nothing else visible in it. Because the overlay
+is not visible it handles no events anymore and the release is missed
+and the grabber is never unset. When opening another non-modal popup
+the overlay then will continue forwarding the events to now invisible
+popup.
+So when the overlay loses the currently grabbing popup as a child we need
+to reset mouseGrabberPopup.
+
+Fixes: QTBUG-95259
+Change-Id: I3c832d47f3cee216b81ef1b5cb7dd77bf4149991
+Reviewed-by: Mitch Curtis <mitch.curtis at qt.io>
+(adapted from commit d07ee1345acd8100fa5cbb7f05c0aaf5f87f4cae)
+
+(cherry picked from commit 1a59ef4218658ffc476909ef4fca13d6cf86d04b)
+---
+ src/quicktemplates2/qquickoverlay.cpp | 5 +-
+ .../data/releaseAfterExitTransition.qml | 78 +++++++++++++++++++
+ tests/auto/qquickpopup/tst_qquickpopup.cpp | 29 +++++++
+ 3 files changed, 111 insertions(+), 1 deletion(-)
+ create mode 100644 tests/auto/qquickpopup/data/releaseAfterExitTransition.qml
+
+--- a/src/quicktemplates2/qquickoverlay.cpp
++++ b/src/quicktemplates2/qquickoverlay.cpp
+@@ -399,8 +399,11 @@ void QQuickOverlay::itemChange(ItemChange change, const ItemChangeData &data)
+ Q_D(QQuickOverlay);
+ QQuickItem::itemChange(change, data);
+
+- if (change == ItemChildAddedChange || change == ItemChildRemovedChange)
++ if (change == ItemChildAddedChange || change == ItemChildRemovedChange) {
+ setVisible(!d->allDrawers.isEmpty() || !childItems().isEmpty());
++ if (data.item->parent() == d->mouseGrabberPopup)
++ d->setMouseGrabberPopup(nullptr);
++ }
+ }
+
+ void QQuickOverlay::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
+--- /dev/null
++++ b/tests/auto/qquickpopup/data/releaseAfterExitTransition.qml
+@@ -0,0 +1,78 @@
++/****************************************************************************
++**
++** Copyright (C) 2021 The Qt Company Ltd.
++** Contact: https://www.qt.io/licensing/
++**
++** This file is part of the test suite of the Qt Toolkit.
++**
++** $QT_BEGIN_LICENSE:BSD$
++** Commercial License Usage
++** Licensees holding valid commercial Qt licenses may use this file in
++** accordance with the commercial license agreement provided with the
++** Software or, alternatively, in accordance with the terms contained in
++** a written agreement between you and The Qt Company. For licensing terms
++** and conditions see https://www.qt.io/terms-conditions. For further
++** information use the contact form at https://www.qt.io/contact-us.
++**
++** BSD License Usage
++** Alternatively, you may use this file under the terms of the BSD license
++** as follows:
++**
++** "Redistribution and use in source and binary forms, with or without
++** modification, are permitted provided that the following conditions are
++** met:
++** * Redistributions of source code must retain the above copyright
++** notice, this list of conditions and the following disclaimer.
++** * Redistributions in binary form must reproduce the above copyright
++** notice, this list of conditions and the following disclaimer in
++** the documentation and/or other materials provided with the
++** distribution.
++** * Neither the name of The Qt Company Ltd nor the names of its
++** contributors may be used to endorse or promote products derived
++** from this software without specific prior written permission.
++**
++**
++** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
++** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
++** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
++** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
++** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
++** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
++**
++** $QT_END_LICENSE$
++**
++****************************************************************************/
++
++import QtQuick 2.15
++import QtQuick.Controls 2.15
++
++ApplicationWindow {
++ id: window
++ width: 400
++ height: 400
++ title: "releaseAfterExitTransition"
++
++ property alias popup: popup
++ property alias modalPopup: modalPopup
++
++ Popup {
++ id: popup
++ y: parent.height - height
++ width: 50
++ height: 50
++ }
++
++ Popup {
++ id: modalPopup
++ modal: true
++ y: parent.height - height
++ width: 50
++ height: 50
++ exit: Transition { PauseAnimation { duration: 100 } }
++ }
++}
+--- a/tests/auto/qquickpopup/tst_qquickpopup.cpp
++++ b/tests/auto/qquickpopup/tst_qquickpopup.cpp
+@@ -97,6 +97,7 @@ private slots:
+ void invisibleToolTipOpen();
+ void centerInOverlayWithinStackViewItem();
+ void destroyDuringExitTransition();
++ void releaseAfterExitTransition();
+ };
+
+ void tst_QQuickPopup::initTestCase()
+@@ -1459,6 +1460,34 @@ void tst_QQuickPopup::destroyDuringExitTransition()
+ QVERIFY(!button->isDown());
+ }
+
++void tst_QQuickPopup::releaseAfterExitTransition()
++{
++ QQuickApplicationHelper helper(this, "releaseAfterExitTransition.qml");
++ QVERIFY2(helper.ready, helper.failureMessage());
++
++ QQuickWindow *window = helper.window;
++ window->show();
++ QVERIFY(QTest::qWaitForWindowActive(window));
++
++ QQuickOverlay *overlay = QQuickOverlay::overlay(window);
++ QQuickPopup *modalPopup = window->property("modalPopup").value<QQuickPopup *>();
++ QQuickPopup *popup = window->property("popup").value<QQuickPopup *>();
++
++ modalPopup->open();
++ QTRY_VERIFY(modalPopup->isOpened());
++
++ QTest::mousePress(window, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1));
++ // wait until the transition is finished and the overlay hides itself
++ QTRY_VERIFY(!overlay->isVisible());
++ QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1));
++
++ popup->open();
++ QTRY_VERIFY(popup->isOpened());
++ QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(1, 1));
++ QTRY_VERIFY(!popup->isOpened());
++}
++
++
+ QTEST_QUICKCONTROLS_MAIN(tst_QQuickPopup)
+
+ #include "tst_qquickpopup.moc"
diff --git a/debian/patches/0002-Ensure-we-don-t-crash-when-changing-sizes-after-clea.patch b/debian/patches/0002-Ensure-we-don-t-crash-when-changing-sizes-after-clea.patch
new file mode 100644
index 0000000..9f7fc96
--- /dev/null
+++ b/debian/patches/0002-Ensure-we-don-t-crash-when-changing-sizes-after-clea.patch
@@ -0,0 +1,76 @@
+From d652727e3564d3a5f21788d9f75f903efbd4840c Mon Sep 17 00:00:00 2001
+From: Aleix Pol <aleixpol at kde.org>
+Date: Tue, 4 Jan 2022 16:34:16 +0100
+Subject: [PATCH] Ensure we don't crash when changing sizes after cleanup
+
+This addresses the problems I've seen during destruction. Only
+encountered it when using complex layouts on a DialogButtonBox.
+
+Pick-to: 6.2 6.3
+Change-Id: I54528c8a2b57b4798d90f7e2021e3127f8404762
+(cherry picked from commit 8b24d2bf1655e8491bdd74013579e09cd009e8fc in
+qtdeclarative)
+---
+ src/quicktemplates2/qquickcontainer.cpp | 5 +++--
+ src/quicktemplates2/qquickdialogbuttonbox.cpp | 8 +++++++-
+ 2 files changed, 10 insertions(+), 3 deletions(-)
+
+--- a/src/quicktemplates2/qquickcontainer.cpp
++++ b/src/quicktemplates2/qquickcontainer.cpp
+@@ -225,6 +225,7 @@ void QQuickContainerPrivate::cleanup()
+ QObject::disconnect(contentModel, &QQmlObjectModel::countChanged, q, &QQuickContainer::countChanged);
+ QObject::disconnect(contentModel, &QQmlObjectModel::childrenChanged, q, &QQuickContainer::contentChildrenChanged);
+ delete contentModel;
++ contentModel = nullptr;
+ }
+
+ QQuickItem *QQuickContainerPrivate::itemAt(int index) const
+@@ -436,7 +437,7 @@ void QQuickContainerPrivate::contentChildren_clear(QQmlListProperty<QQuickItem>
+ void QQuickContainerPrivate::updateContentWidth()
+ {
+ Q_Q(QQuickContainer);
+- if (hasContentWidth || qFuzzyCompare(contentWidth, implicitContentWidth))
++ if (hasContentWidth || qFuzzyCompare(contentWidth, implicitContentWidth) || !contentModel)
+ return;
+
+ contentWidth = implicitContentWidth;
+@@ -446,7 +447,7 @@ void QQuickContainerPrivate::updateContentWidth()
+ void QQuickContainerPrivate::updateContentHeight()
+ {
+ Q_Q(QQuickContainer);
+- if (hasContentHeight || qFuzzyCompare(contentHeight, implicitContentHeight))
++ if (hasContentHeight || qFuzzyCompare(contentHeight, implicitContentHeight) || !contentModel)
+ return;
+
+ contentHeight = implicitContentHeight;
+--- a/src/quicktemplates2/qquickdialogbuttonbox.cpp
++++ b/src/quicktemplates2/qquickdialogbuttonbox.cpp
+@@ -237,7 +237,7 @@ static QRectF alignedRect(Qt::LayoutDirection direction, Qt::Alignment alignment
+ void QQuickDialogButtonBoxPrivate::resizeContent()
+ {
+ Q_Q(QQuickDialogButtonBox);
+- if (!contentItem)
++ if (!contentItem || !contentModel)
+ return;
+
+ QRectF geometry = q->boundingRect().adjusted(q->leftPadding(), q->topPadding(), -q->rightPadding(), -q->bottomPadding());
+@@ -322,6 +322,9 @@ void QQuickDialogButtonBoxPrivate::updateLayout()
+ qreal QQuickDialogButtonBoxPrivate::getContentWidth() const
+ {
+ Q_Q(const QQuickDialogButtonBox);
++ if (!contentModel)
++ return 0;
++
+ const int count = contentModel->count();
+ const qreal totalSpacing = qMax(0, count - 1) * spacing;
+ qreal totalWidth = totalSpacing;
+@@ -341,6 +344,9 @@ qreal QQuickDialogButtonBoxPrivate::getContentWidth() const
+ qreal QQuickDialogButtonBoxPrivate::getContentHeight() const
+ {
+ Q_Q(const QQuickDialogButtonBox);
++ if (!contentModel)
++ return 0;
++
+ const int count = contentModel->count();
+ qreal maxHeight = 0;
+ for (int i = 0; i < count; ++i) {
diff --git a/debian/patches/0003-QQuickAction-don-t-grab-the-same-shortcut-multiple-t.patch b/debian/patches/0003-QQuickAction-don-t-grab-the-same-shortcut-multiple-t.patch
new file mode 100644
index 0000000..a42afa2
--- /dev/null
+++ b/debian/patches/0003-QQuickAction-don-t-grab-the-same-shortcut-multiple-t.patch
@@ -0,0 +1,44 @@
+From 5ac8f83ed1d34712d11a6b75a5bb1f877b24706a Mon Sep 17 00:00:00 2001
+From: Oliver Eftevaag <oliver.eftevaag at qt.io>
+Date: Wed, 19 Jan 2022 22:09:56 +0100
+Subject: [PATCH] QQuickAction: don't grab the same shortcut multiple times
+
+If the entry for the QQuickItem that the QQuickAction is set on has
+already grabbed the shortcut, then m_shortcutId is no longer 0 and we
+must not overwrite the value. Otherwise, the QQuickItem removing itself
+from the action might not remove the correct entry from Qt's shortcut
+map, leaving a dangling pointer behind.
+
+Multiple calls to QQuickActionPrivate::ShortcutEntry::grab are possible,
+because we grab the shortcut whenever the shortcut changes, or when an
+item representing the action becomes visible.
+
+The test case added reproduces this scenario by adding the action to a
+menu item and then making the menu explicitly visible, resulting in two
+calls to grab() which should be idempotent.
+
+Fixes: QTBUG-96551
+Fixes: QTBUG-96561
+Pick-to: 6.2
+Change-Id: I7d42a4f4c04f7d8759f2d0f24a133720f10e4c47
+Reviewed-by: Mitch Curtis <mitch.curtis at qt.io>
+Reviewed-by: Jarkko Koivikko <jarkko.koivikko at code-q.fi>
+Reviewed-by: Volker Hilsheimer <volker.hilsheimer at qt.io>
+
+(cherry picked from commit 45af5ef2f63704adc515e29260ad8c6aaf51f08e in
+qtdeclarative)
+---
+ src/quicktemplates2/qquickaction.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/src/quicktemplates2/qquickaction.cpp
++++ b/src/quicktemplates2/qquickaction.cpp
+@@ -145,7 +145,7 @@ int QQuickActionPrivate::ShortcutEntry::shortcutId() const
+
+ void QQuickActionPrivate::ShortcutEntry::grab(const QKeySequence &shortcut, bool enabled)
+ {
+- if (shortcut.isEmpty())
++ if (shortcut.isEmpty() || m_shortcutId)
+ return;
+
+ Qt::ShortcutContext context = Qt::WindowShortcut; // TODO
diff --git a/debian/patches/0004-QQuickAbstractButton-fix-crash-on-destruction.patch b/debian/patches/0004-QQuickAbstractButton-fix-crash-on-destruction.patch
new file mode 100644
index 0000000..e9c134a
--- /dev/null
+++ b/debian/patches/0004-QQuickAbstractButton-fix-crash-on-destruction.patch
@@ -0,0 +1,80 @@
+From 38dbeb8f5aa346f490003c75d9fa6e4b817f5bc8 Mon Sep 17 00:00:00 2001
+From: Ulf Hermann <ulf.hermann at qt.io>
+Date: Tue, 11 Jan 2022 12:42:47 +0100
+Subject: [PATCH] QQuickAbstractButton: fix crash on destruction
+
+If we listen for size changes we also need to remove the object listened
+to when it's deleted.
+
+Pick-to: 5.15 6.2 6.3
+Fixes: QTBUG-99644
+Change-Id: I613855ebd986b1e67685088020b88d8b070659cf
+Reviewed-by: Mitch Curtis <mitch.curtis at qt.io>
+(cherry picked from commit 720ffaeb60d43123522066e1de3a69ad551644aa in
+qtdeclarative)
+---
+ src/quicktemplates2/qquickabstractbutton.cpp | 11 +++++++++
+ .../qquickabstractbutton_p_p.h | 1 +
+ tests/auto/controls/data/tst_switch.qml | 23 +++++++++++++++++++
+ 3 files changed, 35 insertions(+)
+
+--- a/src/quicktemplates2/qquickabstractbutton.cpp
++++ b/src/quicktemplates2/qquickabstractbutton.cpp
+@@ -387,6 +387,17 @@ void QQuickAbstractButtonPrivate::itemImplicitHeightChanged(QQuickItem *item)
+ emit q->implicitIndicatorHeightChanged();
+ }
+
++void QQuickAbstractButtonPrivate::itemDestroyed(QQuickItem *item)
++{
++ Q_Q(QQuickAbstractButton);
++ QQuickControlPrivate::itemDestroyed(item);
++ if (item == indicator) {
++ indicator = nullptr;
++ emit q->implicitIndicatorWidthChanged();
++ emit q->implicitIndicatorHeightChanged();
++ }
++}
++
+ QQuickAbstractButton *QQuickAbstractButtonPrivate::findCheckedButton() const
+ {
+ Q_Q(const QQuickAbstractButton);
+--- a/src/quicktemplates2/qquickabstractbutton_p_p.h
++++ b/src/quicktemplates2/qquickabstractbutton_p_p.h
+@@ -109,6 +109,7 @@ public:
+
+ void itemImplicitWidthChanged(QQuickItem *item) override;
+ void itemImplicitHeightChanged(QQuickItem *item) override;
++ void itemDestroyed(QQuickItem *item) override;
+
+ // copied from qabstractbutton.cpp
+ static const int AUTO_REPEAT_DELAY = 300;
+--- a/tests/auto/controls/data/tst_switch.qml
++++ b/tests/auto/controls/data/tst_switch.qml
+@@ -608,4 +608,27 @@ TestCase {
+ mouseClick(control.indicator)
+ verify(control.activeFocus)
+ }
++
++ Component {
++ id: deletionOrder1
++ Item {
++ Image { id: innerImage }
++ Switch { indicator: innerImage }
++ }
++ }
++
++ Component {
++ id: deletionOrder2
++ Item {
++ Switch { indicator: innerImage }
++ Image { id: innerImage }
++ }
++ }
++
++ function test_deletionOrder() {
++ var control1 = createTemporaryObject(deletionOrder1, testCase)
++ verify(control1)
++ var control2 = createTemporaryObject(deletionOrder2, testCase)
++ verify(control2)
++ }
+ }
diff --git a/debian/patches/0005-Revert-Allow-creation-of-custom-QQuickPopupItem-deri.patch b/debian/patches/0005-Revert-Allow-creation-of-custom-QQuickPopupItem-deri.patch
new file mode 100644
index 0000000..170c11d
--- /dev/null
+++ b/debian/patches/0005-Revert-Allow-creation-of-custom-QQuickPopupItem-deri.patch
@@ -0,0 +1,423 @@
+From 59cc1cc5b3719713598a1f426d82a9d895b5dccb Mon Sep 17 00:00:00 2001
+From: Albert Astals Cid <aacid at kde.org>
+Date: Fri, 17 Jun 2022 15:24:13 +0200
+Subject: [PATCH] Revert "Allow creation of custom QQuickPopupItem-derived
+ types"
+
+This reverts commit 6b8a9673.
+
+The follow-up commit a063cd0b
+
+causes QTBUG-94764, so we don't need this enabling change for now.
+
+Task-number: QTBUG-83630
+Task-number: QTBUG-94764
+Pick-to: 5.15 6.1 6.2
+Change-Id: I1aec8571dcdcc2103d0e56c3d0bbfc4a4872d8db
+Reviewed-by: default avatarRichard Moe Gustavsen <richard.gustavsen at qt.io>
+
+(cherry-picked from qtdeclarative b69d071c10dfa4c5d7b62692b8a9d7bb659a4ab5)
+---
+ src/quicktemplates2/qquickmenu.cpp | 1 -
+ src/quicktemplates2/qquickmenu_p_p.h | 2 +-
+ src/quicktemplates2/qquickpopup.cpp | 17 +--
+ src/quicktemplates2/qquickpopup_p_p.h | 4 +-
+ src/quicktemplates2/qquickpopupitem.cpp | 70 +++++++------
+ src/quicktemplates2/qquickpopupitem_p.h | 121 ----------------------
+ src/quicktemplates2/qquickpopupitem_p_p.h | 80 +++++++++-----
+ src/quicktemplates2/quicktemplates2.pri | 1 -
+ 8 files changed, 100 insertions(+), 196 deletions(-)
+ delete mode 100644 src/quicktemplates2/qquickpopupitem_p.h
+
+--- a/src/quicktemplates2/qquickmenu.cpp
++++ b/src/quicktemplates2/qquickmenu.cpp
+@@ -222,7 +222,6 @@ QQuickMenuPrivate::QQuickMenuPrivate()
+ void QQuickMenuPrivate::init()
+ {
+ Q_Q(QQuickMenu);
+- QQuickPopupPrivate::init();
+ contentModel = new QQmlObjectModel(q);
+ }
+
+--- a/src/quicktemplates2/qquickmenu_p_p.h
++++ b/src/quicktemplates2/qquickmenu_p_p.h
+@@ -73,7 +73,7 @@ public:
+ return menu->d_func();
+ }
+
+- void init() override;
++ void init();
+
+ QQuickItem *itemAt(int index) const;
+ void insertItem(int index, QQuickItem *item);
+--- a/src/quicktemplates2/qquickpopup.cpp
++++ b/src/quicktemplates2/qquickpopup.cpp
+@@ -275,21 +275,9 @@ QQuickPopupPrivate::QQuickPopupPrivate()
+ void QQuickPopupPrivate::init()
+ {
+ Q_Q(QQuickPopup);
+- createPopupItem();
++ popupItem = new QQuickPopupItem(q);
+ popupItem->setVisible(false);
+ q->setParentItem(qobject_cast<QQuickItem *>(parent));
+- connectToPopupItem();
+-}
+-
+-void QQuickPopupPrivate::createPopupItem()
+-{
+- Q_Q(QQuickPopup);
+- popupItem = new QQuickPopupItem(q);
+-}
+-
+-void QQuickPopupPrivate::connectToPopupItem()
+-{
+- Q_Q(QQuickPopup);
+ QObject::connect(popupItem, &QQuickControl::paddingChanged, q, &QQuickPopup::paddingChanged);
+ QObject::connect(popupItem, &QQuickControl::backgroundChanged, q, &QQuickPopup::backgroundChanged);
+ QObject::connect(popupItem, &QQuickControl::contentItemChanged, q, &QQuickPopup::contentItemChanged);
+@@ -854,7 +842,8 @@ QQuickPopup::QQuickPopup(QObject *parent)
+ QQuickPopup::QQuickPopup(QQuickPopupPrivate &dd, QObject *parent)
+ : QObject(dd, parent)
+ {
+- dd.init();
++ Q_D(QQuickPopup);
++ d->init();
+ }
+
+ QQuickPopup::~QQuickPopup()
+--- a/src/quicktemplates2/qquickpopup_p_p.h
++++ b/src/quicktemplates2/qquickpopup_p_p.h
+@@ -96,9 +96,7 @@ public:
+ QQmlListProperty<QObject> contentData();
+ QQmlListProperty<QQuickItem> contentChildren();
+
+- virtual void init();
+- void createPopupItem();
+- void connectToPopupItem();
++ void init();
+ void closeOrReject();
+ bool tryClose(const QPointF &pos, QQuickPopup::ClosePolicy flags);
+
+--- a/src/quicktemplates2/qquickpopupitem.cpp
++++ b/src/quicktemplates2/qquickpopupitem.cpp
+@@ -53,33 +53,38 @@
+
+ QT_BEGIN_NAMESPACE
+
++class QQuickPopupItemPrivate : public QQuickPagePrivate
++{
++ Q_DECLARE_PUBLIC(QQuickPopupItem)
++
++public:
++ QQuickPopupItemPrivate(QQuickPopup *popup);
++
++ void implicitWidthChanged() override;
++ void implicitHeightChanged() override;
++
++ void resolveFont() override;
++ void resolvePalette() override;
++
++ QQuickItem *getContentItem() override;
++
++ void cancelContentItem() override;
++ void executeContentItem(bool complete = false) override;
++
++ void cancelBackground() override;
++ void executeBackground(bool complete = false) override;
++
++ int backId = 0;
++ int escapeId = 0;
++ QQuickPopup *popup = nullptr;
++};
++
+ QQuickPopupItemPrivate::QQuickPopupItemPrivate(QQuickPopup *popup)
+ : popup(popup)
+ {
+ isTabFence = true;
+ }
+
+-void QQuickPopupItemPrivate::init()
+-{
+- Q_Q(QQuickPopupItem);
+- q->setParent(popup);
+- q->setFlag(QQuickItem::ItemIsFocusScope);
+- q->setAcceptedMouseButtons(Qt::AllButtons);
+-#if QT_CONFIG(quicktemplates2_multitouch)
+- q->setAcceptTouchEvents(true);
+-#endif
+-#if QT_CONFIG(cursor)
+- q->setCursor(Qt::ArrowCursor);
+-#endif
+-
+-#if QT_CONFIG(quicktemplates2_hover)
+- // TODO: switch to QStyleHints::useHoverEffects in Qt 5.8
+- q->setHoverEnabled(true);
+- // setAcceptHoverEvents(QGuiApplication::styleHints()->useHoverEffects());
+- // connect(QGuiApplication::styleHints(), &QStyleHints::useHoverEffectsChanged, this, &QQuickItem::setAcceptHoverEvents);
+-#endif
+-}
+-
+ void QQuickPopupItemPrivate::implicitWidthChanged()
+ {
+ QQuickPagePrivate::implicitWidthChanged();
+@@ -156,15 +161,22 @@ void QQuickPopupItemPrivate::executeBackground(bool complete)
+ QQuickPopupItem::QQuickPopupItem(QQuickPopup *popup)
+ : QQuickPage(*(new QQuickPopupItemPrivate(popup)), nullptr)
+ {
+- Q_D(QQuickPopupItem);
+- d->init();
+-}
++ setParent(popup);
++ setFlag(ItemIsFocusScope);
++ setAcceptedMouseButtons(Qt::AllButtons);
++#if QT_CONFIG(quicktemplates2_multitouch)
++ setAcceptTouchEvents(true);
++#endif
++#if QT_CONFIG(cursor)
++ setCursor(Qt::ArrowCursor);
++#endif
+
+-QQuickPopupItem::QQuickPopupItem(QQuickPopupItemPrivate &dd) :
+- QQuickPage(dd, nullptr)
+-{
+- Q_D(QQuickPopupItem);
+- d->init();
++#if QT_CONFIG(quicktemplates2_hover)
++ // TODO: switch to QStyleHints::useHoverEffects in Qt 5.8
++ setHoverEnabled(true);
++ // setAcceptHoverEvents(QGuiApplication::styleHints()->useHoverEffects());
++ // connect(QGuiApplication::styleHints(), &QStyleHints::useHoverEffectsChanged, this, &QQuickItem::setAcceptHoverEvents);
++#endif
+ }
+
+ void QQuickPopupItem::grabShortcut()
+--- a/src/quicktemplates2/qquickpopupitem_p.h
++++ /dev/null
+@@ -1,121 +0,0 @@
+-/****************************************************************************
+-**
+-** Copyright (C) 2021 The Qt Company Ltd.
+-** Contact: https://www.qt.io/licensing/
+-**
+-** This file is part of the Qt Quick Templates 2 module of the Qt Toolkit.
+-**
+-** $QT_BEGIN_LICENSE:COMM$
+-**
+-** Commercial License Usage
+-** Licensees holding valid commercial Qt licenses may use this file in
+-** accordance with the commercial license agreement provided with the
+-** Software or, alternatively, in accordance with the terms contained in
+-** a written agreement between you and The Qt Company. For licensing terms
+-** and conditions see https://www.qt.io/terms-conditions. For further
+-** information use the contact form at https://www.qt.io/contact-us.
+-**
+-** $QT_END_LICENSE$
+-**
+-**
+-**
+-**
+-**
+-**
+-**
+-**
+-**
+-**
+-**
+-**
+-**
+-**
+-**
+-**
+-****************************************************************************/
+-
+-#ifndef QQUICKPOPUPITEM_P_H
+-#define QQUICKPOPUPITEM_P_H
+-
+-//
+-// W A R N I N G
+-// -------------
+-//
+-// This file is not part of the Qt API. It exists purely as an
+-// implementation detail. This header file may change from version to
+-// version without notice, or even be removed.
+-//
+-// We mean it.
+-//
+-
+-#include <QtQuickTemplates2/private/qquickpage_p.h>
+-#include <QtQuickTemplates2/private/qquickpage_p_p.h>
+-
+-QT_BEGIN_NAMESPACE
+-
+-class QQuickPopup;
+-class QQuickPopupItemPrivate;
+-
+-class QQuickPopupItem : public QQuickPage
+-{
+- Q_OBJECT
+-
+-public:
+- explicit QQuickPopupItem(QQuickPopup *popup);
+-
+- void grabShortcut();
+- void ungrabShortcut();
+-
+-protected:
+- void updatePolish() override;
+-
+- bool event(QEvent *event) override;
+- bool childMouseEventFilter(QQuickItem *child, QEvent *event) override;
+- void focusInEvent(QFocusEvent *event) override;
+- void focusOutEvent(QFocusEvent *event) override;
+- void keyPressEvent(QKeyEvent *event) override;
+- void keyReleaseEvent(QKeyEvent *event) override;
+- void mousePressEvent(QMouseEvent *event) override;
+- void mouseMoveEvent(QMouseEvent *event) override;
+- void mouseReleaseEvent(QMouseEvent *event) override;
+- void mouseDoubleClickEvent(QMouseEvent *event) override;
+- void mouseUngrabEvent() override;
+-#if QT_CONFIG(quicktemplates2_multitouch)
+- void touchEvent(QTouchEvent *event) override;
+- void touchUngrabEvent() override;
+-#endif
+-#if QT_CONFIG(wheelevent)
+- void wheelEvent(QWheelEvent *event) override;
+-#endif
+-
+- void contentItemChange(QQuickItem *newItem, QQuickItem *oldItem) override;
+- void contentSizeChange(const QSizeF &newSize, const QSizeF &oldSize) override;
+- void fontChange(const QFont &newFont, const QFont &oldFont) override;
+- void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) override;
+- void localeChange(const QLocale &newLocale, const QLocale &oldLocale) override;
+- void mirrorChange() override;
+- void itemChange(ItemChange change, const ItemChangeData &data) override;
+- void paddingChange(const QMarginsF &newPadding, const QMarginsF &oldPadding) override;
+- void paletteChange(const QPalette &newPalette, const QPalette &oldPalette) override;
+- void enabledChange() override;
+-
+- QFont defaultFont() const override;
+- QPalette defaultPalette() const override;
+-
+-#if QT_CONFIG(accessibility)
+- QAccessible::Role accessibleRole() const override;
+- void accessibilityActiveChanged(bool active) override;
+-#endif
+-
+-protected:
+- QQuickPopupItem(QQuickPopupItemPrivate &dd);
+-
+-private:
+- Q_DISABLE_COPY(QQuickPopupItem)
+- Q_DECLARE_PRIVATE(QQuickPopupItem)
+- friend class QQuickPopup;
+-};
+-
+-QT_END_NAMESPACE
+-
+-#endif // QQUICKPOPUPITEM_P_H
+--- a/src/quicktemplates2/qquickpopupitem_p_p.h
++++ b/src/quicktemplates2/qquickpopupitem_p_p.h
+@@ -48,39 +48,67 @@
+ // We mean it.
+ //
+
+-#include <QtQuickTemplates2/private/qquickpopupitem_p.h>
+-#include <QtQuickTemplates2/private/qquickpalette_p.h>
++#include <QtQuickTemplates2/private/qquickpage_p.h>
+
+ QT_BEGIN_NAMESPACE
+
+ class QQuickPopup;
+-
+-class QQuickPopupItemPrivate : public QQuickPagePrivate
++class QQuickPopupItemPrivate;
++class QQuickPopupItem : public QQuickPage
+ {
+- Q_DECLARE_PUBLIC(QQuickPopupItem)
++ Q_OBJECT
+
+ public:
+- QQuickPopupItemPrivate(QQuickPopup *popup);
+-
+- void init();
+-
+- void implicitWidthChanged() override;
+- void implicitHeightChanged() override;
+-
+- void resolveFont() override;
+- void resolvePalette() override;
+-
+- QQuickItem *getContentItem() override;
+-
+- void cancelContentItem() override;
+- void executeContentItem(bool complete = false) override;
+-
+- void cancelBackground() override;
+- void executeBackground(bool complete = false) override;
+-
+- int backId = 0;
+- int escapeId = 0;
+- QQuickPopup *popup = nullptr;
++ explicit QQuickPopupItem(QQuickPopup *popup);
++
++ void grabShortcut();
++ void ungrabShortcut();
++
++protected:
++ void updatePolish() override;
++
++ bool event(QEvent *event) override;
++ bool childMouseEventFilter(QQuickItem *child, QEvent *event) override;
++ void focusInEvent(QFocusEvent *event) override;
++ void focusOutEvent(QFocusEvent *event) override;
++ void keyPressEvent(QKeyEvent *event) override;
++ void keyReleaseEvent(QKeyEvent *event) override;
++ void mousePressEvent(QMouseEvent *event) override;
++ void mouseMoveEvent(QMouseEvent *event) override;
++ void mouseReleaseEvent(QMouseEvent *event) override;
++ void mouseDoubleClickEvent(QMouseEvent *event) override;
++ void mouseUngrabEvent() override;
++#if QT_CONFIG(quicktemplates2_multitouch)
++ void touchEvent(QTouchEvent *event) override;
++ void touchUngrabEvent() override;
++#endif
++#if QT_CONFIG(wheelevent)
++ void wheelEvent(QWheelEvent *event) override;
++#endif
++
++ void contentItemChange(QQuickItem *newItem, QQuickItem *oldItem) override;
++ void contentSizeChange(const QSizeF &newSize, const QSizeF &oldSize) override;
++ void fontChange(const QFont &newFont, const QFont &oldFont) override;
++ void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) override;
++ void localeChange(const QLocale &newLocale, const QLocale &oldLocale) override;
++ void mirrorChange() override;
++ void itemChange(ItemChange change, const ItemChangeData &data) override;
++ void paddingChange(const QMarginsF &newPadding, const QMarginsF &oldPadding) override;
++ void paletteChange(const QPalette &newPalette, const QPalette &oldPalette) override;
++ void enabledChange() override;
++
++ QFont defaultFont() const override;
++ QPalette defaultPalette() const override;
++
++#if QT_CONFIG(accessibility)
++ QAccessible::Role accessibleRole() const override;
++ void accessibilityActiveChanged(bool active) override;
++#endif
++
++private:
++ Q_DISABLE_COPY(QQuickPopupItem)
++ Q_DECLARE_PRIVATE(QQuickPopupItem)
++ friend class QQuickPopup;
+ };
+
+ QT_END_NAMESPACE
+--- a/src/quicktemplates2/quicktemplates2.pri
++++ b/src/quicktemplates2/quicktemplates2.pri
+@@ -60,7 +60,6 @@ HEADERS += \
+ $$PWD/qquickpopup_p_p.h \
+ $$PWD/qquickpopupanchors_p.h \
+ $$PWD/qquickpopupanchors_p_p.h \
+- $$PWD/qquickpopupitem_p.h \
+ $$PWD/qquickpopupitem_p_p.h \
+ $$PWD/qquickpopuppositioner_p_p.h \
+ $$PWD/qquickpresshandler_p_p.h \
diff --git a/debian/patches/series b/debian/patches/series
index 808701a..a01165b 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1 +1,6 @@
+0001-Unset-mouseGrabberPopup-if-it-s-removed-from-childre.patch
+0002-Ensure-we-don-t-crash-when-changing-sizes-after-clea.patch
+0003-QQuickAction-don-t-grab-the-same-shortcut-multiple-t.patch
+0004-QQuickAbstractButton-fix-crash-on-destruction.patch
+0005-Revert-Allow-creation-of-custom-QQuickPopupItem-deri.patch
disable_fontless_examples_build.patch
More information about the Neon-commits
mailing list