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 36a65786e101b21da096aa89b764d0144be3855a..1d92e22148c4c4fe92dffa6592d0684bc6c52ce2 100644 |
--- a/mojo/views/native_widget_view_manager.cc |
+++ b/mojo/views/native_widget_view_manager.cc |
@@ -90,9 +90,11 @@ class MinimalInputEventFilter : public ui::internal::InputMethodDelegate, |
NativeWidgetViewManager::NativeWidgetViewManager( |
views::internal::NativeWidgetDelegate* delegate, view_manager::Node* node) |
: NativeWidgetAura(delegate), |
- node_(node) { |
+ node_(node), |
+ view_(node_->active_view()) { |
node_->AddObserver(this); |
- node_->active_view()->AddObserver(this); |
+ if (view_) |
+ view_->AddObserver(this); |
window_tree_host_.reset(new WindowTreeHostMojo(node_, this)); |
window_tree_host_->InitHost(); |
@@ -113,9 +115,10 @@ NativeWidgetViewManager::NativeWidgetViewManager( |
} |
NativeWidgetViewManager::~NativeWidgetViewManager() { |
- if (node_->active_view()) |
- node_->active_view()->RemoveObserver(this); |
- node_->RemoveObserver(this); |
+ if (view_) |
+ view_->RemoveObserver(this); |
+ if (node_) |
+ node_->RemoveObserver(this); |
} |
void NativeWidgetViewManager::InitNativeWidget( |
@@ -129,13 +132,23 @@ void NativeWidgetViewManager::InitNativeWidget( |
void NativeWidgetViewManager::CompositorContentsChanged( |
const SkBitmap& bitmap) { |
- node_->active_view()->SetContents(bitmap); |
+ if (view_) |
+ view_->SetContents(bitmap); |
} |
void NativeWidgetViewManager::OnNodeDestroyed(view_manager::Node* node) { |
+ DCHECK_EQ(node, node_); |
+ node->RemoveObserver(this); |
+ node_ = NULL; |
window_tree_host_.reset(); |
} |
+void NativeWidgetViewManager::OnNodeBoundsChanged(view_manager::Node* node, |
+ const gfx::Rect& old_bounds, |
+ const gfx::Rect& new_bounds) { |
+ GetWidget()->SetBounds(gfx::Rect(node->bounds().size())); |
+} |
+ |
void NativeWidgetViewManager::OnNodeActiveViewChanged( |
view_manager::Node* node, |
view_manager::View* old_view, |
@@ -144,6 +157,7 @@ void NativeWidgetViewManager::OnNodeActiveViewChanged( |
old_view->RemoveObserver(this); |
if (new_view) |
new_view->AddObserver(this); |
+ view_ = new_view; |
} |
void NativeWidgetViewManager::OnViewInputEvent(view_manager::View* view, |
@@ -153,4 +167,10 @@ void NativeWidgetViewManager::OnViewInputEvent(view_manager::View* view, |
window_tree_host_->SendEventToProcessor(ui_event.get()); |
} |
+void NativeWidgetViewManager::OnViewDestroyed(view_manager::View* view) { |
+ DCHECK_EQ(view, view_); |
+ view->RemoveObserver(this); |
+ view_ = NULL; |
+} |
+ |
} // namespace mojo |