Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(749)

Unified Diff: ui/views/widget/native_widget_aura.cc

Issue 11421006: Desktop aura: Break aura::Window::SetParent in two. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Re-add parent finding thing to web_contents_view_aura.cc. I guess it was necessary after all? Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/views/widget/native_widget_aura.cc
diff --git a/ui/views/widget/native_widget_aura.cc b/ui/views/widget/native_widget_aura.cc
index c9b9cfda763f18630d39b096a1ea475a8ee8cfe7..a43dadef7affd47dd9df4df94ead09e4da657540 100644
--- a/ui/views/widget/native_widget_aura.cc
+++ b/ui/views/widget/native_widget_aura.cc
@@ -108,12 +108,10 @@ void NativeWidgetAura::InitNativeWidget(const Widget::InitParams& params) {
delegate_->OnNativeWidgetCreated();
gfx::Rect window_bounds = params.bounds;
- if (params.child) {
- window_->SetParent(params.GetParent());
- } else {
+ gfx::NativeView parent = params.GetParent();
+ if (!params.child) {
// Set up the transient child before the window is added. This way the
// LayoutManager knows the window has a transient parent.
- gfx::NativeView parent = params.GetParent();
if (parent && parent->type() != aura::client::WINDOW_TYPE_UNKNOWN) {
parent->AddTransientChild(window_);
parent = NULL;
@@ -133,8 +131,11 @@ void NativeWidgetAura::InitNativeWidget(const Widget::InitParams& params) {
GetDisplayNearestWindow(parent).bounds();
window_bounds.set_origin(bounds.origin());
}
- window_->SetParent(parent);
+ } else if (!parent) {
+ parent = aura::client::GetStackingClient(params.context)->
Ben Goodger (Google) 2012/11/20 23:46:38 is there a reason we can't just follow the pattern
+ GetDefaultParent(params.context, window_, window_bounds);
}
+ window_->SetParentTo(parent);
// Wait to set the bounds until we have a parent. That way we can know our
// true state/bounds (the LayoutManager may enforce a particular
@@ -1022,7 +1023,17 @@ void NativeWidgetPrivate::ReparentNativeView(gfx::NativeView native_view,
(*it)->NotifyNativeViewHierarchyChanged(false, previous_parent);
}
- native_view->SetParent(new_parent);
+ if (new_parent) {
+ native_view->SetParentTo(new_parent);
+ } else {
+ // I am unsure what we should really be doing here. The following looks
+ // weird, but it's the equivalent of what aura has always done. (The
+ // previous behaviour of aura::Window::SetParent() used NULL as a special
+ // value that meant ask the StackingClient where things should go.) jam@
+ // reasonably thought that was stupid and replaced it with a RemoveChild
+ // call, which broke things hard.
+ native_view->SetDefaultParentByTargetRoot(native_view->GetRootWindow());
+ }
// And now, notify them that they have a brand new parent.
for (Widget::Widgets::iterator it = widgets.begin();

Powered by Google App Engine
This is Rietveld 408576698