diff options
author | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-13 21:10:54 +0000 |
---|---|---|
committer | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-13 21:10:54 +0000 |
commit | 38c39b06af1141f104b2c35a6975c7861d19ebbe (patch) | |
tree | 13421eae93050987720979267020eb8a0702cebb /views/widget/widget.cc | |
parent | ec389b968684720aac295eaab274115878ab8112 (diff) | |
download | chromium_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.cc | 23 |
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(); |