| Index: ui/base/win/hidden_window.cc
|
| diff --git a/ui/base/win/hidden_window.cc b/ui/base/win/hidden_window.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fb4f4836b24b2fd6586235f4b3610dbcb5bed19f
|
| --- /dev/null
|
| +++ b/ui/base/win/hidden_window.cc
|
| @@ -0,0 +1,56 @@
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "ui/base/win/hidden_window.h"
|
| +
|
| +#include "ui/base/win/window_impl.h"
|
| +
|
| +namespace ui {
|
| +
|
| +namespace {
|
| +
|
| +// We need to have a parent window for the compositing code to work correctly.
|
| +//
|
| +// A tab will not have a parent HWND whenever it is not active in its
|
| +// host window - for example at creation time and when it's in the
|
| +// background, so we provide a default widget to host them.
|
| +//
|
| +// It may be tempting to use GetDesktopWindow() instead, but this is
|
| +// problematic as the shell sends messages to children of the desktop
|
| +// window that interact poorly with us.
|
| +//
|
| +// See: http://crbug.com/16476
|
| +class TempParent : public ui::WindowImpl {
|
| + public:
|
| + static TempParent* Get() {
|
| + static TempParent* g_temp_parent;
|
| + if (!g_temp_parent) {
|
| + g_temp_parent = new TempParent();
|
| +
|
| + g_temp_parent->set_window_style(WS_POPUP);
|
| + g_temp_parent->set_window_ex_style(WS_EX_TOOLWINDOW);
|
| + g_temp_parent->Init(GetDesktopWindow(), gfx::Rect());
|
| + EnableWindow(g_temp_parent->hwnd(), FALSE);
|
| + }
|
| + return g_temp_parent;
|
| + }
|
| +
|
| + private:
|
| + // Explicitly do nothing in Close. We do this as some external apps may get a
|
| + // handle to this window and attempt to close it.
|
| + void OnClose() {
|
| + }
|
| +
|
| + BEGIN_MSG_MAP_EX(WebContentsViewWin)
|
| + MSG_WM_CLOSE(OnClose)
|
| + END_MSG_MAP()
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +HWND GetHiddenWindow() {
|
| + return TempParent::Get()->hwnd();
|
| +}
|
| +
|
| +} // namespace ui
|
|
|