diff options
-rw-r--r-- | wayland/democompositor/processlauncher.cpp | 19 | ||||
-rw-r--r-- | wayland/democompositor/processlauncher.h | 1 | ||||
-rw-r--r-- | wayland/democompositor/qml/Screen.qml | 4 |
3 files changed, 23 insertions, 1 deletions
diff --git a/wayland/democompositor/processlauncher.cpp b/wayland/democompositor/processlauncher.cpp index 6147f05..29e4d64 100644 --- a/wayland/democompositor/processlauncher.cpp +++ b/wayland/democompositor/processlauncher.cpp @@ -52,6 +52,7 @@ #include "apps/appentry.h" #include <QProcess> +#include <QTimer> Q_LOGGING_CATEGORY(procs, "launcher.procs") @@ -118,6 +119,24 @@ void WaylandProcessLauncher::kill(const AppEntry& entry) } } +void WaylandProcessLauncher::stop(const AppEntry& entry, int ms) +{ + for (auto state : m_appStates) { + if (state.appEntry.sourceFileName != entry.sourceFileName) + continue; + + auto timer = new QTimer(state.process); + connect(timer, &QTimer::timeout, [entry, state, timer] { + qCDebug(procs) << "Sending SIGKILL " << state.process->pid() << " for " << entry.sourceFileName; + timer->deleteLater(); + state.process->kill(); + }); + timer->start(ms); + qCDebug(procs) << "Sending SIGTERM " << state.process->pid() << " for " << entry.sourceFileName; + state.process->terminate(); + } +} + void WaylandProcessLauncher::launch(const AppEntry &entry) { qCDebug(procs) << "Launching" << entry.executableName; diff --git a/wayland/democompositor/processlauncher.h b/wayland/democompositor/processlauncher.h index 9453368..ae847e2 100644 --- a/wayland/democompositor/processlauncher.h +++ b/wayland/democompositor/processlauncher.h @@ -87,6 +87,7 @@ public: Q_INVOKABLE QVariant appStateForPid(int pid) const; Q_INVOKABLE bool isRunning(const AppEntry& entry) const; Q_INVOKABLE void kill(const AppEntry& entry); + Q_INVOKABLE void stop(const AppEntry& entry, int timeout_ms); Q_SIGNALS: void appStarted(const AppState &appState); diff --git a/wayland/democompositor/qml/Screen.qml b/wayland/democompositor/qml/Screen.qml index bea189b..2986562 100644 --- a/wayland/democompositor/qml/Screen.qml +++ b/wayland/democompositor/qml/Screen.qml @@ -202,7 +202,9 @@ WaylandOutput { } onSlideTrigger: { //console.log("slide " + winItem + " : " + winItem.shellSurface.surface) - winItem.shellSurface.surface.client.close() + winItem.appEntry === null ? + winItem.shellSurface.surface.client.close() : + launcher.stop(winItem.appEntry, 5000); } } Rectangle { |