| 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
|
|
|