Index: base/clipboard_win.cc |
=================================================================== |
--- base/clipboard_win.cc (revision 5863) |
+++ base/clipboard_win.cc (working copy) |
@@ -131,15 +131,12 @@ |
wcex.lpszClassName = L"ClipboardOwnerWindowClass"; |
::RegisterClassEx(&wcex); |
- clipboard_owner_ = ::CreateWindow(L"ClipboardOwnerWindowClass", |
- L"ClipboardOwnerWindow", |
- 0, 0, 0, 0, 0, |
- HWND_MESSAGE, |
- 0, 0, 0); |
+ clipboard_owner_ = NULL; |
} |
Clipboard::~Clipboard() { |
- ::DestroyWindow(clipboard_owner_); |
+ if (clipboard_owner_) |
+ ::DestroyWindow(clipboard_owner_); |
clipboard_owner_ = NULL; |
} |
@@ -150,7 +147,7 @@ |
void Clipboard::WriteObjects(const ObjectMap& objects, |
base::ProcessHandle process) { |
ScopedClipboard clipboard; |
- if (!clipboard.Acquire(clipboard_owner_)) |
+ if (!clipboard.Acquire(GetClipboardWindow())) |
return; |
::EmptyClipboard(); |
@@ -385,7 +382,7 @@ |
// Acquire the clipboard. |
ScopedClipboard clipboard; |
- if (!clipboard.Acquire(clipboard_owner_)) |
+ if (!clipboard.Acquire(GetClipboardWindow())) |
return; |
HANDLE data = ::GetClipboardData(CF_UNICODETEXT); |
@@ -406,7 +403,7 @@ |
// Acquire the clipboard. |
ScopedClipboard clipboard; |
- if (!clipboard.Acquire(clipboard_owner_)) |
+ if (!clipboard.Acquire(GetClipboardWindow())) |
return; |
HANDLE data = ::GetClipboardData(CF_TEXT); |
@@ -426,7 +423,7 @@ |
// Acquire the clipboard. |
ScopedClipboard clipboard; |
- if (!clipboard.Acquire(clipboard_owner_)) |
+ if (!clipboard.Acquire(GetClipboardWindow())) |
return; |
HANDLE data = ::GetClipboardData(GetHtmlFormatType()); |
@@ -450,7 +447,7 @@ |
// Acquire the clipboard. |
ScopedClipboard clipboard; |
- if (!clipboard.Acquire(clipboard_owner_)) |
+ if (!clipboard.Acquire(GetClipboardWindow())) |
return; |
HANDLE data = ::GetClipboardData(GetUrlWFormatType()); |
@@ -489,7 +486,7 @@ |
files->clear(); |
ScopedClipboard clipboard; |
- if (!clipboard.Acquire(clipboard_owner_)) |
+ if (!clipboard.Acquire(GetClipboardWindow())) |
return; |
HDROP drop = static_cast<HDROP>(::GetClipboardData(CF_HDROP)); |
@@ -605,3 +602,14 @@ |
else |
::GlobalFree(data); |
} |
+ |
+HWND Clipboard::GetClipboardWindow() const { |
+ if (!clipboard_owner_) { |
+ clipboard_owner_ = ::CreateWindow(L"ClipboardOwnerWindowClass", |
+ L"ClipboardOwnerWindow", |
+ 0, 0, 0, 0, 0, |
+ HWND_MESSAGE, |
+ 0, 0, 0); |
+ } |
+ return clipboard_owner_; |
+} |