aboutsummaryrefslogtreecommitdiff
path: root/src/platform/gui/xcb/InputMethod.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/platform/gui/xcb/InputMethod.cpp')
-rw-r--r--src/platform/gui/xcb/InputMethod.cpp25
1 files changed, 16 insertions, 9 deletions
diff --git a/src/platform/gui/xcb/InputMethod.cpp b/src/platform/gui/xcb/InputMethod.cpp
index 90bc8f66..2b495925 100644
--- a/src/platform/gui/xcb/InputMethod.cpp
+++ b/src/platform/gui/xcb/InputMethod.cpp
@@ -26,13 +26,20 @@ XcbXimInputMethodManager::XcbXimInputMethodManager(
void *user_data) {
auto manager = static_cast<XcbXimInputMethodManager *>(user_data);
if ((event->response_type & ~0x80) == XCB_KEY_PRESS) {
- manager->DispatchCommit(
- im, ic,
+ auto text =
manager->application_->GetXcbKeyboardManager()->KeycodeToUtf8(
- event->detail));
+ event->detail);
+ if (text.empty() || text == "\b") {
+ if (manager->forward_event_callback_) {
+ manager->forward_event_callback_(event);
+ }
+ } else {
+ manager->DispatchCommit(im, ic, std::move(text));
+ }
} else {
- if (manager->forward_event_callback_)
+ if (manager->forward_event_callback_) {
manager->forward_event_callback_(event);
+ }
}
},
.commit_string =
@@ -81,7 +88,7 @@ xcb_xim_t *XcbXimInputMethodManager::GetXcbXim() { return im_; }
void XcbXimInputMethodManager::DispatchCommit(xcb_xim_t *im, xcb_xic_t ic,
std::string text) {
- CRU_LOG_TAG_INFO("IC {} dispatch commit string: {}", ic, text);
+ CRU_LOG_TAG_DEBUG("IC {} dispatch commit string: {}", ic, text);
for (auto window : application_->GetAllWindow()) {
auto input_method_context = window->GetInputMethodContext();
auto context = CheckPlatform<XcbXimInputMethodContext>(input_method_context,
@@ -185,7 +192,7 @@ static void EmptyXimDestroyIcCallback(xcb_xim_t *im, xcb_xic_t ic,
void XcbXimInputMethodContext::SetCandidateWindowPosition(const Point &point) {
if (!ic_) return;
- CRU_LOG_TAG_INFO("IC {} set candidate window position: {}", *ic_, point);
+ CRU_LOG_TAG_DEBUG("IC {} set candidate window position: {}", *ic_, point);
xcb_point_t spot;
spot.x = point.x;
@@ -221,7 +228,7 @@ void XcbXimInputMethodContext::CreateIc(xcb_window_t window) {
auto XimCreateIcCallback = [](xcb_xim_t *im, xcb_xic_t ic, void *user_data) {
auto context = static_cast<XcbXimInputMethodContext *>(user_data);
context->ic_ = ic;
- CRU_LOG_TAG_INFO("IC {} is created.", ic);
+ CRU_LOG_TAG_DEBUG("IC {} is created.", ic);
if (context->window_->HasFocus()) {
xcb_xim_set_ic_focus(context->manager_->GetXcbXim(), ic);
}
@@ -232,14 +239,14 @@ void XcbXimInputMethodContext::CreateIc(xcb_window_t window) {
xcb_xim_create_ic(manager_->GetXcbXim(), XimCreateIcCallback, this,
XCB_XIM_XNInputStyle, &input_style, XCB_XIM_XNClientWindow,
&window, XCB_XIM_XNFocusWindow, &window, NULL);
- CRU_LOG_TAG_INFO("Create XIM IC.");
+ CRU_LOG_TAG_DEBUG("Create XIM IC.");
}
void XcbXimInputMethodContext::DestroyIc() {
if (!ic_) return;
xcb_xim_destroy_ic(manager_->GetXcbXim(), *ic_, EmptyXimDestroyIcCallback,
this);
- CRU_LOG_TAG_INFO("Destroy XIM IC.");
+ CRU_LOG_TAG_DEBUG("Destroy XIM IC.");
ic_ = std::nullopt;
}