OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #import <Cocoa/Cocoa.h> | 5 #import <Cocoa/Cocoa.h> |
6 #include <stddef.h> | 6 #include <stddef.h> |
7 | 7 |
8 #import "base/mac/scoped_nsobject.h" | 8 #import "base/mac/scoped_nsobject.h" |
9 #import "base/mac/scoped_objc_class_swizzler.h" | 9 #import "base/mac/scoped_objc_class_swizzler.h" |
10 #include "base/macros.h" | 10 #include "base/macros.h" |
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
368 return nullptr; | 368 return nullptr; |
369 } | 369 } |
370 | 370 |
371 void EventGeneratorDelegateMac::OnMouseEvent(ui::MouseEvent* event) { | 371 void EventGeneratorDelegateMac::OnMouseEvent(ui::MouseEvent* event) { |
372 NSEvent* ns_event = | 372 NSEvent* ns_event = |
373 event->type() == ui::ET_MOUSEWHEEL | 373 event->type() == ui::ET_MOUSEWHEEL |
374 ? CreateMouseWheelEventInWindow(window_, event) | 374 ? CreateMouseWheelEventInWindow(window_, event) |
375 : CreateMouseEventInWindow(window_, event->type(), event->location(), | 375 : CreateMouseEventInWindow(window_, event->type(), event->location(), |
376 event->changed_button_flags()); | 376 event->changed_button_flags()); |
377 | 377 |
378 if (owner_->targeting_application()) | 378 using Target = ui::test::EventGenerator::Target; |
379 [NSApp sendEvent:ns_event]; | 379 switch (owner_->target()) { |
380 else | 380 case Target::APPLICATION: |
381 EmulateSendEvent(window_, ns_event); | 381 [NSApp sendEvent:ns_event]; |
| 382 break; |
| 383 case Target::WINDOW: |
| 384 [window_ sendEvent:ns_event]; |
| 385 break; |
| 386 case Target::WIDGET: |
| 387 EmulateSendEvent(window_, ns_event); |
| 388 break; |
| 389 } |
382 } | 390 } |
383 | 391 |
384 void EventGeneratorDelegateMac::OnKeyEvent(ui::KeyEvent* event) { | 392 void EventGeneratorDelegateMac::OnKeyEvent(ui::KeyEvent* event) { |
385 NSUInteger modifiers = EventFlagsToModifiers(event->flags()); | 393 NSUInteger modifiers = EventFlagsToModifiers(event->flags()); |
386 NSEvent* ns_event = cocoa_test_event_utils::SynthesizeKeyEvent( | 394 NSEvent* ns_event = cocoa_test_event_utils::SynthesizeKeyEvent( |
387 window_, event->type() == ui::ET_KEY_PRESSED, event->key_code(), | 395 window_, event->type() == ui::ET_KEY_PRESSED, event->key_code(), |
388 modifiers, event->is_char() ? event->GetDomKey() : ui::DomKey::NONE); | 396 modifiers, event->is_char() ? event->GetDomKey() : ui::DomKey::NONE); |
389 if (owner_->targeting_application()) { | 397 |
390 [NSApp sendEvent:ns_event]; | 398 using Target = ui::test::EventGenerator::Target; |
391 return; | 399 switch (owner_->target()) { |
| 400 case Target::APPLICATION: |
| 401 [NSApp sendEvent:ns_event]; |
| 402 break; |
| 403 case Target::WINDOW: |
| 404 [window_ sendEvent:ns_event]; |
| 405 break; |
| 406 case Target::WIDGET: |
| 407 if ([fake_menu_ performKeyEquivalent:ns_event]) |
| 408 return; |
| 409 |
| 410 EmulateSendEvent(window_, ns_event); |
| 411 break; |
392 } | 412 } |
393 | |
394 if ([fake_menu_ performKeyEquivalent:ns_event]) | |
395 return; | |
396 | |
397 EmulateSendEvent(window_, ns_event); | |
398 } | 413 } |
399 | 414 |
400 void EventGeneratorDelegateMac::OnTouchEvent(ui::TouchEvent* event) { | 415 void EventGeneratorDelegateMac::OnTouchEvent(ui::TouchEvent* event) { |
401 NOTREACHED() << "Touchscreen events not supported on Chrome Mac."; | 416 NOTREACHED() << "Touchscreen events not supported on Chrome Mac."; |
402 } | 417 } |
403 | 418 |
404 void EventGeneratorDelegateMac::OnScrollEvent(ui::ScrollEvent* event) { | 419 void EventGeneratorDelegateMac::OnScrollEvent(ui::ScrollEvent* event) { |
405 // Ignore FLING_CANCEL. Cocoa provides a continuous stream of events during a | 420 // Ignore FLING_CANCEL. Cocoa provides a continuous stream of events during a |
406 // fling. For now, this method simulates a momentum stream using a single | 421 // fling. For now, this method simulates a momentum stream using a single |
407 // update with a momentum phase (plus begin/end phase events), triggered when | 422 // update with a momentum phase (plus begin/end phase events), triggered when |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
594 - (NSEvent*)currentEvent { | 609 - (NSEvent*)currentEvent { |
595 if (g_current_event) | 610 if (g_current_event) |
596 return g_current_event; | 611 return g_current_event; |
597 | 612 |
598 // Find the original implementation and invoke it. | 613 // Find the original implementation and invoke it. |
599 IMP original = EventGeneratorDelegateMac::GetInstance()->CurrentEventMethod(); | 614 IMP original = EventGeneratorDelegateMac::GetInstance()->CurrentEventMethod(); |
600 return original(self, _cmd); | 615 return original(self, _cmd); |
601 } | 616 } |
602 | 617 |
603 @end | 618 @end |
OLD | NEW |