From d6651f307d896848372ac696e8335ac47eac8888 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 2 Jul 2019 15:55:51 +0200 Subject: Temporarily spawn openbox if no WM is running --- src/windowmanager.cpp | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/windowmanager.cpp (limited to 'src/windowmanager.cpp') diff --git a/src/windowmanager.cpp b/src/windowmanager.cpp new file mode 100644 index 0000000..e5e14a3 --- /dev/null +++ b/src/windowmanager.cpp @@ -0,0 +1,43 @@ +#include "windowmanager.h" + +#include +#include +#include + +namespace WindowManager { + +static QProcess wm; + +void ensureRunning() +{ + wm.start(QLatin1String("openbox")); + wm.closeReadChannel(QProcess::StandardError); + wm.closeReadChannel(QProcess::StandardOutput); + wm.closeWriteChannel(); + wm.waitForStarted(1000); + QTimer::singleShot(200, []() { + if (wm.state() == QProcess::Running) { + qDebug() << "- Spawned openbox"; + } else if (wm.exitCode() == 0) { + qDebug() << "- A WM is already running"; + } else { + qDebug() << "- openbox binary not in $PATH"; + } + }); +} + +void stopOwnInstance() +{ + if (wm.state() == QProcess::Running) { + qDebug() << "- Politely terminating spawned WM"; + wm.terminate(); + QTimer::singleShot(1000, []() { + if (wm.state() == QProcess::Running) { + qDebug() << "- Forcefully killing spawned WM"; + wm.kill(); + } + }); + } +} + +} -- cgit v1.2.3-55-g7522