From 5ce2e2b707db361a5e2377341167221dab3be190 Mon Sep 17 00:00:00 2001 From: Kai Uwe Broulik Date: Sun, 1 Nov 2015 16:29:04 +0100 Subject: [PATCH] [kscreenlocker_greet] Fix QML fallback With the change to the QuickViewSharedEngine, it seems to load synchronously, meaning the status changed slot is never called and when I broke my lockscreen I locked myself out in the process. REVIEW: 125848 --- ksmserver/screenlocker/greeter/greeterapp.cpp | 25 ++++++------------- ksmserver/screenlocker/greeter/greeterapp.h | 1 - 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/ksmserver/screenlocker/greeter/greeterapp.cpp b/ksmserver/screenlocker/greeter/greeterapp.cpp index c9c49291b..b93900fd2 100644 --- a/ksmserver/screenlocker/greeter/greeterapp.cpp +++ b/ksmserver/screenlocker/greeter/greeterapp.cpp @@ -150,22 +150,6 @@ void UnlockApp::initialize() installEventFilter(this); } -void UnlockApp::viewStatusChanged(const QQmlComponent::Status &status) -{ - auto *view = qobject_cast(sender()); - if (!view) { - return; - } - - const QUrl fallbackUrl(QStringLiteral("qrc:/fallbacktheme/LockScreen.qml")); - - // on error, load the fallback lockscreen to not lock the user out of the system - if (status == QQmlComponent::Error && view && view->source() != fallbackUrl) { - m_mainQmlPath = fallbackUrl; - view->setSource(m_mainQmlPath); - } -} - void UnlockApp::desktopResized() { const int nScreens = screens().count(); @@ -181,7 +165,6 @@ void UnlockApp::desktopResized() connect(QGuiApplication::screens()[i], &QObject::destroyed, this, &UnlockApp::desktopResized); // create the view auto *view = new KQuickAddons::QuickViewSharedEngine(); - connect(view, &KQuickAddons::QuickViewSharedEngine::statusChanged, this, &UnlockApp::viewStatusChanged); view->setColor(Qt::black); // first create KDeclarative, to be sure that it created a KIO Network Factory @@ -220,6 +203,14 @@ void UnlockApp::desktopResized() context->setContextProperty(QStringLiteral("org_kde_plasma_screenlocker_greeter_interfaceVersion"), 1); view->setSource(m_mainQmlPath); + // on error, load the fallback lockscreen to not lock the user out of the system + if (view->status() == QQmlComponent::Error) { + static const QUrl fallbackUrl(QUrl(QStringLiteral("qrc:/fallbacktheme/LockScreen.qml"))); + + qWarning() << "Failed to load lockscreen QML, falling back to built-in locker"; + m_mainQmlPath = fallbackUrl; + view->setSource(fallbackUrl); + } view->setResizeMode(KQuickAddons::QuickViewSharedEngine::SizeRootObjectToView); QQmlProperty lockProperty(view->rootObject(), QStringLiteral("locked")); diff --git a/ksmserver/screenlocker/greeter/greeterapp.h b/ksmserver/screenlocker/greeter/greeterapp.h index becd669ae..dcfc5d1a6 100644 --- a/ksmserver/screenlocker/greeter/greeterapp.h +++ b/ksmserver/screenlocker/greeter/greeterapp.h @@ -68,7 +68,6 @@ protected: virtual bool eventFilter(QObject *obj, QEvent *event); private Q_SLOTS: - void viewStatusChanged(const QQmlComponent::Status &status); void resetRequestIgnore(); void suspendToRam(); void suspendToDisk();