Index: ui/views/mus/window_manager_connection.cc |
diff --git a/ui/views/mus/window_manager_connection.cc b/ui/views/mus/window_manager_connection.cc |
deleted file mode 100644 |
index 16fae1a900501bb28349dd8ef4321c4f08417164..0000000000000000000000000000000000000000 |
--- a/ui/views/mus/window_manager_connection.cc |
+++ /dev/null |
@@ -1,235 +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 "ui/views/mus/window_manager_connection.h" |
- |
-#include <algorithm> |
-#include <set> |
-#include <utility> |
- |
-#include "base/lazy_instance.h" |
-#include "base/memory/ptr_util.h" |
-#include "base/threading/thread_local.h" |
-#include "services/service_manager/public/cpp/connection.h" |
-#include "services/service_manager/public/cpp/connector.h" |
-#include "services/ui/public/cpp/gpu/gpu.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 "services/ui/public/interfaces/event_matcher.mojom.h" |
-#include "services/ui/public/interfaces/window_tree.mojom.h" |
-#include "ui/aura/env.h" |
-#include "ui/aura/mus/os_exchange_data_provider_mus.h" |
-#include "ui/views/mus/clipboard_mus.h" |
-#include "ui/views/mus/native_widget_mus.h" |
-#include "ui/views/mus/pointer_watcher_event_router.h" |
-#include "ui/views/mus/screen_mus.h" |
-#include "ui/views/mus/surface_context_factory.h" |
-#include "ui/views/pointer_watcher.h" |
-#include "ui/views/views_delegate.h" |
- |
-namespace views { |
-namespace { |
- |
-using WindowManagerConnectionPtr = |
- base::ThreadLocalPointer<views::WindowManagerConnection>; |
- |
-// Env is thread local so that aura may be used on multiple threads. |
-base::LazyInstance<WindowManagerConnectionPtr>::Leaky lazy_tls_ptr = |
- LAZY_INSTANCE_INITIALIZER; |
- |
-// Recursively finds the deepest visible window from |windows| that contains |
-// |screen_point|, when offsetting by the display origins from |
-// |display_origins|. |
-ui::Window* GetWindowFrom(const std::map<int64_t, gfx::Point>& display_origins, |
- const std::vector<ui::Window*>& windows, |
- const gfx::Point& screen_point) { |
- for (ui::Window* window : windows) { |
- if (!window->visible()) |
- continue; |
- |
- auto it = display_origins.find(window->display_id()); |
- if (it == display_origins.end()) |
- continue; |
- |
- gfx::Rect bounds_in_screen = window->GetBoundsInRoot(); |
- bounds_in_screen.Offset(it->second.x(), it->second.y()); |
- |
- if (bounds_in_screen.Contains(screen_point)) { |
- if (!window->children().empty()) { |
- ui::Window* child = |
- GetWindowFrom(display_origins, window->children(), screen_point); |
- if (child) |
- return child; |
- } |
- |
- return window; |
- } |
- } |
- return nullptr; |
-} |
- |
-aura::Window* GetAuraWindowFromUiWindow(ui::Window* window) { |
- if (!window) |
- return nullptr; |
- NativeWidgetMus* nw_mus = NativeWidgetMus::GetForWindow(window); |
- return nw_mus |
- ? static_cast<internal::NativeWidgetPrivate*>(nw_mus) |
- ->GetNativeView() |
- : nullptr; |
-} |
- |
-} // namespace |
- |
-WindowManagerConnection::~WindowManagerConnection() { |
- // ~WindowTreeClient calls back to us (we're its delegate), destroy it while |
- // we are still valid. |
- client_.reset(); |
- ui::OSExchangeDataProviderFactory::SetFactory(nullptr); |
- ui::Clipboard::DestroyClipboardForCurrentThread(); |
- gpu_.reset(); |
- lazy_tls_ptr.Pointer()->Set(nullptr); |
- |
- if (ViewsDelegate::GetInstance()) { |
- ViewsDelegate::GetInstance()->set_native_widget_factory( |
- ViewsDelegate::NativeWidgetFactory()); |
- } |
-} |
- |
-// static |
-std::unique_ptr<WindowManagerConnection> WindowManagerConnection::Create( |
- service_manager::Connector* connector, |
- const service_manager::Identity& identity, |
- scoped_refptr<base::SingleThreadTaskRunner> task_runner) { |
- DCHECK(!lazy_tls_ptr.Pointer()->Get()); |
- WindowManagerConnection* connection = |
- new WindowManagerConnection(connector, identity, std::move(task_runner)); |
- DCHECK(lazy_tls_ptr.Pointer()->Get()); |
- return base::WrapUnique(connection); |
-} |
- |
-// static |
-WindowManagerConnection* WindowManagerConnection::Get() { |
- WindowManagerConnection* connection = lazy_tls_ptr.Pointer()->Get(); |
- DCHECK(connection); |
- return connection; |
-} |
- |
-// static |
-bool WindowManagerConnection::Exists() { |
- return !!lazy_tls_ptr.Pointer()->Get(); |
-} |
- |
-ui::Window* WindowManagerConnection::NewTopLevelWindow( |
- const std::map<std::string, std::vector<uint8_t>>& properties) { |
- return client_->NewTopLevelWindow(&properties); |
-} |
- |
-NativeWidget* WindowManagerConnection::CreateNativeWidgetMus( |
- const std::map<std::string, std::vector<uint8_t>>& props, |
- const Widget::InitParams& init_params, |
- internal::NativeWidgetDelegate* delegate) { |
- // TYPE_CONTROL widgets require a NativeWidgetAura. So we let this fall |
- // through, so that the default NativeWidgetPrivate::CreateNativeWidget() is |
- // used instead. |
- if (init_params.type == Widget::InitParams::TYPE_CONTROL) |
- return nullptr; |
- std::map<std::string, std::vector<uint8_t>> properties = props; |
- NativeWidgetMus::ConfigurePropertiesForNewWindow(init_params, &properties); |
- properties[ui::mojom::WindowManager::kAppID_Property] = |
- mojo::ConvertTo<std::vector<uint8_t>>(identity_.name()); |
- return new NativeWidgetMus(delegate, NewTopLevelWindow(properties), |
- ui::mojom::CompositorFrameSinkType::DEFAULT); |
-} |
- |
-const std::set<ui::Window*>& WindowManagerConnection::GetRoots() const { |
- return client_->GetRoots(); |
-} |
- |
-WindowManagerConnection::WindowManagerConnection( |
- service_manager::Connector* connector, |
- const service_manager::Identity& identity, |
- scoped_refptr<base::SingleThreadTaskRunner> task_runner) |
- : connector_(connector), identity_(identity) { |
- lazy_tls_ptr.Pointer()->Set(this); |
- |
- gpu_ = ui::Gpu::Create(connector, std::move(task_runner)); |
- compositor_context_factory_ = |
- base::MakeUnique<views::SurfaceContextFactory>(gpu_.get()); |
- aura::Env::GetInstance()->set_context_factory( |
- compositor_context_factory_.get()); |
- client_ = base::MakeUnique<ui::WindowTreeClient>(this, nullptr, nullptr); |
- client_->ConnectViaWindowTreeFactory(connector_); |
- |
- pointer_watcher_event_router_ = |
- base::MakeUnique<PointerWatcherEventRouter>(client_.get()); |
- |
- screen_ = base::MakeUnique<ScreenMus>(this); |
- screen_->Init(connector); |
- |
- std::unique_ptr<ClipboardMus> clipboard = base::MakeUnique<ClipboardMus>(); |
- clipboard->Init(connector); |
- ui::Clipboard::SetClipboardForCurrentThread(std::move(clipboard)); |
- |
- ui::OSExchangeDataProviderFactory::SetFactory(this); |
- |
- ViewsDelegate::GetInstance()->set_native_widget_factory(base::Bind( |
- &WindowManagerConnection::CreateNativeWidgetMus, |
- base::Unretained(this), |
- std::map<std::string, std::vector<uint8_t>>())); |
-} |
- |
-ui::Window* WindowManagerConnection::GetUiWindowAtScreenPoint( |
- const gfx::Point& point) { |
- std::map<int64_t, gfx::Point> display_origins; |
- for (const display::Display& d : |
- display::Screen::GetScreen()->GetAllDisplays()) |
- display_origins[d.id()] = d.bounds().origin(); |
- |
- const std::set<ui::Window*>& roots = GetRoots(); |
- std::vector<ui::Window*> windows; |
- std::copy(roots.begin(), roots.end(), std::back_inserter(windows)); |
- return GetWindowFrom(display_origins, windows, point); |
-} |
- |
-void WindowManagerConnection::OnEmbed(ui::Window* root) {} |
- |
-void WindowManagerConnection::OnLostConnection(ui::WindowTreeClient* client) { |
- DCHECK_EQ(client, client_.get()); |
- client_.reset(); |
-} |
- |
-void WindowManagerConnection::OnEmbedRootDestroyed(ui::Window* root) { |
- // Not called for WindowManagerConnection as WindowTreeClient isn't created by |
- // way of an Embed(). |
- NOTREACHED(); |
-} |
- |
-void WindowManagerConnection::OnPointerEventObserved( |
- const ui::PointerEvent& event, |
- ui::Window* target) { |
- pointer_watcher_event_router_->OnPointerEventObserved(event, target); |
-} |
- |
-void WindowManagerConnection::OnWindowManagerFrameValuesChanged() { |
- if (client_) |
- NativeWidgetMus::NotifyFrameChanged(client_.get()); |
-} |
- |
-gfx::Point WindowManagerConnection::GetCursorScreenPoint() { |
- return client_->GetCursorScreenPoint(); |
-} |
- |
-aura::Window* WindowManagerConnection::GetWindowAtScreenPoint( |
- const gfx::Point& point) { |
- return GetAuraWindowFromUiWindow(GetUiWindowAtScreenPoint(point)); |
-} |
- |
-std::unique_ptr<OSExchangeData::Provider> |
-WindowManagerConnection::BuildProvider() { |
- return base::MakeUnique<aura::OSExchangeDataProviderMus>(); |
-} |
- |
-} // namespace views |