Persist optional double-press locking for the radio hotkey
This commit is contained in:
1 parent
11e9946549
commit
d1a62c51ef
3 files changed
+16
-4
No files matched your search
@@ -68,10 +68,10 @@ bool PttHotkeyManager::isSupported() {
|
||||
|
||||
void PttHotkeyManager::init(DbManager* db) {
|
||||
m_db = db;
|
||||
reload();
|
||||
#ifdef UTUN_PTT_PORTAL
|
||||
if (m_portal) { m_portal->initialize(); return; }
|
||||
#endif
|
||||
reload();
|
||||
if (isSupported()) {
|
||||
#ifdef Q_OS_LINUX
|
||||
if (!m_display) return;
|
||||
@@ -93,9 +93,17 @@ void PttHotkeyManager::setHotkey(const QString& value) {
|
||||
}
|
||||
|
||||
void PttHotkeyManager::reload() {
|
||||
setDoublePressEnabled(!m_db || !m_db->isOpen() || m_db->getUiState("radio_ptt_double_press") != "0");
|
||||
setHotkey(m_db && m_db->isOpen() ? m_db->getUiState("radio_ptt_hotkey") : QString());
|
||||
}
|
||||
|
||||
void PttHotkeyManager::setDoublePressEnabled(bool enabled) {
|
||||
if (m_doublePressEnabled == enabled) return;
|
||||
resetHotkey("double-press-setting-changed");
|
||||
m_doublePressEnabled = enabled;
|
||||
DEBUG_INFO(DEBUG_CATEGORY_RADIO, "PTT: shortcut double-press locking enabled=%d", enabled);
|
||||
}
|
||||
|
||||
/* Одинаковое поведение физического сочетания и Wayland-сигналов, без реакции на автоповтор. */
|
||||
void PttHotkeyManager::updatePressed(bool pressed) {
|
||||
auto* engine = RadioAudioEngine::instance();
|
||||
@@ -106,7 +114,7 @@ void PttHotkeyManager::updatePressed(bool pressed) {
|
||||
}
|
||||
if (m_activation.pressed == pressed) return;
|
||||
bool latched = m_activation.latched;
|
||||
m_activation.observe(pressed, m_clock.elapsed(), QApplication::doubleClickInterval());
|
||||
m_activation.observe(pressed, m_clock.elapsed(), m_doublePressEnabled ? QApplication::doubleClickInterval() : 0);
|
||||
DEBUG_DEBUG(DEBUG_CATEGORY_RADIO, "PTT: shortcut pressed=%d latched=%d talking=%d group=%016llx",
|
||||
pressed, m_activation.latched, m_activation.talking, (unsigned long long)engine->groupId());
|
||||
if (latched != m_activation.latched)
|
||||
|
||||
@@ -27,6 +27,8 @@ public:
|
||||
/* Применяет одно физическое сочетание в памяти, снимая удержание/фиксацию; невалидное значение отключает хоткей.
|
||||
* В режиме портала ничего не делает; БД не меняет. */
|
||||
void setHotkey(const QString& chord);
|
||||
/* Включает фиксацию двойным нажатием только для хоткея; изменение сбрасывает его текущее PTT, БД не меняет. */
|
||||
void setDoublePressEnabled(bool enabled);
|
||||
/* Загружает radio_ptt_hotkey; без открытой БД отключает сочетание. */
|
||||
void reload();
|
||||
/* Поддержка платформы: Windows, Linux/xcb либо выбранный portal; не проверяет доступность сервиса/устройства. */
|
||||
@@ -78,4 +80,5 @@ private:
|
||||
bool m_captureArmed = false; // Исходные клавиши полностью отпущены, можно выдавать keysChanged.
|
||||
PttHotkeyState m_activation; // Общая для всех backend логика удержания/двойного нажатия.
|
||||
QElapsedTimer m_clock; // Монотонные мс для двойного нажатия, запускаются в конструкторе.
|
||||
bool m_doublePressEnabled = true; // radio_ptt_double_press: кнопка PTT от этой настройки не зависит.
|
||||
};
|
||||
@@ -422,9 +422,10 @@ void SettingsDialog::onSave() {
|
||||
return;
|
||||
}
|
||||
|
||||
/* Физические сочетания сохраняем в БД; Wayland-хоткеями владеет системный портал. */
|
||||
/* Фиксация относится только к хоткею; физическое назначение сохраняем сами, Wayland-назначением владеет портал. */
|
||||
gui_bridge_post_setting(GUI_SETTING_UI_STATE, "radio_ptt_double_press", m_radioPage->doublePressEnabled() ? "1" : "0");
|
||||
if (!PttHotkeyManager::usesPortal()) {
|
||||
gui_bridge_post_setting(GUI_SETTING_UI_STATE, "radio_ptt_hotkeys", m_radioPage->hotkeys().join('|').toUtf8().constData());
|
||||
gui_bridge_post_setting(GUI_SETTING_UI_STATE, "radio_ptt_hotkey", m_radioPage->hotkey().toUtf8().constData());
|
||||
}
|
||||
|
||||
const QPair<const char*, int> policies[] = {{"join_policy", m_joinPolicyCombo->currentIndex()},
|
||||
|
||||
Reference in new issue
Block a user