Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/renderer_host/render_widget_host_view_aura.h" | 5 #include "content/browser/renderer_host/render_widget_host_view_aura.h" |
| 6 | 6 |
| 7 #include "base/auto_reset.h" | 7 #include "base/auto_reset.h" |
| 8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/callback_helpers.h" | 10 #include "base/callback_helpers.h" |
| (...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 392 } | 392 } |
| 393 | 393 |
| 394 // We have to implement the WindowObserver interface on a separate object | 394 // We have to implement the WindowObserver interface on a separate object |
| 395 // because clang doesn't like implementing multiple interfaces that have | 395 // because clang doesn't like implementing multiple interfaces that have |
| 396 // methods with the same name. This object is owned by the | 396 // methods with the same name. This object is owned by the |
| 397 // RenderWidgetHostViewAura. | 397 // RenderWidgetHostViewAura. |
| 398 class RenderWidgetHostViewAura::WindowObserver : public aura::WindowObserver { | 398 class RenderWidgetHostViewAura::WindowObserver : public aura::WindowObserver { |
| 399 public: | 399 public: |
| 400 explicit WindowObserver(RenderWidgetHostViewAura* view) | 400 explicit WindowObserver(RenderWidgetHostViewAura* view) |
| 401 : view_(view) { | 401 : view_(view) { |
| 402 view_->window_->AddObserver(this); | 402 ObserveHierarchy(view_->window_); |
| 403 } | 403 } |
| 404 | 404 |
| 405 virtual ~WindowObserver() { | 405 virtual ~WindowObserver() { |
| 406 view_->window_->RemoveObserver(this); | 406 UnobserveHierarchy(view_->window_); |
| 407 } | 407 } |
| 408 | 408 |
| 409 // Overridden from aura::WindowObserver: | 409 // Overridden from aura::WindowObserver: |
| 410 virtual void OnWillRemoveWindow(aura::Window* window) OVERRIDE { | |
| 411 if (window->Contains(view_->window_)) | |
| 412 UnobserveHierarchy(window->parent()); | |
| 413 } | |
| 414 | |
| 415 virtual void OnWindowParentChanged(aura::Window* window, | |
| 416 aura::Window* parent) OVERRIDE { | |
| 417 ObserveHierarchy(parent); | |
| 418 } | |
| 419 | |
| 410 virtual void OnWindowAddedToRootWindow(aura::Window* window) OVERRIDE { | 420 virtual void OnWindowAddedToRootWindow(aura::Window* window) OVERRIDE { |
| 411 if (window == view_->window_) | 421 if (window == view_->window_) |
| 412 view_->AddedToRootWindow(); | 422 view_->AddedToRootWindow(); |
| 413 } | 423 } |
| 414 | 424 |
| 415 virtual void OnWindowRemovingFromRootWindow(aura::Window* window, | 425 virtual void OnWindowRemovingFromRootWindow(aura::Window* window, |
| 416 aura::Window* new_root) OVERRIDE { | 426 aura::Window* new_root) OVERRIDE { |
| 417 if (window == view_->window_) | 427 if (window == view_->window_) |
| 418 view_->RemovingFromRootWindow(); | 428 view_->RemovingFromRootWindow(); |
| 419 } | 429 } |
| 420 | 430 |
| 431 virtual void OnWindowTransformed(aura::Window* window) OVERRIDE { | |
| 432 if (view_->touch_editing_client_) | |
| 433 view_->touch_editing_client_->EndTouchEditing(true); | |
| 434 } | |
| 435 | |
| 421 private: | 436 private: |
| 437 void ObserveHierarchy(aura::Window* window) { | |
| 438 for (; window; window = window->parent()) | |
|
sky
2014/09/08 20:24:56
This is going to be fragile and easy to get wrong.
mohsen
2014/09/09 21:36:36
Isn't it going to be costly? E.g. if a transform i
| |
| 439 window->AddObserver(this); | |
| 440 } | |
| 441 | |
| 442 void UnobserveHierarchy(aura::Window* window) { | |
| 443 for (; window; window = window->parent()) | |
| 444 window->RemoveObserver(this); | |
| 445 } | |
| 446 | |
| 422 RenderWidgetHostViewAura* view_; | 447 RenderWidgetHostViewAura* view_; |
| 423 | 448 |
| 424 DISALLOW_COPY_AND_ASSIGN(WindowObserver); | 449 DISALLOW_COPY_AND_ASSIGN(WindowObserver); |
| 425 }; | 450 }; |
| 426 | 451 |
| 427 //////////////////////////////////////////////////////////////////////////////// | 452 //////////////////////////////////////////////////////////////////////////////// |
| 428 // RenderWidgetHostViewAura, public: | 453 // RenderWidgetHostViewAura, public: |
| 429 | 454 |
| 430 RenderWidgetHostViewAura::RenderWidgetHostViewAura(RenderWidgetHost* host) | 455 RenderWidgetHostViewAura::RenderWidgetHostViewAura(RenderWidgetHost* host) |
| 431 : host_(RenderWidgetHostImpl::From(host)), | 456 : host_(RenderWidgetHostImpl::From(host)), |
| (...skipping 2062 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2494 | 2519 |
| 2495 //////////////////////////////////////////////////////////////////////////////// | 2520 //////////////////////////////////////////////////////////////////////////////// |
| 2496 // RenderWidgetHostViewBase, public: | 2521 // RenderWidgetHostViewBase, public: |
| 2497 | 2522 |
| 2498 // static | 2523 // static |
| 2499 void RenderWidgetHostViewBase::GetDefaultScreenInfo(WebScreenInfo* results) { | 2524 void RenderWidgetHostViewBase::GetDefaultScreenInfo(WebScreenInfo* results) { |
| 2500 GetScreenInfoForWindow(results, NULL); | 2525 GetScreenInfoForWindow(results, NULL); |
| 2501 } | 2526 } |
| 2502 | 2527 |
| 2503 } // namespace content | 2528 } // namespace content |
| OLD | NEW |