emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r103579: Fix bug#8181.


From: Juanma Barranquero
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r103579: Fix bug#8181.
Date: Mon, 07 Mar 2011 22:11:24 +0100
User-agent: Bazaar (2.0.3)

------------------------------------------------------------
revno: 103579
author: Ben Key <address@hidden>
committer: Juanma Barranquero <address@hidden>
branch nick: trunk
timestamp: Mon 2011-03-07 22:11:24 +0100
message:
  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.
modified:
  src/ChangeLog
  src/w32fns.c
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2011-03-07 09:00:11 +0000
+++ b/src/ChangeLog     2011-03-07 21:11:24 +0000
@@ -1,3 +1,12 @@
+2011-03-07  Ben Key  <address@hidden>
+
+       * 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  <address@hidden>
 
        * nsterm.m (ns_draw_window_cursor): Fix handling of "cursor_width"

=== modified file 'src/w32fns.c'
--- a/src/w32fns.c      2011-02-16 18:39:46 +0000
+++ b/src/w32fns.c      2011-03-07 21:11:24 +0000
@@ -60,6 +60,8 @@
 #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 @@
        {
          HWND dialog = GetParent (hwnd);
          HWND edit_control = GetDlgItem (dialog, FILE_NAME_TEXT_FIELD);
-
-         /* Directories is in index 2.  */
+         HWND list = GetDlgItem (dialog, FILE_NAME_LIST);
+
+         /* 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 @@
   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;


reply via email to

[Prev in Thread] Current Thread [Next in Thread]