summaryrefslogtreecommitdiffstats
path: root/src/windowmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/windowmanager.cpp')
-rw-r--r--src/windowmanager.cpp43
1 files changed, 43 insertions, 0 deletions
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 <QProcess>
+#include <QTimer>
+#include <QDebug>
+
+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();
+ }
+ });
+ }
+}
+
+}