| 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 "services/ui/ws/window_tree.h" | 5 #include "services/ui/ws/window_tree.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 567 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 578 | 578 |
| 579 client()->OnWindowSharedPropertyChanged(client_window_id.id, String(name), | 579 client()->OnWindowSharedPropertyChanged(client_window_id.id, String(name), |
| 580 std::move(data)); | 580 std::move(data)); |
| 581 } | 581 } |
| 582 | 582 |
| 583 void WindowTree::ProcessWindowHierarchyChanged(const ServerWindow* window, | 583 void WindowTree::ProcessWindowHierarchyChanged(const ServerWindow* window, |
| 584 const ServerWindow* new_parent, | 584 const ServerWindow* new_parent, |
| 585 const ServerWindow* old_parent, | 585 const ServerWindow* old_parent, |
| 586 bool originated_change) { | 586 bool originated_change) { |
| 587 const bool knows_new = new_parent && IsWindowKnown(new_parent); | 587 const bool knows_new = new_parent && IsWindowKnown(new_parent); |
| 588 if (originated_change && !IsWindowKnown(window) && knows_new) { | |
| 589 std::vector<const ServerWindow*> unused; | |
| 590 GetUnknownWindowsFrom(window, &unused); | |
| 591 } | |
| 592 if (originated_change || (window_server_->current_operation_type() == | 588 if (originated_change || (window_server_->current_operation_type() == |
| 593 OperationType::DELETE_WINDOW) || | 589 OperationType::DELETE_WINDOW) || |
| 594 (window_server_->current_operation_type() == OperationType::EMBED) || | 590 (window_server_->current_operation_type() == OperationType::EMBED) || |
| 595 window_server_->DidTreeMessageClient(id_)) { | 591 window_server_->DidTreeMessageClient(id_)) { |
| 596 return; | 592 return; |
| 597 } | 593 } |
| 598 | 594 |
| 599 if (!access_policy_->ShouldNotifyOnHierarchyChange(window, &new_parent, | 595 if (!access_policy_->ShouldNotifyOnHierarchyChange(window, &new_parent, |
| 600 &old_parent)) { | 596 &old_parent)) { |
| 601 return; | 597 return; |
| (...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 892 DCHECK(window); | 888 DCHECK(window); |
| 893 DCHECK_EQ(window->id().client_id, id_); | 889 DCHECK_EQ(window->id().client_id, id_); |
| 894 Operation op(source, window_server_, OperationType::DELETE_WINDOW); | 890 Operation op(source, window_server_, OperationType::DELETE_WINDOW); |
| 895 delete window; | 891 delete window; |
| 896 return true; | 892 return true; |
| 897 } | 893 } |
| 898 | 894 |
| 899 void WindowTree::GetUnknownWindowsFrom( | 895 void WindowTree::GetUnknownWindowsFrom( |
| 900 const ServerWindow* window, | 896 const ServerWindow* window, |
| 901 std::vector<const ServerWindow*>* windows) { | 897 std::vector<const ServerWindow*>* windows) { |
| 902 if (IsWindowKnown(window) || !access_policy_->CanGetWindowTree(window)) | 898 if (!access_policy_->CanGetWindowTree(window)) |
| 903 return; | 899 return; |
| 900 |
| 901 // This function is called in the context of a hierarchy change when the |
| 902 // parent wasn't known. We need to tell the client about the window so that |
| 903 // it can set the parent correctly. |
| 904 windows->push_back(window); | 904 windows->push_back(window); |
| 905 if (IsWindowKnown(window)) |
| 906 return; |
| 907 |
| 905 // There are two cases where this gets hit: | 908 // There are two cases where this gets hit: |
| 906 // . During init, in which case using the window id as the client id is | 909 // . During init, in which case using the window id as the client id is |
| 907 // fine. | 910 // fine. |
| 908 // . When a window is moved to a parent of a window we know about. This is | 911 // . When a window is moved to a parent of a window we know about. This is |
| 909 // only encountered for the WM or embed roots. We assume such clients want | 912 // only encountered for the WM or embed roots. We assume such clients want |
| 910 // to see the real id of the window and are only created ClientWindowIds | 913 // to see the real id of the window and are only created ClientWindowIds |
| 911 // with the client_id. | 914 // with the client_id. |
| 912 const ClientWindowId client_window_id(WindowIdToTransportId(window->id())); | 915 const ClientWindowId client_window_id(WindowIdToTransportId(window->id())); |
| 913 DCHECK_EQ(0u, client_id_to_window_id_map_.count(client_window_id)); | 916 DCHECK_EQ(0u, client_id_to_window_id_map_.count(client_window_id)); |
| 914 client_id_to_window_id_map_[client_window_id] = window->id(); | 917 client_id_to_window_id_map_[client_window_id] = window->id(); |
| (...skipping 1032 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1947 client()->OnCompleteDrop(client_window_id.id, event_flags, cursor_offset, | 1950 client()->OnCompleteDrop(client_window_id.id, event_flags, cursor_offset, |
| 1948 effect_bitmask, callback); | 1951 effect_bitmask, callback); |
| 1949 } | 1952 } |
| 1950 | 1953 |
| 1951 void WindowTree::PerformOnDragDropDone() { | 1954 void WindowTree::PerformOnDragDropDone() { |
| 1952 client()->OnDragDropDone(); | 1955 client()->OnDragDropDone(); |
| 1953 } | 1956 } |
| 1954 | 1957 |
| 1955 } // namespace ws | 1958 } // namespace ws |
| 1956 } // namespace ui | 1959 } // namespace ui |
| OLD | NEW |