kgreeter: ask for confirmation when user is logged in on poweroff/reboot

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2022-04-01 01:52:12 +03:00
parent 222670b71c
commit a21773f440

View file

@ -3,6 +3,7 @@
#include <QSettings>
#include <QMainWindow>
#include <QPainter>
#include <KMessageBox>
#include <KIcon>
#include <KStyle>
#include <KGlobalSettings>
@ -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<LightDMUser*>(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);