summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--win/tkWinDialog.c53
2 files changed, 24 insertions, 34 deletions
diff --git a/ChangeLog b/ChangeLog
index 9948725..969ebc2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2012-07-05 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/tkWinDialog.c (GetFileNameW): [Bug 3540127]: Better solution,
+ using Tcl_GetIndexFromObj in stead of Tcl_GetIndexFromObjStruct
+
2012-07-05 Donal K. Fellows <dkf@users.sf.net>
* doc/wm.n (geometry): [Bug 3538401]: Better description of the key
diff --git a/win/tkWinDialog.c b/win/tkWinDialog.c
index a09980a..4d60105 100644
--- a/win/tkWinDialog.c
+++ b/win/tkWinDialog.c
@@ -585,37 +585,18 @@ GetFileName(
Tcl_DString extString, filterString, dirString, titleString;
ThreadSpecificData *tsdPtr = (ThreadSpecificData *)
Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData));
- enum options {
- FILE_DEFAULT, FILE_TYPES, FILE_INITDIR, FILE_INITFILE, FILE_PARENT,
- FILE_TITLE, FILE_TYPEVARIABLE, FILE_MULTIPLE, FILE_CONFIRMOW
- };
- struct Options {
- const char *name;
- enum options value;
+ static const char *const saveOptionStrings[] = {
+ "-confirmoverwrite", "-defaultextension", "-filetypes", "-initialdir",
+ "-initialfile", "", "-parent", "-title", "-typevariable", NULL
};
- static const struct Options saveOptions[] = {
- {"-confirmoverwrite", FILE_CONFIRMOW},
- {"-defaultextension", FILE_DEFAULT},
- {"-filetypes", FILE_TYPES},
- {"-initialdir", FILE_INITDIR},
- {"-initialfile", FILE_INITFILE},
- {"-parent", FILE_PARENT},
- {"-title", FILE_TITLE},
- {"-typevariable", FILE_TYPEVARIABLE},
- {NULL, FILE_DEFAULT/*ignored*/ }
+ static const char *const openOptionStrings[] = {
+ "", "-defaultextension", "-filetypes", "-initialdir", "-initialfile",
+ "-multiple", "-parent", "-title", "-typevariable", NULL
};
- static const struct Options openOptions[] = {
- {"-defaultextension", FILE_DEFAULT},
- {"-filetypes", FILE_TYPES},
- {"-initialdir", FILE_INITDIR},
- {"-initialfile", FILE_INITFILE},
- {"-multiple", FILE_MULTIPLE},
- {"-parent", FILE_PARENT},
- {"-title", FILE_TITLE},
- {"-typevariable", FILE_TYPEVARIABLE},
- {NULL, FILE_DEFAULT/*ignored*/ }
+ enum options {
+ FILE_CONFIRMOW, FILE_DEFAULT, FILE_TYPES, FILE_INITDIR, FILE_INITFILE,
+ FILE_MULTIPLE, FILE_PARENT, FILE_TITLE, FILE_TYPEVARIABLE
};
- const struct Options *const options = open ? openOptions : saveOptions;
file[0] = '\0';
ZeroMemory(&ofnData, sizeof(OFNData));
@@ -631,17 +612,21 @@ GetFileName(
const char *string;
Tcl_Obj *valuePtr = objv[i + 1];
- if (Tcl_GetIndexFromObjStruct(interp, objv[i], options,
- sizeof(struct Options), "option", 0, &index) != TCL_OK) {
+ if (Tcl_GetIndexFromObj(interp, objv[i],
+ open ? openOptionStrings : saveOptionStrings,
+ "option", 0, &index) != TCL_OK) {
goto end;
- } else if (i + 1 == objc) {
- Tcl_AppendResult(interp, "value for \"", options[index].name,
- "\" missing", NULL);
+ }
+
+ if (i + 1 == objc) {
+ string = Tcl_GetString(objv[i]);
+ Tcl_AppendResult(interp, "value for \"", string, "\" missing",
+ NULL);
goto end;
}
string = Tcl_GetString(valuePtr);
- switch (options[index].value) {
+ switch ((enum options) index) {
case FILE_DEFAULT:
if (string[0] == '.') {
string++;