Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1373)

Unified Diff: content/renderer/gpu/input_event_filter.cc

Issue 11490017: Sync Ime and Keyboard events. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixing nits Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/renderer/gpu/input_event_filter.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/gpu/input_event_filter.cc
diff --git a/content/renderer/gpu/input_event_filter.cc b/content/renderer/gpu/input_event_filter.cc
index df1abf36f7a421bb7a01647aa002e2c5c9884eb2..89cccdd2ab4ebe182a34d606faaca84b8713af07 100644
--- a/content/renderer/gpu/input_event_filter.cc
+++ b/content/renderer/gpu/input_event_filter.cc
@@ -11,6 +11,18 @@
using WebKit::WebInputEvent;
+namespace {
+
+bool IsImeEvent(const IPC::Message& message) {
+ return (message.type() == ViewMsg_ImeSetComposition::ID ||
+ message.type() == ViewMsg_ImeConfirmComposition::ID ||
+ message.type() == ViewMsg_SetCompositionFromExistingText::ID ||
+ message.type() == ViewMsg_SetEditableSelectionOffsets::ID ||
+ message.type() == ViewMsg_ExtendSelectionAndDelete::ID);
+}
+
+}
+
namespace content {
InputEventFilter::InputEventFilter(IPC::Listener* main_listener,
@@ -40,6 +52,7 @@ void InputEventFilter::DidHandleInputEvent() {
SendACK(messages_.front(), INPUT_EVENT_ACK_STATE_CONSUMED);
messages_.pop();
+ ForwardPendingImeEvents();
}
void InputEventFilter::DidNotHandleInputEvent(bool send_to_widget) {
@@ -58,6 +71,7 @@ void InputEventFilter::DidNotHandleInputEvent(bool send_to_widget) {
SendACK(messages_.front(), INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
}
messages_.pop();
+ ForwardPendingImeEvents();
}
void InputEventFilter::OnFilterAdded(IPC::Channel* channel) {
@@ -74,6 +88,9 @@ void InputEventFilter::OnChannelClosing() {
}
bool InputEventFilter::OnMessageReceived(const IPC::Message& message) {
+ if (IsImeEvent(message))
+ return QueueImeEvent(message);
+
if (message.type() != ViewMsg_HandleInputEvent::ID)
return false;
@@ -152,4 +169,21 @@ void InputEventFilter::SendACKOnIOThread(
new ViewHostMsg_HandleInputEvent_ACK(routing_id, event_type, ack_result));
}
+bool InputEventFilter::QueueImeEvent(const IPC::Message& message) {
+ if (messages_.empty())
+ return false;
+ messages_.push(message);
+ return true;
+}
+
+void InputEventFilter::ForwardPendingImeEvents() {
+ while (!messages_.empty() && IsImeEvent(messages_.front())) {
+ main_loop_->PostTask(
+ FROM_HERE,
+ base::Bind(&InputEventFilter::ForwardToMainListener,
+ this, messages_.front()));
+ messages_.pop();
+ }
+}
+
} // namespace content
« no previous file with comments | « content/renderer/gpu/input_event_filter.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698