diff options
author | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-23 21:42:58 +0000 |
---|---|---|
committer | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-23 21:42:58 +0000 |
commit | b6d432335f59500e092de2be4fcf42ed303ae1c5 (patch) | |
tree | 0dae24ec6c0f89442ee37d18aeb17f5dcf48d6e0 /app/os_exchange_data_provider_gtk.cc | |
parent | 599ea9fd7f5f029661916c191ff89b7358719f81 (diff) | |
download | chromium_src-b6d432335f59500e092de2be4fcf42ed303ae1c5.zip chromium_src-b6d432335f59500e092de2be4fcf42ed303ae1c5.tar.gz chromium_src-b6d432335f59500e092de2be4fcf42ed303ae1c5.tar.bz2 |
Implements file contents support in OSExchangeData and DropTarget
for gtk. Makes html and file contents support in OSExchangeData only
for windows (as that is the only place we need it), and makes dragging
files work.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/232002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@26995 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'app/os_exchange_data_provider_gtk.cc')
-rw-r--r-- | app/os_exchange_data_provider_gtk.cc | 104 |
1 files changed, 37 insertions, 67 deletions
diff --git a/app/os_exchange_data_provider_gtk.cc b/app/os_exchange_data_provider_gtk.cc index 5b32907..597a5ae 100644 --- a/app/os_exchange_data_provider_gtk.cc +++ b/app/os_exchange_data_provider_gtk.cc @@ -7,7 +7,9 @@ #include <algorithm> #include "app/gtk_dnd_util.h" +#include "base/file_path.h" #include "base/string_util.h" +#include "net/base/net_util.h" OSExchangeDataProviderGtk::OSExchangeDataProviderGtk( int known_formats, @@ -53,15 +55,8 @@ GtkTargetList* OSExchangeDataProviderGtk::GetTargetList() const { OSExchangeData::URL); } - if ((formats_ & OSExchangeData::FILE_CONTENTS) != 0) - NOTIMPLEMENTED(); - if ((formats_ & OSExchangeData::FILE_NAME) != 0) - NOTIMPLEMENTED(); - - if ((formats_ & OSExchangeData::HTML) != 0) - NOTIMPLEMENTED(); - + gtk_target_list_add_uri_targets(targets, OSExchangeData::FILE_NAME); for (PickleData::const_iterator i = pickle_data_.begin(); i != pickle_data_.end(); ++i) { @@ -101,15 +96,14 @@ void OSExchangeDataProviderGtk::WriteFormatToSelection( free(uri_array[0]); } - if ((format & OSExchangeData::FILE_CONTENTS) != 0) - NOTIMPLEMENTED(); - - if ((format & OSExchangeData::FILE_NAME) != 0) - NOTIMPLEMENTED(); - - if ((format & OSExchangeData::HTML) != 0) - NOTIMPLEMENTED(); - + if ((format & OSExchangeData::FILE_NAME) != 0) { + gchar* uri_array[2]; + uri_array[0] = + strdup(net::FilePathToFileURL(FilePath(filename_)).spec().c_str()); + uri_array[1] = NULL; + gtk_selection_data_set_uris(selection, uri_array); + free(uri_array[0]); + } if ((format & OSExchangeData::PICKLED_DATA) != 0) { for (PickleData::const_iterator i = pickle_data_.begin(); @@ -138,7 +132,7 @@ void OSExchangeDataProviderGtk::SetURL(const GURL& url, } void OSExchangeDataProviderGtk::SetFilename(const std::wstring& full_path) { - filename_ = WideToUTF16Hack(full_path); + filename_ = WideToUTF8(full_path); formats_ |= OSExchangeData::FILE_NAME; } @@ -148,21 +142,6 @@ void OSExchangeDataProviderGtk::SetPickledData(GdkAtom format, formats_ |= OSExchangeData::PICKLED_DATA; } -void OSExchangeDataProviderGtk::SetFileContents( - const std::wstring& filename, - const std::string& file_contents) { - filename_ = WideToUTF16Hack(filename); - file_contents_ = file_contents; - formats_ |= OSExchangeData::FILE_CONTENTS; -} - -void OSExchangeDataProviderGtk::SetHtml(const std::wstring& html, - const GURL& base_url) { - html_ = WideToUTF16Hack(html); - base_url_ = base_url; - formats_ |= OSExchangeData::HTML; -} - bool OSExchangeDataProviderGtk::GetString(std::wstring* data) const { if ((formats_ & OSExchangeData::STRING) == 0) return false; @@ -172,8 +151,11 @@ bool OSExchangeDataProviderGtk::GetString(std::wstring* data) const { bool OSExchangeDataProviderGtk::GetURLAndTitle(GURL* url, std::wstring* title) const { - if ((formats_ & OSExchangeData::URL) == 0) - return false; + if ((formats_ & OSExchangeData::URL) == 0) { + title->clear(); + return GetPlainTextURL(url); + } + if (!url_.is_valid()) return false; @@ -185,7 +167,7 @@ bool OSExchangeDataProviderGtk::GetURLAndTitle(GURL* url, bool OSExchangeDataProviderGtk::GetFilename(std::wstring* full_path) const { if ((formats_ & OSExchangeData::FILE_NAME) == 0) return false; - *full_path = UTF16ToWideHack(filename_); + *full_path = UTF8ToWide(filename_); return true; } @@ -199,33 +181,18 @@ bool OSExchangeDataProviderGtk::GetPickledData(GdkAtom format, return true; } -bool OSExchangeDataProviderGtk::GetFileContents( - std::wstring* filename, - std::string* file_contents) const { - if ((formats_ & OSExchangeData::FILE_CONTENTS) == 0) - return false; - *filename = UTF16ToWideHack(filename_); - *file_contents = file_contents_; - return true; -} - -bool OSExchangeDataProviderGtk::GetHtml(std::wstring* html, - GURL* base_url) const { - if ((formats_ & OSExchangeData::HTML) == 0) - return false; - *html = UTF16ToWideHack(filename_); - *base_url = base_url_; - return true; -} - bool OSExchangeDataProviderGtk::HasString() const { return (known_formats_ & OSExchangeData::STRING) != 0 || (formats_ & OSExchangeData::STRING) != 0; } bool OSExchangeDataProviderGtk::HasURL() const { - return (known_formats_ & OSExchangeData::URL) != 0 || - (formats_ & OSExchangeData::URL) != 0; + if ((known_formats_ & OSExchangeData::URL) != 0 || + (formats_ & OSExchangeData::URL) != 0) { + return true; + } + // No URL, see if we have plain text that can be parsed as a URL. + return GetPlainTextURL(NULL); } bool OSExchangeDataProviderGtk::HasFile() const { @@ -233,21 +200,24 @@ bool OSExchangeDataProviderGtk::HasFile() const { (formats_ & OSExchangeData::FILE_NAME) != 0; } -bool OSExchangeDataProviderGtk::HasFileContents() const { - return (known_formats_ & OSExchangeData::FILE_CONTENTS) != 0 || - (formats_ & OSExchangeData::FILE_CONTENTS) != 0; -} - -bool OSExchangeDataProviderGtk::HasHtml() const { - return (known_formats_ & OSExchangeData::HTML) != 0 || - (formats_ & OSExchangeData::HTML) != 0; -} - bool OSExchangeDataProviderGtk::HasCustomFormat(GdkAtom format) const { return known_custom_formats_.find(format) != known_custom_formats_.end() || pickle_data_.find(format) != pickle_data_.end(); } +bool OSExchangeDataProviderGtk::GetPlainTextURL(GURL* url) const { + if ((formats_ & OSExchangeData::STRING) == 0) + return false; + + GURL test_url(string_); + if (!test_url.is_valid()) + return false; + + if (url) + *url = test_url; + return true; +} + /////////////////////////////////////////////////////////////////////////////// // OSExchangeData, public: |