Index: chrome/browser/chromeos/events/event_rewriter.cc |
diff --git a/chrome/browser/chromeos/events/event_rewriter.cc b/chrome/browser/chromeos/events/event_rewriter.cc |
index 5a68721e218eae08058ef9c1c5d5a96fa078ed47..d622d52f11b2bf35d87509c276640b6c40a715a7 100644 |
--- a/chrome/browser/chromeos/events/event_rewriter.cc |
+++ b/chrome/browser/chromeos/events/event_rewriter.cc |
@@ -8,9 +8,6 @@ |
#include <vector> |
-#include "ash/common/wm/window_state.h" |
-#include "ash/sticky_keys/sticky_keys_controller.h" |
-#include "ash/wm/window_util.h" |
#include "base/command_line.h" |
#include "base/logging.h" |
#include "base/macros.h" |
@@ -35,7 +32,6 @@ |
#include "ui/events/keycodes/dom/dom_key.h" |
#include "ui/events/keycodes/dom/keycode_converter.h" |
#include "ui/events/keycodes/keyboard_code_conversion.h" |
-#include "ui/wm/core/window_util.h" |
#if defined(USE_X11) |
#include <X11/extensions/XInput2.h> |
@@ -306,7 +302,7 @@ ui::DomCode RelocateModifier(ui::DomCode code, ui::DomKeyLocation location) { |
} // namespace |
-EventRewriter::EventRewriter(ash::StickyKeysController* sticky_keys_controller) |
+EventRewriter::EventRewriter(ui::EventRewriter* sticky_keys_controller) |
: last_keyboard_device_id_(ui::ED_UNKNOWN_DEVICE), |
ime_keyboard_for_testing_(NULL), |
pref_service_for_testing_(NULL), |
@@ -370,7 +366,7 @@ ui::EventRewriteStatus EventRewriter::NextDispatchEvent( |
// know that they don't have to be passed through the post-sticky key |
// rewriting phases, |RewriteExtendedKeys()| and |RewriteFunctionKeys()|, |
// because those phases do nothing with modifier key releases. |
- return sticky_keys_controller_->NextDispatchEvent(new_event); |
+ return sticky_keys_controller_->NextDispatchEvent(last_event, new_event); |
} |
NOTREACHED(); |
return ui::EVENT_REWRITE_CONTINUE; |
@@ -523,8 +519,14 @@ ui::EventRewriteStatus EventRewriter::RewriteKeyEvent( |
ui::EventRewriteStatus status = ui::EVENT_REWRITE_CONTINUE; |
bool is_sticky_key_extension_command = false; |
if (sticky_keys_controller_) { |
- status = sticky_keys_controller_->RewriteKeyEvent(key_event, state.key_code, |
- &state.flags); |
+ auto tmp_event = key_event; |
+ tmp_event.set_key_code(state.key_code); |
+ tmp_event.set_flags(state.flags); |
+ std::unique_ptr<ui::Event> output_event; |
+ status = sticky_keys_controller_->RewriteEvent(tmp_event, &output_event); |
+ if (status == ui::EVENT_REWRITE_REWRITTEN || |
+ status == ui::EVENT_REWRITE_DISPATCH_ANOTHER) |
+ state.flags = output_event->flags(); |
if (status == ui::EVENT_REWRITE_DISCARD) |
return ui::EVENT_REWRITE_DISCARD; |
is_sticky_key_extension_command = |
@@ -573,8 +575,15 @@ ui::EventRewriteStatus EventRewriter::RewriteMouseButtonEvent( |
int flags = mouse_event.flags(); |
RewriteLocatedEvent(mouse_event, &flags); |
ui::EventRewriteStatus status = ui::EVENT_REWRITE_CONTINUE; |
- if (sticky_keys_controller_) |
- status = sticky_keys_controller_->RewriteMouseEvent(mouse_event, &flags); |
+ if (sticky_keys_controller_) { |
+ auto tmp_event = mouse_event; |
+ tmp_event.set_flags(flags); |
+ std::unique_ptr<ui::Event> output_event; |
+ status = sticky_keys_controller_->RewriteEvent(tmp_event, &output_event); |
+ if (status == ui::EVENT_REWRITE_REWRITTEN || |
+ status == ui::EVENT_REWRITE_DISPATCH_ANOTHER) |
+ flags = output_event->flags(); |
+ } |
int changed_button = ui::EF_NONE; |
if ((mouse_event.type() == ui::ET_MOUSE_PRESSED) || |
(mouse_event.type() == ui::ET_MOUSE_RELEASED)) { |
@@ -608,21 +617,34 @@ ui::EventRewriteStatus EventRewriter::RewriteMouseWheelEvent( |
return ui::EVENT_REWRITE_CONTINUE; |
int flags = wheel_event.flags(); |
RewriteLocatedEvent(wheel_event, &flags); |
+ auto tmp_event = wheel_event; |
+ tmp_event.set_flags(flags); |
ui::EventRewriteStatus status = |
- sticky_keys_controller_->RewriteMouseEvent(wheel_event, &flags); |
- if ((wheel_event.flags() == flags) && |
- (status == ui::EVENT_REWRITE_CONTINUE)) { |
- return ui::EVENT_REWRITE_CONTINUE; |
- } |
- if (status == ui::EVENT_REWRITE_CONTINUE) |
- status = ui::EVENT_REWRITE_REWRITTEN; |
- ui::MouseWheelEvent* rewritten_wheel_event = |
- new ui::MouseWheelEvent(wheel_event); |
- rewritten_event->reset(rewritten_wheel_event); |
- rewritten_wheel_event->set_flags(flags); |
+ sticky_keys_controller_->RewriteEvent(tmp_event, rewritten_event); |
+ |
+ switch (status) { |
+ case ui::EVENT_REWRITE_REWRITTEN: |
+ case ui::EVENT_REWRITE_DISPATCH_ANOTHER: |
+ // whell event has been rewritten and stored in |rewritten_event|. |
+#if defined(USE_X11) |
+ ui::UpdateX11EventForFlags(rewritten_event->get()); |
+#endif |
+ break; |
+ case ui::EVENT_REWRITE_CONTINUE: |
+ if (flags != wheel_event.flags()) { |
+ *rewritten_event = base::MakeUnique<ui::MouseWheelEvent>(wheel_event); |
+ (*rewritten_event)->set_flags(flags); |
+ status = ui::EVENT_REWRITE_REWRITTEN; |
#if defined(USE_X11) |
- ui::UpdateX11EventForFlags(rewritten_wheel_event); |
+ ui::UpdateX11EventForFlags(rewritten_event->get()); |
#endif |
+ } |
+ break; |
+ case ui::EVENT_REWRITE_DISCARD: |
+ NOTREACHED(); |
+ break; |
+ } |
+ |
return status; |
} |
@@ -645,17 +667,15 @@ ui::EventRewriteStatus EventRewriter::RewriteTouchEvent( |
ui::EventRewriteStatus EventRewriter::RewriteScrollEvent( |
const ui::ScrollEvent& scroll_event, |
std::unique_ptr<ui::Event>* rewritten_event) { |
- int flags = scroll_event.flags(); |
- ui::EventRewriteStatus status = ui::EVENT_REWRITE_CONTINUE; |
- if (sticky_keys_controller_) |
- status = sticky_keys_controller_->RewriteScrollEvent(scroll_event, &flags); |
- if (status == ui::EVENT_REWRITE_CONTINUE) |
- return status; |
- ui::ScrollEvent* rewritten_scroll_event = new ui::ScrollEvent(scroll_event); |
- rewritten_event->reset(rewritten_scroll_event); |
- rewritten_scroll_event->set_flags(flags); |
+ if (!sticky_keys_controller_) |
+ return ui::EVENT_REWRITE_CONTINUE; |
+ ui::EventRewriteStatus status = |
+ sticky_keys_controller_->RewriteEvent(scroll_event, rewritten_event); |
+ // Scroll event shouldn't be discarded. |
+ DCHECK_NE(status, ui::EVENT_REWRITE_DISCARD); |
#if defined(USE_X11) |
- ui::UpdateX11EventForFlags(rewritten_scroll_event); |
+ if (status != ui::EVENT_REWRITE_CONTINUE) |
+ ui::UpdateX11EventForFlags(rewritten_event->get()); |
#endif |
return status; |
} |