/** LICENSE ******************************************************************** ** ** smolbote: yet another qute browser ** Copyright (C) 2017 Xian Nox ** ** This program is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program. If not, see . ** ******************************************************************************/ #include "dockingwidget.h" #include "mainwindow.h" #include DockWidget::DockWidget(const QString &title, QWidget *parent, Qt::WindowFlags flags) : QDockWidget(title, parent, flags) { } void DockWidget::closeEvent(QCloseEvent *event) { setParent(0); event->ignore(); } DockingWidget::DockingWidget(const QString &title, QWidget *parent) : QWidget(parent) { window = nullptr; dock = new DockWidget(title, 0); dock->setWidget(this); dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); connect(qApp, &QApplication::aboutToQuit, [this]() { this->setParent(0); }); } DockingWidget::~DockingWidget() { // If the dock has a parent, it will take care of it // calling delete later here if the dock has a parent causes a crash if(!dock->parent()) { dock->deleteLater(); } } void DockingWidget::show() { MainWindow *caller = qobject_cast(sender()->parent()); // if already shown and on the same window - hide the widget if(isVisible() && window == caller) { dock->setParent(0); return; } // show() gets called by a QAction in MainWindow window = caller; if(window) { // dockable widgets dock->setParent(window); //window->addDockWidget(Qt::RightDockWidgetArea, dock); window->addTabbedDock(Qt::RightDockWidgetArea, dock); } else { qWarning("DockingWidget not called by MainWindow"); } QWidget::show(); }