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>
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# spec file for package qt6-base
|
||||
# spec file
|
||||
#
|
||||
# Copyright (c) 2023 SUSE LLC
|
||||
#
|
||||
@ -41,6 +41,7 @@ Source99: qt6-base-rpmlintrc
|
||||
# Patches 0-100 are upstream patches #
|
||||
Patch0: 0001-Schannel-Reject-certificate-not-signed-by-a-configur.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 #
|
||||
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
|
||||
@ -577,8 +578,8 @@ BuildArch: noarch
|
||||
%description -n qt6-docs-common
|
||||
This package contains common files used for building Qt documentation.
|
||||
|
||||
### Static libraries ###
|
||||
|
||||
### Static libraries ###
|
||||
%package -n qt6-exampleicons-devel-static
|
||||
Summary: Qt ExampleIcons module
|
||||
# TODO
|
||||
@ -635,8 +636,8 @@ Requires: qt6-platformsupport-devel-static = %{version}
|
||||
This package provides private headers of libQt6PlatformSupport that do not have
|
||||
any ABI or API guarantees.
|
||||
|
||||
### Plugins ###
|
||||
|
||||
### Plugins ###
|
||||
%package -n qt6-networkinformation-glib
|
||||
Summary: Network information for QNetworkInformation using GNetworkMonitor
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user