From a21773f440d2725707b53be9875215a34fb5f567 Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Fri, 1 Apr 2022 01:52:12 +0300 Subject: [PATCH] kgreeter: ask for confirmation when user is logged in on poweroff/reboot Signed-off-by: Ivailo Monev --- kgreeter/kgreeter.cpp | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/kgreeter/kgreeter.cpp b/kgreeter/kgreeter.cpp index c7b27b29..dfe094ad 100644 --- a/kgreeter/kgreeter.cpp +++ b/kgreeter/kgreeter.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include @@ -51,6 +52,8 @@ private Q_SLOTS: void slotLogin(); private: + bool isUserLogged() const; + Ui::KGreeter m_ui; LightDMGreeter *m_ldmgreeter; QImage m_background; @@ -266,6 +269,16 @@ void KGreeter::slotHibernate() void KGreeter::slotPoweroff() { + if (isUserLogged()) { + const int kmessageresult = KMessageBox::questionYesNo( + this, + i18n("There is user logged in, are you sure you want to poweroff?") + ); + if (kmessageresult != KMessageBox::Yes) { + return; + } + } + g_autoptr(GError) gliberror = NULL; if (!lightdm_shutdown(&gliberror)) { statusBar()->showMessage(i18n("Could not poweroff: %1", gliberror->message)); @@ -274,6 +287,16 @@ void KGreeter::slotPoweroff() void KGreeter::slotReboot() { + if (isUserLogged()) { + const int kmessageresult = KMessageBox::questionYesNo( + this, + i18n("There is user logged in, are you sure you want to reboot?") + ); + if (kmessageresult != KMessageBox::Yes) { + return; + } + } + g_autoptr(GError) gliberror = NULL; if (!lightdm_restart(&gliberror)) { statusBar()->showMessage(i18n("Could not reboot: %1", gliberror->message)); @@ -305,6 +328,20 @@ void KGreeter::slotLogin() g_main_loop_run(glibloop); } +bool KGreeter::isUserLogged() const +{ + GList *ldmusers = lightdm_user_list_get_users(lightdm_user_list_get_instance()); + for (GList *ldmitem = ldmusers; ldmitem; ldmitem = ldmitem->next) { + LightDMUser *ldmuser = static_cast(ldmitem->data); + Q_ASSERT(ldmuser); + + if (lightdm_user_get_logged_in(ldmuser)) { + return true; + } + } + return false; +} + int main(int argc, char**argv) { QApplication app(argc, argv);