diff options
| author | Michael R Sweet <michael.r.sweet@gmail.com> | 2005-02-05 18:26:21 +0000 |
|---|---|---|
| committer | Michael R Sweet <michael.r.sweet@gmail.com> | 2005-02-05 18:26:21 +0000 |
| commit | 3124794f1fe6e7a5e0e201f6a3e773ed58ad1e5e (patch) | |
| tree | 90a66029117cc35558a438ee695f2c78e1132f64 /src/Fl_File_Browser.cxx | |
| parent | b601fdc3bc4b5b9a9d1a356dd458cfdd3213fa16 (diff) | |
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
Diffstat (limited to 'src/Fl_File_Browser.cxx')
| -rw-r--r-- | src/Fl_File_Browser.cxx | 38 |
1 files changed, 16 insertions, 22 deletions
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$". // |
