diff --git a/src/plasmaquick/appletquickitem.cpp b/src/plasmaquick/appletquickitem.cpp --- a/src/plasmaquick/appletquickitem.cpp +++ b/src/plasmaquick/appletquickitem.cpp @@ -41,6 +41,7 @@ { QHash AppletQuickItemPrivate::s_rootObjects = QHash(); +QHash AppletQuickItemPrivate::s_qqc1PlasmaStyleComponents; AppletQuickItemPrivate::AppletQuickItemPrivate(Plasma::Applet *a, AppletQuickItem *item) @@ -490,16 +491,25 @@ //Force QtQuickControls to use the "Plasma" style for this engine. //this way is possible to mix QtQuickControls and plasma components in applets //while still having the desktop style in configuration dialogs - QQmlComponent c(engine); - c.setData(QByteArrayLiteral("import QtQuick 2.1\n\ - import QtQuick.Controls 1.0\n\ - import QtQuick.Controls.Private 1.0\n \ - Item {\ - Component.onCompleted: {\ - Settings.styleName = \"Plasma\";\ - }\ - }"), QUrl()); - QObject *o = c.create(); + QQmlComponent *c = AppletQuickItemPrivate::s_qqc1PlasmaStyleComponents.value(engine); + if (!c) { + c = new QQmlComponent(engine); + // FIXME never executed, even if I kquitapp plasmashell + connect(engine, &QObject::destroyed, [engine] { + AppletQuickItemPrivate::s_qqc1PlasmaStyleComponents.remove(engine); + }); + + c->setData(QByteArrayLiteral("import QtQml 2.1\n\ + import QtQuick.Controls 1.0\n\ + import QtQuick.Controls.Private 1.0\n \ + QtObject {\n \ + Component.onCompleted: Settings.styleName = 'Plasma' \n \ + }"), QUrl()); + + AppletQuickItemPrivate::s_qqc1PlasmaStyleComponents.insert(engine, c); + } + + QObject *o = c->create(); o->deleteLater(); d->qmlObject->setSource(QUrl::fromLocalFile(d->applet->kPackage().filePath("mainscript"))); diff --git a/src/plasmaquick/private/appletquickitem_p.h b/src/plasmaquick/private/appletquickitem_p.h --- a/src/plasmaquick/private/appletquickitem_p.h +++ b/src/plasmaquick/private/appletquickitem_p.h @@ -107,6 +107,7 @@ bool activationTogglesExpanded : 1; static QHash s_rootObjects; + static QHash s_qqc1PlasmaStyleComponents; }; }