| Index: chrome/browser/ui/views/chrome_views_delegate.cc
|
| diff --git a/chrome/browser/ui/views/chrome_views_delegate.cc b/chrome/browser/ui/views/chrome_views_delegate.cc
|
| index 591a4854fe59180ec79c87b6d547ce24ef1908bc..dbd8771821a8981c0ebba1882ca532e8035d8738 100644
|
| --- a/chrome/browser/ui/views/chrome_views_delegate.cc
|
| +++ b/chrome/browser/ui/views/chrome_views_delegate.cc
|
| @@ -268,15 +268,14 @@ void ChromeViewsDelegate::OnBeforeWidgetInit(
|
| // On desktop Linux Chrome must run in an environment that supports a variety
|
| // of window managers, some of which do not play nicely with parts of our UI
|
| // that have specific expectations about window sizing and placement. For this
|
| - // reason windows opened as top level (params.top_level) are always
|
| - // constrained by the browser frame, so we can position them correctly. This
|
| - // has some negative side effects, like dialogs being clipped by the browser
|
| - // frame, but the side effects are not as bad as the poor window manager
|
| - // interactions. On Windows however these WM interactions are not an issue, so
|
| - // we open windows requested as top_level as actual top level windows on the
|
| - // desktop.
|
| + // reason windows opened as top level (!params.child) are always constrained
|
| + // by the browser frame, so we can position them correctly. This has some
|
| + // negative side effects, like dialogs being clipped by the browser frame, but
|
| + // the side effects are not as bad as the poor window manager interactions. On
|
| + // Windows however these WM interactions are not an issue, so we open windows
|
| + // requested as top_level as actual top level windows on the desktop.
|
| use_non_toplevel_window = use_non_toplevel_window &&
|
| - (!params->top_level ||
|
| + (params->child ||
|
| chrome::GetHostDesktopTypeForNativeView(params->parent) !=
|
| chrome::HOST_DESKTOP_TYPE_NATIVE);
|
|
|
| @@ -314,15 +313,18 @@ void ChromeViewsDelegate::OnBeforeWidgetInit(
|
| // context.
|
| if (params->context)
|
| params->context = params->context->GetRootWindow();
|
| - DCHECK(params->parent || params->context || params->top_level)
|
| + DCHECK(params->parent || params->context || !params->child)
|
| << "Please provide a parent or context for this widget.";
|
| if (!params->parent && !params->context)
|
| params->context = ash::Shell::GetPrimaryRootWindow();
|
| #elif defined(USE_AURA)
|
| // While the majority of the time, context wasn't plumbed through due to the
|
| - // existence of a global WindowTreeClient, if this window is a toplevel, it's
|
| + // existence of a global WindowTreeClient, if this window is toplevel, it's
|
| // possible that there is no contextual state that we can use.
|
| - if (params->parent == NULL && params->context == NULL && params->top_level) {
|
| + if (params->parent == NULL &&
|
| + params->context == NULL &&
|
| + !params->child &&
|
| + params->type != views::Widget::InitParams::TYPE_TOOLTIP) {
|
| // We need to make a decision about where to place this window based on the
|
| // desktop type.
|
| switch (chrome::GetActiveDesktop()) {
|
|
|