| Index: components/mus/ws/window_server.cc
|
| diff --git a/components/mus/ws/window_server.cc b/components/mus/ws/window_server.cc
|
| deleted file mode 100644
|
| index 77ef0e2595cf0366fadea9606cd8399f148a1b54..0000000000000000000000000000000000000000
|
| --- a/components/mus/ws/window_server.cc
|
| +++ /dev/null
|
| @@ -1,707 +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 "components/mus/ws/window_server.h"
|
| -
|
| -#include <set>
|
| -#include <string>
|
| -
|
| -#include "base/logging.h"
|
| -#include "base/memory/ptr_util.h"
|
| -#include "base/stl_util.h"
|
| -#include "components/mus/ws/display.h"
|
| -#include "components/mus/ws/display_binding.h"
|
| -#include "components/mus/ws/display_manager.h"
|
| -#include "components/mus/ws/operation.h"
|
| -#include "components/mus/ws/server_window.h"
|
| -#include "components/mus/ws/user_activity_monitor.h"
|
| -#include "components/mus/ws/window_coordinate_conversions.h"
|
| -#include "components/mus/ws/window_manager_access_policy.h"
|
| -#include "components/mus/ws/window_manager_display_root.h"
|
| -#include "components/mus/ws/window_manager_state.h"
|
| -#include "components/mus/ws/window_manager_window_tree_factory.h"
|
| -#include "components/mus/ws/window_server_delegate.h"
|
| -#include "components/mus/ws/window_tree.h"
|
| -#include "components/mus/ws/window_tree_binding.h"
|
| -#include "services/shell/public/cpp/connection.h"
|
| -#include "ui/gfx/geometry/size_conversions.h"
|
| -
|
| -namespace mus {
|
| -namespace ws {
|
| -
|
| -WindowServer::WindowServer(
|
| - WindowServerDelegate* delegate,
|
| - const scoped_refptr<mus::SurfacesState>& surfaces_state)
|
| - : delegate_(delegate),
|
| - surfaces_state_(surfaces_state),
|
| - next_client_id_(1),
|
| - display_manager_(new DisplayManager(this, &user_id_tracker_)),
|
| - current_operation_(nullptr),
|
| - in_destructor_(false),
|
| - next_wm_change_id_(0),
|
| - window_manager_window_tree_factory_set_(this, &user_id_tracker_) {
|
| - user_id_tracker_.AddObserver(this);
|
| - OnUserIdAdded(user_id_tracker_.active_id());
|
| -}
|
| -
|
| -WindowServer::~WindowServer() {
|
| - in_destructor_ = true;
|
| -
|
| - // Destroys the window trees results in querying for the display. Tear down
|
| - // the displays first so that the trees are notified of the display going
|
| - // away while the display is still valid.
|
| - display_manager_->DestroyAllDisplays();
|
| -
|
| - while (!tree_map_.empty())
|
| - DestroyTree(tree_map_.begin()->second.get());
|
| -
|
| - display_manager_.reset();
|
| -}
|
| -
|
| -ServerWindow* WindowServer::CreateServerWindow(
|
| - const WindowId& id,
|
| - const std::map<std::string, std::vector<uint8_t>>& properties) {
|
| - ServerWindow* window = new ServerWindow(this, id, properties);
|
| - window->AddObserver(this);
|
| - return window;
|
| -}
|
| -
|
| -ClientSpecificId WindowServer::GetAndAdvanceNextClientId() {
|
| - const ClientSpecificId id = next_client_id_++;
|
| - DCHECK_LT(id, next_client_id_);
|
| - return id;
|
| -}
|
| -
|
| -WindowTree* WindowServer::EmbedAtWindow(
|
| - ServerWindow* root,
|
| - const UserId& user_id,
|
| - mojom::WindowTreeClientPtr client,
|
| - uint32_t flags,
|
| - std::unique_ptr<AccessPolicy> access_policy) {
|
| - std::unique_ptr<WindowTree> tree_ptr(
|
| - new WindowTree(this, user_id, root, std::move(access_policy)));
|
| - WindowTree* tree = tree_ptr.get();
|
| - if (flags & mojom::kEmbedFlagEmbedderInterceptsEvents)
|
| - tree->set_embedder_intercepts_events();
|
| -
|
| - mojom::WindowTreePtr window_tree_ptr;
|
| - mojom::WindowTreeRequest window_tree_request = GetProxy(&window_tree_ptr);
|
| - std::unique_ptr<WindowTreeBinding> binding =
|
| - delegate_->CreateWindowTreeBinding(
|
| - WindowServerDelegate::BindingType::EMBED, this, tree,
|
| - &window_tree_request, &client);
|
| - if (!binding) {
|
| - binding.reset(new ws::DefaultWindowTreeBinding(
|
| - tree, this, std::move(window_tree_request), std::move(client)));
|
| - }
|
| -
|
| - AddTree(std::move(tree_ptr), std::move(binding), std::move(window_tree_ptr));
|
| - OnTreeMessagedClient(tree->id());
|
| - return tree;
|
| -}
|
| -
|
| -void WindowServer::AddTree(std::unique_ptr<WindowTree> tree_impl_ptr,
|
| - std::unique_ptr<WindowTreeBinding> binding,
|
| - mojom::WindowTreePtr tree_ptr) {
|
| - CHECK_EQ(0u, tree_map_.count(tree_impl_ptr->id()));
|
| - WindowTree* tree = tree_impl_ptr.get();
|
| - tree_map_[tree->id()] = std::move(tree_impl_ptr);
|
| - tree->Init(std::move(binding), std::move(tree_ptr));
|
| -}
|
| -
|
| -WindowTree* WindowServer::CreateTreeForWindowManager(
|
| - const UserId& user_id,
|
| - mojom::WindowTreeRequest window_tree_request,
|
| - mojom::WindowTreeClientPtr window_tree_client) {
|
| - std::unique_ptr<WindowTree> window_tree(new WindowTree(
|
| - this, user_id, nullptr, base::WrapUnique(new WindowManagerAccessPolicy)));
|
| - std::unique_ptr<WindowTreeBinding> window_tree_binding =
|
| - delegate_->CreateWindowTreeBinding(
|
| - WindowServerDelegate::BindingType::WINDOW_MANAGER, this,
|
| - window_tree.get(), &window_tree_request, &window_tree_client);
|
| - if (!window_tree_binding) {
|
| - window_tree_binding.reset(new DefaultWindowTreeBinding(
|
| - window_tree.get(), this, std::move(window_tree_request),
|
| - std::move(window_tree_client)));
|
| - }
|
| - WindowTree* window_tree_ptr = window_tree.get();
|
| - AddTree(std::move(window_tree), std::move(window_tree_binding), nullptr);
|
| - window_tree_ptr->ConfigureWindowManager();
|
| - return window_tree_ptr;
|
| -}
|
| -
|
| -void WindowServer::DestroyTree(WindowTree* tree) {
|
| - std::unique_ptr<WindowTree> tree_ptr;
|
| - {
|
| - auto iter = tree_map_.find(tree->id());
|
| - DCHECK(iter != tree_map_.end());
|
| - tree_ptr = std::move(iter->second);
|
| - tree_map_.erase(iter);
|
| - }
|
| -
|
| - // Notify remaining connections so that they can cleanup.
|
| - for (auto& pair : tree_map_)
|
| - pair.second->OnWindowDestroyingTreeImpl(tree);
|
| -
|
| - // Notify the hosts, taking care to only notify each host once.
|
| - std::set<Display*> displays_notified;
|
| - for (auto* root : tree->roots()) {
|
| - // WindowTree holds its roots as a const, which is right as WindowTree
|
| - // doesn't need to modify the window. OTOH we do. We could look up the
|
| - // window using the id to get non-const version, but instead we cast.
|
| - Display* display =
|
| - display_manager_->GetDisplayContaining(const_cast<ServerWindow*>(root));
|
| - if (display && displays_notified.count(display) == 0) {
|
| - display->OnWillDestroyTree(tree);
|
| - displays_notified.insert(display);
|
| - }
|
| - }
|
| -
|
| - window_manager_window_tree_factory_set_.DeleteFactoryAssociatedWithTree(tree);
|
| -
|
| - // Remove any requests from the client that resulted in a call to the window
|
| - // manager and we haven't gotten a response back yet.
|
| - std::set<uint32_t> to_remove;
|
| - for (auto& pair : in_flight_wm_change_map_) {
|
| - if (pair.second.client_id == tree->id())
|
| - to_remove.insert(pair.first);
|
| - }
|
| - for (uint32_t id : to_remove)
|
| - in_flight_wm_change_map_.erase(id);
|
| -}
|
| -
|
| -WindowTree* WindowServer::GetTreeWithId(ClientSpecificId client_id) {
|
| - auto iter = tree_map_.find(client_id);
|
| - return iter == tree_map_.end() ? nullptr : iter->second.get();
|
| -}
|
| -
|
| -WindowTree* WindowServer::GetTreeWithClientName(
|
| - const std::string& client_name) {
|
| - for (const auto& entry : tree_map_) {
|
| - if (entry.second->name() == client_name)
|
| - return entry.second.get();
|
| - }
|
| - return nullptr;
|
| -}
|
| -
|
| -ServerWindow* WindowServer::GetWindow(const WindowId& id) {
|
| - // kInvalidClientId is used for Display and WindowManager nodes.
|
| - if (id.client_id == kInvalidClientId) {
|
| - for (Display* display : display_manager_->displays()) {
|
| - ServerWindow* window = display->GetRootWithId(id);
|
| - if (window)
|
| - return window;
|
| - }
|
| - }
|
| - WindowTree* tree = GetTreeWithId(id.client_id);
|
| - return tree ? tree->GetWindow(id) : nullptr;
|
| -}
|
| -
|
| -void WindowServer::SchedulePaint(ServerWindow* window,
|
| - const gfx::Rect& bounds) {
|
| - Display* display = display_manager_->GetDisplayContaining(window);
|
| - if (display)
|
| - display->SchedulePaint(window, bounds);
|
| -}
|
| -
|
| -void WindowServer::OnTreeMessagedClient(ClientSpecificId id) {
|
| - if (current_operation_)
|
| - current_operation_->MarkTreeAsMessaged(id);
|
| -}
|
| -
|
| -bool WindowServer::DidTreeMessageClient(ClientSpecificId id) const {
|
| - return current_operation_ && current_operation_->DidMessageTree(id);
|
| -}
|
| -
|
| -const WindowTree* WindowServer::GetTreeWithRoot(
|
| - const ServerWindow* window) const {
|
| - if (!window)
|
| - return nullptr;
|
| - for (auto& pair : tree_map_) {
|
| - if (pair.second->HasRoot(window))
|
| - return pair.second.get();
|
| - }
|
| - return nullptr;
|
| -}
|
| -
|
| -void WindowServer::OnFirstWindowManagerWindowTreeFactoryReady() {
|
| - if (display_manager_->has_active_or_pending_displays())
|
| - return;
|
| -
|
| - // We've been supplied a WindowManagerFactory and no displays have been
|
| - // created yet. Treat this as a signal to create a Display.
|
| - // TODO(sky): we need a better way to determine this, most likely a switch.
|
| - delegate_->CreateDefaultDisplays();
|
| -}
|
| -
|
| -UserActivityMonitor* WindowServer::GetUserActivityMonitorForUser(
|
| - const UserId& user_id) {
|
| - DCHECK_GT(activity_monitor_map_.count(user_id), 0u);
|
| - return activity_monitor_map_[user_id].get();
|
| -}
|
| -
|
| -bool WindowServer::SetFocusedWindow(ServerWindow* window) {
|
| - // TODO(sky): this should fail if there is modal dialog active and |window|
|
| - // is outside that.
|
| - ServerWindow* currently_focused = GetFocusedWindow();
|
| - Display* focused_display =
|
| - currently_focused
|
| - ? display_manager_->GetDisplayContaining(currently_focused)
|
| - : nullptr;
|
| - if (!window)
|
| - return focused_display ? focused_display->SetFocusedWindow(nullptr) : true;
|
| -
|
| - Display* display = display_manager_->GetDisplayContaining(window);
|
| - DCHECK(display); // It's assumed callers do validation before calling this.
|
| - const bool result = display->SetFocusedWindow(window);
|
| - // If the focus actually changed, and focus was in another display, then we
|
| - // need to notify the previously focused display so that it cleans up state
|
| - // and notifies appropriately.
|
| - if (result && display->GetFocusedWindow() && display != focused_display &&
|
| - focused_display) {
|
| - const bool cleared_focus = focused_display->SetFocusedWindow(nullptr);
|
| - DCHECK(cleared_focus);
|
| - }
|
| - return result;
|
| -}
|
| -
|
| -ServerWindow* WindowServer::GetFocusedWindow() {
|
| - for (Display* display : display_manager_->displays()) {
|
| - ServerWindow* focused_window = display->GetFocusedWindow();
|
| - if (focused_window)
|
| - return focused_window;
|
| - }
|
| - return nullptr;
|
| -}
|
| -
|
| -uint32_t WindowServer::GenerateWindowManagerChangeId(
|
| - WindowTree* source,
|
| - uint32_t client_change_id) {
|
| - const uint32_t wm_change_id = next_wm_change_id_++;
|
| - in_flight_wm_change_map_[wm_change_id] = {source->id(), client_change_id};
|
| - return wm_change_id;
|
| -}
|
| -
|
| -void WindowServer::WindowManagerChangeCompleted(
|
| - uint32_t window_manager_change_id,
|
| - bool success) {
|
| - InFlightWindowManagerChange change;
|
| - if (!GetAndClearInFlightWindowManagerChange(window_manager_change_id,
|
| - &change)) {
|
| - return;
|
| - }
|
| -
|
| - WindowTree* tree = GetTreeWithId(change.client_id);
|
| - tree->OnChangeCompleted(change.client_change_id, success);
|
| -}
|
| -
|
| -void WindowServer::WindowManagerCreatedTopLevelWindow(
|
| - WindowTree* wm_tree,
|
| - uint32_t window_manager_change_id,
|
| - const ServerWindow* window) {
|
| - InFlightWindowManagerChange change;
|
| - if (!GetAndClearInFlightWindowManagerChange(window_manager_change_id,
|
| - &change)) {
|
| - return;
|
| - }
|
| - if (!window) {
|
| - WindowManagerSentBogusMessage();
|
| - return;
|
| - }
|
| -
|
| - WindowTree* tree = GetTreeWithId(change.client_id);
|
| - // The window manager should have created the window already, and it should
|
| - // be ready for embedding.
|
| - if (!tree->IsWaitingForNewTopLevelWindow(window_manager_change_id) ||
|
| - !window || window->id().client_id != wm_tree->id() ||
|
| - !window->children().empty() || GetTreeWithRoot(window)) {
|
| - WindowManagerSentBogusMessage();
|
| - return;
|
| - }
|
| -
|
| - tree->OnWindowManagerCreatedTopLevelWindow(window_manager_change_id,
|
| - change.client_change_id, window);
|
| -}
|
| -
|
| -void WindowServer::ProcessWindowBoundsChanged(const ServerWindow* window,
|
| - const gfx::Rect& old_bounds,
|
| - const gfx::Rect& new_bounds) {
|
| - for (auto& pair : tree_map_) {
|
| - pair.second->ProcessWindowBoundsChanged(window, old_bounds, new_bounds,
|
| - IsOperationSource(pair.first));
|
| - }
|
| -}
|
| -
|
| -void WindowServer::ProcessClientAreaChanged(
|
| - const ServerWindow* window,
|
| - const gfx::Insets& new_client_area,
|
| - const std::vector<gfx::Rect>& new_additional_client_areas) {
|
| - for (auto& pair : tree_map_) {
|
| - pair.second->ProcessClientAreaChanged(window, new_client_area,
|
| - new_additional_client_areas,
|
| - IsOperationSource(pair.first));
|
| - }
|
| -}
|
| -
|
| -void WindowServer::ProcessLostCapture(const ServerWindow* window) {
|
| - for (auto& pair : tree_map_)
|
| - pair.second->ProcessLostCapture(window, IsOperationSource(pair.first));
|
| -}
|
| -
|
| -void WindowServer::ProcessWillChangeWindowHierarchy(
|
| - const ServerWindow* window,
|
| - const ServerWindow* new_parent,
|
| - const ServerWindow* old_parent) {
|
| - for (auto& pair : tree_map_) {
|
| - pair.second->ProcessWillChangeWindowHierarchy(
|
| - window, new_parent, old_parent, IsOperationSource(pair.first));
|
| - }
|
| -}
|
| -
|
| -void WindowServer::ProcessWindowHierarchyChanged(
|
| - const ServerWindow* window,
|
| - const ServerWindow* new_parent,
|
| - const ServerWindow* old_parent) {
|
| - for (auto& pair : tree_map_) {
|
| - pair.second->ProcessWindowHierarchyChanged(window, new_parent, old_parent,
|
| - IsOperationSource(pair.first));
|
| - }
|
| -}
|
| -
|
| -void WindowServer::ProcessWindowReorder(const ServerWindow* window,
|
| - const ServerWindow* relative_window,
|
| - const mojom::OrderDirection direction) {
|
| - // We'll probably do a bit of reshuffling when we add a transient window.
|
| - if ((current_operation_type() == OperationType::ADD_TRANSIENT_WINDOW) ||
|
| - (current_operation_type() ==
|
| - OperationType::REMOVE_TRANSIENT_WINDOW_FROM_PARENT)) {
|
| - return;
|
| - }
|
| - for (auto& pair : tree_map_) {
|
| - pair.second->ProcessWindowReorder(window, relative_window, direction,
|
| - IsOperationSource(pair.first));
|
| - }
|
| -}
|
| -
|
| -void WindowServer::ProcessWindowDeleted(const ServerWindow* window) {
|
| - for (auto& pair : tree_map_)
|
| - pair.second->ProcessWindowDeleted(window, IsOperationSource(pair.first));
|
| -}
|
| -
|
| -void WindowServer::ProcessWillChangeWindowPredefinedCursor(ServerWindow* window,
|
| - int32_t cursor_id) {
|
| - for (auto& pair : tree_map_) {
|
| - pair.second->ProcessCursorChanged(window, cursor_id,
|
| - IsOperationSource(pair.first));
|
| - }
|
| -}
|
| -
|
| -void WindowServer::SendToEventObservers(const ui::Event& event,
|
| - const UserId& user_id,
|
| - WindowTree* ignore_tree) {
|
| - for (auto& pair : tree_map_) {
|
| - WindowTree* tree = pair.second.get();
|
| - if (tree->user_id() == user_id && tree != ignore_tree)
|
| - tree->SendToEventObserver(event);
|
| - }
|
| -}
|
| -
|
| -void WindowServer::SetPaintCallback(
|
| - const base::Callback<void(ServerWindow*)>& callback) {
|
| - DCHECK(delegate_->IsTestConfig()) << "Paint callbacks are expensive, and "
|
| - << "allowed only in tests.";
|
| - DCHECK(window_paint_callback_.is_null() || callback.is_null());
|
| - window_paint_callback_ = callback;
|
| -}
|
| -
|
| -bool WindowServer::GetAndClearInFlightWindowManagerChange(
|
| - uint32_t window_manager_change_id,
|
| - InFlightWindowManagerChange* change) {
|
| - // There are valid reasons as to why we wouldn't know about the id. The
|
| - // most likely is the client disconnected before the response from the window
|
| - // manager came back.
|
| - auto iter = in_flight_wm_change_map_.find(window_manager_change_id);
|
| - if (iter == in_flight_wm_change_map_.end())
|
| - return false;
|
| -
|
| - *change = iter->second;
|
| - in_flight_wm_change_map_.erase(iter);
|
| - return true;
|
| -}
|
| -
|
| -void WindowServer::PrepareForOperation(Operation* op) {
|
| - // Should only ever have one change in flight.
|
| - CHECK(!current_operation_);
|
| - current_operation_ = op;
|
| -}
|
| -
|
| -void WindowServer::FinishOperation() {
|
| - // PrepareForOperation/FinishOperation should be balanced.
|
| - CHECK(current_operation_);
|
| - current_operation_ = nullptr;
|
| -}
|
| -
|
| -void WindowServer::UpdateNativeCursorFromMouseLocation(ServerWindow* window) {
|
| - WindowManagerDisplayRoot* display_root =
|
| - display_manager_->GetWindowManagerDisplayRoot(window);
|
| - if (display_root) {
|
| - EventDispatcher* event_dispatcher =
|
| - display_root->window_manager_state()->event_dispatcher();
|
| - event_dispatcher->UpdateCursorProviderByLastKnownLocation();
|
| - int32_t cursor_id = 0;
|
| - if (event_dispatcher->GetCurrentMouseCursor(&cursor_id))
|
| - display_root->display()->UpdateNativeCursor(cursor_id);
|
| - }
|
| -}
|
| -
|
| -void WindowServer::UpdateNativeCursorIfOver(ServerWindow* window) {
|
| - WindowManagerDisplayRoot* display_root =
|
| - display_manager_->GetWindowManagerDisplayRoot(window);
|
| - if (!display_root)
|
| - return;
|
| -
|
| - EventDispatcher* event_dispatcher =
|
| - display_root->window_manager_state()->event_dispatcher();
|
| - if (window != event_dispatcher->mouse_cursor_source_window())
|
| - return;
|
| -
|
| - event_dispatcher->UpdateNonClientAreaForCurrentWindow();
|
| - int32_t cursor_id = 0;
|
| - if (event_dispatcher->GetCurrentMouseCursor(&cursor_id))
|
| - display_root->display()->UpdateNativeCursor(cursor_id);
|
| -}
|
| -
|
| -mus::SurfacesState* WindowServer::GetSurfacesState() {
|
| - return surfaces_state_.get();
|
| -}
|
| -
|
| -void WindowServer::OnScheduleWindowPaint(ServerWindow* window) {
|
| - if (in_destructor_)
|
| - return;
|
| -
|
| - SchedulePaint(window, gfx::Rect(window->bounds().size()));
|
| - if (!window_paint_callback_.is_null())
|
| - window_paint_callback_.Run(window);
|
| -}
|
| -
|
| -const ServerWindow* WindowServer::GetRootWindow(
|
| - const ServerWindow* window) const {
|
| - const Display* display = display_manager_->GetDisplayContaining(window);
|
| - return display ? display->root_window() : nullptr;
|
| -}
|
| -
|
| -void WindowServer::ScheduleSurfaceDestruction(ServerWindow* window) {
|
| - Display* display = display_manager_->GetDisplayContaining(window);
|
| - if (display)
|
| - display->ScheduleSurfaceDestruction(window);
|
| -}
|
| -
|
| -void WindowServer::OnWindowDestroyed(ServerWindow* window) {
|
| - ProcessWindowDeleted(window);
|
| -}
|
| -
|
| -void WindowServer::OnWillChangeWindowHierarchy(ServerWindow* window,
|
| - ServerWindow* new_parent,
|
| - ServerWindow* old_parent) {
|
| - if (in_destructor_)
|
| - return;
|
| -
|
| - ProcessWillChangeWindowHierarchy(window, new_parent, old_parent);
|
| -}
|
| -
|
| -void WindowServer::OnWindowHierarchyChanged(ServerWindow* window,
|
| - ServerWindow* new_parent,
|
| - ServerWindow* old_parent) {
|
| - if (in_destructor_)
|
| - return;
|
| -
|
| - WindowManagerDisplayRoot* display_root =
|
| - display_manager_->GetWindowManagerDisplayRoot(window);
|
| - if (display_root)
|
| - display_root->window_manager_state()
|
| - ->ReleaseCaptureBlockedByAnyModalWindow();
|
| -
|
| - ProcessWindowHierarchyChanged(window, new_parent, old_parent);
|
| -
|
| - // TODO(beng): optimize.
|
| - if (old_parent)
|
| - SchedulePaint(old_parent, gfx::Rect(old_parent->bounds().size()));
|
| - if (new_parent)
|
| - SchedulePaint(new_parent, gfx::Rect(new_parent->bounds().size()));
|
| -
|
| - UpdateNativeCursorFromMouseLocation(window);
|
| -}
|
| -
|
| -void WindowServer::OnWindowBoundsChanged(ServerWindow* window,
|
| - const gfx::Rect& old_bounds,
|
| - const gfx::Rect& new_bounds) {
|
| - if (in_destructor_)
|
| - return;
|
| -
|
| - ProcessWindowBoundsChanged(window, old_bounds, new_bounds);
|
| - if (!window->parent())
|
| - return;
|
| -
|
| - SchedulePaint(window->parent(), old_bounds);
|
| - SchedulePaint(window->parent(), new_bounds);
|
| -
|
| - UpdateNativeCursorFromMouseLocation(window);
|
| -}
|
| -
|
| -void WindowServer::OnWindowClientAreaChanged(
|
| - ServerWindow* window,
|
| - const gfx::Insets& new_client_area,
|
| - const std::vector<gfx::Rect>& new_additional_client_areas) {
|
| - if (in_destructor_)
|
| - return;
|
| -
|
| - ProcessClientAreaChanged(window, new_client_area,
|
| - new_additional_client_areas);
|
| -
|
| - UpdateNativeCursorIfOver(window);
|
| -}
|
| -
|
| -void WindowServer::OnWindowReordered(ServerWindow* window,
|
| - ServerWindow* relative,
|
| - mojom::OrderDirection direction) {
|
| - ProcessWindowReorder(window, relative, direction);
|
| - if (!in_destructor_)
|
| - SchedulePaint(window, gfx::Rect(window->bounds().size()));
|
| - UpdateNativeCursorFromMouseLocation(window);
|
| -}
|
| -
|
| -void WindowServer::OnWillChangeWindowVisibility(ServerWindow* window) {
|
| - if (in_destructor_)
|
| - return;
|
| -
|
| - // Need to repaint if the window was drawn (which means it's in the process of
|
| - // hiding) or the window is transitioning to drawn.
|
| - if (window->parent() &&
|
| - (window->IsDrawn() ||
|
| - (!window->visible() && window->parent()->IsDrawn()))) {
|
| - SchedulePaint(window->parent(), window->bounds());
|
| - }
|
| -
|
| - for (auto& pair : tree_map_) {
|
| - pair.second->ProcessWillChangeWindowVisibility(
|
| - window, IsOperationSource(pair.first));
|
| - }
|
| -}
|
| -
|
| -void WindowServer::OnWindowOpacityChanged(ServerWindow* window,
|
| - float old_opacity,
|
| - float new_opacity) {
|
| - DCHECK(!in_destructor_);
|
| -
|
| - for (auto& pair : tree_map_) {
|
| - pair.second->ProcessWindowOpacityChanged(window, old_opacity, new_opacity,
|
| - IsOperationSource(pair.first));
|
| - }
|
| -}
|
| -
|
| -void WindowServer::OnWindowVisibilityChanged(ServerWindow* window) {
|
| - if (in_destructor_)
|
| - return;
|
| -
|
| - WindowManagerDisplayRoot* display_root =
|
| - display_manager_->GetWindowManagerDisplayRoot(window);
|
| - if (display_root)
|
| - display_root->window_manager_state()->ReleaseCaptureBlockedByModalWindow(
|
| - window);
|
| -}
|
| -
|
| -void WindowServer::OnWindowPredefinedCursorChanged(ServerWindow* window,
|
| - int32_t cursor_id) {
|
| - if (in_destructor_)
|
| - return;
|
| -
|
| - ProcessWillChangeWindowPredefinedCursor(window, cursor_id);
|
| -
|
| - UpdateNativeCursorIfOver(window);
|
| -}
|
| -
|
| -void WindowServer::OnWindowNonClientCursorChanged(ServerWindow* window,
|
| - int32_t cursor_id) {
|
| - if (in_destructor_)
|
| - return;
|
| -
|
| - UpdateNativeCursorIfOver(window);
|
| -}
|
| -
|
| -void WindowServer::OnWindowSharedPropertyChanged(
|
| - ServerWindow* window,
|
| - const std::string& name,
|
| - const std::vector<uint8_t>* new_data) {
|
| - for (auto& pair : tree_map_) {
|
| - pair.second->ProcessWindowPropertyChanged(window, name, new_data,
|
| - IsOperationSource(pair.first));
|
| - }
|
| -}
|
| -
|
| -void WindowServer::OnWindowTextInputStateChanged(
|
| - ServerWindow* window,
|
| - const ui::TextInputState& state) {
|
| - Display* display = display_manager_->GetDisplayContaining(window);
|
| - display->UpdateTextInputState(window, state);
|
| -}
|
| -
|
| -void WindowServer::OnTransientWindowAdded(ServerWindow* window,
|
| - ServerWindow* transient_child) {
|
| - for (auto& pair : tree_map_) {
|
| - pair.second->ProcessTransientWindowAdded(window, transient_child,
|
| - IsOperationSource(pair.first));
|
| - }
|
| -}
|
| -
|
| -void WindowServer::OnTransientWindowRemoved(ServerWindow* window,
|
| - ServerWindow* transient_child) {
|
| - // If we're deleting a window, then this is a superfluous message.
|
| - if (current_operation_type() == OperationType::DELETE_WINDOW)
|
| - return;
|
| - for (auto& pair : tree_map_) {
|
| - pair.second->ProcessTransientWindowRemoved(window, transient_child,
|
| - IsOperationSource(pair.first));
|
| - }
|
| -}
|
| -
|
| -void WindowServer::OnFirstDisplayReady() {
|
| - delegate_->OnFirstDisplayReady();
|
| -}
|
| -
|
| -void WindowServer::OnNoMoreDisplays() {
|
| - delegate_->OnNoMoreDisplays();
|
| -}
|
| -
|
| -bool WindowServer::GetFrameDecorationsForUser(
|
| - const UserId& user_id,
|
| - mojom::FrameDecorationValuesPtr* values) {
|
| - WindowManagerState* window_manager_state =
|
| - window_manager_window_tree_factory_set_.GetWindowManagerStateForUser(
|
| - user_id);
|
| - if (!window_manager_state)
|
| - return false;
|
| - if (values && window_manager_state->got_frame_decoration_values())
|
| - *values = window_manager_state->frame_decoration_values().Clone();
|
| - return window_manager_state->got_frame_decoration_values();
|
| -}
|
| -
|
| -WindowManagerState* WindowServer::GetWindowManagerStateForUser(
|
| - const UserId& user_id) {
|
| - return window_manager_window_tree_factory_set_.GetWindowManagerStateForUser(
|
| - user_id);
|
| -}
|
| -
|
| -void WindowServer::OnActiveUserIdChanged(const UserId& previously_active_id,
|
| - const UserId& active_id) {}
|
| -
|
| -void WindowServer::OnUserIdAdded(const UserId& id) {
|
| - activity_monitor_map_[id] = base::MakeUnique<UserActivityMonitor>(nullptr);
|
| -}
|
| -
|
| -void WindowServer::OnUserIdRemoved(const UserId& id) {
|
| - activity_monitor_map_.erase(id);
|
| -}
|
| -
|
| -} // namespace ws
|
| -} // namespace mus
|
|
|