Fix undo/redo problem with erase, added send_multi_update_message blocks

This commit is contained in:
Yousef Khadadeh 2026-05-28 21:55:30 +03:00
parent afc672210c
commit 8e4732c1e0
11 changed files with 102 additions and 72 deletions

View file

@ -170,7 +170,7 @@ void BookmarkManager::setup_list_gui() {
uint32_t insertUndoPosition;
std::vector<WorldUndoManager::UndoObjectID> insertedUndoIDs;
world.netObjMan.send_multi_update_messsage([&]() {
{
std::unordered_map<NetObjID, std::vector<NetObjOrderedListIterator<BookmarkListItem>>> toEraseMap;
uint32_t newIndex = index;
std::vector<NetObjOwnerPtr<BookmarkListItem>> toInsertObjPtrs;
@ -218,7 +218,7 @@ void BookmarkManager::setup_list_gui() {
insertUndoPosition = newIndex;
for(auto& it : insertedIterators)
insertedUndoIDs.emplace_back(world.undo.get_undoid_from_netid(it->obj.get_net_id()));
}, NetObjManager::SendUpdateType::SEND_TO_ALL, nullptr);
}
class MoveBookmarksWorldUndoAction : public WorldUndoAction {
public:
@ -269,7 +269,7 @@ void BookmarkManager::setup_list_gui() {
}
}
undoMan.world.netObjMan.send_multi_update_messsage([&]() {
{
eraseListPtr->erase_list(eraseListPtr, toEraseList, &toMoveObjs);
for(auto& [parentNetID, indexNetIDListPair] : toInsertToMap) {
@ -286,7 +286,7 @@ void BookmarkManager::setup_list_gui() {
}
parentListPtr->insert_sorted_list_and_send_create(parentListPtr, toInsert);
}
}, NetObjManager::SendUpdateType::SEND_TO_ALL, nullptr);
}
return true;
}
bool redo(WorldUndoManager& undoMan) override {
@ -316,7 +316,7 @@ void BookmarkManager::setup_list_gui() {
return false;
}
undoMan.world.netObjMan.send_multi_update_messsage([&]() {
{
std::vector<NetObjOwnerPtr<BookmarkListItem>> toInsertObjPtrs;
for(auto& [listToEraseFrom, setToErase] : toEraseMap) {
@ -334,7 +334,8 @@ void BookmarkManager::setup_list_gui() {
toInsert.back().second.reassign_ids();
}
listPtr->insert_sorted_list_and_send_create(listPtr, toInsert);
}, NetObjManager::SendUpdateType::SEND_TO_ALL, nullptr);
}
return true;
}
~MoveBookmarksWorldUndoAction() {}