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

Side by Side Diff: components/mus/ws/window_tree_impl.cc

Issue 1677513002: mus Window Server: implement event capture (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 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 unified diff | Download patch
OLDNEW
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 589 matching lines...) Expand 10 before | Expand all | Expand 10 after
600 if (!host || !host->GetWindowTree() || 600 if (!host || !host->GetWindowTree() ||
601 !host->GetWindowTree()->window_manager_internal_) { 601 !host->GetWindowTree()->window_manager_internal_) {
602 return false; 602 return false;
603 } 603 }
604 604
605 // Requests coming from the WM should not be routed through the WM again. 605 // Requests coming from the WM should not be routed through the WM again.
606 const bool is_wm = host->GetWindowTree() == this; 606 const bool is_wm = host->GetWindowTree() == this;
607 return is_wm ? false : true; 607 return is_wm ? false : true;
608 } 608 }
609 609
610 void WindowTreeImpl::ProcessLostCapture(const ServerWindow* old_capture_window,
611 bool originated_change) {
612 if ((originated_change &&
613 connection_manager_->current_operation_type() ==
614 OperationType::RELEASE_CAPTURE) ||
615 !IsWindowKnown(old_capture_window)) {
616 return;
617 }
618 client()->OnLostCapture(WindowIdToTransportId(old_capture_window->id()));
619 }
620
610 ClientWindowId WindowTreeImpl::ClientWindowIdForWindow( 621 ClientWindowId WindowTreeImpl::ClientWindowIdForWindow(
611 const ServerWindow* window) const { 622 const ServerWindow* window) const {
612 auto iter = window_id_to_client_id_map_.find(window->id()); 623 auto iter = window_id_to_client_id_map_.find(window->id());
613 DCHECK(iter != window_id_to_client_id_map_.end()); 624 DCHECK(iter != window_id_to_client_id_map_.end());
614 return iter->second; 625 return iter->second;
615 } 626 }
616 627
617 bool WindowTreeImpl::IsValidIdForNewWindow(const ClientWindowId& id) const { 628 bool WindowTreeImpl::IsValidIdForNewWindow(const ClientWindowId& id) const {
618 if (is_embed_root_ && WindowIdFromTransportId(id.id).connection_id != id_) { 629 if (is_embed_root_ && WindowIdFromTransportId(id.id).connection_id != id_) {
619 // Embed roots see windows created from other connections. If they don't 630 // Embed roots see windows created from other connections. If they don't
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after
988 } 999 }
989 1000
990 void WindowTreeImpl::GetWindowTree( 1001 void WindowTreeImpl::GetWindowTree(
991 Id window_id, 1002 Id window_id,
992 const Callback<void(Array<mojom::WindowDataPtr>)>& callback) { 1003 const Callback<void(Array<mojom::WindowDataPtr>)>& callback) {
993 std::vector<const ServerWindow*> windows( 1004 std::vector<const ServerWindow*> windows(
994 GetWindowTree(ClientWindowId(window_id))); 1005 GetWindowTree(ClientWindowId(window_id)));
995 callback.Run(WindowsToWindowDatas(windows)); 1006 callback.Run(WindowsToWindowDatas(windows));
996 } 1007 }
997 1008
1009 void WindowTreeImpl::SetCapture(uint32_t change_id, Id window_id) {
1010 ServerWindow* window = GetWindowByClientId(ClientWindowId(window_id));
1011 WindowTreeHostImpl* host = GetHost(window);
1012 ServerWindow* current_capture_window =
1013 host ? host->GetCaptureWindow() : nullptr;
1014 bool success = window && access_policy_->CanSetCapture(window) && host &&
1015 (!current_capture_window ||
1016 access_policy_->CanSetCapture(current_capture_window)) &&
1017 event_ack_id_;
1018 if (success) {
1019 Operation op(this, connection_manager_, OperationType::SET_CAPTURE);
1020 host->SetCapture(window, !HasRoot(window));
1021 }
1022 client_->OnChangeCompleted(change_id, success);
1023 }
1024
1025 void WindowTreeImpl::ReleaseCapture(uint32_t change_id, Id window_id) {
1026 ServerWindow* window = GetWindowByClientId(ClientWindowId(window_id));
1027 WindowTreeHostImpl* host = GetHost(window);
1028 ServerWindow* current_capture_window =
1029 host ? host->GetCaptureWindow() : nullptr;
1030 bool success = window && host &&
1031 (!current_capture_window ||
1032 access_policy_->CanSetCapture(current_capture_window)) &&
1033 window == current_capture_window;
1034 if (success) {
1035 Operation op(this, connection_manager_, OperationType::RELEASE_CAPTURE);
1036 host->SetCapture(nullptr, false);
1037 }
1038 client_->OnChangeCompleted(change_id, success);
1039 }
1040
998 void WindowTreeImpl::SetWindowBounds(uint32_t change_id, 1041 void WindowTreeImpl::SetWindowBounds(uint32_t change_id,
999 Id window_id, 1042 Id window_id,
1000 mojo::RectPtr bounds) { 1043 mojo::RectPtr bounds) {
1001 ServerWindow* window = GetWindowByClientId(ClientWindowId(window_id)); 1044 ServerWindow* window = GetWindowByClientId(ClientWindowId(window_id));
1002 if (window && ShouldRouteToWindowManager(window)) { 1045 if (window && ShouldRouteToWindowManager(window)) {
1003 const uint32_t wm_change_id = 1046 const uint32_t wm_change_id =
1004 connection_manager_->GenerateWindowManagerChangeId(this, change_id); 1047 connection_manager_->GenerateWindowManagerChangeId(this, change_id);
1005 // |window_id| may be a client id, use the id from the window to ensure 1048 // |window_id| may be a client id, use the id from the window to ensure
1006 // the windowmanager doesn't get an id it doesn't know about. 1049 // the windowmanager doesn't get an id it doesn't know about.
1007 WindowTreeImpl* wm_window_tree = GetHost(window)->GetWindowTree(); 1050 WindowTreeImpl* wm_window_tree = GetHost(window)->GetWindowTree();
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after
1322 1365
1323 for (const auto* root : roots_) { 1366 for (const auto* root : roots_) {
1324 if (root->Contains(window)) 1367 if (root->Contains(window))
1325 return true; 1368 return true;
1326 } 1369 }
1327 return false; 1370 return false;
1328 } 1371 }
1329 1372
1330 } // namespace ws 1373 } // namespace ws
1331 } // namespace mus 1374 } // namespace mus
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698