Fix driver IPC usage

This commit is contained in:
wheaney 2025-09-10 13:28:59 -07:00
parent 7b70aac358
commit a54782c4e3
5 changed files with 50 additions and 29 deletions

View File

@ -273,20 +273,27 @@ void BreezyDesktopEffect::deactivate()
void BreezyDesktopEffect::enableDriver() void BreezyDesktopEffect::enableDriver()
{ {
qCCritical(KWIN_XR) << "\t\t\tBreezy - enableDriver"; qCCritical(KWIN_XR) << "\t\t\tBreezy - enableDriver";
QJsonObject obj; QJsonObject newConfig = QJsonObject();
obj.insert(QStringLiteral("disabled"), false); auto configJsonOpt = XRDriverIPC::instance().retrieveConfig();
obj.insert(QStringLiteral("output_mode"), QStringLiteral("external_only")); if (configJsonOpt) {
obj.insert(QStringLiteral("external_mode"), QStringLiteral("breezy_desktop")); newConfig = configJsonOpt.value();
XRDriverIPC::instance().writeConfig(obj); }
newConfig.insert(QStringLiteral("disabled"), false);
newConfig.insert(QStringLiteral("output_mode"), QStringLiteral("external_only"));
newConfig.insert(QStringLiteral("external_mode"), QStringLiteral("breezy_desktop"));
XRDriverIPC::instance().writeConfig(newConfig);
} }
void BreezyDesktopEffect::disableDriver() void BreezyDesktopEffect::disableDriver()
{ {
qCCritical(KWIN_XR) << "\t\t\tBreezy - disableDriver"; qCCritical(KWIN_XR) << "\t\t\tBreezy - disableDriver";
QJsonObject obj; QJsonObject newConfig = QJsonObject();
obj.insert(QStringLiteral("disabled"), true); auto configJsonOpt = XRDriverIPC::instance().retrieveConfig();
obj.insert(QStringLiteral("external_mode"), QStringLiteral("none")); if (configJsonOpt) {
XRDriverIPC::instance().writeConfig(obj); newConfig = configJsonOpt.value();
}
newConfig.insert(QStringLiteral("external_mode"), QStringLiteral("none"));
XRDriverIPC::instance().writeConfig(newConfig);
} }
void BreezyDesktopEffect::addVirtualDisplay(QSize size) void BreezyDesktopEffect::addVirtualDisplay(QSize size)

View File

