Index: services/ui/ws/window_tree.cc |
diff --git a/services/ui/ws/window_tree.cc b/services/ui/ws/window_tree.cc |
index f642e1f1c3291f98d25ebcc946bb1336a56e9068..9b73054c3177653609611136b6e5c69a13c7b584 100644 |
--- a/services/ui/ws/window_tree.cc |
+++ b/services/ui/ws/window_tree.cc |
@@ -352,18 +352,26 @@ bool WindowTree::DeleteWindow(const ClientWindowId& window_id) { |
return tree && tree->DeleteWindowImpl(this, window); |
} |
-bool WindowTree::SetModal(const ClientWindowId& window_id) { |
+bool WindowTree::SetModal(const ClientWindowId& window_id, |
+ ModalType modal_type) { |
ServerWindow* window = GetWindowByClientId(window_id); |
if (window && access_policy_->CanSetModal(window)) { |
WindowManagerDisplayRoot* display_root = |
GetWindowManagerDisplayRoot(window); |
- if (window->transient_parent()) { |
- window->SetModal(); |
- } else if (user_id_ != InvalidUserId()) { |
- if (display_root) |
- display_root->window_manager_state()->AddSystemModalWindow(window); |
- } else { |
- return false; |
+ switch (modal_type) { |
+ case MODAL_TYPE_NONE: |
+ window->SetModal(false); |
sky
2017/02/24 20:18:53
I think SetModal should change to take the type.
Hadi
2017/02/28 20:29:07
Done.
|
+ break; |
+ case MODAL_TYPE_WINDOW: |
+ window->SetModal(true); |
+ break; |
+ case MODAL_TYPE_SYSTEM: |
+ if (user_id_ != InvalidUserId() && display_root) |
+ display_root->window_manager_state()->AddSystemModalWindow(window); |
+ break; |
+ case MODAL_TYPE_CHILD: |
+ NOTIMPLEMENTED(); |
+ return false; |
} |
if (display_root) |
display_root->window_manager_state()->ReleaseCaptureBlockedByModalWindow( |
@@ -1278,8 +1286,11 @@ 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::SetModal(uint32_t change_id, |
+ Id window_id, |
+ ModalType modal_type) { |
+ client()->OnChangeCompleted(change_id, |
+ SetModal(ClientWindowId(window_id), modal_type)); |
} |
void WindowTree::ReorderWindow(uint32_t change_id, |