Improve tab key focus in hidable tab bar widget

PR #23379.
This commit is contained in:
Andrew Johnson
2025-10-19 03:08:28 -04:00
committed by GitHub
parent 312e914adb
commit d67163269b
2 changed files with 13 additions and 3 deletions

View File

@@ -38,19 +38,28 @@
HidableTabWidget::HidableTabWidget(QWidget *parent) HidableTabWidget::HidableTabWidget(QWidget *parent)
: QTabWidget(parent) : QTabWidget(parent)
{ {
// Skip single tab in keyboard navigation (no point navigating to it)
tabBar()->setFocusPolicy(Qt::NoFocus);
} }
void HidableTabWidget::tabInserted(const int index) void HidableTabWidget::tabInserted(const int index)
{ {
QTabWidget::tabInserted(index); QTabWidget::tabInserted(index);
tabBar()->setVisible(count() != 1); tabsCountChanged();
} }
void HidableTabWidget::tabRemoved(const int index) void HidableTabWidget::tabRemoved(const int index)
{ {
//QTabWidget::tabInserted(index);
QTabWidget::tabRemoved(index); QTabWidget::tabRemoved(index);
tabBar()->setVisible(count() != 1); tabsCountChanged();
}
void HidableTabWidget::tabsCountChanged()
{
const qsizetype tabsCount = count();
tabBar()->setVisible(tabsCount != 1);
// Skip single tab in keyboard navigation (no point navigating to it)
tabBar()->setFocusPolicy((tabsCount > 1) ? Qt::StrongFocus : Qt::NoFocus);
} }
#ifdef Q_OS_MACOS #ifdef Q_OS_MACOS

View File

@@ -42,6 +42,7 @@ public:
private: private:
void tabInserted(int index) override; void tabInserted(int index) override;
void tabRemoved(int index) override; void tabRemoved(int index) override;
void tabsCountChanged();
#ifdef Q_OS_MACOS #ifdef Q_OS_MACOS
void paintEvent(QPaintEvent *event) override; void paintEvent(QPaintEvent *event) override;