summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/clipboard/clipboard_linux.cc23
-rw-r--r--chrome/browser/autocomplete/autocomplete_edit_view_gtk.cc9
-rw-r--r--chrome/browser/bookmarks/bookmark_drag_data.cc7
3 files changed, 20 insertions, 19 deletions
diff --git a/app/clipboard/clipboard_linux.cc b/app/clipboard/clipboard_linux.cc
index 275c37e..8a4a673 100644
--- a/app/clipboard/clipboard_linux.cc
+++ b/app/clipboard/clipboard_linux.cc
@@ -22,7 +22,7 @@ namespace {
const char kMimeBmp[] = "image/bmp";
const char kMimeHtml[] = "text/html";
const char kMimeText[] = "text/plain";
-const char kMimeURI[] = "text/uri-list";
+const char kMimeMozillaUrl[] = "text/x-moz-url";
const char kMimeWebkitSmartPaste[] = "chromium/x-webkit-paste";
std::string GdkAtomToString(const GdkAtom& atom) {
@@ -54,11 +54,6 @@ void GetData(GtkClipboard* clipboard,
if (target_string == kMimeBmp) {
gtk_selection_data_set_pixbuf(selection_data,
reinterpret_cast<GdkPixbuf*>(iter->second.first));
- } else if (target_string == kMimeURI) {
- gchar* uri_list[2];
- uri_list[0] = reinterpret_cast<gchar*>(iter->second.first);
- uri_list[1] = NULL;
- gtk_selection_data_set_uris(selection_data, uri_list);
} else {
gtk_selection_data_set(selection_data, selection_data->target, 8,
reinterpret_cast<guchar*>(iter->second.first),
@@ -207,11 +202,15 @@ void Clipboard::WriteBitmap(const char* pixel_data, const char* size_data) {
void Clipboard::WriteBookmark(const char* title_data, size_t title_len,
const char* url_data, size_t url_len) {
- // Write as a URI.
- char* data = new char[url_len + 1];
- memcpy(data, url_data, url_len);
- data[url_len] = '\0';
- InsertMapping(kMimeURI, data, url_len + 1);
+ // Write as a mozilla url (UTF16: URL, newline, title).
+ string16 url = UTF8ToUTF16(std::string(url_data, url_len) + "\n");
+ string16 title = UTF8ToUTF16(std::string(title_data, title_len));
+ int data_len = 2 * (title.length() + url.length());
+
+ char* data = new char[data_len];
+ memcpy(data, url.data(), 2 * url.length());
+ memcpy(data + 2 * url.length(), title.data(), 2 * title.length());
+ InsertMapping(kMimeMozillaUrl, data, data_len);
}
void Clipboard::WriteData(const char* format_name, size_t format_len,
@@ -219,7 +218,7 @@ void Clipboard::WriteData(const char* format_name, size_t format_len,
std::string format(format_name, format_len);
// We assume that certain mapping types are only written by trusted code.
// Therefore we must upkeep their integrity.
- if (format == kMimeBmp || format == kMimeURI)
+ if (format == kMimeBmp)
return;
char* data = new char[data_len];
memcpy(data, data_data, data_len);
diff --git a/chrome/browser/autocomplete/autocomplete_edit_view_gtk.cc b/chrome/browser/autocomplete/autocomplete_edit_view_gtk.cc
index 52dbdb8..679d2f23 100644
--- a/chrome/browser/autocomplete/autocomplete_edit_view_gtk.cc
+++ b/chrome/browser/autocomplete/autocomplete_edit_view_gtk.cc
@@ -18,6 +18,7 @@
#include "chrome/app/chrome_dll_resource.h"
#include "chrome/browser/autocomplete/autocomplete_edit.h"
#include "chrome/browser/autocomplete/autocomplete_popup_model.h"
+#include "chrome/browser/bookmarks/bookmark_drag_data.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/command_updater.h"
#include "chrome/browser/defaults.h"
@@ -1213,12 +1214,10 @@ void AutocompleteEditViewGtk::HandleCopyOrCutClipboard(bool copy) {
&url, &write_url);
if (write_url) {
- ScopedClipboardWriter scw(g_browser_process->clipboard());
string16 text16(WideToUTF16(text));
-
- scw.WriteText(text16);
- scw.WriteBookmark(text16, url.spec());
- scw.WriteHyperlink(EscapeForHTML(text16), url.spec());
+ BookmarkDragData data;
+ data.ReadFromTuple(url, text16);
+ data.WriteToClipboard(NULL);
// Stop propagating the signal.
static guint copy_signal_id =
diff --git a/chrome/browser/bookmarks/bookmark_drag_data.cc b/chrome/browser/bookmarks/bookmark_drag_data.cc
index c129ff7..b691abf 100644
--- a/chrome/browser/bookmarks/bookmark_drag_data.cc
+++ b/chrome/browser/bookmarks/bookmark_drag_data.cc
@@ -135,8 +135,11 @@ void BookmarkDragData::WriteToClipboard(Profile* profile) const {
scw.WriteHyperlink(EscapeForHTML(title), url);
// Also write the URL to the clipboard as text so that it can be pasted
- // into text fields
- scw.WriteURL(UTF8ToUTF16(url));
+ // into text fields. We use WriteText instead of WriteURL because we don't
+ // want to clobber the X clipboard when the user copies out of the omnibox
+ // on Linux (on Windows and Mac, there is no difference between these
+ // functions).
+ scw.WriteText(UTF8ToUTF16(url));
}
Pickle pickle;