From 09cd6f5ba9128c5ae2fe82e77069e6592918b131 Mon Sep 17 00:00:00 2001 From: "hewitt%netscape.com" Date: Wed, 12 Sep 2007 17:49:06 +0000 Subject: [PATCH] 78882 - Dragging a bookmark into the personal toolbar causes all items to be deleted, r=ben, sr=alecf git-svn-id: svn://10.0.0.236/trunk@235741 18797224-902f-48f8-a5cc-f745e15eee43 --- .../browser/public/nsIBookmarksService.idl | 3 +++ .../suite/browser/src/nsBookmarksService.cpp | 26 +++++++++++++++---- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/mozilla/suite/browser/public/nsIBookmarksService.idl b/mozilla/suite/browser/public/nsIBookmarksService.idl index c2fa4a932e7..818bf06cc13 100644 --- a/mozilla/suite/browser/public/nsIBookmarksService.idl +++ b/mozilla/suite/browser/public/nsIBookmarksService.idl @@ -45,6 +45,9 @@ interface nsIBookmarksService : nsISupports void AddBookmarkToFolder(in string aURI, in nsIRDFResource aFolder, in wstring aTitle, in wstring docCharSet); + void insertBookmarkInFolder(in string aURI, in wstring aTitle, in wstring docCharSet, + in nsIRDFResource aFolder, in long aIndex); + void UpdateBookmarkLastVisitedDate(in string aURL, in wstring docCharset); string FindShortcut(in wstring aName); diff --git a/mozilla/suite/browser/src/nsBookmarksService.cpp b/mozilla/suite/browser/src/nsBookmarksService.cpp index eaa69485061..e40d66913d1 100644 --- a/mozilla/suite/browser/src/nsBookmarksService.cpp +++ b/mozilla/suite/browser/src/nsBookmarksService.cpp @@ -396,7 +396,8 @@ public: const char* aShortcutURL, nsIRDFResource* aNodeType, nsIRDFResource** bookmarkNode, - const PRUnichar* aCharset); + const PRUnichar* aCharset, + PRInt32 aIndex); nsresult SetIEFavoritesRoot(const char *IEFavoritesRootURL) { @@ -1366,7 +1367,8 @@ BookmarkParser::AddBookmark(nsCOMPtr aContainer, const char* aShortcutURL, nsIRDFResource* aNodeType, nsIRDFResource** bookmarkNode, - const PRUnichar* aCharset) + const PRUnichar* aCharset, + PRInt32 aIndex) { nsresult rv; nsAutoString fullURL; @@ -1464,7 +1466,10 @@ BookmarkParser::AddBookmark(nsCOMPtr aContainer, } // The last thing we do is add the bookmark to the container. This ensures the minimal amount of reflow. - rv = aContainer->AppendElement(bookmark); + if (aIndex < 0) + rv = aContainer->AppendElement(bookmark); + else + rv = aContainer->InsertElementAt(bookmark, aIndex, PR_TRUE); NS_ASSERTION(NS_SUCCEEDED(rv), "unable to add bookmark to container"); return(rv); } @@ -2481,6 +2486,17 @@ nsBookmarksService::AddBookmarkToFolder(const char *aURI, nsIRDFResource *aFolder, const PRUnichar* aTitle, const PRUnichar *aCharset) +{ + return InsertBookmarkInFolder(aURI, aTitle, aCharset, aFolder, -1); +} + + +NS_IMETHODIMP +nsBookmarksService::InsertBookmarkInFolder(const char *aURI, + const PRUnichar* aTitle, + const PRUnichar *aCharset, + nsIRDFResource *aFolder, + PRInt32 aIndex) { // XXX Constructing a parser object to do this is bad. // We need to factor AddBookmark() into its own little @@ -2510,7 +2526,7 @@ nsBookmarksService::AddBookmarkToFolder(const char *aURI, LL_L2I(now32, now64); rv = parser.AddBookmark(container, aURI, aTitle, now32, - 0L, 0L, nsnull, kNC_Bookmark, nsnull, aCharset); + 0L, 0L, nsnull, kNC_Bookmark, nsnull, aCharset, aIndex); if (NS_FAILED(rv)) return rv; @@ -4345,7 +4361,7 @@ nsBookmarksService::WriteBookmarksContainer(nsIRDFDataSource *ds, nsOutputFileSt } } } - + strm << indentation; strm << " "; if (isContainer == PR_TRUE)