Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(585)

Unified Diff: components/bookmarks/browser/bookmark_pasteboard_helper_mac.mm

Issue 1854223002: mac: Fix bookmark drag and drop. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@temp37_dnd
Patch Set: Fix memory leak. Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/bookmarks/browser/bookmark_pasteboard_helper_mac.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/bookmarks/browser/bookmark_pasteboard_helper_mac.mm
diff --git a/components/bookmarks/browser/bookmark_pasteboard_helper_mac.mm b/components/bookmarks/browser/bookmark_pasteboard_helper_mac.mm
index a2abbe871b71ed00e3b7784f32b977ec222ccd1d..c37f806ea1cb20f5716bfa266b9c8f161dc97a9f 100644
--- a/components/bookmarks/browser/bookmark_pasteboard_helper_mac.mm
+++ b/components/bookmarks/browser/bookmark_pasteboard_helper_mac.mm
@@ -180,13 +180,12 @@ NSArray* GetPlistForBookmarkList(
}
void WriteBookmarkDictionaryListPboardType(
- NSPasteboard* pb,
+ NSPasteboardItem* item,
const std::vector<BookmarkNodeData::Element>& elements) {
NSArray* plist = GetPlistForBookmarkList(elements);
NSString* uti = ui::ClipboardUtil::UTIForPasteboardType(
kBookmarkDictionaryListPboardType);
- [pb addTypes:@[ uti ] owner:nil];
- [pb setPropertyList:plist forType:uti];
+ [item setPropertyList:plist forType:uti];
}
void FillFlattenedArraysForBookmarks(
@@ -210,8 +209,7 @@ void FillFlattenedArraysForBookmarks(
}
}
-void WriteSimplifiedBookmarkTypes(
- NSPasteboard* pb,
+base::scoped_nsobject<NSPasteboardItem> WriteSimplifiedBookmarkTypes(
const std::vector<BookmarkNodeData::Element>& elements) {
NSMutableArray* url_titles = [NSMutableArray array];
NSMutableArray* urls = [NSMutableArray array];
@@ -219,22 +217,23 @@ void WriteSimplifiedBookmarkTypes(
FillFlattenedArraysForBookmarks(
elements, url_titles, urls, toplevel_string_data);
+ base::scoped_nsobject<NSPasteboardItem> item;
if ([urls count] > 0) {
- base::scoped_nsobject<NSPasteboardItem> item;
if ([urls count] == 1) {
item = ui::ClipboardUtil::PasteboardItemFromUrl([urls firstObject],
[url_titles firstObject]);
} else {
item = ui::ClipboardUtil::PasteboardItemFromUrls(urls, url_titles);
}
+ }
- ui::ClipboardUtil::AddDataToPasteboard(pb, item);
+ if (!item) {
+ item = [[NSPasteboardItem alloc] init];
}
- // Write NSStringPboardType.
- [pb addTypes:@[ NSStringPboardType ] owner:nil];
- [pb setString:[toplevel_string_data componentsJoinedByString:@"\n"]
- forType:NSStringPboardType];
+ [item setString:[toplevel_string_data componentsJoinedByString:@"\n"]
+ forType:NSPasteboardTypeString];
+ return item;
}
NSPasteboard* PasteboardFromType(ui::ClipboardType type) {
@@ -256,6 +255,20 @@ NSPasteboard* PasteboardFromType(ui::ClipboardType type) {
} // namespace
+NSPasteboardItem* PasteboardItemFromBookmarks(
+ const std::vector<BookmarkNodeData::Element>& elements,
+ const base::FilePath& profile_path) {
+ base::scoped_nsobject<NSPasteboardItem> item =
+ WriteSimplifiedBookmarkTypes(elements);
+
+ WriteBookmarkDictionaryListPboardType(item, elements);
+
+ NSString* uti =
+ ui::ClipboardUtil::UTIForPasteboardType(kChromiumProfilePathPboardType);
+ [item setString:base::SysUTF8ToNSString(profile_path.value()) forType:uti];
+ return [[item retain] autorelease];
+}
+
void WriteBookmarksToPasteboard(
ui::ClipboardType type,
const std::vector<BookmarkNodeData::Element>& elements,
@@ -263,14 +276,10 @@ void WriteBookmarksToPasteboard(
if (elements.empty())
return;
+ NSPasteboardItem* item = PasteboardItemFromBookmarks(elements, profile_path);
NSPasteboard* pb = PasteboardFromType(type);
-
- NSString* uti =
- ui::ClipboardUtil::UTIForPasteboardType(kChromiumProfilePathPboardType);
- [pb declareTypes:@[ uti ] owner:nil];
- [pb setString:base::SysUTF8ToNSString(profile_path.value()) forType:uti];
- WriteBookmarkDictionaryListPboardType(pb, elements);
- WriteSimplifiedBookmarkTypes(pb, elements);
+ [pb clearContents];
+ [pb writeObjects:@[ item ]];
}
bool ReadBookmarksFromPasteboard(
« no previous file with comments | « components/bookmarks/browser/bookmark_pasteboard_helper_mac.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698