close at applet destruction
and bury behind a weakpointer BUG:332015 in some cases seems a crash still happens, but is completely unrelated with the one in 332015, so should be a separate bug
This commit is contained in:
parent
cc6cc00282
commit
5fe26c0da1
@ -52,7 +52,7 @@ public:
|
|||||||
|
|
||||||
void init();
|
void init();
|
||||||
ConfigView *q;
|
ConfigView *q;
|
||||||
Plasma::Applet *applet;
|
QWeakPointer <Plasma::Applet> applet;
|
||||||
ConfigModel *configModel;
|
ConfigModel *configModel;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -64,7 +64,7 @@ ConfigViewPrivate::ConfigViewPrivate(Plasma::Applet *appl, ConfigView *view)
|
|||||||
|
|
||||||
void ConfigViewPrivate::init()
|
void ConfigViewPrivate::init()
|
||||||
{
|
{
|
||||||
applet->setUserConfiguring(true);
|
applet.data()->setUserConfiguring(true);
|
||||||
|
|
||||||
KDeclarative::KDeclarative kdeclarative;
|
KDeclarative::KDeclarative kdeclarative;
|
||||||
kdeclarative.setDeclarativeEngine(q->engine());
|
kdeclarative.setDeclarativeEngine(q->engine());
|
||||||
@ -74,10 +74,10 @@ void ConfigViewPrivate::init()
|
|||||||
|
|
||||||
//FIXME: problem on nvidia, all windows should be transparent or won't show
|
//FIXME: problem on nvidia, all windows should be transparent or won't show
|
||||||
q->setColor(Qt::transparent);
|
q->setColor(Qt::transparent);
|
||||||
q->setTitle(i18n("%1 Settings", applet->title()));
|
q->setTitle(i18n("%1 Settings", applet.data()->title()));
|
||||||
|
|
||||||
|
|
||||||
if (!applet->containment()->corona()->package().isValid()) {
|
if (!applet.data()->containment()->corona()->package().isValid()) {
|
||||||
qWarning() << "Invalid home screen package";
|
qWarning() << "Invalid home screen package";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,16 +85,16 @@ void ConfigViewPrivate::init()
|
|||||||
|
|
||||||
|
|
||||||
//config model local of the applet
|
//config model local of the applet
|
||||||
QQmlComponent *component = new QQmlComponent(q->engine(), QUrl::fromLocalFile(applet->package().filePath("configmodel")), q);
|
QQmlComponent *component = new QQmlComponent(q->engine(), QUrl::fromLocalFile(applet.data()->package().filePath("configmodel")), q);
|
||||||
QObject *object = component->beginCreate(q->engine()->rootContext());
|
QObject *object = component->beginCreate(q->engine()->rootContext());
|
||||||
configModel = qobject_cast<ConfigModel *>(object);
|
configModel = qobject_cast<ConfigModel *>(object);
|
||||||
if (configModel) {
|
if (configModel) {
|
||||||
configModel->setApplet(applet);
|
configModel->setApplet(applet.data());
|
||||||
} else {
|
} else {
|
||||||
delete object;
|
delete object;
|
||||||
}
|
}
|
||||||
|
|
||||||
q->engine()->rootContext()->setContextProperty("plasmoid", applet->property("_plasma_graphicObject").value<QObject*>());
|
q->engine()->rootContext()->setContextProperty("plasmoid", applet.data()->property("_plasma_graphicObject").value<QObject*>());
|
||||||
q->engine()->rootContext()->setContextProperty("configDialog", q);
|
q->engine()->rootContext()->setContextProperty("configDialog", q);
|
||||||
component->completeCreate();
|
component->completeCreate();
|
||||||
delete component;
|
delete component;
|
||||||
@ -109,16 +109,19 @@ ConfigView::ConfigView(Plasma::Applet *applet, QWindow *parent)
|
|||||||
d->init();
|
d->init();
|
||||||
qmlRegisterType<ConfigModel>("org.kde.plasma.configuration", 2, 0, "ConfigModel");
|
qmlRegisterType<ConfigModel>("org.kde.plasma.configuration", 2, 0, "ConfigModel");
|
||||||
qmlRegisterType<ConfigCategory>("org.kde.plasma.configuration", 2, 0, "ConfigCategory");
|
qmlRegisterType<ConfigCategory>("org.kde.plasma.configuration", 2, 0, "ConfigCategory");
|
||||||
|
connect(applet, &QObject::destroyed, this, &ConfigView::close);
|
||||||
}
|
}
|
||||||
|
|
||||||
ConfigView::~ConfigView()
|
ConfigView::~ConfigView()
|
||||||
{
|
{
|
||||||
d->applet->setUserConfiguring(false);
|
if (d->applet) {
|
||||||
|
d->applet.data()->setUserConfiguring(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigView::init()
|
void ConfigView::init()
|
||||||
{
|
{
|
||||||
setSource(QUrl::fromLocalFile(d->applet->containment()->corona()->package().filePath("appletconfigurationui")));
|
setSource(QUrl::fromLocalFile(d->applet.data()->containment()->corona()->package().filePath("appletconfigurationui")));
|
||||||
}
|
}
|
||||||
|
|
||||||
ConfigModel *ConfigView::configModel() const
|
ConfigModel *ConfigView::configModel() const
|
||||||
@ -128,16 +131,20 @@ ConfigModel *ConfigView::configModel() const
|
|||||||
|
|
||||||
QString ConfigView::appletGlobalShortcut() const
|
QString ConfigView::appletGlobalShortcut() const
|
||||||
{
|
{
|
||||||
return d->applet->globalShortcut().toString();
|
if (!d->applet) {
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
|
return d->applet.data()->globalShortcut().toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigView::setAppletGlobalShortcut(const QString &shortcut)
|
void ConfigView::setAppletGlobalShortcut(const QString &shortcut)
|
||||||
{
|
{
|
||||||
if (d->applet->globalShortcut().toString().toLower() == shortcut.toLower()) {
|
if (!d->applet || d->applet.data()->globalShortcut().toString().toLower() == shortcut.toLower()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
d->applet->setGlobalShortcut(shortcut);
|
d->applet.data()->setGlobalShortcut(shortcut);
|
||||||
emit appletGlobalShortcutChanged();
|
emit appletGlobalShortcutChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user