From 9c95e34df5557704d669601729bf63d162c27d92 Mon Sep 17 00:00:00 2001 From: Uwe Kindler Date: Fri, 12 Oct 2018 11:51:35 +0200 Subject: [PATCH] Fixed some bugs in tabbar handling --- src/DockAreaTabBar.cpp | 22 ++++++++++++++++++++++ src/DockAreaTabBar.h | 6 ++++++ src/DockAreaWidget.cpp | 5 +++-- src/DockWidget.cpp | 1 + 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/DockAreaTabBar.cpp b/src/DockAreaTabBar.cpp index 00dc6e7..f717c58 100644 --- a/src/DockAreaTabBar.cpp +++ b/src/DockAreaTabBar.cpp @@ -265,6 +265,7 @@ void CDockAreaTabBar::insertTab(int Index, CDockWidgetTab* Tab) d->TabsLayout->insertWidget(Index, Tab); connect(Tab, SIGNAL(clicked()), this, SLOT(onTabClicked())); connect(Tab, SIGNAL(moved(const QPoint&)), this, SLOT(onTabWidgetMoved(const QPoint&))); + Tab->installEventFilter(this); d->MenuOutdated = true; if (Index <= d->CurrentIndex) { @@ -321,6 +322,7 @@ void CDockAreaTabBar::removeTab(CDockWidgetTab* Tab) d->TabsLayout->removeWidget(Tab); Tab->disconnect(this); + Tab->removeEventFilter(this); d->MenuOutdated = true; qDebug() << "NewCurrentIndex " << NewCurrentIndex; if (NewCurrentIndex != d->CurrentIndex) @@ -448,6 +450,26 @@ void CDockAreaTabBar::closeTab(int Index) } emit tabCloseRequested(Index); } + + +//=========================================================================== +bool CDockAreaTabBar::eventFilter(QObject *watched, QEvent *event) +{ + bool Result = Super::eventFilter(watched, event); + if (event->type() != QEvent::Hide) + { + return Result; + } + + CDockWidgetTab* Tab = qobject_cast(watched); + if (!Tab) + { + return Result; + } + + qDebug() << "Hide event for tab " << Tab->text(); + return Result; +} } // namespace ads //--------------------------------------------------------------------------- diff --git a/src/DockAreaTabBar.h b/src/DockAreaTabBar.h index 6d09fca..cb73e6b 100644 --- a/src/DockAreaTabBar.h +++ b/src/DockAreaTabBar.h @@ -63,6 +63,7 @@ protected: void startFloating(const QPoint& Pos); public: + using Super = QScrollArea; /** * Default Constructor */ @@ -105,6 +106,11 @@ public: */ CDockWidgetTab* tab(int Index) const; + /** + * Filters the tab widget events + */ + virtual bool eventFilter(QObject *watched, QEvent *event) override; + public slots: /** * This property sets the index of the tab bar's visible tab diff --git a/src/DockAreaWidget.cpp b/src/DockAreaWidget.cpp index aa7f8d8..7045db3 100644 --- a/src/DockAreaWidget.cpp +++ b/src/DockAreaWidget.cpp @@ -187,9 +187,10 @@ public: { LayoutItem->widget()->setParent(0); } + m_CurrentWidget = nullptr; + m_CurrentIndex = -1; } m_Widgets.removeOne(Widget); - //setCurrentIndex(0); } QWidget* currentWidget() const @@ -379,7 +380,7 @@ void DockAreaWidgetPrivate::createTabBar() TabBar = new CDockAreaTabBar(_this); TopLayout->addWidget(TabBar, 1); - _this->connect(TabBar, SIGNAL(tabBarClicked(int)), SLOT(setCurrentIndex(int))); + _this->connect(TabBar, SIGNAL(currentChanged(int)), SLOT(setCurrentIndex(int))); _this->connect(TabBar, SIGNAL(tabMoved(int, int)), SLOT(reorderDockWidget(int, int))); TabsMenuButton = new QPushButton(); diff --git a/src/DockWidget.cpp b/src/DockWidget.cpp index d5b5bc2..b1faf27 100644 --- a/src/DockWidget.cpp +++ b/src/DockWidget.cpp @@ -132,6 +132,7 @@ void DockWidgetPrivate::showDockWidget() { DockArea->show(); DockArea->setCurrentDockWidget(_this); + TabWidget->show(); QSplitter* Splitter = internal::findParent(_this); while (Splitter && !Splitter->isVisible()) {