| Index: ui/aura/window.cc
|
| diff --git a/ui/aura/window.cc b/ui/aura/window.cc
|
| index cbe02b2c1291bab0981f98624964ab4f201d71dc..4ebae09f4ba7564c97f6c582aceff36537ebfc93 100644
|
| --- a/ui/aura/window.cc
|
| +++ b/ui/aura/window.cc
|
| @@ -34,7 +34,8 @@
|
| namespace aura {
|
|
|
| Window::Window(WindowDelegate* delegate)
|
| - : type_(client::WINDOW_TYPE_UNKNOWN),
|
| + : dispatcher_(NULL),
|
| + type_(client::WINDOW_TYPE_UNKNOWN),
|
| owned_by_parent_(true),
|
| delegate_(delegate),
|
| parent_(NULL),
|
| @@ -63,9 +64,9 @@ Window::~Window() {
|
| FOR_EACH_OBSERVER(WindowObserver, observers_, OnWindowDestroying(this));
|
|
|
| // Let the root know so that it can remove any references to us.
|
| - RootWindow* root_window = GetRootWindow();
|
| - if (root_window)
|
| - root_window->OnWindowDestroying(this);
|
| + WindowEventDispatcher* dispatcher = GetDispatcher();
|
| + if (dispatcher)
|
| + dispatcher->OnWindowDestroying(this);
|
|
|
| // Then destroy the children.
|
| RemoveOrDestroyChildren();
|
| @@ -176,15 +177,25 @@ void Window::SetTransparent(bool transparent) {
|
| layer_->SetFillsBoundsOpaquely(!transparent_);
|
| }
|
|
|
| -RootWindow* Window::GetRootWindow() {
|
| - return const_cast<RootWindow*>(
|
| +Window* Window::GetRootWindow() {
|
| + return const_cast<Window*>(
|
| static_cast<const Window*>(this)->GetRootWindow());
|
| }
|
|
|
| -const RootWindow* Window::GetRootWindow() const {
|
| +const Window* Window::GetRootWindow() const {
|
| return parent_ ? parent_->GetRootWindow() : NULL;
|
| }
|
|
|
| +WindowEventDispatcher* Window::GetDispatcher() {
|
| + return const_cast<WindowEventDispatcher*>(const_cast<const Window*>(this)->
|
| + GetDispatcher());
|
| +}
|
| +
|
| +const WindowEventDispatcher* Window::GetDispatcher() const {
|
| + const Window* root_window = GetRootWindow();
|
| + return root_window ? root_window->dispatcher_ : NULL;
|
| +}
|
| +
|
| void Window::Show() {
|
| SetVisible(true);
|
| }
|
| @@ -219,7 +230,7 @@ gfx::Rect Window::GetBoundsInRootWindow() const {
|
|
|
| gfx::Rect Window::GetBoundsInScreen() const {
|
| gfx::Rect bounds(GetBoundsInRootWindow());
|
| - const RootWindow* root = GetRootWindow();
|
| + const Window* root = GetRootWindow();
|
| if (root) {
|
| aura::client::ScreenPositionClient* screen_position_client =
|
| aura::client::GetScreenPositionClient(root);
|
| @@ -233,12 +244,12 @@ gfx::Rect Window::GetBoundsInScreen() const {
|
| }
|
|
|
| void Window::SetTransform(const gfx::Transform& transform) {
|
| - RootWindow* root_window = GetRootWindow();
|
| - bool contained_mouse = IsVisible() && root_window &&
|
| - ContainsPointInRoot(root_window->GetLastMouseLocationInRoot());
|
| + WindowEventDispatcher* dispatcher = GetDispatcher();
|
| + bool contained_mouse = IsVisible() && dispatcher &&
|
| + ContainsPointInRoot(dispatcher->GetLastMouseLocationInRoot());
|
| layer()->SetTransform(transform);
|
| - if (root_window)
|
| - root_window->OnWindowTransformed(this, contained_mouse);
|
| + if (dispatcher)
|
| + dispatcher->OnWindowTransformed(this, contained_mouse);
|
| }
|
|
|
| void Window::SetLayoutManager(LayoutManager* layout_manager) {
|
| @@ -264,7 +275,7 @@ void Window::SetBounds(const gfx::Rect& new_bounds) {
|
|
|
| void Window::SetBoundsInScreen(const gfx::Rect& new_bounds_in_screen,
|
| const gfx::Display& dst_display) {
|
| - RootWindow* root = GetRootWindow();
|
| + Window* root = GetRootWindow();
|
| if (root) {
|
| gfx::Point origin = new_bounds_in_screen.origin();
|
| aura::client::ScreenPositionClient* screen_position_client =
|
| @@ -318,7 +329,7 @@ void Window::AddChild(Window* child) {
|
| params.phase = WindowObserver::HierarchyChangeParams::HIERARCHY_CHANGING;
|
| NotifyWindowHierarchyChange(params);
|
|
|
| - RootWindow* old_root = child->GetRootWindow();
|
| + Window* old_root = child->GetRootWindow();
|
|
|
| DCHECK(std::find(children_.begin(), children_.end(), child) ==
|
| children_.end());
|
| @@ -334,9 +345,9 @@ void Window::AddChild(Window* child) {
|
| FOR_EACH_OBSERVER(WindowObserver, observers_, OnWindowAdded(child));
|
| child->OnParentChanged();
|
|
|
| - RootWindow* root_window = GetRootWindow();
|
| + Window* root_window = GetRootWindow();
|
| if (root_window && old_root != root_window) {
|
| - root_window->OnWindowAddedToRootWindow(child);
|
| + root_window->GetDispatcher()->OnWindowAddedToRootWindow(child);
|
| child->NotifyAddedToRootWindow();
|
| }
|
|
|
| @@ -412,11 +423,11 @@ void Window::ConvertPointToTarget(const Window* source,
|
| return;
|
| if (source->GetRootWindow() != target->GetRootWindow()) {
|
| client::ScreenPositionClient* source_client =
|
| - GetScreenPositionClient(source->GetRootWindow());
|
| + client::GetScreenPositionClient(source->GetRootWindow());
|
| source_client->ConvertPointToScreen(source, point);
|
|
|
| client::ScreenPositionClient* target_client =
|
| - GetScreenPositionClient(target->GetRootWindow());
|
| + client::GetScreenPositionClient(target->GetRootWindow());
|
| target_client->ConvertPointFromScreen(target, point);
|
| } else {
|
| ui::Layer::ConvertPointToLayer(source->layer(), target->layer(), point);
|
| @@ -424,11 +435,11 @@ void Window::ConvertPointToTarget(const Window* source,
|
| }
|
|
|
| void Window::MoveCursorTo(const gfx::Point& point_in_window) {
|
| - RootWindow* root_window = GetRootWindow();
|
| + Window* root_window = GetRootWindow();
|
| DCHECK(root_window);
|
| gfx::Point point_in_root(point_in_window);
|
| ConvertPointToTarget(this, root_window, &point_in_root);
|
| - root_window->MoveCursorTo(point_in_root);
|
| + root_window->GetDispatcher()->MoveCursorTo(point_in_root);
|
| }
|
|
|
| gfx::NativeCursor Window::GetCursor(const gfx::Point& point) const {
|
| @@ -554,21 +565,21 @@ void Window::SetCapture() {
|
| if (!IsVisible())
|
| return;
|
|
|
| - RootWindow* root_window = GetRootWindow();
|
| + Window* root_window = GetRootWindow();
|
| if (!root_window)
|
| return;
|
| client::GetCaptureClient(root_window)->SetCapture(this);
|
| }
|
|
|
| void Window::ReleaseCapture() {
|
| - RootWindow* root_window = GetRootWindow();
|
| + Window* root_window = GetRootWindow();
|
| if (!root_window)
|
| return;
|
| client::GetCaptureClient(root_window)->ReleaseCapture(this);
|
| }
|
|
|
| bool Window::HasCapture() {
|
| - RootWindow* root_window = GetRootWindow();
|
| + Window* root_window = GetRootWindow();
|
| return root_window &&
|
| client::GetCaptureClient(root_window)->GetCaptureWindow() == this;
|
| }
|
| @@ -694,9 +705,9 @@ void Window::SetVisible(bool visible) {
|
| FOR_EACH_OBSERVER(WindowObserver, observers_,
|
| OnWindowVisibilityChanging(this, visible));
|
|
|
| - RootWindow* root_window = GetRootWindow();
|
| - if (root_window)
|
| - root_window->DispatchMouseExitToHidingWindow(this);
|
| + WindowEventDispatcher* dispatcher = GetDispatcher();
|
| + if (dispatcher)
|
| + dispatcher->DispatchMouseExitToHidingWindow(this);
|
|
|
| client::VisibilityClient* visibility_client =
|
| client::GetVisibilityClient(this);
|
| @@ -714,8 +725,8 @@ void Window::SetVisible(bool visible) {
|
|
|
| NotifyWindowVisibilityChanged(this, visible);
|
|
|
| - if (root_window)
|
| - root_window->OnWindowVisibilityChanged(this, visible);
|
| + if (dispatcher)
|
| + dispatcher->OnWindowVisibilityChanged(this, visible);
|
| }
|
|
|
| void Window::SchedulePaint() {
|
| @@ -782,10 +793,11 @@ void Window::RemoveChildImpl(Window* child, Window* new_parent) {
|
| if (layout_manager_)
|
| layout_manager_->OnWillRemoveWindowFromLayout(child);
|
| FOR_EACH_OBSERVER(WindowObserver, observers_, OnWillRemoveWindow(child));
|
| - RootWindow* root_window = child->GetRootWindow();
|
| - RootWindow* new_root_window = new_parent ? new_parent->GetRootWindow() : NULL;
|
| + Window* root_window = child->GetRootWindow();
|
| + Window* new_root_window = new_parent ? new_parent->GetRootWindow() : NULL;
|
| if (root_window && root_window != new_root_window) {
|
| - root_window->OnWindowRemovedFromRootWindow(child, new_root_window);
|
| + root_window->GetDispatcher()->OnWindowRemovedFromRootWindow(
|
| + child, new_root_window);
|
| child->NotifyRemovingFromRootWindow();
|
| }
|
| child->parent_ = NULL;
|
| @@ -1084,9 +1096,9 @@ void Window::OnLayerBoundsChanged(const gfx::Rect& old_bounds,
|
| FOR_EACH_OBSERVER(WindowObserver,
|
| observers_,
|
| OnWindowBoundsChanged(this, old_bounds, bounds()));
|
| - RootWindow* root_window = GetRootWindow();
|
| - if (root_window)
|
| - root_window->OnWindowBoundsChanged(this, contained_mouse);
|
| + WindowEventDispatcher* dispatcher = GetDispatcher();
|
| + if (dispatcher)
|
| + dispatcher->OnWindowBoundsChanged(this, contained_mouse);
|
| }
|
|
|
| void Window::OnPaintLayer(gfx::Canvas* canvas) {
|
| @@ -1134,9 +1146,9 @@ void Window::UpdateLayerName(const std::string& name) {
|
| bool Window::ContainsMouse() {
|
| bool contains_mouse = false;
|
| if (IsVisible()) {
|
| - RootWindow* root_window = GetRootWindow();
|
| - contains_mouse = root_window &&
|
| - ContainsPointInRoot(root_window->GetLastMouseLocationInRoot());
|
| + WindowEventDispatcher* dispatcher = GetDispatcher();
|
| + contains_mouse = dispatcher &&
|
| + ContainsPointInRoot(dispatcher->GetLastMouseLocationInRoot());
|
| }
|
| return contains_mouse;
|
| }
|
|
|