diff --git a/kstyle/breezeshadowhelper.cpp b/kstyle/breezeshadowhelper.cpp index 1e5327a1..98c569d2 100644 --- a/kstyle/breezeshadowhelper.cpp +++ b/kstyle/breezeshadowhelper.cpp @@ -64,7 +64,8 @@ namespace Breeze , _shmPool( Q_NULLPTR ) #endif { - initializeWayland(); + // delay till event dispatcher is running as Wayland is highly async + QMetaObject::invokeMethod(this, "initializeWayland", Qt::QueuedConnection); } //_______________________________________________________ diff --git a/kstyle/breezeshadowhelper.h b/kstyle/breezeshadowhelper.h index 7f02caa0..2d9db869 100644 --- a/kstyle/breezeshadowhelper.h +++ b/kstyle/breezeshadowhelper.h @@ -95,6 +95,9 @@ namespace Breeze //* unregister widget void objectDeleted( QObject* ); + //* initializes the Wayland specific parts + void initializeWayland(); + protected: //* true if widget is a menu @@ -140,9 +143,6 @@ namespace Breeze //* uninstall shadow on given widget for Wayland void uninstallWaylandShadows( QWidget* ) const; - //* initializes the Wayland specific parts - void initializeWayland(); - //* gets the shadow margins for the given widget QMargins shadowMargins( QWidget* ) const; diff --git a/kstyle/breezestyle.cpp b/kstyle/breezestyle.cpp index 3b8ef6c3..6a6d94b8 100644 --- a/kstyle/breezestyle.cpp +++ b/kstyle/breezestyle.cpp @@ -197,9 +197,24 @@ namespace Breeze //______________________________________________________________ Style::~Style( void ) + { + cleanup(); + } + + //______________________________________________________________ + void Style::unpolish( QApplication* ) + { + // NOTE: unpolish is not called in general on tear-down of Application + // only when a new QStyle is loaded by the QApplication unpolish is invoked + cleanup(); + } + + void Style::cleanup( void ) { delete _shadowHelper; + _shadowHelper = nullptr; delete _helper; + _helper = nullptr; } //______________________________________________________________ diff --git a/kstyle/breezestyle.h b/kstyle/breezestyle.h index a627252a..aa2478b6 100644 --- a/kstyle/breezestyle.h +++ b/kstyle/breezestyle.h @@ -92,7 +92,6 @@ namespace Breeze //* needed to avoid warnings at compilation time using ParentStyleClass::polish; - using ParentStyleClass::unpolish; //* widget polishing virtual void polish( QWidget* ); @@ -100,6 +99,9 @@ namespace Breeze //* widget unpolishing virtual void unpolish( QWidget* ); + //* application unpolishing + void unpolish( QApplication* ) override; + //* polish scrollarea void polishScrollArea( QAbstractScrollArea* ); @@ -471,6 +473,9 @@ namespace Breeze private: + //* shared cleanup for unpolish and dtor + void cleanup(); + //*@name scrollbar button types (for addLine and subLine ) //@{ ScrollBarButtonType _addLineButtons;