Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1309)

Unified Diff: ui/aura/window_tree_host.cc

Issue 184903003: Window ownership -> WindowTreeHost (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/aura/window_tree_host.h ('k') | ui/aura/window_tree_host_win.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/aura/window_tree_host.cc
diff --git a/ui/aura/window_tree_host.cc b/ui/aura/window_tree_host.cc
index fd3d2174305cbc9beef5c2c74b5ee46419dc5bfb..ebaf15c1755cdc7178e38e22302934fc97d6c787 100644
--- a/ui/aura/window_tree_host.cc
+++ b/ui/aura/window_tree_host.cc
@@ -9,7 +9,9 @@
#include "ui/aura/root_window_transformer.h"
#include "ui/aura/window.h"
#include "ui/aura/window_event_dispatcher.h"
+#include "ui/aura/window_targeter.h"
#include "ui/aura/window_tree_host_delegate.h"
+#include "ui/base/view_prop.h"
#include "ui/compositor/dip_util.h"
#include "ui/compositor/layer.h"
#include "ui/gfx/display.h"
@@ -22,6 +24,9 @@
namespace aura {
+const char kWindowTreeHostForAcceleratedWidget[] =
+ "__AURA_WINDOW_TREE_HOST_ACCELERATED_WIDGET__";
+
float GetDeviceScaleFactorFromDisplay(Window* window) {
gfx::Display display = gfx::Screen::GetScreenFor(window)->
GetDisplayNearestWindow(window);
@@ -77,6 +82,13 @@ WindowTreeHost::~WindowTreeHost() {
DCHECK(!compositor_) << "compositor must be destroyed before root window";
}
+// static
+WindowTreeHost* WindowTreeHost::GetForAcceleratedWidget(
+ gfx::AcceleratedWidget widget) {
+ return reinterpret_cast<WindowTreeHost*>(
+ ui::ViewProp::GetValue(widget, kWindowTreeHostForAcceleratedWidget));
+}
+
void WindowTreeHost::InitHost() {
InitCompositor();
UpdateRootWindowSize(GetBounds().size());
@@ -92,14 +104,6 @@ void WindowTreeHost::InitCompositor() {
new SimpleRootWindowTransformer(window(), gfx::Transform()));
}
-aura::Window* WindowTreeHost::window() {
- return const_cast<Window*>(const_cast<const WindowTreeHost*>(this)->window());
-}
-
-const aura::Window* WindowTreeHost::window() const {
- return delegate_->AsDispatcher()->window();
-}
-
void WindowTreeHost::SetRootWindowTransformer(
scoped_ptr<RootWindowTransformer> transformer) {
transformer_ = transformer.Pass();
@@ -201,6 +205,7 @@ WindowEventDispatcher* WindowTreeHost::GetDispatcher() {
WindowTreeHost::WindowTreeHost()
: delegate_(NULL),
+ window_(new Window(NULL)),
last_cursor_(ui::kCursorNull) {
}
@@ -210,7 +215,22 @@ void WindowTreeHost::DestroyCompositor() {
}
void WindowTreeHost::DestroyDispatcher() {
+ // An observer may have been added by an animation on the
+ // WindowEventDispatcher.
+ window()->layer()->GetAnimator()->RemoveObserver(dispatcher());
+
+ delete window_;
+ window_ = NULL;
dispatcher_.reset();
+
+ // TODO(beng): this comment is no longer quite valid since this function
+ // isn't called from WED, and WED isn't a subclass of Window. So it seems
+ // like we could just rely on ~Window now.
+ // Destroy child windows while we're still valid. This is also done by
+ // ~Window, but by that time any calls to virtual methods overriden here (such
+ // as GetRootWindow()) result in Window's implementation. By destroying here
+ // we ensure GetRootWindow() still returns this.
+ //window()->RemoveOrDestroyChildren();
}
void WindowTreeHost::CreateCompositor(
@@ -219,8 +239,17 @@ void WindowTreeHost::CreateCompositor(
DCHECK(compositor_.get());
// TODO(beng): I think this setup should probably all move to a "accelerated
// widget available" function.
- if (!dispatcher())
+ if (!dispatcher()) {
+ window()->Init(WINDOW_LAYER_NOT_DRAWN);
+ window()->set_host(this);
+ window()->SetName("RootWindow");
+ window()->SetEventTargeter(
+ scoped_ptr<ui::EventTargeter>(new WindowTargeter()));
+ prop_.reset(new ui::ViewProp(GetAcceleratedWidget(),
+ kWindowTreeHostForAcceleratedWidget,
+ this));
dispatcher_.reset(new WindowEventDispatcher(this));
+ }
delegate_ = dispatcher();
}
« no previous file with comments | « ui/aura/window_tree_host.h ('k') | ui/aura/window_tree_host_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698