| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "mash/wm/window_manager_impl.h" | 5 #include "mash/wm/window_manager_impl.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "components/mus/common/types.h" | 10 #include "components/mus/common/types.h" |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 77 } | 77 } |
| 78 return gfx::Rect(40 + (state_->window_count() % 4) * 40, | 78 return gfx::Rect(40 + (state_->window_count() % 4) * 40, |
| 79 40 + (state_->window_count() % 4) * 40, width, height); | 79 40 + (state_->window_count() % 4) * 40, width, height); |
| 80 } | 80 } |
| 81 | 81 |
| 82 gfx::Rect WindowManagerImpl::GetMaximizedWindowBounds() const { | 82 gfx::Rect WindowManagerImpl::GetMaximizedWindowBounds() const { |
| 83 DCHECK(state_); | 83 DCHECK(state_); |
| 84 return gfx::Rect(state_->root()->bounds().size()); | 84 return gfx::Rect(state_->root()->bounds().size()); |
| 85 } | 85 } |
| 86 | 86 |
| 87 mus::Window* WindowManagerImpl::NewTopLevelWindow( |
| 88 std::map<std::string, std::vector<uint8_t>>* properties, |
| 89 mus::mojom::WindowTreeClientPtr client) { |
| 90 DCHECK(state_); |
| 91 mus::Window* root = state_->root(); |
| 92 DCHECK(root); |
| 93 |
| 94 const bool provide_non_client_frame = |
| 95 GetWindowType(*properties) == mus::mojom::WINDOW_TYPE_WINDOW; |
| 96 if (provide_non_client_frame) |
| 97 (*properties)[mus::mojom::kWaitForUnderlay_Property].clear(); |
| 98 |
| 99 // TODO(sky): constrain and validate properties before passing to server. |
| 100 mus::Window* window = root->connection()->NewWindow(properties); |
| 101 window->SetBounds(CalculateDefaultBounds(window)); |
| 102 |
| 103 mojom::Container container = GetRequestedContainer(window); |
| 104 state_->GetWindowForContainer(container)->AddChild(window); |
| 105 |
| 106 if (client) |
| 107 window->Embed(std::move(client)); |
| 108 |
| 109 if (provide_non_client_frame) { |
| 110 // NonClientFrameController deletes itself when |window| is destroyed. |
| 111 new NonClientFrameController(state_->app()->shell(), window, |
| 112 state_->window_tree_host()); |
| 113 } |
| 114 |
| 115 state_->IncrementWindowCount(); |
| 116 |
| 117 return window; |
| 118 } |
| 119 |
| 87 void WindowManagerImpl::OnTreeChanging(const TreeChangeParams& params) { | 120 void WindowManagerImpl::OnTreeChanging(const TreeChangeParams& params) { |
| 88 DCHECK(state_); | 121 DCHECK(state_); |
| 89 if (state_->WindowIsContainer(params.old_parent)) | 122 if (state_->WindowIsContainer(params.old_parent)) |
| 90 params.target->RemoveObserver(this); | 123 params.target->RemoveObserver(this); |
| 91 else if (state_->WindowIsContainer(params.new_parent)) | 124 else if (state_->WindowIsContainer(params.new_parent)) |
| 92 params.target->AddObserver(this); | 125 params.target->AddObserver(this); |
| 93 } | 126 } |
| 94 | 127 |
| 95 void WindowManagerImpl::OnWindowEmbeddedAppDisconnected(mus::Window* window) { | 128 void WindowManagerImpl::OnWindowEmbeddedAppDisconnected(mus::Window* window) { |
| 96 window->Destroy(); | 129 window->Destroy(); |
| 97 } | 130 } |
| 98 | 131 |
| 99 void WindowManagerImpl::OpenWindow( | 132 void WindowManagerImpl::OpenWindow( |
| 100 mus::mojom::WindowTreeClientPtr client, | 133 mus::mojom::WindowTreeClientPtr client, |
| 101 mojo::Map<mojo::String, mojo::Array<uint8_t>> transport_properties) { | 134 mojo::Map<mojo::String, mojo::Array<uint8_t>> transport_properties) { |
| 102 DCHECK(state_); | |
| 103 mus::Window* root = state_->root(); | |
| 104 DCHECK(root); | |
| 105 | |
| 106 mus::Window::SharedProperties properties = | 135 mus::Window::SharedProperties properties = |
| 107 transport_properties.To<mus::Window::SharedProperties>(); | 136 transport_properties.To<mus::Window::SharedProperties>(); |
| 108 const bool provide_non_client_frame = | 137 NewTopLevelWindow(&properties, std::move(client)); |
| 109 GetWindowType(properties) == mus::mojom::WINDOW_TYPE_WINDOW; | |
| 110 if (provide_non_client_frame) | |
| 111 properties[mus::mojom::kWaitForUnderlay_Property].clear(); | |
| 112 | |
| 113 // TODO(sky): constrain and validate properties before passing to server. | |
| 114 mus::Window* child_window = root->connection()->NewWindow(&properties); | |
| 115 child_window->SetBounds(CalculateDefaultBounds(child_window)); | |
| 116 | |
| 117 mojom::Container container = GetRequestedContainer(child_window); | |
| 118 state_->GetWindowForContainer(container)->AddChild(child_window); | |
| 119 child_window->Embed(std::move(client)); | |
| 120 | |
| 121 if (provide_non_client_frame) { | |
| 122 // NonClientFrameController deletes itself when |child_window| is destroyed. | |
| 123 new NonClientFrameController(state_->app()->shell(), child_window, | |
| 124 state_->window_tree_host()); | |
| 125 } | |
| 126 | |
| 127 state_->IncrementWindowCount(); | |
| 128 } | 138 } |
| 129 | 139 |
| 130 void WindowManagerImpl::GetConfig(const GetConfigCallback& callback) { | 140 void WindowManagerImpl::GetConfig(const GetConfigCallback& callback) { |
| 131 DCHECK(state_); | 141 DCHECK(state_); |
| 132 mus::mojom::WindowManagerConfigPtr config( | 142 mus::mojom::WindowManagerConfigPtr config( |
| 133 mus::mojom::WindowManagerConfig::New()); | 143 mus::mojom::WindowManagerConfig::New()); |
| 134 config->displays = mojo::Array<mus::mojom::DisplayPtr>::New(1); | 144 config->displays = mojo::Array<mus::mojom::DisplayPtr>::New(1); |
| 135 config->displays[0] = mus::mojom::Display::New(); | 145 config->displays[0] = mus::mojom::Display::New(); |
| 136 config->displays[0]->id = 2001; | 146 config->displays[0]->id = 2001; |
| 137 config->displays[0]->bounds = mojo::Rect::New(); | 147 config->displays[0]->bounds = mojo::Rect::New(); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 167 const std::string& name, | 177 const std::string& name, |
| 168 scoped_ptr<std::vector<uint8_t>>* new_data) { | 178 scoped_ptr<std::vector<uint8_t>>* new_data) { |
| 169 // TODO(sky): constrain this to set of keys we know about, and allowed | 179 // TODO(sky): constrain this to set of keys we know about, and allowed |
| 170 // values. | 180 // values. |
| 171 return name == mus::mojom::WindowManager::kShowState_Property || | 181 return name == mus::mojom::WindowManager::kShowState_Property || |
| 172 name == mus::mojom::WindowManager::kPreferredSize_Property || | 182 name == mus::mojom::WindowManager::kPreferredSize_Property || |
| 173 name == mus::mojom::WindowManager::kResizeBehavior_Property || | 183 name == mus::mojom::WindowManager::kResizeBehavior_Property || |
| 174 name == mus::mojom::WindowManager::kWindowTitle_Property; | 184 name == mus::mojom::WindowManager::kWindowTitle_Property; |
| 175 } | 185 } |
| 176 | 186 |
| 187 mus::Window* WindowManagerImpl::OnWmCreateTopLevelWindow( |
| 188 std::map<std::string, std::vector<uint8_t>>* properties) { |
| 189 return NewTopLevelWindow(properties, nullptr); |
| 190 } |
| 191 |
| 177 } // namespace wm | 192 } // namespace wm |
| 178 } // namespace mash | 193 } // namespace mash |
| OLD | NEW |