Index: ash/sticky_keys/sticky_keys_controller.cc |
diff --git a/ash/sticky_keys/sticky_keys_controller.cc b/ash/sticky_keys/sticky_keys_controller.cc |
index abb79067c4627ce61ca19a837c42806817bfa6e8..b65521284f0972de952c619214a8c4cb9612642c 100644 |
--- a/ash/sticky_keys/sticky_keys_controller.cc |
+++ b/ash/sticky_keys/sticky_keys_controller.cc |
@@ -47,6 +47,8 @@ class StickyKeysHandlerDelegateImpl : |
virtual void DispatchScrollEvent(ui::ScrollEvent* event, |
aura::Window* target) OVERRIDE; |
private: |
+ void DispatchEvent(ui::Event* event, aura::Window* target); |
+ |
DISALLOW_COPY_AND_ASSIGN(StickyKeysHandlerDelegateImpl); |
}; |
@@ -58,8 +60,7 @@ StickyKeysHandlerDelegateImpl::~StickyKeysHandlerDelegateImpl() { |
void StickyKeysHandlerDelegateImpl::DispatchKeyEvent(ui::KeyEvent* event, |
aura::Window* target) { |
- DCHECK(target); |
- target->GetDispatcher()->AsWindowTreeHostDelegate()->OnHostKeyEvent(event); |
+ DispatchEvent(event, target); |
} |
void StickyKeysHandlerDelegateImpl::DispatchMouseEvent(ui::MouseEvent* event, |
@@ -68,21 +69,26 @@ void StickyKeysHandlerDelegateImpl::DispatchMouseEvent(ui::MouseEvent* event, |
// We need to send a new, untransformed mouse event to the host. |
if (event->IsMouseWheelEvent()) { |
ui::MouseWheelEvent new_event(*static_cast<ui::MouseWheelEvent*>(event)); |
- target->GetDispatcher()->AsWindowTreeHostDelegate() |
- ->OnHostMouseEvent(&new_event); |
+ DispatchEvent(&new_event, target); |
} else { |
ui::MouseEvent new_event(*event, target, target->GetRootWindow()); |
- target->GetDispatcher()->AsWindowTreeHostDelegate() |
- ->OnHostMouseEvent(&new_event); |
+ DispatchEvent(&new_event, target); |
} |
} |
void StickyKeysHandlerDelegateImpl::DispatchScrollEvent( |
ui::ScrollEvent* event, |
aura::Window* target) { |
+ DispatchEvent(event, target); |
+} |
+ |
+void StickyKeysHandlerDelegateImpl::DispatchEvent(ui::Event* event, |
+ aura::Window* target) { |
DCHECK(target); |
- target->GetDispatcher()->AsWindowTreeHostDelegate() |
- ->OnHostScrollEvent(event); |
+ ui::EventDispatchDetails details = |
+ target->GetDispatcher()->OnEventFromSource(event); |
+ if (details.dispatcher_destroyed) |
+ return; |
} |
} // namespace |