From f3a2ad076b075da9ae8ccf4d3008bca1a23071a0 Mon Sep 17 00:00:00 2001 From: Chen Gong Date: Fri, 11 Sep 2020 23:50:59 +0800 Subject: [PATCH] feat(chord_composer): use Control, Alt, Shift to input chord when enabled by options `chord_composer/use_control: true` etc. --- src/rime/gear/chord_composer.cc | 7 +++++++ src/rime/gear/chord_composer.h | 3 +++ 2 files changed, 10 insertions(+) diff --git a/src/rime/gear/chord_composer.cc b/src/rime/gear/chord_composer.cc index 61f36868f3..c26007f451 100644 --- a/src/rime/gear/chord_composer.cc +++ b/src/rime/gear/chord_composer.cc @@ -25,6 +25,9 @@ ChordComposer::ChordComposer(const Ticket& ticket) : Processor(ticket) { string alphabet; config->GetString("chord_composer/alphabet", &alphabet); chording_keys_.Parse(alphabet); + config->GetBool("chord_composer/use_control", &use_control_); + config->GetBool("chord_composer/use_alt", &use_alt_); + config->GetBool("chord_composer/use_shift", &use_shift_); config->GetString("speller/delimiter", &delimiter_); algebra_.Load(config->GetList("chord_composer/algebra")); output_format_.Load(config->GetList("chord_composer/output_format")); @@ -84,6 +87,10 @@ inline static int get_base_layer_key_code(const KeyEvent& key_event) { ProcessResult ChordComposer::ProcessChordingKey(const KeyEvent& key_event) { if (key_event.ctrl() || key_event.alt()) { raw_sequence_.clear(); + } + if (key_event.ctrl() && !use_control_ || + key_event.alt() && !use_alt_ || + key_event.shift() && !use_shift_) { ClearChord(); return kNoop; } diff --git a/src/rime/gear/chord_composer.h b/src/rime/gear/chord_composer.h index 9b902ebfef..39413aa0aa 100644 --- a/src/rime/gear/chord_composer.h +++ b/src/rime/gear/chord_composer.h @@ -38,6 +38,9 @@ class ChordComposer : public Processor { Projection algebra_; Projection output_format_; Projection prompt_format_; + bool use_control_ = false; + bool use_alt_ = false; + bool use_shift_ = false; set pressed_; set chord_;