summaryrefslogtreecommitdiffstats
path: root/views/widget
diff options
context:
space:
mode:
authorrhashimoto@google.com <rhashimoto@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-11 19:40:09 +0000
committerrhashimoto@google.com <rhashimoto@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-11 19:40:09 +0000
commit76730d0e90f60b0e9b1d4b89d2387855211c59a3 (patch)
treebef62059c92f88d9bf9afcdcb896837446f86b5d /views/widget
parentd3d5df701fa9960444bd517cc3c395c0ed7ac021 (diff)
downloadchromium_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.cc19
-rw-r--r--views/widget/widget.cc4
-rw-r--r--views/widget/widget.h5
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;