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

Unified Diff: ui/views/view.cc

Issue 2500623002: Add ViewObserver to View for view updates (Closed)
Patch Set: skys comments 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
Index: ui/views/view.cc
diff --git a/ui/views/view.cc b/ui/views/view.cc
index b6cd9d0e97f9345128f754a62f0b80e15fa2430f..6a22018119ac2a636ed5caa18071e8bd5b04cae6 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,8 @@ void View::AddChildViewAt(View* view, int index) {
if (layout_manager_.get())
layout_manager_->ViewAdded(this, view);
+
+ view->NotifyViewParentChanged(nullptr);
sky 2016/11/21 18:32:12 Don't you want to pass parent here? Please add tes
Sarmad Hashmi 2016/11/21 19:14:13 Done.
}
void View::ReorderChildView(View* view, int index) {
@@ -247,6 +250,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 +304,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 +427,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 +448,11 @@ void View::SetEnabled(bool enabled) {
if (enabled != enabled_) {
enabled_ = enabled;
AdvanceFocusIfNecessary();
+
OnEnabledChanged();
+
+ for (ViewObserver& observer : observers_)
+ observer.OnViewEnabledChanged(this);
}
}
@@ -1364,6 +1380,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 +1868,8 @@ void View::DoRemoveChildView(View* view,
if (layout_manager_)
layout_manager_->ViewRemoved(this, view);
+
+ view->NotifyViewParentChanged(this);
}
void View::PropagateRemoveNotifications(View* old_parent, View* new_parent) {
@@ -2421,4 +2452,9 @@ bool View::DoDrag(const ui::LocatedEvent& event,
return true;
}
+void View::NotifyViewParentChanged(View* old_parent) {
+ for (ViewObserver& observer : observers_)
+ observer.OnViewParentChanged(this, old_parent);
+}
+
} // namespace views
« ui/views/view.h ('K') | « 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