fix: 长按 3s 立即复位 CapsLock,不等松开
CapsLock 语音输入流程调整为: 按下 CapsLock → 预录音 → 长按 3s → 立即复位 CapsLock → 正式录音 → 松开 → 停止录音 → 识别 → 注入文本 短按(< 3s)保持原有行为:模拟 CapsLock 切换大小写 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
cf44a23c57
commit
072a571a89
@ -45,6 +45,8 @@ VoiceInputService::VoiceInputService(ConfigManager* configManager,
|
|||||||
// 长按超时仍未松开 → 确认为长按录音
|
// 长按超时仍未松开 → 确认为长按录音
|
||||||
if (!longPressDetected_) {
|
if (!longPressDetected_) {
|
||||||
longPressDetected_ = true;
|
longPressDetected_ = true;
|
||||||
|
// 立即复位 CapsLock,不等用户松开
|
||||||
|
simulateCapsLock();
|
||||||
emit statusChanged("正在录音...");
|
emit statusChanged("正在录音...");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -150,9 +152,7 @@ void VoiceInputService::onHotkeyDeactivated() {
|
|||||||
simulateCapsLock();
|
simulateCapsLock();
|
||||||
emit statusChanged("短按:切换 CapsLock");
|
emit statusChanged("短按:切换 CapsLock");
|
||||||
} else {
|
} else {
|
||||||
// 长按 → 先恢复 CapsLock 状态,再开始识别
|
// 长按 → CapsLock 已在长按阈值时复位,松开后直接开始识别
|
||||||
// 这样识别结果注入时 CapsLock 已恢复原始状态
|
|
||||||
simulateCapsLock();
|
|
||||||
stopRecordingAndTranscribe();
|
stopRecordingAndTranscribe();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -19,10 +19,10 @@ class ConfigManager;
|
|||||||
*
|
*
|
||||||
* 协调全局快捷键、音频采集、STT 推理和文本注入。
|
* 协调全局快捷键、音频采集、STT 推理和文本注入。
|
||||||
* 状态机:
|
* 状态机:
|
||||||
* 1. 空闲 → 按下快捷键 → 开始录音
|
* 1. 按下 CapsLock → 开始预录音
|
||||||
* 2. 长按超过 1 秒 → 开始正式录音(清除之前的静音段)
|
* 2. 长按超过阈值(默认 3s)→ 立即复位 CapsLock,正式录音
|
||||||
* 3. 松开快捷键 → 停止录音 → 推理 → 注入文本
|
* 3. 松开 CapsLock → 停止录音 → 推理 → 注入文本
|
||||||
* 4. 短按(< 1 秒)→ 注入 CapsLock 按键(切换大小写)
|
* 4. 短按(< 阈值)→ 注入 CapsLock 按键(切换大小写)
|
||||||
*/
|
*/
|
||||||
class VoiceInputService : public QObject {
|
class VoiceInputService : public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@ -44,7 +44,7 @@ public:
|
|||||||
/** @brief 是否正在录音 */
|
/** @brief 是否正在录音 */
|
||||||
bool isRecording() const { return recording_; }
|
bool isRecording() const { return recording_; }
|
||||||
|
|
||||||
/** @brief 长按阈值(毫秒),默认 1000ms */
|
/** @brief 长按阈值(毫秒),默认 3000ms */
|
||||||
void setLongPressThreshold(int ms) { longPressThreshold_ = ms; }
|
void setLongPressThreshold(int ms) { longPressThreshold_ = ms; }
|
||||||
int longPressThreshold() const { return longPressThreshold_; }
|
int longPressThreshold() const { return longPressThreshold_; }
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user