diff --git a/app/view/screenedgeghostwindow.cpp b/app/view/screenedgeghostwindow.cpp index dfedf30fc..3f72deaf8 100644 --- a/app/view/screenedgeghostwindow.cpp +++ b/app/view/screenedgeghostwindow.cpp @@ -267,7 +267,12 @@ void ScreenEdgeGhostWindow::setContainsMouse(bool contains) bool ScreenEdgeGhostWindow::event(QEvent *e) { - if (e->type() == QEvent::Enter || e->type() == QEvent::DragEnter) { + if (e->type() == QEvent::DragEnter) { + m_delayedContainsMouse = false; + m_delayedMouseTimer.stop(); + setContainsMouse(true); + emit dragEntered(); + } else if (e->type() == QEvent::Enter || e->type() == QEvent::DragEnter) { m_delayedContainsMouse = true; if (!m_delayedMouseTimer.isActive()) { m_delayedMouseTimer.start(); diff --git a/app/view/screenedgeghostwindow.h b/app/view/screenedgeghostwindow.h index b76b21d76..f306338fd 100644 --- a/app/view/screenedgeghostwindow.h +++ b/app/view/screenedgeghostwindow.h @@ -76,6 +76,7 @@ public: signals: void containsMouseChanged(bool contains); + void dragEntered(); protected: bool event(QEvent *ev) override; diff --git a/app/view/visibilitymanager.cpp b/app/view/visibilitymanager.cpp index 418ce1666..e51526e0e 100644 --- a/app/view/visibilitymanager.cpp +++ b/app/view/visibilitymanager.cpp @@ -408,7 +408,7 @@ void VisibilityManager::updateGhostWindowState() && m_latteView->layout()->name() == m_corona->layoutsManager()->currentLayoutName())); if (inCurrentLayout) { - m_wm->setEdgeStateFor(m_edgeGhostWindow, m_isHidden); + m_wm->setEdgeStateFor(m_edgeGhostWindow, m_isHidden && !m_dragEnter); } else { m_wm->setEdgeStateFor(m_edgeGhostWindow, false); } @@ -647,14 +647,16 @@ void VisibilityManager::viewEventManager(QEvent *ev) break; case QEvent::Leave: + m_dragEnter = false; setContainsMouse(false); break; case QEvent::DragEnter: m_dragEnter = true; - if (m_isHidden) + if (m_isHidden) { emit mustBeShown(); + } break; @@ -722,6 +724,12 @@ void VisibilityManager::createEdgeGhostWindow() } }); + connect(m_edgeGhostWindow, &ScreenEdgeGhostWindow::dragEntered, this, [&]() { + if (m_isHidden) { + emit mustBeShown(); + } + }); + m_connectionsKWinEdges[0] = connect(m_wm, &WindowSystem::AbstractWindowInterface::currentActivityChanged, this, [&]() { bool inCurrentLayout = (m_corona->layoutsManager()->memoryUsage() == Types::SingleLayout ||