From 22b1bb407e1cb873356d8e1d86f4521b2f02e551 Mon Sep 17 00:00:00 2001 From: Stefan Verleysen Date: Fri, 3 Apr 2026 04:48:00 -0400 Subject: [PATCH] feat: add media key anchoring checkbox to screen settings Checkbox in screen settings to anchor media keys (play, stop, next, prev, volume) to the server. Appends media key names to the anchored keys config when enabled. --- src/gui/src/ScreenSettingsDialog.cpp | 2 ++ src/gui/src/ScreenSettingsDialogBase.ui | 7 +++++++ src/lib/gui/config/Screen.cpp | 20 ++++++++++++++++---- src/lib/gui/config/Screen.h | 9 +++++++++ 4 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/gui/src/ScreenSettingsDialog.cpp b/src/gui/src/ScreenSettingsDialog.cpp index c07a528d8..44cad7ea6 100644 --- a/src/gui/src/ScreenSettingsDialog.cpp +++ b/src/gui/src/ScreenSettingsDialog.cpp @@ -75,6 +75,7 @@ ScreenSettingsDialog::ScreenSettingsDialog(QWidget *parent, Screen *pScreen, con m_pCheckBoxXTest->setChecked(m_pScreen->fix(XTest)); m_pLineEditAnchoredKeys->setText(m_pScreen->anchoredKeys()); + m_pCheckBoxAnchorMediaKeys->setChecked(m_pScreen->anchorMediaKeys()); } void ScreenSettingsDialog::accept() @@ -125,6 +126,7 @@ void ScreenSettingsDialog::accept() m_pScreen->setFix(static_cast(XTest), m_pCheckBoxXTest->isChecked()); m_pScreen->setAnchoredKeys(m_pLineEditAnchoredKeys->text()); + m_pScreen->setAnchorMediaKeys(m_pCheckBoxAnchorMediaKeys->isChecked()); QDialog::accept(); } diff --git a/src/gui/src/ScreenSettingsDialogBase.ui b/src/gui/src/ScreenSettingsDialogBase.ui index d7a0cc5da..97c92fa46 100644 --- a/src/gui/src/ScreenSettingsDialogBase.ui +++ b/src/gui/src/ScreenSettingsDialogBase.ui @@ -757,6 +757,13 @@ Comma-separated. Use + for combos (e.g. Alt+Tab, Ctrl+A). + + + + Anchor media keys to server (play, stop, next, prev, volume) + + + diff --git a/src/lib/gui/config/Screen.cpp b/src/lib/gui/config/Screen.cpp index 0ece35c36..b4dd2db20 100644 --- a/src/lib/gui/config/Screen.cpp +++ b/src/lib/gui/config/Screen.cpp @@ -77,6 +77,7 @@ void Screen::loadSettings(QSettingsProxy &settings) readSettings(settings, fixes(), "fix", 0, static_cast(NumFixes)); setAnchoredKeys(settings.value("anchoredKeys").toString()); + setAnchorMediaKeys(settings.value("anchorMediaKeys").toBool()); } void Screen::saveSettings(QSettingsProxy &settings) const @@ -94,6 +95,7 @@ void Screen::saveSettings(QSettingsProxy &settings) const writeSettings(settings, fixes(), "fix"); settings.setValue("anchoredKeys", anchoredKeys()); + settings.setValue("anchorMediaKeys", anchorMediaKeys()); } QTextStream &Screen::writeScreensSection(QTextStream &outStream) const @@ -117,9 +119,18 @@ QTextStream &Screen::writeScreensSection(QTextStream &outStream) const outStream << "\t\t" << "switchCornerSize = " << switchCornerSize() << Qt::endl; - if (!anchoredKeys().isEmpty()) - outStream << "\t\t" - << "anchoredKeys = " << anchoredKeys() << Qt::endl; + { + QString keys = anchoredKeys(); + if (anchorMediaKeys()) { + QString media = "MediaPlay, MediaStop, MediaNext, MediaPrev, VolumeMute, VolumeUp, VolumeDown"; + if (!keys.isEmpty()) + keys += ", " + media; + else + keys = media; + } + if (!keys.isEmpty()) + outStream << "\t\t" << "anchoredKeys = " << keys << Qt::endl; + } return outStream; } @@ -140,6 +151,7 @@ bool Screen::operator==(const Screen &screen) const { return m_Name == screen.m_Name && m_Aliases == screen.m_Aliases && m_Modifiers == screen.m_Modifiers && m_SwitchCorners == screen.m_SwitchCorners && m_SwitchCornerSize == screen.m_SwitchCornerSize && - m_Fixes == screen.m_Fixes && m_AnchoredKeys == screen.m_AnchoredKeys && m_Swapped == screen.m_Swapped && + m_Fixes == screen.m_Fixes && m_AnchoredKeys == screen.m_AnchoredKeys && + m_AnchorMediaKeys == screen.m_AnchorMediaKeys && m_Swapped == screen.m_Swapped && m_isServer == screen.m_isServer; } diff --git a/src/lib/gui/config/Screen.h b/src/lib/gui/config/Screen.h index 604298d6b..7ab6ccae9 100644 --- a/src/lib/gui/config/Screen.h +++ b/src/lib/gui/config/Screen.h @@ -180,6 +180,14 @@ class Screen : public ScreenConfig { m_AnchoredKeys = keys; } + bool anchorMediaKeys() const + { + return m_AnchorMediaKeys; + } + void setAnchorMediaKeys(bool on) + { + m_AnchorMediaKeys = on; + } private: QPixmap m_Pixmap = QPixmap(":res/icons/64x64/video-display.png"); @@ -190,6 +198,7 @@ class Screen : public ScreenConfig int m_SwitchCornerSize; QList m_Fixes; QString m_AnchoredKeys; + bool m_AnchorMediaKeys = false; bool m_Swapped = false; bool m_isServer = false; };