Fl_File_Chooser: set insert position to end of string (#1004)
... after filename "expansion" with current directory. This is done when the entered filename is relative. The old behavior was confusing and error prone. Also: improve documentation of Fl_File_Chooser::value(const char *). Clarify behavior and side effects of this method.
This commit is contained in:
parent
31b386930e
commit
ecb3c9c6fc
@ -2,7 +2,7 @@
|
|||||||
// More Fl_File_Chooser routines.
|
// More Fl_File_Chooser routines.
|
||||||
//
|
//
|
||||||
// Copyright 1999-2007 by Michael Sweet.
|
// Copyright 1999-2007 by Michael Sweet.
|
||||||
// Copyright 2008-2020 by Bill Spitzak and others.
|
// Copyright 2008-2024 by Bill Spitzak and others.
|
||||||
//
|
//
|
||||||
// This library is free software. Distribution and use rights are outlined in
|
// This library is free software. Distribution and use rights are outlined in
|
||||||
// the file "COPYING" which should have been included with this file. If this
|
// the file "COPYING" which should have been included with this file. If this
|
||||||
@ -794,7 +794,8 @@ Fl_File_Chooser::fileNameCB()
|
|||||||
if (dirIsRelative) {
|
if (dirIsRelative) {
|
||||||
fl_filename_absolute(pathname, sizeof(pathname), filename);
|
fl_filename_absolute(pathname, sizeof(pathname), filename);
|
||||||
value(pathname);
|
value(pathname);
|
||||||
fileName->mark(fileName->insert_position()); // no selection after expansion
|
int flen = (int)strlen(pathname);
|
||||||
|
fileName->insert_position(flen, flen); // no selection after expansion
|
||||||
} else if (filename != pathname) {
|
} else if (filename != pathname) {
|
||||||
// Finally, make sure that we have a writable copy...
|
// Finally, make sure that we have a writable copy...
|
||||||
strlcpy(pathname, filename, sizeof(pathname));
|
strlcpy(pathname, filename, sizeof(pathname));
|
||||||
@ -1466,6 +1467,21 @@ Fl_File_Chooser::value(int f) // I - File number
|
|||||||
|
|
||||||
|
|
||||||
/** Sets the current value of the selected file.
|
/** Sets the current value of the selected file.
|
||||||
|
|
||||||
|
If a relative path is provided in \c filename it is converted to
|
||||||
|
an absolute path.
|
||||||
|
|
||||||
|
If \c NULL or an empty string is provided, the working directory is
|
||||||
|
changed to the user's current directory and the filename is set to "".
|
||||||
|
|
||||||
|
After assigning the filename the entire string (if any) is selected, i.e.
|
||||||
|
- insert_position() is 0 (zero)
|
||||||
|
- mark() is strlen(\<expanded filename>).
|
||||||
|
|
||||||
|
\note The selection of the entire string may not always be desired but
|
||||||
|
it is kept for backwards compatibility.
|
||||||
|
|
||||||
|
\param[in] filename relative or absolute filename, may be NULL or ""
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
Fl_File_Chooser::value(const char *filename)
|
Fl_File_Chooser::value(const char *filename)
|
||||||
|
Loading…
Reference in New Issue
Block a user