summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--win/tkWinDialog.c53
2 files changed, 23 insertions, 33 deletions
diff --git a/ChangeLog b/ChangeLog
index 83c403e..542b85b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2009-10-22 Donal K. Fellows <dkf@users.sf.net>
+ * win/tkWinDialog.c (GetFileNameA): Make the handling of the filter
+ index the same as in GetFileNameW.
+
* library/tkfbox.tcl (::tk::dialog::file::, Done):
* library/xmfbox.tcl (MotifFDialog_FileTypes)
(MotifFDialog_ActivateSEnt):
diff --git a/win/tkWinDialog.c b/win/tkWinDialog.c
index baa3225..cefa46d 100644
--- a/win/tkWinDialog.c
+++ b/win/tkWinDialog.c
@@ -8,7 +8,7 @@
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tkWinDialog.c,v 1.65 2009/10/22 10:12:57 dkf Exp $
+ * RCS: @(#) $Id: tkWinDialog.c,v 1.66 2009/10/22 12:56:36 dkf Exp $
*
*/
@@ -186,7 +186,7 @@ static int GetFileNameW(ClientData clientData,
Tcl_Obj *const objv[], int isOpen);
static int MakeFilter(Tcl_Interp *interp, Tcl_Obj *valuePtr,
Tcl_DString *dsPtr, Tcl_Obj *initialPtr,
- int *index);
+ int *indexPtr);
static UINT APIENTRY OFNHookProc(HWND hdlg, UINT uMsg, WPARAM wParam,
LPARAM lParam);
static UINT APIENTRY OFNHookProcW(HWND hdlg, UINT uMsg, WPARAM wParam,
@@ -571,11 +571,11 @@ GetFileNameW(
{
OPENFILENAMEW ofn;
WCHAR file[TK_MULTI_MAX_PATH];
- int filterIndex, result = TCL_ERROR, winCode, oldMode, i, multi = 0;
- const char *extension, *filter, *title;
+ int filterIndex = 0, result = TCL_ERROR, winCode, oldMode, i, multi = 0;
+ const char *extension = NULL, *filter = NULL, *title = NULL;
Tk_Window tkwin = clientData;
HWND hWnd;
- Tcl_Obj *filterObj, *initialTypeObj, *typeVariableObj;
+ Tcl_Obj *filterObj=NULL, *initialTypeObj=NULL, *typeVariableObj=NULL;
Tcl_DString utfFilterString, utfDirString;
Tcl_DString extString, filterString, dirString, titleString;
Tcl_Encoding unicodeEncoding = TkWinGetUnicodeEncoding();
@@ -596,20 +596,13 @@ GetFileNameW(
};
file[0] = '\0';
+ Tcl_DStringInit(&utfFilterString);
+ Tcl_DStringInit(&utfDirString);
/*
* Parse the arguments.
*/
- extension = NULL;
- filter = NULL;
- Tcl_DStringInit(&utfFilterString);
- Tcl_DStringInit(&utfDirString);
- title = NULL;
- filterObj = NULL;
- typeVariableObj = NULL;
- initialTypeObj = NULL;
-
if (open) {
optionStrings = openOptionStrings;
} else {
@@ -1013,14 +1006,14 @@ GetFileNameA(
{
OPENFILENAME ofn;
TCHAR file[TK_MULTI_MAX_PATH], savePath[MAX_PATH];
- int filterIndex, result = TCL_ERROR, winCode, oldMode, i, multi = 0;
- const char *extension, *filter, *title;
+ int filterIndex = 0, result = TCL_ERROR, winCode, oldMode, i, multi = 0;
+ const char *extension = NULL, *filter = NULL, *title = NULL;
Tk_Window tkwin = clientData;
HWND hWnd;
- Tcl_Obj *filterObj, *initialTypeObj, *typeVariableObj;
+ Tcl_Obj *filterObj=NULL, *initialTypeObj=NULL, *typeVariableObj=NULL;
Tcl_DString utfFilterString, utfDirString;
Tcl_DString extString, filterString, dirString, titleString;
- ThreadSpecificData *tsdPtr = (ThreadSpecificData *)
+ ThreadSpecificData *tsdPtr =
Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData));
static const char *const saveOptionStrings[] = {
"-defaultextension", "-filetypes", "-initialdir", "-initialfile",
@@ -1037,20 +1030,13 @@ GetFileNameA(
};
file[0] = '\0';
+ Tcl_DStringInit(&utfFilterString);
+ Tcl_DStringInit(&utfDirString);
/*
* Parse the arguments.
*/
- extension = NULL;
- filter = NULL;
- Tcl_DStringInit(&utfFilterString);
- Tcl_DStringInit(&utfDirString);
- title = NULL;
- filterObj = NULL;
- typeVariableObj = NULL;
- initialTypeObj = NULL;
-
if (open) {
optionStrings = openOptionStrings;
} else {
@@ -1158,7 +1144,6 @@ GetFileNameA(
ofn.lpstrFilter = NULL;
ofn.lpstrCustomFilter = NULL;
ofn.nMaxCustFilter = 0;
- ofn.nFilterIndex = 0;
ofn.lpstrFile = (LPTSTR) file;
ofn.nMaxFile = TK_MULTI_MAX_PATH;
ofn.lpstrFileTitle = NULL;
@@ -1195,6 +1180,7 @@ GetFileNameA(
Tcl_UtfToExternalDString(NULL, Tcl_DStringValue(&utfFilterString),
Tcl_DStringLength(&utfFilterString), &filterString);
ofn.lpstrFilter = (LPTSTR) Tcl_DStringValue(&filterString);
+ ofn.nFilterIndex = filterIndex;
if (Tcl_DStringValue(&utfDirString)[0] != '\0') {
Tcl_UtfToExternalDString(NULL, Tcl_DStringValue(&utfDirString),
@@ -1461,7 +1447,7 @@ MakeFilter(
Tcl_Obj *valuePtr, /* Value of the -filetypes option */
Tcl_DString *dsPtr, /* Filled with windows filter string. */
Tcl_Obj *initialPtr, /* Initial type name */
- int *index) /* Index of initial type in filter string */
+ int *indexPtr) /* Index of initial type in filter string */
{
char *filterStr;
char *p;
@@ -1529,13 +1515,14 @@ MakeFilter(
FileFilterClause *clausePtr;
/*
- * Check initial index for match, set index.
- * Filter index is 1 based so increment first
+ * Check initial index for match, set *indexPtr. Filter index is 1
+ * based so increment first
*/
ix++;
- if (index && initial && (strcmp(initial, filterPtr->name) == 0)) {
- *index = ix;
+ if (indexPtr && initial
+ && (strcmp(initial, filterPtr->name) == 0)) {
+ *indexPtr = ix;
}
/*