diff options
author | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-04 21:52:29 +0000 |
---|---|---|
committer | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-04 21:52:29 +0000 |
commit | b08cadb9ab90b41af81b9fd8da65fb52433c8004 (patch) | |
tree | 55738edf0c98b596cd6f9a89533e92f5a82c6fff /base/clipboard_linux.cc | |
parent | 021d688a1e02ae7bd88e54162d5d25e1dae52e7c (diff) | |
download | chromium_src-b08cadb9ab90b41af81b9fd8da65fb52433c8004.zip chromium_src-b08cadb9ab90b41af81b9fd8da65fb52433c8004.tar.gz chromium_src-b08cadb9ab90b41af81b9fd8da65fb52433c8004.tar.bz2 |
GTK: implement bookmark manager copy/paste.
- Refactor bookmark util clipboard code to be cross platform.
- Add a CBF_DATA format for writing arbitrary data to the clipboard.
- Change MenuGtk so that showing a menu only makes the menu items update asynchronously. This way we can show the menu immediately and we won't get in trouble if the delegate's IsCommandEnabled() runs a nested message loop.
I did not do any mac-side implementation of the new clipboard stuff. The implementation should be easy when they get around to writing the bookmark manager.
Review URL: http://codereview.chromium.org/159815
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@22419 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/clipboard_linux.cc')
-rw-r--r-- | base/clipboard_linux.cc | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/base/clipboard_linux.cc b/base/clipboard_linux.cc index 552ea79..c259cea 100644 --- a/base/clipboard_linux.cc +++ b/base/clipboard_linux.cc @@ -21,7 +21,7 @@ namespace { const char kMimeBmp[] = "image/bmp"; const char kMimeHtml[] = "text/html"; const char kMimeText[] = "text/plain"; -const char kMimeWebkitSmartPaste[] = "chromium-internal/webkit-paste"; +const char kMimeWebkitSmartPaste[] = "chromium/x-webkit-paste"; std::string GdkAtomToString(const GdkAtom& atom) { gchar* name = gdk_atom_name(atom); @@ -193,6 +193,14 @@ void Clipboard::WriteFiles(const char* file_data, size_t file_len) { NOTIMPLEMENTED(); } +void Clipboard::WriteData(const char* format_name, size_t format_len, + const char* data_data, size_t data_len) { + char* data = new char[data_len]; + memcpy(data, data_data, data_len); + std::string format(format_name, format_len); + InsertMapping(format.c_str(), data, data_len); +} + // We do not use gtk_clipboard_wait_is_target_available because of // a bug with the gtk clipboard. It caches the available targets // and does not always refresh the cache when it is appropriate. @@ -246,6 +254,10 @@ bool Clipboard::IsFormatAvailable(const Clipboard::FormatType& format) const { return retval; } +bool Clipboard::IsFormatAvailableByString(const std::string& format) const { + return IsFormatAvailable(format); +} + void Clipboard::ReadText(string16* result) const { result->clear(); gchar* text = gtk_clipboard_wait_for_text(clipboard_); @@ -284,9 +296,20 @@ void Clipboard::ReadHTML(string16* markup, std::string* src_url) const { if (!data) return; - UTF8ToUTF16(reinterpret_cast<char*>(data->data), - strlen(reinterpret_cast<char*>(data->data)), - markup); + UTF8ToUTF16(reinterpret_cast<char*>(data->data), data->length, markup); + gtk_selection_data_free(data); +} + +void Clipboard::ReadBookmark(string16* title, std::string* url) const { + // TODO(estade): implement this. +} + +void Clipboard::ReadData(const std::string& format, std::string* result) { + GtkSelectionData* data = + gtk_clipboard_wait_for_contents(clipboard_, StringToGdkAtom(format)); + if (!data) + return; + result->assign(reinterpret_cast<char*>(data->data), data->length); gtk_selection_data_free(data); } |