diff --git a/shell/shellcorona.cpp b/shell/shellcorona.cpp index 187b68c32..3c3a5bd51 100644 --- a/shell/shellcorona.cpp +++ b/shell/shellcorona.cpp @@ -593,7 +593,7 @@ QRegion ShellCorona::availableScreenRegion(int id) const QRegion r = view->geometry(); foreach (const PanelView *v, m_panelViews) { - if (v->screen() == v->screen() && v->visibilityMode() != PanelView::AutoHide) { + if (v->isVisible() && v->screen() == v->screen() && v->visibilityMode() != PanelView::AutoHide) { //if the panel is being moved around, we still want to calculate it from the edge r -= v->geometryByDistance(0); } @@ -615,7 +615,7 @@ QRect ShellCorona::availableScreenRect(int id) const QRect r = view->geometry(); foreach (PanelView *v, m_panelViews) { - if (v->screen() == view->screen() && v->visibilityMode() != PanelView::AutoHide) { + if (v->isVisible() && v->screen() == view->screen() && v->visibilityMode() != PanelView::AutoHide) { switch (v->location()) { case Plasma::Types::LeftEdge: r.setLeft(r.left() + v->thickness()); @@ -951,6 +951,10 @@ void ShellCorona::createWaitingPanels() Q_ASSERT(qBound(0, requestedScreen, m_views.count() - 1) == requestedScreen); QScreen *screen = m_views[requestedScreen]->screen(); PanelView* panel = new PanelView(this, screen); + connect(panel, &QWindow::visibleChanged, [=]() { + emit availableScreenRectChanged(); + emit availableScreenRegionChanged(); + }); m_panelViews[cont] = panel; panel->setContainment(cont);