diff --git a/src/lib/marble/BookmarkManager.h b/src/lib/marble/BookmarkManager.h --- a/src/lib/marble/BookmarkManager.h +++ b/src/lib/marble/BookmarkManager.h @@ -59,7 +59,7 @@ /** * @brief add bookmark in a folder * @param bookmark bookmark to be added - * @param folderName folder name in which bookmark to be added + * @param folder folder to add bookmark to */ void addBookmark( GeoDataContainer *folder, const GeoDataPlacemark &bookmark ) ; @@ -78,10 +78,16 @@ QVector folders() const; /** + * @brief returns pointer to folder with provided name + * or Q_NULLPTR if there is none + */ + GeoDataFolder* folderByName( const QString &name ); + + /** * @brief add a folder - * @param folder name of folder to be created + * @param name name of folder to be created */ - void addNewBookmarkFolder( GeoDataContainer *folder, const QString &name ); + void addNewBookmarkFolder( GeoDataContainer *container, const QString &name ); void renameBookmarkFolder( GeoDataFolder *folder, const QString &name ); diff --git a/src/lib/marble/BookmarkManager.cpp b/src/lib/marble/BookmarkManager.cpp --- a/src/lib/marble/BookmarkManager.cpp +++ b/src/lib/marble/BookmarkManager.cpp @@ -188,6 +188,19 @@ return d->m_bookmarkDocument->folderList(); } +GeoDataFolder* BookmarkManager::folderByName(const QString &name) +{ + if ( name.isEmpty() ) + return Q_NULLPTR; + + foreach ( GeoDataFolder *folder, folders() ) { + if ( folder->name() == name ) + return folder; + } + + return Q_NULLPTR; +} + void BookmarkManager::addNewBookmarkFolder( GeoDataContainer *container, const QString &name ) { //If name is empty string diff --git a/src/lib/marble/BookmarkManagerDialog.cpp b/src/lib/marble/BookmarkManagerDialog.cpp --- a/src/lib/marble/BookmarkManagerDialog.cpp +++ b/src/lib/marble/BookmarkManagerDialog.cpp @@ -490,7 +490,12 @@ if ( messageBox->clickedButton() == replaceButton || replaceAll ) { d->m_manager->removeBookmark( existingPlacemark ); - d->m_manager->addBookmark( newFolder, *newPlacemark ); + + // Try adding a new folder. If there is one with the same name, nothing happens + d->m_manager->addNewBookmarkFolder(current, newFolder->name()); + GeoDataFolder *folder = d->m_manager->folderByName(newFolder->name()); + d->m_manager->addBookmark( folder, *newPlacemark ); + mDebug() << "Placemark " << newPlacemark->name() << " replaces " << existingPlacemark->name(); added = true; delete messageBox; @@ -502,7 +507,11 @@ } if ( !added ) { - d->m_manager->addBookmark( newFolder, *newPlacemark ); + // Try adding a new folder. If there is one with the same name, nothing happens + d->m_manager->addNewBookmarkFolder(current, newFolder->name()); + + GeoDataFolder *folder = d->m_manager->folderByName(newFolder->name()); + d->m_manager->addBookmark( folder, *newPlacemark); } } }