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()
{
qCCritical(KWIN_XR) << "\t\t\tBreezy - enableDriver";
QJsonObject obj;
obj.insert(QStringLiteral("disabled"), false);
obj.insert(QStringLiteral("output_mode"), QStringLiteral("external_only"));
obj.insert(QStringLiteral("external_mode"), QStringLiteral("breezy_desktop"));
XRDriverIPC::instance().writeConfig(obj);
QJsonObject newConfig = QJsonObject();
auto configJsonOpt = XRDriverIPC::instance().retrieveConfig();
if (configJsonOpt) {
newConfig = configJsonOpt.value();
}
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()
{
qCCritical(KWIN_XR) << "\t\t\tBreezy - disableDriver";
QJsonObject obj;
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();
}
newConfig.insert(QStringLiteral("external_mode"), QStringLiteral("none"));
XRDriverIPC::instance().writeConfig(newConfig);
}
void BreezyDesktopEffect::addVirtualDisplay(QSize size)

View File

@ -242,24 +242,43 @@ void BreezyDesktopEffectConfig::updateUnmanagedState()
void BreezyDesktopEffectConfig::updateDriverEnabled()
{
QJsonObject obj;
if (ui.kcfg_EffectEnabled->isChecked()) {
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"));
if (driverEnabled() == ui.kcfg_EffectEnabled->isChecked()) {
return;
}
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()
{
auto &bridge = XRDriverIPC::instance();
auto stateJsonOpt = bridge.retrieveDriverState();
auto configJsonOpt = bridge.retrieveConfig();
if (!stateJsonOpt || !configJsonOpt) return;
if (!stateJsonOpt) return;
auto stateJson = stateJsonOpt.value();
m_connectedDeviceBrand = stateJson.value(QStringLiteral("connected_device_brand")).toString();
m_connectedDeviceModel = stateJson.value(QStringLiteral("connected_device_model")).toString();
@ -272,13 +291,7 @@ void BreezyDesktopEffectConfig::pollDriverState()
QStringLiteral("No device connected"));
}
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();
bool effectEnabled = !driverDisabled &&
driverOutputMode == QStringLiteral("external_only") &&
driverExternalMode.contains(QJsonValue(QStringLiteral("breezy_desktop")));
bool effectEnabled = driverEnabled();
if (ui.kcfg_EffectEnabled->isChecked() != effectEnabled) ui.kcfg_EffectEnabled->setChecked(effectEnabled);
refreshLicenseUi(stateJson);

View File

@ -30,6 +30,7 @@ private:
void updateUiFromDefaultConfig();
void updateConfigFromUi();
void updateUnmanagedState();
bool driverEnabled();
void pollDriverState();
void refreshLicenseUi(const QJsonObject &rootObj);
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() {
QByteArray out = invokePython(QStringLiteral("retrieve_config"), {}, QStringLiteral("1"));
QByteArray out = invokePython(QStringLiteral("retrieve_config"), {}, QStringLiteral("0"));
if (out.isEmpty()) return std::nullopt;
QJsonParseError err; auto doc = QJsonDocument::fromJson(out, &err);
if (err.error != QJsonParseError::NoError || !doc.isObject()) return std::nullopt;

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