diff options
-rw-r--r-- | app/gtk_dnd_util.cc | 11 | ||||
-rw-r--r-- | chrome/browser/gtk/bookmark_bar_gtk.cc | 11 | ||||
-rw-r--r-- | chrome/browser/gtk/bookmark_manager_gtk.cc | 3 | ||||
-rw-r--r-- | chrome/browser/gtk/bookmark_menu_controller_gtk.cc | 6 | ||||
-rw-r--r-- | chrome/browser/gtk/bookmark_utils_gtk.cc | 11 | ||||
-rw-r--r-- | chrome/browser/gtk/tab_contents_drag_source.cc | 21 | ||||
-rw-r--r-- | chrome/browser/gtk/toolbar_star_toggle_gtk.cc | 7 |
7 files changed, 43 insertions, 27 deletions
diff --git a/app/gtk_dnd_util.cc b/app/gtk_dnd_util.cc index da4362dc..fb2f492 100644 --- a/app/gtk_dnd_util.cc +++ b/app/gtk_dnd_util.cc @@ -154,6 +154,17 @@ void GtkDndUtil::WriteURLWithName(GtkSelectionData* selection_data, pickle.size()); break; } + case NETSCAPE_URL: { + // _NETSCAPE_URL format is URL + \n + title. + std::string utf8_text = url.spec() + "\n" + UTF16ToUTF8(title); + gtk_selection_data_set(selection_data, + selection_data->target, + kBitsPerByte, + reinterpret_cast<const guchar*>(utf8_text.c_str()), + utf8_text.length()); + break; + } + default: { NOTREACHED(); break; diff --git a/chrome/browser/gtk/bookmark_bar_gtk.cc b/chrome/browser/gtk/bookmark_bar_gtk.cc index d28972e..62edacf 100644 --- a/chrome/browser/gtk/bookmark_bar_gtk.cc +++ b/chrome/browser/gtk/bookmark_bar_gtk.cc @@ -757,11 +757,14 @@ GtkWidget* BookmarkBarGtk::CreateBookmarkButton(const BookmarkNode* node) { bookmark_utils::ConfigureButtonForNode(node, model_, button, theme_provider_); // The tool item is also a source for dragging - gtk_drag_source_set(button, GDK_BUTTON1_MASK, - NULL, 0, GDK_ACTION_MOVE); + gtk_drag_source_set(button, GDK_BUTTON1_MASK, NULL, 0, + static_cast<GdkDragAction>(GDK_ACTION_MOVE | GDK_ACTION_COPY)); int target_mask = GtkDndUtil::CHROME_BOOKMARK_ITEM; - if (node->is_url()) - target_mask |= GtkDndUtil::TEXT_URI_LIST | GtkDndUtil::TEXT_PLAIN; + if (node->is_url()) { + target_mask |= GtkDndUtil::TEXT_URI_LIST | + GtkDndUtil::TEXT_PLAIN | + GtkDndUtil::NETSCAPE_URL; + } GtkDndUtil::SetSourceTargetListFromCodeMask(button, target_mask); g_signal_connect(G_OBJECT(button), "drag-begin", G_CALLBACK(&OnButtonDragBegin), this); diff --git a/chrome/browser/gtk/bookmark_manager_gtk.cc b/chrome/browser/gtk/bookmark_manager_gtk.cc index 11100af..4422230 100644 --- a/chrome/browser/gtk/bookmark_manager_gtk.cc +++ b/chrome/browser/gtk/bookmark_manager_gtk.cc @@ -62,7 +62,8 @@ const int kDestTargetList[] = { GtkDndUtil::CHROME_BOOKMARK_ITEM, -1 }; // The source targets that the right tree view supports for dragging. const int kSourceTargetMask = GtkDndUtil::CHROME_BOOKMARK_ITEM | GtkDndUtil::TEXT_URI_LIST | - GtkDndUtil::TEXT_PLAIN; + GtkDndUtil::TEXT_PLAIN | + GtkDndUtil::NETSCAPE_URL; // We only have one manager open at a time. BookmarkManagerGtk* manager = NULL; diff --git a/chrome/browser/gtk/bookmark_menu_controller_gtk.cc b/chrome/browser/gtk/bookmark_menu_controller_gtk.cc index 4ddda23..874ce96 100644 --- a/chrome/browser/gtk/bookmark_menu_controller_gtk.cc +++ b/chrome/browser/gtk/bookmark_menu_controller_gtk.cc @@ -186,11 +186,11 @@ void BookmarkMenuController::BuildMenu(const BookmarkNode* parent, NOTREACHED(); } - gtk_drag_source_set(menu_item, GDK_BUTTON1_MASK, - NULL, 0, GDK_ACTION_MOVE); + gtk_drag_source_set(menu_item, GDK_BUTTON1_MASK, NULL, 0, + static_cast<GdkDragAction>(GDK_ACTION_COPY | GDK_ACTION_LINK)); int target_mask = GtkDndUtil::CHROME_BOOKMARK_ITEM; if (node->is_url()) - target_mask |= GtkDndUtil::TEXT_URI_LIST; + target_mask |= GtkDndUtil::TEXT_URI_LIST | GtkDndUtil::NETSCAPE_URL; GtkDndUtil::SetSourceTargetListFromCodeMask(menu_item, target_mask); g_signal_connect(G_OBJECT(menu_item), "drag-begin", G_CALLBACK(&OnMenuItemDragBegin), this); diff --git a/chrome/browser/gtk/bookmark_utils_gtk.cc b/chrome/browser/gtk/bookmark_utils_gtk.cc index fd09af2..05aef12 100644 --- a/chrome/browser/gtk/bookmark_utils_gtk.cc +++ b/chrome/browser/gtk/bookmark_utils_gtk.cc @@ -224,6 +224,17 @@ void WriteBookmarksToSelection(const std::vector<const BookmarkNode*>& nodes, pickle.size()); break; } + case GtkDndUtil::NETSCAPE_URL: { + // _NETSCAPE_URL format is URL + \n + title. + std::string utf8_text = nodes[0]->GetURL().spec() + "\n" + UTF16ToUTF8( + nodes[0]->GetTitleAsString16()); + gtk_selection_data_set(selection_data, + selection_data->target, + kBitsInAByte, + reinterpret_cast<const guchar*>(utf8_text.c_str()), + utf8_text.length()); + break; + } case GtkDndUtil::TEXT_URI_LIST: { gchar** uris = reinterpret_cast<gchar**>(malloc(sizeof(gchar*) * (nodes.size() + 1))); diff --git a/chrome/browser/gtk/tab_contents_drag_source.cc b/chrome/browser/gtk/tab_contents_drag_source.cc index b9883cc..39f7bda 100644 --- a/chrome/browser/gtk/tab_contents_drag_source.cc +++ b/chrome/browser/gtk/tab_contents_drag_source.cc @@ -127,7 +127,7 @@ void TabContentsDragSource::DidProcessEvent(GdkEvent* event) { void TabContentsDragSource::OnDragDataGet( GdkDragContext* context, GtkSelectionData* selection_data, guint target_type, guint time) { - const int bits_per_byte = 8; + const int kBitsPerByte = 8; switch (target_type) { case GtkDndUtil::TEXT_PLAIN: { @@ -144,35 +144,24 @@ void TabContentsDragSource::OnDragDataGet( gtk_selection_data_set(selection_data, GtkDndUtil::GetAtomForTarget( GtkDndUtil::TEXT_HTML), - bits_per_byte, + kBitsPerByte, reinterpret_cast<const guchar*>(utf8_text.c_str()), utf8_text.length()); break; } case GtkDndUtil::TEXT_URI_LIST: - case GtkDndUtil::CHROME_NAMED_URL: { + case GtkDndUtil::CHROME_NAMED_URL: + case GtkDndUtil::NETSCAPE_URL: { GtkDndUtil::WriteURLWithName(selection_data, drop_data_->url, drop_data_->url_title, target_type); break; } - case GtkDndUtil::NETSCAPE_URL: { - // _NETSCAPE_URL format is URL + \n + title. - std::string utf8_text = drop_data_->url.spec() + "\n" + UTF16ToUTF8( - drop_data_->url_title); - gtk_selection_data_set(selection_data, - selection_data->target, - bits_per_byte, - reinterpret_cast<const guchar*>(utf8_text.c_str()), - utf8_text.length()); - break; - } - case GtkDndUtil::CHROME_WEBDROP_FILE_CONTENTS: { gtk_selection_data_set( selection_data, - drag_file_mime_type_, bits_per_byte, + drag_file_mime_type_, kBitsPerByte, reinterpret_cast<const guchar*>(drop_data_->file_contents.data()), drop_data_->file_contents.length()); break; diff --git a/chrome/browser/gtk/toolbar_star_toggle_gtk.cc b/chrome/browser/gtk/toolbar_star_toggle_gtk.cc index 328b5e7..e709d7b 100644 --- a/chrome/browser/gtk/toolbar_star_toggle_gtk.cc +++ b/chrome/browser/gtk/toolbar_star_toggle_gtk.cc @@ -38,12 +38,13 @@ ToolbarStarToggleGtk::ToolbarStarToggleGtk(BrowserToolbarGtk* host) G_CALLBACK(OnExpose), this); GTK_WIDGET_UNSET_FLAGS(widget_.get(), GTK_CAN_FOCUS); - gtk_drag_source_set(widget(), GDK_BUTTON1_MASK, - NULL, 0, GDK_ACTION_COPY); + gtk_drag_source_set(widget(), GDK_BUTTON1_MASK, NULL, 0, + static_cast<GdkDragAction>(GDK_ACTION_COPY | GDK_ACTION_LINK)); GtkDndUtil::SetSourceTargetListFromCodeMask(widget(), GtkDndUtil::TEXT_PLAIN | GtkDndUtil::TEXT_URI_LIST | - GtkDndUtil::CHROME_NAMED_URL); + GtkDndUtil::CHROME_NAMED_URL | + GtkDndUtil::NETSCAPE_URL); g_signal_connect(widget(), "drag-data-get", G_CALLBACK(OnDragDataGet), this); theme_provider_->InitThemesFor(this); |