OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "ash/wm/workspace/workspace_manager2.h" | 5 #include "ash/wm/workspace/workspace_manager2.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <functional> | 8 #include <functional> |
9 | 9 |
10 #include "ash/root_window_controller.h" | 10 #include "ash/root_window_controller.h" |
11 #include "ash/shell.h" | 11 #include "ash/shell.h" |
12 #include "ash/shell_window_ids.h" | 12 #include "ash/shell_window_ids.h" |
13 #include "ash/wm/base_layout_manager.h" | 13 #include "ash/wm/base_layout_manager.h" |
14 #include "ash/wm/property_util.h" | 14 #include "ash/wm/property_util.h" |
15 #include "ash/wm/shelf_layout_manager.h" | 15 #include "ash/wm/shelf_layout_manager.h" |
16 #include "ash/wm/window_animations.h" | 16 #include "ash/wm/window_animations.h" |
17 #include "ash/wm/window_properties.h" | 17 #include "ash/wm/window_properties.h" |
18 #include "ash/wm/window_util.h" | 18 #include "ash/wm/window_util.h" |
19 #include "ash/wm/workspace/system_background_controller.h" | |
20 #include "ash/wm/workspace/workspace_layout_manager2.h" | 19 #include "ash/wm/workspace/workspace_layout_manager2.h" |
21 #include "ash/wm/workspace/workspace2.h" | 20 #include "ash/wm/workspace/workspace2.h" |
22 #include "base/auto_reset.h" | 21 #include "base/auto_reset.h" |
23 #include "base/command_line.h" | 22 #include "base/command_line.h" |
24 #include "base/logging.h" | 23 #include "base/logging.h" |
25 #include "base/stl_util.h" | 24 #include "base/stl_util.h" |
26 #include "base/stringprintf.h" | 25 #include "base/stringprintf.h" |
27 #include "ui/aura/client/aura_constants.h" | 26 #include "ui/aura/client/aura_constants.h" |
28 #include "ui/aura/root_window.h" | 27 #include "ui/aura/root_window.h" |
29 #include "ui/aura/window.h" | 28 #include "ui/aura/window.h" |
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
318 // won't see the animation. | 317 // won't see the animation. |
319 contents_view_->StackChildAtTop(active_workspace_->window()); | 318 contents_view_->StackChildAtTop(active_workspace_->window()); |
320 } else if (active_workspace_->is_maximized() && last_active->is_maximized()) { | 319 } else if (active_workspace_->is_maximized() && last_active->is_maximized()) { |
321 // When switching between maximized windows we need the last active | 320 // When switching between maximized windows we need the last active |
322 // workspace on top of the new, otherwise the animations won't look | 321 // workspace on top of the new, otherwise the animations won't look |
323 // right. Since only one workspace is visible at a time stacking order of | 322 // right. Since only one workspace is visible at a time stacking order of |
324 // the workspace windows ultimately doesn't matter. | 323 // the workspace windows ultimately doesn't matter. |
325 contents_view_->StackChildAtTop(last_active->window()); | 324 contents_view_->StackChildAtTop(last_active->window()); |
326 } | 325 } |
327 | 326 |
328 destroy_background_timer_.Stop(); | |
329 if (active_workspace_ == desktop_workspace()) { | |
330 base::TimeDelta delay(GetSystemBackgroundDestroyDuration()); | |
331 if (ui::LayerAnimator::slow_animation_mode()) | |
332 delay *= ui::LayerAnimator::slow_animation_scale_factor(); | |
333 // Delay an extra 100ms to make sure everything settles down before | |
334 // destroying the background. | |
335 delay += base::TimeDelta::FromMilliseconds(100); | |
336 destroy_background_timer_.Start( | |
337 FROM_HERE, delay, this, &WorkspaceManager2::DestroySystemBackground); | |
338 } else if (!background_controller_.get()) { | |
339 background_controller_.reset(new SystemBackgroundController( | |
340 contents_view_->GetRootWindow())); | |
341 } | |
342 | |
343 UpdateShelfVisibility(); | 327 UpdateShelfVisibility(); |
344 | 328 |
345 if (animate_type != ANIMATE_NONE) { | 329 if (animate_type != ANIMATE_NONE) { |
346 AnimateBetweenWorkspaces( | 330 AnimateBetweenWorkspaces( |
347 last_active->window(), | 331 last_active->window(), |
348 WorkspaceType(last_active), | 332 WorkspaceType(last_active), |
349 (animate_type == ANIMATE_OLD_AND_NEW), | 333 (animate_type == ANIMATE_OLD_AND_NEW), |
350 workspace->window(), | 334 workspace->window(), |
351 WorkspaceType(workspace), | 335 WorkspaceType(workspace), |
352 is_unminimizing_maximized_window); | 336 is_unminimizing_maximized_window); |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
442 SetActiveWorkspace(*(workspace_i - 1), animate_type); | 426 SetActiveWorkspace(*(workspace_i - 1), animate_type); |
443 } | 427 } |
444 | 428 |
445 void WorkspaceManager2::ScheduleDelete(Workspace2* workspace) { | 429 void WorkspaceManager2::ScheduleDelete(Workspace2* workspace) { |
446 to_delete_.insert(workspace); | 430 to_delete_.insert(workspace); |
447 delete_timer_.Stop(); | 431 delete_timer_.Stop(); |
448 delete_timer_.Start(FROM_HERE, base::TimeDelta::FromSeconds(1), this, | 432 delete_timer_.Start(FROM_HERE, base::TimeDelta::FromSeconds(1), this, |
449 &WorkspaceManager2::ProcessDeletion); | 433 &WorkspaceManager2::ProcessDeletion); |
450 } | 434 } |
451 | 435 |
452 void WorkspaceManager2::DestroySystemBackground() { | |
453 background_controller_.reset(); | |
454 } | |
455 | |
456 void WorkspaceManager2::SetUnminimizingWorkspace(Workspace2* workspace) { | 436 void WorkspaceManager2::SetUnminimizingWorkspace(Workspace2* workspace) { |
457 // The normal sequence of unminimizing a window is: Show() the window, which | 437 // The normal sequence of unminimizing a window is: Show() the window, which |
458 // triggers changing the kShowStateKey to NORMAL and lastly the window is made | 438 // triggers changing the kShowStateKey to NORMAL and lastly the window is made |
459 // active. This means at the time the window is unminimized we don't know if | 439 // active. This means at the time the window is unminimized we don't know if |
460 // the workspace it is in is going to become active. To track this | 440 // the workspace it is in is going to become active. To track this |
461 // |unminimizing_workspace_| is set at the time we unminimize and a task is | 441 // |unminimizing_workspace_| is set at the time we unminimize and a task is |
462 // schedule to reset it. This way when we get the activate we know we're in | 442 // schedule to reset it. This way when we get the activate we know we're in |
463 // the process unminimizing and can do the right animation. | 443 // the process unminimizing and can do the right animation. |
464 unminimizing_workspace_ = workspace; | 444 unminimizing_workspace_ = workspace; |
465 if (unminimizing_workspace_) { | 445 if (unminimizing_workspace_) { |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
608 const bool is_active = wm::IsActiveWindow(window); | 588 const bool is_active = wm::IsActiveWindow(window); |
609 if (is_active) | 589 if (is_active) |
610 new_workspace->window()->Show(); | 590 new_workspace->window()->Show(); |
611 ReparentWindow(window, new_workspace->window(), NULL); | 591 ReparentWindow(window, new_workspace->window(), NULL); |
612 if (is_active) | 592 if (is_active) |
613 SetActiveWorkspace(new_workspace, ANIMATE_OLD_AND_NEW); | 593 SetActiveWorkspace(new_workspace, ANIMATE_OLD_AND_NEW); |
614 } | 594 } |
615 | 595 |
616 } // namespace internal | 596 } // namespace internal |
617 } // namespace ash | 597 } // namespace ash |
OLD | NEW |