summaryrefslogtreecommitdiffstats
path: root/generic/ttk
diff options
context:
space:
mode:
Diffstat (limited to 'generic/ttk')
-rw-r--r--generic/ttk/ttk.decls2
-rw-r--r--generic/ttk/ttkBlink.c25
-rw-r--r--generic/ttk/ttkButton.c30
-rw-r--r--generic/ttk/ttkClamTheme.c24
-rw-r--r--generic/ttk/ttkClassicTheme.c54
-rw-r--r--generic/ttk/ttkDecls.h9
-rw-r--r--generic/ttk/ttkDefaultTheme.c52
-rw-r--r--generic/ttk/ttkElements.c135
-rw-r--r--generic/ttk/ttkEntry.c62
-rw-r--r--generic/ttk/ttkFrame.c14
-rw-r--r--generic/ttk/ttkImage.c9
-rw-r--r--generic/ttk/ttkInit.c2
-rw-r--r--generic/ttk/ttkLabel.c21
-rw-r--r--generic/ttk/ttkLayout.c59
-rw-r--r--generic/ttk/ttkManager.c11
-rw-r--r--generic/ttk/ttkNotebook.c31
-rw-r--r--generic/ttk/ttkPanedwindow.c39
-rw-r--r--generic/ttk/ttkProgress.c12
-rw-r--r--generic/ttk/ttkScale.c18
-rw-r--r--generic/ttk/ttkScroll.c9
-rw-r--r--generic/ttk/ttkSquare.c3
-rw-r--r--generic/ttk/ttkState.c30
-rw-r--r--generic/ttk/ttkStubInit.c5
-rw-r--r--generic/ttk/ttkTheme.c36
-rw-r--r--generic/ttk/ttkTheme.h2
-rw-r--r--generic/ttk/ttkToggleswitch.c638
-rw-r--r--generic/ttk/ttkTrack.c14
-rw-r--r--generic/ttk/ttkTreeview.c118
-rw-r--r--generic/ttk/ttkWidget.c49
29 files changed, 1202 insertions, 311 deletions
diff --git a/generic/ttk/ttk.decls b/generic/ttk/ttk.decls
index ff2c18d..55be583 100644
--- a/generic/ttk/ttk.decls
+++ b/generic/ttk/ttk.decls
@@ -21,7 +21,7 @@ declare 4 {
Tcl_Interp *interp, void *deleteData, Ttk_CleanupProc *cleanupProc)
}
-declare 5 {
+declare 5 {deprecated {Use Ttk_RegisterElement}} {
int Ttk_RegisterElementSpec(
Ttk_Theme theme,
const char *elementName,
diff --git a/generic/ttk/ttkBlink.c b/generic/ttk/ttkBlink.c
index 8f4c8af..5fddbc8 100644
--- a/generic/ttk/ttkBlink.c
+++ b/generic/ttk/ttkBlink.c
@@ -97,7 +97,7 @@ CursorBlinkProc(void *clientData)
int blinkTime;
if (cm->owner->flags & CURSOR_ON) {
- cm->owner->flags &= ~CURSOR_ON;
+ cm->owner->flags &= ~(unsigned)CURSOR_ON;
blinkTime = cm->offTime;
} else {
cm->owner->flags |= CURSOR_ON;
@@ -113,7 +113,7 @@ CursorBlinkProc(void *clientData)
static void LoseCursor(CursorManager *cm, WidgetCore *corePtr)
{
if (corePtr->flags & CURSOR_ON) {
- corePtr->flags &= ~CURSOR_ON;
+ corePtr->flags &= ~(unsigned)CURSOR_ON;
TtkRedisplayWidget(corePtr);
}
if (cm->owner == corePtr) {
@@ -130,10 +130,12 @@ static void LoseCursor(CursorManager *cm, WidgetCore *corePtr)
*/
static void ClaimCursor(CursorManager *cm, WidgetCore *corePtr)
{
- if (cm->owner == corePtr)
+ if (cm->owner == corePtr) {
return;
- if (cm->owner)
+ }
+ if (cm->owner) {
LoseCursor(cm, cm->owner);
+ }
corePtr->flags |= CURSOR_ON;
TtkRedisplayWidget(corePtr);
@@ -161,18 +163,21 @@ CursorEventProc(void *clientData, XEvent *eventPtr)
switch (eventPtr->type) {
case DestroyNotify:
- if (cm->owner == corePtr)
+ if (cm->owner == corePtr) {
LoseCursor(cm, corePtr);
+ }
Tk_DeleteEventHandler(
corePtr->tkwin, CursorEventMask, CursorEventProc, clientData);
break;
case FocusIn:
- if (RealFocusEvent(eventPtr->xfocus.detail))
+ if (RealFocusEvent(eventPtr->xfocus.detail)) {
ClaimCursor(cm, corePtr);
+ }
break;
case FocusOut:
- if (RealFocusEvent(eventPtr->xfocus.detail))
+ if (RealFocusEvent(eventPtr->xfocus.detail)) {
LoseCursor(cm, corePtr);
+ }
break;
}
}
@@ -181,16 +186,18 @@ void TtkSetBlinkCursorOnTime(Tcl_Interp* interp, int onTime)
{
CursorManager* cm = GetCursorManager(interp);
- if (onTime >= 0)
+ if (onTime >= 0) {
cm->onTime = onTime;
+ }
}
void TtkSetBlinkCursorOffTime(Tcl_Interp* interp, int offTime)
{
CursorManager* cm = GetCursorManager(interp);
- if (offTime >= 0)
+ if (offTime >= 0) {
cm->offTime = offTime;
+ }
}
/*
diff --git a/generic/ttk/ttkButton.c b/generic/ttk/ttkButton.c
index 0cf0517..1db042f 100644
--- a/generic/ttk/ttkButton.c
+++ b/generic/ttk/ttkButton.c
@@ -533,10 +533,12 @@ CheckbuttonPostConfigure(Tcl_Interp *interp, void *recordPtr, int mask)
Checkbutton *checkPtr = (Checkbutton *)recordPtr;
int status = TCL_OK;
- if (checkPtr->checkbutton.variableTrace)
+ if (checkPtr->checkbutton.variableTrace) {
status = Ttk_FireTrace(checkPtr->checkbutton.variableTrace);
- if (status == TCL_OK && !WidgetDestroyed(&checkPtr->core))
+ }
+ if (status == TCL_OK && !WidgetDestroyed(&checkPtr->core)) {
status = BasePostConfigure(interp, recordPtr, mask);
+ }
return status;
}
@@ -556,16 +558,17 @@ CheckbuttonInvokeCommand(
Tcl_WrongNumArgs(interp, 1, objv, "invoke");
return TCL_ERROR;
}
- if (corePtr->state & TTK_STATE_DISABLED)
+ if (corePtr->state & TTK_STATE_DISABLED) {
return TCL_OK;
-
+ }
/*
* Toggle the selected state.
*/
- if (corePtr->state & TTK_STATE_SELECTED)
+ if (corePtr->state & TTK_STATE_SELECTED) {
newValue = checkPtr->checkbutton.offValueObj;
- else
+ } else {
newValue = checkPtr->checkbutton.onValueObj;
+ }
if (checkPtr->checkbutton.variableObj == NULL ||
*Tcl_GetString(checkPtr->checkbutton.variableObj) == '\0')
@@ -576,8 +579,9 @@ CheckbuttonInvokeCommand(
== NULL)
return TCL_ERROR;
- if (WidgetDestroyed(corePtr))
+ if (WidgetDestroyed(corePtr)) {
return TCL_ERROR;
+ }
return Tcl_EvalObjEx(interp,
checkPtr->checkbutton.commandObj, TCL_EVAL_GLOBAL);
@@ -721,10 +725,12 @@ RadiobuttonPostConfigure(Tcl_Interp *interp, void *recordPtr, int mask)
Radiobutton *radioPtr = (Radiobutton *)recordPtr;
int status = TCL_OK;
- if (radioPtr->radiobutton.variableTrace)
+ if (radioPtr->radiobutton.variableTrace) {
status = Ttk_FireTrace(radioPtr->radiobutton.variableTrace);
- if (status == TCL_OK && !WidgetDestroyed(&radioPtr->core))
+ }
+ if (status == TCL_OK && !WidgetDestroyed(&radioPtr->core)) {
status = BasePostConfigure(interp, recordPtr, mask);
+ }
return status;
}
@@ -743,8 +749,9 @@ RadiobuttonInvokeCommand(
Tcl_WrongNumArgs(interp, 1, objv, "invoke");
return TCL_ERROR;
}
- if (corePtr->state & TTK_STATE_DISABLED)
+ if (corePtr->state & TTK_STATE_DISABLED) {
return TCL_OK;
+ }
if (Tcl_ObjSetVar2(interp,
radioPtr->radiobutton.variableObj, NULL,
@@ -753,8 +760,9 @@ RadiobuttonInvokeCommand(
== NULL)
return TCL_ERROR;
- if (WidgetDestroyed(corePtr))
+ if (WidgetDestroyed(corePtr)) {
return TCL_ERROR;
+ }
return Tcl_EvalObjEx(interp,
radioPtr->radiobutton.commandObj, TCL_EVAL_GLOBAL);
diff --git a/generic/ttk/ttkClamTheme.c b/generic/ttk/ttkClamTheme.c
index 91c15fc..a8c42e0 100644
--- a/generic/ttk/ttkClamTheme.c
+++ b/generic/ttk/ttkClamTheme.c
@@ -378,8 +378,8 @@ static void IndicatorElementSize(
double scalingLevel = TkScalingLevel(tkwin);
Ttk_GetPaddingFromObj(NULL, tkwin, indicator->marginObj, &margins);
- *widthPtr = spec->width * scalingLevel + Ttk_PaddingWidth(margins);
- *heightPtr = spec->height * scalingLevel + Ttk_PaddingHeight(margins);
+ *widthPtr = (int)(spec->width * scalingLevel) + Ttk_PaddingWidth(margins);
+ *heightPtr = (int)(spec->height * scalingLevel) + Ttk_PaddingHeight(margins);
}
static void ColorToStr(
@@ -408,8 +408,8 @@ static void IndicatorElementDraw(
Ttk_Padding padding;
const IndicatorSpec *spec = (const IndicatorSpec *)clientData;
double scalingLevel = TkScalingLevel(tkwin);
- int width = spec->width * scalingLevel;
- int height = spec->height * scalingLevel;
+ int width = (int)(spec->width * scalingLevel);
+ int height = (int)(spec->height * scalingLevel);
char upperBdColorStr[7], lowerBdColorStr[7], bgColorStr[7], fgColorStr[7];
unsigned int selected = (state & TTK_STATE_SELECTED);
@@ -675,8 +675,8 @@ static void TroughElementDraw(
GC gcb = Ttk_GCForColor(tkwin,sb->borderColorObj,d);
GC gct = Ttk_GCForColor(tkwin,sb->troughColorObj,d);
- XFillRectangle(Tk_Display(tkwin), d, gct, b.x, b.y, b.width-1, b.height-1);
- XDrawRectangle(Tk_Display(tkwin), d, gcb, b.x, b.y, b.width-1, b.height-1);
+ XFillRectangle(Tk_Display(tkwin), d, gct, b.x, b.y, (unsigned)b.width-1, (unsigned)b.height-1);
+ XDrawRectangle(Tk_Display(tkwin), d, gcb, b.x, b.y, (unsigned)b.width-1, (unsigned)b.height-1);
}
static const Ttk_ElementSpec TroughElementSpec = {
@@ -721,7 +721,7 @@ static void ThumbElementDraw(
sb->borderColorObj, sb->lightColorObj, sb->darkColorObj);
XFillRectangle(
Tk_Display(tkwin), d, BackgroundGC(tkwin, sb->backgroundObj),
- b.x+2, b.y+2, b.width-4, b.height-4);
+ b.x+2, b.y+2, (unsigned)b.width-4, (unsigned)b.height-4);
/*
* Draw grip:
@@ -824,7 +824,7 @@ static void PbarElementDraw(
sb->borderColorObj, sb->lightColorObj, sb->darkColorObj);
XFillRectangle(Tk_Display(tkwin), d,
BackgroundGC(tkwin, sb->backgroundObj),
- b.x+2, b.y+2, b.width-4, b.height-4);
+ b.x+2, b.y+2, (unsigned)b.width-4, (unsigned)b.height-4);
}
}
@@ -847,7 +847,7 @@ static void ArrowElementSize(
ScrollbarElement *sb = (ScrollbarElement *)elementRecord;
ArrowDirection direction = (ArrowDirection)PTR2INT(clientData);
double scalingLevel = TkScalingLevel(tkwin);
- Ttk_Padding padding = Ttk_UniformPadding(round(3 * scalingLevel));
+ Ttk_Padding padding = Ttk_UniformPadding((short)round(3 * scalingLevel));
int size = SCROLLBAR_THICKNESS;
Tk_GetPixelsFromObj(NULL, tkwin, sb->arrowSizeObj, &size);
@@ -870,7 +870,7 @@ static void ArrowElementDraw(
ScrollbarElement *sb = (ScrollbarElement *)elementRecord;
ArrowDirection direction = (ArrowDirection)PTR2INT(clientData);
double scalingLevel = TkScalingLevel(tkwin);
- Ttk_Padding padding = Ttk_UniformPadding(round(3 * scalingLevel));
+ Ttk_Padding padding = Ttk_UniformPadding((short)round(3 * scalingLevel));
int cx, cy;
GC gc = Ttk_GCForColor(tkwin, sb->arrowColorObj, d);
@@ -879,7 +879,7 @@ static void ArrowElementDraw(
XFillRectangle(
Tk_Display(tkwin), d, BackgroundGC(tkwin, sb->backgroundObj),
- b.x+2, b.y+2, b.width-4, b.height-4);
+ b.x+2, b.y+2, (unsigned)b.width-4, (unsigned)b.height-4);
b = Ttk_PadBox(b, padding);
@@ -925,7 +925,7 @@ static void SpinboxArrowElementSize(
ScrollbarElement *sb = (ScrollbarElement *)elementRecord;
ArrowDirection direction = (ArrowDirection)PTR2INT(clientData);
double scalingLevel = TkScalingLevel(tkwin);
- Ttk_Padding padding = Ttk_UniformPadding(round(3 * scalingLevel));
+ Ttk_Padding padding = Ttk_UniformPadding((short)round(3 * scalingLevel));
int size = 10;
Tk_GetPixelsFromObj(NULL, tkwin, sb->arrowSizeObj, &size);
diff --git a/generic/ttk/ttkClassicTheme.c b/generic/ttk/ttkClassicTheme.c
index e4dffff..c178ccb 100644
--- a/generic/ttk/ttkClassicTheme.c
+++ b/generic/ttk/ttkClassicTheme.c
@@ -67,7 +67,7 @@ static void HighlightElementDraw(
GC gc = Tk_GCForColor(highlightColor, d);
if (defaultState == TTK_BUTTON_DEFAULT_NORMAL) {
TkDrawInsetFocusHighlight(tkwin, gc, highlightThickness, d,
- round(5 * TkScalingLevel(tkwin)));
+ (int)round(5 * TkScalingLevel(tkwin)));
} else {
Tk_DrawFocusHighlight(tkwin, gc, highlightThickness, d);
}
@@ -129,7 +129,7 @@ static void ButtonBorderElementSize(
Ttk_GetButtonDefaultStateFromObj(NULL, bd->defaultStateObj, &defaultState);
if (defaultState != TTK_BUTTON_DEFAULT_DISABLED) {
- borderWidth += round(5 * TkScalingLevel(tkwin));
+ borderWidth += (int)round(5 * TkScalingLevel(tkwin));
}
*paddingPtr = Ttk_UniformPadding((short)borderWidth);
}
@@ -169,7 +169,7 @@ static void ButtonBorderElementDraw(
case TTK_BUTTON_DEFAULT_DISABLED :
break;
case TTK_BUTTON_DEFAULT_NORMAL :
- inset += round(5 * TkScalingLevel(tkwin));
+ inset += (int)round(5 * TkScalingLevel(tkwin));
break;
case TTK_BUTTON_DEFAULT_ACTIVE :
Tk_Draw3DRectangle(tkwin, d, border,
@@ -342,14 +342,14 @@ static void DiamondIndicatorElementDraw(
diameter = b.width < b.height ? b.width : b.height;
radius = diameter / 2;
- points[0].x = b.x;
- points[0].y = b.y + radius;
- points[1].x = b.x + radius;
- points[1].y = b.y + 2*radius;
- points[2].x = b.x + 2*radius;
- points[2].y = b.y + radius;
- points[3].x = b.x + radius;
- points[3].y = b.y;
+ points[0].x = (short)b.x;
+ points[0].y = (short)(b.y + radius);
+ points[1].x = (short)(b.x + radius);
+ points[1].y = (short)(b.y + 2*radius);
+ points[2].x = (short)(b.x + 2*radius);
+ points[2].y = (short)(b.y + radius);
+ points[3].x = (short)(b.x + radius);
+ points[3].y = (short)b.y;
Tk_Fill3DPolygon(tkwin,d,interior,points,4,borderWidth,TK_RELIEF_FLAT);
Tk_Draw3DPolygon(tkwin,d,border,points,4,borderWidth,relief);
@@ -518,24 +518,24 @@ static void ArrowElementDraw(
switch (direction)
{
case ARROW_UP:
- points[2].x = b.x; points[2].y = b.y + size;
- points[1].x = b.x + size/2; points[1].y = b.y;
- points[0].x = b.x + size; points[0].y = b.y + size;
+ points[2].x = (short)b.x; points[2].y = (short)(b.y + size);
+ points[1].x = (short)(b.x + size/2); points[1].y = (short)b.y;
+ points[0].x = (short)(b.x + size); points[0].y = (short)(b.y + size);
break;
case ARROW_DOWN:
- points[0].x = b.x; points[0].y = b.y;
- points[1].x = b.x + size/2; points[1].y = b.y + size;
- points[2].x = b.x + size; points[2].y = b.y;
+ points[0].x = (short)b.x; points[0].y = (short)b.y;
+ points[1].x = (short)(b.x + size/2); points[1].y = (short)(b.y + size);
+ points[2].x = (short)(b.x + size); points[2].y = (short)b.y;
break;
case ARROW_LEFT:
- points[0].x = b.x; points[0].y = b.y + size / 2;
- points[1].x = b.x + size; points[1].y = b.y + size;
- points[2].x = b.x + size; points[2].y = b.y;
+ points[0].x = (short)b.x; points[0].y = (short)(b.y + size / 2);
+ points[1].x = (short)(b.x + size); points[1].y = (short)(b.y + size);
+ points[2].x = (short)(b.x + size); points[2].y = (short)b.y;
break;
case ARROW_RIGHT:
- points[0].x = b.x + size; points[0].y = b.y + size / 2;
- points[1].x = b.x; points[1].y = b.y;
- points[2].x = b.x; points[2].y = b.y + size;
+ points[0].x = (short)(b.x + size); points[0].y = (short)(b.y + size / 2);
+ points[1].x = (short)b.x; points[1].y = (short)b.y;
+ points[2].x = (short)b.x; points[2].y = (short)(b.y + size);
break;
}
@@ -718,13 +718,15 @@ static void SashElementSize(
Tk_GetPixelsFromObj(NULL, tkwin, sash->handleSizeObj, &handleSize);
Tk_GetPixelsFromObj(NULL, tkwin, sash->sashPadObj, &sashPad);
- if (sashThickness < handleSize + 2*sashPad)
+ if (sashThickness < handleSize + 2*sashPad) {
sashThickness = handleSize + 2*sashPad;
+ }
- if (orient == TTK_ORIENT_HORIZONTAL)
+ if (orient == TTK_ORIENT_HORIZONTAL) {
*heightPtr = sashThickness;
- else
+ } else {
*widthPtr = sashThickness;
+ }
}
static void SashElementDraw(
diff --git a/generic/ttk/ttkDecls.h b/generic/ttk/ttkDecls.h
index 9c40904..83a2bca 100644
--- a/generic/ttk/ttkDecls.h
+++ b/generic/ttk/ttkDecls.h
@@ -54,7 +54,8 @@ TTKAPI void Ttk_RegisterCleanup(Tcl_Interp *interp,
void *deleteData,
Ttk_CleanupProc *cleanupProc);
/* 5 */
-TTKAPI int Ttk_RegisterElementSpec(Ttk_Theme theme,
+TTK_DEPRECATED("Use Ttk_RegisterElement")
+int Ttk_RegisterElementSpec(Ttk_Theme theme,
const char *elementName,
const Ttk_ElementSpec *elementSpec,
void *clientData);
@@ -153,7 +154,7 @@ typedef struct TtkStubs {
Ttk_Theme (*ttk_GetCurrentTheme) (Tcl_Interp *interp); /* 2 */
Ttk_Theme (*ttk_CreateTheme) (Tcl_Interp *interp, const char *name, Ttk_Theme parent); /* 3 */
void (*ttk_RegisterCleanup) (Tcl_Interp *interp, void *deleteData, Ttk_CleanupProc *cleanupProc); /* 4 */
- int (*ttk_RegisterElementSpec) (Ttk_Theme theme, const char *elementName, const Ttk_ElementSpec *elementSpec, void *clientData); /* 5 */
+ TCL_DEPRECATED_API("Use Ttk_RegisterElement") int (*ttk_RegisterElementSpec) (Ttk_Theme theme, const char *elementName, const Ttk_ElementSpec *elementSpec, void *clientData); /* 5 */
Ttk_ElementClass * (*ttk_RegisterElement) (Tcl_Interp *interp, Ttk_Theme theme, const char *elementName, const Ttk_ElementSpec *elementSpec, void *clientData); /* 6 */
int (*ttk_RegisterElementFactory) (Tcl_Interp *interp, const char *name, Ttk_ElementFactory factoryProc, void *clientData); /* 7 */
void (*ttk_RegisterLayout) (Ttk_Theme theme, const char *className, Ttk_LayoutSpec layoutSpec); /* 8 */
@@ -280,4 +281,8 @@ extern const TtkStubs *ttkStubsPtr;
/* !END!: Do not edit above this line. */
+#ifdef TK_NO_DEPRECATED
+# undef Ttk_RegisterElementSpec
+#endif
+
#endif /* _TTKDECLS */
diff --git a/generic/ttk/ttkDefaultTheme.c b/generic/ttk/ttkDefaultTheme.c
index f1c37a6..9f3c282 100644
--- a/generic/ttk/ttkDefaultTheme.c
+++ b/generic/ttk/ttkDefaultTheme.c
@@ -59,24 +59,31 @@ static const enum BorderColor thinShadowColors[6][4] = {
static void DrawCorner(
Tk_Window tkwin,
Drawable d,
- Tk_3DBorder border, /* get most GCs from here... */
- GC borderGC, /* "window border" color GC */
- int x,int y, int width,int height, /* where to draw */
- int corner, /* 0 => top left; 1 => bottom right */
+ Tk_3DBorder border, /* get most GCs from here... */
+ GC borderGC, /* "window border" color GC */
+ int x, int y, int width, int height, /* where to draw */
+ bool corner, /* false => top left; true => bottom right */
enum BorderColor color)
{
XPoint points[3];
GC gc;
--width; --height;
- points[0].x = x; points[0].y = y+height;
- points[1].x = x+width*corner; points[1].y = y+height*corner;
- points[2].x = x+width; points[2].y = y;
+ points[0].x = x; points[0].y = y+height;
+ points[1].x = corner ? x + width : x; points[1].y = corner ? y + height : y;
+ points[2].x = x+width; points[2].y = y;
- if (color == BRDR)
+ if (corner) {
+ points[2].y -= WIN32_XDRAWLINE_HACK;
+ } else {
+ points[2].x += WIN32_XDRAWLINE_HACK;
+ }
+
+ if (color == BRDR) {
gc = borderGC;
- else
+ } else {
gc = Tk_3DBorderGC(tkwin, border, (int)color);
+ }
XDrawLines(Tk_Display(tkwin), d, gc, points, 3, CoordModeOrigin);
}
@@ -90,19 +97,19 @@ static void DrawBorder(
switch (borderWidth) {
case 2: /* "thick" border */
DrawCorner(tkwin, d, border, borderGC,
- b.x, b.y, b.width, b.height, 0,shadowColors[relief][0]);
+ b.x, b.y, b.width, b.height, false, shadowColors[relief][0]);
DrawCorner(tkwin, d, border, borderGC,
- b.x+1, b.y+1, b.width-2, b.height-2, 0,shadowColors[relief][1]);
+ b.x+1, b.y+1, b.width-2, b.height-2, false, shadowColors[relief][1]);
DrawCorner(tkwin, d, border, borderGC,
- b.x+1, b.y+1, b.width-2, b.height-2, 1,shadowColors[relief][2]);
+ b.x+1, b.y+1, b.width-2, b.height-2, true, shadowColors[relief][2]);
DrawCorner(tkwin, d, border, borderGC,
- b.x, b.y, b.width, b.height, 1,shadowColors[relief][3]);
+ b.x, b.y, b.width, b.height, true, shadowColors[relief][3]);
break;
case 1: /* "thin" border */
DrawCorner(tkwin, d, border, borderGC,
- b.x, b.y, b.width, b.height, 0, thinShadowColors[relief][0]);
+ b.x, b.y, b.width, b.height, false, thinShadowColors[relief][0]);
DrawCorner(tkwin, d, border, borderGC,
- b.x, b.y, b.width, b.height, 1, thinShadowColors[relief][1]);
+ b.x, b.y, b.width, b.height, true, thinShadowColors[relief][1]);
break;
case 0: /* no border -- do nothing */
break;
@@ -122,13 +129,13 @@ static void DrawFieldBorder(
{
GC borderGC = Tk_GCForColor(borderColor, d);
DrawCorner(tkwin, d, border, borderGC,
- b.x, b.y, b.width, b.height, 0, DARK);
+ b.x, b.y, b.width, b.height, false, DARK);
DrawCorner(tkwin, d, border, borderGC,
- b.x+1, b.y+1, b.width-2, b.height-2, 0, BRDR);
+ b.x+1, b.y+1, b.width-2, b.height-2, false, BRDR);
DrawCorner(tkwin, d, border, borderGC,
- b.x+1, b.y+1, b.width-2, b.height-2, 1, LITE);
+ b.x+1, b.y+1, b.width-2, b.height-2, true, LITE);
DrawCorner(tkwin, d, border, borderGC,
- b.x, b.y, b.width, b.height, 1, FLAT);
+ b.x, b.y, b.width, b.height, true, FLAT);
return;
}
@@ -372,10 +379,11 @@ static void FieldElementDraw(
XColor *focusColor = Tk_GetColorFromObj(tkwin, field->focusColorObj);
GC focusGC = Tk_GCForColor(focusColor, d);
- if (focusWidth > 1) {
+ if (focusWidth > 1 && b.width >= 2 && b.height >= 2) {
int x1 = b.x, x2 = b.x + b.width - 1;
int y1 = b.y, y2 = b.y + b.height - 1;
int w = WIN32_XDRAWLINE_HACK;
+ GC bgGC = Tk_3DBorderGC(tkwin, border, TK_3D_FLAT_GC);
/*
* Draw the outer rounded rectangle
@@ -394,7 +402,6 @@ static void FieldElementDraw(
/*
* Fill the inner rectangle
*/
- GC bgGC = Tk_3DBorderGC(tkwin, border, TK_3D_FLAT_GC);
XFillRectangle(disp, d, bgGC, b.x+1, b.y+1, b.width-2, b.height-2);
} else {
/*
@@ -1091,8 +1098,9 @@ static void ThumbElementDraw(
/*
* Don't draw the thumb if we are disabled.
* This makes it behave like Windows ... if that's what we want.
- if (state & TTK_STATE_DISABLED)
+ if (state & TTK_STATE_DISABLED) {
return;
+ }
*/
Tk_GetReliefFromObj(NULL, thumb->reliefObj, &relief);
diff --git a/generic/ttk/ttkElements.c b/generic/ttk/ttkElements.c
index e8ff680..304f8ff 100644
--- a/generic/ttk/ttkElements.c
+++ b/generic/ttk/ttkElements.c
@@ -19,6 +19,69 @@
#define DEFAULT_ARROW_SIZE "15"
#define MIN_THUMB_SIZE 10
+/*
+ *----------------------------------------------------------------------
+ *
+ * Helper routine for drawing a few style elements:
+ *
+ * The following function is needed when drawing the trough element
+ * (which is used in scrollbars, scales, and progressbars) and the
+ * arrow and thumb elements of a scrollbar. It draws the light or dark
+ * border color along the entire bottom and right edges, contrary to
+ * the Tk_Fill3DRectangle function, which on the windowing systems x11
+ * and aqua draws the light or dark border color along the entire top
+ * and left edges instead.
+ *
+ * An alternative approach would be to modify the function
+ * Tk_3DHorizontalBevel in the file unix/tkUnix3d.c. That function is
+ * called in Tk_Draw3DRectangle, which in turn is invoked in
+ * Tk_Fill3DRectangle (both functions are implemented in the file
+ * generic/tk3d.c). With that approach there would be no need for the
+ * Fill3DRectangle function below, but it would result in some (minor)
+ * changes related to the appearance of most Tk and Ttk widgets on x11
+ * and aqua.
+ */
+
+#if defined(_WIN32)
+#define Fill3DRectangle Tk_Fill3DRectangle
+#else
+static void Fill3DRectangle(
+ Tk_Window tkwin, /* Window for which border was allocated. */
+ Drawable drawable, /* X window or pixmap in which to draw. */
+ Tk_3DBorder border, /* Token for border to draw. */
+ int x, int y, /* Upper-left corner of the rectangle. */
+ int width, int height, /* The width and height of the rectangle. */
+ int borderWidth, /* Desired width for border, in pixels. Border
+ * will be *inside* region. */
+ int relief) /* Indicates 3D effect: TK_RELIEF_FLAT,
+ * TK_RELIEF_RAISED, TK_RELIEF_SUNKEN, etc. */
+{
+ if (borderWidth == 1 && width >= 2 && height >= 2 &&
+ (relief == TK_RELIEF_RAISED || relief == TK_RELIEF_SUNKEN)) {
+ GC flatGC = Tk_3DBorderGC(tkwin, border, TK_3D_FLAT_GC);
+ GC lightGC = Tk_3DBorderGC(tkwin, border, TK_3D_LIGHT_GC);
+ GC darkGC = Tk_3DBorderGC(tkwin, border, TK_3D_DARK_GC);
+ GC nGC, wGC, sGC, eGC;
+ int x1 = x, x2 = x + width - 1;
+ int y1 = y, y2 = y + height - 1;
+
+ XFillRectangle(Tk_Display(tkwin), drawable, flatGC,
+ x + 1, y + 1, width - 2, height - 2);
+
+ nGC = wGC = (relief == TK_RELIEF_RAISED ? lightGC : darkGC);
+ sGC = eGC = (relief == TK_RELIEF_RAISED ? darkGC : lightGC);
+
+ XDrawLine(Tk_Display(tkwin), drawable, nGC, x1, y1, x2-1, y1); /* N */
+ XDrawLine(Tk_Display(tkwin), drawable, wGC, x1, y1, x1, y2-1); /* W */
+ XDrawLine(Tk_Display(tkwin), drawable, sGC, x1, y2, x2, y2); /* S */
+ XDrawLine(Tk_Display(tkwin), drawable, eGC, x2, y1, x2, y2); /* E */
+ } else {
+ Tk_Fill3DRectangle(tkwin, drawable, border, x, y, width, height,
+ borderWidth, relief);
+ }
+}
+#endif
+
/*----------------------------------------------------------------------
* +++ Null element. Does nothing; used as a stub.
* Null element methods, option table and element spec are public,
@@ -243,11 +306,11 @@ static void FieldElementDraw(
XColor *focusColor = Tk_GetColorFromObj(tkwin, field->focusColorObj);
GC focusGC = Tk_GCForColor(focusColor, d);
- if (focusWidth > 1) {
+ if (focusWidth > 1 && b.width >= 2 && b.height >= 2) {
int x1 = b.x, x2 = b.x + b.width - 1;
int y1 = b.y, y2 = b.y + b.height - 1;
int w = WIN32_XDRAWLINE_HACK;
- GC bgGC;
+ GC bgGC = Tk_3DBorderGC(tkwin, border, TK_3D_FLAT_GC);
/*
* Draw the outer rounded rectangle
@@ -266,7 +329,6 @@ static void FieldElementDraw(
/*
* Fill the inner rectangle
*/
- bgGC = Tk_3DBorderGC(tkwin, border, TK_3D_FLAT_GC);
XFillRectangle(disp, d, bgGC, b.x+1, b.y+1, b.width-2, b.height-2);
} else {
/*
@@ -384,15 +446,25 @@ static void DrawFocusRing(
gc = Tk_GetGC(tkwin, GCForeground, &gcValues);
if (solid) {
- XRectangle rects[4] = {
- {(short)b.x, (short)b.y, (unsigned short)b.width, (unsigned short)thickness}, /* N */
- {(short)b.x, (short)(b.y + b.height - thickness), (unsigned short)b.width, (unsigned short)thickness}, /* S */
- {(short)b.x, (short)(b.y + thickness), (unsigned short)thickness, (unsigned short)(b.height - 2*thickness)}, /* W */
- {(short)(b.x + b.width - thickness), (short)(b.y + thickness), /* E */
- (unsigned short)thickness, (unsigned short)(b.height - 2*thickness)}
- };
-
- XFillRectangles(disp, d, gc, rects, 4);
+ if (b.width >= 2*thickness && b.height >= 2*thickness) {
+ XRectangle rects[4] = {
+ {(short)b.x, (short)b.y,
+ (unsigned short)b.width, (unsigned short)thickness}, /* N */
+
+ {(short)b.x, (short)(b.y + b.height - thickness),
+ (unsigned short)b.width, (unsigned short)thickness}, /* S */
+
+ {(short)b.x, (short)(b.y + thickness),
+ (unsigned short)thickness,
+ (unsigned short)(b.height - 2*thickness)}, /* W */
+
+ {(short)(b.x + b.width - thickness), (short)(b.y + thickness),
+ (unsigned short)thickness,
+ (unsigned short)(b.height - 2*thickness)} /* E */
+ };
+
+ XFillRectangles(disp, d, gc, rects, 4);
+ }
} else {
TkDrawDottedRect(disp, d, gc, b.x, b.y, b.width, b.height);
}
@@ -609,6 +681,7 @@ static void SizegripDraw(
GC lightGC = Tk_3DBorderGC(tkwin, border, TK_3D_LIGHT_GC);
GC darkGC = Tk_3DBorderGC(tkwin, border, TK_3D_DARK_GC);
int x1 = b.x + b.width-1, y1 = b.y + b.height-1, x2 = x1, y2 = y1;
+ int w = WIN32_XDRAWLINE_HACK;
Tk_GetPixelsFromObj(NULL, tkwin, grip->gripSizeObj, &gripSize);
gripThickness = gripSize * 3 / (gripCount * 5);
@@ -616,9 +689,11 @@ static void SizegripDraw(
while (gripCount--) {
x1 -= gripSpace; y2 -= gripSpace;
for (int i = 1; i < gripThickness; i++) {
- XDrawLine(Tk_Display(tkwin), d, darkGC, x1,y1, x2,y2); --x1; --y2;
+ XDrawLine(Tk_Display(tkwin), d, darkGC,
+ x1, y1, x2+w, y2-w); --x1; --y2;
}
- XDrawLine(Tk_Display(tkwin), d, lightGC, x1,y1, x2,y2); --x1; --y2;
+ XDrawLine(Tk_Display(tkwin), d, lightGC,
+ x1, y1, x2+w, y2-w); --x1; --y2;
}
}
@@ -976,7 +1051,7 @@ static void ArrowElementDraw(
Tk_GetPixelsFromObj(NULL, tkwin, arrow->borderWidthObj, &borderWidth);
Tk_GetReliefFromObj(NULL, arrow->reliefObj, &relief);
- Tk_Fill3DRectangle(tkwin, d, border, b.x, b.y, b.width, b.height,
+ Fill3DRectangle(tkwin, d, border, b.x, b.y, b.width, b.height,
borderWidth, relief);
padding.left = round(ArrowPadding.left * scalingLevel);
@@ -1257,7 +1332,7 @@ static void TroughElementDraw(
}
}
- Tk_Fill3DRectangle(tkwin, d, border, b.x, b.y, b.width, b.height,
+ Fill3DRectangle(tkwin, d, border, b.x, b.y, b.width, b.height,
borderWidth, relief);
}
@@ -1332,7 +1407,7 @@ static void ThumbElementDraw(
Tk_GetPixelsFromObj(NULL, tkwin, thumb->borderWidthObj, &borderWidth);
Tk_GetReliefFromObj(NULL, thumb->reliefObj, &relief);
- Tk_Fill3DRectangle(tkwin, d, border, b.x, b.y, b.width, b.height,
+ Fill3DRectangle(tkwin, d, border, b.x, b.y, b.width, b.height,
borderWidth, relief);
}
@@ -1818,20 +1893,30 @@ static void TabElementDraw(
switch (nbTabsStickBit) {
default:
case TTK_STICK_S:
- XFillRectangle(disp, d, Tk_GCForColor(hlColor, d),
- b.x + cut, b.y, b.width - 2*cut, cut);
+ if (b.width >= 2*cut) {
+ XFillRectangle(disp, d, Tk_GCForColor(hlColor, d),
+ b.x + cut, b.y, b.width - 2*cut, cut);
+ }
break;
case TTK_STICK_N:
- XFillRectangle(disp, d, Tk_GCForColor(hlColor, d),
- b.x + cut, b.y + b.height - cut, b.width - 2*cut, cut);
+ if (b.width >= 2*cut) {
+ XFillRectangle(disp, d, Tk_GCForColor(hlColor, d),
+ b.x + cut, b.y + b.height - cut,
+ b.width - 2*cut, cut);
+ }
break;
case TTK_STICK_E:
- XFillRectangle(disp, d, Tk_GCForColor(hlColor, d),
- b.x, b.y + cut, cut, b.height - 2*cut);
+ if (b.height >= 2*cut) {
+ XFillRectangle(disp, d, Tk_GCForColor(hlColor, d),
+ b.x, b.y + cut, cut, b.height - 2*cut);
+ }
break;
case TTK_STICK_W:
- XFillRectangle(disp, d, Tk_GCForColor(hlColor, d),
- b.x + b.width - cut, b.y + cut, cut, b.height - 2*cut);
+ if (b.height >= 2*cut) {
+ XFillRectangle(disp, d, Tk_GCForColor(hlColor, d),
+ b.x + b.width - cut, b.y + cut,
+ cut, b.height - 2*cut);
+ }
break;
}
}
diff --git a/generic/ttk/ttkEntry.c b/generic/ttk/ttkEntry.c
index cd10a12..578e9df 100644
--- a/generic/ttk/ttkEntry.c
+++ b/generic/ttk/ttkEntry.c
@@ -548,8 +548,9 @@ static int RunValidationScript(
Tcl_DStringValue(&script), Tcl_DStringLength(&script),
TCL_EVAL_GLOBAL);
Tcl_DStringFree(&script);
- if (WidgetDestroyed(&entryPtr->core))
+ if (WidgetDestroyed(&entryPtr->core)) {
return TCL_ERROR;
+ }
if (code != TCL_OK && code != TCL_RETURN) {
Tcl_AddErrorInfo(interp, "\n\t(in ");
@@ -606,8 +607,7 @@ EntryValidateChange(
if ((entryPtr->entry.validateCmdObj == NULL)
|| (entryPtr->core.flags & VALIDATING)
- || !EntryNeedsValidation(vmode, reason))
- {
+ || !EntryNeedsValidation(vmode, reason)) {
return TCL_OK;
}
@@ -726,8 +726,9 @@ static void AdjustIndices(Entry *entryPtr, int index, int nChars)
e->selectLast = AdjustIndex(e->selectLast, index+g, nChars);
e->xscroll.first= AdjustIndex(e->xscroll.first, index+g, nChars);
- if (e->selectLast <= e->selectFirst)
+ if (e->selectLast <= e->selectFirst) {
e->selectFirst = e->selectLast = TCL_INDEX_NONE;
+ }
}
/* EntryStoreValue --
@@ -742,18 +743,21 @@ EntryStoreValue(Entry *entryPtr, const char *value)
size_t numBytes = strlen(value);
Tcl_Size numChars = Tcl_NumUtfChars(value, numBytes);
- if (entryPtr->core.flags & VALIDATING)
+ if (entryPtr->core.flags & VALIDATING) {
entryPtr->core.flags |= VALIDATION_SET_VALUE;
+ }
/* Make sure all indices remain in bounds:
*/
- if (numChars < entryPtr->entry.numChars)
+ if (numChars < entryPtr->entry.numChars) {
AdjustIndices(entryPtr, numChars, numChars - entryPtr->entry.numChars);
+ }
/* Free old value:
*/
- if (entryPtr->entry.displayString != entryPtr->entry.string)
+ if (entryPtr->entry.displayString != entryPtr->entry.string) {
ckfree(entryPtr->entry.displayString);
+ }
ckfree(entryPtr->entry.string);
/* Store new value:
@@ -990,8 +994,9 @@ EntryCleanup(void *recordPtr)
{
Entry *entryPtr = (Entry *)recordPtr;
- if (entryPtr->entry.textVariableTrace)
+ if (entryPtr->entry.textVariableTrace) {
Ttk_UntraceVariable(entryPtr->entry.textVariableTrace);
+ }
TtkFreeScrollHandle(entryPtr->entry.xscrollHandle);
@@ -1000,8 +1005,9 @@ EntryCleanup(void *recordPtr)
Tk_DeleteSelHandler(entryPtr->core.tkwin, XA_PRIMARY, XA_STRING);
Tk_FreeTextLayout(entryPtr->entry.textLayout);
- if (entryPtr->entry.displayString != entryPtr->entry.string)
+ if (entryPtr->entry.displayString != entryPtr->entry.string) {
ckfree(entryPtr->entry.displayString);
+ }
ckfree(entryPtr->entry.string);
}
@@ -1030,8 +1036,9 @@ static int EntryConfigure(Tcl_Interp *interp, void *recordPtr, int mask)
/* Update derived resources:
*/
if (mask & TEXTVAR_CHANGED) {
- if (entryPtr->entry.textVariableTrace)
+ if (entryPtr->entry.textVariableTrace) {
Ttk_UntraceVariable(entryPtr->entry.textVariableTrace);
+ }
entryPtr->entry.textVariableTrace = vt;
}
@@ -1056,8 +1063,9 @@ static int EntryConfigure(Tcl_Interp *interp, void *recordPtr, int mask)
/* Recompute the displayString, in case showChar changed:
*/
- if (entryPtr->entry.displayString != entryPtr->entry.string)
+ if (entryPtr->entry.displayString != entryPtr->entry.string) {
ckfree(entryPtr->entry.displayString);
+ }
entryPtr->entry.displayString
= entryPtr->entry.showCharObj
@@ -1237,10 +1245,12 @@ static void EntryDisplay(void *clientData, Drawable d)
/* Adjust selection range to keep in display bounds.
*/
if (showSelection) {
- if (selFirst < leftIndex)
+ if (selFirst < leftIndex) {
selFirst = leftIndex;
- if (selLast > rightIndex)
+ }
+ if (selLast > rightIndex) {
selLast = rightIndex;
+ }
}
/* Draw widget background & border
@@ -1260,14 +1270,16 @@ static void EntryDisplay(void *clientData, Drawable d)
if (selBorder) {
int selWidth;
int textareaEnd = textarea.x + textarea.width;
- if (selEndX > textareaEnd)
+ if (selEndX > textareaEnd) {
selEndX = textareaEnd;
+ }
selWidth = selEndX - selStartX + 2 * borderWidth;
- if (selWidth > 0)
+ if (selWidth > 0) {
Tk_Fill3DRectangle(tkwin, d, selBorder,
selStartX - borderWidth, entryPtr->entry.layoutY - borderWidth,
selWidth, entryPtr->entry.layoutHeight + 2*borderWidth,
borderWidth, TK_RELIEF_RAISED);
+ }
}
}
@@ -1430,7 +1442,7 @@ EntryIndex(
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"selection isn't in widget %s",
Tk_PathName(entryPtr->core.tkwin)));
- Tcl_SetErrorCode(interp, "TTK", "ENTRY", "NO_SELECTION", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "ENTRY", "NO_SELECTION", (char *)NULL);
return TCL_ERROR;
}
if (strncmp(string, "sel.first", length) == 0) {
@@ -1478,7 +1490,7 @@ EntryIndex(
badIndex:
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"bad entry index \"%s\"", string));
- Tcl_SetErrorCode(interp, "TTK", "ENTRY", "INDEX", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "ENTRY", "INDEX", (char *)NULL);
return TCL_ERROR;
}
@@ -1725,8 +1737,9 @@ static int EntryValidateCommand(
code = EntryRevalidate(interp, entryPtr, VALIDATE_FORCED);
- if (code == TCL_ERROR)
+ if (code == TCL_ERROR) {
return code;
+ }
Tcl_SetObjResult(interp, Tcl_NewBooleanObj(code == TCL_OK));
return TCL_OK;
@@ -1841,8 +1854,9 @@ ComboboxConfigure(Tcl_Interp *interp, void *recordPtr, int mask)
/* Make sure -values is a valid list:
*/
- if (Tcl_ListObjLength(interp,cbPtr->combobox.valuesObj,&unused) != TCL_OK)
+ if (Tcl_ListObjLength(interp,cbPtr->combobox.valuesObj,&unused) != TCL_OK) {
return TCL_ERROR;
+ }
return EntryConfigure(interp, recordPtr, mask);
}
@@ -1894,14 +1908,14 @@ static int ComboboxCurrentCommand(
if (idx < 0 || idx >= nValues) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"index \"%s\" out of range", Tcl_GetString(objv[2])));
- Tcl_SetErrorCode(interp, "TTK", "COMBOBOX", "IDX_RANGE", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "COMBOBOX", "IDX_RANGE", (char *)NULL);
return TCL_ERROR;
}
currentIndex = idx;
} else {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"bad index \"%s\"", Tcl_GetString(objv[2])));
- Tcl_SetErrorCode(interp, "TTK", "COMBOBOX", "IDX_VALUE", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "COMBOBOX", "IDX_VALUE", (char *)NULL);
return TCL_ERROR;
}
@@ -2026,8 +2040,9 @@ SpinboxConfigure(Tcl_Interp *interp, void *recordPtr, int mask)
/* Make sure -values is a valid list:
*/
- if (Tcl_ListObjLength(interp,sb->spinbox.valuesObj,&unused) != TCL_OK)
+ if (Tcl_ListObjLength(interp,sb->spinbox.valuesObj,&unused) != TCL_OK) {
return TCL_ERROR;
+ }
return EntryConfigure(interp, recordPtr, mask);
}
@@ -2103,8 +2118,9 @@ static void TextareaElementSize(
Tk_GetFontMetrics(font, &fm);
Tcl_GetIntFromObj(NULL, textarea->widthObj, &prefWidth);
- if (prefWidth <= 0)
+ if (prefWidth <= 0) {
prefWidth = 1;
+ }
*heightPtr = fm.linespace;
*widthPtr = prefWidth * avgWidth;
diff --git a/generic/ttk/ttkFrame.c b/generic/ttk/ttkFrame.c
index b4c6e35..a1a37b2 100644
--- a/generic/ttk/ttkFrame.c
+++ b/generic/ttk/ttkFrame.c
@@ -211,7 +211,7 @@ error:
if (interp) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"Bad label anchor specification %s", Tcl_GetString(objPtr)));
- Tcl_SetErrorCode(interp, "TTK", "LABEL", "ANCHOR", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "LABEL", "ANCHOR", (char *)NULL);
}
return TCL_ERROR;
}
@@ -303,10 +303,10 @@ static void LabelframeStyleOptions(Labelframe *lf, LabelframeStyle *style)
} else {
if (style->labelAnchor & (TTK_PACK_TOP|TTK_PACK_BOTTOM)) {
style->labelMargins =
- Ttk_MakePadding(DEFAULT_LABELINSET,0,DEFAULT_LABELINSET,0);
+ Ttk_MakePadding(DEFAULT_LABELINSET, 0, DEFAULT_LABELINSET, 0);
} else {
style->labelMargins =
- Ttk_MakePadding(0,DEFAULT_LABELINSET,0,DEFAULT_LABELINSET);
+ Ttk_MakePadding(0, DEFAULT_LABELINSET, 0, DEFAULT_LABELINSET);
}
}
if ((objPtr = Ttk_QueryOption(layout,"-labeloutside", 0)) != NULL) {
@@ -366,10 +366,10 @@ static int LabelframeSize(
labelHeight += Ttk_PaddingHeight(style.labelMargins);
switch (LabelAnchorSide(style.labelAnchor)) {
- case TTK_SIDE_LEFT: margins.left += labelWidth; break;
- case TTK_SIDE_RIGHT: margins.right += labelWidth; break;
- case TTK_SIDE_TOP: margins.top += labelHeight; break;
- case TTK_SIDE_BOTTOM: margins.bottom += labelHeight; break;
+ case TTK_SIDE_LEFT: margins.left += (short)labelWidth; break;
+ case TTK_SIDE_RIGHT: margins.right += (short)labelWidth; break;
+ case TTK_SIDE_TOP: margins.top += (short)labelHeight; break;
+ case TTK_SIDE_BOTTOM: margins.bottom += (short)labelHeight; break;
}
Ttk_SetMargins(corePtr->tkwin,margins);
diff --git a/generic/ttk/ttkImage.c b/generic/ttk/ttkImage.c
index d46b420..357caab 100644
--- a/generic/ttk/ttkImage.c
+++ b/generic/ttk/ttkImage.c
@@ -100,7 +100,7 @@ TtkGetImageSpecEx(Tcl_Interp *interp, Tk_Window tkwin, Tcl_Obj *objPtr,
Tcl_SetObjResult(interp, Tcl_NewStringObj(
"image specification must contain an odd number of elements",
-1));
- Tcl_SetErrorCode(interp, "TTK", "IMAGE", "SPEC", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "IMAGE", "SPEC", (char *)NULL);
}
goto error;
}
@@ -222,8 +222,9 @@ static void Ttk_Fill(
int db = dst.y + dst.height;
int x,y;
- if (!(src.width && src.height && dst.width && dst.height))
+ if (!(src.width && src.height && dst.width && dst.height)) {
return;
+ }
for (x = dst.x; x < dr; x += src.width) {
int cw = MIN(src.width, dr - x);
@@ -380,7 +381,7 @@ Ttk_CreateImageElement(
if (objc + 1 < 2) {
Tcl_SetObjResult(interp, Tcl_NewStringObj(
"Must supply a base image", -1));
- Tcl_SetErrorCode(interp, "TTK", "IMAGE", "BASE", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "IMAGE", "BASE", (char *)NULL);
return TCL_ERROR;
}
@@ -405,7 +406,7 @@ Ttk_CreateImageElement(
if (i == objc - 1) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"Value for %s missing", Tcl_GetString(objv[i])));
- Tcl_SetErrorCode(interp, "TTK", "IMAGE", "VALUE", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "IMAGE", "VALUE", (char *)NULL);
goto error;
}
diff --git a/generic/ttk/ttkInit.c b/generic/ttk/ttkInit.c
index 38bbbaa..96c2766 100644
--- a/generic/ttk/ttkInit.c
+++ b/generic/ttk/ttkInit.c
@@ -201,6 +201,7 @@ MODULE_SCOPE void TtkProgressbar_Init(Tcl_Interp *);
MODULE_SCOPE void TtkScale_Init(Tcl_Interp *);
MODULE_SCOPE void TtkScrollbar_Init(Tcl_Interp *);
MODULE_SCOPE void TtkSeparator_Init(Tcl_Interp *);
+MODULE_SCOPE void TtkToggleswitch_Init(Tcl_Interp *);
MODULE_SCOPE void TtkTreeview_Init(Tcl_Interp *);
#ifdef TTK_SQUARE_WIDGET
@@ -218,6 +219,7 @@ static void RegisterWidgets(Tcl_Interp *interp)
TtkScale_Init(interp);
TtkScrollbar_Init(interp);
TtkSeparator_Init(interp);
+ TtkToggleswitch_Init(interp);
TtkTreeview_Init(interp);
#ifdef TTK_SQUARE_WIDGET
TtkSquareWidget_Init(interp);
diff --git a/generic/ttk/ttkLabel.c b/generic/ttk/ttkLabel.c
index a59f1fe..85629bf 100644
--- a/generic/ttk/ttkLabel.c
+++ b/generic/ttk/ttkLabel.c
@@ -104,8 +104,9 @@ static int TextReqWidth(TextElement *text)
int avgWidth = Tk_TextWidth(text->tkfont, "0", 1);
if (reqWidth <= 0) {
int specWidth = avgWidth * -reqWidth;
- if (specWidth > text->width)
+ if (specWidth > text->width) {
return specWidth;
+ }
} else {
return avgWidth * reqWidth;
}
@@ -209,8 +210,9 @@ static void TextElementSize(
{
TextElement *text = (TextElement *)elementRecord;
- if (!TextSetup(text, tkwin))
+ if (!TextSetup(text, tkwin)) {
return;
+ }
*heightPtr = text->height;
*widthPtr = TextReqWidth(text);
@@ -270,8 +272,9 @@ static void cTextElementSize(
{
TextElement *text = (TextElement *)elementRecord;
- if (!cTextSetup(text, tkwin))
+ if (!cTextSetup(text, tkwin)) {
return;
+ }
*heightPtr = text->height;
*widthPtr = TextReqWidth(text);
@@ -580,8 +583,9 @@ static void LabelSetup(
c->compound = TTK_COMPOUND_TEXT;
}
}
- if (c->compound != TTK_COMPOUND_IMAGE)
+ if (c->compound != TTK_COMPOUND_IMAGE) {
TextSetup(&c->text, tkwin);
+ }
/*
* ASSERT:
@@ -623,10 +627,12 @@ static void LabelSetup(
static void LabelCleanup(LabelElement *c)
{
- if (c->compound != TTK_COMPOUND_TEXT)
+ if (c->compound != TTK_COMPOUND_TEXT) {
ImageCleanup(&c->image);
- if (c->compound != TTK_COMPOUND_IMAGE)
+ }
+ if (c->compound != TTK_COMPOUND_IMAGE) {
TextCleanup(&c->text);
+ }
}
static void LabelElementSize(
@@ -646,8 +652,9 @@ static void LabelElementSize(
/* Requested width based on -width option, not actual text width:
*/
- if (label->compound != TTK_COMPOUND_IMAGE)
+ if (label->compound != TTK_COMPOUND_IMAGE) {
textReqWidth = TextReqWidth(&label->text);
+ }
switch (label->compound)
{
diff --git a/generic/ttk/ttkLayout.c b/generic/ttk/ttkLayout.c
index 48cf615..b77db39 100644
--- a/generic/ttk/ttkLayout.c
+++ b/generic/ttk/ttkLayout.c
@@ -335,7 +335,7 @@ int Ttk_GetPaddingFromObj(
if (interp) {
Tcl_SetObjResult(interp, Tcl_NewStringObj(
"Wrong #elements in padding spec", -1));
- Tcl_SetErrorCode(interp, "TTK", "VALUE", "PADDING", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "VALUE", "PADDING", (char *)NULL);
}
goto error;
}
@@ -374,7 +374,7 @@ int Ttk_GetBorderFromObj(Tcl_Interp *interp, Tcl_Obj *objPtr, Ttk_Padding *pad)
if (interp) {
Tcl_SetObjResult(interp, Tcl_NewStringObj(
"Wrong #elements in padding spec", -1));
- Tcl_SetErrorCode(interp, "TTK", "VALUE", "BORDER", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "VALUE", "BORDER", (char *)NULL);
}
goto error;
}
@@ -489,7 +489,7 @@ int Ttk_GetStickyFromObj(
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"Bad -sticky specification %s",
Tcl_GetString(objPtr)));
- Tcl_SetErrorCode(interp, "TTK", "VALUE", "STICKY", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "VALUE", "STICKY", (char *)NULL);
}
return TCL_ERROR;
}
@@ -625,8 +625,9 @@ Ttk_LayoutTemplate Ttk_ParseLayoutTemplate(Tcl_Interp *interp, Tcl_Obj *objPtr)
Tcl_Obj **objv;
Ttk_TemplateNode *head = 0, *tail = 0;
- if (Tcl_ListObjGetElements(interp, objPtr, &objc, &objv) != TCL_OK)
+ if (Tcl_ListObjGetElements(interp, objPtr, &objc, &objv) != TCL_OK) {
return 0;
+ }
while (i < objc) {
const char *elementName = Tcl_GetString(objv[i]);
@@ -641,8 +642,9 @@ Ttk_LayoutTemplate Ttk_ParseLayoutTemplate(Tcl_Interp *interp, Tcl_Obj *objPtr)
const char *optName = Tcl_GetString(objv[i]);
int option, value;
- if (optName[0] != '-')
+ if (optName[0] != '-') {
break;
+ }
if (Tcl_GetIndexFromObjStruct(interp, objv[i], optStrings,
sizeof(char *), "option", 0, &option)
@@ -655,41 +657,47 @@ Ttk_LayoutTemplate Ttk_ParseLayoutTemplate(Tcl_Interp *interp, Tcl_Obj *objPtr)
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"Missing value for option %s",
Tcl_GetString(objv[i-1])));
- Tcl_SetErrorCode(interp, "TTK", "VALUE", "LAYOUT", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "VALUE", "LAYOUT", (char *)NULL);
goto error;
}
switch (option) {
case OP_SIDE: /* <<NOTE-PACKSIDE>> */
if (Tcl_GetIndexFromObjStruct(interp, objv[i], packSideStrings,
- sizeof(char *), "side", 0, &value) != TCL_OK)
- {
+ sizeof(char *), "side", 0, &value) != TCL_OK) {
goto error;
}
flags |= (TTK_PACK_LEFT << value);
break;
case OP_STICKY:
- if (Ttk_GetStickyFromObj(interp,objv[i],&sticky) != TCL_OK)
+ if (Ttk_GetStickyFromObj(interp,objv[i],&sticky) != TCL_OK) {
goto error;
+ }
break;
case OP_EXPAND:
- if (Tcl_GetBooleanFromObj(interp,objv[i],&value) != TCL_OK)
+ if (Tcl_GetBooleanFromObj(interp,objv[i],&value) != TCL_OK) {
goto error;
- if (value)
+ }
+ if (value) {
flags |= TTK_EXPAND;
+ }
break;
case OP_BORDER:
- if (Tcl_GetBooleanFromObj(interp,objv[i],&value) != TCL_OK)
+ if (Tcl_GetBooleanFromObj(interp,objv[i],&value) != TCL_OK) {
goto error;
- if (value)
+ }
+ if (value) {
flags |= TTK_BORDER;
+ }
break;
case OP_UNIT:
- if (Tcl_GetBooleanFromObj(interp,objv[i],&value) != TCL_OK)
+ if (Tcl_GetBooleanFromObj(interp,objv[i],&value) != TCL_OK) {
goto error;
- if (value)
+ }
+ if (value) {
flags |= TTK_UNIT;
+ }
break;
case OP_CHILDREN:
childSpec = objv[i];
@@ -711,7 +719,7 @@ Ttk_LayoutTemplate Ttk_ParseLayoutTemplate(Tcl_Interp *interp, Tcl_Obj *objPtr)
tail->child = Ttk_ParseLayoutTemplate(interp, childSpec);
if (!tail->child) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf("Invalid -children value"));
- Tcl_SetErrorCode(interp, "TTK", "VALUE", "CHILDREN", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "VALUE", "CHILDREN", (char *)NULL);
goto error;
}
}
@@ -890,7 +898,7 @@ Ttk_Layout Ttk_CreateLayout(
if (!layoutTemplate) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"Layout %s not found", styleName));
- Tcl_SetErrorCode(interp, "TTK", "LOOKUP", "LAYOUT", styleName, NULL);
+ Tcl_SetErrorCode(interp, "TTK", "LOOKUP", "LAYOUT", styleName, (char *)NULL);
return 0;
}
@@ -931,7 +939,7 @@ Ttk_CreateSublayout(
if (!layoutTemplate) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"Layout %s not found", styleName));
- Tcl_SetErrorCode(interp, "TTK", "LOOKUP", "LAYOUT", styleName, NULL);
+ Tcl_SetErrorCode(interp, "TTK", "LOOKUP", "LAYOUT", styleName, (char *)NULL);
return 0;
}
@@ -1121,19 +1129,22 @@ static void Ttk_DrawNodeList(
int border = node->flags & TTK_BORDER;
int substate = state;
- if (node->flags & TTK_UNIT)
+ if (node->flags & TTK_UNIT) {
substate |= node->state;
+ }
- if (node->child && border)
+ if (node->child && border) {
Ttk_DrawNodeList(layout, substate, node->child, d);
+ }
Ttk_DrawElement(
node->eclass,
layout->style,layout->recordPtr,layout->optionTable,layout->tkwin,
d, node->parcel, state | node->state);
- if (node->child && !border)
+ if (node->child && !border) {
Ttk_DrawNodeList(layout, substate, node->child, d);
+ }
}
}
@@ -1194,13 +1205,15 @@ static Ttk_Element
FindNode(Ttk_Element node, const char *nodeName)
{
for (; node ; node = node->next) {
- if (!strcmp(tail(Ttk_ElementName(node)), nodeName))
+ if (!strcmp(tail(Ttk_ElementName(node)), nodeName)) {
return node;
+ }
if (node->child) {
Ttk_Element childNode = FindNode(node->child, nodeName);
- if (childNode)
+ if (childNode) {
return childNode;
+ }
}
}
return 0;
diff --git a/generic/ttk/ttkManager.c b/generic/ttk/ttkManager.c
index 8ce7b3d..e660538 100644
--- a/generic/ttk/ttkManager.c
+++ b/generic/ttk/ttkManager.c
@@ -429,8 +429,9 @@ Tcl_Size Ttk_ContentIndex(Ttk_Manager *mgr, Tk_Window window)
{
Tcl_Size index;
for (index = 0; index < mgr->nContent; ++index)
- if (mgr->content[index]->window == window)
+ if (mgr->content[index]->window == window) {
return index;
+ }
return -1;
}
@@ -465,7 +466,7 @@ int Ttk_GetContentIndexFromObj(
if (index < 0 || (index - !!lastOK) >= mgr->nContent) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"Managed window index \"%s\" out of bounds", Tcl_GetString(objPtr)));
- Tcl_SetErrorCode(interp, "TTK", "MANAGED", "INDEX", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "MANAGED", "INDEX", (char *)NULL);
return TCL_ERROR;
}
*indexPtr = index;
@@ -481,7 +482,7 @@ int Ttk_GetContentIndexFromObj(
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"%s is not managed by %s", string,
Tk_PathName(mgr->window)));
- Tcl_SetErrorCode(interp, "TTK", "MANAGED", "MANAGER", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "MANAGED", "MANAGER", (char *)NULL);
return TCL_ERROR;
}
*indexPtr = index;
@@ -490,7 +491,7 @@ int Ttk_GetContentIndexFromObj(
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"Invalid managed window specification %s", string));
- Tcl_SetErrorCode(interp, "TTK", "MANAGED", "SPEC", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "MANAGED", "SPEC", (char *)NULL);
return TCL_ERROR;
}
@@ -551,7 +552,7 @@ int Ttk_Maintainable(Tcl_Interp *interp, Tk_Window window, Tk_Window container)
badWindow:
Tcl_SetObjResult(interp, Tcl_ObjPrintf("cannot add \"%s\" as content of \"%s\"",
Tk_PathName(window), Tk_PathName(container)));
- Tcl_SetErrorCode(interp, "TTK", "GEOMETRY", "MAINTAINABLE", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "GEOMETRY", "MAINTAINABLE", (char *)NULL);
return 0;
}
diff --git a/generic/ttk/ttkNotebook.c b/generic/ttk/ttkNotebook.c
index 6b730b9..649964a 100644
--- a/generic/ttk/ttkNotebook.c
+++ b/generic/ttk/ttkNotebook.c
@@ -227,21 +227,18 @@ static int ConfigureTab(
int mask = 0;
if (Tk_SetOptions(interp, tab, nb->notebook.paneOptionTable,
- objc, objv, window, &savedOptions, &mask) != TCL_OK)
- {
+ objc, objv, window, &savedOptions, &mask) != TCL_OK) {
return TCL_ERROR;
}
/* Check options:
* @@@ TODO: validate -image option.
*/
- if (Ttk_GetStickyFromObj(interp, tab->stickyObj, &sticky) != TCL_OK)
- {
+ if (Ttk_GetStickyFromObj(interp, tab->stickyObj, &sticky) != TCL_OK) {
goto error;
}
if (Ttk_GetPaddingFromObj(interp, window, tab->paddingObj, &padding)
- != TCL_OK)
- {
+ != TCL_OK) {
goto error;
}
@@ -268,9 +265,8 @@ static Tcl_Size IdentifyTab(Notebook *nb, int x, int y)
Tcl_Size index;
for (index = 0; index < Ttk_NumberContent(nb->notebook.mgr); ++index) {
Tab *tab = (Tab *)Ttk_ContentData(nb->notebook.mgr,index);
- if ( tab->state != TAB_STATE_HIDDEN
- && Ttk_BoxContains(tab->parcel, x,y))
- {
+ if (tab->state != TAB_STATE_HIDDEN
+ && Ttk_BoxContains(tab->parcel, x,y)) {
return index;
}
}
@@ -423,10 +419,12 @@ static int NotebookSize(void *clientData, int *widthPtr, int *heightPtr)
*/
Tk_GetPixelsFromObj(NULL, nbwin, nb->notebook.widthObj, &reqWidth);
Tk_GetPixelsFromObj(NULL, nbwin, nb->notebook.heightObj, &reqHeight);
- if (reqWidth > 0)
+ if (reqWidth > 0) {
clientWidth = reqWidth;
- if (reqHeight > 0)
+ }
+ if (reqHeight > 0) {
clientHeight = reqHeight;
+ }
/* Tab row:
*/
@@ -754,7 +752,7 @@ static int AddTab(
if (Ttk_ContentIndex(nb->notebook.mgr, window) >= 0) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf("%s already added",
Tk_PathName(window)));
- Tcl_SetErrorCode(interp, "TTK", "NOTEBOOK", "PRESENT", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "NOTEBOOK", "PRESENT", (char *)NULL);
return TCL_ERROR;
}
#endif
@@ -870,7 +868,7 @@ static int FindTabIndex(
if (*index_rtn == Ttk_NumberContent(nb->notebook.mgr)) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"Invalid tab specification %s", string));
- Tcl_SetErrorCode(interp, "TTK", "NOTEBOOK", "SPEC", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "NOTEBOOK", "SPEC", (char *)NULL);
return TCL_ERROR;
}
@@ -891,14 +889,14 @@ static int GetTabIndex(
if (status == TCL_OK && *index_rtn >= Ttk_NumberContent(nb->notebook.mgr)) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"Tab index \"%s\" out of bounds", Tcl_GetString(objPtr)));
- Tcl_SetErrorCode(interp, "TTK", "NOTEBOOK", "INDEX", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "NOTEBOOK", "INDEX", (char *)NULL);
return TCL_ERROR;
}
if (status == TCL_OK && *index_rtn < 0) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"Tab '%s' not found", Tcl_GetString(objPtr)));
- Tcl_SetErrorCode(interp, "TTK", "NOTEBOOK", "TAB", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "NOTEBOOK", "TAB", (char *)NULL);
status = TCL_ERROR;
}
return status;
@@ -1309,8 +1307,9 @@ static void NotebookCleanup(void *recordPtr)
Notebook *nb = (Notebook *)recordPtr;
Ttk_DeleteManager(nb->notebook.mgr);
- if (nb->notebook.tabLayout)
+ if (nb->notebook.tabLayout) {
Ttk_FreeLayout(nb->notebook.tabLayout);
+ }
}
static int NotebookConfigure(Tcl_Interp *interp, void *clientData, int mask)
diff --git a/generic/ttk/ttkPanedwindow.c b/generic/ttk/ttkPanedwindow.c
index 15f6d59..43271e5 100644
--- a/generic/ttk/ttkPanedwindow.c
+++ b/generic/ttk/ttkPanedwindow.c
@@ -158,7 +158,7 @@ static int ConfigurePane(
if (pane->weight < 0) {
Tcl_SetObjResult(interp, Tcl_NewStringObj(
"-weight must be non-negative", -1));
- Tcl_SetErrorCode(interp, "TTK", "PANE", "WEIGHT", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "PANE", "WEIGHT", (char *)NULL);
goto error;
}
@@ -192,12 +192,14 @@ static int ShoveUp(Paned *pw, int i, int pos)
int sashThickness = pw->paned.sashThickness;
if (i == 0) {
- if (pos < 0)
+ if (pos < 0) {
pos = 0;
+ }
} else {
Pane *prevPane = (Pane *)Ttk_ContentData(pw->paned.mgr, i-1);
- if (pos < prevPane->sashPos + sashThickness)
+ if (pos < prevPane->sashPos + sashThickness) {
pos = ShoveUp(pw, i-1, pos - sashThickness) + sashThickness;
+ }
}
return pane->sashPos = pos;
}
@@ -215,8 +217,9 @@ static int ShoveDown(Paned *pw, Tcl_Size i, int pos)
pos = pane->sashPos; /* Sentinel value == container window size */
} else {
Pane *nextPane = (Pane *)Ttk_ContentData(pw->paned.mgr,i+1);
- if (pos + sashThickness > nextPane->sashPos)
+ if (pos + sashThickness > nextPane->sashPos) {
pos = ShoveDown(pw, i+1, pos + sashThickness) - sashThickness;
+ }
}
return pane->sashPos = pos;
}
@@ -241,8 +244,9 @@ static int PanedSize(void *recordPtr, int *widthPtr, int *heightPtr)
Pane *pane = (Pane *)Ttk_ContentData(pw->paned.mgr, index);
Tk_Window window = Ttk_ContentWindow(pw->paned.mgr, index);
- if (height < Tk_ReqHeight(window))
+ if (height < Tk_ReqHeight(window)) {
height = Tk_ReqHeight(window);
+ }
width += pane->reqSize;
}
width += nSashes * sashThickness;
@@ -251,8 +255,9 @@ static int PanedSize(void *recordPtr, int *widthPtr, int *heightPtr)
Pane *pane = (Pane *)Ttk_ContentData(pw->paned.mgr, index);
Tk_Window window = Ttk_ContentWindow(pw->paned.mgr, index);
- if (width < Tk_ReqWidth(window))
+ if (width < Tk_ReqWidth(window)) {
width = Tk_ReqWidth(window);
+ }
height += pane->reqSize;
}
height += nSashes * sashThickness;
@@ -310,8 +315,9 @@ static void PlaceSashes(Paned *pw, int width, int height)
int reqSize = 0, totalWeight = 0;
int difference, delta, remainder, pos, i;
- if (nPanes == 0)
+ if (nPanes == 0) {
return;
+ }
/* Compute total required size and total available weight:
*/
@@ -344,13 +350,15 @@ static void PlaceSashes(Paned *pw, int width, int height)
int weight = pane->weight * (pane->reqSize != 0);
int size = pane->reqSize + delta * weight;
- if (weight > remainder)
+ if (weight > remainder) {
weight = remainder;
+ }
remainder -= weight;
size += weight;
- if (size < 0)
+ if (size < 0) {
size = 0;
+ }
pane->sashPos = (pos += size);
pos += sashThickness;
@@ -422,7 +430,7 @@ static int AddPane(
if (Ttk_ContentIndex(pw->paned.mgr, window) >= 0) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"%s already added", Tk_PathName(window)));
- Tcl_SetErrorCode(interp, "TTK", "PANE", "PRESENT", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "PANE", "PRESENT", (char *)NULL);
return TCL_ERROR;
}
@@ -512,8 +520,9 @@ static void PanedCleanup(void *recordPtr)
{
Paned *pw = (Paned *)recordPtr;
- if (pw->paned.sashLayout)
+ if (pw->paned.sashLayout) {
Ttk_FreeLayout(pw->paned.sashLayout);
+ }
Tk_DeleteEventHandler(pw->core.tkwin,
PanedEventMask, PanedEventProc, recordPtr);
Ttk_DeleteManager(pw->paned.mgr);
@@ -563,8 +572,9 @@ static Ttk_Layout PanedGetLayout(
Ttk_LayoutSize(sashLayout, 0, &sashWidth, &sashHeight);
pw->paned.sashThickness = horizontal ? sashWidth : sashHeight;
- if (pw->paned.sashLayout)
+ if (pw->paned.sashLayout) {
Ttk_FreeLayout(pw->paned.sashLayout);
+ }
pw->paned.sashLayout = sashLayout;
} else {
Ttk_FreeLayout(panedLayout);
@@ -677,8 +687,9 @@ static int PanedInsertCommand(
return AddPane(interp, pw, destIndex, window, objc-4, objv+4);
} /* else -- move existing content: */
- if (destIndex >= nContent)
+ if (destIndex >= nContent) {
destIndex = nContent - 1;
+ }
Ttk_ReorderContent(pw->paned.mgr, srcIndex, destIndex);
return objc == 4 ? TCL_OK :
@@ -852,7 +863,7 @@ static int PanedSashposCommand(
if (sashIndex < 0 || sashIndex >= Ttk_NumberContent(pw->paned.mgr) - 1) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"sash index %" TCL_LL_MODIFIER "d out of range", sashIndex));
- Tcl_SetErrorCode(interp, "TTK", "PANE", "SASH_INDEX", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "PANE", "SASH_INDEX", (char *)NULL);
return TCL_ERROR;
}
diff --git a/generic/ttk/ttkProgress.c b/generic/ttk/ttkProgress.c
index af8c527..74cced3 100644
--- a/generic/ttk/ttkProgress.c
+++ b/generic/ttk/ttkProgress.c
@@ -220,10 +220,12 @@ static void ProgressbarInitialize(
static void ProgressbarCleanup(void *recordPtr)
{
Progressbar *pb = (Progressbar *)recordPtr;
- if (pb->progress.variableTrace)
+ if (pb->progress.variableTrace) {
Ttk_UntraceVariable(pb->progress.variableTrace);
- if (pb->progress.timer)
+ }
+ if (pb->progress.timer) {
Tcl_DeleteTimerHandler(pb->progress.timer);
+ }
}
/*
@@ -405,10 +407,12 @@ static Ttk_Layout ProgressbarGetLayout(
if (layout) {
Tcl_Obj *periodObj = Ttk_QueryOption(layout, "-period", 0);
Tcl_Obj *maxPhaseObj = Ttk_QueryOption(layout, "-maxphase", 0);
- if (periodObj)
+ if (periodObj) {
Tcl_GetIntFromObj(NULL, periodObj, &pb->progress.period);
- if (maxPhaseObj)
+ }
+ if (maxPhaseObj) {
Tcl_GetIntFromObj(NULL, maxPhaseObj, &pb->progress.maxPhase);
+ }
}
return layout;
diff --git a/generic/ttk/ttkScale.c b/generic/ttk/ttkScale.c
index e318600..36e6946 100644
--- a/generic/ttk/ttkScale.c
+++ b/generic/ttk/ttkScale.c
@@ -271,8 +271,9 @@ ScaleGetCommand(
Tcl_SetObjResult(interp, scalePtr->scale.valueObj);
} else if (objc == 4) {
r = Tcl_GetIntFromObj(interp, objv[2], &x);
- if (r == TCL_OK)
+ if (r == TCL_OK) {
r = Tcl_GetIntFromObj(interp, objv[3], &y);
+ }
if (r == TCL_OK) {
value = PointToValue(scalePtr, x, y);
Tcl_SetObjResult(interp, Tcl_NewDoubleObj(value));
@@ -440,14 +441,27 @@ static double
PointToValue(Scale *scalePtr, int x, int y)
{
Ttk_Box troughBox = TroughRange(scalePtr);
- double from = 0, to = 1, fraction;
+ double value = 0, from = 0, to = 1, fraction;
+ Tcl_GetDoubleFromObj(NULL, scalePtr->scale.valueObj, &value);
Tcl_GetDoubleFromObj(NULL, scalePtr->scale.fromObj, &from);
Tcl_GetDoubleFromObj(NULL, scalePtr->scale.toObj, &to);
if (scalePtr->scale.orient == TTK_ORIENT_HORIZONTAL) {
+ /*
+ * Bug d25b721f: drag when trough not shown due to missing display place
+ */
+ if (troughBox.width <= 0) {
+ return value;
+ }
fraction = (double)(x - troughBox.x) / (double)troughBox.width;
} else {
+ /*
+ * Bug d25b721f: drag when trough not shown due to missing display place
+ */
+ if (troughBox.height <= 0) {
+ return value;
+ }
fraction = (double)(y - troughBox.y) / (double)troughBox.height;
}
diff --git a/generic/ttk/ttkScroll.c b/generic/ttk/ttkScroll.c
index 61b3273..c1c5d25 100644
--- a/generic/ttk/ttkScroll.c
+++ b/generic/ttk/ttkScroll.c
@@ -258,12 +258,15 @@ void TtkScrollTo(ScrollHandle h, int newFirst, int updateScrollInfo)
TtkUpdateScrollInfo(h);
}
- if (newFirst >= s->total)
+ if (newFirst >= s->total) {
newFirst = s->total - 1;
- if (newFirst > s->first && s->last >= s->total) /* don't scroll past end */
+ }
+ if (newFirst > s->first && s->last >= s->total) {/* don't scroll past end */
newFirst = s->first;
- if (newFirst < 0)
+ }
+ if (newFirst < 0) {
newFirst = 0;
+ }
if (newFirst != s->first) {
s->first = newFirst;
diff --git a/generic/ttk/ttkSquare.c b/generic/ttk/ttkSquare.c
index d0d25b1..c9500e0 100644
--- a/generic/ttk/ttkSquare.c
+++ b/generic/ttk/ttkSquare.c
@@ -114,8 +114,9 @@ SquareDoLayout(void *clientData)
Ttk_Box b;
b = Ttk_ElementParcel(squareNode);
- if (squarePtr->square.anchorObj != NULL)
+ if (squarePtr->square.anchorObj != NULL) {
Tk_GetAnchorFromObj(NULL, squarePtr->square.anchorObj, &anchor);
+ }
b = Ttk_AnchorBox(winBox, b.width, b.height, anchor);
Ttk_PlaceElement(corePtr->layout, squareNode, b);
diff --git a/generic/ttk/ttkState.c b/generic/ttk/ttkState.c
index 005cd48..4024f0b 100644
--- a/generic/ttk/ttkState.c
+++ b/generic/ttk/ttkState.c
@@ -79,8 +79,9 @@ static int StateSpecSetFromAny(Tcl_Interp *interp, Tcl_Obj *objPtr)
unsigned int onbits = 0, offbits = 0;
status = Tcl_ListObjGetElements(interp, objPtr, &objc, &objv);
- if (status != TCL_OK)
+ if (status != TCL_OK) {
return status;
+ }
for (i = 0; i < objc; ++i) {
const char *stateName = Tcl_GetString(objv[i]);
@@ -94,15 +95,16 @@ static int StateSpecSetFromAny(Tcl_Interp *interp, Tcl_Obj *objPtr)
}
for (j = 0; stateNames[j].value; ++j) {
- if (strcmp(stateName, stateNames[j].name) == 0)
+ if (strcmp(stateName, stateNames[j].name) == 0) {
break;
+ }
}
if (stateNames[j].value == 0) {
if (interp) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"Invalid state name %s", stateName));
- Tcl_SetErrorCode(interp, "TTK", "VALUE", "STATE", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "VALUE", "STATE", (char *)NULL);
}
return TCL_ERROR;
}
@@ -185,8 +187,9 @@ int Ttk_GetStateSpecFromObj(
{
if (objPtr->typePtr != &StateSpecObjType.objType) {
int status = StateSpecSetFromAny(interp, objPtr);
- if (status != TCL_OK)
+ if (status != TCL_OK) {
return status;
+ }
}
spec->onbits = objPtr->internalRep.wideValue >> 32;
@@ -212,20 +215,23 @@ Tcl_Obj *Ttk_StateMapLookup(
int status;
status = Tcl_ListObjGetElements(interp, map, &nSpecs, &specs);
- if (status != TCL_OK)
+ if (status != TCL_OK) {
return NULL;
+ }
for (j = 0; j < nSpecs; j += 2) {
Ttk_StateSpec spec;
status = Ttk_GetStateSpecFromObj(interp, specs[j], &spec);
- if (status != TCL_OK)
+ if (status != TCL_OK) {
return NULL;
- if (Ttk_StateMatches(state, &spec))
+ }
+ if (Ttk_StateMatches(state, &spec)) {
return specs[j+1];
+ }
}
if (interp) {
Tcl_SetObjResult(interp, Tcl_NewStringObj("No match in state map", -1));
- Tcl_SetErrorCode(interp, "TTK", "STATE", "UNMATCHED", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "STATE", "UNMATCHED", (char *)NULL);
}
return NULL;
}
@@ -244,22 +250,24 @@ Ttk_StateMap Ttk_GetStateMapFromObj(
int status;
status = Tcl_ListObjGetElements(interp, mapObj, &nSpecs, &specs);
- if (status != TCL_OK)
+ if (status != TCL_OK) {
return NULL;
+ }
if (nSpecs % 2 != 0) {
if (interp) {
Tcl_SetObjResult(interp, Tcl_NewStringObj(
"State map must have an even number of elements", -1));
- Tcl_SetErrorCode(interp, "TTK", "VALUE", "STATEMAP", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "VALUE", "STATEMAP", (char *)NULL);
}
return 0;
}
for (j = 0; j < nSpecs; j += 2) {
Ttk_StateSpec spec;
- if (Ttk_GetStateSpecFromObj(interp, specs[j], &spec) != TCL_OK)
+ if (Ttk_GetStateSpecFromObj(interp, specs[j], &spec) != TCL_OK) {
return NULL;
+ }
}
return mapObj;
diff --git a/generic/ttk/ttkStubInit.c b/generic/ttk/ttkStubInit.c
index 9d7d4fc..4dea92d 100644
--- a/generic/ttk/ttkStubInit.c
+++ b/generic/ttk/ttkStubInit.c
@@ -8,6 +8,11 @@
MODULE_SCOPE const TtkStubs ttkStubs;
+
+#ifdef TK_NO_DEPRECATED
+# define Ttk_RegisterElementSpec 0
+#endif /* TK_NO_DEPRECATED */
+
#ifdef __GNUC__
/*
* The rest of this file shouldn't warn about deprecated functions; they're
diff --git a/generic/ttk/ttkTheme.c b/generic/ttk/ttkTheme.c
index 4ecc30b..dff3c72 100644
--- a/generic/ttk/ttkTheme.c
+++ b/generic/ttk/ttkTheme.c
@@ -102,8 +102,9 @@ Tcl_Obj *Ttk_StyleDefault(Ttk_Style style, const char *optionName)
while (style) {
Tcl_HashEntry *entryPtr =
Tcl_FindHashEntry(&style->defaultsTable, optionName);
- if (entryPtr)
+ if (entryPtr) {
return (Tcl_Obj *)Tcl_GetHashValue(entryPtr);
+ }
style= style->parentStyle;
}
return 0;
@@ -137,8 +138,9 @@ static const Tk_OptionSpec *TTKGetOptionSpec(
{
const Tk_OptionSpec *optionSpec = TkGetOptionSpec(optionName, optionTable);
- if (!optionSpec)
+ if (!optionSpec) {
return 0;
+ }
/* Make sure widget option has a Tcl_Obj* entry:
*/
@@ -568,7 +570,7 @@ Ttk_CreateTheme(
if (!newEntry) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"Theme %s already exists", name));
- Tcl_SetErrorCode(interp, "TTK", "THEME", "EXISTS", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "THEME", "EXISTS", (char *)NULL);
return NULL;
}
@@ -612,7 +614,7 @@ static Ttk_Theme LookupTheme(
if (!entryPtr) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"theme \"%s\" does not exist", name));
- Tcl_SetErrorCode(interp, "TTK", "LOOKUP", "THEME", name, NULL);
+ Tcl_SetErrorCode(interp, "TTK", "LOOKUP", "THEME", name, (char *)NULL);
return NULL;
}
@@ -910,7 +912,7 @@ Ttk_ElementClass *Ttk_RegisterElement(
Tcl_ResetResult(interp);
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"Duplicate element %s", name));
- Tcl_SetErrorCode(interp, "TTK", "REGISTER_ELEMENT", "DUPE", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "REGISTER_ELEMENT", "DUPE", (char *)NULL);
}
return 0;
}
@@ -922,6 +924,7 @@ Ttk_ElementClass *Ttk_RegisterElement(
return elementClass;
}
+#ifndef TK_NO_DEPRECATED
/* Ttk_RegisterElementSpec (deprecated) --
* Register a new element.
*/
@@ -931,6 +934,7 @@ int Ttk_RegisterElementSpec(Ttk_Theme theme,
return Ttk_RegisterElement(NULL, theme, name, specPtr, clientData)
? TCL_OK : TCL_ERROR;
}
+#endif /* TK_NO_DEPRECATED */
/*------------------------------------------------------------------------
* +++ Element record initialization.
@@ -1121,11 +1125,11 @@ Ttk_DrawElement(
Ttk_Box b, /* Element area */
Ttk_State state) /* Widget or element state flags. */
{
- if (b.width <= 0 || b.height <= 0)
+ if (b.width <= 0 || b.height <= 0) {
return;
+ }
if (!InitializeElementRecord(
- eclass, style, recordPtr, optionTable, tkwin, state))
- {
+ eclass, style, recordPtr, optionTable, tkwin, state)) {
return;
}
eclass->specPtr->draw(
@@ -1239,8 +1243,9 @@ usage:
* (@@@ SHOULD: check for valid resource values as well,
* but we don't know what types they should be at this level.)
*/
- if (!Ttk_GetStateMapFromObj(interp, stateMap))
+ if (!Ttk_GetStateMapFromObj(interp, stateMap)) {
return TCL_ERROR;
+ }
entryPtr = Tcl_CreateHashEntry(
&stylePtr->settingsTable,optionName,&newEntry);
@@ -1380,7 +1385,7 @@ static int StyleThemeCurrentCmd(
if (name == NULL) {
Tcl_SetObjResult(interp, Tcl_NewStringObj(
"error: failed to get theme name", -1));
- Tcl_SetErrorCode(interp, "TTK", "THEME", "NAMELESS", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "THEME", "NAMELESS", (char *)NULL);
return TCL_ERROR;
}
@@ -1421,8 +1426,9 @@ static int StyleThemeCreateCmd(
case OP_PARENT:
parentTheme = LookupTheme(
interp, pkgPtr, Tcl_GetString(objv[i+1]));
- if (!parentTheme)
+ if (!parentTheme) {
return TCL_ERROR;
+ }
break;
case OP_SETTINGS:
settingsScript = objv[i+1];
@@ -1488,8 +1494,9 @@ StyleThemeSettingsCmd(
}
newTheme = LookupTheme(interp, pkgPtr, Tcl_GetString(objv[3]));
- if (!newTheme)
+ if (!newTheme) {
return TCL_ERROR;
+ }
pkgPtr->currentTheme = newTheme;
status = Tcl_EvalObjEx(interp, objv[4], 0);
@@ -1583,7 +1590,7 @@ static int StyleElementOptionsCmd(
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"element %s not found", elementName));
- Tcl_SetErrorCode(interp, "TTK", "LOOKUP", "ELEMENT", elementName, NULL);
+ Tcl_SetErrorCode(interp, "TTK", "LOOKUP", "ELEMENT", elementName, (char *)NULL);
return TCL_ERROR;
}
@@ -1647,8 +1654,9 @@ static int StyleThemeStylesCmd(
} else {
themePtr = Ttk_GetTheme(interp, Tcl_GetString(objv[3]));
}
- if (!themePtr)
+ if (!themePtr) {
return TCL_ERROR;
+ }
return TtkEnumerateHashTable(interp, &themePtr->styleTable);
}
diff --git a/generic/ttk/ttkTheme.h b/generic/ttk/ttkTheme.h
index 5049b23..fc45157 100644
--- a/generic/ttk/ttkTheme.h
+++ b/generic/ttk/ttkTheme.h
@@ -391,7 +391,7 @@ MODULE_SCOPE int TtkEnumerateHashTable(Tcl_Interp *, Tcl_HashTable *);
* +++ Stub table declarations.
*/
-#include "ttkDecls.h"
+#include "ttkDecls.h" /* IWYU pragma: export */
/*
* Drawing utilities for theme code:
diff --git a/generic/ttk/ttkToggleswitch.c b/generic/ttk/ttkToggleswitch.c
new file mode 100644
index 0000000..04cae23
--- /dev/null
+++ b/generic/ttk/ttkToggleswitch.c
@@ -0,0 +1,638 @@
+/*
+ * Copyright © 2025 Csaba Nemethi <csaba.nemethi@t-online.de>
+ *
+ * ttk::toggleswitch widget.
+ */
+
+#include "tkInt.h"
+#include "ttkTheme.h"
+#include "ttkWidget.h"
+
+/*
+ * Tglswitch widget record
+ */
+typedef struct
+{
+ /* widget options */
+ Tcl_Obj *commandObj;
+ Tcl_Obj *offValueObj;
+ Tcl_Obj *onValueObj;
+ Tcl_Obj *sizeObj;
+ Tcl_Obj *variableObj;
+
+ /* internal state */
+ Tcl_Obj *minValObj; /* minimum value */
+ Tcl_Obj *maxValObj; /* maximum value */
+ Tcl_Obj *curValObj; /* current value */
+ Ttk_TraceHandle *varTrace;
+ double minVal, maxVal;
+} TglswitchPart;
+
+typedef struct
+{
+ WidgetCore core;
+ TglswitchPart tglsw;
+} Tglswitch;
+
+static const char *const sizeStrings[] = { "1", "2", "3", NULL };
+
+static const Tk_OptionSpec TglswitchOptionSpecs[] =
+{
+ {TK_OPTION_STRING, "-command", "command", "Command", "",
+ offsetof(Tglswitch, tglsw.commandObj), TCL_INDEX_NONE,
+ 0, 0, 0},
+ {TK_OPTION_STRING, "-offvalue", "offValue", "OffValue", "0",
+ offsetof(Tglswitch, tglsw.offValueObj), TCL_INDEX_NONE,
+ 0, 0, 0},
+ {TK_OPTION_STRING, "-onvalue", "onValue", "OnValue", "1",
+ offsetof(Tglswitch, tglsw.onValueObj), TCL_INDEX_NONE,
+ 0, 0, 0},
+ {TK_OPTION_STRING_TABLE, "-size", "size", "Size", "2",
+ offsetof(Tglswitch, tglsw.sizeObj), TCL_INDEX_NONE,
+ 0, sizeStrings, GEOMETRY_CHANGED},
+ {TK_OPTION_STRING, "-variable", "variable", "Variable", NULL,
+ offsetof(Tglswitch, tglsw.variableObj), TCL_INDEX_NONE,
+ TK_OPTION_NULL_OK, 0, 0},
+
+ WIDGET_TAKEFOCUS_TRUE,
+ WIDGET_INHERIT_OPTIONS(ttkCoreOptionSpecs)
+};
+
+/*
+ * TglswitchVariableChanged --
+ * Variable trace procedure for the ttk::toggleswitch -variable option.
+ * Updates the ttk::toggleswitch widget's switch state.
+ */
+static void TglswitchVariableChanged(void *clientData, const char *value)
+{
+ Tglswitch *tglswPtr = (Tglswitch *)clientData;
+
+ if (WidgetDestroyed(&tglswPtr->core)) {
+ return;
+ }
+
+ if (value == NULL) {
+ TtkWidgetChangeState(&tglswPtr->core, TTK_STATE_INVALID, 0);
+ } else {
+ Tcl_DecrRefCount(tglswPtr->tglsw.curValObj);
+ if (!strcmp(value, Tcl_GetString(tglswPtr->tglsw.onValueObj))) {
+ TtkWidgetChangeState(&tglswPtr->core, TTK_STATE_SELECTED, 0);
+ tglswPtr->tglsw.curValObj = tglswPtr->tglsw.maxValObj;
+ } else {
+ TtkWidgetChangeState(&tglswPtr->core, 0, TTK_STATE_SELECTED);
+ tglswPtr->tglsw.curValObj = tglswPtr->tglsw.minValObj;
+ }
+ Tcl_IncrRefCount(tglswPtr->tglsw.curValObj);
+
+ TtkWidgetChangeState(&tglswPtr->core, 0, TTK_STATE_INVALID);
+ }
+
+ TtkRedisplayWidget(&tglswPtr->core);
+}
+
+/*
+ * TglswitchInitialize --
+ * ttk::toggleswitch widget initialization hook.
+ */
+static void TglswitchInitialize(Tcl_Interp *interp, void *recordPtr)
+{
+ Tglswitch *tglswPtr = (Tglswitch *)recordPtr;
+
+ /*
+ * Create the *Tglswitch*.trough and *Tglswitch*.slider
+ * elements for the Toggleswitch* styles if necessary
+ */
+ int code = Tcl_EvalEx(interp, "ttk::toggleswitch::CondMakeElements",
+ TCL_INDEX_NONE, TCL_EVAL_GLOBAL);
+ if (code != TCL_OK) {
+ Tcl_BackgroundException(interp, code);
+ }
+
+ /*
+ * Initialize the minimum, maximum, and current values
+ */
+
+ tglswPtr->tglsw.minVal = 0.0;
+ tglswPtr->tglsw.minValObj = Tcl_NewDoubleObj(tglswPtr->tglsw.minVal);
+ Tcl_IncrRefCount(tglswPtr->tglsw.minValObj);
+
+ tglswPtr->tglsw.maxVal = 20.0;
+ tglswPtr->tglsw.maxValObj = Tcl_NewDoubleObj(tglswPtr->tglsw.maxVal);
+ Tcl_IncrRefCount(tglswPtr->tglsw.maxValObj);
+
+ tglswPtr->tglsw.curValObj = Tcl_NewDoubleObj(0.0);
+ Tcl_IncrRefCount(tglswPtr->tglsw.curValObj);
+
+ /*
+ * Set the -variable option to the widget's path name
+ */
+ tglswPtr->tglsw.variableObj =
+ Tcl_NewStringObj(Tk_PathName(tglswPtr->core.tkwin), -1);
+ Tcl_IncrRefCount(tglswPtr->tglsw.variableObj);
+
+ TtkTrackElementState(&tglswPtr->core);
+}
+
+/*
+ * TglswitchCleanup --
+ * Cleanup hook.
+ */
+static void TglswitchCleanup(void *recordPtr)
+{
+ Tglswitch *tglswPtr = (Tglswitch *)recordPtr;
+
+ if (tglswPtr->tglsw.varTrace) {
+ Ttk_UntraceVariable(tglswPtr->tglsw.varTrace);
+ tglswPtr->tglsw.varTrace = 0;
+ }
+}
+
+/*
+ * TglswitchConfigure --
+ * Configuration hook.
+ */
+static int TglswitchConfigure(Tcl_Interp *interp, void *recordPtr, int mask)
+{
+ Tglswitch *tglswPtr = (Tglswitch *)recordPtr;
+ Tcl_Obj *variableObj = tglswPtr->tglsw.variableObj;
+ Ttk_TraceHandle *varTrace = NULL;
+
+ if (mask & GEOMETRY_CHANGED) {
+ /*
+ * Processing the "-size" option: Set the "-style" option to
+ * "(*.)Toggleswitch{1|2|3}" if its value is of the same form.
+ */
+
+ const char *styleName = 0, *lastDot = 0, *nameTail = 0;
+
+ if (tglswPtr->core.styleObj) {
+ styleName = Tcl_GetString(tglswPtr->core.styleObj);
+ }
+ if (!styleName || *styleName == '\0') {
+ styleName = "Toggleswitch2";
+ }
+ lastDot = strrchr(styleName, '.');
+ nameTail = lastDot ? lastDot + 1 : styleName;
+
+ if (!strcmp(nameTail, "Toggleswitch1")
+ || !strcmp(nameTail, "Toggleswitch2")
+ || !strcmp(nameTail, "Toggleswitch3")) {
+ size_t length = strlen(styleName);
+ char *styleName2 = (char *)ckalloc(length + 1);
+ const char *sizeStr = Tcl_GetString(tglswPtr->tglsw.sizeObj);
+
+ memcpy(styleName2, styleName, length + 1);
+ styleName2[length-1] = *sizeStr;
+
+ Tcl_DecrRefCount(tglswPtr->core.styleObj);
+ tglswPtr->core.styleObj = Tcl_NewStringObj(styleName2, -1);
+ Tcl_IncrRefCount(tglswPtr->core.styleObj);
+
+ ckfree(styleName2);
+
+ /*
+ * Update the layout according to the new style
+ */
+ TtkCoreConfigure(interp, recordPtr, STYLE_CHANGED);
+ }
+ } else if (mask & STYLE_CHANGED) { /* intentionally "else if" */
+ /*
+ * Processing the "-style" option: Set the "-size" option
+ * to "1|2|3" if the style is "(*.)Toggleswitch{1|2|3}"
+ */
+
+ const char *sizeStr = 0;
+ const char *styleName = Tcl_GetString(tglswPtr->core.styleObj);
+ const char *lastDot = strrchr(styleName, '.');
+ const char *nameTail = lastDot ? lastDot + 1 : styleName;
+
+ if (!strcmp(nameTail, "Toggleswitch1")) {
+ sizeStr = "1";
+ } else if (!strcmp(nameTail, "Toggleswitch2")) {
+ sizeStr = "2";
+ } else if (!strcmp(nameTail, "Toggleswitch3")) {
+ sizeStr = "3";
+ }
+
+ if (sizeStr) {
+ Tcl_DecrRefCount(tglswPtr->tglsw.sizeObj);
+ tglswPtr->tglsw.sizeObj = Tcl_NewStringObj(sizeStr, -1);
+ Tcl_IncrRefCount(tglswPtr->tglsw.sizeObj);
+ }
+ }
+
+ if (variableObj != NULL && *Tcl_GetString(variableObj) != '\0') {
+ varTrace = Ttk_TraceVariable(interp, variableObj,
+ TglswitchVariableChanged, recordPtr);
+ if (!varTrace) {
+ return TCL_ERROR;
+ }
+ }
+
+ if (TtkCoreConfigure(interp, recordPtr, mask) != TCL_OK) {
+ Ttk_UntraceVariable(varTrace);
+ return TCL_ERROR;
+ }
+
+ if (tglswPtr->tglsw.varTrace) {
+ Ttk_UntraceVariable(tglswPtr->tglsw.varTrace);
+ }
+ tglswPtr->tglsw.varTrace = varTrace;
+
+ return TCL_OK;
+}
+
+/*
+ * TglswitchPostConfigure --
+ * Post-configuration hook.
+ */
+static int TglswitchPostConfigure(
+ TCL_UNUSED(Tcl_Interp *),
+ void *recordPtr,
+ TCL_UNUSED(int))
+{
+ Tglswitch *tglswPtr = (Tglswitch *)recordPtr;
+ int status = TCL_OK;
+
+ if (tglswPtr->tglsw.varTrace) {
+ status = Ttk_FireTrace(tglswPtr->tglsw.varTrace);
+ if (WidgetDestroyed(&tglswPtr->core)) {
+ return TCL_ERROR;
+ }
+ }
+
+ return status;
+}
+
+/*
+ * TglswitchGetLayout --
+ * getLayout hook.
+ */
+static Ttk_Layout TglswitchGetLayout(
+ Tcl_Interp *interp, Ttk_Theme themePtr, void *recordPtr)
+{
+ Tglswitch *tglswPtr = (Tglswitch *)recordPtr;
+ const char *styleName = 0;
+ Tcl_DString dsStyleName;
+ Ttk_Layout layout;
+
+ Tcl_DStringInit(&dsStyleName);
+
+ if (tglswPtr->core.styleObj) {
+ styleName = Tcl_GetString(tglswPtr->core.styleObj);
+ Tcl_DStringAppend(&dsStyleName, styleName, TCL_INDEX_NONE);
+ }
+ if (!styleName || *styleName == '\0') {
+ const char *sizeStr = Tcl_GetString(tglswPtr->tglsw.sizeObj);
+
+ styleName = tglswPtr->core.widgetSpec->className;
+ Tcl_DStringAppend(&dsStyleName, styleName, TCL_INDEX_NONE);
+ Tcl_DStringAppend(&dsStyleName, sizeStr, TCL_INDEX_NONE);
+ }
+
+ layout = Ttk_CreateLayout(interp, themePtr, Tcl_DStringValue(&dsStyleName),
+ recordPtr, tglswPtr->core.optionTable, tglswPtr->core.tkwin);
+
+ Tcl_DStringFree(&dsStyleName);
+
+ return layout;
+}
+
+/*
+ * TroughRange --
+ * Returns the value area of the trough element, adjusted for slider size.
+ */
+static Ttk_Box TroughRange(Tglswitch *tglswPtr)
+{
+ Ttk_Box troughBox = Ttk_ClientRegion(tglswPtr->core.layout, "trough");
+ Ttk_Element slider = Ttk_FindElement(tglswPtr->core.layout, "slider");
+
+ if (slider) {
+ Ttk_Box sliderBox = Ttk_ElementParcel(slider);
+ troughBox.x += sliderBox.width / 2;
+ troughBox.width -= sliderBox.width;
+ }
+
+ return troughBox;
+}
+
+/*
+ * ValueToFraction --
+ * Returns the fraction corresponding to a given value.
+ */
+static double ValueToFraction(Tglswitch *tglswPtr, double value)
+{
+ double minVal = tglswPtr->tglsw.minVal;
+ double maxVal = tglswPtr->tglsw.maxVal;
+ double fraction = (value - minVal) / (maxVal - minVal);
+
+ return fraction < 0 ? 0 : fraction > 1 ? 1 : fraction;
+}
+
+/*
+ * ValueToPoint --
+ * Returns the x coordinate corresponding to a given value.
+ */
+static int ValueToPoint(Tglswitch *tglswPtr, double value)
+{
+ Ttk_Box troughBox = TroughRange(tglswPtr);
+ double fraction = ValueToFraction(tglswPtr, value);
+
+ return troughBox.x + (int)(fraction * troughBox.width);
+}
+
+/*
+ * PointToValue --
+ * Returns the value corresponding to a given x coordinate.
+ */
+static double PointToValue(Tglswitch *tglswPtr, int x)
+{
+ Ttk_Box troughBox = TroughRange(tglswPtr);
+ double minVal = tglswPtr->tglsw.minVal;
+ double maxVal = tglswPtr->tglsw.maxVal;
+ double value = 0.0, fraction;
+
+ Tcl_GetDoubleFromObj(NULL, tglswPtr->tglsw.curValObj, &value);
+ if (troughBox.width <= 0) {
+ return value;
+ }
+
+ fraction = (double)(x - troughBox.x) / (double)troughBox.width;
+ fraction = fraction < 0 ? 0 : fraction > 1 ? 1 : fraction;
+
+ return minVal + fraction * (maxVal - minVal);
+}
+
+/*
+ * TglswitchDoLayout --
+ */
+static void TglswitchDoLayout(void *clientData)
+{
+ WidgetCore *corePtr = (WidgetCore *)clientData;
+ Ttk_Element slider = Ttk_FindElement(corePtr->layout, "slider");
+
+ Ttk_PlaceLayout(corePtr->layout, corePtr->state,
+ Ttk_WinBox(corePtr->tkwin));
+
+ /*
+ * Adjust the slider position
+ */
+ if (slider) {
+ Tglswitch *tglswPtr = (Tglswitch *)clientData;
+ Ttk_Box troughBox = Ttk_ClientRegion(tglswPtr->core.layout, "trough");
+ Ttk_Box sliderBox = Ttk_ElementParcel(slider);
+ double value = 0.0;
+ double fraction;
+ int range;
+
+ Tcl_GetDoubleFromObj(NULL, tglswPtr->tglsw.curValObj, &value);
+ fraction = ValueToFraction(tglswPtr, value);
+ range = troughBox.width - sliderBox.width;
+
+ sliderBox.x += (int)(fraction * range);
+ Ttk_PlaceElement(corePtr->layout, slider, sliderBox);
+ }
+}
+
+/*
+ * $toggleswitch get ?min|max|$x? --
+ * Returns the ttk::toggleswitch widget's current/minimum/maximum value,
+ * or the value corresponding to $x.
+ */
+static int TglswitchGetCommand(
+ void *recordPtr, Tcl_Interp *interp, Tcl_Size objc, Tcl_Obj *const objv[])
+{
+ Tglswitch *tglswPtr = (Tglswitch *)recordPtr;
+ char *arg2 = NULL;
+ int x, res = TCL_OK;
+ double value = 0.0;
+
+ if (objc == 2) {
+ Tcl_SetObjResult(interp, tglswPtr->tglsw.curValObj);
+ } else if (objc == 3) {
+ arg2 = Tcl_GetString(objv[2]);
+ if (!strcmp(arg2, "min")) {
+ Tcl_SetObjResult(interp, tglswPtr->tglsw.minValObj);
+ } else if (!strcmp(arg2, "max")) {
+ Tcl_SetObjResult(interp, tglswPtr->tglsw.maxValObj);
+ } else {
+ res = Tcl_GetIntFromObj(interp, objv[2], &x);
+ if (res == TCL_OK) {
+ value = PointToValue(tglswPtr, x);
+ Tcl_SetObjResult(interp, Tcl_NewDoubleObj(value));
+ }
+ }
+ } else {
+ Tcl_WrongNumArgs(interp, 1, objv, "get ?min|max|x?");
+ return TCL_ERROR;
+ }
+
+ return res;
+}
+
+/*
+ * $toggleswitch set $newValue
+ * Sets the ttk::toggleswitch widget's value to $newValue.
+ */
+static int TglswitchSetCommand(
+ void *recordPtr, Tcl_Interp *interp, Tcl_Size objc, Tcl_Obj *const objv[])
+{
+ Tglswitch *tglswPtr = (Tglswitch *)recordPtr;
+ double minVal = tglswPtr->tglsw.minVal;
+ double maxVal = tglswPtr->tglsw.maxVal;
+ double value;
+
+ if (objc != 3) {
+ Tcl_WrongNumArgs(interp, 1, objv, "set value");
+ return TCL_ERROR;
+ }
+
+ if (Tcl_GetDoubleFromObj(interp, objv[2], &value) != TCL_OK) {
+ return TCL_ERROR;
+ }
+
+ if (tglswPtr->core.state & TTK_STATE_DISABLED) {
+ return TCL_OK;
+ }
+
+ /*
+ * Limit new value to between minVal and maxVal
+ */
+ value = value < minVal ? minVal : value > maxVal ? maxVal : value;
+
+ /*
+ * Set value
+ */
+ Tcl_DecrRefCount(tglswPtr->tglsw.curValObj);
+ tglswPtr->tglsw.curValObj = Tcl_NewDoubleObj(value);
+ Tcl_IncrRefCount(tglswPtr->tglsw.curValObj);
+ TtkRedisplayWidget(&tglswPtr->core);
+
+ if (WidgetDestroyed(&tglswPtr->core)) {
+ return TCL_ERROR;
+ }
+
+ return TCL_OK;
+}
+
+/*
+ * $toggleswitch switchstate ?$boolean? --
+ * Modifies or inquires the widget's switch state.
+ */
+static int TglswitchSwitchstateCommand(
+ void *recordPtr, Tcl_Interp *interp, Tcl_Size objc, Tcl_Obj *const objv[])
+{
+ Tglswitch *tglswPtr = (Tglswitch *)recordPtr;
+ Ttk_State selState = (tglswPtr->core.state & TTK_STATE_SELECTED);
+ Tcl_Obj *variableObj = tglswPtr->tglsw.variableObj;
+ int arg2 = 0;
+
+ if (objc == 2) {
+ /*
+ * Return the widget's current switch state
+ */
+ Tcl_SetObjResult(interp, Tcl_NewBooleanObj(selState));
+ } else if (objc == 3) {
+ if (Tcl_GetBooleanFromObj(interp, objv[2], &arg2) != TCL_OK) {
+ return TCL_ERROR;
+ }
+
+ if (tglswPtr->core.state & TTK_STATE_DISABLED) {
+ return TCL_OK;
+ }
+
+ /*
+ * Update the widget's selected state and current value
+ */
+ Tcl_DecrRefCount(tglswPtr->tglsw.curValObj);
+ if (arg2) {
+ TtkWidgetChangeState(&tglswPtr->core, TTK_STATE_SELECTED, 0);
+ tglswPtr->tglsw.curValObj = tglswPtr->tglsw.maxValObj;
+ } else {
+ TtkWidgetChangeState(&tglswPtr->core, 0, TTK_STATE_SELECTED);
+ tglswPtr->tglsw.curValObj = tglswPtr->tglsw.minValObj;
+ }
+ Tcl_IncrRefCount(tglswPtr->tglsw.curValObj);
+
+ if (variableObj != NULL && *Tcl_GetString(variableObj) != '\0') {
+ /*
+ * Update the associated variable
+ */
+ Tcl_Obj *newOnOffValueObj = arg2 ? tglswPtr->tglsw.onValueObj
+ : tglswPtr->tglsw.offValueObj;
+ if (Tcl_ObjSetVar2(interp, variableObj, NULL, newOnOffValueObj,
+ TCL_GLOBAL_ONLY|TCL_LEAVE_ERR_MSG) == NULL) {
+ return TCL_ERROR;
+ }
+ }
+
+ if (WidgetDestroyed(&tglswPtr->core)) {
+ return TCL_ERROR;
+ }
+
+ if ((tglswPtr->core.state & TTK_STATE_SELECTED) != selState) {
+ /*
+ * Evaluate the associated command at global scope
+ */
+ return Tcl_EvalObjEx(interp, tglswPtr->tglsw.commandObj,
+ TCL_EVAL_GLOBAL);
+ }
+ } else {
+ Tcl_WrongNumArgs(interp, 1, objv, "switchstate ?boolean?");
+ return TCL_ERROR;
+ }
+
+ return TCL_OK;
+}
+
+/*
+ * $toggleswitch toggle --
+ * Toggles the widget's switch state.
+ */
+static int TglswitchToggleCommand(
+ void *recordPtr, Tcl_Interp *interp, Tcl_Size objc, Tcl_Obj *const objv[])
+{
+ Tglswitch *tglswPtr = (Tglswitch *)recordPtr;
+ static Tcl_Obj *newObjv[3];
+
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, "toggle");
+ return TCL_ERROR;
+ }
+
+ newObjv[0] = objv[0];
+ newObjv[1] = Tcl_NewStringObj("switchstate", -1);
+ newObjv[2] = (tglswPtr->core.state & TTK_STATE_SELECTED) ?
+ Tcl_NewBooleanObj(0) : Tcl_NewBooleanObj(1);
+
+ return TglswitchSwitchstateCommand(recordPtr, interp, 3, newObjv);
+}
+
+/*
+ * $toggleswitch xcoord ?$value? --
+ * Returns the x coordinate corresponding to $value, or to the current
+ * value if $value is omitted.
+ */
+static int TglswitchXcoordCommand(
+ void *recordPtr, Tcl_Interp *interp, Tcl_Size objc, Tcl_Obj *const objv[])
+{
+ Tglswitch *tglswPtr = (Tglswitch *)recordPtr;
+ double value;
+ int res = TCL_OK;
+
+ if (objc == 3) {
+ res = Tcl_GetDoubleFromObj(interp, objv[2], &value);
+ } else if (objc == 2) {
+ res = Tcl_GetDoubleFromObj(interp, tglswPtr->tglsw.curValObj, &value);
+ } else {
+ Tcl_WrongNumArgs(interp, 1, objv, "xcoord ?value?");
+ return TCL_ERROR;
+ }
+
+ if (res == TCL_OK) {
+ int x = ValueToPoint(tglswPtr, value);
+ Tcl_SetObjResult(interp, Tcl_NewIntObj(x));
+ }
+
+ return res;
+}
+
+static const Ttk_Ensemble TglswitchCommands[] =
+{
+ { "cget", TtkWidgetCgetCommand, 0 },
+ { "configure", TtkWidgetConfigureCommand, 0 },
+ { "get", TglswitchGetCommand, 0 },
+ { "identify", TtkWidgetIdentifyCommand, 0 },
+ { "instate", TtkWidgetInstateCommand, 0 },
+ { "set", TglswitchSetCommand, 0 },
+ { "state", TtkWidgetStateCommand, 0 },
+ { "style", TtkWidgetStyleCommand, 0 },
+ { "switchstate", TglswitchSwitchstateCommand, 0 },
+ { "toggle", TglswitchToggleCommand, 0 },
+ { "xcoord", TglswitchXcoordCommand, 0 },
+ { 0, 0, 0 }
+};
+
+static const WidgetSpec TglswitchWidgetSpec =
+{
+ "Toggleswitch", /* Class name */
+ sizeof(Tglswitch), /* record size */
+ TglswitchOptionSpecs, /* option specs */
+ TglswitchCommands, /* widget commands */
+ TglswitchInitialize, /* initialization proc */
+ TglswitchCleanup, /* cleanup proc */
+ TglswitchConfigure, /* configure proc */
+ TglswitchPostConfigure, /* postConfigure */
+ TglswitchGetLayout, /* getLayoutProc */
+ TtkWidgetSize, /* sizeProc */
+ TglswitchDoLayout, /* layoutProc */
+ TtkWidgetDisplay /* displayProc */
+};
+
+/*
+ * Initialization.
+ */
+MODULE_SCOPE void TtkToggleswitch_Init(Tcl_Interp *interp)
+{
+ RegisterWidget(interp, "ttk::toggleswitch", &TglswitchWidgetSpec);
+}
diff --git a/generic/ttk/ttkTrack.c b/generic/ttk/ttkTrack.c
index 032a672..cce6259 100644
--- a/generic/ttk/ttkTrack.c
+++ b/generic/ttk/ttkTrack.c
@@ -69,8 +69,9 @@ static void ActivateElement(ElementStateTracker *es, Ttk_Element element)
*/
static void ReleaseElement(ElementStateTracker *es)
{
- if (!es->pressedElement)
+ if (!es->pressedElement) {
return;
+ }
Ttk_ChangeElementState(
es->pressedElement, 0,TTK_STATE_PRESSED|TTK_STATE_ACTIVE);
@@ -78,8 +79,9 @@ static void ReleaseElement(ElementStateTracker *es)
/* Reactivate element under the mouse cursor:
*/
- if (es->activeElement)
- Ttk_ChangeElementState(es->activeElement, TTK_STATE_ACTIVE,0);
+ if (es->activeElement) {
+ Ttk_ChangeElementState(es->activeElement, TTK_STATE_ACTIVE, 0);
+ }
TtkRedisplayWidget(es->corePtr);
}
@@ -138,8 +140,9 @@ ElementStateEventProc(void *clientData, XEvent *ev)
break;
case LeaveNotify:
ActivateElement(es, 0);
- if (ev->xcrossing.mode == NotifyGrab)
+ if (ev->xcrossing.mode == NotifyGrab) {
PressElement(es, 0);
+ }
break;
case EnterNotify:
element = Ttk_IdentifyElement(
@@ -149,8 +152,9 @@ ElementStateEventProc(void *clientData, XEvent *ev)
case ButtonPress:
element = Ttk_IdentifyElement(
layout, ev->xbutton.x, ev->xbutton.y);
- if (element)
+ if (element) {
PressElement(es, element);
+ }
break;
case ButtonRelease:
ReleaseElement(es);
diff --git a/generic/ttk/ttkTreeview.c b/generic/ttk/ttkTreeview.c
index f430aec..ea01b25 100644
--- a/generic/ttk/ttkTreeview.c
+++ b/generic/ttk/ttkTreeview.c
@@ -172,12 +172,15 @@ static void FreeItemCB(void *clientData) { FreeItem((TreeItem *)clientData); }
*/
static void DetachItem(TreeItem *item)
{
- if (item->parent && item->parent->children == item)
+ if (item->parent && item->parent->children == item) {
item->parent->children = item->next;
- if (item->prev)
+ }
+ if (item->prev) {
item->prev->next = item->next;
- if (item->next)
+ }
+ if (item->next) {
item->next->prev = item->prev;
+ }
item->next = item->prev = item->parent = NULL;
}
@@ -210,12 +213,14 @@ static void InsertItem(TreeItem *parent, TreeItem *prev, TreeItem *item)
static TreeItem *NextPreorder(TreeItem *item)
{
- if (item->children)
+ if (item->children) {
return item->children;
+ }
while (!item->next) {
item = item->parent;
- if (!item)
+ if (!item) {
return 0;
+ }
}
return item->next;
}
@@ -404,8 +409,9 @@ static int GetEnumSetFromObj(
Tcl_Size i, objc;
Tcl_Obj **objv;
- if (Tcl_ListObjGetElements(interp, objPtr, &objc, &objv) != TCL_OK)
+ if (Tcl_ListObjGetElements(interp, objPtr, &objc, &objv) != TCL_OK) {
return TCL_ERROR;
+ }
for (i = 0; i < objc; ++i) {
int index;
@@ -668,7 +674,7 @@ static TreeColumn *GetColumn(
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"Column index \"%s\" out of bounds",
Tcl_GetString(columnIDObj)));
- Tcl_SetErrorCode(interp, "TTK", "TREE", "COLBOUND", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "TREE", "COLBOUND", (char *)NULL);
return NULL;
}
@@ -676,7 +682,7 @@ static TreeColumn *GetColumn(
}
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"Invalid column index \"%s\"", Tcl_GetString(columnIDObj)));
- Tcl_SetErrorCode(interp, "TTK", "TREE", "COLUMN", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "TREE", "COLUMN", (char *)NULL);
return NULL;
}
@@ -688,15 +694,15 @@ static TreeColumn *FindColumn(
{
Tcl_WideInt colno;
- if (sscanf(Tcl_GetString(columnIDObj), "#%" TCL_LL_MODIFIER "d", &colno) == 1)
- { /* Display column specification, #n */
+ if (sscanf(Tcl_GetString(columnIDObj), "#%" TCL_LL_MODIFIER "d", &colno) == 1) {
+ /* Display column specification, #n */
if (colno >= 0 && colno < tv->tree.nDisplayColumns) {
return tv->tree.displayColumns[colno];
}
/* else */
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"Column %s out of range", Tcl_GetString(columnIDObj)));
- Tcl_SetErrorCode(interp, "TTK", "TREE", "COLUMN", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "TREE", "COLUMN", (char *)NULL);
return NULL;
}
@@ -716,7 +722,7 @@ static TreeItem *FindItem(
if (!entryPtr) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"Item %s not found", itemName));
- Tcl_SetErrorCode(interp, "TTK", "TREE", "ITEM", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "TREE", "ITEM", (char *)NULL);
return 0;
}
return (TreeItem *)Tcl_GetHashValue(entryPtr);
@@ -876,8 +882,9 @@ static int TreeviewInitDisplayColumns(Tcl_Interp *interp, Treeview *tv)
}
displayColumns[0] = &tv->tree.column0;
- if (tv->tree.displayColumns)
+ if (tv->tree.displayColumns) {
ckfree(tv->tree.displayColumns);
+ }
tv->tree.displayColumns = displayColumns;
tv->tree.nDisplayColumns = ndcols + 1;
@@ -1082,7 +1089,7 @@ static int GetCellFromObj(
if (nElements != 2) {
Tcl_SetObjResult(interp, Tcl_NewStringObj(
"Cell id must be a list of two elements", -1));
- Tcl_SetErrorCode(interp, "TTK", "TREE", "CELL", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "TREE", "CELL", (char *)NULL);
return TCL_ERROR;
}
/* Valid item/column in each pair? */
@@ -1107,7 +1114,7 @@ static int GetCellFromObj(
if (i == tv->tree.nDisplayColumns) { /* specified column unviewable */
Tcl_SetObjResult(interp, Tcl_NewStringObj(
"Cell id must be in a visible column", -1));
- Tcl_SetErrorCode(interp, "TTK", "TREE", "CELL", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "TREE", "CELL", (char *)NULL);
return TCL_ERROR;
}
if (displayColumn != NULL) {
@@ -1347,8 +1354,9 @@ static void TreeviewCleanup(void *recordPtr)
FreeColumn(&tv->tree.column0);
TreeviewFreeColumns(tv);
- if (tv->tree.displayColumns)
+ if (tv->tree.displayColumns) {
ckfree(tv->tree.displayColumns);
+ }
foreachHashEntry(&tv->tree.items, FreeItemCB);
Tcl_DeleteHashTable(&tv->tree.items);
@@ -1370,13 +1378,15 @@ TreeviewConfigure(Tcl_Interp *interp, void *recordPtr, int mask)
unsigned showFlags = tv->tree.showFlags;
if (mask & COLUMNS_CHANGED) {
- if (TreeviewInitColumns(interp, tv) != TCL_OK)
+ if (TreeviewInitColumns(interp, tv) != TCL_OK) {
return TCL_ERROR;
+ }
mask |= DCOLUMNS_CHANGED;
}
if (mask & DCOLUMNS_CHANGED) {
- if (TreeviewInitDisplayColumns(interp, tv) != TCL_OK)
+ if (TreeviewInitDisplayColumns(interp, tv) != TCL_OK) {
return TCL_ERROR;
+ }
}
if (mask & COLUMNS_CHANGED) {
CellSelectionClear(tv);
@@ -1385,14 +1395,14 @@ TreeviewConfigure(Tcl_Interp *interp, void *recordPtr, int mask)
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"\"#%" TCL_SIZE_MODIFIER "d\" is out of range",
tv->tree.nTitleColumns));
- Tcl_SetErrorCode(interp, "TTK", "TREE", "TITLECOLUMNS", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "TREE", "TITLECOLUMNS", (char *)NULL);
return TCL_ERROR;
}
if (tv->tree.nTitleItems < 0) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"\"%" TCL_SIZE_MODIFIER "d\" is out of range",
tv->tree.nTitleItems));
- Tcl_SetErrorCode(interp, "TTK", "TREE", "TITLEITEMS", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "TREE", "TITLEITEMS", (char *)NULL);
return TCL_ERROR;
}
if (mask & SCROLLCMD_CHANGED) {
@@ -1441,8 +1451,9 @@ static int ConfigureItem(
*/
if (item->valuesObj) {
Tcl_Size unused;
- if (Tcl_ListObjLength(interp, item->valuesObj, &unused) != TCL_OK)
+ if (Tcl_ListObjLength(interp, item->valuesObj, &unused) != TCL_OK) {
goto error;
+ }
}
/* Check -height
@@ -1450,7 +1461,7 @@ static int ConfigureItem(
if (item->height < 1) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"Invalid item height %d", item->height));
- Tcl_SetErrorCode(interp, "TTK", "TREE", "HEIGHT", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "TREE", "HEIGHT", (char *)NULL);
goto error;
}
@@ -1480,12 +1491,14 @@ static int ConfigureItem(
*/
if (item->openObj) {
int isOpen;
- if (Tcl_GetBooleanFromObj(interp, item->openObj, &isOpen) != TCL_OK)
+ if (Tcl_GetBooleanFromObj(interp, item->openObj, &isOpen) != TCL_OK) {
goto error;
- if (isOpen)
+ }
+ if (isOpen) {
item->state |= TTK_STATE_OPEN;
- else
+ } else {
item->state &= ~TTK_STATE_OPEN;
+ }
}
/* All OK.
@@ -1530,7 +1543,7 @@ static int ConfigureColumn(
if (mask & READONLY_OPTION) {
Tcl_SetObjResult(interp, Tcl_NewStringObj(
"Attempt to change read-only option", -1));
- Tcl_SetErrorCode(interp, "TTK", "TREE", "READONLY", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "TREE", "READONLY", (char *)NULL);
goto error;
}
@@ -1889,8 +1902,9 @@ static Ttk_Layout GetSublayout(
interp, themePtr, parentLayout, layoutName, optionTable);
if (newLayout) {
- if (*layoutPtr)
+ if (*layoutPtr) {
Ttk_FreeLayout(*layoutPtr);
+ }
*layoutPtr = newLayout;
}
return newLayout;
@@ -2036,10 +2050,12 @@ static int TreeviewSize(void *clientData, int *widthPtr, int *heightPtr)
static Ttk_State ItemState(Treeview *tv, TreeItem *item)
{
Ttk_State state = tv->core.state | item->state;
- if (!item->children)
+ if (!item->children) {
state |= TTK_STATE_LEAF;
- if (item != tv->tree.focus)
+ }
+ if (item != tv->tree.focus) {
state &= ~TTK_STATE_FOCUS;
+ }
return state;
}
@@ -2591,7 +2607,7 @@ static int AncestryCheck(
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"Cannot insert %s as descendant of %s",
ItemName(tv, item), ItemName(tv, parent)));
- Tcl_SetErrorCode(interp, "TTK", "TREE", "ANCESTRY", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "TREE", "ANCESTRY", (char *)NULL);
return 0;
}
p = p->parent;
@@ -2653,8 +2669,9 @@ static int TreeviewChildrenCommand(
TreeItem *child;
int i;
- if (!newChildren)
+ if (!newChildren) {
return TCL_ERROR;
+ }
/* Sanity-check:
*/
@@ -2935,10 +2952,12 @@ static int TreeviewHorribleIdentify(
done:
result = Tcl_NewListObj(0,0);
Tcl_ListObjAppendElement(NULL, result, Tcl_NewStringObj(what, -1));
- if (item)
+ if (item) {
Tcl_ListObjAppendElement(NULL, result, ItemID(tv, item));
- if (detail)
+ }
+ if (detail) {
Tcl_ListObjAppendElement(NULL, result, Tcl_NewStringObj(detail, -1));
+ }
Tcl_SetObjResult(interp, result);
return TCL_OK;
@@ -3170,8 +3189,9 @@ static int TreeviewSetCommand(
Tcl_WrongNumArgs(interp, 2, objv, "item ?column ?value??");
return TCL_ERROR;
}
- if (!(item = FindItem(interp, tv, objv[2])))
+ if (!(item = FindItem(interp, tv, objv[2]))) {
return TCL_ERROR;
+ }
/* Make sure -values exists:
*/
@@ -3199,14 +3219,15 @@ static int TreeviewSetCommand(
/* else -- get or set column
*/
- if (!(column = FindColumn(interp, tv, objv[3])))
+ if (!(column = FindColumn(interp, tv, objv[3]))) {
return TCL_ERROR;
+ }
if (column == &tv->tree.column0) {
/* @@@ Maybe set -text here instead? */
Tcl_SetObjResult(interp, Tcl_NewStringObj(
"Display column #0 cannot be set", -1));
- Tcl_SetErrorCode(interp, "TTK", "TREE", "COLUMN_0", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "TREE", "COLUMN_0", (char *)NULL);
return TCL_ERROR;
}
@@ -3277,8 +3298,9 @@ static int TreeviewInsertCommand(
sibling = EndPosition(tv, parent);
} else {
int index;
- if (Tcl_GetIntFromObj(interp, objv[3], &index) != TCL_OK)
+ if (Tcl_GetIntFromObj(interp, objv[3], &index) != TCL_OK) {
return TCL_ERROR;
+ }
sibling = InsertPosition(parent, index);
}
@@ -3294,7 +3316,7 @@ static int TreeviewInsertCommand(
if (!isNew) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"Item %s already exists", itemName));
- Tcl_SetErrorCode(interp, "TTK", "TREE", "ITEM_EXISTS", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "TREE", "ITEM_EXISTS", (char *)NULL);
return TCL_ERROR;
}
objc -= 2; objv += 2;
@@ -3354,7 +3376,7 @@ static int TreeviewDetachCommand(
if (items[i] == tv->tree.root) {
Tcl_SetObjResult(interp, Tcl_NewStringObj(
"Cannot detach root item", -1));
- Tcl_SetErrorCode(interp, "TTK", "TREE", "ROOT", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "TREE", "ROOT", (char *)NULL);
ckfree(items);
return TCL_ERROR;
}
@@ -3443,7 +3465,7 @@ static int TreeviewDeleteCommand(
ckfree(items);
Tcl_SetObjResult(interp, Tcl_NewStringObj(
"Cannot delete root item", -1));
- Tcl_SetErrorCode(interp, "TTK", "TREE", "ROOT", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "TREE", "ROOT", (char *)NULL);
return TCL_ERROR;
}
}
@@ -3468,10 +3490,12 @@ static int TreeviewDeleteCommand(
*/
while (delq) {
TreeItem *next = delq->next;
- if (tv->tree.focus == delq)
+ if (tv->tree.focus == delq) {
tv->tree.focus = 0;
- if (tv->tree.endPtr == delq)
+ }
+ if (tv->tree.endPtr == delq) {
tv->tree.endPtr = 0;
+ }
FreeItem(delq);
delq = next;
}
@@ -3676,7 +3700,7 @@ static int TreeviewDragCommand(
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"column %s is not displayed", Tcl_GetString(objv[2])));
- Tcl_SetErrorCode(interp, "TTK", "TREE", "COLUMN_INVISIBLE", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "TREE", "COLUMN_INVISIBLE", (char *)NULL);
return TCL_ERROR;
}
@@ -3712,8 +3736,9 @@ static int TreeviewFocusCommand(
return TCL_OK;
} else if (objc == 3) {
TreeItem *newFocus = FindItem(interp, tv, objv[2]);
- if (!newFocus)
+ if (!newFocus) {
return TCL_ERROR;
+ }
tv->tree.focus = newFocus;
TtkRedisplayWidget(&tv->core);
return TCL_OK;
@@ -3742,8 +3767,9 @@ static int TreeviewSelectionCommand(
if (objc == 2) {
Tcl_Obj *result = Tcl_NewListObj(0,0);
for (item = tv->tree.root->children; item; item = NextPreorder(item)) {
- if (item->state & TTK_STATE_SELECTED)
+ if (item->state & TTK_STATE_SELECTED) {
Tcl_ListObjAppendElement(NULL, result, ItemID(tv, item));
+ }
}
Tcl_SetObjResult(interp, result);
return TCL_OK;
@@ -4106,7 +4132,7 @@ static int TreeviewTagBindCommand(
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"unsupported event %s\nonly key, button, motion, and"
" virtual events supported", sequence));
- Tcl_SetErrorCode(interp, "TTK", "TREE", "BIND_EVENTS", NULL);
+ Tcl_SetErrorCode(interp, "TTK", "TREE", "BIND_EVENTS", (char *)NULL);
return TCL_ERROR;
}
}
diff --git a/generic/ttk/ttkWidget.c b/generic/ttk/ttkWidget.c
index 3c345d2..40b8ee1 100644
--- a/generic/ttk/ttkWidget.c
+++ b/generic/ttk/ttkWidget.c
@@ -202,8 +202,9 @@ WidgetInstanceObjCmdDeleted(void *clientData)
{
WidgetCore *corePtr = (WidgetCore *)clientData;
corePtr->widgetCmd = NULL;
- if (corePtr->tkwin != NULL)
+ if (corePtr->tkwin != NULL) {
Tk_DestroyWindow(corePtr->tkwin);
+ }
}
/* DestroyWidget --
@@ -288,10 +289,11 @@ static void CoreEventProc(void *clientData, XEvent *eventPtr)
|| eventPtr->xfocus.detail == NotifyAncestor
|| eventPtr->xfocus.detail == NotifyNonlinear)
{
- if (eventPtr->type == FocusIn)
+ if (eventPtr->type == FocusIn) {
corePtr->state |= TTK_STATE_FOCUS;
- else
+ } else {
corePtr->state &= ~TTK_STATE_FOCUS;
+ }
TtkRedisplayWidget(corePtr);
}
break;
@@ -367,8 +369,9 @@ int TtkWidgetConstructorObjCmd(
tkwin = Tk_CreateWindowFromPath(
interp, Tk_MainWindow(interp), Tcl_GetString(objv[1]), NULL);
- if (tkwin == NULL)
+ if (tkwin == NULL) {
return TCL_ERROR;
+ }
/*
* Allocate and initialize the widget record.
@@ -411,13 +414,16 @@ int TtkWidgetConstructorObjCmd(
} else {
Tk_FreeSavedOptions(&savedOptions);
}
- if (widgetSpec->configureProc(interp, recordPtr, ~0) != TCL_OK)
+ if (widgetSpec->configureProc(interp, recordPtr, ~0) != TCL_OK) {
goto error;
- if (widgetSpec->postConfigureProc(interp, recordPtr, ~0) != TCL_OK)
+ }
+ if (widgetSpec->postConfigureProc(interp, recordPtr, ~0) != TCL_OK) {
goto error;
+ }
- if (WidgetDestroyed(corePtr))
+ if (WidgetDestroyed(corePtr)) {
goto error;
+ }
Tcl_Release(corePtr);
@@ -453,11 +459,13 @@ Ttk_Layout TtkWidgetGetLayout(
WidgetCore *corePtr = (WidgetCore *)recordPtr;
const char *styleName = 0;
- if (corePtr->styleObj)
+ if (corePtr->styleObj) {
styleName = Tcl_GetString(corePtr->styleObj);
+ }
- if (!styleName || *styleName == '\0')
+ if (!styleName || *styleName == '\0') {
styleName = corePtr->widgetSpec->className;
+ }
return Ttk_CreateLayout(interp, themePtr, styleName,
recordPtr, corePtr->optionTable, corePtr->tkwin);
@@ -483,17 +491,20 @@ Ttk_Layout TtkWidgetGetOrientedLayout(
/* Prefix:
*/
Ttk_GetOrientFromObj(NULL, orientObj, &orient);
- if (orient == TTK_ORIENT_HORIZONTAL)
+ if (orient == TTK_ORIENT_HORIZONTAL) {
Tcl_DStringAppend(&styleName, "Horizontal.", TCL_INDEX_NONE);
- else
+ } else {
Tcl_DStringAppend(&styleName, "Vertical.", TCL_INDEX_NONE);
+ }
/* Add base style name:
*/
- if (corePtr->styleObj)
+ if (corePtr->styleObj) {
baseStyleName = Tcl_GetString(corePtr->styleObj);
- if (!baseStyleName || *baseStyleName == '\0')
+ }
+ if (!baseStyleName || *baseStyleName == '\0') {
baseStyleName = corePtr->widgetSpec->className;
+ }
Tcl_DStringAppend(&styleName, baseStyleName, TCL_INDEX_NONE);
@@ -598,8 +609,9 @@ int TtkWidgetCgetCommand(
}
result = Tk_GetOptionValue(interp, recordPtr,
corePtr->optionTable, objv[2], corePtr->tkwin);
- if (result == NULL)
+ if (result == NULL) {
return TCL_ERROR;
+ }
Tcl_SetObjResult(interp, result);
return TCL_OK;
}
@@ -626,8 +638,9 @@ int TtkWidgetConfigureCommand(
status = Tk_SetOptions(interp, recordPtr,
corePtr->optionTable, objc - 2, objv + 2,
corePtr->tkwin, &savedOptions, &mask);
- if (status != TCL_OK)
+ if (status != TCL_OK) {
return status;
+ }
if (mask & READONLY_OPTION) {
Tcl_SetObjResult(interp, Tcl_NewStringObj(
@@ -695,8 +708,9 @@ int TtkWidgetStateCommand(
return TCL_ERROR;
}
status = Ttk_GetStateSpecFromObj(interp, objv[2], &spec);
- if (status != TCL_OK)
+ if (status != TCL_OK) {
return status;
+ }
oldState = corePtr->state;
corePtr->state = Ttk_ModifyState(corePtr->state, &spec);
@@ -729,8 +743,9 @@ int TtkWidgetInstateCommand(
return TCL_ERROR;
}
status = Ttk_GetStateSpecFromObj(interp, objv[2], &spec);
- if (status != TCL_OK)
+ if (status != TCL_OK) {
return status;
+ }
if (objc == 3) {
Tcl_SetObjResult(interp,