diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2023-12-22 16:45:07 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2023-12-22 16:45:07 (GMT) |
commit | c0fe491025571aa1b4af422d0122eaacdb944396 (patch) | |
tree | 29afb4abc6be60603aebca6f76e5dce1e0a22748 /generic/tk3d.c | |
parent | 9b52a2693d77fde18f13bf3c11f5390382127a5f (diff) | |
download | tk-c0fe491025571aa1b4af422d0122eaacdb944396.zip tk-c0fe491025571aa1b4af422d0122eaacdb944396.tar.gz tk-c0fe491025571aa1b4af422d0122eaacdb944396.tar.bz2 |
Fix [9c57421be8]: -relief strange behavior in scrollbar. Enhance Tcl_GetRelief() such that "interp" and "reliefPtr" are allowed to be NULL
Diffstat (limited to 'generic/tk3d.c')
-rw-r--r-- | generic/tk3d.c | 41 |
1 files changed, 24 insertions, 17 deletions
diff --git a/generic/tk3d.c b/generic/tk3d.c index f1cc8f1..65980e6 100644 --- a/generic/tk3d.c +++ b/generic/tk3d.c @@ -637,8 +637,7 @@ Tk_GetReliefFromObj( * * Results: * A standard Tcl return value. If all goes well then *reliefPtr is - * filled in with one of the values TK_RELIEF_RAISED, TK_RELIEF_FLAT, or - * TK_RELIEF_SUNKEN. + * filled in with one of the values TK_RELIEF_* * * Side effects: * None. @@ -654,30 +653,38 @@ Tk_GetRelief( { char c; size_t length; + int relief; c = name[0]; length = strlen(name); if ((c == 'f') && (strncmp(name, "flat", length) == 0)) { - *reliefPtr = TK_RELIEF_FLAT; - } else if ((c == 'g') && (strncmp(name, "groove", length) == 0) - && (length >= 2)) { - *reliefPtr = TK_RELIEF_GROOVE; + relief = TK_RELIEF_FLAT; + } else if ((c == 'g') && (strncmp(name, "groove", length) == 0)) { + relief = TK_RELIEF_GROOVE; } else if ((c == 'r') && (strncmp(name, "raised", length) == 0) && (length >= 2)) { - *reliefPtr = TK_RELIEF_RAISED; - } else if ((c == 'r') && (strncmp(name, "ridge", length) == 0)) { - *reliefPtr = TK_RELIEF_RIDGE; - } else if ((c == 's') && (strncmp(name, "solid", length) == 0)) { - *reliefPtr = TK_RELIEF_SOLID; - } else if ((c == 's') && (strncmp(name, "sunken", length) == 0)) { - *reliefPtr = TK_RELIEF_SUNKEN; + relief = TK_RELIEF_RAISED; + } else if ((c == 'r') && (strncmp(name, "ridge", length) == 0) + && (length >= 2)) { + relief = TK_RELIEF_RIDGE; + } else if ((c == 's') && (strncmp(name, "solid", length) == 0) + && (length >= 2)) { + relief = TK_RELIEF_SOLID; + } else if ((c == 's') && (strncmp(name, "sunken", length) == 0) + && (length >= 2)) { + relief = TK_RELIEF_SUNKEN; } else { - Tcl_SetObjResult(interp, - Tcl_ObjPrintf("bad relief \"%.50s\": must be %s", - name, "flat, groove, raised, ridge, solid, or sunken")); - Tcl_SetErrorCode(interp, "TK", "VALUE", "RELIEF", NULL); + if (interp) { + Tcl_SetObjResult(interp, + Tcl_ObjPrintf("bad relief \"%.50s\": must be %s", + name, "flat, groove, raised, ridge, solid, or sunken")); + Tcl_SetErrorCode(interp, "TK", "VALUE", "RELIEF", NULL); + } return TCL_ERROR; } + if (reliefPtr) { + *reliefPtr = relief; + } return TCL_OK; } |