1
+ /*
2
+ * Copyright (c) 2021 Naoaki Iwakiri
3
+ * This program is released under GNU General Public License version 3 or later
4
+ * You should have received a copy of the GNU General Public License along with
5
+ * this program. If not, see <https://www.gnu.org/licenses/>. Creation Date:
6
+ * 2021-04-30
7
+ *
8
+ * SPDX-License-Identifier: GPL-3.0-or-later
9
+ * SPDX-FileType: SOURCE
10
+ * SPDX-FileName: cskk.cpp
11
+ * SPDX-FileCopyrightText: Copyright (c) 2021 Naoaki Iwakiri
12
+ */
13
+ #include " cskk.h"
14
+ #include < iostream>
15
+
16
+ namespace fcitx {
17
+ CskkEngine::CskkEngine (Instance *instance)
18
+ : instance_{instance}, factory_([this ](InputContext &ic) {
19
+ auto newCskkContext = new FcitxCskkContext (this , &ic);
20
+ return newCskkContext;
21
+ }) {
22
+ instance_->inputContextManager ().registerProperty (" skkState" , &factory_);
23
+ };
24
+ CskkEngine::~CskkEngine () = default ;
25
+ void CskkEngine::keyEvent (const InputMethodEntry &, KeyEvent &keyEvent) {
26
+ // delegate to state
27
+ auto ic = keyEvent.inputContext ();
28
+ auto state = ic->propertyFor (&factory_);
29
+ state->keyEvent (keyEvent);
30
+ }
31
+ void CskkEngine::save () {}
32
+
33
+ // //////////////////////////////////////////////////////////////////////////////
34
+ // / CskkContext
35
+ // //////////////////////////////////////////////////////////////////////////////
36
+ FcitxCskkContext::FcitxCskkContext (CskkEngine *_engine, InputContext *_ic)
37
+ : context_(skk_context_new(nullptr , 0 )) {
38
+ FCITX_UNUSED (_engine);
39
+ FCITX_UNUSED (_ic);
40
+ }
41
+ FcitxCskkContext::~FcitxCskkContext () = default ;
42
+ void FcitxCskkContext::keyEvent (KeyEvent &keyEvent) {
43
+ // TODO: handleCandidate to utilize fcitx's paged candidate list
44
+
45
+ uint32_t modifiers =
46
+ static_cast <uint32_t >(keyEvent.rawKey ().states () & KeyState::SimpleMask);
47
+
48
+ CskkKeyEvent *cskkKeyEvent = skk_key_event_new_from_fcitx_keyevent (
49
+ keyEvent.rawKey ().sym (), modifiers, keyEvent.isRelease ());
50
+
51
+ if (skk_context_process_key_event (context_, cskkKeyEvent)) {
52
+ keyEvent.filterAndAccept ();
53
+ }
54
+ }
55
+ } // namespace fcitx
0 commit comments