| Index: components/mus/ws/window_tree.cc
|
| diff --git a/components/mus/ws/window_tree.cc b/components/mus/ws/window_tree.cc
|
| index 7782e8b30fecbc69df847ec8797d0ca23621d9b2..fe82ecc8d3f91b9981a3789ca8877e8b2de395d5 100644
|
| --- a/components/mus/ws/window_tree.cc
|
| +++ b/components/mus/ws/window_tree.cc
|
| @@ -223,6 +223,18 @@ bool WindowTree::AddTransientWindow(const ClientWindowId& window_id,
|
| return false;
|
| }
|
|
|
| +bool WindowTree::SetAsModal(const ClientWindowId& window_id) {
|
| + ServerWindow* window = GetWindowByClientId(window_id);
|
| + if (window && access_policy_->CanSetAsModal(window)) {
|
| + window->SetAsModal();
|
| + Display* display = GetDisplay(window);
|
| + if (display)
|
| + display->ReleaseCaptureForModalWindow(window);
|
| + return true;
|
| + }
|
| + return false;
|
| +}
|
| +
|
| std::vector<const ServerWindow*> WindowTree::GetWindowTree(
|
| const ClientWindowId& window_id) const {
|
| const ServerWindow* window = GetWindowByClientId(window_id);
|
| @@ -984,6 +996,10 @@ void WindowTree::RemoveTransientWindowFromParent(uint32_t change_id,
|
| client()->OnChangeCompleted(change_id, success);
|
| }
|
|
|
| +void WindowTree::SetAsModal(uint32_t change_id, Id window_id) {
|
| + client()->OnChangeCompleted(change_id, SetAsModal(ClientWindowId(window_id)));
|
| +}
|
| +
|
| void WindowTree::ReorderWindow(uint32_t change_id,
|
| Id window_id,
|
| Id relative_window_id,
|
| @@ -1021,7 +1037,7 @@ void WindowTree::SetCapture(uint32_t change_id, Id window_id) {
|
| event_ack_id_;
|
| if (success) {
|
| Operation op(this, connection_manager_, OperationType::SET_CAPTURE);
|
| - display->SetCapture(window, !HasRoot(window));
|
| + success = display->SetCapture(window, !HasRoot(window));
|
| }
|
| client()->OnChangeCompleted(change_id, success);
|
| }
|
| @@ -1037,7 +1053,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);
|
| - display->SetCapture(nullptr, false);
|
| + success = display->SetCapture(nullptr, false);
|
| }
|
| client()->OnChangeCompleted(change_id, success);
|
| }
|
|
|