diff options
author | Ben Key <bkey76@gmail.com> | 2011-03-07 22:11:24 +0100 |
---|---|---|
committer | Juanma Barranquero <lekktu@gmail.com> | 2011-03-07 22:11:24 +0100 |
commit | 7faeca66c766912265dea911f92c64b9608c0872 (patch) | |
tree | 5354339f2df95fdc70d850aacd78c378be5bac0a | |
parent | 7600cf45994d0c1d6fb42d8b0ddf725d9600bd1d (diff) |
Fix bug#8181.
* src/w32fns.c (FILE_NAME_COMBO_BOX, FILE_NAME_LIST): Define.
(file_dialog_callback): Fix locating the window handle of the File Name
text field. After disabling it, set focus on the list control.
(Fx_file_dialog): If only_dir_p is non-nil, set the text of the File
Name text field to "Current Directory" if it does not already have
another value.
-rw-r--r-- | src/ChangeLog | 9 | ||||
-rw-r--r-- | src/w32fns.c | 35 |
2 files changed, 43 insertions, 1 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 7fbf3e1ef6..9c612e0e09 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,12 @@ +2011-03-07 Ben Key <bkey76@gmail.com> + + * w32fns.c (FILE_NAME_COMBO_BOX, FILE_NAME_LIST): Define. + (file_dialog_callback): Fix locating the window handle of the File Name + text field. After disabling it, set focus on the list control. + (Fx_file_dialog): If only_dir_p is non-nil, set the text of the File + Name text field to "Current Directory" if it does not already have + another value. (Bug#8181) + 2011-03-07 Adrian Robert <Adrian.B.Robert@gmail.com> * nsterm.m (ns_draw_window_cursor): Fix handling of "cursor_width" diff --git a/src/w32fns.c b/src/w32fns.c index ec48397657..09442d41e1 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -60,6 +60,8 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <dlgs.h> #include <imm.h> #define FILE_NAME_TEXT_FIELD edt1 +#define FILE_NAME_COMBO_BOX cmb13 +#define FILE_NAME_LIST lst1 #include "font.h" #include "w32font.h" @@ -5868,13 +5870,37 @@ file_dialog_callback (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { HWND dialog = GetParent (hwnd); HWND edit_control = GetDlgItem (dialog, FILE_NAME_TEXT_FIELD); + HWND list = GetDlgItem (dialog, FILE_NAME_LIST); - /* Directories is in index 2. */ + /* At least on Windows 7, the above attempt to get the window handle + to the File Name Text Field fails. The following code does the + job though. Note that this code is based on my examination of the + window hierarchy using Microsoft Spy++. bk */ + if (edit_control == NULL) + { + HWND tmp = GetDlgItem (dialog, FILE_NAME_COMBO_BOX); + if (tmp) + { + tmp = GetWindow (tmp, GW_CHILD); + if (tmp) + edit_control = GetWindow (tmp, GW_CHILD); + } + } + + /* Directories is in index 2. */ if (notify->lpOFN->nFilterIndex == 2) { CommDlg_OpenSave_SetControlText (dialog, FILE_NAME_TEXT_FIELD, "Current Directory"); EnableWindow (edit_control, FALSE); + /* Note that at least on Windows 7, the above call to EnableWindow + disables the window that would ordinarily have focus. If we + do not set focus to some other window here, focus will land in + no man's land and the user will be unable to tab through the + dialog box (pressing tab will only result in a beep). + Avoid that problem by setting focus to the list here. */ + if (CDN_INITDONE == notify->hdr.code) + SetFocus (list); } else { @@ -5951,6 +5977,13 @@ Otherwise, if ONLY-DIR-P is non-nil, the user can only select directories. */) else filename[0] = '\0'; + /* The code in file_dialog_callback that attempts to set the text + of the file name edit window when handling the CDN_INITDONE + WM_NOTIFY message does not work. Setting filename to "Current + Directory" in the only_dir_p case here does work however. */ + if (filename[0] == 0 && ! NILP (only_dir_p)) + strcpy (filename, "Current Directory"); + { NEWOPENFILENAME new_file_details; BOOL file_opened = FALSE; |