diff --git a/src/buttons.c b/src/buttons.c index 9a149874..e6f8b1b0 100644 --- a/src/buttons.c +++ b/src/buttons.c @@ -1314,7 +1314,8 @@ void Button_Skins(int btn) Sort_list_of_files(&Font_files_list); selected_font = Find_file_in_fileselector(&Font_files_list, Config.Font_file); - + if (selected_font < 0) + selected_font = 0; // -------------------------------------------------------------- @@ -1340,6 +1341,8 @@ void Button_Skins(int btn) Draw_one_skin_name, 2); // 4 skin_list->Cursor_position = Find_file_in_fileselector(&Skin_files_list, Config.Skin_file); + if (skin_list->Cursor_position < 0) + skin_list->Cursor_position = 0; // Buttons to choose a font font_dropdown = Window_set_dropdown_button(172, 43, 104, 11, 0, Get_item_by_index(&Font_files_list,selected_font)->Short_name,1,0,1,RIGHT_SIDE|LEFT_SIDE,0); // 5 diff --git a/src/factory.c b/src/factory.c index 74298fd0..f5a41159 100644 --- a/src/factory.c +++ b/src/factory.c @@ -2309,6 +2309,8 @@ void Highlight_script(T_Fileselector *selector, T_List_button *list, const char short index; index=Find_file_in_fileselector(selector, selected_file); + if (index < 0) + index = 0; // 1st item if selected_file is not found Locate_list_item(list, index); } diff --git a/src/filesel.c b/src/filesel.c index 4b1c5db8..ddd9a126 100644 --- a/src/filesel.c +++ b/src/filesel.c @@ -1386,13 +1386,13 @@ short Find_file_in_fileselector(T_Fileselector *list, const char * fname) { T_Fileselector_item * item; short index; - short close_match=0; + short close_match = -1; index=0; for (item=list->First; item!=NULL; item=item->Next) { if (strcmp(item->Full_name,fname)==0) - return index; + return index; // exact match if (strcasecmp(item->Full_name,fname)==0) close_match=index; @@ -1402,7 +1402,10 @@ short Find_file_in_fileselector(T_Fileselector *list, const char * fname) return close_match; } -void Highlight_file(short index) +/// Set the position and index of the file list according +/// to the selected index +/// @param index index of selected file +static void Highlight_file(short index) { if ((Filelist.Nb_elements<=10) || (index<5)) @@ -1685,7 +1688,8 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context if (!load) { - Highlight_file(Find_file_in_fileselector(&Filelist, context->File_name)); + short pos = Find_file_in_fileselector(&Filelist, context->File_name); + Highlight_file((pos >= 0) ? pos : 0); Prepare_and_display_filelist(Selector->Position,Selector->Offset,file_scroller); // On initialise le nom de fichier à celui en cours et non pas celui sous @@ -1885,15 +1889,15 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context if (savename != NULL) { // attempt to find the file name in new list - int pos=Find_file_in_fileselector(&Filelist, savename); - if (pos!=0) + short pos=Find_file_in_fileselector(&Filelist, savename); + if (pos >= 0) { Highlight_file(pos); Prepare_and_display_filelist(Selector->Position,Selector->Offset,file_scroller); } // If the file is (still present) or it's a name with new // extension, set it as the proposed file name. - if (pos!=0 || !load) + if (pos >= 0 || !load) { strcpy(Selector_filename, savename); memcpy(Selector_filename_unicode, Selector_filename_unicode_save, sizeof(Selector_filename_unicode_save)); @@ -2265,7 +2269,8 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context Read_list_of_files(&Filelist, Selector->Format_filter); Sort_list_of_files(&Filelist); // Set the fileselector bar on the directory we're coming from - Highlight_file(Find_file_in_fileselector(&Filelist, previous_directory)); + pos = Find_file_in_fileselector(&Filelist, previous_directory); + Highlight_file((pos >= 0) ? pos : 0); // display the 1st visible files Prepare_and_display_filelist(Selector->Position,Selector->Offset,file_scroller); Display_cursor(); diff --git a/src/filesel.h b/src/filesel.h index 23f0e403..a6f86b28 100644 --- a/src/filesel.h +++ b/src/filesel.h @@ -72,6 +72,11 @@ T_Fileselector_item * Get_item_by_index(T_Fileselector *list, unsigned short ind void Read_list_of_drives(T_Fileselector *list, byte name_length); +/// Look for a file name in a file selector list +/// @param list The file selector list +/// @param fname The file name to search for +/// @return the index of the file +/// @return -1 if the file name was not found short Find_file_in_fileselector(T_Fileselector *list, const char * fname); void Locate_list_item(T_List_button * list, short selected_item);