summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/fl_file_dir.cxx28
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);