diff options
author | rhashimoto@google.com <rhashimoto@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-11 19:40:09 +0000 |
---|---|---|
committer | rhashimoto@google.com <rhashimoto@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-11 19:40:09 +0000 |
commit | 76730d0e90f60b0e9b1d4b89d2387855211c59a3 (patch) | |
tree | bef62059c92f88d9bf9afcdcb896837446f86b5d /views/widget | |
parent | d3d5df701fa9960444bd517cc3c395c0ed7ac021 (diff) | |
download | chromium_src-76730d0e90f60b0e9b1d4b89d2387855211c59a3.zip chromium_src-76730d0e90f60b0e9b1d4b89d2387855211c59a3.tar.gz chromium_src-76730d0e90f60b0e9b1d4b89d2387855211c59a3.tar.bz2 |
Fix NativeWidgetViews enough to run views_examples without segfaulting.
BUG=chromium:85585
TEST=run views_examples
Review URL: http://codereview.chromium.org/7237064
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@92039 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views/widget')
-rw-r--r-- | views/widget/native_widget_views.cc | 19 | ||||
-rw-r--r-- | views/widget/widget.cc | 4 | ||||
-rw-r--r-- | views/widget/widget.h | 5 |
3 files changed, 19 insertions, 9 deletions
diff --git a/views/widget/native_widget_views.cc b/views/widget/native_widget_views.cc index d33de39..71ed959 100644 --- a/views/widget/native_widget_views.cc +++ b/views/widget/native_widget_views.cc @@ -58,18 +58,20 @@ void NativeWidgetViews::OnActivate(bool active) { void NativeWidgetViews::InitNativeWidget(const Widget::InitParams& params) { ownership_ = params.ownership; - View* desktop_view = ViewsDelegate::views_delegate->GetDefaultParentView(); - hosting_widget_ = desktop_view->GetWidget(); view_ = new internal::NativeWidgetView(this); view_->SetBoundsRect(params.bounds); view_->SetPaintToLayer(true); - // TODO(beng): This is insufficient. While this handles the case where - // params.parent_widget is NULL, we need to somehow handle a case - // where we are passed a specified, valid parent. We may have to - // add View* Widget::GetContainerView(). - desktop_view->AddChildView(view_); - // TODO(beng): handle parenting. + View* parent_view = NULL; + if (params.parent_widget) { + hosting_widget_ = params.parent_widget; + parent_view = hosting_widget_->GetChildViewParent(); + } else { + parent_view = ViewsDelegate::views_delegate->GetDefaultParentView(); + hosting_widget_ = parent_view->GetWidget(); + } + parent_view->AddChildView(view_); + // TODO(beng): SetInitParams(). } @@ -405,4 +407,3 @@ const internal::NativeWidgetPrivate* } } // namespace views - diff --git a/views/widget/widget.cc b/views/widget/widget.cc index d564abf..51bafb0 100644 --- a/views/widget/widget.cc +++ b/views/widget/widget.cc @@ -702,6 +702,10 @@ void Widget::TooltipTextChanged(View* view) { manager->TooltipTextChanged(view); } +View* Widget::GetChildViewParent() { + return GetContentsView() ? GetContentsView() : GetRootView(); +} + //////////////////////////////////////////////////////////////////////////////// // Widget, NativeWidgetDelegate implementation: diff --git a/views/widget/widget.h b/views/widget/widget.h index c02cefc..16d2d7a 100644 --- a/views/widget/widget.h +++ b/views/widget/widget.h @@ -509,6 +509,11 @@ class Widget : public internal::NativeWidgetDelegate, // Invoked when the tooltip text changes for the specified views. void TooltipTextChanged(View* view); + // Returns a View* that any child Widgets backed by NativeWidgetViews + // are added to. The default implementation returns the contents view + // if it exists and the root view otherwise. + virtual View* GetChildViewParent(); + // Overridden from NativeWidgetDelegate: virtual bool IsModal() const OVERRIDE; virtual bool IsDialogBox() const OVERRIDE; |