diff options
Diffstat (limited to 'src/windowmanager.cpp')
-rw-r--r-- | src/windowmanager.cpp | 43 |
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(); + } + }); + } +} + +} |