@ -242,24 +242,43 @@ void BreezyDesktopEffectConfig::updateUnmanagedState()
void BreezyDesktopEffectConfig::updateDriverEnabled() void BreezyDesktopEffectConfig::updateDriverEnabled()
{ {
QJsonObject obj; if (driverEnabled() == ui.kcfg_EffectEnabled->isChecked()) {
if (ui.kcfg_EffectEnabled->isChecked()) { return;
obj.insert(QStringLiteral("disabled"), false);
obj.insert(QStringLiteral("output_mode"), QStringLiteral("external_only"));
obj.insert(QStringLiteral("external_mode"), QStringLiteral("breezy_desktop"));
} else {
obj.insert(QStringLiteral("disabled"), true);
obj.insert(QStringLiteral("external_mode"), QStringLiteral("none"));
} }
XRDriverIPC::instance().writeConfig(obj);
QJsonObject newConfig = QJsonObject();
auto configJsonOpt = XRDriverIPC::instance().retrieveConfig();
if (configJsonOpt) {
newConfig = configJsonOpt.value();
}
if (ui.kcfg_EffectEnabled->isChecked()) {
newConfig.insert(QStringLiteral("disabled"), false);
newConfig.insert(QStringLiteral("output_mode"), QStringLiteral("external_only"));
newConfig.insert(QStringLiteral("external_mode"), QStringLiteral("breezy_desktop"));
} else {
newConfig.insert(QStringLiteral("external_mode"), QStringLiteral("none"));
}
XRDriverIPC::instance().writeConfig(newConfig);
}
bool BreezyDesktopEffectConfig::driverEnabled()
{
auto configJsonOpt = XRDriverIPC::instance().retrieveConfig();
if (!configJsonOpt) return false;
auto configJson = configJsonOpt.value();
bool driverDisabled = configJson.value(QStringLiteral("disabled")).toBool();
QString driverOutputMode = configJson.value(QStringLiteral("output_mode")).toString();
QJsonArray driverExternalMode = configJson.value(QStringLiteral("external_mode")).toArray();
return !driverDisabled &&
driverOutputMode == QStringLiteral("external_only") &&
driverExternalMode.contains(QJsonValue(QStringLiteral("breezy_desktop")));
} }
void BreezyDesktopEffectConfig::pollDriverState() void BreezyDesktopEffectConfig::pollDriverState()
{ {
auto &bridge = XRDriverIPC::instance(); auto &bridge = XRDriverIPC::instance();
auto stateJsonOpt = bridge.retrieveDriverState(); auto stateJsonOpt = bridge.retrieveDriverState();
auto configJsonOpt = bridge.retrieveConfig(); if (!stateJsonOpt) return;
if (!stateJsonOpt || !configJsonOpt) return;
auto stateJson = stateJsonOpt.value(); auto stateJson = stateJsonOpt.value();
m_connectedDeviceBrand = stateJson.value(QStringLiteral("connected_device_brand")).toString(); m_connectedDeviceBrand = stateJson.value(QStringLiteral("connected_device_brand")).toString();
m_connectedDeviceModel = stateJson.value(QStringLiteral("connected_device_model")).toString(); m_connectedDeviceModel = stateJson.value(QStringLiteral("connected_device_model")).toString();
@ -272,13 +291,7 @@ void BreezyDesktopEffectConfig::pollDriverState()
QStringLiteral("No device connected")); QStringLiteral("No device connected"));
} }
auto configJson = configJsonOpt.value(); bool effectEnabled = driverEnabled();
bool driverDisabled = configJson.value(QStringLiteral("disabled")).toBool();
QString driverOutputMode = configJson.value(QStringLiteral("output_mode")).toString();
QJsonArray driverExternalMode = configJson.value(QStringLiteral("external_mode")).toArray();
bool effectEnabled = !driverDisabled &&
driverOutputMode == QStringLiteral("external_only") &&
driverExternalMode.contains(QJsonValue(QStringLiteral("breezy_desktop")));
if (ui.kcfg_EffectEnabled->isChecked() != effectEnabled) ui.kcfg_EffectEnabled->setChecked(effectEnabled); if (ui.kcfg_EffectEnabled->isChecked() != effectEnabled) ui.kcfg_EffectEnabled->setChecked(effectEnabled);
refreshLicenseUi(stateJson); refreshLicenseUi(stateJson);

View File

@ -30,6 +30,7 @@ private:
void updateUiFromDefaultConfig(); void updateUiFromDefaultConfig();
void updateConfigFromUi(); void updateConfigFromUi();
void updateUnmanagedState(); void updateUnmanagedState();
bool driverEnabled();
void pollDriverState(); void pollDriverState();
void refreshLicenseUi(const QJsonObject &rootObj); void refreshLicenseUi(const QJsonObject &rootObj);
void showStatus(QLabel *label, bool success, const QString &message); void showStatus(QLabel *label, bool success, const QString &message);

View File

@ -68,7 +68,7 @@ QByteArray XRDriverIPC::invokePython(const QString &method,
} }
std::optional<QJsonObject> XRDriverIPC::retrieveConfig() { std::optional<QJsonObject> XRDriverIPC::retrieveConfig() {
QByteArray out = invokePython(QStringLiteral("retrieve_config"), {}, QStringLiteral("1")); QByteArray out = invokePython(QStringLiteral("retrieve_config"), {}, QStringLiteral("0"));
if (out.isEmpty()) return std::nullopt; if (out.isEmpty()) return std::nullopt;
QJsonParseError err; auto doc = QJsonDocument::fromJson(out, &err); QJsonParseError err; auto doc = QJsonDocument::fromJson(out, &err);
if (err.error != QJsonParseError::NoError || !doc.isObject()) return std::nullopt; if (err.error != QJsonParseError::NoError || !doc.isObject()) return std::nullopt;

@ -1 +1 @@
Subproject commit 69d3603ef9c931a0f66777279501d4c6dfe20f09 Subproject commit 09c6627d2a60985a4f8dde86be70d0e797d62f45