From bd4d11e5e33f499d3825ed236c48ef68001f99dd Mon Sep 17 00:00:00 2001 From: Matthias Melcher Date: Thu, 24 Aug 2006 14:23:24 +0000 Subject: Fixed filechooser to behave as documented when file pattern changes (STR #135s9) git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@5355 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- src/fl_file_dir.cxx | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/fl_file_dir.cxx b/src/fl_file_dir.cxx index b03759d5b..830df39bf 100644 --- a/src/fl_file_dir.cxx +++ b/src/fl_file_dir.cxx @@ -74,12 +74,19 @@ fl_file_chooser(const char *message, // I - Message in titlebar fc->callback(callback, 0); } else { fc->type(Fl_File_Chooser::CREATE); + // see, if we use the same pattern between calls + char same_pattern = 0; + const char *fcf = fc->filter(); + if ( fcf && pat && strcmp(fcf, pat)==0) + same_pattern = 1; + else if ( (fcf==0L || *fcf==0) && (pat==0L || *pat==0) ) + same_pattern = 1; + // now set the pattern to the new pattern (even if they are the same) fc->filter(pat); fc->label(message); - if (!fname || !*fname) { - if (fc->filter() != pat && (!pat || !fc->filter() || - strcmp(pat, fc->filter())) && fc->value()) { + if (!fname) { // null pointer reuses same filename if pattern didn't change + if (!same_pattern && fc->value()) { // if pattern is different, remove name but leave old directory: strlcpy(retname, fc->value(), sizeof(retname)); @@ -93,13 +100,20 @@ fl_file_chooser(const char *message, // I - Message in titlebar else *p = '\0'; } - // Set the directory... - fc->directory(retname); + fc->value(retname); + } else { + // re-use the previously selected name } + } else if (!*fname) { // empty filename reuses directory with empty name + strlcpy(retname, fc->value(), sizeof(retname)); + const char *n = fl_filename_name(retname); + if (n) *((char*)n) = 0; + fc->value(""); + fc->directory(retname); + } else { + fc->value(fname); } - else - fc->value(fname); } fc->ok_label(current_label); -- cgit v1.2.3