diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/fl_file_dir.cxx | 28 |
1 files changed, 21 insertions, 7 deletions
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); |
