diff --git a/shell/panelview.h b/shell/panelview.h --- a/shell/panelview.h +++ b/shell/panelview.h @@ -167,7 +167,6 @@ void showEvent(QShowEvent *event) override; void moveEvent(QMoveEvent *ev) override; bool event(QEvent *e) override; - void updateMask(); Q_SIGNALS: void alignmentChanged(); @@ -202,6 +201,8 @@ void restoreAutoHide(); void screenDestroyed(QObject* screen); void adaptToScreen(); + void handleQmlStatusChange(QQmlComponent::Status status); + void updateMask(); private: void resizePanel(); diff --git a/shell/panelview.cpp b/shell/panelview.cpp --- a/shell/panelview.cpp +++ b/shell/panelview.cpp @@ -37,6 +37,7 @@ #include #include +#include #include #include @@ -78,6 +79,10 @@ connect(&m_theme, &Plasma::Theme::themeChanged, this, &PanelView::themeChanged); connect(this, SIGNAL(backgroundHintsChanged()), this, SLOT(themeChanged())); + // TODO: add finished/componentComplete signal to QuickViewSharedEngine, + // so we exactly know when rootobject is available + connect(this, &QuickViewSharedEngine::statusChanged, + this, &PanelView::handleQmlStatusChange); m_positionPaneltimer.setSingleShot(true); m_positionPaneltimer.setInterval(150); @@ -723,15 +728,19 @@ PlasmaQuick::ContainmentView::resizeEvent(ev); +#if PLASMA_VERSION < QT_VERSION_CHECK(5,59,0) updateMask(); +#endif } void PanelView::moveEvent(QMoveEvent *ev) { updateEnabledBorders(); m_strutsTimer.start(STRUTSTIMERDELAY); PlasmaQuick::ContainmentView::moveEvent(ev); +#if PLASMA_VERSION < QT_VERSION_CHECK(5,59,0) updateMask(); +#endif } void PanelView::integrateScreen() @@ -1116,7 +1125,9 @@ m_theme.backgroundSaturation()); } +#if PLASMA_VERSION < QT_VERSION_CHECK(5,59,0) updateMask(); +#endif } void PanelView::containmentChanged() @@ -1148,6 +1159,26 @@ }); } +void PanelView::handleQmlStatusChange(QQmlComponent::Status status) +{ + if (status != QQmlComponent::Ready) { + return; + } + + QQuickItem *rootObject = this->rootObject(); + if (rootObject) { + disconnect(this, &QuickViewSharedEngine::statusChanged, + this, &PanelView::handleQmlStatusChange); + + const QVariant maskProperty = rootObject->property("panelMask"); + if (static_cast(maskProperty.type()) == QMetaType::QRegion) { + connect(rootObject, SIGNAL(panelMaskChanged()), + this, SLOT(updateMask())); + updateMask(); + } + } +} + void PanelView::statusChanged(Plasma::Types::ItemStatus status) { if (status == Plasma::Types::NeedsAttentionStatus) {