diff --git a/kstyle/breezemdiwindowshadow.h b/kstyle/breezemdiwindowshadow.h --- a/kstyle/breezemdiwindowshadow.h +++ b/kstyle/breezemdiwindowshadow.h @@ -26,12 +26,15 @@ #include #include +#include #include "breezetileset.h" namespace Breeze { + class ShadowHelper; + //* frame shadow /** this allows the shadow to be painted over the widgets viewport */ class MdiWindowShadow: public QWidget @@ -91,9 +94,9 @@ virtual ~MdiWindowShadowFactory() {} - //* set shadow tiles - void setShadowTiles( const TileSet& shadowTiles ) - { _shadowTiles = shadowTiles; } + //* set shadow helper + void setShadowHelper( ShadowHelper* shadowHelper ) + { _shadowHelper = shadowHelper; } //* register widget bool registerWidget( QWidget* ); @@ -160,8 +163,8 @@ //* set of registered widgets QSet _registeredWidgets; - //* tileset used to draw shadow - TileSet _shadowTiles; + //* shadow helper used to generate the shadows + QPointer _shadowHelper; }; diff --git a/kstyle/breezemdiwindowshadow.cpp b/kstyle/breezemdiwindowshadow.cpp --- a/kstyle/breezemdiwindowshadow.cpp +++ b/kstyle/breezemdiwindowshadow.cpp @@ -228,8 +228,10 @@ // make sure shadow is not already installed if( findShadow( object ) ) return; + if ( !_shadowHelper ) return; + // create new shadow - auto windowShadow( new MdiWindowShadow( widget->parentWidget(), _shadowTiles ) ); + auto windowShadow( new MdiWindowShadow( widget->parentWidget(), _shadowHelper->shadowTiles() ) ); windowShadow->setWidget( widget ); } diff --git a/kstyle/breezeshadowhelper.cpp b/kstyle/breezeshadowhelper.cpp --- a/kstyle/breezeshadowhelper.cpp +++ b/kstyle/breezeshadowhelper.cpp @@ -216,9 +216,6 @@ // reset reset(); - // create shadow tiles - shadowTiles(); - // update property for registered widgets for( QMap::const_iterator iter = _widgets.constBegin(); iter != _widgets.constEnd(); ++iter ) { installShadows( iter.key() ); } @@ -480,15 +477,20 @@ //_______________________________________________________ bool ShadowHelper::installShadows( QWidget* widget ) { - if( !widget || !_shadowTiles.isValid() ) return false; + if( !widget ) return false; /* From bespin code. Supposibly prevent playing with some 'pseudo-widgets' that have winId matching some other -random- window */ if( !(widget->testAttribute(Qt::WA_WState_Created) && widget->internalWinId() )) { return false; } + // create shadow tiles if needed + shadowTiles(); + + if( !_shadowTiles.isValid() ) return false; + if( Helper::isX11() ) return installX11Shadows( widget ); if( Helper::isWayland() ) return installWaylandShadows( widget ); diff --git a/kstyle/breezestyle.cpp b/kstyle/breezestyle.cpp --- a/kstyle/breezestyle.cpp +++ b/kstyle/breezestyle.cpp @@ -1433,7 +1433,7 @@ _shadowHelper->loadConfig(); // set mdiwindow factory shadow tiles - _mdiWindowShadowFactory->setShadowTiles( _shadowHelper->shadowTiles() ); + _mdiWindowShadowFactory->setShadowHelper( _shadowHelper ); // clear icon cache _iconCache.clear();