Attempt to use the IPC reset function

This commit is contained in:
wheaney 2026-01-22 19:10:03 -08:00
parent d34394cf1b
commit 86af4eb07e
1 changed files with 2 additions and 39 deletions

View File

@ -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);