From cde5e000456bcdfde3affafa2eb4cb3cef474ed0 Mon Sep 17 00:00:00 2001 From: Kacper Donat Date: Sun, 14 Jan 2024 20:55:50 +0100 Subject: [PATCH] Gui: Reset scroll position after preference page change As every page is contained in the same QScrollArea we must ensure that after page is changed the scrolled area is scrolled back to top-left corner. Fixes: #11981 --- src/Gui/DlgPreferencesImp.cpp | 15 ++++++++++----- src/Gui/DlgPreferencesImp.h | 2 +- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/Gui/DlgPreferencesImp.cpp b/src/Gui/DlgPreferencesImp.cpp index b19138dff1..d4b401ebaf 100644 --- a/src/Gui/DlgPreferencesImp.cpp +++ b/src/Gui/DlgPreferencesImp.cpp @@ -178,7 +178,7 @@ void DlgPreferencesImp::setupPages() } } - updatePageDependentLabels(); + updatePageDependentWidgets(); } QPixmap DlgPreferencesImp::loadIconForGroup(const std::string &name) const @@ -317,11 +317,16 @@ void DlgPreferencesImp::createPageInGroup(PreferencesPageItem *groupItem, const } } -void DlgPreferencesImp::updatePageDependentLabels() +void DlgPreferencesImp::updatePageDependentWidgets() { auto currentPageItem = getCurrentPage(); + // update header of the page ui->headerLabel->setText(currentPageItem->text()); + + // reset scroll area to start position + ui->scrollArea->horizontalScrollBar()->setValue(0); + ui->scrollArea->verticalScrollBar()->setValue(0); } /** @@ -430,7 +435,7 @@ void DlgPreferencesImp::activateGroupPage(const QString& group, int index) ui->groupWidgetStack->setCurrentWidget(pageStackWidget); pageStackWidget->setCurrentIndex(index); - updatePageDependentLabels(); + updatePageDependentWidgets(); return; } @@ -745,7 +750,7 @@ void DlgPreferencesImp::onPageSelected(const QModelIndex& index) pagesStackWidget->setCurrentIndex(index.row()); } - updatePageDependentLabels(); + updatePageDependentWidgets(); } void DlgPreferencesImp::onGroupExpanded(const QModelIndex& index) @@ -824,7 +829,7 @@ void DlgPreferencesImp::changeEvent(QEvent *e) } } - updatePageDependentLabels(); + updatePageDependentWidgets(); } else { QWidget::changeEvent(e); } diff --git a/src/Gui/DlgPreferencesImp.h b/src/Gui/DlgPreferencesImp.h index 0efc121fad..7aec8b4c09 100644 --- a/src/Gui/DlgPreferencesImp.h +++ b/src/Gui/DlgPreferencesImp.h @@ -178,7 +178,7 @@ private: void restorePageDefaults(PreferencesPageItem* item); void restartIfRequired(); - void updatePageDependentLabels(); + void updatePageDependentWidgets(); QPixmap loadIconForGroup(const std::string& name) const; //@}