| Index: ash/mus/user_window_controller_impl.cc
|
| diff --git a/ash/mus/user_window_controller_impl.cc b/ash/mus/user_window_controller_impl.cc
|
| deleted file mode 100644
|
| index 56e5469b6dfe6e6d8b3b6b54f012c789919893cb..0000000000000000000000000000000000000000
|
| --- a/ash/mus/user_window_controller_impl.cc
|
| +++ /dev/null
|
| @@ -1,209 +0,0 @@
|
| -// Copyright 2015 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/mus/user_window_controller_impl.h"
|
| -
|
| -#include "ash/common/shell_window_ids.h"
|
| -#include "ash/mus/bridge/wm_window_mus.h"
|
| -#include "ash/mus/property_util.h"
|
| -#include "ash/mus/root_window_controller.h"
|
| -#include "ash/public/interfaces/container.mojom.h"
|
| -#include "mojo/common/common_type_converters.h"
|
| -#include "services/ui/public/cpp/property_type_converters.h"
|
| -#include "services/ui/public/cpp/window.h"
|
| -#include "services/ui/public/cpp/window_property.h"
|
| -#include "services/ui/public/cpp/window_tree_client.h"
|
| -#include "ui/resources/grit/ui_resources.h"
|
| -
|
| -MUS_DECLARE_WINDOW_PROPERTY_TYPE(uint32_t)
|
| -
|
| -namespace {
|
| -
|
| -// Key used for storing identifier sent to clients for windows.
|
| -MUS_DEFINE_LOCAL_WINDOW_PROPERTY_KEY(uint32_t, kUserWindowIdKey, 0u);
|
| -
|
| -} // namespace
|
| -
|
| -namespace ash {
|
| -namespace mus {
|
| -
|
| -namespace {
|
| -
|
| -// Returns |window|, or an ancestor thereof, parented to |container|, or null.
|
| -ui::Window* GetTopLevelWindow(ui::Window* window, ui::Window* container) {
|
| - while (window && window->parent() != container)
|
| - window = window->parent();
|
| - return window;
|
| -}
|
| -
|
| -// Get a UserWindow struct from a ui::Window.
|
| -mojom::UserWindowPtr GetUserWindow(ui::Window* window) {
|
| - mojom::UserWindowPtr user_window(mojom::UserWindow::New());
|
| - DCHECK_NE(0u, window->GetLocalProperty(kUserWindowIdKey));
|
| - user_window->window_id = window->GetLocalProperty(kUserWindowIdKey);
|
| - user_window->window_title = mojo::String::From(GetWindowTitle(window));
|
| - user_window->window_app_icon = GetWindowAppIcon(window);
|
| - user_window->window_app_id = mojo::String::From(GetAppID(window));
|
| - user_window->ignored_by_shelf = GetWindowIgnoredByShelf(window);
|
| - ui::Window* focused = window->window_tree()->GetFocusedWindow();
|
| - focused = GetTopLevelWindow(focused, window->parent());
|
| - user_window->window_has_focus = focused == window;
|
| - return user_window;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -// Observes property changes on user windows. UserWindowControllerImpl uses
|
| -// this separate observer to avoid observing duplicate tree change
|
| -// notifications.
|
| -class WindowPropertyObserver : public ui::WindowObserver {
|
| - public:
|
| - explicit WindowPropertyObserver(UserWindowControllerImpl* controller)
|
| - : controller_(controller) {}
|
| - ~WindowPropertyObserver() override {}
|
| -
|
| - private:
|
| - // ui::WindowObserver:
|
| - void OnWindowSharedPropertyChanged(
|
| - ui::Window* window,
|
| - const std::string& name,
|
| - const std::vector<uint8_t>* old_data,
|
| - const std::vector<uint8_t>* new_data) override {
|
| - if (!controller_->user_window_observer())
|
| - return;
|
| - if (name == ui::mojom::WindowManager::kWindowTitle_Property) {
|
| - controller_->user_window_observer()->OnUserWindowTitleChanged(
|
| - window->GetLocalProperty(kUserWindowIdKey),
|
| - mojo::String::From(GetWindowTitle(window)));
|
| - } else if (name == ui::mojom::WindowManager::kWindowAppIcon_Property) {
|
| - controller_->user_window_observer()->OnUserWindowAppIconChanged(
|
| - window->GetLocalProperty(kUserWindowIdKey),
|
| - new_data ? mojo::Array<uint8_t>::From(*new_data)
|
| - : mojo::Array<uint8_t>());
|
| - }
|
| - }
|
| -
|
| - UserWindowControllerImpl* controller_;
|
| - DISALLOW_COPY_AND_ASSIGN(WindowPropertyObserver);
|
| -};
|
| -
|
| -UserWindowControllerImpl::UserWindowControllerImpl()
|
| - : root_controller_(nullptr) {}
|
| -
|
| -UserWindowControllerImpl::~UserWindowControllerImpl() {
|
| - if (!root_controller_)
|
| - return;
|
| -
|
| - ui::Window* user_container = GetUserWindowContainer();
|
| - if (!user_container)
|
| - return;
|
| -
|
| - RemoveObservers(user_container);
|
| -}
|
| -
|
| -void UserWindowControllerImpl::Initialize(
|
| - RootWindowController* root_controller) {
|
| - DCHECK(root_controller);
|
| - DCHECK(!root_controller_);
|
| - root_controller_ = root_controller;
|
| - GetUserWindowContainer()->AddObserver(this);
|
| - GetUserWindowContainer()->window_tree()->AddObserver(this);
|
| - window_property_observer_.reset(new WindowPropertyObserver(this));
|
| - for (ui::Window* window : GetUserWindowContainer()->children()) {
|
| - AssignIdIfNecessary(window);
|
| - window->AddObserver(window_property_observer_.get());
|
| - }
|
| -}
|
| -
|
| -void UserWindowControllerImpl::AssignIdIfNecessary(ui::Window* window) {
|
| - if (window->GetLocalProperty(kUserWindowIdKey) == 0u)
|
| - window->SetLocalProperty(kUserWindowIdKey, next_id_++);
|
| -}
|
| -
|
| -void UserWindowControllerImpl::RemoveObservers(ui::Window* user_container) {
|
| - user_container->RemoveObserver(this);
|
| - user_container->window_tree()->RemoveObserver(this);
|
| - for (auto* iter : user_container->children())
|
| - iter->RemoveObserver(window_property_observer_.get());
|
| -}
|
| -
|
| -ui::Window* UserWindowControllerImpl::GetUserWindowById(uint32_t id) {
|
| - for (ui::Window* window : GetUserWindowContainer()->children()) {
|
| - if (window->GetLocalProperty(kUserWindowIdKey) == id)
|
| - return window;
|
| - }
|
| - return nullptr;
|
| -}
|
| -
|
| -ui::Window* UserWindowControllerImpl::GetUserWindowContainer() const {
|
| - WmWindowMus* window = root_controller_->GetWindowByShellWindowId(
|
| - kShellWindowId_DefaultContainer);
|
| - return window ? window->mus_window() : nullptr;
|
| -}
|
| -
|
| -void UserWindowControllerImpl::OnTreeChanging(const TreeChangeParams& params) {
|
| - DCHECK(root_controller_);
|
| - if (params.new_parent == GetUserWindowContainer()) {
|
| - params.target->AddObserver(window_property_observer_.get());
|
| - AssignIdIfNecessary(params.target);
|
| - if (user_window_observer_)
|
| - user_window_observer_->OnUserWindowAdded(GetUserWindow(params.target));
|
| - } else if (params.old_parent == GetUserWindowContainer()) {
|
| - params.target->RemoveObserver(window_property_observer_.get());
|
| - if (user_window_observer_)
|
| - user_window_observer_->OnUserWindowRemoved(
|
| - params.target->GetLocalProperty(kUserWindowIdKey));
|
| - }
|
| -}
|
| -
|
| -void UserWindowControllerImpl::OnWindowDestroying(ui::Window* window) {
|
| - if (window == GetUserWindowContainer())
|
| - RemoveObservers(window);
|
| -}
|
| -
|
| -void UserWindowControllerImpl::OnWindowTreeFocusChanged(
|
| - ui::Window* gained_focus,
|
| - ui::Window* lost_focus) {
|
| - if (!user_window_observer_)
|
| - return;
|
| -
|
| - // Treat focus in the user window hierarchy as focus of the top-level window.
|
| - gained_focus = GetTopLevelWindow(gained_focus, GetUserWindowContainer());
|
| - lost_focus = GetTopLevelWindow(lost_focus, GetUserWindowContainer());
|
| - if (gained_focus == lost_focus)
|
| - return;
|
| -
|
| - if (lost_focus) {
|
| - user_window_observer_->OnUserWindowFocusChanged(
|
| - lost_focus->GetLocalProperty(kUserWindowIdKey), false);
|
| - }
|
| - if (gained_focus) {
|
| - user_window_observer_->OnUserWindowFocusChanged(
|
| - gained_focus->GetLocalProperty(kUserWindowIdKey), true);
|
| - }
|
| -}
|
| -
|
| -void UserWindowControllerImpl::AddUserWindowObserver(
|
| - mojom::UserWindowObserverPtr observer) {
|
| - // TODO(msw): Support multiple observers.
|
| - user_window_observer_ = std::move(observer);
|
| -
|
| - const ui::Window::Children& windows = GetUserWindowContainer()->children();
|
| - mojo::Array<mojom::UserWindowPtr> user_windows =
|
| - mojo::Array<mojom::UserWindowPtr>::New(windows.size());
|
| - for (size_t i = 0; i < windows.size(); ++i)
|
| - user_windows[i] = GetUserWindow(windows[i]);
|
| - user_window_observer_->OnUserWindowObserverAdded(std::move(user_windows));
|
| -}
|
| -
|
| -void UserWindowControllerImpl::ActivateUserWindow(uint32_t window_id) {
|
| - ui::Window* window = GetUserWindowById(window_id);
|
| - if (window) {
|
| - window->SetVisible(true);
|
| - window->SetFocus();
|
| - }
|
| -}
|
| -
|
| -} // namespace mus
|
| -} // namespace ash
|
|
|