Fix driver IPC usage
This commit is contained in:
parent
7b70aac358
commit
a54782c4e3
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
Loading…
Reference in New Issue