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..be4e6d7f8ec962cfcd79af646f2b48ce74261ac2 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" |
@@ -37,18 +34,6 @@ |
#include "ui/events/keycodes/keyboard_code_conversion.h" |
#include "ui/wm/core/window_util.h" |
-#if defined(USE_X11) |
-#include <X11/extensions/XInput2.h> |
-#include <X11/Xlib.h> |
- |
-// Get rid of macros from Xlib.h that conflicts with other parts of the code. |
-#undef RootWindow |
-#undef Status |
- |
-#include "ui/base/x/x11_util.h" |
-#include "ui/events/keycodes/keyboard_code_conversion_x.h" |
-#endif |
- |
namespace chromeos { |
namespace { |
@@ -306,7 +291,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 +355,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 +508,13 @@ 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); |
+ std::unique_ptr<ui::Event> tmp_event = ui::Event::Clone(key_event); |
+ tmp_event->AsKeyEvent()->set_key_code(state.key_code); |
+ tmp_event->AsKeyEvent()->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) |
+ state.flags = output_event->flags(); |
if (status == ui::EVENT_REWRITE_DISCARD) |
return ui::EVENT_REWRITE_DISCARD; |
is_sticky_key_extension_command = |
@@ -545,15 +535,6 @@ ui::EventRewriteStatus EventRewriter::RewriteKeyEvent( |
} |
if ((key_event.flags() == state.flags) && |
(key_event.key_code() == state.key_code) && |
-#if defined(USE_X11) |
- // TODO(kpschoedel): This test is present because several consumers of |
- // key events depend on having a native core X11 event, so we rewrite |
- // all XI2 key events (GenericEvent) into corresponding core X11 key |
- // events. Remove this when event consumers no longer care about |
- // native X11 event details (crbug.com/380349). |
- (!key_event.HasNativeEvent() || |
- (key_event.native_event()->type != GenericEvent)) && |
-#endif |
(status == ui::EVENT_REWRITE_CONTINUE)) { |
return ui::EVENT_REWRITE_CONTINUE; |
} |
@@ -573,8 +554,14 @@ 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_) { |
+ std::unique_ptr<ui::Event> tmp_event = ui::Event::Clone(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) |
+ 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)) { |
@@ -589,14 +576,8 @@ ui::EventRewriteStatus EventRewriter::RewriteMouseButtonEvent( |
ui::MouseEvent* rewritten_mouse_event = new ui::MouseEvent(mouse_event); |
rewritten_event->reset(rewritten_mouse_event); |
rewritten_mouse_event->set_flags(flags); |
-#if defined(USE_X11) |
- ui::UpdateX11EventForFlags(rewritten_mouse_event); |
-#endif |
if (changed_button != ui::EF_NONE) { |
rewritten_mouse_event->set_changed_button_flags(changed_button); |
-#if defined(USE_X11) |
- ui::UpdateX11EventForChangedButtonFlags(rewritten_mouse_event); |
-#endif |
} |
return status; |
} |
@@ -608,21 +589,22 @@ ui::EventRewriteStatus EventRewriter::RewriteMouseWheelEvent( |
return ui::EVENT_REWRITE_CONTINUE; |
int flags = wheel_event.flags(); |
RewriteLocatedEvent(wheel_event, &flags); |
+ std::unique_ptr<ui::Event> tmp_event = ui::Event::Clone(wheel_event); |
+ tmp_event->set_flags(flags); |
+ std::unique_ptr<ui::Event> output_event; |
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) |
+ sticky_keys_controller_->RewriteEvent(*tmp_event, &output_event); |
+ if (status == ui::EVENT_REWRITE_REWRITTEN) { |
+ flags = output_event->flags(); |
+ } else if (status == ui::EVENT_REWRITE_CONTINUE) { |
+ if (wheel_event.flags() == flags) |
+ return 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); |
-#if defined(USE_X11) |
- ui::UpdateX11EventForFlags(rewritten_wheel_event); |
-#endif |
return status; |
} |
@@ -636,28 +618,15 @@ ui::EventRewriteStatus EventRewriter::RewriteTouchEvent( |
ui::TouchEvent* rewritten_touch_event = new ui::TouchEvent(touch_event); |
rewritten_event->reset(rewritten_touch_event); |
rewritten_touch_event->set_flags(flags); |
-#if defined(USE_X11) |
- ui::UpdateX11EventForFlags(rewritten_touch_event); |
-#endif |
return ui::EVENT_REWRITE_REWRITTEN; |
} |
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 defined(USE_X11) |
- ui::UpdateX11EventForFlags(rewritten_scroll_event); |
-#endif |
- return status; |
+ if (!sticky_keys_controller_) |
+ return ui::EVENT_REWRITE_CONTINUE; |
+ return sticky_keys_controller_->RewriteEvent(scroll_event, rewritten_event); |
} |
bool EventRewriter::RewriteModifierKeys(const ui::KeyEvent& key_event, |
@@ -728,7 +697,6 @@ bool EventRewriter::RewriteModifierKeys(const ui::KeyEvent& key_event, |
if (remapped_key && remapped_key->result.key_code == ui::VKEY_CAPITAL) |
remapped_key = kModifierRemappingNeoMod3; |
break; |
-#if !defined(USE_X11) |
case ui::DomKey::ALT_GRAPH_LATCH: |
if (key_event.type() == ui::ET_KEY_PRESSED) { |
pressed_modifier_latches_ |= ui::EF_ALTGR_DOWN; |
@@ -748,7 +716,6 @@ bool EventRewriter::RewriteModifierKeys(const ui::KeyEvent& key_event, |
state->key_code = ui::VKEY_ALTGR; |
exact_event = true; |
break; |
-#endif |
default: |
break; |
} |
@@ -844,12 +811,6 @@ bool EventRewriter::RewriteModifierKeys(const ui::KeyEvent& key_event, |
if (state->key_code == ui::VKEY_CAPITAL |
// ... except on linux Chrome OS, where InputMethodChromeOS handles it. |
&& (base::SysInfo::IsRunningOnChromeOS() || ime_keyboard_for_testing_) |
-#if defined(USE_X11) |
- // ... but for X11, do nothing if the original key is ui::VKEY_CAPITAL |
- // (i.e. a Caps Lock key on an external keyboard is pressed) since X |
- // handles that itself. |
- && incoming.key_code != ui::VKEY_CAPITAL |
-#endif |
) { |
chromeos::input_method::ImeKeyboard* ime_keyboard = |
ime_keyboard_for_testing_ |