diff --git a/src/qtquick/quickitemsmodel.cpp b/src/qtquick/quickitemsmodel.cpp --- a/src/qtquick/quickitemsmodel.cpp +++ b/src/qtquick/quickitemsmodel.cpp @@ -46,7 +46,7 @@ } ItemsModel *q; KNSCore::ItemsModel *model; - Engine *engine; + QObject *engine; KNSCore::Engine *coreEngine; QHash commentsModels; @@ -373,20 +373,25 @@ { if (d->engine != newEngine) { beginResetModel(); - d->engine = qobject_cast(newEngine); + d->engine = newEngine; d->model->deleteLater(); d->model = nullptr; d->coreEngine = nullptr; - if (d->engine) { - d->coreEngine = qobject_cast(d->engine->engine()); + Engine *test = qobject_cast(newEngine); + if (test) { + d->coreEngine = qobject_cast(test->engine()); + connect(test, &Engine::engineChanged, this, [this, test](){ + beginResetModel(); + d->model->deleteLater(); + d->model = nullptr; + d->coreEngine = qobject_cast(test->engine()); + endResetModel(); + }); + } else { + // Don't really need any testing here, if it's not a KNSCore + // engine, then it'll become the null we expected anyway + d->coreEngine = qobject_cast(newEngine); } - connect(d->engine, &Engine::engineChanged, this, [this](){ - beginResetModel(); - d->model->deleteLater(); - d->model = nullptr; - d->coreEngine = qobject_cast(d->engine->engine()); - endResetModel(); - }); emit engineChanged(); endResetModel(); } @@ -425,7 +430,9 @@ QStringList args = KShell::splitArgs(d->coreEngine->adoptionCommand(entry)); qCDebug(KNEWSTUFFQUICK) << "executing AdoptionCommand" << args; QProcess::startDetached(args.takeFirst(), args); - d->engine->idleMessage(i18n("Using %1", entry.name())); + if (Engine *test = qobject_cast(d->engine)) { + test->idleMessage(i18n("Using %1", entry.name())); + } } } }