diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index 744d7274d..edf153fba 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -1599,6 +1599,13 @@ void DivEngine::checkAssetDir(std::vector& dir, size_t entries) { j--; continue; } + + // erase duplicate entry + if (inAssetDir[j]) { + i.entries.erase(i.entries.begin()+j); + j--; + continue; + } // mark entry as present inAssetDir[j]=true; diff --git a/src/gui/dataList.cpp b/src/gui/dataList.cpp index 733b1a6b4..19fca6235 100644 --- a/src/gui/dataList.cpp +++ b/src/gui/dataList.cpp @@ -59,7 +59,7 @@ const char* sampleNote[12]={ e->lockEngine([&]() { \ int val=_type[dirToMove].entries[assetToMove]; \ _type[dirToMove].entries.erase(_type[dirToMove].entries.begin()+assetToMove); \ - _type[_d].entries.insert(_type[_d].entries.begin()+MAX(_a,0),val); \ + _type[_d].entries.insert((_a<0)?(_type[_d].entries.end()):(_type[_d].entries.begin()+_a),val); \ }); \ } \ } \ @@ -592,7 +592,8 @@ void FurnaceGUI::drawInsList(bool asChild) { insListItem(-1,-1,-1); int dirIndex=0; for (DivAssetDir& i: e->song.insDir) { - bool treeNode=ImGui::TreeNode(i.name.empty()?"":i.name.c_str()); + String nodeName=fmt::sprintf("%s %s##_AD%d",i.name.empty()?ICON_FA_FOLDER_O:ICON_FA_FOLDER,i.name.empty()?"":i.name,i.name.empty()?-1:dirIndex); + bool treeNode=ImGui::TreeNodeEx(nodeName.c_str(),ImGuiTreeNodeFlags_SpanAvailWidth|(i.name.empty()?ImGuiTreeNodeFlags_DefaultOpen:0)); DRAG_SOURCE(dirIndex,-1); DRAG_TARGET(dirIndex,-1,e->song.insDir); if (treeNode) {