Commit 9efb801e authored by Yuichiro Hanada's avatar Yuichiro Hanada Committed by Commit Bot

Migrate EventRewriterChromeOS to new API (4/n).

This CL rewrites RewriteMouseWheelEvent to use new API.

Bug: 1049489
Test: unit_tests
Change-Id: I97aa14f7b51cd7c5d07125abe74848fa1b445e47
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2055948
Commit-Queue: Yuichiro Hanada <yhanada@chromium.org>
Reviewed-by: default avatarMitsuru Oshima <oshima@chromium.org>
Cr-Commit-Position: refs/heads/master@{#741685}
parent fd9048cf
...@@ -3211,13 +3211,8 @@ TEST_F(EventRewriterAshTest, MouseWheelEventDispatchImpl) { ...@@ -3211,13 +3211,8 @@ TEST_F(EventRewriterAshTest, MouseWheelEventDispatchImpl) {
// Tests that if modifier keys are remapped, the flags of a mouse wheel event // Tests that if modifier keys are remapped, the flags of a mouse wheel event
// will be rewritten properly. // will be rewritten properly.
TEST_F(EventRewriterAshTest, MouseWheelEventModifiersRewritten) { TEST_F(EventRewriterAshTest, MouseWheelEventModifiersRewritten) {
// Remap Control to Alt.
IntegerPrefMember control;
InitModifierKeyPref(&control, prefs::kLanguageRemapControlKeyTo,
ui::chromeos::ModifierKey::kAltKey);
// Generate a mouse wheel event that has a CONTROL_DOWN modifier flag and // Generate a mouse wheel event that has a CONTROL_DOWN modifier flag and
// expect that it will be rewritten to ALT_DOWN. // expect that no rewriting happens as no modifier remapping is active.
std::vector<std::unique_ptr<ui::Event>> events; std::vector<std::unique_ptr<ui::Event>> events;
gfx::Point location(0, 0); gfx::Point location(0, 0);
ui::MouseWheelEvent positive( ui::MouseWheelEvent positive(
...@@ -3229,6 +3224,20 @@ TEST_F(EventRewriterAshTest, MouseWheelEventModifiersRewritten) { ...@@ -3229,6 +3224,20 @@ TEST_F(EventRewriterAshTest, MouseWheelEventModifiersRewritten) {
PopEvents(&events); PopEvents(&events);
EXPECT_EQ(1u, events.size()); EXPECT_EQ(1u, events.size());
EXPECT_TRUE(events[0]->IsMouseWheelEvent()); EXPECT_TRUE(events[0]->IsMouseWheelEvent());
EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN);
// Remap Control to Alt.
IntegerPrefMember control;
InitModifierKeyPref(&control, prefs::kLanguageRemapControlKeyTo,
ui::chromeos::ModifierKey::kAltKey);
// Sends the same events once again and expect that it will be rewritten to
// ALT_DOWN.
details = Send(&positive);
ASSERT_FALSE(details.dispatcher_destroyed);
PopEvents(&events);
EXPECT_EQ(1u, events.size());
EXPECT_TRUE(events[0]->IsMouseWheelEvent());
EXPECT_FALSE(events[0]->flags() & ui::EF_CONTROL_DOWN); EXPECT_FALSE(events[0]->flags() & ui::EF_CONTROL_DOWN);
EXPECT_TRUE(events[0]->flags() & ui::EF_ALT_DOWN); EXPECT_TRUE(events[0]->flags() & ui::EF_ALT_DOWN);
} }
......
...@@ -516,6 +516,10 @@ ui::EventDispatchDetails EventRewriterChromeOS::RewriteEvent( ...@@ -516,6 +516,10 @@ ui::EventDispatchDetails EventRewriterChromeOS::RewriteEvent(
return RewriteMouseButtonEvent(static_cast<const ui::MouseEvent&>(event), return RewriteMouseButtonEvent(static_cast<const ui::MouseEvent&>(event),
continuation); continuation);
} }
if (event.type() == ui::ET_MOUSEWHEEL) {
return RewriteMouseWheelEvent(
static_cast<const ui::MouseWheelEvent&>(event), continuation);
}
if ((event.type() == ui::ET_TOUCH_PRESSED) || if ((event.type() == ui::ET_TOUCH_PRESSED) ||
(event.type() == ui::ET_TOUCH_RELEASED)) { (event.type() == ui::ET_TOUCH_RELEASED)) {
return RewriteTouchEvent(static_cast<const ui::TouchEvent&>(event), return RewriteTouchEvent(static_cast<const ui::TouchEvent&>(event),
...@@ -541,10 +545,6 @@ ui::EventRewriteStatus EventRewriterChromeOS::RewriteEvent( ...@@ -541,10 +545,6 @@ ui::EventRewriteStatus EventRewriterChromeOS::RewriteEvent(
&status); &status);
return status; return status;
} }
if (event.type() == ui::ET_MOUSEWHEEL) {
return RewriteMouseWheelEvent(
static_cast<const ui::MouseWheelEvent&>(event), rewritten_event);
}
return ui::EVENT_REWRITE_CONTINUE; return ui::EVENT_REWRITE_CONTINUE;
} }
...@@ -1035,36 +1035,44 @@ ui::EventDispatchDetails EventRewriterChromeOS::RewriteMouseButtonEvent( ...@@ -1035,36 +1035,44 @@ ui::EventDispatchDetails EventRewriterChromeOS::RewriteMouseButtonEvent(
return details; return details;
} }
ui::EventRewriteStatus EventRewriterChromeOS::RewriteMouseWheelEvent( // TODO(yhanada): Clean up this method once StickyKeysController migrates to the
// new API.
ui::EventDispatchDetails EventRewriterChromeOS::RewriteMouseWheelEvent(
const ui::MouseWheelEvent& wheel_event, const ui::MouseWheelEvent& wheel_event,
std::unique_ptr<ui::Event>* rewritten_event) { const Continuation continuation) {
if (!sticky_keys_controller_) if (!sticky_keys_controller_)
return ui::EVENT_REWRITE_CONTINUE; return SendEvent(continuation, &wheel_event);
int flags = wheel_event.flags(); int flags = wheel_event.flags();
RewriteLocatedEvent(wheel_event, &flags); RewriteLocatedEvent(wheel_event, &flags);
auto tmp_event = wheel_event; auto tmp_event = wheel_event;
tmp_event.set_flags(flags); tmp_event.set_flags(flags);
std::unique_ptr<ui::Event> rewritten_event;
ui::EventRewriteStatus status = ui::EventRewriteStatus status =
sticky_keys_controller_->RewriteEvent(tmp_event, rewritten_event); sticky_keys_controller_->RewriteEvent(tmp_event, &rewritten_event);
// Wheel event shouldn't be discarded.
DCHECK_NE(status, ui::EVENT_REWRITE_DISCARD);
switch (status) { if (status == ui::EVENT_REWRITE_CONTINUE) {
case ui::EVENT_REWRITE_REWRITTEN: if (flags != wheel_event.flags()) {
case ui::EVENT_REWRITE_DISPATCH_ANOTHER: ui::MouseWheelEvent new_event = wheel_event;
// whell event has been rewritten and stored in |rewritten_event|. new_event.set_flags(flags);
break; return SendEventFinally(continuation, &new_event);
case ui::EVENT_REWRITE_CONTINUE: }
if (flags != wheel_event.flags()) { return SendEvent(continuation, &wheel_event);
*rewritten_event = std::make_unique<ui::MouseWheelEvent>(wheel_event);
(*rewritten_event)->set_flags(flags);
status = ui::EVENT_REWRITE_REWRITTEN;
}
break;
case ui::EVENT_REWRITE_DISCARD:
NOTREACHED();
break;
} }
return status; ui::EventDispatchDetails details =
SendEventFinally(continuation, rewritten_event.get());
while (status == ui::EVENT_REWRITE_DISPATCH_ANOTHER &&
!details.dispatcher_destroyed) {
std::unique_ptr<ui::Event> new_event;
status = sticky_keys_controller_->NextDispatchEvent(*rewritten_event,
&new_event);
details = SendEventFinally(continuation, new_event.get());
rewritten_event = std::move(new_event);
}
return details;
} }
ui::EventDispatchDetails EventRewriterChromeOS::RewriteTouchEvent( ui::EventDispatchDetails EventRewriterChromeOS::RewriteTouchEvent(
......
...@@ -235,9 +235,9 @@ class EventRewriterChromeOS : public ui::EventRewriter { ...@@ -235,9 +235,9 @@ class EventRewriterChromeOS : public ui::EventRewriter {
ui::EventDispatchDetails RewriteMouseButtonEvent( ui::EventDispatchDetails RewriteMouseButtonEvent(
const ui::MouseEvent& mouse_event, const ui::MouseEvent& mouse_event,
const Continuation continuation); const Continuation continuation);
ui::EventRewriteStatus RewriteMouseWheelEvent( ui::EventDispatchDetails RewriteMouseWheelEvent(
const ui::MouseWheelEvent& mouse_event, const ui::MouseWheelEvent& mouse_event,
std::unique_ptr<ui::Event>* rewritten_event); const Continuation continuation);
ui::EventDispatchDetails RewriteTouchEvent(const ui::TouchEvent& touch_event, ui::EventDispatchDetails RewriteTouchEvent(const ui::TouchEvent& touch_event,
const Continuation continuation); const Continuation continuation);
ui::EventDispatchDetails RewriteScrollEvent( ui::EventDispatchDetails RewriteScrollEvent(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment