summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Edmundson <[email protected]>2018-10-10 14:44:51 +0100
committerDavid Edmundson <[email protected]>2018-10-10 14:44:51 +0100
commit00395be673abf557d35a290c1515ee7d1be7fb9e (patch)
treecddbe0f038c1697cc5f2c22ba09f7c1d6ec23283
parent06cb6cb61fec8b74a777e0d7eb795fe7da3ab12a (diff)
[logoutprompt] Split greeter class into separate .h .cpp files
Summary: No code changes Test Plan: Compiles Reviewers: #plasma, broulik Reviewed By: #plasma, broulik Subscribers: plasma-devel Tags: #plasma Differential Revision: https://phabricator.kde.org/D16065
-rw-r--r--logout-greeter/CMakeLists.txt2
-rw-r--r--logout-greeter/greeter.cpp141
-rw-r--r--logout-greeter/greeter.h64
-rw-r--r--logout-greeter/main.cpp134
4 files changed, 208 insertions, 133 deletions
diff --git a/logout-greeter/CMakeLists.txt b/logout-greeter/CMakeLists.txt
index 6acdab5..375a36a 100644
--- a/logout-greeter/CMakeLists.txt
+++ b/logout-greeter/CMakeLists.txt
@@ -1,4 +1,4 @@
-set(LOGOUT_GREETER_SRCS main.cpp shutdowndlg.cpp)
+set(LOGOUT_GREETER_SRCS main.cpp greeter.cpp shutdowndlg.cpp)
ecm_qt_declare_logging_category(LOGOUT_GREETER_SRCS HEADER debug.h
IDENTIFIER LOGOUT_GREETER
CATEGORY_NAME kde.logout_greeter
diff --git a/logout-greeter/greeter.cpp b/logout-greeter/greeter.cpp
new file mode 100644
index 0000000..eb655f3
--- /dev/null
+++ b/logout-greeter/greeter.cpp
@@ -0,0 +1,141 @@
+/*****************************************************************
+ksmserver - the KDE session management server
+
+Copyright 2016 Martin Graesslin <[email protected]>
+Copyright 2018 David Edmundson <[email protected]>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+******************************************************************/
+
+#include "greeter.h"
+
+#include <QDebug>
+#include <QScreen>
+#include <QApplication>
+
+#include "shutdowndlg.h"
+
+#include <KQuickAddons/QtQuickSettings>
+#include <KWindowSystem>
+
+#include <KWayland/Client/connection_thread.h>
+#include <KWayland/Client/registry.h>
+#include <KWayland/Client/plasmashell.h>
+
+#include <unistd.h>
+
+Greeter::Greeter(int fd, bool shutdownAllowed, bool choose, KWorkSpace::ShutdownType type)
+ : QObject()
+ , m_fd(fd)
+ , m_shutdownAllowed(shutdownAllowed)
+ , m_choose(choose)
+ , m_shutdownType(type)
+ , m_waylandPlasmaShell(nullptr)
+{
+}
+
+Greeter::~Greeter()
+{
+ qDeleteAll(m_dialogs);
+}
+
+void Greeter::setupWaylandIntegration()
+{
+ if (!KWindowSystem::isPlatformWayland()) {
+ return;
+ }
+ using namespace KWayland::Client;
+ ConnectionThread *connection = ConnectionThread::fromApplication(this);
+ if (!connection) {
+ return;
+ }
+ Registry *registry = new Registry(this);
+ registry->create(connection);
+ connect(registry, &Registry::plasmaShellAnnounced, this,
+ [this, registry] (quint32 name, quint32 version) {
+ m_waylandPlasmaShell = registry->createPlasmaShell(name, version, this);
+ }
+ );
+ registry->setup();
+ connection->roundtrip();
+}
+
+void Greeter::init()
+{
+ setupWaylandIntegration();
+ foreach (QScreen *screen, qApp->screens()) {
+ adoptScreen(screen);
+ }
+ connect(qApp, &QGuiApplication::screenAdded, this, &Greeter::adoptScreen);
+}
+
+void Greeter::adoptScreen(QScreen* screen)
+{
+ // TODO: last argument is the theme, maybe add command line option for it?
+ KSMShutdownDlg *w = new KSMShutdownDlg(nullptr, m_shutdownAllowed, m_choose, m_shutdownType, m_waylandPlasmaShell);
+ w->installEventFilter(this);
+ m_dialogs << w;
+
+ QObject::connect(screen, &QObject::destroyed, w, [w, this] {
+ m_dialogs.removeOne(w);
+ w->deleteLater();
+ });
+ connect(w, &KSMShutdownDlg::rejected, this, &Greeter::rejected);
+ connect(w, &KSMShutdownDlg::accepted, this,
+ [w, this] {
+ if (m_fd != -1) {
+ QFile f;
+ if (f.open(m_fd, QFile::WriteOnly, QFile::AutoCloseHandle)) {
+ f.write(QByteArray::number(int(w->shutdownType())));
+ f.close();
+ }
+ }
+ QApplication::quit();
+ }
+ );
+ w->setScreen(screen);
+ w->setGeometry(screen->geometry());
+ w->init();
+}
+
+void Greeter::rejected()
+{
+ if (m_fd != -1) {
+ close(m_fd);
+ }
+ QApplication::exit(1);
+}
+
+bool Greeter::eventFilter(QObject *watched, QEvent *event)
+{
+ if (qobject_cast<KSMShutdownDlg*>(watched)) {
+ if (event->type() == QEvent::MouseButtonPress) {
+ // check that the position is on no window
+ QMouseEvent *me = static_cast<QMouseEvent*>(event);
+ for (auto it = m_dialogs.constBegin(); it != m_dialogs.constEnd(); ++it) {
+ if ((*it)->geometry().contains(me->globalPos())) {
+ return false;
+ }
+ }
+ // click outside, close
+ rejected();
+ }
+ }
+ return false;
+}
diff --git a/logout-greeter/greeter.h b/logout-greeter/greeter.h
new file mode 100644
index 0000000..c612d32
--- /dev/null
+++ b/logout-greeter/greeter.h
@@ -0,0 +1,64 @@
+/*****************************************************************
+ksmserver - the KDE session management server
+
+Copyright 2016 Martin Graesslin <[email protected]>
+Copyright 2018 David Edmundson <[email protected]>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+******************************************************************/
+
+#pragma once
+
+#include <QObject>
+#include <QVector>
+
+#include <kworkspace.h>
+
+class KSMShutdownDlg;
+namespace KWayland {
+namespace Client {
+ class PlasmaShell;
+}
+}
+
+class QScreen;
+
+class Greeter : public QObject
+{
+ Q_OBJECT
+public:
+ Greeter(int fd, bool shutdownAllowed, bool choose, KWorkSpace::ShutdownType type);
+ ~Greeter() override;
+
+ void init();
+
+ bool eventFilter(QObject *watched, QEvent *event) override;
+
+private:
+ void adoptScreen(QScreen *screen);
+ void rejected();
+ void setupWaylandIntegration();
+
+ int m_fd;
+ bool m_shutdownAllowed;
+ bool m_choose;
+ KWorkSpace::ShutdownType m_shutdownType;
+ QVector<KSMShutdownDlg *> m_dialogs;
+ KWayland::Client::PlasmaShell *m_waylandPlasmaShell;
+};
diff --git a/logout-greeter/main.cpp b/logout-greeter/main.cpp
index 4b0b53b..b8e89c4 100644
--- a/logout-greeter/main.cpp
+++ b/logout-greeter/main.cpp
@@ -22,144 +22,14 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
******************************************************************/
#include <QApplication>
+#include <QQuickWindow>
#include <QCommandLineParser>
-#include <QDebug>
-#include <QScreen>
-#include "shutdowndlg.h"
#include <KQuickAddons/QtQuickSettings>
-#include <KWindowSystem>
-
-#include <KWayland/Client/connection_thread.h>
-#include <KWayland/Client/registry.h>
-#include <KWayland/Client/plasmashell.h>
-
#include <unistd.h>
-class Greeter : public QObject
-{
- Q_OBJECT
-public:
- Greeter(int fd, bool shutdownAllowed, bool choose, KWorkSpace::ShutdownType type);
- ~Greeter() override;
-
- void init();
-
- bool eventFilter(QObject *watched, QEvent *event) override;
-
-private:
- void adoptScreen(QScreen *screen);
- void rejected();
- void setupWaylandIntegration();
-
- int m_fd;
- bool m_shutdownAllowed;
- bool m_choose;
- KWorkSpace::ShutdownType m_shutdownType;
- QVector<KSMShutdownDlg *> m_dialogs;
- KWayland::Client::PlasmaShell *m_waylandPlasmaShell;
-};
-
-Greeter::Greeter(int fd, bool shutdownAllowed, bool choose, KWorkSpace::ShutdownType type)
- : QObject()
- , m_fd(fd)
- , m_shutdownAllowed(shutdownAllowed)
- , m_choose(choose)
- , m_shutdownType(type)
- , m_waylandPlasmaShell(nullptr)
-{
-}
-
-Greeter::~Greeter()
-{
- qDeleteAll(m_dialogs);
-}
-
-void Greeter::setupWaylandIntegration()
-{
- if (!KWindowSystem::isPlatformWayland()) {
- return;
- }
- using namespace KWayland::Client;
- ConnectionThread *connection = ConnectionThread::fromApplication(this);
- if (!connection) {
- return;
- }
- Registry *registry = new Registry(this);
- registry->create(connection);
- connect(registry, &Registry::plasmaShellAnnounced, this,
- [this, registry] (quint32 name, quint32 version) {
- m_waylandPlasmaShell = registry->createPlasmaShell(name, version, this);
- }
- );
- registry->setup();
- connection->roundtrip();
-}
-
-void Greeter::init()
-{
- setupWaylandIntegration();
- foreach (QScreen *screen, qApp->screens()) {
- adoptScreen(screen);
- }
- connect(qApp, &QGuiApplication::screenAdded, this, &Greeter::adoptScreen);
-}
-
-void Greeter::adoptScreen(QScreen* screen)
-{
- // TODO: last argument is the theme, maybe add command line option for it?
- KSMShutdownDlg *w = new KSMShutdownDlg(nullptr, m_shutdownAllowed, m_choose, m_shutdownType, m_waylandPlasmaShell);
- w->installEventFilter(this);
- m_dialogs << w;
-
- QObject::connect(screen, &QObject::destroyed, w, [w, this] {
- m_dialogs.removeOne(w);
- w->deleteLater();
- });
- connect(w, &KSMShutdownDlg::rejected, this, &Greeter::rejected);
- connect(w, &KSMShutdownDlg::accepted, this,
- [w, this] {
- if (m_fd != -1) {
- QFile f;
- if (f.open(m_fd, QFile::WriteOnly, QFile::AutoCloseHandle)) {
- f.write(QByteArray::number(int(w->shutdownType())));
- f.close();
- }
- }
- QApplication::quit();
- }
- );
- w->setScreen(screen);
- w->setGeometry(screen->geometry());
- w->init();
-}
-
-void Greeter::rejected()
-{
- if (m_fd != -1) {
- close(m_fd);
- }
- QApplication::exit(1);
-}
-
-bool Greeter::eventFilter(QObject *watched, QEvent *event)
-{
- if (qobject_cast<KSMShutdownDlg*>(watched)) {
- if (event->type() == QEvent::MouseButtonPress) {
- // check that the position is on no window
- QMouseEvent *me = static_cast<QMouseEvent*>(event);
- for (auto it = m_dialogs.constBegin(); it != m_dialogs.constEnd(); ++it) {
- if ((*it)->geometry().contains(me->globalPos())) {
- return false;
- }
- }
- // click outside, close
- rejected();
- }
- }
- return false;
-}
+#include "greeter.h"
int main(int argc, char *argv[])
{