summaryrefslogtreecommitdiffstats
path: root/views/widget/widget.cc
diff options
context:
space:
mode:
authorsadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-13 21:10:54 +0000
committersadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-13 21:10:54 +0000
commit38c39b06af1141f104b2c35a6975c7861d19ebbe (patch)
tree13421eae93050987720979267020eb8a0702cebb /views/widget/widget.cc
parentec389b968684720aac295eaab274115878ab8112 (diff)
downloadchromium_src-38c39b06af1141f104b2c35a6975c7861d19ebbe.zip
chromium_src-38c39b06af1141f104b2c35a6975c7861d19ebbe.tar.gz
chromium_src-38c39b06af1141f104b2c35a6975c7861d19ebbe.tar.bz2
Add Widget::Observer for observing Widgets.
Use this new observation technique to avoid a crash in views-desktop when the active widget is closed. BUG=none TEST=Run views_desktop, close a window, click, it doesn't crash! Review URL: http://codereview.chromium.org/7342015 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@92415 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views/widget/widget.cc')
-rw-r--r--views/widget/widget.cc23
1 files changed, 20 insertions, 3 deletions
diff --git a/views/widget/widget.cc b/views/widget/widget.cc
index dcca28c..047cf05 100644
--- a/views/widget/widget.cc
+++ b/views/widget/widget.cc
@@ -293,6 +293,18 @@ gfx::NativeWindow Widget::GetNativeWindow() const {
return native_widget_->GetNativeWindow();
}
+void Widget::AddObserver(Widget::Observer* observer) {
+ observers_.AddObserver(observer);
+}
+
+void Widget::RemoveObserver(Widget::Observer* observer) {
+ observers_.RemoveObserver(observer);
+}
+
+bool Widget::HasObserver(Widget::Observer* observer) {
+ return observers_.HasObserver(observer);
+}
+
bool Widget::GetAccelerator(int cmd_id, ui::Accelerator* accelerator) {
return false;
}
@@ -732,9 +744,8 @@ void Widget::OnNativeWidgetActivationChanged(bool active) {
if (!active)
SaveWindowPosition();
- // TODO(beng): merge these two.
- widget_delegate_->OnWidgetActivated(active);
- widget_delegate_->OnWindowActivationChanged(active);
+ FOR_EACH_OBSERVER(Observer, observers_,
+ OnWidgetActivationChanged(this, active));
}
void Widget::OnNativeFocus(gfx::NativeView focused_view) {
@@ -749,6 +760,11 @@ void Widget::OnNativeBlur(gfx::NativeView focused_view) {
focused_view);
}
+void Widget::OnNativeWidgetVisibilityChanged(bool visible) {
+ FOR_EACH_OBSERVER(Observer, observers_,
+ OnWidgetVisibilityChanged(this, visible));
+}
+
void Widget::OnNativeWidgetCreated() {
if (GetTopLevelWidget() == this) {
// Only the top level Widget in a native widget hierarchy has a focus
@@ -766,6 +782,7 @@ void Widget::OnNativeWidgetCreated() {
}
void Widget::OnNativeWidgetDestroying() {
+ FOR_EACH_OBSERVER(Observer, observers_, OnWidgetClosing(this));
if (non_client_view_)
non_client_view_->WindowClosing();
widget_delegate_->WindowClosing();