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

Side by Side Diff: ui/base/clipboard/clipboard_win.cc

Issue 12298037: Revert 183123 (Closed) Base URL: svn://svn.chromium.org/chrome/branches/1417/src/
Patch Set: Created 7 years, 10 months 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ui/base/clipboard/clipboard_util_win.cc ('k') | ui/base/clipboard/scoped_clipboard_writer.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Many of these functions are based on those found in 5 // Many of these functions are based on those found in
6 // webkit/port/platform/PasteboardWin.cpp 6 // webkit/port/platform/PasteboardWin.cpp
7 7
8 #include "ui/base/clipboard/clipboard.h" 8 #include "ui/base/clipboard/clipboard.h"
9 9
10 #include <shlobj.h> 10 #include <shlobj.h>
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 201
202 clipboard_owner_ = NULL; 202 clipboard_owner_ = NULL;
203 } 203 }
204 204
205 Clipboard::~Clipboard() { 205 Clipboard::~Clipboard() {
206 if (clipboard_owner_) 206 if (clipboard_owner_)
207 ::DestroyWindow(clipboard_owner_); 207 ::DestroyWindow(clipboard_owner_);
208 clipboard_owner_ = NULL; 208 clipboard_owner_ = NULL;
209 } 209 }
210 210
211 void Clipboard::WriteObjectsImpl(Buffer buffer, 211 void Clipboard::WriteObjects(Buffer buffer, const ObjectMap& objects) {
212 const ObjectMap& objects,
213 SourceTag tag) {
214 DCHECK_EQ(buffer, BUFFER_STANDARD); 212 DCHECK_EQ(buffer, BUFFER_STANDARD);
215 213
216 ScopedClipboard clipboard; 214 ScopedClipboard clipboard;
217 if (!clipboard.Acquire(GetClipboardWindow())) 215 if (!clipboard.Acquire(GetClipboardWindow()))
218 return; 216 return;
219 217
220 ::EmptyClipboard(); 218 ::EmptyClipboard();
221 219
222 for (ObjectMap::const_iterator iter = objects.begin(); 220 for (ObjectMap::const_iterator iter = objects.begin();
223 iter != objects.end(); ++iter) { 221 iter != objects.end(); ++iter) {
224 DispatchObject(static_cast<ObjectType>(iter->first), iter->second); 222 DispatchObject(static_cast<ObjectType>(iter->first), iter->second);
225 } 223 }
226 WriteSourceTag(tag);
227 } 224 }
228 225
229 void Clipboard::WriteText(const char* text_data, size_t text_len) { 226 void Clipboard::WriteText(const char* text_data, size_t text_len) {
230 string16 text; 227 string16 text;
231 UTF8ToUTF16(text_data, text_len, &text); 228 UTF8ToUTF16(text_data, text_len, &text);
232 HGLOBAL glob = CreateGlobalData(text); 229 HGLOBAL glob = CreateGlobalData(text);
233 230
234 WriteToClipboard(CF_UNICODETEXT, glob); 231 WriteToClipboard(CF_UNICODETEXT, glob);
235 } 232 }
236 233
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 HGLOBAL hdata = ::GlobalAlloc(GMEM_MOVEABLE, data_len); 354 HGLOBAL hdata = ::GlobalAlloc(GMEM_MOVEABLE, data_len);
358 if (!hdata) 355 if (!hdata)
359 return; 356 return;
360 357
361 char* data = static_cast<char*>(::GlobalLock(hdata)); 358 char* data = static_cast<char*>(::GlobalLock(hdata));
362 memcpy(data, data_data, data_len); 359 memcpy(data, data_data, data_len);
363 ::GlobalUnlock(data); 360 ::GlobalUnlock(data);
364 WriteToClipboard(format.ToUINT(), hdata); 361 WriteToClipboard(format.ToUINT(), hdata);
365 } 362 }
366 363
367 void Clipboard::WriteSourceTag(SourceTag tag) {
368 if (tag != SourceTag()) {
369 ObjectMapParam binary = SourceTag2Binary(tag);
370 WriteData(GetSourceTagFormatType(), &binary[0], binary.size());
371 }
372 }
373
374 void Clipboard::WriteToClipboard(unsigned int format, HANDLE handle) { 364 void Clipboard::WriteToClipboard(unsigned int format, HANDLE handle) {
375 DCHECK(clipboard_owner_); 365 DCHECK(clipboard_owner_);
376 if (handle && !::SetClipboardData(format, handle)) { 366 if (handle && !::SetClipboardData(format, handle)) {
377 DCHECK(ERROR_CLIPBOARD_NOT_OPEN != GetLastError()); 367 DCHECK(ERROR_CLIPBOARD_NOT_OPEN != GetLastError());
378 FreeData(format, handle); 368 FreeData(format, handle);
379 } 369 }
380 } 370 }
381 371
382 uint64 Clipboard::GetSequenceNumber(Buffer buffer) { 372 uint64 Clipboard::GetSequenceNumber(Buffer buffer) {
383 DCHECK_EQ(buffer, BUFFER_STANDARD); 373 DCHECK_EQ(buffer, BUFFER_STANDARD);
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
659 649
660 HANDLE data = ::GetClipboardData(format.ToUINT()); 650 HANDLE data = ::GetClipboardData(format.ToUINT());
661 if (!data) 651 if (!data)
662 return; 652 return;
663 653
664 result->assign(static_cast<const char*>(::GlobalLock(data)), 654 result->assign(static_cast<const char*>(::GlobalLock(data)),
665 ::GlobalSize(data)); 655 ::GlobalSize(data));
666 ::GlobalUnlock(data); 656 ::GlobalUnlock(data);
667 } 657 }
668 658
669 Clipboard::SourceTag Clipboard::ReadSourceTag(Buffer buffer) const {
670 DCHECK_EQ(buffer, BUFFER_STANDARD);
671 std::string result;
672 ReadData(GetSourceTagFormatType(), &result);
673 return Binary2SourceTag(result);
674 }
675
676 // static 659 // static
677 void Clipboard::ParseBookmarkClipboardFormat(const string16& bookmark, 660 void Clipboard::ParseBookmarkClipboardFormat(const string16& bookmark,
678 string16* title, 661 string16* title,
679 std::string* url) { 662 std::string* url) {
680 const string16 kDelim = ASCIIToUTF16("\r\n"); 663 const string16 kDelim = ASCIIToUTF16("\r\n");
681 664
682 const size_t title_end = bookmark.find_first_of(kDelim); 665 const size_t title_end = bookmark.find_first_of(kDelim);
683 if (title) 666 if (title)
684 title->assign(bookmark.substr(0, title_end)); 667 title->assign(bookmark.substr(0, title_end));
685 668
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
845 // static 828 // static
846 const Clipboard::FormatType& Clipboard::GetPepperCustomDataFormatType() { 829 const Clipboard::FormatType& Clipboard::GetPepperCustomDataFormatType() {
847 CR_DEFINE_STATIC_LOCAL( 830 CR_DEFINE_STATIC_LOCAL(
848 FormatType, 831 FormatType,
849 type, 832 type,
850 (ClipboardUtil::GetPepperCustomDataFormat()->cfFormat)); 833 (ClipboardUtil::GetPepperCustomDataFormat()->cfFormat));
851 return type; 834 return type;
852 } 835 }
853 836
854 // static 837 // static
855 const Clipboard::FormatType& Clipboard::GetSourceTagFormatType() {
856 CR_DEFINE_STATIC_LOCAL(
857 FormatType,
858 type,
859 (ClipboardUtil::GetSourceTagFormat()->cfFormat));
860 return type;
861 }
862
863 // static
864 void Clipboard::FreeData(unsigned int format, HANDLE data) { 838 void Clipboard::FreeData(unsigned int format, HANDLE data) {
865 if (format == CF_BITMAP) 839 if (format == CF_BITMAP)
866 ::DeleteObject(static_cast<HBITMAP>(data)); 840 ::DeleteObject(static_cast<HBITMAP>(data));
867 else 841 else
868 ::GlobalFree(data); 842 ::GlobalFree(data);
869 } 843 }
870 844
871 HWND Clipboard::GetClipboardWindow() const { 845 HWND Clipboard::GetClipboardWindow() const {
872 if (!clipboard_owner_ && create_window_) { 846 if (!clipboard_owner_ && create_window_) {
873 clipboard_owner_ = ::CreateWindow(L"ClipboardOwnerWindowClass", 847 clipboard_owner_ = ::CreateWindow(L"ClipboardOwnerWindowClass",
874 L"ClipboardOwnerWindow", 848 L"ClipboardOwnerWindow",
875 0, 0, 0, 0, 0, 849 0, 0, 0, 0, 0,
876 HWND_MESSAGE, 850 HWND_MESSAGE,
877 0, 0, 0); 851 0, 0, 0);
878 } 852 }
879 return clipboard_owner_; 853 return clipboard_owner_;
880 } 854 }
881 855
882 } // namespace ui 856 } // namespace ui
OLDNEW
« no previous file with comments | « ui/base/clipboard/clipboard_util_win.cc ('k') | ui/base/clipboard/scoped_clipboard_writer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698