Chromium Code Reviews| 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 #include "components/mus/ws/window_tree_impl.h" | 5 #include "components/mus/ws/window_tree_impl.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 572 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 583 if (!host || !host->GetWindowTree() || | 583 if (!host || !host->GetWindowTree() || |
| 584 !host->GetWindowTree()->window_manager_internal_) { | 584 !host->GetWindowTree()->window_manager_internal_) { |
| 585 return false; | 585 return false; |
| 586 } | 586 } |
| 587 | 587 |
| 588 // Requests coming from the WM should not be routed through the WM again. | 588 // Requests coming from the WM should not be routed through the WM again. |
| 589 const bool is_wm = host->GetWindowTree() == this; | 589 const bool is_wm = host->GetWindowTree() == this; |
| 590 return is_wm ? false : true; | 590 return is_wm ? false : true; |
| 591 } | 591 } |
| 592 | 592 |
| 593 void WindowTreeImpl::ProcessLostCapture(const ServerWindow* old_capture_window, | |
| 594 bool originated_change) { | |
| 595 if ((originated_change && | |
| 596 connection_manager_->current_operation_type() == | |
| 597 OperationType::RELEASE_CAPTURE) || | |
| 598 !IsWindowKnown(old_capture_window)) { | |
| 599 return; | |
| 600 } | |
| 601 client()->OnLostCapture(WindowIdToTransportId(old_capture_window->id())); | |
| 602 } | |
| 603 | |
| 593 ClientWindowId WindowTreeImpl::ClientWindowIdForWindow( | 604 ClientWindowId WindowTreeImpl::ClientWindowIdForWindow( |
| 594 const ServerWindow* window) const { | 605 const ServerWindow* window) const { |
| 595 auto iter = window_id_to_client_id_map_.find(window->id()); | 606 auto iter = window_id_to_client_id_map_.find(window->id()); |
| 596 DCHECK(iter != window_id_to_client_id_map_.end()); | 607 DCHECK(iter != window_id_to_client_id_map_.end()); |
| 597 return iter->second; | 608 return iter->second; |
| 598 } | 609 } |
| 599 | 610 |
| 600 bool WindowTreeImpl::IsValidIdForNewWindow(const ClientWindowId& id) const { | 611 bool WindowTreeImpl::IsValidIdForNewWindow(const ClientWindowId& id) const { |
| 601 if (is_embed_root_ && WindowIdFromTransportId(id.id).connection_id != id_) { | 612 if (is_embed_root_ && WindowIdFromTransportId(id.id).connection_id != id_) { |
| 602 // Embed roots see windows created from other connections. If they don't | 613 // Embed roots see windows created from other connections. If they don't |
| (...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 971 } | 982 } |
| 972 | 983 |
| 973 void WindowTreeImpl::GetWindowTree( | 984 void WindowTreeImpl::GetWindowTree( |
| 974 Id window_id, | 985 Id window_id, |
| 975 const Callback<void(Array<mojom::WindowDataPtr>)>& callback) { | 986 const Callback<void(Array<mojom::WindowDataPtr>)>& callback) { |
| 976 std::vector<const ServerWindow*> windows( | 987 std::vector<const ServerWindow*> windows( |
| 977 GetWindowTree(ClientWindowId(window_id))); | 988 GetWindowTree(ClientWindowId(window_id))); |
| 978 callback.Run(WindowsToWindowDatas(windows)); | 989 callback.Run(WindowsToWindowDatas(windows)); |
| 979 } | 990 } |
| 980 | 991 |
| 992 void WindowTreeImpl::SetCapture(uint32_t change_id, Id window_id) { | |
| 993 ServerWindow* window = GetWindow(WindowIdFromTransportId(window_id)); | |
|
sky
2016/01/29 20:47:00
Sorry, I've changed things around. You want:
wind
jonross
2016/02/01 18:52:22
Done.
| |
| 994 WindowTreeHostImpl* host = GetHost(window); | |
| 995 ServerWindow* current_capture_window = | |
| 996 host ? host->GetCaptureWindow() : nullptr; | |
| 997 bool success = window && access_policy_->CanSetCapture(window) && host && | |
| 998 (!current_capture_window || | |
| 999 access_policy_->CanSetCapture(current_capture_window)) && | |
|
sky
2016/01/29 20:47:00
Can the condition in () ever hit? Why do we need i
jonross
2016/02/01 18:52:22
Yes this can be hit.
When a window tree has been
| |
| 1000 event_ack_id_; | |
| 1001 if (success) { | |
| 1002 Operation op(this, connection_manager_, OperationType::SET_CAPTURE); | |
| 1003 host->SetCapture(window, !HasRoot(window)); | |
| 1004 } | |
| 1005 client_->OnChangeCompleted(change_id, success); | |
| 1006 } | |
| 1007 | |
| 1008 void WindowTreeImpl::ReleaseCapture(uint32_t change_id, Id window_id) { | |
| 1009 ServerWindow* window = GetWindow(WindowIdFromTransportId(window_id)); | |
|
sky
2016/01/29 20:47:00
Same comment about ids.
jonross
2016/02/01 18:52:22
Done.
| |
| 1010 WindowTreeHostImpl* host = GetHost(window); | |
| 1011 ServerWindow* capture_window = host ? host->GetCaptureWindow() : nullptr; | |
| 1012 bool success = window && host && | |
| 1013 access_policy_->CanSetCapture(capture_window) && | |
| 1014 window == capture_window; | |
| 1015 if (success) { | |
| 1016 Operation op(this, connection_manager_, OperationType::RELEASE_CAPTURE); | |
| 1017 host->SetCapture(nullptr, false); | |
| 1018 } | |
| 1019 client_->OnChangeCompleted(change_id, success); | |
| 1020 } | |
| 1021 | |
| 981 void WindowTreeImpl::SetWindowBounds(uint32_t change_id, | 1022 void WindowTreeImpl::SetWindowBounds(uint32_t change_id, |
| 982 Id window_id, | 1023 Id window_id, |
| 983 mojo::RectPtr bounds) { | 1024 mojo::RectPtr bounds) { |
| 984 ServerWindow* window = GetWindowByClientId(ClientWindowId(window_id)); | 1025 ServerWindow* window = GetWindowByClientId(ClientWindowId(window_id)); |
| 985 if (window && ShouldRouteToWindowManager(window)) { | 1026 if (window && ShouldRouteToWindowManager(window)) { |
| 986 const uint32_t wm_change_id = | 1027 const uint32_t wm_change_id = |
| 987 connection_manager_->GenerateWindowManagerChangeId(this, change_id); | 1028 connection_manager_->GenerateWindowManagerChangeId(this, change_id); |
| 988 // |window_id| may be a client id, use the id from the window to ensure | 1029 // |window_id| may be a client id, use the id from the window to ensure |
| 989 // the windowmanager doesn't get an id it doesn't know about. | 1030 // the windowmanager doesn't get an id it doesn't know about. |
| 990 WindowTreeImpl* wm_window_tree = GetHost(window)->GetWindowTree(); | 1031 WindowTreeImpl* wm_window_tree = GetHost(window)->GetWindowTree(); |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1077 host->SetImeVisibility(window, visible); | 1118 host->SetImeVisibility(window, visible); |
| 1078 } | 1119 } |
| 1079 } | 1120 } |
| 1080 | 1121 |
| 1081 void WindowTreeImpl::OnWindowInputEventAck(uint32_t event_id) { | 1122 void WindowTreeImpl::OnWindowInputEventAck(uint32_t event_id) { |
| 1082 if (event_ack_id_ == 0 || event_id != event_ack_id_) { | 1123 if (event_ack_id_ == 0 || event_id != event_ack_id_) { |
| 1083 // TODO(sad): Something bad happened. Kill the client? | 1124 // TODO(sad): Something bad happened. Kill the client? |
| 1084 NOTIMPLEMENTED() << "Wrong event acked."; | 1125 NOTIMPLEMENTED() << "Wrong event acked."; |
| 1085 } | 1126 } |
| 1086 event_ack_id_ = 0; | 1127 event_ack_id_ = 0; |
| 1087 | |
| 1088 WindowTreeHostImpl* event_source_host = event_source_host_; | 1128 WindowTreeHostImpl* event_source_host = event_source_host_; |
| 1089 event_source_host_ = nullptr; | 1129 event_source_host_ = nullptr; |
| 1090 if (event_source_host) | 1130 if (event_source_host) |
| 1091 event_source_host->OnEventAck(this); | 1131 event_source_host->OnEventAck(this); |
| 1092 | 1132 |
| 1093 if (!event_queue_.empty()) { | 1133 if (!event_queue_.empty()) { |
| 1094 DCHECK(!event_ack_id_); | 1134 DCHECK(!event_ack_id_); |
| 1095 ServerWindow* target = nullptr; | 1135 ServerWindow* target = nullptr; |
| 1096 mojom::EventPtr event; | 1136 mojom::EventPtr event; |
| 1097 do { | 1137 do { |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1249 | 1289 |
| 1250 for (const auto* root : roots_) { | 1290 for (const auto* root : roots_) { |
| 1251 if (root->Contains(window)) | 1291 if (root->Contains(window)) |
| 1252 return true; | 1292 return true; |
| 1253 } | 1293 } |
| 1254 return false; | 1294 return false; |
| 1255 } | 1295 } |
| 1256 | 1296 |
| 1257 } // namespace ws | 1297 } // namespace ws |
| 1258 } // namespace mus | 1298 } // namespace mus |
| OLD | NEW |