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

Side by Side Diff: ui/aura/window.cc

Issue 9315015: Adds two new observer methods to allow code to be notified when a Window is added/removed from a ... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 8 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ui/aura/window.h ('k') | ui/aura/window_observer.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "ui/aura/window.h" 5 #include "ui/aura/window.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/stl_util.h" 10 #include "base/stl_util.h"
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 287
288 layer_->Add(child->layer_); 288 layer_->Add(child->layer_);
289 289
290 children_.push_back(child); 290 children_.push_back(child);
291 if (layout_manager_.get()) 291 if (layout_manager_.get())
292 layout_manager_->OnWindowAddedToLayout(child); 292 layout_manager_->OnWindowAddedToLayout(child);
293 FOR_EACH_OBSERVER(WindowObserver, observers_, OnWindowAdded(child)); 293 FOR_EACH_OBSERVER(WindowObserver, observers_, OnWindowAdded(child));
294 child->OnParentChanged(); 294 child->OnParentChanged();
295 295
296 RootWindow* root_window = child->GetRootWindow(); 296 RootWindow* root_window = child->GetRootWindow();
297 if (root_window) 297 if (root_window) {
298 root_window->OnWindowAttachedToRootWindow(child); 298 root_window->OnWindowAddedToRootWindow(child);
299 NotifyAddedToRootWindow();
300 }
299 } 301 }
300 302
301 void Window::AddTransientChild(Window* child) { 303 void Window::AddTransientChild(Window* child) {
302 if (child->transient_parent_) 304 if (child->transient_parent_)
303 child->transient_parent_->RemoveTransientChild(child); 305 child->transient_parent_->RemoveTransientChild(child);
304 DCHECK(std::find(transient_children_.begin(), transient_children_.end(), 306 DCHECK(std::find(transient_children_.begin(), transient_children_.end(),
305 child) == transient_children_.end()); 307 child) == transient_children_.end());
306 transient_children_.push_back(child); 308 transient_children_.push_back(child);
307 child->transient_parent_ = this; 309 child->transient_parent_ = this;
308 } 310 }
309 311
310 void Window::RemoveTransientChild(Window* child) { 312 void Window::RemoveTransientChild(Window* child) {
311 Windows::iterator i = 313 Windows::iterator i =
312 std::find(transient_children_.begin(), transient_children_.end(), child); 314 std::find(transient_children_.begin(), transient_children_.end(), child);
313 DCHECK(i != transient_children_.end()); 315 DCHECK(i != transient_children_.end());
314 transient_children_.erase(i); 316 transient_children_.erase(i);
315 if (child->transient_parent_ == this) 317 if (child->transient_parent_ == this)
316 child->transient_parent_ = NULL; 318 child->transient_parent_ = NULL;
317 } 319 }
318 320
319 void Window::RemoveChild(Window* child) { 321 void Window::RemoveChild(Window* child) {
320 Windows::iterator i = std::find(children_.begin(), children_.end(), child); 322 Windows::iterator i = std::find(children_.begin(), children_.end(), child);
321 DCHECK(i != children_.end()); 323 DCHECK(i != children_.end());
322 if (layout_manager_.get()) 324 if (layout_manager_.get())
323 layout_manager_->OnWillRemoveWindowFromLayout(child); 325 layout_manager_->OnWillRemoveWindowFromLayout(child);
324 FOR_EACH_OBSERVER(WindowObserver, observers_, OnWillRemoveWindow(child)); 326 FOR_EACH_OBSERVER(WindowObserver, observers_, OnWillRemoveWindow(child));
325 RootWindow* root_window = child->GetRootWindow(); 327 RootWindow* root_window = child->GetRootWindow();
326 if (root_window) 328 if (root_window) {
327 root_window->OnWindowDetachingFromRootWindow(child); 329 root_window->OnWindowRemovedFromRootWindow(child);
330 child->NotifyRemovingFromRootWindow();
331 }
328 child->parent_ = NULL; 332 child->parent_ = NULL;
329 // We should only remove the child's layer if the child still owns that layer. 333 // We should only remove the child's layer if the child still owns that layer.
330 // Someone else may have acquired ownership of it via AcquireLayer() and may 334 // Someone else may have acquired ownership of it via AcquireLayer() and may
331 // expect the hierarchy to go unchanged as the Window is destroyed. 335 // expect the hierarchy to go unchanged as the Window is destroyed.
332 if (child->layer_owner_.get()) 336 if (child->layer_owner_.get())
333 layer_->Remove(child->layer_); 337 layer_->Remove(child->layer_);
334 children_.erase(i); 338 children_.erase(i);
335 child->OnParentChanged(); 339 child->OnParentChanged();
336 } 340 }
337 341
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 516
513 bool Window::StopsEventPropagation() const { 517 bool Window::StopsEventPropagation() const {
514 if (!stops_event_propagation_ || children_.empty()) 518 if (!stops_event_propagation_ || children_.empty())
515 return false; 519 return false;
516 aura::Window::Windows::const_iterator it = 520 aura::Window::Windows::const_iterator it =
517 std::find_if(children_.begin(), children_.end(), 521 std::find_if(children_.begin(), children_.end(),
518 std::mem_fun(&aura::Window::IsVisible)); 522 std::mem_fun(&aura::Window::IsVisible));
519 return it != children_.end(); 523 return it != children_.end();
520 } 524 }
521 525
522 void Window::OnWindowDetachingFromRootWindow(aura::Window* window) {
523 }
524
525 void Window::OnWindowAttachedToRootWindow(aura::Window* window) {
526 }
527
528 void Window::SetBoundsInternal(const gfx::Rect& new_bounds) { 526 void Window::SetBoundsInternal(const gfx::Rect& new_bounds) {
529 gfx::Rect actual_new_bounds(new_bounds); 527 gfx::Rect actual_new_bounds(new_bounds);
530 528
531 // Ensure we don't go smaller than our minimum bounds. 529 // Ensure we don't go smaller than our minimum bounds.
532 if (delegate_) { 530 if (delegate_) {
533 const gfx::Size& min_size = delegate_->GetMinimumSize(); 531 const gfx::Size& min_size = delegate_->GetMinimumSize();
534 actual_new_bounds.set_width( 532 actual_new_bounds.set_width(
535 std::max(min_size.width(), actual_new_bounds.width())); 533 std::max(min_size.width(), actual_new_bounds.width()));
536 actual_new_bounds.set_height( 534 actual_new_bounds.set_height(
537 std::max(min_size.height(), actual_new_bounds.height())); 535 std::max(min_size.height(), actual_new_bounds.height()));
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
636 634
637 void Window::OnParentChanged() { 635 void Window::OnParentChanged() {
638 FOR_EACH_OBSERVER( 636 FOR_EACH_OBSERVER(
639 WindowObserver, observers_, OnWindowParentChanged(this, parent_)); 637 WindowObserver, observers_, OnWindowParentChanged(this, parent_));
640 } 638 }
641 639
642 void Window::OnStackingChanged() { 640 void Window::OnStackingChanged() {
643 FOR_EACH_OBSERVER(WindowObserver, observers_, OnWindowStackingChanged(this)); 641 FOR_EACH_OBSERVER(WindowObserver, observers_, OnWindowStackingChanged(this));
644 } 642 }
645 643
644 void Window::NotifyRemovingFromRootWindow() {
645 FOR_EACH_OBSERVER(WindowObserver, observers_,
646 OnWindowRemovingFromRootWindow(this));
647 for (Window::Windows::const_iterator it = children_.begin();
648 it != children_.end(); ++it) {
649 (*it)->NotifyRemovingFromRootWindow();
650 }
651 }
652
653 void Window::NotifyAddedToRootWindow() {
654 FOR_EACH_OBSERVER(WindowObserver, observers_,
655 OnWindowAddedToRootWindow(this));
656 for (Window::Windows::const_iterator it = children_.begin();
657 it != children_.end(); ++it) {
658 (*it)->NotifyAddedToRootWindow();
659 }
660 }
661
646 void Window::OnPaintLayer(gfx::Canvas* canvas) { 662 void Window::OnPaintLayer(gfx::Canvas* canvas) {
647 if (delegate_) 663 if (delegate_)
648 delegate_->OnPaint(canvas); 664 delegate_->OnPaint(canvas);
649 } 665 }
650 666
651 void Window::UpdateLayerName(const std::string& name) { 667 void Window::UpdateLayerName(const std::string& name) {
652 #if !defined(NDEBUG) 668 #if !defined(NDEBUG)
653 DCHECK(layer()); 669 DCHECK(layer());
654 670
655 std::string layer_name(name_); 671 std::string layer_name(name_);
(...skipping 14 matching lines...) Expand all
670 parent_->children().end(), 686 parent_->children().end(),
671 this); 687 this);
672 for (++i; i != parent_->children().end(); ++i) { 688 for (++i; i != parent_->children().end(); ++i) {
673 if ((*i)->StopsEventPropagation()) 689 if ((*i)->StopsEventPropagation())
674 return true; 690 return true;
675 } 691 }
676 return false; 692 return false;
677 } 693 }
678 694
679 } // namespace aura 695 } // namespace aura
OLDNEW
« no previous file with comments | « ui/aura/window.h ('k') | ui/aura/window_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698