Attempt to use the IPC reset function
This commit is contained in:
parent
d34394cf1b
commit
86af4eb07e
|
|
@ -455,48 +455,11 @@ BreezyDesktopEffectConfig::BreezyDesktopEffectConfig(QObject *parent, const KPlu
|
|||
|
||||
setRequestInProgress({sender()}, true);
|
||||
|
||||
const QString systemctl = QStandardPaths::findExecutable(QStringLiteral("systemctl"));
|
||||
if (systemctl.isEmpty()) {
|
||||
showStatus(labelStatus, false, tr("systemctl not found; cannot restart xr-driver."));
|
||||
setRequestInProgress({sender()}, false);
|
||||
return;
|
||||
}
|
||||
|
||||
QProcess proc;
|
||||
proc.setProgram(systemctl);
|
||||
proc.setArguments({QStringLiteral("--user"), QStringLiteral("restart"), QStringLiteral("xr-driver")});
|
||||
proc.setProcessChannelMode(QProcess::MergedChannels);
|
||||
proc.start();
|
||||
|
||||
if (!proc.waitForStarted(5000)) {
|
||||
showStatus(labelStatus, false, tr("Failed to start systemctl."));
|
||||
setRequestInProgress({sender()}, false);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!proc.waitForFinished(15000)) {
|
||||
proc.kill();
|
||||
proc.waitForFinished(3000);
|
||||
showStatus(labelStatus, false, tr("Timed out restarting xr-driver."));
|
||||
setRequestInProgress({sender()}, false);
|
||||
return;
|
||||
}
|
||||
|
||||
const QString output = QString::fromUtf8(proc.readAll()).trimmed();
|
||||
const bool ok = (proc.exitStatus() == QProcess::NormalExit && proc.exitCode() == 0);
|
||||
const bool ok = XRDriverIPC::instance().resetDriver();
|
||||
if (ok) {
|
||||
if (!output.isEmpty()) {
|
||||
qCWarning(KWIN_XR) << "Unexpected output resetting the driver:" << output;
|
||||
}
|
||||
showStatus(labelStatus, true, tr("Driver restarted."));
|
||||
|
||||
// Refresh state shortly after restart.
|
||||
QTimer::singleShot(1000, this, [this]() {
|
||||
pollDriverState();
|
||||
});
|
||||
} else {
|
||||
const QString err = output.isEmpty() ? tr("Unknown error") : output;
|
||||
showStatus(labelStatus, false, tr("Failed to restart driver: %1").arg(err));
|
||||
showStatus(labelStatus, false, tr("Failed to restart driver."));
|
||||
}
|
||||
|
||||
setRequestInProgress({sender()}, false);
|
||||
|
|
|
|||
Loading…
Reference in New Issue