1 /* 2 SPDX-FileCopyrightText: 2019 David Edmundson <davidedmundson@kde.org> 3 4 SPDX-License-Identifier: LGPL-2.0-or-later 5 */ 6 7 #pragma once 8 9 #include "kworkspace_export.h" 10 #include <QObject> 11 12 /** 13 * Public facing API for SessionManagement 14 */ 15 class KWORKSPACE_EXPORT SessionManagement : public QObject 16 { 17 Q_OBJECT 18 Q_PROPERTY(State state READ state NOTIFY stateChanged) 19 20 Q_PROPERTY(bool canShutdown READ canShutdown NOTIFY canShutdownChanged) 21 Q_PROPERTY(bool canReboot READ canReboot NOTIFY canRebootChanged) 22 Q_PROPERTY(bool canLogout READ canLogout NOTIFY canLogoutChanged) 23 Q_PROPERTY(bool canSuspend READ canSuspend NOTIFY canSuspendChanged) 24 Q_PROPERTY(bool canHibernate READ canHibernate NOTIFY canHibernateChanged) 25 Q_PROPERTY(bool canSwitchUser READ canSwitchUser NOTIFY canSwitchUserChanged) 26 Q_PROPERTY(bool canLock READ canLock NOTIFY canLockChanged) 27 Q_PROPERTY(bool canSaveSession READ canSaveSession NOTIFY canSaveSessionChanged) 28 29 public: 30 enum class State { 31 /** 32 * The backend is loading canXyz functions may not represent the true state 33 */ 34 Loading, 35 /** 36 * All loaded 37 */ 38 Ready, 39 /** 40 * Error creating a suitable backend, no actions will be available 41 */ 42 Error, 43 }; 44 Q_ENUM(State) 45 46 enum class ConfirmationMode { 47 /** 48 * Obey the user's confirmation setting. 49 */ 50 Default = -1, 51 /** 52 * Don't confirm, shutdown without asking. 53 */ 54 Skip = 0, 55 /** 56 * Always confirm, ask even if the user turned it off. 57 */ 58 ForcePrompt = 1, 59 }; 60 Q_ENUM(ConfirmationMode) 61 62 SessionManagement(QObject *parent = nullptr); 63 ~SessionManagement() override = default; 64 65 State state() const; 66 67 bool canShutdown() const; 68 bool canReboot() const; 69 bool canLogout() const; 70 bool canSuspend() const; 71 bool canHybridSuspend() const; 72 bool canHibernate() const; 73 bool canSwitchUser() const; 74 bool canLock() const; 75 bool canSaveSession() const; 76 77 public Q_SLOTS: 78 /** 79 * These requestX methods will either launch a prompt to shutdown or 80 * The user may cancel it at any point in the process 81 */ 82 void requestShutdown(ConfirmationMode = ConfirmationMode::Default); 83 void requestReboot(ConfirmationMode = ConfirmationMode::Default); 84 void requestLogout(ConfirmationMode = ConfirmationMode::Default); 85 86 void suspend(); 87 void hybridSuspend(); 88 void hibernate(); 89 90 void switchUser(); 91 void lock(); 92 93 void saveSession(); 94 95 Q_SIGNALS: 96 void stateChanged(); 97 void canShutdownChanged(); 98 void canRebootChanged(); 99 void canLogoutChanged(); 100 void canSuspendChanged(); 101 void canHybridSuspendChanged(); 102 void canHibernateChanged(); 103 void canSwitchUserChanged(); 104 void canLockChanged(); 105 void canSaveSessionChanged(); 106 107 void aboutToSuspend(); 108 void resumingFromSuspend(); 109 110 private: 111 void *d; // unused, just reserving the space in case we go ABI stable 112 }; 113