Fix issue 506: Missing 'parent directory' in fileselector
git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@1994 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
parent
56cdbc4c10
commit
95b537e5f0
@ -380,26 +380,37 @@ void Read_list_of_files(T_Fileselector *list, byte selected_format)
|
||||
#endif
|
||||
while ((entry=readdir(current_directory)))
|
||||
{
|
||||
// On ignore le répertoire courant
|
||||
// Ignore 'current directory' entry
|
||||
if ( !strcmp(entry->d_name, "."))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
stat(entry->d_name,&Infos_enreg);
|
||||
// et que l'élément trouvé est un répertoire
|
||||
if( S_ISDIR(Infos_enreg.st_mode) &&
|
||||
// et que c'est ".."
|
||||
(!strcmp(entry->d_name, PARENT_DIR) ||
|
||||
// ou qu'il n'est pas caché
|
||||
Config.Show_hidden_directories ||
|
||||
!File_is_hidden(entry->d_name, entry->d_name)))
|
||||
// entries tagged "directory" :
|
||||
if( S_ISDIR(Infos_enreg.st_mode))
|
||||
{
|
||||
// On rajoute le répertoire à la liste
|
||||
// On Windows, the presence of a "parent directory" entry has proven
|
||||
// unreliable on non-physical drives :
|
||||
// Sometimes it's missing, sometimes it's present even at root...
|
||||
// We skip it here and add a specific check after the loop
|
||||
#if defined(__WIN32__)
|
||||
if (!strcmp(entry->d_name, PARENT_DIR))
|
||||
continue;
|
||||
#endif
|
||||
|
||||
// Don't display hidden file, unless requested by options
|
||||
if (!Config.Show_hidden_directories &&
|
||||
File_is_hidden(entry->d_name, entry->d_name))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Add to list
|
||||
Add_element_to_list(list, entry->d_name, Format_filename(entry->d_name, 19, 1), 1, ICON_NONE);
|
||||
list->Nb_directories++;
|
||||
}
|
||||
else if (S_ISREG(Infos_enreg.st_mode) && //Il s'agit d'un fichier
|
||||
(Config.Show_hidden_files || //Il n'est pas caché
|
||||
else if (S_ISREG(Infos_enreg.st_mode) && // It's a file
|
||||
(Config.Show_hidden_files || // Not hidden
|
||||
!File_is_hidden(entry->d_name, entry->d_name)))
|
||||
{
|
||||
const char * ext = filter;
|
||||
@ -407,7 +418,7 @@ void Read_list_of_files(T_Fileselector *list, byte selected_format)
|
||||
{
|
||||
if (Check_extension(entry->d_name, ext))
|
||||
{
|
||||
// On rajoute le fichier à la liste
|
||||
// Add to list
|
||||
Add_element_to_list(list, entry->d_name, Format_filename(entry->d_name, 19, 0), 0, ICON_NONE);
|
||||
list->Nb_files++;
|
||||
// Stop searching
|
||||
@ -422,17 +433,34 @@ void Read_list_of_files(T_Fileselector *list, byte selected_format)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (list->Nb_files==0 && list->Nb_directories==0)
|
||||
{
|
||||
// This can happen on some empty network drives.
|
||||
// Add a dummy entry because the fileselector doesn't
|
||||
// seem to support empty list.
|
||||
Add_element_to_list(list, ".",Format_filename(".",19,1),1,ICON_NONE);
|
||||
}
|
||||
|
||||
// Now here's OS-specific code to determine if "parent directory" entry
|
||||
// should appear.
|
||||
|
||||
#if defined(__MORPHOS__) || defined(__AROS__) || defined (__amigaos4__) || defined(__amigaos__)
|
||||
Add_element_to_list(list, "/", Format_filename("/",19,1), 1, ICON_NONE); // on amiga systems, / means parent. And there is no ..
|
||||
// Amiga systems: always
|
||||
Add_element_to_list(list, PARENT_DIR, Format_filename(PARENT_DIR,19,1), 1, ICON_NONE);
|
||||
list->Nb_directories ++;
|
||||
|
||||
#elif defined (__WIN32__)
|
||||
// Windows :
|
||||
if (((current_path[0]>='a'&¤t_path[0]<='z')||(current_path[0]>='A'&¤t_path[0]<='Z')) &&
|
||||
current_path[1]==':' &&
|
||||
(
|
||||
(current_path[2]=='\0') ||
|
||||
(current_path[2]=='/'&¤t_path[3]=='\0') ||
|
||||
(current_path[2]=='\\'&¤t_path[3]=='\0')
|
||||
))
|
||||
{
|
||||
// Path is X:\ or X:/ or X:
|
||||
// so don't display parent directory
|
||||
}
|
||||
else
|
||||
{
|
||||
Add_element_to_list(list, PARENT_DIR, Format_filename(PARENT_DIR,19,1), 1, ICON_NONE);
|
||||
list->Nb_directories ++;
|
||||
}
|
||||
|
||||
#elif defined (__MINT__)
|
||||
T_Fileselector_item *item=NULL;
|
||||
// check if ".." exists if not add it
|
||||
@ -443,12 +471,12 @@ void Read_list_of_files(T_Fileselector *list, byte selected_format)
|
||||
|
||||
for (item = list->First; (((item != NULL) && (bFound==false))); item = item->Next){
|
||||
if (item->Type == 1){
|
||||
if(strncmp(item->Full_name,"..",(sizeof(char)*2))==0) bFound=true;
|
||||
if(strncmp(item->Full_name,PARENT_DIR,(sizeof(char)*2))==0) bFound=true;
|
||||
}
|
||||
}
|
||||
|
||||
if(!bFound){
|
||||
Add_element_to_list(list, "..",Format_filename("/",19,1),1,ICON_NONE); // add if not present
|
||||
Add_element_to_list(list,PARENT_DIR,Format_filename(PARENT_DIR,19,1),1,ICON_NONE); // add if not present
|
||||
list->Nb_directories ++;
|
||||
}
|
||||
|
||||
@ -462,6 +490,14 @@ void Read_list_of_files(T_Fileselector *list, byte selected_format)
|
||||
#endif
|
||||
current_path = NULL;
|
||||
|
||||
if (list->Nb_files==0 && list->Nb_directories==0)
|
||||
{
|
||||
// This can happen on some empty network drives.
|
||||
// Add a dummy entry because the fileselector doesn't
|
||||
// seem to support empty list.
|
||||
Add_element_to_list(list, ".",Format_filename(".",19,1),1,ICON_NONE);
|
||||
}
|
||||
|
||||
Recount_files(list);
|
||||
}
|
||||
|
||||
|
||||
@ -485,22 +485,23 @@ static const T_Help_table helptable_credits[] =
|
||||
HELP_TITLE(" BUGFINDERS")
|
||||
HELP_TEXT ("")
|
||||
//HELP_TEXT ("0----5----0----5----0----5----0----5----0--X")
|
||||
HELP_TEXT (" anibiqme antdzeryn blumunkee ")
|
||||
HELP_TEXT (" BDCIron Ced DarkDefende ")
|
||||
HELP_TEXT (" DawnBringer El Topo falenblood ")
|
||||
HELP_TEXT (" fanickbux fano fogbot121 ")
|
||||
HELP_TEXT (" Frost Grimmy Gürkan Sengün ")
|
||||
HELP_TEXT (" Hatch HoraK-FDF iLKke ")
|
||||
HELP_TEXT (" Iw2evk jackfrost128 Jamon ")
|
||||
HELP_TEXT (" keito kusma lmemsm ")
|
||||
HELP_TEXT (" Lord Graga Lorenzo Gatti MagerValp ")
|
||||
HELP_TEXT (" maymunbeyin mind MooZ ")
|
||||
HELP_TEXT (" Pasi Kallinen the Peach petter ")
|
||||
HELP_TEXT (" PheeL Ravey1138 richienyhus ")
|
||||
HELP_TEXT (" rixard sm4tik spratek ")
|
||||
HELP_TEXT (" Surt tape.yrm TeeEmCee ")
|
||||
HELP_TEXT (" tempest Timo Kurrpa titus^Rab ")
|
||||
HELP_TEXT (" Tobé yakumo2975 00ai99 ")
|
||||
HELP_TEXT (" Akira anibiqme antdzeryn ")
|
||||
HELP_TEXT (" blumunkee BDCIron Ced ")
|
||||
HELP_TEXT (" DarkDefende DawnBringer El Topo ")
|
||||
HELP_TEXT (" falenblood fanickbux fano ")
|
||||
HELP_TEXT (" fogbot121 freehand Frost ")
|
||||
HELP_TEXT (" Grimmy Gürkan Sengün Hatch ")
|
||||
HELP_TEXT (" HoraK-FDF iLKke Iw2evk ")
|
||||
HELP_TEXT (" jackfrost128 Jamon keito ")
|
||||
HELP_TEXT (" kusma lmemsm Lord Graga ")
|
||||
HELP_TEXT (" Lorenzo Gatti MagerValp maymunbeyin ")
|
||||
HELP_TEXT (" mind MooZ Pasi Kallinen ")
|
||||
HELP_TEXT (" the Peach petter PheeL ")
|
||||
HELP_TEXT (" Ravey1138 richienyhus rixard ")
|
||||
HELP_TEXT (" sm4tik spratek Surt ")
|
||||
HELP_TEXT (" tape.yrm TeeEmCee tempest ")
|
||||
HELP_TEXT (" Timo Kurrpa titus^Rab Tobé ")
|
||||
HELP_TEXT (" yakumo2975 00ai99")
|
||||
HELP_TEXT ("")
|
||||
HELP_TEXT (" ... posted the annoying bug reports.")
|
||||
HELP_TEXT ("")
|
||||
|
||||
9
src/io.c
9
src/io.c
@ -321,7 +321,7 @@ int Directory_exists(char * directory)
|
||||
int File_is_hidden(const char *fname, const char *full_name)
|
||||
{
|
||||
#if defined(__amigaos4__) || defined(__AROS__) || defined(__MORPHOS__) || defined(__amigaos__) || defined(__MINT__)
|
||||
// False (unable to determine, or irrrelevent for platform)
|
||||
// False (unable to determine, or irrelevent for platform)
|
||||
(void)fname;//unused
|
||||
(void)full_name;//unused
|
||||
return 0;
|
||||
@ -336,10 +336,11 @@ int File_is_hidden(const char *fname, const char *full_name)
|
||||
return (att&FILE_ATTRIBUTE_HIDDEN)?1:0;
|
||||
#else
|
||||
(void)full_name;//unused
|
||||
return fname[0]=='.';
|
||||
// On linux/unix (default), files are considered hidden if their name
|
||||
// begins with a .
|
||||
// As a special case, we'll consider 'parent directory' (..) never hidden.
|
||||
return fname[0]=='.' && !strcmp(entry->d_name, PARENT_DIR);
|
||||
#endif
|
||||
|
||||
|
||||
}
|
||||
// Taille de fichier, en octets
|
||||
int File_length(const char * fname)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user