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

Unified Diff: ui/views/test/event_generator_delegate_mac.mm

Issue 2448173002: Fix processing of mouse events on MacViews.
Patch Set: Fix review issues. Created 4 years, 2 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 | « ui/views/cocoa/bridged_native_widget.mm ('k') | ui/views/widget/native_widget_mac_unittest.mm » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/test/event_generator_delegate_mac.mm
diff --git a/ui/views/test/event_generator_delegate_mac.mm b/ui/views/test/event_generator_delegate_mac.mm
index 55005ea2c4647103ab53c465a2105e3f0cd20934..d96246a90e1ce9c7b82678ed5856ea75520c2f64 100644
--- a/ui/views/test/event_generator_delegate_mac.mm
+++ b/ui/views/test/event_generator_delegate_mac.mm
@@ -172,12 +172,10 @@ void EmulateSendEvent(NSWindow* window, NSEvent* event) {
[responder scrollWheel:event];
break;
case NSMouseEntered:
+ [responder mouseEntered:event];
+ break;
case NSMouseExited:
- // With the assumptions in NSMouseMoved, it doesn't make sense for the
- // generator to handle entered/exited separately. It's the responsibility
- // of views::internal::RootView to convert the moved events into entered
- // and exited events for the individual views.
- NOTREACHED();
+ [responder mouseExited:event];
break;
case NSEventTypeSwipe:
// NSEventTypeSwipe events can't be generated using public interfaces on
@@ -206,15 +204,38 @@ void EmulateSendEvent(NSWindow* window, NSEvent* event) {
NSPoint point = ConvertRootPointToTarget(window, point_in_root);
NSUInteger modifiers = 0;
NSEventType type = EventTypeToNative(event_type, flags, &modifiers);
- return [NSEvent mouseEventWithType:type
- location:point
- modifierFlags:modifiers
- timestamp:0
- windowNumber:[window windowNumber]
- context:nil
- eventNumber:0
- clickCount:click_count
- pressure:1.0];
+ if (type == NSMouseEntered || type == NSMouseExited) {
+ return [NSEvent enterExitEventWithType:type
+ location:point
+ modifierFlags:modifiers
+ timestamp:0
+ windowNumber:[window windowNumber]
+ context:nil
+ eventNumber:0
+ trackingNumber:0
+ userData:nil];
+ } else {
+ return [NSEvent mouseEventWithType:type
+ location:point
+ modifierFlags:modifiers
+ timestamp:0
+ windowNumber:[window windowNumber]
+ context:nil
+ eventNumber:0
+ clickCount:click_count
+ pressure:1.0];
+ }
+}
+
+NSEvent* CreateMouseWheelEventInWindow(NSWindow* window,
+ ui::MouseEvent* mouse_event) {
+ DCHECK(mouse_event->type() == ui::ET_MOUSEWHEEL);
+ ui::MouseWheelEvent* mouse_wheel_event =
+ static_cast<ui::MouseWheelEvent*>(mouse_event);
+ return cocoa_test_event_utils::TestScrollEvent(
+ ConvertRootPointToTarget(window, mouse_wheel_event->location()), window,
+ mouse_wheel_event->x_offset(), mouse_wheel_event->y_offset(), false,
+ NSEventPhaseNone, NSEventPhaseNone);
}
// Implementation of ui::test::EventGeneratorDelegate for Mac. Everything
@@ -349,10 +370,12 @@ void DispatchKeyEventToIME(EventTarget* target,
}
void EventGeneratorDelegateMac::OnMouseEvent(ui::MouseEvent* event) {
- NSEvent* ns_event = CreateMouseEventInWindow(window_,
- event->type(),
- event->location(),
- event->changed_button_flags());
+ NSEvent* ns_event =
+ event->type() == ui::ET_MOUSEWHEEL
+ ? CreateMouseWheelEventInWindow(window_, event)
+ : CreateMouseEventInWindow(window_, event->type(), event->location(),
+ event->changed_button_flags());
+
if (owner_->targeting_application())
[NSApp sendEvent:ns_event];
else
« no previous file with comments | « ui/views/cocoa/bridged_native_widget.mm ('k') | ui/views/widget/native_widget_mac_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698