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

Side by Side Diff: base/clipboard.h

Issue 8038: Simultaneously store multiple formats on the linux clipboard. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 12 years, 2 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 | « base/base_unittests.scons ('k') | base/clipboard_linux.cc » ('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) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 #ifndef BASE_CLIPBOARD_H_ 5 #ifndef BASE_CLIPBOARD_H_
6 #define BASE_CLIPBOARD_H_ 6 #define BASE_CLIPBOARD_H_
7 7
8 #include <map>
8 #include <string> 9 #include <string>
10 #include <utility>
9 #include <vector> 11 #include <vector>
10 12
11 #include "base/basictypes.h" 13 #include "base/basictypes.h"
12 #include "base/gfx/size.h" 14 #include "base/gfx/size.h"
13 #include "base/shared_memory.h" 15 #include "base/shared_memory.h"
14 16
15 #if defined(OS_MACOSX) 17 #if defined(OS_MACOSX)
16 #if defined(__OBJC__) 18 #if defined(__OBJC__)
17 @class NSString; 19 @class NSString;
18 #else 20 #else
19 class NSString; 21 class NSString;
20 #endif 22 #endif
21 #endif 23 #endif
22 24
23 class Clipboard { 25 class Clipboard {
24 public: 26 public:
25 #if defined(OS_WIN) 27 #if defined(OS_WIN)
26 typedef unsigned int FormatType; 28 typedef unsigned int FormatType;
27 #elif defined(OS_MACOSX) 29 #elif defined(OS_MACOSX)
28 typedef NSString *FormatType; 30 typedef NSString *FormatType;
29 #elif defined(OS_LINUX) 31 #elif defined(OS_LINUX)
30 typedef struct _GdkAtom* FormatType; 32 typedef struct _GdkAtom* FormatType;
31 typedef struct _GtkClipboard GtkClipboard; 33 typedef struct _GtkClipboard GtkClipboard;
34 // A mapping from target (format) string to the relevant data (usually a
35 // string, but potentially arbitrary data).
36 typedef std::map<std::string, std::pair<uint8*, size_t> > TargetMap;
32 #endif 37 #endif
33 38
34 Clipboard(); 39 Clipboard();
35 ~Clipboard(); 40 ~Clipboard();
36 41
37 // Clears the clipboard. It is usually a good idea to clear the clipboard 42 // Clears the clipboard. It is usually a good idea to clear the clipboard
38 // before writing content to the clipboard. 43 // before writing content to the clipboard.
39 void Clear(); 44 void Clear();
40 45
41 // Adds UNICODE and ASCII text to the clipboard. 46 // Adds UNICODE and ASCII text to the clipboard.
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 // Reads HTML from the clipboard, if available. 96 // Reads HTML from the clipboard, if available.
92 void ReadHTML(std::wstring* markup, std::string* src_url) const; 97 void ReadHTML(std::wstring* markup, std::string* src_url) const;
93 98
94 // Reads a bookmark from the clipboard, if available. 99 // Reads a bookmark from the clipboard, if available.
95 void ReadBookmark(std::wstring* title, std::string* url) const; 100 void ReadBookmark(std::wstring* title, std::string* url) const;
96 101
97 // Reads a file or group of files from the clipboard, if available, into the 102 // Reads a file or group of files from the clipboard, if available, into the
98 // out parameter. 103 // out parameter.
99 void ReadFile(std::wstring* file) const; 104 void ReadFile(std::wstring* file) const;
100 void ReadFiles(std::vector<std::wstring>* files) const; 105 void ReadFiles(std::vector<std::wstring>* files) const;
101 106
102 // Get format Identifiers for various types. 107 // Get format Identifiers for various types.
103 static FormatType GetUrlFormatType(); 108 static FormatType GetUrlFormatType();
104 static FormatType GetUrlWFormatType(); 109 static FormatType GetUrlWFormatType();
105 static FormatType GetMozUrlFormatType(); 110 static FormatType GetMozUrlFormatType();
106 static FormatType GetPlainTextFormatType(); 111 static FormatType GetPlainTextFormatType();
107 static FormatType GetPlainTextWFormatType(); 112 static FormatType GetPlainTextWFormatType();
108 static FormatType GetFilenameFormatType(); 113 static FormatType GetFilenameFormatType();
109 static FormatType GetFilenameWFormatType(); 114 static FormatType GetFilenameWFormatType();
110 // Win: MS HTML Format, Other: Generic HTML format 115 // Win: MS HTML Format, Other: Generic HTML format
111 static FormatType GetHtmlFormatType(); 116 static FormatType GetHtmlFormatType();
(...skipping 16 matching lines...) Expand all
128 static void ParseHTMLClipboardFormat(const std::string& html_fragment, 133 static void ParseHTMLClipboardFormat(const std::string& html_fragment,
129 std::wstring* markup, 134 std::wstring* markup,
130 std::string* src_url); 135 std::string* src_url);
131 136
132 static void ParseBookmarkClipboardFormat(const std::wstring& bookmark, 137 static void ParseBookmarkClipboardFormat(const std::wstring& bookmark,
133 std::wstring* title, 138 std::wstring* title,
134 std::string* url); 139 std::string* url);
135 140
136 HWND clipboard_owner_; 141 HWND clipboard_owner_;
137 #elif defined(OS_LINUX) 142 #elif defined(OS_LINUX)
143 // Write changes to gtk clipboard.
144 void SetGtkClipboard();
145 // Free pointers in clipboard_data_ and clear() the map.
146 void FreeTargetMap();
147 // Insert a mapping into clipboard_data_, or change an existing mapping.
148 uint8* InsertOrOverwrite(std::string target, uint8* data, size_t data_len);
149
150 // We have to be able to store multiple formats on the clipboard
151 // simultaneously. The Chrome Clipboard class accomplishes this by
152 // expecting that consecutive calls to Write* (WriteHTML, WriteText, etc.)
153 // The GTK clipboard interface does not naturally support consecutive calls
154 // building on one another. So we keep all data in a map, and always pass the
155 // map when we are setting the gtk clipboard. Consecutive calls to Write*
156 // will write to the map and set the GTK clipboard, then add to the same
157 // map and set the GTK clipboard again. GTK thinks it is wiping out the
158 // clipboard but we are actually keeping the previous data.
159 TargetMap clipboard_data_;
138 GtkClipboard* clipboard_; 160 GtkClipboard* clipboard_;
139 #endif 161 #endif
140 162
141 DISALLOW_EVIL_CONSTRUCTORS(Clipboard); 163 DISALLOW_EVIL_CONSTRUCTORS(Clipboard);
142 }; 164 };
143 165
144 #endif // BASE_CLIPBOARD_H_ 166 #endif // BASE_CLIPBOARD_H_
145 167
OLDNEW
« no previous file with comments | « base/base_unittests.scons ('k') | base/clipboard_linux.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698