| Index: chrome/browser/tab_contents/web_drag_dest_gtk.cc
|
| diff --git a/chrome/browser/tab_contents/web_drag_dest_gtk.cc b/chrome/browser/tab_contents/web_drag_dest_gtk.cc
|
| index 0fd6caa0442186a43f03b97521761f22887c58ad..bc07971c2fcc7a59095d87d9e99c901a3cf0e0d4 100644
|
| --- a/chrome/browser/tab_contents/web_drag_dest_gtk.cc
|
| +++ b/chrome/browser/tab_contents/web_drag_dest_gtk.cc
|
| @@ -73,6 +73,7 @@ gboolean WebDragDestGtk::OnDragMotion(GtkWidget* sender,
|
| if (context_ != context) {
|
| context_ = context;
|
| drop_data_.reset(new WebDropData);
|
| + bookmark_drag_data_.Clear();
|
| is_drop_target_ = false;
|
|
|
| static int supported_targets[] = {
|
| @@ -158,23 +159,32 @@ void WebDragDestGtk::OnDragDataReceived(
|
| data->length);
|
| size_t split = netscape_url.find_first_of('\n');
|
| if (split != std::string::npos) {
|
| - drop_data_->url_title = UTF8ToUTF16(netscape_url.substr(0, split));
|
| + drop_data_->url = GURL(netscape_url.substr(0, split));
|
| if (split < netscape_url.size() - 1)
|
| - drop_data_->url = GURL(netscape_url.substr(split + 1));
|
| + drop_data_->url_title = UTF8ToUTF16(netscape_url.substr(split + 1));
|
| }
|
| } else if (data->target ==
|
| gtk_dnd_util::GetAtomForTarget(gtk_dnd_util::CHROME_NAMED_URL)) {
|
| gtk_dnd_util::ExtractNamedURL(data,
|
| &drop_data_->url, &drop_data_->url_title);
|
| - } else if (data->target ==
|
| - gtk_dnd_util::GetAtomForTarget(
|
| - gtk_dnd_util::CHROME_BOOKMARK_ITEM)) {
|
| + }
|
| + }
|
| +
|
| + // For CHROME_BOOKMARK_ITEM, we have to handle the case where the drag source
|
| + // doesn't have any data available for us. In this case we try to synthesize a
|
| + // URL bookmark.
|
| + if (data->target ==
|
| + gtk_dnd_util::GetAtomForTarget(gtk_dnd_util::CHROME_BOOKMARK_ITEM)) {
|
| + if (data->data) {
|
| bookmark_drag_data_.ReadFromVector(
|
| bookmark_utils::GetNodesFromSelection(
|
| NULL, data,
|
| gtk_dnd_util::CHROME_BOOKMARK_ITEM,
|
| tab_contents_->profile(), NULL, NULL));
|
| bookmark_drag_data_.SetOriginatingProfile(tab_contents_->profile());
|
| + } else {
|
| + bookmark_drag_data_.ReadFromTuple(drop_data_->url,
|
| + drop_data_->url_title);
|
| }
|
| }
|
|
|
|
|