diff options
Diffstat (limited to 'src/mainwindow/mainwindow.cpp')
-rw-r--r-- | src/mainwindow/mainwindow.cpp | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/src/mainwindow/mainwindow.cpp b/src/mainwindow/mainwindow.cpp index eba02c6..5129abc 100644 --- a/src/mainwindow/mainwindow.cpp +++ b/src/mainwindow/mainwindow.cpp @@ -14,7 +14,7 @@ #include "window.h" #include <QApplication> #include <QCloseEvent> -#include <QDockWidget> +#include "widgets/dockwidget.h" #include <QLineEdit> #include <QMdiArea> #include <QMdiSubWindow> @@ -153,17 +153,30 @@ void MainWindow::addAction(ActionLocation where, QAction *action) void MainWindow::addDockWidget(Qt::DockWidgetArea area, QWidget *widget) { - QDockWidget *dock = new QDockWidget(widget->windowTitle(), this); - dock->setAttribute(Qt::WA_DeleteOnClose, true); + QList<QDockWidget *> docks; + for(QDockWidget *dock : findChildren<QDockWidget *>()) { + if(dockWidgetArea(dock) == area) + docks.append(dock); + } + + DockWidget *dock = new DockWidget(widget->windowTitle(), this); dock->setWidget(widget); - connect(dock, &QDockWidget::visibilityChanged, [dock](bool visible) { - if(!visible && dock->widget()) { + if(docks.empty()) + QMainWindow::addDockWidget(area, dock); + else + tabifyDockWidget(docks.last(), dock); +} + +void MainWindow::removeDockWidget(QWidget *widget) +{ + const auto docks = this->findChildren<QDockWidget *>(); + for(QDockWidget *dock : docks) { + if(dock->widget() == widget) { dock->widget()->setParent(nullptr); + dock->close(); } - }); - - QMainWindow::addDockWidget(area, dock); + } } void MainWindow::createTab(const QUrl &url) |