| Index: apps/shell/browser/shell_desktop_controller.cc
|
| diff --git a/apps/shell/browser/shell_desktop_controller.cc b/apps/shell/browser/shell_desktop_controller.cc
|
| deleted file mode 100644
|
| index 88f114a5500e449b1d0fb73b93b0850ec6d4b437..0000000000000000000000000000000000000000
|
| --- a/apps/shell/browser/shell_desktop_controller.cc
|
| +++ /dev/null
|
| @@ -1,341 +0,0 @@
|
| -// Copyright 2014 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 "apps/shell/browser/shell_desktop_controller.h"
|
| -
|
| -#include "apps/shell/browser/shell_app_window_controller.h"
|
| -#include "apps/shell/common/switches.h"
|
| -#include "base/command_line.h"
|
| -#include "content/public/browser/context_factory.h"
|
| -#include "ui/aura/client/cursor_client.h"
|
| -#include "ui/aura/client/default_capture_client.h"
|
| -#include "ui/aura/env.h"
|
| -#include "ui/aura/layout_manager.h"
|
| -#include "ui/aura/test/test_screen.h"
|
| -#include "ui/aura/window.h"
|
| -#include "ui/aura/window_event_dispatcher.h"
|
| -#include "ui/aura/window_tree_host.h"
|
| -#include "ui/base/cursor/cursor.h"
|
| -#include "ui/base/cursor/image_cursors.h"
|
| -#include "ui/base/ime/input_method_initializer.h"
|
| -#include "ui/gfx/native_widget_types.h"
|
| -#include "ui/gfx/screen.h"
|
| -#include "ui/wm/core/base_focus_rules.h"
|
| -#include "ui/wm/core/compound_event_filter.h"
|
| -#include "ui/wm/core/cursor_manager.h"
|
| -#include "ui/wm/core/focus_controller.h"
|
| -#include "ui/wm/core/input_method_event_filter.h"
|
| -#include "ui/wm/core/native_cursor_manager.h"
|
| -#include "ui/wm/core/native_cursor_manager_delegate.h"
|
| -#include "ui/wm/core/user_activity_detector.h"
|
| -
|
| -#if defined(OS_CHROMEOS)
|
| -#include "ui/chromeos/user_activity_power_manager_notifier.h"
|
| -#include "ui/display/types/chromeos/display_mode.h"
|
| -#include "ui/display/types/chromeos/display_snapshot.h"
|
| -#endif
|
| -
|
| -namespace apps {
|
| -namespace {
|
| -
|
| -// A simple layout manager that makes each new window fill its parent.
|
| -class FillLayout : public aura::LayoutManager {
|
| - public:
|
| - FillLayout() {}
|
| - virtual ~FillLayout() {}
|
| -
|
| - private:
|
| - // aura::LayoutManager:
|
| - virtual void OnWindowResized() OVERRIDE {}
|
| -
|
| - virtual void OnWindowAddedToLayout(aura::Window* child) OVERRIDE {
|
| - if (!child->parent())
|
| - return;
|
| -
|
| - // Create a rect at 0,0 with the size of the parent.
|
| - gfx::Size parent_size = child->parent()->bounds().size();
|
| - child->SetBounds(gfx::Rect(parent_size));
|
| - }
|
| -
|
| - virtual void OnWillRemoveWindowFromLayout(aura::Window* child) OVERRIDE {}
|
| -
|
| - virtual void OnWindowRemovedFromLayout(aura::Window* child) OVERRIDE {}
|
| -
|
| - virtual void OnChildWindowVisibilityChanged(aura::Window* child,
|
| - bool visible) OVERRIDE {}
|
| -
|
| - virtual void SetChildBounds(aura::Window* child,
|
| - const gfx::Rect& requested_bounds) OVERRIDE {
|
| - SetChildBoundsDirect(child, requested_bounds);
|
| - }
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(FillLayout);
|
| -};
|
| -
|
| -// A class that bridges the gap between CursorManager and Aura. It borrows
|
| -// heavily from AshNativeCursorManager.
|
| -class ShellNativeCursorManager : public wm::NativeCursorManager {
|
| - public:
|
| - explicit ShellNativeCursorManager(aura::WindowTreeHost* host)
|
| - : host_(host),
|
| - image_cursors_(new ui::ImageCursors) {}
|
| - virtual ~ShellNativeCursorManager() {}
|
| -
|
| - // wm::NativeCursorManager overrides.
|
| - virtual void SetDisplay(
|
| - const gfx::Display& display,
|
| - wm::NativeCursorManagerDelegate* delegate) OVERRIDE {
|
| - if (image_cursors_->SetDisplay(display, display.device_scale_factor()))
|
| - SetCursor(delegate->GetCursor(), delegate);
|
| - }
|
| -
|
| - virtual void SetCursor(
|
| - gfx::NativeCursor cursor,
|
| - wm::NativeCursorManagerDelegate* delegate) OVERRIDE {
|
| - image_cursors_->SetPlatformCursor(&cursor);
|
| - cursor.set_device_scale_factor(image_cursors_->GetScale());
|
| - delegate->CommitCursor(cursor);
|
| -
|
| - if (delegate->IsCursorVisible())
|
| - ApplyCursor(cursor);
|
| - }
|
| -
|
| - virtual void SetVisibility(
|
| - bool visible,
|
| - wm::NativeCursorManagerDelegate* delegate) OVERRIDE {
|
| - delegate->CommitVisibility(visible);
|
| -
|
| - if (visible) {
|
| - SetCursor(delegate->GetCursor(), delegate);
|
| - } else {
|
| - gfx::NativeCursor invisible_cursor(ui::kCursorNone);
|
| - image_cursors_->SetPlatformCursor(&invisible_cursor);
|
| - ApplyCursor(invisible_cursor);
|
| - }
|
| - }
|
| -
|
| - virtual void SetCursorSet(
|
| - ui::CursorSetType cursor_set,
|
| - wm::NativeCursorManagerDelegate* delegate) OVERRIDE {
|
| - image_cursors_->SetCursorSet(cursor_set);
|
| - delegate->CommitCursorSet(cursor_set);
|
| - if (delegate->IsCursorVisible())
|
| - SetCursor(delegate->GetCursor(), delegate);
|
| - }
|
| -
|
| - virtual void SetMouseEventsEnabled(
|
| - bool enabled,
|
| - wm::NativeCursorManagerDelegate* delegate) OVERRIDE {
|
| - delegate->CommitMouseEventsEnabled(enabled);
|
| - SetVisibility(delegate->IsCursorVisible(), delegate);
|
| - }
|
| -
|
| - private:
|
| - // Sets |cursor| as the active cursor within Aura.
|
| - void ApplyCursor(gfx::NativeCursor cursor) {
|
| - host_->SetCursor(cursor);
|
| - }
|
| -
|
| - aura::WindowTreeHost* host_; // Not owned.
|
| -
|
| - scoped_ptr<ui::ImageCursors> image_cursors_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(ShellNativeCursorManager);
|
| -};
|
| -
|
| -class AppsFocusRules : public wm::BaseFocusRules {
|
| - public:
|
| - AppsFocusRules() {}
|
| - virtual ~AppsFocusRules() {}
|
| -
|
| - virtual bool SupportsChildActivation(aura::Window* window) const OVERRIDE {
|
| - return true;
|
| - }
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(AppsFocusRules);
|
| -};
|
| -
|
| -ShellDesktopController* g_instance = NULL;
|
| -
|
| -} // namespace
|
| -
|
| -ShellDesktopController::ShellDesktopController() {
|
| -#if defined(OS_CHROMEOS)
|
| - display_configurator_.reset(new ui::DisplayConfigurator);
|
| - display_configurator_->Init(false);
|
| - display_configurator_->ForceInitialConfigure(0);
|
| - display_configurator_->AddObserver(this);
|
| -#endif
|
| - aura::Env::CreateInstance(true);
|
| - aura::Env::GetInstance()->set_context_factory(content::GetContextFactory());
|
| -
|
| - g_instance = this;
|
| -}
|
| -
|
| -ShellDesktopController::~ShellDesktopController() {
|
| - app_window_controller_.reset();
|
| - g_instance = NULL;
|
| - DestroyRootWindow();
|
| - aura::Env::DeleteInstance();
|
| -}
|
| -
|
| -// static
|
| -ShellDesktopController* ShellDesktopController::instance() {
|
| - return g_instance;
|
| -}
|
| -
|
| -void ShellDesktopController::SetAppWindowController(
|
| - ShellAppWindowController* app_window_controller) {
|
| - app_window_controller_.reset(app_window_controller);
|
| -}
|
| -
|
| -ShellAppWindow* ShellDesktopController::CreateAppWindow(
|
| - content::BrowserContext* context) {
|
| - return app_window_controller_->CreateAppWindow(context);
|
| -}
|
| -
|
| -void ShellDesktopController::CloseAppWindows() {
|
| - if (app_window_controller_)
|
| - app_window_controller_->CloseAppWindows();
|
| -}
|
| -
|
| -aura::Window* ShellDesktopController::GetDefaultParent(
|
| - aura::Window* context,
|
| - aura::Window* window,
|
| - const gfx::Rect& bounds) {
|
| - return host_->window();
|
| -}
|
| -
|
| -#if defined(OS_CHROMEOS)
|
| -void ShellDesktopController::OnDisplayModeChanged(
|
| - const std::vector<ui::DisplayConfigurator::DisplayState>& displays) {
|
| - gfx::Size size = GetPrimaryDisplaySize();
|
| - if (!size.IsEmpty())
|
| - host_->UpdateRootWindowSize(size);
|
| -}
|
| -#endif
|
| -
|
| -void ShellDesktopController::OnHostCloseRequested(
|
| - const aura::WindowTreeHost* host) {
|
| - DCHECK_EQ(host_.get(), host);
|
| - CloseAppWindows();
|
| - base::MessageLoop::current()->PostTask(FROM_HERE,
|
| - base::MessageLoop::QuitClosure());
|
| -}
|
| -
|
| -void ShellDesktopController::CreateRootWindow() {
|
| - // Set up basic pieces of ui::wm.
|
| - gfx::Size size;
|
| - base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
|
| - if (command_line->HasSwitch(switches::kAppShellHostWindowBounds)) {
|
| - const std::string size_str =
|
| - command_line->GetSwitchValueASCII(switches::kAppShellHostWindowBounds);
|
| - int width, height;
|
| - CHECK_EQ(2, sscanf(size_str.c_str(), "%dx%d", &width, &height));
|
| - size = gfx::Size(width, height);
|
| - } else {
|
| - size = GetPrimaryDisplaySize();
|
| - }
|
| - if (size.IsEmpty())
|
| - size = gfx::Size(1280, 720);
|
| -
|
| - test_screen_.reset(aura::TestScreen::Create(size));
|
| - // TODO(jamescook): Replace this with a real Screen implementation.
|
| - gfx::Screen::SetScreenInstance(gfx::SCREEN_TYPE_NATIVE, test_screen_.get());
|
| - // TODO(mukai): Set up input method.
|
| -
|
| - host_.reset(test_screen_->CreateHostForPrimaryDisplay());
|
| - host_->InitHost();
|
| - aura::client::SetWindowTreeClient(host_->window(), this);
|
| - root_window_event_filter_.reset(new wm::CompoundEventFilter);
|
| - host_->window()->AddPreTargetHandler(root_window_event_filter_.get());
|
| - InitWindowManager();
|
| -
|
| - host_->AddObserver(this);
|
| -
|
| - // Ensure the X window gets mapped.
|
| - host_->Show();
|
| -}
|
| -
|
| -void ShellDesktopController::InitWindowManager() {
|
| - wm::FocusController* focus_controller =
|
| - new wm::FocusController(CreateFocusRules());
|
| - aura::client::SetFocusClient(host_->window(), focus_controller);
|
| - host_->window()->AddPreTargetHandler(focus_controller);
|
| - aura::client::SetActivationClient(host_->window(), focus_controller);
|
| - focus_client_.reset(focus_controller);
|
| -
|
| - input_method_filter_.reset(
|
| - new wm::InputMethodEventFilter(host_->GetAcceleratedWidget()));
|
| - input_method_filter_->SetInputMethodPropertyInRootWindow(host_->window());
|
| - root_window_event_filter_->AddHandler(input_method_filter_.get());
|
| -
|
| - capture_client_.reset(
|
| - new aura::client::DefaultCaptureClient(host_->window()));
|
| -
|
| - // Ensure new windows fill the display.
|
| - host_->window()->SetLayoutManager(new FillLayout);
|
| -
|
| - cursor_manager_.reset(
|
| - new wm::CursorManager(scoped_ptr<wm::NativeCursorManager>(
|
| - new ShellNativeCursorManager(host_.get()))));
|
| - cursor_manager_->SetDisplay(
|
| - gfx::Screen::GetNativeScreen()->GetPrimaryDisplay());
|
| - cursor_manager_->SetCursor(ui::kCursorPointer);
|
| - aura::client::SetCursorClient(host_->window(), cursor_manager_.get());
|
| -
|
| - user_activity_detector_.reset(new wm::UserActivityDetector);
|
| - host_->event_processor()->GetRootTarget()->AddPreTargetHandler(
|
| - user_activity_detector_.get());
|
| -#if defined(OS_CHROMEOS)
|
| - user_activity_notifier_.reset(
|
| - new ui::UserActivityPowerManagerNotifier(user_activity_detector_.get()));
|
| -#endif
|
| -}
|
| -
|
| -wm::FocusRules* ShellDesktopController::CreateFocusRules() {
|
| - return new AppsFocusRules();
|
| -}
|
| -
|
| -void ShellDesktopController::DestroyRootWindow() {
|
| - host_->RemoveObserver(this);
|
| - if (input_method_filter_)
|
| - root_window_event_filter_->RemoveHandler(input_method_filter_.get());
|
| - if (user_activity_detector_) {
|
| - host_->event_processor()->GetRootTarget()->RemovePreTargetHandler(
|
| - user_activity_detector_.get());
|
| - }
|
| - wm::FocusController* focus_controller =
|
| - static_cast<wm::FocusController*>(focus_client_.get());
|
| - if (focus_controller) {
|
| - host_->window()->RemovePreTargetHandler(focus_controller);
|
| - aura::client::SetActivationClient(host_->window(), NULL);
|
| - }
|
| - root_window_event_filter_.reset();
|
| - capture_client_.reset();
|
| - input_method_filter_.reset();
|
| - focus_client_.reset();
|
| - cursor_manager_.reset();
|
| -#if defined(OS_CHROMEOS)
|
| - user_activity_notifier_.reset();
|
| -#endif
|
| - user_activity_detector_.reset();
|
| - host_.reset();
|
| -}
|
| -
|
| -gfx::Size ShellDesktopController::GetPrimaryDisplaySize() {
|
| -#if defined(OS_CHROMEOS)
|
| - const std::vector<ui::DisplayConfigurator::DisplayState>& displays =
|
| - display_configurator_->cached_displays();
|
| - if (displays.empty())
|
| - return gfx::Size();
|
| - const ui::DisplayMode* mode = displays[0].display->current_mode();
|
| - return mode ? mode->size() : gfx::Size();
|
| -#else
|
| - return gfx::Size();
|
| -#endif
|
| -}
|
| -
|
| -} // namespace apps
|
|
|