Add multi-tap checkbox

This commit is contained in:
wheaney 2025-09-11 22:14:24 -07:00
parent 46b0ef747f
commit e4d8e63a56
3 changed files with 46 additions and 11 deletions

View File

@ -97,7 +97,7 @@ BreezyDesktopEffectConfig::BreezyDesktopEffectConfig(QObject *parent, const KPlu
addShortcutAction(actionCollection, BreezyShortcuts::TOGGLE_ZOOM_ON_FOCUS); addShortcutAction(actionCollection, BreezyShortcuts::TOGGLE_ZOOM_ON_FOCUS);
ui.shortcutsEditor->addCollection(actionCollection); ui.shortcutsEditor->addCollection(actionCollection);
connect(ui.shortcutsEditor, &KShortcutsEditor::keyChange, this, &BreezyDesktopEffectConfig::markAsChanged); connect(ui.shortcutsEditor, &KShortcutsEditor::keyChange, this, &BreezyDesktopEffectConfig::markAsChanged);
connect(ui.kcfg_EffectEnabled, &QCheckBox::toggled, this, &BreezyDesktopEffectConfig::updateDriverEnabled); connect(ui.EffectEnabled, &QCheckBox::toggled, this, &BreezyDesktopEffectConfig::updateDriverEnabled);
connect(ui.kcfg_ZoomOnFocusEnabled, &QCheckBox::toggled, this, &BreezyDesktopEffectConfig::save); connect(ui.kcfg_ZoomOnFocusEnabled, &QCheckBox::toggled, this, &BreezyDesktopEffectConfig::save);
connect(ui.kcfg_FocusedDisplayDistance, &QSlider::valueChanged, this, &BreezyDesktopEffectConfig::save); connect(ui.kcfg_FocusedDisplayDistance, &QSlider::valueChanged, this, &BreezyDesktopEffectConfig::save);
connect(ui.kcfg_AllDisplaysDistance, &QSlider::valueChanged, this, &BreezyDesktopEffectConfig::save); connect(ui.kcfg_AllDisplaysDistance, &QSlider::valueChanged, this, &BreezyDesktopEffectConfig::save);
@ -108,6 +108,7 @@ BreezyDesktopEffectConfig::BreezyDesktopEffectConfig(QObject *parent, const KPlu
connect(ui.kcfg_AntialiasingQuality, qOverload<int>(&QComboBox::currentIndexChanged), this, &BreezyDesktopEffectConfig::save); connect(ui.kcfg_AntialiasingQuality, qOverload<int>(&QComboBox::currentIndexChanged), this, &BreezyDesktopEffectConfig::save);
connect(ui.kcfg_MirrorPhysicalDisplays, &QCheckBox::toggled, this, &BreezyDesktopEffectConfig::save); connect(ui.kcfg_MirrorPhysicalDisplays, &QCheckBox::toggled, this, &BreezyDesktopEffectConfig::save);
connect(ui.kcfg_RemoveVirtualDisplaysOnDisable, &QCheckBox::toggled, this, &BreezyDesktopEffectConfig::save); connect(ui.kcfg_RemoveVirtualDisplaysOnDisable, &QCheckBox::toggled, this, &BreezyDesktopEffectConfig::save);
connect(ui.EnableMultitap, &QCheckBox::toggled, this, &BreezyDesktopEffectConfig::updateMultitapEnabled);
if (auto label = widget()->findChild<QLabel*>("labelAppNameVersion")) { if (auto label = widget()->findChild<QLabel*>("labelAppNameVersion")) {
label->setText(QStringLiteral("Breezy Desktop - v%1").arg(QLatin1String(BREEZY_DESKTOP_VERSION_STR))); label->setText(QStringLiteral("Breezy Desktop - v%1").arg(QLatin1String(BREEZY_DESKTOP_VERSION_STR)));
@ -244,16 +245,16 @@ void BreezyDesktopEffectConfig::updateUnmanagedState()
void BreezyDesktopEffectConfig::updateDriverEnabled() void BreezyDesktopEffectConfig::updateDriverEnabled()
{ {
if (driverEnabled() == ui.kcfg_EffectEnabled->isChecked()) { auto configJsonOpt = XRDriverIPC::instance().retrieveConfig();
if (driverEnabled(configJsonOpt) == ui.EffectEnabled->isChecked()) {
return; return;
} }
QJsonObject newConfig = QJsonObject(); QJsonObject newConfig = QJsonObject();
auto configJsonOpt = XRDriverIPC::instance().retrieveConfig();
if (configJsonOpt) { if (configJsonOpt) {
newConfig = configJsonOpt.value(); newConfig = configJsonOpt.value();
} }
if (ui.kcfg_EffectEnabled->isChecked()) { if (ui.EffectEnabled->isChecked()) {
newConfig.insert(QStringLiteral("disabled"), false); newConfig.insert(QStringLiteral("disabled"), false);
newConfig.insert(QStringLiteral("output_mode"), QStringLiteral("external_only")); newConfig.insert(QStringLiteral("output_mode"), QStringLiteral("external_only"));
newConfig.insert(QStringLiteral("external_mode"), QStringLiteral("breezy_desktop")); newConfig.insert(QStringLiteral("external_mode"), QStringLiteral("breezy_desktop"));
@ -263,9 +264,8 @@ void BreezyDesktopEffectConfig::updateDriverEnabled()
XRDriverIPC::instance().writeConfig(newConfig); XRDriverIPC::instance().writeConfig(newConfig);
} }
bool BreezyDesktopEffectConfig::driverEnabled() bool BreezyDesktopEffectConfig::driverEnabled(std::optional<QJsonObject> configJsonOpt)
{ {
auto configJsonOpt = XRDriverIPC::instance().retrieveConfig();
if (!configJsonOpt) return false; if (!configJsonOpt) return false;
auto configJson = configJsonOpt.value(); auto configJson = configJsonOpt.value();
bool driverDisabled = configJson.value(QStringLiteral("disabled")).toBool(); bool driverDisabled = configJson.value(QStringLiteral("disabled")).toBool();
@ -280,7 +280,8 @@ void BreezyDesktopEffectConfig::pollDriverState()
{ {
auto &bridge = XRDriverIPC::instance(); auto &bridge = XRDriverIPC::instance();
auto stateJsonOpt = bridge.retrieveDriverState(); auto stateJsonOpt = bridge.retrieveDriverState();
if (!stateJsonOpt) return; auto configJsonOpt = XRDriverIPC::instance().retrieveConfig();
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();
@ -293,12 +294,36 @@ void BreezyDesktopEffectConfig::pollDriverState()
QStringLiteral("No device connected")); QStringLiteral("No device connected"));
} }
bool effectEnabled = driverEnabled(); bool effectEnabled = driverEnabled(configJsonOpt);
if (ui.kcfg_EffectEnabled->isChecked() != effectEnabled) ui.kcfg_EffectEnabled->setChecked(effectEnabled); if (ui.EffectEnabled->isChecked() != effectEnabled) ui.EffectEnabled->setChecked(effectEnabled);
bool multitap = multitapEnabled(configJsonOpt);
if (ui.EnableMultitap->isChecked() != multitap) ui.EnableMultitap->setChecked(multitap);
refreshLicenseUi(stateJson); refreshLicenseUi(stateJson);
} }
bool BreezyDesktopEffectConfig::multitapEnabled(std::optional<QJsonObject> configJsonOpt)
{
if (!configJsonOpt) return false;
auto configJson = configJsonOpt.value();
return configJson.value(QStringLiteral("multi_tap_enabled")).toBool();
}
void BreezyDesktopEffectConfig::updateMultitapEnabled()
{
auto configJsonOpt = XRDriverIPC::instance().retrieveConfig();
if (multitapEnabled(configJsonOpt) == ui.EnableMultitap->isChecked()) {
return;
}
QJsonObject newConfig = QJsonObject();
if (configJsonOpt) {
newConfig = configJsonOpt.value();
}
newConfig.insert(QStringLiteral("multi_tap_enabled"), ui.EnableMultitap->isChecked());
XRDriverIPC::instance().writeConfig(newConfig);
}
void BreezyDesktopEffectConfig::showStatus(QLabel *label, bool success, const QString &message) { void BreezyDesktopEffectConfig::showStatus(QLabel *label, bool success, const QString &message) {
if (!label) return; if (!label) return;
QPalette pal = label->palette(); QPalette pal = label->palette();

View File

@ -26,11 +26,13 @@ public Q_SLOTS:
private: private:
void updateDriverEnabled(); void updateDriverEnabled();
void updateMultitapEnabled();
void updateUiFromConfig(); void updateUiFromConfig();
void updateUiFromDefaultConfig(); void updateUiFromDefaultConfig();
void updateConfigFromUi(); void updateConfigFromUi();
void updateUnmanagedState(); void updateUnmanagedState();
bool driverEnabled(); bool driverEnabled(std::optional<QJsonObject> configJsonOpt);
bool multitapEnabled(std::optional<QJsonObject> configJsonOpt);
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

@ -53,7 +53,7 @@
</attribute> </attribute>
<layout class="QFormLayout" name="formLayout"> <layout class="QFormLayout" name="formLayout">
<item row="0" column="0" colspan="2"> <item row="0" column="0" colspan="2">
<widget class="QCheckBox" name="kcfg_EffectEnabled"> <widget class="QCheckBox" name="EffectEnabled">
<property name="text"> <property name="text">
<string>XR Effect enabled</string> <string>XR Effect enabled</string>
</property> </property>
@ -340,6 +340,14 @@
<property name="checked"><bool>false</bool></property> <property name="checked"><bool>false</bool></property>
</widget> </widget>
</item> </item>
<item row="6" column="0" colspan="2">
<widget class="QCheckBox" name="EnableMultitap">
<property name="text">
<string>Enable multi-tap detection</string>
</property>
<property name="checked"><bool>false</bool></property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="tabLicenseDetails"> <widget class="QWidget" name="tabLicenseDetails">