From a30aca4759686f277b2509964bcb28dbd363828a Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sat, 2 Nov 2024 01:29:40 +0100 Subject: [PATCH] FancyTabWidget: Set tab text after setting data Fixes crash when enabling a tab. --- src/widgets/fancytabwidget.cpp | 39 ++++++++++++++++++++++++---------- src/widgets/fancytabwidget.h | 3 +++ 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/src/widgets/fancytabwidget.cpp b/src/widgets/fancytabwidget.cpp index ba97763ab..04f410d10 100644 --- a/src/widgets/fancytabwidget.cpp +++ b/src/widgets/fancytabwidget.cpp @@ -93,8 +93,8 @@ bool FancyTabWidget::EnableTab(QWidget *widget_view) { FancyTabData *tab = tabs_.value(widget_view); if (QTabWidget::indexOf(tab->page()) >= 0) return true; - const int idx = QTabWidget::insertTab(count(), tab->page(), tab->icon(), tab->label()); - tabBar()->setTabData(idx, QVariant(tab->name())); + + (void)InsertTab(count(), tab); return true; @@ -126,11 +126,8 @@ void FancyTabWidget::LoadSettings(const QString &settings_group) { } s.endGroup(); - QMultiMap ::iterator i; - for (i = tabs.begin(); i != tabs.end(); ++i) { - FancyTabData *tab = i.value(); - const int idx = insertTab(i.key(), tab->page(), tab->icon(), tab->label()); - tabBar()->setTabData(idx, QVariant::fromValue(tab)); + for (QMultiMap ::iterator it = tabs.begin(); it != tabs.end(); ++it) { + (void)InsertTab(it.key(), it.value()); } } @@ -208,15 +205,13 @@ void FancyTabWidget::SetMode(const Mode mode) { } #endif - if ((previous_mode == Mode::IconOnlyTabs || previous_mode == Mode::IconsSidebar) && - (mode != Mode::IconOnlyTabs && mode != Mode::IconsSidebar)) { + if ((previous_mode == Mode::IconOnlyTabs || previous_mode == Mode::IconsSidebar) && (mode != Mode::IconOnlyTabs && mode != Mode::IconsSidebar)) { for (int i = 0; i < count(); ++i) { tabBar()->setTabText(i, tabBar()->tabData(i).value()->label()); tabBar()->setTabToolTip(i, ""_L1); } } - else if ((previous_mode != Mode::IconOnlyTabs && previous_mode != Mode::IconsSidebar) && - (mode == Mode::IconOnlyTabs || mode == Mode::IconsSidebar)) { + else if ((previous_mode != Mode::IconOnlyTabs && previous_mode != Mode::IconsSidebar) && (mode == Mode::IconOnlyTabs || mode == Mode::IconsSidebar)) { for (int i = 0; i < count(); ++i) { tabBar()->setTabText(i, ""_L1); tabBar()->setTabToolTip(i, tabBar()->tabData(i).value()->label()); @@ -233,6 +228,28 @@ void FancyTabWidget::SetMode(const Mode mode) { } +int FancyTabWidget::InsertTab(const int preffered_index, FancyTabData *tab) { + + const int actual_index = InsertTab(preffered_index, tab->page(), tab->icon(), QString()); + tabBar()->setTabData(actual_index, QVariant::fromValue(tab)); + + if (mode_ == Mode::IconOnlyTabs || mode_ == Mode::IconsSidebar) { + for (int i = 0; i < count(); ++i) { + tabBar()->setTabText(i, ""_L1); + tabBar()->setTabToolTip(i, tabBar()->tabData(i).value()->label()); + } + } + else { + for (int i = 0; i < count(); ++i) { + tabBar()->setTabText(i, tabBar()->tabData(i).value()->label()); + tabBar()->setTabToolTip(i, ""_L1); + } + } + + return actual_index; + +} + int FancyTabWidget::InsertTab(const int idx, QWidget *page, const QIcon &icon, const QString &label) { return QTabWidget::insertTab(idx, page, icon, label); } diff --git a/src/widgets/fancytabwidget.h b/src/widgets/fancytabwidget.h index 1dca2f5e4..854e6112d 100644 --- a/src/widgets/fancytabwidget.h +++ b/src/widgets/fancytabwidget.h @@ -57,6 +57,7 @@ class FancyTabWidget : public QTabWidget { int iconsize_largesidebar() const { return iconsize_largesidebar_; } void AddTab(QWidget *widget_view, const QString &name, const QIcon &icon, const QString &label); + bool EnableTab(QWidget *widget_view); bool DisableTab(QWidget *widget_view); @@ -64,7 +65,9 @@ class FancyTabWidget : public QTabWidget { void SaveSettings(const QString &settings_group); void ReloadSettings(); + int InsertTab(const int preffered_index, FancyTabData *tab); int InsertTab(const int idx, QWidget *page, const QIcon &icon, const QString &label); + void AddSpacer(); void AddBottomWidget(QWidget *widget_view); void SetBackgroundPixmap(const QPixmap &pixmap);