Accepting request 1091331 from KDE:Qt6
OBS-URL: https://build.opensuse.org/request/show/1091331 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/qt6-base?expand=0&rev=34
This commit is contained in:
commit
8080ff621a
99
0001-tabbar-fix.patch
Normal file
99
0001-tabbar-fix.patch
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
From 2a7da1b3c8c4096d7c2b09f3fcc58e9cf47867cd Mon Sep 17 00:00:00 2001
|
||||||
|
From: Volker Hilsheimer <volker.hilsheimer@qt.io>
|
||||||
|
Date: Mon, 5 Jun 2023 17:10:00 +0200
|
||||||
|
Subject: QTabBar: recalculate scroll offset when showing
|
||||||
|
|
||||||
|
If an application sets the current index and resizes the tab widget
|
||||||
|
before showing it, then the scroll offset might be calculated based on
|
||||||
|
an old size. Since after ca15f650a1a914bb9a41131109c46c4e52c5ebb1,
|
||||||
|
resizing explicitly avoids scrolling, this could result in tabs ending
|
||||||
|
up scrolled outside of the tab bar when showing the tab widget.
|
||||||
|
|
||||||
|
Fix that by explicitly making the current tab visible in the tab bar's
|
||||||
|
showEvent handler, which recalculates the scroll offset based on the
|
||||||
|
actual size.
|
||||||
|
|
||||||
|
This is only reproducible with a tab widget, which lays out the tab bar
|
||||||
|
for each change and resets the tab bar's layoutDirty flag. Add a test
|
||||||
|
case there.
|
||||||
|
|
||||||
|
Pick-to: 6.5 6.6
|
||||||
|
Fixes: QTBUG-114204
|
||||||
|
Change-Id: I1e9506b9dde1dd892291d108dd2c7b675ef99509
|
||||||
|
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
|
||||||
|
Reviewed-by: Jonas Kvinge <jonas@jkvinge.net>
|
||||||
|
---
|
||||||
|
src/widgets/widgets/qtabbar.cpp | 2 ++
|
||||||
|
.../widgets/widgets/qtabwidget/tst_qtabwidget.cpp | 37 ++++++++++++++++++++++
|
||||||
|
2 files changed, 39 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/widgets/widgets/qtabbar.cpp b/src/widgets/widgets/qtabbar.cpp
|
||||||
|
index 75cb6dd4ea..ea408ec7f6 100644
|
||||||
|
--- a/src/widgets/widgets/qtabbar.cpp
|
||||||
|
+++ b/src/widgets/widgets/qtabbar.cpp
|
||||||
|
@@ -1656,6 +1656,8 @@ void QTabBar::showEvent(QShowEvent *)
|
||||||
|
d->refresh();
|
||||||
|
if (!d->validIndex(d->currentIndex))
|
||||||
|
setCurrentIndex(0);
|
||||||
|
+ else
|
||||||
|
+ d->makeVisible(d->currentIndex);
|
||||||
|
d->updateMacBorderMetrics();
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/tests/auto/widgets/widgets/qtabwidget/tst_qtabwidget.cpp b/tests/auto/widgets/widgets/qtabwidget/tst_qtabwidget.cpp
|
||||||
|
index 00cb26c2d3..eb29933fd1 100644
|
||||||
|
--- a/tests/auto/widgets/widgets/qtabwidget/tst_qtabwidget.cpp
|
||||||
|
+++ b/tests/auto/widgets/widgets/qtabwidget/tst_qtabwidget.cpp
|
||||||
|
@@ -79,6 +79,9 @@ private slots:
|
||||||
|
void moveCurrentTab();
|
||||||
|
void autoHide();
|
||||||
|
|
||||||
|
+ void setCurrentBeforeShow_data();
|
||||||
|
+ void setCurrentBeforeShow();
|
||||||
|
+
|
||||||
|
private:
|
||||||
|
int addPage();
|
||||||
|
void removePage(int index);
|
||||||
|
@@ -750,5 +753,39 @@ void tst_QTabWidget::autoHide()
|
||||||
|
QVERIFY(heightForWidth1 > tabWidget.heightForWidth(20));
|
||||||
|
}
|
||||||
|
|
||||||
|
+void tst_QTabWidget::setCurrentBeforeShow_data()
|
||||||
|
+{
|
||||||
|
+ QTest::addColumn<QTabWidget::TabPosition>("tabPosition");
|
||||||
|
+ QTest::newRow("West") << QTabWidget::West;
|
||||||
|
+ QTest::newRow("North") << QTabWidget::North;
|
||||||
|
+ QTest::newRow("East") << QTabWidget::East;
|
||||||
|
+ QTest::newRow("South") << QTabWidget::South;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void tst_QTabWidget::setCurrentBeforeShow()
|
||||||
|
+{
|
||||||
|
+ QFETCH(QTabWidget::TabPosition, tabPosition);
|
||||||
|
+
|
||||||
|
+ QTabWidget tabWidget;
|
||||||
|
+ tabWidget.setTabPosition(tabPosition);
|
||||||
|
+
|
||||||
|
+ QPixmap pm(50, 50);
|
||||||
|
+ pm.fill(Qt::red);
|
||||||
|
+ const QIcon icon(pm);
|
||||||
|
+ for (int i = 0; i < 4; ++i)
|
||||||
|
+ tabWidget.addTab(new QWidget, icon, QString("Tab %1").arg(i));
|
||||||
|
+
|
||||||
|
+ // the tab widget has space for the entire tab bar
|
||||||
|
+ tabWidget.resize(tabWidget.tabBar()->sizeHint() + QSize(50, 50));
|
||||||
|
+ tabWidget.setCurrentIndex(2);
|
||||||
|
+ tabWidget.show();
|
||||||
|
+ QVERIFY(QTest::qWaitForWindowExposed(&tabWidget));
|
||||||
|
+
|
||||||
|
+ QCOMPARE_GE(tabWidget.tabBar()->tabRect(0).x(), 0);
|
||||||
|
+ QCOMPARE_GE(tabWidget.tabBar()->tabRect(0).y(), 0);
|
||||||
|
+
|
||||||
|
+ QTest::qWait(2000);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
QTEST_MAIN(tst_QTabWidget)
|
||||||
|
#include "tst_qtabwidget.moc"
|
||||||
|
--
|
||||||
|
cgit v1.2.3
|
||||||
|
|
@ -1,3 +1,9 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Jun 7 17:58:46 UTC 2023 - Jonas Kvinge <jonaski@opensuse.org>
|
||||||
|
|
||||||
|
- Add patch for QTabBar regression in Qt 6.5.1 (QTBUG-114204)
|
||||||
|
* 0001-tabbar-fix.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Mon Jun 5 08:59:52 UTC 2023 - Christophe Marin <christophe@krop.fr>
|
Mon Jun 5 08:59:52 UTC 2023 - Christophe Marin <christophe@krop.fr>
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# spec file for package qt6-base
|
# spec file
|
||||||
#
|
#
|
||||||
# Copyright (c) 2023 SUSE LLC
|
# Copyright (c) 2023 SUSE LLC
|
||||||
#
|
#
|
||||||
@ -41,6 +41,7 @@ Source99: qt6-base-rpmlintrc
|
|||||||
# Patches 0-100 are upstream patches #
|
# Patches 0-100 are upstream patches #
|
||||||
Patch0: 0001-Schannel-Reject-certificate-not-signed-by-a-configur.patch
|
Patch0: 0001-Schannel-Reject-certificate-not-signed-by-a-configur.patch
|
||||||
Patch1: 0001-Ssl-Copy-the-on-demand-cert-loading-bool-from-defaul.patch
|
Patch1: 0001-Ssl-Copy-the-on-demand-cert-loading-bool-from-defaul.patch
|
||||||
|
Patch2: 0001-tabbar-fix.patch
|
||||||
# Patches 100-200 are openSUSE and/or non-upstream(able) patches #
|
# Patches 100-200 are openSUSE and/or non-upstream(able) patches #
|
||||||
Patch100: 0001-Tell-the-truth-about-private-API.patch
|
Patch100: 0001-Tell-the-truth-about-private-API.patch
|
||||||
# No need to pollute the library dir with object files, install them in the qt6 subfolder
|
# No need to pollute the library dir with object files, install them in the qt6 subfolder
|
||||||
@ -577,8 +578,8 @@ BuildArch: noarch
|
|||||||
%description -n qt6-docs-common
|
%description -n qt6-docs-common
|
||||||
This package contains common files used for building Qt documentation.
|
This package contains common files used for building Qt documentation.
|
||||||
|
|
||||||
### Static libraries ###
|
|
||||||
|
|
||||||
|
### Static libraries ###
|
||||||
%package -n qt6-exampleicons-devel-static
|
%package -n qt6-exampleicons-devel-static
|
||||||
Summary: Qt ExampleIcons module
|
Summary: Qt ExampleIcons module
|
||||||
# TODO
|
# TODO
|
||||||
@ -635,8 +636,8 @@ Requires: qt6-platformsupport-devel-static = %{version}
|
|||||||
This package provides private headers of libQt6PlatformSupport that do not have
|
This package provides private headers of libQt6PlatformSupport that do not have
|
||||||
any ABI or API guarantees.
|
any ABI or API guarantees.
|
||||||
|
|
||||||
### Plugins ###
|
|
||||||
|
|
||||||
|
### Plugins ###
|
||||||
%package -n qt6-networkinformation-glib
|
%package -n qt6-networkinformation-glib
|
||||||
Summary: Network information for QNetworkInformation using GNetworkMonitor
|
Summary: Network information for QNetworkInformation using GNetworkMonitor
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user