OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 delete child; | 49 delete child; |
50 // Deleting the child so remove it from out children_ list. | 50 // Deleting the child so remove it from out children_ list. |
51 DCHECK(std::find(children_.begin(), children_.end(), child) == | 51 DCHECK(std::find(children_.begin(), children_.end(), child) == |
52 children_.end()); | 52 children_.end()); |
53 } | 53 } |
54 | 54 |
55 // Removes ourselves from our transient parent. | 55 // Removes ourselves from our transient parent. |
56 if (transient_parent_) | 56 if (transient_parent_) |
57 transient_parent_->RemoveTransientChild(this); | 57 transient_parent_->RemoveTransientChild(this); |
58 | 58 |
59 // Destroy transient children. | |
60 Windows transient_children(transient_children_); | |
61 STLDeleteElements(&transient_children); | |
62 DCHECK(transient_children_.empty()); | |
63 | |
64 // And let the delegate do any post cleanup. | 59 // And let the delegate do any post cleanup. |
65 if (delegate_) | 60 if (delegate_) |
66 delegate_->OnWindowDestroyed(); | 61 delegate_->OnWindowDestroyed(); |
67 if (parent_) | 62 if (parent_) |
68 parent_->RemoveChild(this); | 63 parent_->RemoveChild(this); |
69 | 64 |
| 65 // Destroy transient children, only after we've removed ourselves from our |
| 66 // parent, as destroying an active transient child may otherwise attempt to |
| 67 // refocus us. |
| 68 Windows transient_children(transient_children_); |
| 69 STLDeleteElements(&transient_children); |
| 70 DCHECK(transient_children_.empty()); |
| 71 |
70 FOR_EACH_OBSERVER(WindowObserver, observers_, OnWindowDestroyed(this)); | 72 FOR_EACH_OBSERVER(WindowObserver, observers_, OnWindowDestroyed(this)); |
71 } | 73 } |
72 | 74 |
73 void Window::Init(ui::Layer::LayerType layer_type) { | 75 void Window::Init(ui::Layer::LayerType layer_type) { |
74 layer_.reset(new ui::Layer(layer_type)); | 76 layer_.reset(new ui::Layer(layer_type)); |
75 layer_->SetVisible(false); | 77 layer_->SetVisible(false); |
76 layer_->set_delegate(this); | 78 layer_->set_delegate(this); |
77 } | 79 } |
78 | 80 |
79 void Window::SetType(WindowType type) { | 81 void Window::SetType(WindowType type) { |
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
489 | 491 |
490 return delegate_ ? this : NULL; | 492 return delegate_ ? this : NULL; |
491 } | 493 } |
492 | 494 |
493 void Window::OnPaintLayer(gfx::Canvas* canvas) { | 495 void Window::OnPaintLayer(gfx::Canvas* canvas) { |
494 if (delegate_) | 496 if (delegate_) |
495 delegate_->OnPaint(canvas); | 497 delegate_->OnPaint(canvas); |
496 } | 498 } |
497 | 499 |
498 } // namespace aura | 500 } // namespace aura |
OLD | NEW |