diff --git a/frameworks/inputmethod_controller/include/input_method_controller.h b/frameworks/inputmethod_controller/include/input_method_controller.h index 4557fdfb33d6463c241de2dcae51a0df409044bd..0a6ec3b92bcb408fb36484d9f16faafd87ca7407 100644 --- a/frameworks/inputmethod_controller/include/input_method_controller.h +++ b/frameworks/inputmethod_controller/include/input_method_controller.h @@ -91,6 +91,7 @@ namespace MiscServices { int mSelectOldEnd = 0; int mSelectNewBegin = 0; int mSelectNewEnd = 0; + int32_t mSpecialKeyPress = 0; static std::mutex instanceLock_; static sptr instance_; diff --git a/frameworks/inputmethod_controller/src/input_method_controller.cpp b/frameworks/inputmethod_controller/src/input_method_controller.cpp index a51d85faeb65a336d32f9f6a207e2f777d4ac25f..b9f10940cf6d03aae685d9c2d4d422ac5c2d1964 100644 --- a/frameworks/inputmethod_controller/src/input_method_controller.cpp +++ b/frameworks/inputmethod_controller/src/input_method_controller.cpp @@ -357,11 +357,23 @@ using namespace MessageID; if (mImms == nullptr) { return false; } + int32_t code = keyEvent->GetKeyCode(); + int32_t status = keyEvent->GetKeyAction(); + if (mSpecialKeyPress != 0) { + if ((code == MMI::KeyEvent::KEYCODE_CTRL_LEFT || code == MMI::KeyEvent::KEYCODE_CTRL_RIGHT) && status == MMI::KeyEvent::KEY_ACTION_UP) { + mSpecialKeyPress--; + } + return false; + } + if ((code == MMI::KeyEvent::KEYCODE_CTRL_LEFT || code == MMI::KeyEvent::KEYCODE_CTRL_RIGHT) && status == MMI::KeyEvent::KEY_ACTION_DOWN) { + mSpecialKeyPress++; + return false; + } MessageParcel data; if (!(data.WriteInterfaceToken(mImms->GetDescriptor()) - &&data.WriteRemoteObject(mClient->AsObject().GetRefPtr()) - &&data.WriteInt32(keyEvent->GetKeyCode()) - &&data.WriteInt32(keyEvent->GetKeyAction()))) { + && data.WriteRemoteObject(mClient->AsObject().GetRefPtr()) + && data.WriteInt32(keyEvent->GetKeyCode()) + && data.WriteInt32(keyEvent->GetKeyAction()))) { return false; } mImms->DispatchKey(data);