From 9f8dada2b0694f8f590779dcf12fa975d3028133 Mon Sep 17 00:00:00 2001 From: Yves Rizoud Date: Wed, 23 Mar 2011 20:13:12 +0000 Subject: [PATCH] Lua window: Fix inconsistency of 'parent directory' appearance. Now applies the 'show hidden files/dirs' settings too. git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@1760 416bcca6-2ee7-4201-b75f-2eb2f807beb1 --- src/buttons.c | 7 ------- src/factory.c | 15 +++++++++++---- src/filesel.c | 9 ++------- src/io.c | 28 +++++++++++++++++++++++----- src/io.h | 3 +++ 5 files changed, 39 insertions(+), 23 deletions(-) diff --git a/src/buttons.c b/src/buttons.c index 2d43c572..0ab8c362 100644 --- a/src/buttons.c +++ b/src/buttons.c @@ -25,14 +25,11 @@ #include #include #include - #define isHidden(x) (0) #elif defined(__WIN32__) #include #include - #define isHidden(x) (GetFileAttributesA((x)->d_name)&FILE_ATTRIBUTE_HIDDEN) #else #include - #define isHidden(x) ((x)->d_name[0]=='.') #endif #define _XOPEN_SOURCE 500 @@ -82,18 +79,14 @@ #if defined(__amigaos4__) || defined(__AROS__) || defined(__MORPHOS__) || defined(__amigaos__) #include #include - #define isHidden(x) (0) #elif defined(__MINT__) #include #include - #define isHidden(x) (0) #elif defined(__WIN32__) #include #include - #define isHidden(x) (GetFileAttributesA((x)->d_name)&FILE_ATTRIBUTE_HIDDEN) #else #include - #define isHidden(x) ((x)->d_name[0]=='.') #endif extern char Program_version[]; // generated in pversion.c diff --git a/src/factory.c b/src/factory.c index a31a6312..de18f4c9 100644 --- a/src/factory.c +++ b/src/factory.c @@ -1388,8 +1388,8 @@ void Add_script(const char *name, byte is_file, byte is_directory, byte is_hidde if (len<=4 || strcasecmp(file_name+len-4, ".lua")) return; // Hidden - //if (is_hidden && !Config.Show_hidden_files) - // return; + if (is_hidden && !Config.Show_hidden_files) + return; Add_element_to_list(&Scripts_selector, file_name, Format_filename(file_name, NAME_WIDTH+1, 0), 0, ICON_NONE); } @@ -1398,9 +1398,12 @@ void Add_script(const char *name, byte is_file, byte is_directory, byte is_hidde // Ignore current directory if ( !strcmp(file_name, ".")) return; + // Ignore parent directory entry + if (!strcmp(file_name, PARENT_DIR)) + return; // Hidden - //if (is_hidden && !Config.Show_hidden_directories) - // return; + if (is_hidden && !Config.Show_hidden_directories) + return; Add_element_to_list(&Scripts_selector, file_name, Format_filename(file_name, NAME_WIDTH+1, 1), 1, ICON_NONE); } @@ -1698,6 +1701,8 @@ void Button_Brush_Factory(void) strcpy(scriptdir, Data_directory); strcat(scriptdir, "scripts/"); strcat(scriptdir, sub_directory); + if (sub_directory[0]!='\0') + Add_element_to_list(&Scripts_selector, PARENT_DIR, Format_filename(PARENT_DIR, NAME_WIDTH+1, 1), 1, ICON_NONE); // Add each found file to the list For_each_directory_entry(scriptdir, Add_script); // Sort it @@ -1851,6 +1856,8 @@ void Button_Brush_Factory(void) strcpy(scriptdir, Data_directory); strcat(scriptdir, "scripts/"); strcat(scriptdir, sub_directory); + if (sub_directory[0]!='\0') + Add_element_to_list(&Scripts_selector, PARENT_DIR, Format_filename(PARENT_DIR, NAME_WIDTH+1, 1), 1, ICON_NONE); // Add each found file to the list For_each_directory_entry(scriptdir, Add_script); // Sort it diff --git a/src/filesel.c b/src/filesel.c index a6bf033b..117a8ab3 100644 --- a/src/filesel.c +++ b/src/filesel.c @@ -29,20 +29,15 @@ #include #include #include - #define isHidden(x) (0) - #elif defined (__MINT__) #include #include - #define isHidden(x) (0) #elif defined(__WIN32__) #include #include #include - #define isHidden(x) (GetFileAttributesA((x)->d_name)&FILE_ATTRIBUTE_HIDDEN) #else #include - #define isHidden(x) ((x)->d_name[0]=='.') #endif #include @@ -393,7 +388,7 @@ void Read_list_of_files(T_Fileselector *list, byte selected_format) (!strcmp(entry->d_name, PARENT_DIR) || // ou qu'il n'est pas caché Config.Show_hidden_directories || - !isHidden(entry))) + !File_is_hidden(entry->d_name))) { // On rajoute le répertoire à la liste Add_element_to_list(list, entry->d_name, Format_filename(entry->d_name, 19, 1), 1, ICON_NONE); @@ -401,7 +396,7 @@ void Read_list_of_files(T_Fileselector *list, byte selected_format) } else if (S_ISREG(Infos_enreg.st_mode) && //Il s'agit d'un fichier (Config.Show_hidden_files || //Il n'est pas caché - !isHidden(entry))) + File_is_hidden(entry->d_name))) { const char * ext = filter; while (ext!=NULL) diff --git a/src/io.c b/src/io.c index d770a84f..81cf19c0 100644 --- a/src/io.c +++ b/src/io.c @@ -37,20 +37,16 @@ #include #include #include - #define isHidden(x) (0) #elif defined(__WIN32__) #include #include //#include - #define isHidden(x) (GetFileAttributesA((x)->d_name)&FILE_ATTRIBUTE_HIDDEN) #elif defined(__MINT__) #include #include #include - #define isHidden(x) (0) #else #include - #define isHidden(x) ((x)->d_name[0]=='.') #endif #include "struct.h" @@ -242,6 +238,28 @@ int Directory_exists(char * directory) } } +#if defined(__amigaos4__) || defined(__AROS__) || defined(__MORPHOS__) || defined(__amigaos__) || defined(__MINT__) + #define FILE_IS_HIDDEN_ATTRIBUTE __attribute__((unused)) +#else + #define FILE_IS_HIDDEN_ATTRIBUTE +#endif +/// Check if a file or directory is hidden. +int File_is_hidden(FILE_IS_HIDDEN_ATTRIBUTE const char *fname) +{ +#if defined(__amigaos4__) || defined(__AROS__) || defined(__MORPHOS__) || defined(__amigaos__) || defined(__MINT__) + // False (unable to determine, or irrrelevent for platform) + return 0; +#elif defined(__WIN32__) + unsigned long att = GetFileAttributesA(fname); + if (att==INVALID_FILE_ATTRIBUTES) + return 0; + return att&FILE_ATTRIBUTE_HIDDEN?1:0; +#else + return fname[0]=='.'; +#endif + + +} // Taille de fichier, en octets int File_length(const char * fname) { @@ -313,7 +331,7 @@ void For_each_directory_entry(const char * directory_name, void Callback(const c full_filename, S_ISREG(Infos_enreg.st_mode), S_ISDIR(Infos_enreg.st_mode), - isHidden(entry)?1:0); + File_is_hidden(entry->d_name)); } closedir(current_directory); } diff --git a/src/io.h b/src/io.h index 53237f3f..15419df2 100644 --- a/src/io.h +++ b/src/io.h @@ -90,6 +90,9 @@ int File_exists(char * fname); /// Returns true if a directory passed as a parameter exists in the current directory. int Directory_exists(char * directory); +/// Check if a file or directory is hidden. +int File_is_hidden(const char *fname); + /// Scans a directory, calls Callback for each file in it, void For_each_file(const char * directory_name, void Callback(const char *));