|
@@ -2405,6 +2405,27 @@ void OptionsMenu::onSkinSelect() {
|
|
|
skinFolder.append(convar->getConVarByName("osu_folder_sub_skins")->getString());
|
|
|
std::vector<std::string> skinFolders = env->getFoldersInFolder(skinFolder.toUtf8());
|
|
|
|
|
|
+ // Sort skins only by alphanum characters, ignore the others
|
|
|
+ std::sort(skinFolders.begin(), skinFolders.end(), [](std::string a, std::string b) {
|
|
|
+ int i = 0;
|
|
|
+ int j = 0;
|
|
|
+ while(i < a.length() && j < b.length()) {
|
|
|
+ if(!isalnum(a[i])) {
|
|
|
+ i++;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if(!isalnum(b[j])) {
|
|
|
+ j++;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ char la = tolower(a[i]);
|
|
|
+ char lb = tolower(b[j]);
|
|
|
+ if(la != lb) return la < lb;
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+ });
|
|
|
+
|
|
|
if(skinFolders.size() > 0) {
|
|
|
m_contextMenu->setPos(m_skinSelectLocalButton->getPos());
|
|
|
m_contextMenu->setRelPos(m_skinSelectLocalButton->getRelPos());
|