diff --git a/kstyle/breezeshadowhelper.cpp b/kstyle/breezeshadowhelper.cpp index e66c6f05..c05bbf28 100644 --- a/kstyle/breezeshadowhelper.cpp +++ b/kstyle/breezeshadowhelper.cpp @@ -132,7 +132,7 @@ namespace Breeze widget->installEventFilter( this ); // connect destroy signal - connect( widget, &QObject::destroyed, this, &ShadowHelper::objectDeleted ); + connect( widget, &QObject::destroyed, this, &ShadowHelper::widgetDeleted ); return true; @@ -278,12 +278,17 @@ namespace Breeze //_______________________________________________________ - void ShadowHelper::objectDeleted( QObject* object ) + void ShadowHelper::widgetDeleted( QObject* object ) { QWidget* widget( static_cast( object ) ); _widgets.remove( widget ); - _shadows.remove( widget ); + } + //_______________________________________________________ + void ShadowHelper::windowDeleted( QObject* object ) + { + QWindow* window( static_cast( object ) ); + _shadows.remove( window ); } //_______________________________________________________ @@ -381,11 +386,20 @@ namespace Breeze const QVector& tiles = createShadowTiles(); if( tiles.count() != numTiles ) return; + // get the underlying window for the widget + QWindow* window = widget->windowHandle(); + // find a shadow associated with the widget - KWindowShadow*& shadow = _shadows[ widget ]; + KWindowShadow*& shadow = _shadows[ window ]; if( !shadow ) - { shadow = new KWindowShadow( widget ); } + { + // if there is no shadow yet, create one + shadow = new KWindowShadow( window ); + + // connect destroy signal + connect( window, &QWindow::destroyed, this, &ShadowHelper::windowDeleted ); + } if( shadow->isCreated() ) { shadow->destroy(); } @@ -399,7 +413,7 @@ namespace Breeze shadow->setLeftTile( tiles[ 6 ] ); shadow->setTopLeftTile( tiles[ 7 ] ); shadow->setPadding( shadowMargins( widget ) ); - shadow->setWindow( widget->windowHandle() ); + shadow->setWindow( window ); shadow->create(); } @@ -453,7 +467,7 @@ namespace Breeze //_______________________________________________________ void ShadowHelper::uninstallShadows( QWidget* widget ) { - delete _shadows.take( widget ); + delete _shadows.take( widget->windowHandle() ); } } diff --git a/kstyle/breezeshadowhelper.h b/kstyle/breezeshadowhelper.h index 74ccc05b..c2baaf5b 100644 --- a/kstyle/breezeshadowhelper.h +++ b/kstyle/breezeshadowhelper.h @@ -111,7 +111,10 @@ namespace Breeze protected Q_SLOTS: //* unregister widget - void objectDeleted( QObject* ); + void widgetDeleted( QObject* ); + + //* unregister window + void windowDeleted( QObject* ); protected: @@ -154,7 +157,7 @@ namespace Breeze QSet _widgets; //* managed shadows - QMap _shadows; + QMap _shadows; //* tileset TileSet _shadowTiles;