# HG changeset patch # User mhessling@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1208002929 0 # Node ID 7d93356f250a6aac05ca13f34abd62ed3a5f67f6 # Parent 77cc62375feed55df16d74b26cacdd804c5545e8 Fixed dw_file_browse(); filters now work on extension passed in. diff -r 77cc62375fee -r 7d93356f250a win/dw.c --- a/win/dw.c Sat Apr 12 11:01:29 2008 +0000 +++ b/win/dw.c Sat Apr 12 12:22:09 2008 +0000 @@ -9122,6 +9122,7 @@ { OPENFILENAME of; char filenamebuf[1001] = ""; + char filterbuf[1000] = ""; int rc; BROWSEINFO bi; @@ -9158,13 +9159,25 @@ } else { - if(ext) - { - strcpy(filenamebuf, "*."); - strcat(filenamebuf, ext); - } - - memset(&of, 0, sizeof(OPENFILENAME)); + if (ext) + { + /* + * The following mess is because sprintf() trunates at first \0 + * and format of filter is eg: "c files (*.c)\0*.c\0All Files\0*.*\0\0" + */ + int len; + char *ptr = filterbuf; + memset( filterbuf, 0, sizeof(filterbuf) ); + len = sprintf( ptr, "%s Files (*.%s)", ext, ext ); + ptr = ptr + len + 1; // past first \0 + len = sprintf( ptr, "*.%s", ext ); + ptr = ptr + len + 1; // past next \0 + len = sprintf( ptr, "All Files" ); + ptr = ptr + len + 1; // past next \0 + len = sprintf( ptr, "*.*" ); + } + + memset( &of, 0, sizeof(OPENFILENAME) ); of.lStructSize = sizeof(OPENFILENAME); of.hwndOwner = HWND_DESKTOP; @@ -9172,16 +9185,24 @@ of.lpstrInitialDir = defpath; of.lpstrTitle = title; of.lpstrFile = filenamebuf; + of.lpstrFilter = filterbuf; + of.nFilterIndex = 1; of.nMaxFile = 1000; - of.lpstrDefExt = ext; - of.Flags = 0; - - if(flags & DW_FILE_SAVE) + //of.lpstrDefExt = ext; + of.Flags = OFN_NOCHANGEDIR; + + if (flags & DW_FILE_SAVE) + { + of.Flags |= OFN_OVERWRITEPROMPT; rc = GetSaveFileName(&of); + } else + { + of.Flags |= OFN_FILEMUSTEXIST; rc = GetOpenFileName(&of); - - if(rc) + } + + if (rc) return strdup(of.lpstrFile); } return NULL;