summaryrefslogtreecommitdiffstats
path: root/chrome/browser/bookmarks/bookmark_utils.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/bookmarks/bookmark_utils.cc')
-rw-r--r--chrome/browser/bookmarks/bookmark_utils.cc53
1 files changed, 53 insertions, 0 deletions
diff --git a/chrome/browser/bookmarks/bookmark_utils.cc b/chrome/browser/bookmarks/bookmark_utils.cc
index bf2576f..8aad4f1 100644
--- a/chrome/browser/bookmarks/bookmark_utils.cc
+++ b/chrome/browser/bookmarks/bookmark_utils.cc
@@ -12,6 +12,7 @@
#include "chrome/browser/tab_contents.h"
#include "chrome/common/drag_drop_types.h"
#include "chrome/common/l10n_util.h"
+#include "chrome/common/os_exchange_data.h"
#include "chrome/views/event.h"
#include "chromium_strings.h"
@@ -237,4 +238,56 @@ void OpenAll(HWND parent,
OpenAll(parent, profile, navigator, nodes, initial_disposition);
}
+void CopyToClipboard(BookmarkModel* model,
+ const std::vector<BookmarkNode*>& nodes,
+ bool remove_nodes) {
+ if (nodes.empty())
+ return;
+
+ OSExchangeData* data = new OSExchangeData();
+ BookmarkDragData(nodes).Write(NULL, data);
+ OleSetClipboard(data);
+ // OLE takes ownership of OSExchangeData.
+
+ if (remove_nodes) {
+ for (size_t i = 0; i < nodes.size(); ++i) {
+ model->Remove(nodes[i]->GetParent(),
+ nodes[i]->GetParent()->IndexOfChild(nodes[i]));
+ }
+ }
+}
+
+void PasteFromClipboard(BookmarkModel* model,
+ BookmarkNode* parent,
+ int index) {
+ if (!parent)
+ return;
+
+ IDataObject* data;
+ if (OleGetClipboard(&data) != S_OK)
+ return;
+
+ OSExchangeData data_wrapper(data);
+ BookmarkDragData bookmark_data;
+ if (!bookmark_data.Read(data_wrapper))
+ return;
+
+ if (index == -1)
+ index = parent->GetChildCount();
+ bookmark_utils::CloneDragData(model, bookmark_data.elements, parent, index);
+}
+
+bool CanPasteFromClipboard(BookmarkNode* node) {
+ if (!node)
+ return false;
+
+ IDataObject* data;
+ if (OleGetClipboard(&data) != S_OK)
+ return false;
+
+ OSExchangeData data_wrapper(data);
+ BookmarkDragData bookmark_data;
+ return bookmark_data.Read(data_wrapper);
+}
+
} // namespace bookmark_utils