Skip to content

Commit 36bcbde

Browse files
Fixed showing of dock area when inserting a dock widget into a hidden dock area
fixed setting of DockAreaTabBar index to prevent showing of tab 0 when inserting a dock widget into an area with no current index tab
1 parent eee9ebb commit 36bcbde

File tree

6 files changed

+96
-5
lines changed

6 files changed

+96
-5
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
ADS_OUT_ROOT = $${OUT_PWD}/../..
2+
3+
QT += core gui widgets
4+
5+
TARGET = DeleteOnCloseTest
6+
DESTDIR = $${ADS_OUT_ROOT}/lib
7+
TEMPLATE = app
8+
CONFIG += c++14
9+
CONFIG += debug_and_release
10+
adsBuildStatic {
11+
DEFINES += ADS_STATIC
12+
}
13+
14+
DEFINES += QT_DEPRECATED_WARNINGS
15+
16+
SOURCES += main.cpp
17+
18+
19+
LIBS += -L$${ADS_OUT_ROOT}/lib
20+
21+
# Dependency: AdvancedDockingSystem (shared)
22+
CONFIG(debug, debug|release){
23+
win32 {
24+
LIBS += -lqtadvanceddockingd
25+
}
26+
else:mac {
27+
LIBS += -lqtadvanceddocking_debug
28+
}
29+
else {
30+
LIBS += -lqtadvanceddocking
31+
}
32+
}
33+
else{
34+
LIBS += -lqtadvanceddocking
35+
}
36+
37+
INCLUDEPATH += ../../src
38+
DEPENDPATH += ../../src
39+

examples/deleteonclose/main.cpp

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#include <QMainWindow>
2+
#include <QAction>
3+
#include <QTextEdit>
4+
#include <QApplication>
5+
#include <QMenuBar>
6+
#include "DockManager.h"
7+
8+
int main(int argc, char *argv[])
9+
{
10+
QApplication a(argc, argv);
11+
QMainWindow w;
12+
13+
auto dockManager = new ads::CDockManager(&w);
14+
15+
QAction *action = new QAction("New Delete On Close", &w);
16+
w.menuBar()->addAction(action);
17+
18+
int i = 0;
19+
QObject::connect(action, &QAction::triggered, [&]() {
20+
auto dw = new ads::CDockWidget(QStringLiteral("test doc %1").arg(i++), &w);
21+
auto editor = new QTextEdit(QStringLiteral("lorem ipsum..."), dw);
22+
dw->setWidget(editor);
23+
dw->setFeature(ads::CDockWidget::DockWidgetDeleteOnClose, true);
24+
auto area = dockManager->addDockWidgetTab(ads::CenterDockWidgetArea, dw);
25+
qDebug() << "doc dock widget created!" << dw << area;
26+
});
27+
28+
action = new QAction("New", &w);
29+
w.menuBar()->addAction(action);
30+
QObject::connect(action, &QAction::triggered, [&]() {
31+
auto dw = new ads::CDockWidget(QStringLiteral("test %1").arg(i++), &w);
32+
auto editor = new QTextEdit(QStringLiteral("lorem ipsum..."), dw);
33+
dw->setWidget(editor);
34+
auto area = dockManager->addDockWidgetTab(ads::CenterDockWidgetArea, dw);
35+
qDebug() << "dock widget created!" << dw << area;
36+
});
37+
38+
w.show();
39+
40+
return a.exec();
41+
}

examples/examples.pro

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@ TEMPLATE = subdirs
22

33
SUBDIRS = \
44
simple \
5-
sidebar
5+
sidebar \
6+
deleteonclose

src/DockAreaTabBar.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,10 +205,14 @@ void CDockAreaTabBar::insertTab(int Index, CDockWidgetTab* Tab)
205205
connect(Tab, SIGNAL(elidedChanged(bool)), this, SIGNAL(elidedChanged(bool)));
206206
Tab->installEventFilter(this);
207207
emit tabInserted(Index);
208-
if (Index <= d->CurrentIndex || d->CurrentIndex == -1)
208+
if (Index <= d->CurrentIndex)
209209
{
210210
setCurrentIndex(d->CurrentIndex + 1);
211-
}
211+
}
212+
else if (d->CurrentIndex == -1)
213+
{
214+
setCurrentIndex(Index);
215+
}
212216

213217
updateGeometry();
214218
}

src/DockAreaWidget.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,12 @@ void CDockAreaWidget::insertDockWidget(int index, CDockWidget* DockWidget,
429429
setCurrentIndex(index);
430430
}
431431
DockWidget->setDockArea(this);
432+
// If this dock area is hidden, then we need to make it visible again
433+
// by calling DockWidget->toggleViewInternal(true);
434+
if (!this->isVisible() && d->ContentsLayout->count() > 1 && !dockManager()->isRestoringState())
435+
{
436+
DockWidget->toggleViewInternal(true);
437+
}
432438
d->updateTitleBarButtonStates();
433439
}
434440

@@ -448,7 +454,7 @@ void CDockAreaWidget::removeDockWidget(CDockWidget* DockWidget)
448454
{
449455
setCurrentDockWidget(NextOpenDockWidget);
450456
}
451-
else if (d->ContentsLayout->isEmpty() && DockContainer->dockAreaCount() > 1)
457+
else if (d->ContentsLayout->isEmpty() && DockContainer->dockAreaCount() >= 1)
452458
{
453459
ADS_PRINT("Dock Area empty");
454460
DockContainer->removeDockArea(this);

src/DockWidgetTab.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -570,7 +570,7 @@ void CDockWidgetTab::mouseDoubleClickEvent(QMouseEvent *event)
570570
void CDockWidgetTab::setVisible(bool visible)
571571
{
572572
// Just here for debugging to insert debug output
573-
Super::setVisible(visible);
573+
Super::setVisible(visible);
574574
}
575575

576576

0 commit comments

Comments
 (0)