summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2024-06-16 22:16:46 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2024-06-16 22:16:46 (GMT)
commit72fb10940a9941ab37ccffa22f56a4f4a044e1fe (patch)
treed1ba9e919b7b48e86094388830d923d0831c2396 /generic
parent3951487aa1587e2fedee41985f6b60f0e9bb1e77 (diff)
downloadtk-72fb10940a9941ab37ccffa22f56a4f4a044e1fe.zip
tk-72fb10940a9941ab37ccffa22f56a4f4a044e1fe.tar.gz
tk-72fb10940a9941ab37ccffa22f56a4f4a044e1fe.tar.bz2
Implement TK_CONFIG_NULL_OK for TK_CONFIG_PIXELS. Needed for "-elementborderwidth" in tkScrollbar.c
Make TK_OPTION_NULL_OK the same value as TCL_NULL_OK for Tcl 9, but keep binary compatibility. Fix some spacing
Diffstat (limited to 'generic')
-rw-r--r--generic/tk.h13
-rw-r--r--generic/tkCanvas.c2
-rw-r--r--generic/tkConfig.c10
-rw-r--r--generic/tkEntry.c2
-rw-r--r--generic/tkOldConfig.c26
-rw-r--r--generic/tkScrollbar.c2
-rw-r--r--generic/tkTextDisp.c2
7 files changed, 35 insertions, 22 deletions
diff --git a/generic/tk.h b/generic/tk.h
index e3c375c..d3f9141 100644
--- a/generic/tk.h
+++ b/generic/tk.h
@@ -237,8 +237,13 @@ typedef struct Tk_OptionSpec {
* Tk_ConfigSpec structures, so be sure to coordinate any changes carefully.
*/
-#define TK_OPTION_NULL_OK (1 << 0)
#define TK_OPTION_DONT_SET_DEFAULT (1 << 3)
+#if TCL_MAJOR_VERSION > 8
+# define TK_OPTION_NULL_OK TCL_NULL_OK
+#else
+# define TK_OPTION_NULL_OK (1 << 0)
+#endif
+#define TK_OPTION_NEG_OK (1 << 6) /* For TK_OPTION_PIXELS only, so no conflict with TK_OPTION_VAR */
#define TK_OPTION_VAR(type) ((sizeof(type) < 2 * sizeof(int)) ? ((int)(sizeof(type)&(sizeof(int)-1))<<6) : (3<<6))
#define TK_OPTION_ENUM_VAR TK_OPTION_VAR(Tk_OptionType)
@@ -428,13 +433,17 @@ typedef enum {
* (internal-use-only flags are defined there).
*/
-#define TK_CONFIG_NULL_OK (1 << 0)
#define TK_CONFIG_COLOR_ONLY (1 << 1)
#define TK_CONFIG_MONO_ONLY (1 << 2)
#define TK_CONFIG_DONT_SET_DEFAULT (1 << 3)
#ifndef TK_NO_DEPRECATED
# define TK_CONFIG_OPTION_SPECIFIED (1 << 4)
#endif /* !TK_NO_DEPRECATED */
+#if TCL_MAJOR_VERSION > 8
+# define TK_CONFIG_NULL_OK TCL_NULL_OK
+#else
+# define TK_CONFIG_NULL_OK (1 << 0)
+#endif
#define TK_CONFIG_USER_BIT 0x100
#endif /* __NO_OLD_CONFIG */
diff --git a/generic/tkCanvas.c b/generic/tkCanvas.c
index 8713497..38a297d 100644
--- a/generic/tkCanvas.c
+++ b/generic/tkCanvas.c
@@ -3261,7 +3261,7 @@ DisplayCanvas(
Tk_Height(tkwin) - 2*canvasPtr->highlightWidth,
canvasPtr->borderWidth, canvasPtr->relief);
}
- if (canvasPtr->highlightWidth != 0) {
+ if (canvasPtr->highlightWidth > 0) {
GC fgGC, bgGC;
bgGC = Tk_GCForColor(canvasPtr->highlightBgColorPtr,
diff --git a/generic/tkConfig.c b/generic/tkConfig.c
index 7362831..bbbed91 100644
--- a/generic/tkConfig.c
+++ b/generic/tkConfig.c
@@ -625,7 +625,7 @@ DoObjConfig(
} else {
oldInternalPtr = (char *) &internal.internalForm;
}
- nullOK = (optionPtr->specPtr->flags & (TK_OPTION_NULL_OK|TCL_NULL_OK));
+ nullOK = (optionPtr->specPtr->flags & (TK_OPTION_NULL_OK|TCL_NULL_OK|1));
switch (optionPtr->specPtr->type) {
case TK_OPTION_BOOLEAN: {
int newBool;
@@ -2130,7 +2130,7 @@ GetObjectForOption(
}
case TK_OPTION_INT: {
Tcl_WideInt value;
- int nullOK = (optionPtr->specPtr->flags & (TK_OPTION_NULL_OK|TCL_NULL_OK));
+ int nullOK = (optionPtr->specPtr->flags & (TK_OPTION_NULL_OK|TCL_NULL_OK|1));
if (optionPtr->specPtr->flags & TYPE_MASK) {
if ((optionPtr->specPtr->flags & TYPE_MASK) == TYPE_MASK) {
if (sizeof(long) > sizeof(int)) {
@@ -2151,7 +2151,7 @@ GetObjectForOption(
break;
}
case TK_OPTION_INDEX:
- if (!(optionPtr->specPtr->flags & (TK_OPTION_NULL_OK|TCL_NULL_OK)) || *((int *) internalPtr) != INT_MIN) {
+ if (!(optionPtr->specPtr->flags & (TK_OPTION_NULL_OK|TCL_NULL_OK|1)) || *((int *) internalPtr) != INT_MIN) {
if (*((int *) internalPtr) == INT_MIN) {
objPtr = TkNewIndexObj(TCL_INDEX_NONE);
} else if (*((int *) internalPtr) == INT_MAX) {
@@ -2168,7 +2168,7 @@ GetObjectForOption(
}
break;
case TK_OPTION_DOUBLE:
- if (!(optionPtr->specPtr->flags & (TK_OPTION_NULL_OK|TCL_NULL_OK)) || !isnan(*((double *) internalPtr))) {
+ if (!(optionPtr->specPtr->flags & (TK_OPTION_NULL_OK|TCL_NULL_OK|1)) || !isnan(*((double *) internalPtr))) {
objPtr = Tcl_NewDoubleObj(*((double *) internalPtr));
}
break;
@@ -2299,7 +2299,7 @@ GetObjectForOption(
break;
}
case TK_OPTION_PIXELS:
- if (!(optionPtr->specPtr->flags & (TK_OPTION_NULL_OK|TCL_NULL_OK)) || *((int *) internalPtr) != INT_MIN) {
+ if (!(optionPtr->specPtr->flags & (TK_OPTION_NULL_OK|TCL_NULL_OK|1)) || *((int *) internalPtr) != INT_MIN) {
objPtr = Tcl_NewWideIntObj(*((int *)internalPtr));
}
break;
diff --git a/generic/tkEntry.c b/generic/tkEntry.c
index 477f359..7ee455e 100644
--- a/generic/tkEntry.c
+++ b/generic/tkEntry.c
@@ -1316,7 +1316,7 @@ ConfigureEntry(
Tk_SetInternalBorder(entryPtr->tkwin,
entryPtr->borderWidth + entryPtr->highlightWidth);
- if (entryPtr->highlightWidth <= 0) {
+ if (entryPtr->highlightWidth < 0) {
entryPtr->highlightWidth = 0;
}
entryPtr->inset = entryPtr->highlightWidth
diff --git a/generic/tkOldConfig.c b/generic/tkOldConfig.c
index 55765e2..eed7171 100644
--- a/generic/tkOldConfig.c
+++ b/generic/tkOldConfig.c
@@ -359,7 +359,7 @@ DoConfig(
int nullValue;
nullValue = 0;
- if ((*value == 0) && (specPtr->specFlags & (TK_CONFIG_NULL_OK|TCL_NULL_OK))) {
+ if ((*value == 0) && (specPtr->specFlags & (TK_CONFIG_NULL_OK|TCL_NULL_OK|1))) {
nullValue = 1;
}
@@ -370,17 +370,17 @@ DoConfig(
ptr = (char *)widgRec + specPtr->offset;
switch (specPtr->type) {
case TK_CONFIG_BOOLEAN:
- if (Tcl_GetBoolean(interp, value, (int *) ptr) != TCL_OK) {
+ if (Tcl_GetBoolean(interp, value, (int *)ptr) != TCL_OK) {
return TCL_ERROR;
}
break;
case TK_CONFIG_INT:
- if (Tcl_GetInt(interp, value, (int *) ptr) != TCL_OK) {
+ if (Tcl_GetInt(interp, value, (int *)ptr) != TCL_OK) {
return TCL_ERROR;
}
break;
case TK_CONFIG_DOUBLE:
- if (Tcl_GetDouble(interp, value, (double *) ptr) != TCL_OK) {
+ if (Tcl_GetDouble(interp, value, (double *)ptr) != TCL_OK) {
return TCL_ERROR;
}
break;
@@ -482,7 +482,7 @@ DoConfig(
}
case TK_CONFIG_RELIEF:
uid = valueIsUid ? (Tk_Uid) value : Tk_GetUid(value);
- if (Tk_GetRelief(interp, uid, (int *) ptr) != TCL_OK) {
+ if (Tk_GetRelief(interp, uid, (int *)ptr) != TCL_OK) {
return TCL_ERROR;
}
break;
@@ -523,24 +523,26 @@ DoConfig(
break;
case TK_CONFIG_CAP_STYLE:
uid = valueIsUid ? (Tk_Uid) value : Tk_GetUid(value);
- if (Tk_GetCapStyle(interp, uid, (int *) ptr) != TCL_OK) {
+ if (Tk_GetCapStyle(interp, uid, (int *)ptr) != TCL_OK) {
return TCL_ERROR;
}
break;
case TK_CONFIG_JOIN_STYLE:
uid = valueIsUid ? (Tk_Uid) value : Tk_GetUid(value);
- if (Tk_GetJoinStyle(interp, uid, (int *) ptr) != TCL_OK) {
+ if (Tk_GetJoinStyle(interp, uid, (int *)ptr) != TCL_OK) {
return TCL_ERROR;
}
break;
case TK_CONFIG_PIXELS:
- if (Tk_GetPixels(interp, tkwin, value, (int *) ptr)
+ if (nullValue) {
+ *(int *)ptr = INT_MIN;
+ } if (Tk_GetPixels(interp, tkwin, value, (int *)ptr)
!= TCL_OK) {
return TCL_ERROR;
}
break;
case TK_CONFIG_MM:
- if (Tk_GetScreenMM(interp, tkwin, value, (double*)ptr) != TCL_OK) {
+ if (Tk_GetScreenMM(interp, tkwin, value, (double *)ptr) != TCL_OK) {
return TCL_ERROR;
}
break;
@@ -873,8 +875,10 @@ FormatConfigValue(
result = Tk_NameOfJoinStyle(*((int *)ptr));
break;
case TK_CONFIG_PIXELS:
- snprintf(buffer, 200, "%d", *((int *)ptr));
- result = buffer;
+ if ((*(int *)ptr != INT_MIN) || !(specPtr->specFlags & (TK_CONFIG_NULL_OK|TCL_NULL_OK|1))) {
+ snprintf(buffer, 200, "%d", *((int *)ptr));
+ result = buffer;
+ }
break;
case TK_CONFIG_MM:
Tcl_PrintDouble(interp, *((double *)ptr), buffer);
diff --git a/generic/tkScrollbar.c b/generic/tkScrollbar.c
index 04a4168..d91b603 100644
--- a/generic/tkScrollbar.c
+++ b/generic/tkScrollbar.c
@@ -57,7 +57,7 @@ static const Tk_ConfigSpec configSpecs[] = {
DEF_SCROLLBAR_CURSOR, offsetof(TkScrollbar, cursor), TK_CONFIG_NULL_OK, NULL},
{TK_CONFIG_PIXELS, "-elementborderwidth", "elementBorderWidth",
"BorderWidth", DEF_SCROLLBAR_EL_BORDER_WIDTH,
- offsetof(TkScrollbar, elementBorderWidth), 0, NULL},
+ offsetof(TkScrollbar, elementBorderWidth), TK_CONFIG_NULL_OK, NULL},
{TK_CONFIG_COLOR, "-highlightbackground", "highlightBackground",
"HighlightBackground", DEF_SCROLLBAR_HIGHLIGHT_BG,
offsetof(TkScrollbar, highlightBgColorPtr), 0, NULL},
diff --git a/generic/tkTextDisp.c b/generic/tkTextDisp.c
index cc4a12c..6afd08e 100644
--- a/generic/tkTextDisp.c
+++ b/generic/tkTextDisp.c
@@ -4414,7 +4414,7 @@ DisplayText(
Tk_Width(textPtr->tkwin) - 2*textPtr->highlightWidth,
Tk_Height(textPtr->tkwin) - 2*textPtr->highlightWidth,
textPtr->borderWidth, textPtr->relief);
- if (textPtr->highlightWidth != 0) {
+ if (textPtr->highlightWidth > 0) {
GC fgGC, bgGC;
bgGC = Tk_GCForColor(textPtr->highlightBgColorPtr,