While fussing with /usr/share/plasma/shells/.../contents/views/Panel.qml, I tried dynamically disabling the blur+shadows on the panel (using a repeating timer). I noticed that while the blur effect went away, the shadows did not. QML: panel.backgroundHints = Plasma.Types.NoBackground C++: https://github.com/KDE/plasma-workspace/blame/master/shell/panelview.cpp setBackgroundHints(Plasma::Types::NoBackground) emit backgroundHintsChanged() connect(this, SIGNAL(backgroundHintsChanged()), this, SLOT(themeChanged())); themeChanged() calls updateMask() but doesn't call updateEnabledBorders(). updateEnabledBorders() is what disables the panel shadow. PanelView::resizeEvent and PanelView::moveEvent call both "update" functions, so You can test this by editing Panel.qml. Note that "panel" == PanelView.cpp. Video: https://streamable.com/cishh I did try resizing the panel, and the shadow did dissappear. However it did not reappear when I resized it again.
There's also something wrong going on in PanelShadows. Even if I fix the issue you mentioned, the shadow doesn't re-appear after it's gone. It never calls addShadow again after initialization but it does removeShadow when background hints become "NoBackground", so updateShadows won't do anything. I then fixed that but it still wouldn't help :/