summaryrefslogtreecommitdiffstats
path: root/app/os_exchange_data_provider_gtk.cc
diff options
context:
space:
mode:
Diffstat (limited to 'app/os_exchange_data_provider_gtk.cc')
-rw-r--r--app/os_exchange_data_provider_gtk.cc104
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: