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

Unified Diff: ui/views/view.cc

Issue 2500623002: Add ViewObserver to View for view updates (Closed)
Patch Set: Remove Rect forward declaration and view.h include Created 4 years, 1 month 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/views/view.h ('k') | ui/views/view_observer.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/view.cc
diff --git a/ui/views/view.cc b/ui/views/view.cc
index b6cd9d0e97f9345128f754a62f0b80e15fa2430f..92223157d4c8671aaa2c55aab4c006d1ee25b265 100644
--- a/ui/views/view.cc
+++ b/ui/views/view.cc
@@ -51,6 +51,7 @@
#include "ui/views/drag_controller.h"
#include "ui/views/focus/view_storage.h"
#include "ui/views/layout/layout_manager.h"
+#include "ui/views/view_observer.h"
#include "ui/views/views_delegate.h"
#include "ui/views/widget/native_widget_private.h"
#include "ui/views/widget/root_view.h"
@@ -220,6 +221,9 @@ void View::AddChildViewAt(View* view, int index) {
if (layout_manager_.get())
layout_manager_->ViewAdded(this, view);
+
+ for (ViewObserver& observer : observers_)
+ observer.OnChildViewAdded(view);
}
void View::ReorderChildView(View* view, int index) {
@@ -247,6 +251,9 @@ void View::ReorderChildView(View* view, int index) {
InitFocusSiblings(view, index);
children_.insert(children_.begin() + index, view);
+ for (ViewObserver& observer : observers_)
+ observer.OnChildViewReordered(view);
+
ReorderLayers();
}
@@ -298,6 +305,9 @@ void View::SetBoundsRect(const gfx::Rect& bounds) {
gfx::Rect prev = bounds_;
bounds_ = bounds;
BoundsChanged(prev);
+
+ for (ViewObserver& observer : observers_)
+ observer.OnViewBoundsChanged(this);
}
void View::SetSize(const gfx::Size& size) {
@@ -418,6 +428,9 @@ void View::SetVisible(bool visible) {
parent_->NotifyAccessibilityEvent(ui::AX_EVENT_CHILDREN_CHANGED, false);
}
+ for (ViewObserver& observer : observers_)
+ observer.OnViewVisibilityChanged(this);
+
// This notifies all sub-views recursively.
PropagateVisibilityNotifications(this, visible_);
UpdateLayerVisibility();
@@ -436,7 +449,11 @@ void View::SetEnabled(bool enabled) {
if (enabled != enabled_) {
enabled_ = enabled;
AdvanceFocusIfNecessary();
+
OnEnabledChanged();
+
+ for (ViewObserver& observer : observers_)
+ observer.OnViewEnabledChanged(this);
}
}
@@ -1364,6 +1381,19 @@ int View::GetLineScrollIncrement(ScrollView* scroll_view,
return 0;
}
+void View::AddObserver(ViewObserver* observer) {
+ CHECK(observer);
+ observers_.AddObserver(observer);
+}
+
+void View::RemoveObserver(ViewObserver* observer) {
+ observers_.RemoveObserver(observer);
+}
+
+bool View::HasObserver(const ViewObserver* observer) const {
+ return observers_.HasObserver(observer);
+}
+
////////////////////////////////////////////////////////////////////////////////
// View, protected:
@@ -1839,6 +1869,9 @@ void View::DoRemoveChildView(View* view,
if (layout_manager_)
layout_manager_->ViewRemoved(this, view);
+
+ for (ViewObserver& observer : observers_)
+ observer.OnChildViewRemoved(view, this);
}
void View::PropagateRemoveNotifications(View* old_parent, View* new_parent) {
« no previous file with comments | « ui/views/view.h ('k') | ui/views/view_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698