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

Unified Diff: ash/sticky_keys/sticky_keys_controller.cc

Issue 227113009: Fix sticky keys crash when handling synthetic events without a native event. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: mouse wheel Created 6 years, 8 months 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 | « ash/sticky_keys/sticky_keys_controller.h ('k') | ash/sticky_keys/sticky_keys_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 e5bb0afe2483c32c1dbd4a20dfff9f6583cf4c8b..f313e7303656f5e5cb5151515ca31e464ba32a76 100644
--- a/ash/sticky_keys/sticky_keys_controller.cc
+++ b/ash/sticky_keys/sticky_keys_controller.cc
@@ -69,11 +69,31 @@ void StickyKeysHandlerDelegateImpl::DispatchMouseEvent(ui::MouseEvent* event,
DCHECK(target);
// We need to send a new, untransformed mouse event to the host.
if (event->IsMouseWheelEvent()) {
- ui::MouseWheelEvent new_event(event->native_event());
- DispatchEvent(&new_event, target);
+ if (event->HasNativeEvent()) {
+ ui::MouseWheelEvent new_event(event->native_event());
+ DispatchEvent(&new_event, target);
+ } else {
+ aura::Window* source = static_cast<aura::Window*>(event->target());
+ ui::MouseWheelEvent new_event(*static_cast<ui::MouseWheelEvent*>(event),
+ source,
+ source->GetRootWindow(),
+ event->type(),
+ event->flags());
sadrul 2014/04/07 21:57:33 It looks like this ctor for MouseWheelEvent is not
Tim Song 2014/04/07 22:23:27 Done.
+ // Transform the location back to host coordinates before dispatching.
+ new_event.UpdateForRootTransform(source->GetHost()->GetRootTransform());
+ DispatchEvent(&new_event, target);
+ }
} else {
- ui::MouseEvent new_event(event->native_event());
- DispatchEvent(&new_event, target);
+ if (event->HasNativeEvent()) {
+ ui::MouseEvent new_event(event->native_event());
+ DispatchEvent(&new_event, target);
+ } else {
+ aura::Window* source = static_cast<aura::Window*>(event->target());
+ ui::MouseEvent new_event(*event, source, source->GetRootWindow());
+ // Transform the location back to host coordinates before dispatching.
+ new_event.UpdateForRootTransform(source->GetHost()->GetRootTransform());
+ DispatchEvent(&new_event, target);
+ }
sadrul 2014/04/07 21:57:33 You can always just create the new event out of th
Tim Song 2014/04/07 22:23:27 Done. You're right, it should be equivalent in thi
}
}
« no previous file with comments | « ash/sticky_keys/sticky_keys_controller.h ('k') | ash/sticky_keys/sticky_keys_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698