diff --git a/greeter/CMakeLists.txt b/greeter/CMakeLists.txt --- a/greeter/CMakeLists.txt +++ b/greeter/CMakeLists.txt @@ -29,6 +29,12 @@ BASENAME ksld ) +set(login1_manager_xml dbus/org.freedesktop.login1.Manager.xml) +qt5_add_dbus_interface(kscreenlocker_greet_SRCS + ${login1_manager_xml} + login1_interface +) + add_executable(kscreenlocker_greet ${kscreenlocker_greet_SRCS}) target_link_libraries(kscreenlocker_greet @@ -40,6 +46,7 @@ KF5::QuickAddons KF5::WindowSystem Qt5::Quick + Qt5::DBus Qt5::Qml Qt5::X11Extras ${X11_LIBRARIES} diff --git a/greeter/authenticator.h b/greeter/authenticator.h --- a/greeter/authenticator.h +++ b/greeter/authenticator.h @@ -48,6 +48,7 @@ void failed(); void succeeded(); void graceLockedChanged(); + void suspend() const; void message(const QString & msg); // don't remove the "msg" param, used in QML!!! void error(const QString & err); // don't remove the "err" param, used in QML!!! diff --git a/greeter/dbus/org.freedesktop.login1.Manager.xml b/greeter/dbus/org.freedesktop.login1.Manager.xml new file mode 100644 --- /dev/null +++ b/greeter/dbus/org.freedesktop.login1.Manager.xml @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/greeter/fallbacktheme/Greeter.qml b/greeter/fallbacktheme/Greeter.qml --- a/greeter/fallbacktheme/Greeter.qml +++ b/greeter/fallbacktheme/Greeter.qml @@ -162,5 +162,8 @@ onError: function(text) { root.notification = text; } + onSuspend: { + password.clear(); + } } } diff --git a/greeter/greeterapp.h b/greeter/greeterapp.h --- a/greeter/greeterapp.h +++ b/greeter/greeterapp.h @@ -72,6 +72,7 @@ public Q_SLOTS: void desktopResized(); + void onPrepareForSleep(bool start); protected: bool eventFilter(QObject *obj, QEvent *event) override; diff --git a/greeter/greeterapp.cpp b/greeter/greeterapp.cpp --- a/greeter/greeterapp.cpp +++ b/greeter/greeterapp.cpp @@ -24,6 +24,7 @@ #include "noaccessnetworkaccessmanagerfactory.h" #include "wallpaper_integration.h" #include "lnf_integration.h" +#include "login1_interface.h" #include @@ -54,6 +55,7 @@ #include #include #include +#include #include #include @@ -133,6 +135,20 @@ if (QX11Info::isPlatformX11()) { installNativeEventFilter(new FocusOutEventFilter); } + + QDBusConnection::systemBus().connect(QStringLiteral("org.freedesktop.login1"), + QStringLiteral("/org/freedesktop/login1"), + QStringLiteral("org.freedesktop.login1.Manager"), + QStringLiteral("PrepareForSleep"), + this, + SLOT(onPrepareForSleep(bool))); +} + +void UnlockApp::onPrepareForSleep(bool start) { + if (start) { + // start of sleep, aka suspend + emit m_authenticator->suspend(); + } } UnlockApp::~UnlockApp()