From 47f63aa79abed1da90fabd637529d5f8161f84fa Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sat, 12 Jul 2014 12:25:29 +0300 Subject: [PATCH] Document the behavior of file selection dialogs on Windows 7 (bug #17950). etc/PROBLEMS: Mention the problem from bug #17950. src/w32fns.c (Fx_file_dialog): Mention in the doc string the behavior on Windows 7 and later when the function is repeatedly invoked with the same value of DIR. src/xfns.c (Fx_file_dialog) [USE_MOTIF, USE_GTK]: Update the doc string to match the one in w32fns.c. --- etc/ChangeLog | 4 ++++ etc/PROBLEMS | 20 ++++++++++++++++++++ src/ChangeLog | 9 +++++++++ src/w32fns.c | 6 +++++- src/xfns.c | 12 ++++++++++-- 5 files changed, 48 insertions(+), 3 deletions(-) diff --git a/etc/ChangeLog b/etc/ChangeLog index d30c03f1c20..06a0c4b5312 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,7 @@ +2014-07-12 Eli Zaretskii + + * PROBLEMS: Mention the problem from bug #17950. + 2014-07-04 Eli Zaretskii * TODO: Remove items that were already done. Rearrange a few diff --git a/etc/PROBLEMS b/etc/PROBLEMS index 1f9200febbf..cea2213a24e 100644 --- a/etc/PROBLEMS +++ b/etc/PROBLEMS @@ -1961,6 +1961,26 @@ Another possibility is to rebuild Emacs with the -shared-libgcc switch, which will force Emacs to load libgcc_s_dw2-1.dll on startup, ahead of any optional DLLs loaded on-demand later in the session. +** File selection dialog opens in incorrect directories + +Invoking the file selection dialog on Windows 7 or later shows a +directory that is different from what was passed to `read-file-name' +or `x-file-dialog' via their arguments. + +This is due to a deliberate change in behavior of the file selection +dialogs introduced in Windows 7. It is explicitly described in the +MSDN documentation of the GetOpenFileName API used by Emacs to pop up +the file selection dialog. For the details, see + + http://msdn.microsoft.com/en-us/library/windows/desktop/ms646839%28v=vs.85%29.aspx + +The dialog shows the last directory in which the user selected a file +in a previous invocation of the dialog with the same initial +directory. + +You can reset this "memory" of that directory by invoking the file +selection dialog with a different initial directory. + ** PATH can contain unexpanded environment variables Old releases of TCC (version 9) and 4NT (up to version 8) do not correctly diff --git a/src/ChangeLog b/src/ChangeLog index d2f1999b546..493bcde7418 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,12 @@ +2014-07-12 Eli Zaretskii + + * w32fns.c (Fx_file_dialog): Mention in the doc string the + behavior on Windows 7 and later when the function is repeatedly + invoked with the same value of DIR. (Bug#17950) + + * xfns.c (Fx_file_dialog) [USE_MOTIF, USE_GTK]: Update the doc + string to match the one in w32fns.c. + 2014-07-08 Eli Zaretskii * xdisp.c (move_it_to): Adjust calculation of line_start_x to what diff --git a/src/w32fns.c b/src/w32fns.c index 638c617df99..1c73cda469a 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -6436,7 +6436,11 @@ or directory must exist. This function is only defined on NS, MS Windows, and X Windows with the Motif or Gtk toolkits. With the Motif toolkit, ONLY-DIR-P is ignored. -Otherwise, if ONLY-DIR-P is non-nil, the user can only select directories. */) +Otherwise, if ONLY-DIR-P is non-nil, the user can only select directories. +On Windows 7 and later, the file selection dialog "remembers" the last +directory where the user selected a file, and will open that directory +instead of DIR on subsequent invocations of this function with the same +value of DIR as in previous invocations; this is standard Windows behavior. */) (Lisp_Object prompt, Lisp_Object dir, Lisp_Object default_filename, Lisp_Object mustmatch, Lisp_Object only_dir_p) { /* Filter index: 1: All Files, 2: Directories only */ diff --git a/src/xfns.c b/src/xfns.c index 692504ef762..23fba44f1f3 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -5658,7 +5658,11 @@ or directory must exist. This function is only defined on NS, MS Windows, and X Windows with the Motif or Gtk toolkits. With the Motif toolkit, ONLY-DIR-P is ignored. -Otherwise, if ONLY-DIR-P is non-nil, the user can only select directories. */) +Otherwise, if ONLY-DIR-P is non-nil, the user can only select directories. +On Windows 7 and later, the file selection dialog "remembers" the last +directory where the user selected a file, and will open that directory +instead of DIR on subsequent invocations of this function with the same +value of DIR as in previous invocations; this is standard Windows behavior. */) (Lisp_Object prompt, Lisp_Object dir, Lisp_Object default_filename, Lisp_Object mustmatch, Lisp_Object only_dir_p) { @@ -5830,7 +5834,11 @@ or directory must exist. This function is only defined on NS, MS Windows, and X Windows with the Motif or Gtk toolkits. With the Motif toolkit, ONLY-DIR-P is ignored. -Otherwise, if ONLY-DIR-P is non-nil, the user can only select directories. */) +Otherwise, if ONLY-DIR-P is non-nil, the user can only select directories. +On Windows 7 and later, the file selection dialog "remembers" the last +directory where the user selected a file, and will open that directory +instead of DIR on subsequent invocations of this function with the same +value of DIR as in previous invocations; this is standard Windows behavior. */) (Lisp_Object prompt, Lisp_Object dir, Lisp_Object default_filename, Lisp_Object mustmatch, Lisp_Object only_dir_p) { struct frame *f = SELECTED_FRAME (); -- 2.39.5