From 082b5edf29fca52009a138f2a992c9e02fc9d7d7 Mon Sep 17 00:00:00 2001 From: Kacper Donat Date: Sat, 3 Aug 2024 17:15:03 +0200 Subject: [PATCH] Gui: Do not show overlay panels in Start --- src/Gui/GraphvizView.cpp | 2 + src/Gui/ImageView.cpp | 3 ++ src/Gui/OverlayWidgets.cpp | 51 ++++++++++++++------- src/Gui/SplitView3DInventor.cpp | 3 ++ src/Gui/View3DInventor.cpp | 3 ++ src/Mod/Drawing/Gui/DrawingView.cpp | 3 ++ src/Mod/Spreadsheet/Gui/SpreadsheetView.cpp | 3 ++ src/Mod/Start/Gui/StartView.cpp | 9 ++++ src/Mod/Start/Gui/StartView.h | 2 + src/Mod/TechDraw/Gui/MDIViewPage.cpp | 3 ++ 10 files changed, 66 insertions(+), 16 deletions(-) diff --git a/src/Gui/GraphvizView.cpp b/src/Gui/GraphvizView.cpp index 9da9ffff9a..19d64a1510 100644 --- a/src/Gui/GraphvizView.cpp +++ b/src/Gui/GraphvizView.cpp @@ -516,6 +516,8 @@ bool GraphvizView::onHasMsg(const char* pMsg) const return true; else if (strcmp("PrintPdf",pMsg) == 0) return true; + else if (strcmp("AllowsOverlayOnHover", pMsg) == 0) + return true; return false; } diff --git a/src/Gui/ImageView.cpp b/src/Gui/ImageView.cpp index 38059d36ac..5ed623559e 100644 --- a/src/Gui/ImageView.cpp +++ b/src/Gui/ImageView.cpp @@ -370,6 +370,9 @@ bool ImageView::onHasMsg(const char* pMsg) const if (strcmp("PrintPdf", pMsg) == 0) { return true; } + else if (strcmp("AllowsOverlayOnHover", pMsg) == 0) { + return true; + } return false; } diff --git a/src/Gui/OverlayWidgets.cpp b/src/Gui/OverlayWidgets.cpp index a0f3fd38d1..a34865bec4 100644 --- a/src/Gui/OverlayWidgets.cpp +++ b/src/Gui/OverlayWidgets.cpp @@ -169,8 +169,13 @@ OverlayProxyWidget::HitTest OverlayProxyWidget::hitTest(const QPoint &globalPt, drawLine = true; update(); } + + auto view = getMainWindow()->activeWindow(); + auto overlayOnHoverAllowed = view && view->onHasMsg("AllowsOverlayOnHover"); + if(owner->getState() != OverlayTabWidget::State::Hidden && hit == HitTest::HitOuter + && overlayOnHoverAllowed && OverlayParams::getDockOverlayActivateOnHover()) { if (owner->isVisible() && owner->tabBar()->isVisible()) { QSize size = owner->tabBar()->size(); @@ -494,8 +499,10 @@ void OverlayTabWidget::setAnimation(qreal t) void OverlayTabWidget::startShow() { - if (isVisible() || _state > State::Normal) + if (isVisible() || _state > State::Normal) { return; + } + int duration = OverlayParams::getDockOverlayAnimationDuration(); bool setmode = _state != State::Showing; if (duration) { @@ -1129,25 +1136,36 @@ void OverlayTabWidget::setState(State state) bool OverlayTabWidget::checkAutoHide() const { - if(autoMode == AutoMode::AutoHide) + if (autoMode == AutoMode::AutoHide) { return true; - - if(OverlayParams::getDockOverlayAutoView()) { - auto view = getMainWindow()->activeWindow(); - if (!view) return true; - if(!view->onHasMsg("CanPan") - && view->parentWidget() - && view->parentWidget()->isMaximized()) - return true; } - if(autoMode == AutoMode::EditShow) { + if (OverlayParams::getDockOverlayAutoView()) { + auto view = getMainWindow()->activeWindow(); + + if (!view) { + return true; + } + + if (!view->onHasMsg("AllowsOverlayOnHover")) { + return true; + } + + if (!view->onHasMsg("CanPan") + && view->parentWidget() + && view->parentWidget()->isMaximized()) { + return true; + } + } + + if (autoMode == AutoMode::EditShow) { return !Application::Instance->editDocument() && (!Control().taskPanel() || Control().taskPanel()->isEmpty(false)); } - if(autoMode == AutoMode::EditHide && Application::Instance->editDocument()) + if (autoMode == AutoMode::EditHide && Application::Instance->editDocument()) { return true; + } return false; } @@ -1548,7 +1566,7 @@ void OverlayTabWidget::setRect(QRect rect) break; } - if(hGrp && rect.size() != rectOverlay.size()) { + if (hGrp && rect.size() != rectOverlay.size()) { Base::StateLocker lock(_saving); hGrp->SetInt("Width", rect.width()); hGrp->SetInt("Height", rect.height()); @@ -1557,7 +1575,7 @@ void OverlayTabWidget::setRect(QRect rect) QPoint offset = getMainWindow()->getMdiArea()->pos(); - if(getAutoHideRect(rect) || _state == State::Hint || _state == State::Hidden) { + if (getAutoHideRect(rect) || _state == State::Hint || _state == State::Hidden) { QRect rectHint = rect; if (_state != State::Hint && _state != State::Hidden) startHide(); @@ -1597,10 +1615,11 @@ void OverlayTabWidget::setRect(QRect rect) } else { setGeometry(rectOverlay.translated(offset)); - for(int i=0, count=splitter->count(); icount(); i < count; ++i) { splitter->widget(i)->show(); + } - if(!isVisible() && count()) { + if (!isVisible() && count()) { proxyWidget->hide(); startShow(); } diff --git a/src/Gui/SplitView3DInventor.cpp b/src/Gui/SplitView3DInventor.cpp index 59169e0cd6..09fc08eec1 100644 --- a/src/Gui/SplitView3DInventor.cpp +++ b/src/Gui/SplitView3DInventor.cpp @@ -235,6 +235,9 @@ bool AbstractSplitView::onHasMsg(const char* pMsg) const else if (strcmp("ViewAxo",pMsg) == 0) { return true; } + else if (strcmp("AllowsOverlayOnHover", pMsg) == 0) { + return true; + } return false; } diff --git a/src/Gui/View3DInventor.cpp b/src/Gui/View3DInventor.cpp index 7770a71f2e..0b13430634 100644 --- a/src/Gui/View3DInventor.cpp +++ b/src/Gui/View3DInventor.cpp @@ -524,6 +524,9 @@ bool View3DInventor::onHasMsg(const char* pMsg) const if (strcmp("ZoomOut", pMsg) == 0) { return true; } + if (strcmp("AllowsOverlayOnHover", pMsg) == 0) { + return true; + } return false; } diff --git a/src/Mod/Drawing/Gui/DrawingView.cpp b/src/Mod/Drawing/Gui/DrawingView.cpp index c3a7e043ff..d554d00fa5 100644 --- a/src/Mod/Drawing/Gui/DrawingView.cpp +++ b/src/Mod/Drawing/Gui/DrawingView.cpp @@ -461,6 +461,9 @@ bool DrawingView::onHasMsg(const char* pMsg) const else if (strcmp("PrintPdf", pMsg) == 0) { return true; } + else if (strcmp("AllowsOverlayOnHover", pMsg) == 0) { + return true; + } return false; } diff --git a/src/Mod/Spreadsheet/Gui/SpreadsheetView.cpp b/src/Mod/Spreadsheet/Gui/SpreadsheetView.cpp index b720f526f6..1ddbe5d26b 100644 --- a/src/Mod/Spreadsheet/Gui/SpreadsheetView.cpp +++ b/src/Mod/Spreadsheet/Gui/SpreadsheetView.cpp @@ -244,6 +244,9 @@ bool SheetView::onHasMsg(const char* pMsg) const if (strcmp(pMsg, "PrintPdf") == 0) { return true; } + else if (strcmp("AllowsOverlayOnHover", pMsg) == 0) { + return true; + } return false; } diff --git a/src/Mod/Start/Gui/StartView.cpp b/src/Mod/Start/Gui/StartView.cpp index 481e142398..4667c8db72 100644 --- a/src/Mod/Start/Gui/StartView.cpp +++ b/src/Mod/Start/Gui/StartView.cpp @@ -392,6 +392,15 @@ void StartView::newArchFile() const postStart(PostStartBehavior::doNotSwitchWorkbench); } +bool StartView::onHasMsg(const char* pMsg) const +{ + if (strcmp("AllowsOverlayOnHover", pMsg) == 0) { + return false; + } + + return MDIView::onHasMsg(pMsg); +} + void StartView::postStart(PostStartBehavior behavior) const { auto hGrp = App::GetApplication().GetParameterGroupByPath( diff --git a/src/Mod/Start/Gui/StartView.h b/src/Mod/Start/Gui/StartView.h index 1c4f589551..b9199018d5 100644 --- a/src/Mod/Start/Gui/StartView.h +++ b/src/Mod/Start/Gui/StartView.h @@ -70,6 +70,8 @@ public: void newDraftFile() const; void newArchFile() const; + bool onHasMsg(const char* pMsg) const override; + public: enum class PostStartBehavior { diff --git a/src/Mod/TechDraw/Gui/MDIViewPage.cpp b/src/Mod/TechDraw/Gui/MDIViewPage.cpp index 17390d23cd..3b364991e5 100644 --- a/src/Mod/TechDraw/Gui/MDIViewPage.cpp +++ b/src/Mod/TechDraw/Gui/MDIViewPage.cpp @@ -232,6 +232,9 @@ bool MDIViewPage::onHasMsg(const char* pMsg) const if (strcmp("ViewFit", pMsg) == 0) { return true; } + else if (strcmp("AllowsOverlayOnHover", pMsg) == 0) { + return true; + } else if (strcmp("CanPan",pMsg) == 0) { return true; }