diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 16459145..de3ed573 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -66,6 +66,8 @@ set(PROJECT_SOURCES knutmain.cpp knutstyle.h knutstyle.cpp + knuttabwidget.h + knuttabwidget.cpp logpanel.h logpanel.cpp mainwindow.h diff --git a/src/gui/knuttabwidget.cpp b/src/gui/knuttabwidget.cpp new file mode 100644 index 00000000..b8429539 --- /dev/null +++ b/src/gui/knuttabwidget.cpp @@ -0,0 +1,56 @@ +/* + This file is part of Knut. + +SPDX-FileCopyrightText: 2025 Klarälvdalens Datakonsult AB, a KDAB Group company + +SPDX-License-Identifier: GPL-3.0-only + +Contact KDAB at for commercial licensing options. +*/ + +#include "knuttabwidget.h" + +#include +#include +#include + +namespace Gui { + +KnutTabBar::KnutTabBar(QWidget *parent) + : QTabBar(parent) + , m_hideCloseTimer(new QTimer(this)) +{ + // Human moment delay before hiding close buttons + m_hideCloseTimer->setInterval(2000); + connect(m_hideCloseTimer, &QTimer::timeout, this, [this]() { + setTabsClosable(false); + }); +} + +bool KnutTabBar::event(QEvent *event) +{ + switch (event->type()) { + case QEvent::HoverEnter: + m_hideCloseTimer->stop(); + setTabsClosable(true); + break; + case QEvent::HoverLeave: + m_hideCloseTimer->start(); + break; + case QEvent::Show: + setTabsClosable(false); + break; + default: + break; + } + return QTabBar::event(event); +} + +KnutTabWidget::KnutTabWidget(QWidget *parent) + : QTabWidget(parent) +{ + auto tabBar = new KnutTabBar(this); + setTabBar(tabBar); +} + +} // namespace Gui diff --git a/src/gui/knuttabwidget.h b/src/gui/knuttabwidget.h new file mode 100644 index 00000000..8929f2e5 --- /dev/null +++ b/src/gui/knuttabwidget.h @@ -0,0 +1,40 @@ +/* + This file is part of Knut. + +SPDX-FileCopyrightText: 2025 Klarälvdalens Datakonsult AB, a KDAB Group company + +SPDX-License-Identifier: GPL-3.0-only + +Contact KDAB at for commercial licensing options. +*/ + +#pragma once + +#include +#include +#include +#include + +namespace Gui { + +class KnutTabBar : public QTabBar +{ + Q_OBJECT +public: + KnutTabBar(QWidget *parent); + +protected: + bool event(QEvent *event); + +private: + QTimer *m_hideCloseTimer; +}; + +class KnutTabWidget : public QTabWidget +{ + Q_OBJECT +public: + KnutTabWidget(QWidget *parent); +}; + +} // namespace Gui diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 06315bc7..cdf697db 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -31,7 +31,7 @@ 0 - + true