| Index: components/mus/ws/window_tree.cc
|
| diff --git a/components/mus/ws/window_tree.cc b/components/mus/ws/window_tree.cc
|
| index 90e5c5753798c5af19f6894d208764efa59a28cb..824cb0fea31601e15e4f36a2245f57d7f7210c3f 100644
|
| --- a/components/mus/ws/window_tree.cc
|
| +++ b/components/mus/ws/window_tree.cc
|
| @@ -196,8 +196,7 @@ bool WindowTree::SetCapture(const ClientWindowId& client_window_id) {
|
| (!current_capture_window ||
|
| access_policy_->CanSetCapture(current_capture_window)) &&
|
| event_ack_id_) {
|
| - wms->SetCapture(window, !HasRoot(window));
|
| - return true;
|
| + return wms->SetCapture(window, !HasRoot(window));
|
| }
|
| return false;
|
| }
|
| @@ -244,6 +243,18 @@ bool WindowTree::AddTransientWindow(const ClientWindowId& window_id,
|
| return false;
|
| }
|
|
|
| +bool WindowTree::SetModal(const ClientWindowId& window_id) {
|
| + ServerWindow* window = GetWindowByClientId(window_id);
|
| + if (window && access_policy_->CanSetModal(window)) {
|
| + window->SetModal();
|
| + WindowManagerState* wms = GetWindowManagerState(window);
|
| + if (wms)
|
| + wms->ReleaseCaptureBlockedByModalWindow(window);
|
| + return true;
|
| + }
|
| + return false;
|
| +}
|
| +
|
| std::vector<const ServerWindow*> WindowTree::GetWindowTree(
|
| const ClientWindowId& window_id) const {
|
| const ServerWindow* window = GetWindowByClientId(window_id);
|
| @@ -1008,6 +1019,10 @@ void WindowTree::RemoveTransientWindowFromParent(uint32_t change_id,
|
| client()->OnChangeCompleted(change_id, success);
|
| }
|
|
|
| +void WindowTree::SetModal(uint32_t change_id, Id window_id) {
|
| + client()->OnChangeCompleted(change_id, SetModal(ClientWindowId(window_id)));
|
| +}
|
| +
|
| void WindowTree::ReorderWindow(uint32_t change_id,
|
| Id window_id,
|
| Id relative_window_id,
|
| @@ -1048,7 +1063,7 @@ void WindowTree::ReleaseCapture(uint32_t change_id, Id window_id) {
|
| window == current_capture_window;
|
| if (success) {
|
| Operation op(this, connection_manager_, OperationType::RELEASE_CAPTURE);
|
| - wms->SetCapture(nullptr, false);
|
| + success = wms->SetCapture(nullptr, false);
|
| }
|
| client()->OnChangeCompleted(change_id, success);
|
| }
|
|
|