Fcitx
inputmethodengine.cpp
1 /*
2  * SPDX-FileCopyrightText: 2021~2021 CSSlayer <wengxt@gmail.com>
3  *
4  * SPDX-License-Identifier: LGPL-2.1-or-later
5  *
6  */
7 #include "inputmethodengine.h"
8 #include <stdexcept>
9 #include "inputcontext.h"
10 #include "inputpanel.h"
11 
12 namespace fcitx {
13 
15  InputContext &ic) {
16  if (auto *this2 = dynamic_cast<InputMethodEngineV2 *>(this)) {
17  return this2->subModeIconImpl(entry, ic);
18  }
19  return overrideIcon(entry);
20 }
21 
23  InputContext &ic) {
24  if (auto *this2 = dynamic_cast<InputMethodEngineV2 *>(this)) {
25  return this2->subModeLabelImpl(entry, ic);
26  }
27  return {};
28 }
29 
32  if (auto *this4 = dynamic_cast<InputMethodEngineV4 *>(this)) {
33  this4->virtualKeyboardEventImpl(entry, virtualKeyboardEvent);
34  } else if (auto virtualKeyEvent = virtualKeyboardEvent.toKeyEvent()) {
35  keyEvent(entry, *virtualKeyEvent);
36  // TODO: revisit the default action.
37  if (virtualKeyEvent->accepted()) {
38  virtualKeyboardEvent.accept();
39  } else if (!virtualKeyboardEvent.text().empty()) {
40  virtualKeyboardEvent.inputContext()->commitString(
41  virtualKeyboardEvent.text());
42  }
43  }
44 }
45 
46 void defaultInvokeActionBehavior(InvokeActionEvent &event) {
47  auto ic = event.inputContext();
48  auto commit = ic->inputPanel().clientPreedit().toStringForCommit();
49  if (!commit.empty()) {
50  ic->commitString(commit);
51  }
52  ic->reset();
53  event.filter();
54 }
55 
57 
58  InvokeActionEvent &event) {
59  if (auto *this3 = dynamic_cast<InputMethodEngineV3 *>(this)) {
60  return this3->invokeActionImpl(entry, event);
61  }
62  defaultInvokeActionBehavior(event);
63 }
64 
65 std::string InputMethodEngineV2::subModeIconImpl(const InputMethodEntry &,
66  InputContext &) {
67  return {};
68 }
69 
70 std::string InputMethodEngineV2::subModeLabelImpl(const InputMethodEntry &,
71  InputContext &) {
72  return {};
73 }
74 
75 void InputMethodEngineV3::invokeActionImpl(const InputMethodEntry &entry,
76  InvokeActionEvent &event) {
77  FCITX_UNUSED(entry);
78  defaultInvokeActionBehavior(event);
79 }
80 
81 void InputMethodEngineV4::virtualKeyboardEventImpl(const InputMethodEntry &,
83  throw std::logic_error("Not implemented virtualKeyboardEventImpl");
84 }
85 
86 } // namespace fcitx
Class for input panel in UI.
void virtualKeyboardEvent(const InputMethodEntry &entry, VirtualKeyboardEvent &VirtualKeyboardEvent)
Process virtual keyboard event.
Definition: action.cpp:17
void invokeAction(const InputMethodEntry &entry, InvokeActionEvent &event)
Process InvokeActionEvent.
virtual std::string overrideIcon(const InputMethodEntry &)
Return an alternative icon for entry.
virtual void keyEvent(const InputMethodEntry &entry, KeyEvent &keyEvent)=0
Main function where the input method handles a key event.
Input Context for Fcitx.
An input context represents a client of Fcitx.
Definition: inputcontext.h:47
void commitString(const std::string &text)
Commit a string to the client.
std::string subModeIcon(const InputMethodEntry &entry, InputContext &ic)
Return the icon name for the sub mode.
std::string subModeLabel(const InputMethodEntry &entry, InputContext &ic)
Return the label for the sub mode.