Index: remoting/host/input_injector_x11.cc |
diff --git a/remoting/host/input_injector_x11.cc b/remoting/host/input_injector_x11.cc |
index 3c9d0a88fe17565532968acb8a2f348e25f0d80d..4738700f5843a7608190bae09dafa8da9b058beb 100644 |
--- a/remoting/host/input_injector_x11.cc |
+++ b/remoting/host/input_injector_x11.cc |
@@ -26,6 +26,7 @@ |
#include "remoting/host/clipboard.h" |
#include "remoting/host/linux/unicode_to_keysym.h" |
#include "remoting/host/linux/x11_util.h" |
+#include "remoting/host/linux/x_server_key_mapper.h" |
#include "remoting/proto/internal.pb.h" |
#include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h" |
#include "ui/events/keycodes/dom/dom_code.h" |
@@ -199,6 +200,8 @@ class InputInjectorX11 : public InputInjector { |
std::unique_ptr<Clipboard> clipboard_; |
+ std::unique_ptr<XServerKeyMapper> key_mapper_; |
+ |
bool saved_auto_repeat_enabled_; |
DISALLOW_COPY_AND_ASSIGN(Core); |
@@ -367,8 +370,14 @@ void InputInjectorX11::Core::InjectTextEvent(const TextEvent& event) { |
uint32_t keycode; |
uint32_t modifiers; |
- if (!FindKeycodeForUnicode(display_, code_point, &keycode, &modifiers)) |
- continue; |
+ if (!FindKeycodeForUnicode(display_, code_point, &keycode, &modifiers)) { |
+ int result = key_mapper_->AddNewCharacter(code_point); |
Sergey Ulanov
2016/09/19 21:39:00
Does this work well when you inject a string of ch
Yuwei
2016/09/21 03:47:40
Done.
|
+ if (result < 0) { |
+ continue; |
+ } |
+ keycode = result; |
+ modifiers = 0; |
+ } |
XkbLockModifiers(display_, XkbUseCoreKbd, modifiers, modifiers); |
@@ -634,6 +643,8 @@ void InputInjectorX11::Core::Start( |
InitMouseButtonMap(); |
clipboard_->Start(std::move(client_clipboard)); |
+ |
+ key_mapper_.reset(new XServerKeyMapper(display_)); |
} |
void InputInjectorX11::Core::Stop() { |
@@ -643,6 +654,7 @@ void InputInjectorX11::Core::Stop() { |
} |
clipboard_.reset(); |
+ key_mapper_.reset(); |
} |
} // namespace |