| Index: ash/wm/workspace/workspace2.cc
|
| diff --git a/ash/wm/workspace/workspace2.cc b/ash/wm/workspace/workspace2.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9d585b5c67fc4dfb7de7dad78803974c772206d5
|
| --- /dev/null
|
| +++ b/ash/wm/workspace/workspace2.cc
|
| @@ -0,0 +1,86 @@
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "ash/wm/workspace/workspace2.h"
|
| +
|
| +#include "ash/shell_window_ids.h"
|
| +#include "ash/wm/property_util.h"
|
| +#include "ash/wm/window_properties.h"
|
| +#include "ash/wm/window_util.h"
|
| +#include "ash/wm/workspace/workspace_event_filter.h"
|
| +#include "ash/wm/workspace/workspace_manager2.h"
|
| +#include "ui/aura/window.h"
|
| +
|
| +namespace ash {
|
| +namespace internal {
|
| +
|
| +Workspace2::Workspace2(WorkspaceManager2* manager,
|
| + aura::Window* parent,
|
| + bool is_maximized)
|
| + : is_maximized_(is_maximized),
|
| + workspace_manager_(manager),
|
| + window_(new aura::Window(NULL)),
|
| + event_filter_(new WorkspaceEventFilter(window_)) {
|
| + window_->set_id(kShellWindowId_WorkspaceContainer);
|
| + window_->SetName("WorkspaceContainer");
|
| + window_->Init(ui::LAYER_NOT_DRAWN);
|
| + window_->Show();
|
| + window_->SetParent(parent);
|
| + window_->SetEventFilter(event_filter_);
|
| + window_->SetProperty(internal::kUsesScreenCoordinatesKey, true);
|
| +}
|
| +
|
| +Workspace2::~Workspace2() {
|
| + // ReleaseWindow() should have been invoked before we're deleted.
|
| + DCHECK(!window_);
|
| +}
|
| +
|
| +aura::Window* Workspace2::ReleaseWindow() {
|
| + // Remove the LayoutManager and EventFilter as they refer back to us and/or
|
| + // WorkspaceManager.
|
| + window_->SetLayoutManager(NULL);
|
| + window_->SetEventFilter(NULL);
|
| + aura::Window* window = window_;
|
| + window_ = NULL;
|
| + event_filter_ = NULL;
|
| + return window;
|
| +}
|
| +
|
| +void Workspace2::SetGridSize(int grid_size) {
|
| + event_filter_->set_grid_size(grid_size);
|
| +}
|
| +
|
| +bool Workspace2::ShouldMoveToPending() const {
|
| + if (!is_maximized_)
|
| + return false;
|
| +
|
| + bool has_visible_non_maximized_window = false;
|
| + for (size_t i = 0; i < window_->children().size(); ++i) {
|
| + aura::Window* child(window_->children()[i]);
|
| + if (!child->TargetVisibility() || wm::IsWindowMinimized(child))
|
| + continue;
|
| + if (WorkspaceManager2::IsMaximized(child))
|
| + return false;
|
| +
|
| + if (GetTrackedByWorkspace(child) && !GetPersistsAcrossAllWorkspaces(child))
|
| + has_visible_non_maximized_window = true;
|
| + }
|
| + return !has_visible_non_maximized_window;
|
| +}
|
| +
|
| +int Workspace2::GetNumMaximizedWindows() const {
|
| + int count = 0;
|
| + for (size_t i = 0; i < window_->children().size(); ++i) {
|
| + aura::Window* child = window_->children()[i];
|
| + if (WorkspaceManager2::IsMaximized(child) ||
|
| + WorkspaceManager2::WillRestoreMaximized(child)) {
|
| + if (++count == 2)
|
| + return count;
|
| + }
|
| + }
|
| + return count;
|
| +}
|
| +
|
| +} // namespace internal
|
| +} // namespace ash
|
|
|