1 /* BEGIN_COMMON_COPYRIGHT_HEADER
2  * (c)LGPL2+
3  *
4  * LXQt - a lightweight, Qt based, desktop toolset
5  * https://lxqt.org/
6  *
7  * Copyright: 2016 LXQt team
8  * Authors:
9  *   Paulo Lieuthier <paulolieuthier@gmail.com>
10  *
11  * This program or library is free software; you can redistribute it
12  * and/or modify it under the terms of the GNU Lesser General Public
13  * License as published by the Free Software Foundation; either
14  * version 2.1 of the License, or (at your option) any later version.
15  *
16  * This library is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19  * Lesser General Public License for more details.
20 
21  * You should have received a copy of the GNU Lesser General
22  * Public License along with this library; if not, write to the
23  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
24  * Boston, MA 02110-1301 USA
25  *
26  * END_COMMON_COPYRIGHT_HEADER */
27 
28 #ifndef LOCKSCREENMANAGER_H
29 #define LOCKSCREENMANAGER_H
30 
31 #include <QObject>
32 #include <QDBusInterface>
33 #include <QScopedPointer>
34 #include <LXQt/ScreenSaver>
35 
36 class QDBusUnixFileDescriptor;
37 
38 class LockScreenProvider : public QObject
39 {
40     Q_OBJECT
41 
42 public:
~LockScreenProvider()43     ~LockScreenProvider() override {}
44 
45     virtual bool isValid() = 0;
46     virtual bool inhibit() = 0;
47     virtual void release() = 0;
48 
49 signals:
50     void aboutToSleep(bool beforeSleep);
51     void lockRequested();
52 };
53 
54 class LogindProvider : public LockScreenProvider
55 {
56     Q_OBJECT
57 
58 public:
59     explicit LogindProvider();
60     ~LogindProvider() override;
61 
62     bool isValid() override;
63     bool inhibit() override;
64     void release() override;
65 
66 private:
67     QDBusInterface mInterface;
68     QScopedPointer<QDBusUnixFileDescriptor> mFileDescriptor;
69 };
70 
71 class ConsoleKit2Provider : public LockScreenProvider
72 {
73     Q_OBJECT
74 
75 public:
76     explicit ConsoleKit2Provider();
77     ~ConsoleKit2Provider() override;
78 
79     bool isValid() override;
80     bool inhibit() override;
81     void release() override;
82 
83 private:
84     QDBusInterface mInterface;
85     bool mMethodInhibitPresent;
86     QScopedPointer<QDBusUnixFileDescriptor> mFileDescriptor;
87 };
88 
89 class LockScreenManager : public QObject
90 {
91     Q_OBJECT
92 
93 public:
94     explicit LockScreenManager(QObject *parent = nullptr);
95     ~LockScreenManager() override;
96 
97     bool startup(bool lockBeforeSleep, int powerAfterLockDelay/*!< ms*/);
98 
99 private:
100     void inhibit();
101 
102 private:
103     LockScreenProvider *mProvider;
104 
105     // screensaver
106     LXQt::ScreenSaver mScreenSaver;
107     bool mLockedBeforeSleep;
108 };
109 
110 #endif
111