Index: mojo/views/native_widget_view_manager.cc |
diff --git a/mojo/views/native_widget_view_manager.cc b/mojo/views/native_widget_view_manager.cc |
index a903e2bbca1486f73372af07fbf322e0447f7945..36a65786e101b21da096aa89b764d0144be3855a 100644 |
--- a/mojo/views/native_widget_view_manager.cc |
+++ b/mojo/views/native_widget_view_manager.cc |
@@ -91,6 +91,7 @@ NativeWidgetViewManager::NativeWidgetViewManager( |
views::internal::NativeWidgetDelegate* delegate, view_manager::Node* node) |
: NativeWidgetAura(delegate), |
node_(node) { |
+ node_->AddObserver(this); |
node_->active_view()->AddObserver(this); |
window_tree_host_.reset(new WindowTreeHostMojo(node_, this)); |
window_tree_host_->InitHost(); |
@@ -112,7 +113,9 @@ NativeWidgetViewManager::NativeWidgetViewManager( |
} |
NativeWidgetViewManager::~NativeWidgetViewManager() { |
- node_->active_view()->RemoveObserver(this); |
+ if (node_->active_view()) |
+ node_->active_view()->RemoveObserver(this); |
+ node_->RemoveObserver(this); |
} |
void NativeWidgetViewManager::InitNativeWidget( |
@@ -129,6 +132,20 @@ void NativeWidgetViewManager::CompositorContentsChanged( |
node_->active_view()->SetContents(bitmap); |
} |
+void NativeWidgetViewManager::OnNodeDestroyed(view_manager::Node* node) { |
+ window_tree_host_.reset(); |
+} |
+ |
+void NativeWidgetViewManager::OnNodeActiveViewChanged( |
+ view_manager::Node* node, |
+ view_manager::View* old_view, |
+ view_manager::View* new_view) { |
+ if (old_view) |
+ old_view->RemoveObserver(this); |
+ if (new_view) |
+ new_view->AddObserver(this); |
+} |
+ |
void NativeWidgetViewManager::OnViewInputEvent(view_manager::View* view, |
const EventPtr& event) { |
scoped_ptr<ui::Event> ui_event(event.To<scoped_ptr<ui::Event> >()); |