changeset 56263:1b78563a75d6

(file_dialog_callback): Disable edit control if set to directories only on CDN_INITDONE message. (Fx_file_dialog): Default to directories only when prompt starts with "Dired".
author Jason Rumney <jasonr@gnu.org>
date Sun, 27 Jun 2004 22:35:59 +0000
parents 29d03615f533
children 39084f238fe5
files src/w32fns.c
diffstat 1 files changed, 18 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/w32fns.c	Sat Jun 26 18:35:18 2004 +0000
+++ b/src/w32fns.c	Sun Jun 27 22:35:59 2004 +0000
@@ -7686,7 +7686,8 @@
     {
       OFNOTIFY * notify = (OFNOTIFY *)lParam;
       /* Detect when the Filter dropdown is changed.  */
-      if (notify->hdr.code == CDN_TYPECHANGE)
+      if (notify->hdr.code == CDN_TYPECHANGE
+	  || notify->hdr.code == CDN_INITDONE)
 	{
 	  HWND dialog = GetParent (hwnd);
 	  HWND edit_control = GetDlgItem (dialog, FILE_NAME_TEXT_FIELD);
@@ -7700,8 +7701,10 @@
 	    }
 	  else
 	    {
-	      CommDlg_OpenSave_SetControlText (dialog, FILE_NAME_TEXT_FIELD,
-					       "");
+	      /* Don't override default filename on init done.  */
+	      if (notify->hdr.code == CDN_TYPECHANGE)
+		CommDlg_OpenSave_SetControlText (dialog,
+						 FILE_NAME_TEXT_FIELD, "");
 	      EnableWindow (edit_control, TRUE);
 	    }
 	}
@@ -7723,6 +7726,7 @@
   struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5;
   char filename[MAX_PATH + 1];
   char init_dir[MAX_PATH + 1];
+  int default_filter_index = 1; /* 1: All Files, 2: Directories only  */
 
   GCPRO5 (prompt, dir, default_filename, mustmatch, file);
   CHECK_STRING (prompt);
@@ -7746,9 +7750,7 @@
       if (!file_name_only)
         file_name_only = full_path_name;
       else
-        {
-          file_name_only++;
-        }
+	file_name_only++;
 
       strncpy (filename, file_name_only, MAX_PATH);
       filename[MAX_PATH] = '\0';
@@ -7773,6 +7775,15 @@
     file_details.nMaxFile = sizeof (filename);
     file_details.lpstrInitialDir = init_dir;
     file_details.lpstrTitle = SDATA (prompt);
+
+    /* If prompt starts with Dired, default to directories only.  */
+    /* A bit hacky, but there doesn't seem to be a better way to
+       DTRT for dired.  */
+    if (strncmp (file_details.lpstrTitle, "Dired", 5) == 0)
+      default_filter_index = 2;
+
+    file_details.nFilterIndex = default_filter_index;
+
     file_details.Flags = (OFN_HIDEREADONLY | OFN_NOCHANGEDIR
 			  | OFN_EXPLORER | OFN_ENABLEHOOK);
     if (!NILP (mustmatch))
@@ -7785,7 +7796,7 @@
 	dostounix_filename (filename);
 	if (file_details.nFilterIndex == 2)
 	  {
-	    /* "Folder Only" selected - strip dummy file name.  */
+	    /* "Directories" selected - strip dummy file name.  */
 	    char * last = strrchr (filename, '/');
 	    *last = '\0';
 	  }