From 3124794f1fe6e7a5e0e201f6a3e773ed58ad1e5e Mon Sep 17 00:00:00 2001 From: Michael R Sweet Date: Sat, 5 Feb 2005 18:26:21 +0000 Subject: Fl_File_Chooser was slow with large directories (STR #654) FL/Fl_File_Browser.H: - Don't reload the directory view unless asked to. FL/Fl_File_Chooser.H: - Rebuilt using current FLUID. src/Fl_File_Browser.cxx: - Don't reload the directory view unless asked to. src/Fl_File_Chooser.cxx: - Fl_File_Chooser::show() calls rescan(). src/Fl_File_Chooser.fl: - Fl_File_Chooser::show() calls rescan(). src/Fl_File_Chooser2.cxx: - Only call rescan() when chooser is shown. src/Fl_File_Icon.cxx: - Add optimization for Windows - filenames with trailing slash are directories. test/file_chooser.cxx: - Only call show() once... git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@4010 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- src/Fl_File_Browser.cxx | 38 ++++++++++++++++---------------------- 1 file changed, 16 insertions(+), 22 deletions(-) (limited to 'src/Fl_File_Browser.cxx') diff --git a/src/Fl_File_Browser.cxx b/src/Fl_File_Browser.cxx index 7fec67192..acf35b64d 100644 --- a/src/Fl_File_Browser.cxx +++ b/src/Fl_File_Browser.cxx @@ -1,5 +1,5 @@ // -// "$Id: Fl_File_Browser.cxx,v 1.1.2.28 2004/04/11 04:38:57 easysw Exp $" +// "$Id$" // // Fl_File_Browser routines. // @@ -584,34 +584,31 @@ Fl_File_Browser::load(const char *directory,// I - Directory to load if (num_files <= 0) return (0); - for (i = 0, num_dirs = 0; i < num_files; i ++) - { + for (i = 0, num_dirs = 0; i < num_files; i ++) { if (strcmp(files[i]->d_name, ".") && - strcmp(files[i]->d_name, "./")) - { + strcmp(files[i]->d_name, "./")) { snprintf(filename, sizeof(filename), "%s/%s", directory_, files[i]->d_name); -#if defined(WIN32) && !defined(__CYGWIN__) - if (files[i]->d_name[strlen(files[i]->d_name) - 1] == '/') - { + icon = Fl_File_Icon::find(filename); + if (icon->type() == Fl_File_Icon::DIRECTORY) { num_dirs ++; - insert(num_dirs, files[i]->d_name, Fl_File_Icon::find(filename)); - } + +#if defined(WIN32) && !defined(__CYGWIN__) + // WIN32 already has the trailing slash... :) + insert(num_dirs, files[i]->d_name, icon); #else - if (fl_filename_isdir(filename)) - { + // Add a trailing slash to directory names... char name[1024]; // Temporary directory name snprintf(name, sizeof(name), "%s/", files[i]->d_name); - num_dirs ++; - insert(num_dirs, name, Fl_File_Icon::find(filename)); - } + insert(num_dirs, name, icon); #endif // WIN32 && !__CYGWIN__ - else if (filetype_ == FILES && - fl_filename_match(files[i]->d_name, pattern_)) - add(files[i]->d_name, Fl_File_Icon::find(filename)); + } else if (filetype_ == FILES && + fl_filename_match(files[i]->d_name, pattern_)) { + add(files[i]->d_name, icon); + } } free(files[i]); @@ -636,12 +633,9 @@ Fl_File_Browser::filter(const char *pattern) // I - Pattern string pattern_ = pattern; else pattern_ = "*"; - - // Reload the current directory... - load(directory_); } // -// End of "$Id: Fl_File_Browser.cxx,v 1.1.2.28 2004/04/11 04:38:57 easysw Exp $". +// End of "$Id$". // -- cgit v1.2.3