Reworked toggle view
Previous: - It would just hide the overlay dock widget and leave the side tabs still visible - Close button, toggle view action would simply collapse the dock widget intsead of completely hiding it Current: - Now toggle view and collapse functionality are separated. - Toggle view will now hide the side tab bars completely - Close button and toggle view action will completely hide it - Collapse view will simply hide the overlay dock container without hiding the side tabs - Handled logic for floating widgets and toggling view
This commit is contained in:
@@ -118,6 +118,12 @@ struct DockWidgetPrivate
|
||||
*/
|
||||
void updateParentDockArea();
|
||||
|
||||
/**
|
||||
* Closes all overlayed dock widgets if there are no more opened dock areas
|
||||
* This prevents the overlayed dock widgets from being pinned to an empty dock area
|
||||
*/
|
||||
void closeOverlayDockWidgetsIfNeeded();
|
||||
|
||||
/**
|
||||
* Setup the top tool bar
|
||||
*/
|
||||
@@ -187,9 +193,10 @@ void DockWidgetPrivate::showDockWidget()
|
||||
FloatingWidget->show();
|
||||
}
|
||||
|
||||
if (DockArea->isOverlayed())
|
||||
// If this widget is pinned and there are no opened dock widgets, unpin the overlay widget by moving it's contents to parent container
|
||||
if (Container->openedDockWidgets().count() == 0 && DockArea->isOverlayed())
|
||||
{
|
||||
DockArea->overlayDockContainer()->show();
|
||||
DockArea->overlayDockContainer()->moveContentsToParent();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -200,17 +207,14 @@ void DockWidgetPrivate::hideDockWidget()
|
||||
{
|
||||
TabWidget->hide();
|
||||
updateParentDockArea();
|
||||
|
||||
|
||||
closeOverlayDockWidgetsIfNeeded();
|
||||
|
||||
if (Features.testFlag(CDockWidget::DeleteContentOnClose))
|
||||
{
|
||||
Widget->deleteLater();
|
||||
Widget = nullptr;
|
||||
}
|
||||
|
||||
if (DockArea->isOverlayed())
|
||||
{
|
||||
DockArea->overlayDockContainer()->hide();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -239,6 +243,22 @@ void DockWidgetPrivate::updateParentDockArea()
|
||||
}
|
||||
}
|
||||
|
||||
void DockWidgetPrivate::closeOverlayDockWidgetsIfNeeded()
|
||||
{
|
||||
if (_this->dockContainer() && _this->dockContainer()->openedDockWidgets().isEmpty())
|
||||
{
|
||||
for (auto overlayWidget : _this->dockContainer()->overlayWidgets())
|
||||
{
|
||||
if (overlayWidget->dockWidget() == _this)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
overlayWidget->dockWidget()->toggleView(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//============================================================================
|
||||
void DockWidgetPrivate::setupToolBar()
|
||||
@@ -611,6 +631,8 @@ void CDockWidget::toggleViewInternal(bool Open)
|
||||
CDockWidget* TopLevelDockWidgetBefore = DockContainer
|
||||
? DockContainer->topLevelDockWidget() : nullptr;
|
||||
|
||||
d->Closed = !Open;
|
||||
|
||||
if (Open)
|
||||
{
|
||||
d->showDockWidget();
|
||||
@@ -619,7 +641,7 @@ void CDockWidget::toggleViewInternal(bool Open)
|
||||
{
|
||||
d->hideDockWidget();
|
||||
}
|
||||
d->Closed = !Open;
|
||||
|
||||
d->ToggleViewAction->blockSignals(true);
|
||||
d->ToggleViewAction->setChecked(Open);
|
||||
d->ToggleViewAction->blockSignals(false);
|
||||
@@ -628,6 +650,11 @@ void CDockWidget::toggleViewInternal(bool Open)
|
||||
d->DockArea->toggleDockWidgetView(this, Open);
|
||||
}
|
||||
|
||||
if (d->DockArea->isOverlayed())
|
||||
{
|
||||
d->DockArea->overlayDockContainer()->toggleView(Open);
|
||||
}
|
||||
|
||||
if (Open && TopLevelDockWidgetBefore)
|
||||
{
|
||||
CDockWidget::emitTopLevelEventForWidget(TopLevelDockWidgetBefore, false);
|
||||
@@ -1051,9 +1078,8 @@ void CDockWidget::onDockWidgetSideTabClicked()
|
||||
}
|
||||
|
||||
overlayContainer->raise();
|
||||
const auto show = !overlayContainer->isVisible();
|
||||
overlayContainer->setVisible(show);
|
||||
toggleView(show);
|
||||
const auto shouldCollapse = overlayContainer->isVisible();
|
||||
overlayContainer->collapseView(shouldCollapse);
|
||||
if (overlayContainer->isVisible())
|
||||
{
|
||||
// d->DockManager->setDockWidgetFocused(this) does not
|
||||
|
||||
Reference in New Issue
Block a user