diff --git a/source/fileop.cpp b/source/fileop.cpp index ca70fb6..1c9a290 100644 --- a/source/fileop.cpp +++ b/source/fileop.cpp @@ -543,40 +543,7 @@ bool ParseDirEntries() // Sort the file list if(i >= 0) - { qsort(browserList, browser.numEntries+i, sizeof(BROWSERENTRY), FileSortCallback); - } - - // try to find and select the last loaded file - if(selectLoadedFile == 1 && res != 0 && loadedFile[0] != 0 && browser.dir[0] != 0) - { - int indexFound = -1; - - for(int j=1; j < browser.numEntries + i; j++) - { - if(strcmp(browserList[j].filename, loadedFile) == 0) - { - indexFound = j; - break; - } - } - - // move to this file - if(indexFound > 0) - { - if(indexFound > FILE_PAGESIZE) - { - browser.pageIndex = (ceil(indexFound/FILE_PAGESIZE*1.0)) * FILE_PAGESIZE; - - if(browser.pageIndex + FILE_PAGESIZE > browser.numEntries + i) - { - browser.pageIndex = browser.numEntries + i - FILE_PAGESIZE; - } - } - browser.selIndex = indexFound; - } - selectLoadedFile = 2; // selecting done - } browser.numEntries += i; @@ -584,6 +551,41 @@ bool ParseDirEntries() { dirclose(dirIter); // close directory dirIter = NULL; + + // try to find and select the last loaded file + if(selectLoadedFile == 1 && parseHalt == 0 && loadedFile[0] != 0 && browser.dir[0] != 0) + { + int indexFound = -1; + + for(int j=1; j < browser.numEntries; j++) + { + if(strcmp(browserList[j].filename, loadedFile) == 0) + { + indexFound = j; + break; + } + } + + // move to this file + if(indexFound > 0) + { + if(indexFound >= FILE_PAGESIZE) + { + int newIndex = (floor(indexFound/(float)FILE_PAGESIZE)) * FILE_PAGESIZE; + + if(newIndex + FILE_PAGESIZE > browser.numEntries) + newIndex = browser.numEntries - FILE_PAGESIZE; + + if(newIndex < 0) + newIndex = 0; + + browser.pageIndex = newIndex; + } + browser.selIndex = indexFound; + } + selectLoadedFile = 2; // selecting done + } + return false; // no more entries } return true; // more entries diff --git a/source/gui/gui_filebrowser.cpp b/source/gui/gui_filebrowser.cpp index 3a0bd3b..c989fd2 100644 --- a/source/gui/gui_filebrowser.cpp +++ b/source/gui/gui_filebrowser.cpp @@ -199,6 +199,14 @@ void GuiFileBrowser::ResetState() void GuiFileBrowser::TriggerUpdate() { + int newIndex = browser.selIndex-browser.pageIndex; + + if(newIndex >= FILE_PAGESIZE) + newIndex = FILE_PAGESIZE-1; + else if(newIndex < 0) + newIndex = 0; + + selectedItem = newIndex; listChanged = true; }