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);
|
setRequestInProgress({sender()}, true);
|
||||||
|
|
||||||
const QString systemctl = QStandardPaths::findExecutable(QStringLiteral("systemctl"));
|
const bool ok = XRDriverIPC::instance().resetDriver();
|
||||||
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);
|
|
||||||
if (ok) {
|
if (ok) {
|
||||||
if (!output.isEmpty()) {
|
|
||||||
qCWarning(KWIN_XR) << "Unexpected output resetting the driver:" << output;
|
|
||||||
}
|
|
||||||
showStatus(labelStatus, true, tr("Driver restarted."));
|
showStatus(labelStatus, true, tr("Driver restarted."));
|
||||||
|
|
||||||
// Refresh state shortly after restart.
|
|
||||||
QTimer::singleShot(1000, this, [this]() {
|
|
||||||
pollDriverState();
|
|
||||||
});
|
|
||||||
} else {
|
} else {
|
||||||
const QString err = output.isEmpty() ? tr("Unknown error") : output;
|
showStatus(labelStatus, false, tr("Failed to restart driver."));
|
||||||
showStatus(labelStatus, false, tr("Failed to restart driver: %1").arg(err));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setRequestInProgress({sender()}, false);
|
setRequestInProgress({sender()}, false);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue