OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 #include "services/ui/ws/window_manager_state.h" | 5 #include "services/ui/ws/window_manager_state.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/memory/weak_ptr.h" | 10 #include "base/memory/weak_ptr.h" |
11 #include "services/service_manager/public/interfaces/connector.mojom.h" | 11 #include "services/service_manager/public/interfaces/connector.mojom.h" |
12 #include "services/ui/common/accelerator_util.h" | 12 #include "services/ui/common/accelerator_util.h" |
13 #include "services/ui/ws/accelerator.h" | 13 #include "services/ui/ws/accelerator.h" |
14 #include "services/ui/ws/cursor_location_manager.h" | 14 #include "services/ui/ws/cursor_location_manager.h" |
15 #include "services/ui/ws/display.h" | 15 #include "services/ui/ws/display.h" |
16 #include "services/ui/ws/display_manager.h" | 16 #include "services/ui/ws/display_manager.h" |
17 #include "services/ui/ws/platform_display.h" | 17 #include "services/ui/ws/platform_display.h" |
18 #include "services/ui/ws/server_window.h" | 18 #include "services/ui/ws/server_window.h" |
19 #include "services/ui/ws/user_display_manager.h" | 19 #include "services/ui/ws/user_display_manager.h" |
20 #include "services/ui/ws/user_id_tracker.h" | 20 #include "services/ui/ws/user_id_tracker.h" |
| 21 #include "services/ui/ws/window_coordinate_conversions.h" |
21 #include "services/ui/ws/window_manager_display_root.h" | 22 #include "services/ui/ws/window_manager_display_root.h" |
22 #include "services/ui/ws/window_server.h" | 23 #include "services/ui/ws/window_server.h" |
23 #include "services/ui/ws/window_tree.h" | 24 #include "services/ui/ws/window_tree.h" |
24 #include "ui/events/event.h" | 25 #include "ui/events/event.h" |
25 | 26 |
26 namespace ui { | 27 namespace ui { |
27 namespace ws { | 28 namespace ws { |
28 namespace { | 29 namespace { |
29 | 30 |
30 // Flags that matter when checking if a key event matches an accelerator. | 31 // Flags that matter when checking if a key event matches an accelerator. |
(...skipping 543 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
574 ->display_manager() | 575 ->display_manager() |
575 ->GetCursorLocationManager(user_id()) | 576 ->GetCursorLocationManager(user_id()) |
576 ->OnMouseCursorLocationChanged(point); | 577 ->OnMouseCursorLocationChanged(point); |
577 } | 578 } |
578 | 579 |
579 void WindowManagerState::DispatchInputEventToWindow(ServerWindow* target, | 580 void WindowManagerState::DispatchInputEventToWindow(ServerWindow* target, |
580 ClientSpecificId client_id, | 581 ClientSpecificId client_id, |
581 const ui::Event& event, | 582 const ui::Event& event, |
582 Accelerator* accelerator) { | 583 Accelerator* accelerator) { |
583 DCHECK(IsActive()); | 584 DCHECK(IsActive()); |
| 585 |
| 586 std::unique_ptr<ui::Event> clone = ui::Event::Clone(event); |
| 587 // Convert the root_location of this |event| to be from the coordinate system |
| 588 // of the root window of the |window_tree_| to the coordinate system of the |
| 589 // root_window of the window tree associated with this |client_id|. |
| 590 if (client_id != window_tree_->id() && event.IsLocatedEvent()) { |
| 591 WindowTree* target_tree = window_server()->GetTreeWithId(client_id); |
| 592 DCHECK_GE(window_tree_->roots().size(), 1u); |
| 593 DCHECK_GE(target_tree->roots().size(), 1u); |
| 594 const ServerWindow* wm_root = window_tree_->FindRootFor(target); |
| 595 const ServerWindow* target_root = target_tree->FindRootFor(target); |
| 596 DCHECK(wm_root); |
| 597 DCHECK(target_root); |
| 598 DCHECK(wm_root->Contains(target_root)); |
| 599 gfx::Point new_root_location = ConvertPointBetweenWindows( |
| 600 wm_root, target_root, event.AsLocatedEvent()->root_location()); |
| 601 clone->AsLocatedEvent()->set_root_location(new_root_location); |
| 602 } |
| 603 |
584 // TODO(sky): this needs to see if another wms has capture and if so forward | 604 // TODO(sky): this needs to see if another wms has capture and if so forward |
585 // to it. | 605 // to it. |
586 if (in_flight_event_details_) { | 606 if (in_flight_event_details_) { |
587 std::unique_ptr<ProcessedEventTarget> processed_event_target( | 607 std::unique_ptr<ProcessedEventTarget> processed_event_target( |
588 new ProcessedEventTarget(target, client_id, accelerator)); | 608 new ProcessedEventTarget(target, client_id, accelerator)); |
589 QueueEvent(event, std::move(processed_event_target), | 609 QueueEvent(*clone, std::move(processed_event_target), |
590 event_processing_display_id_); | 610 event_processing_display_id_); |
591 return; | 611 return; |
592 } | 612 } |
593 | 613 |
594 base::WeakPtr<Accelerator> weak_accelerator; | 614 base::WeakPtr<Accelerator> weak_accelerator; |
595 if (accelerator) | 615 if (accelerator) |
596 weak_accelerator = accelerator->GetWeakPtr(); | 616 weak_accelerator = accelerator->GetWeakPtr(); |
597 DispatchInputEventToWindowImpl(target, client_id, event, weak_accelerator); | 617 DispatchInputEventToWindowImpl(target, client_id, *clone, weak_accelerator); |
598 } | 618 } |
599 | 619 |
600 ClientSpecificId WindowManagerState::GetEventTargetClientId( | 620 ClientSpecificId WindowManagerState::GetEventTargetClientId( |
601 const ServerWindow* window, | 621 const ServerWindow* window, |
602 bool in_nonclient_area) { | 622 bool in_nonclient_area) { |
603 if (in_nonclient_area) { | 623 if (in_nonclient_area) { |
604 // Events in the non-client area always go to the window manager. | 624 // Events in the non-client area always go to the window manager. |
605 return window_tree_->id(); | 625 return window_tree_->id(); |
606 } | 626 } |
607 | 627 |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
671 window->RemoveObserver(this); | 691 window->RemoveObserver(this); |
672 orphaned_window_manager_display_roots_.erase(iter); | 692 orphaned_window_manager_display_roots_.erase(iter); |
673 return; | 693 return; |
674 } | 694 } |
675 } | 695 } |
676 NOTREACHED(); | 696 NOTREACHED(); |
677 } | 697 } |
678 | 698 |
679 } // namespace ws | 699 } // namespace ws |
680 } // namespace ui | 700 } // namespace ui |
OLD | NEW |