summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
Diffstat (limited to 'generic')
-rw-r--r--generic/tkImgPhoto.c2
-rw-r--r--generic/tkMessage.c10
-rw-r--r--generic/ttk/ttkButton.c4
-rw-r--r--generic/ttk/ttkEntry.c11
-rw-r--r--generic/ttk/ttkManager.c19
-rw-r--r--generic/ttk/ttkManager.h2
-rw-r--r--generic/ttk/ttkNotebook.c32
-rw-r--r--generic/ttk/ttkPanedwindow.c6
-rw-r--r--generic/ttk/ttkTreeview.c68
9 files changed, 80 insertions, 74 deletions
diff --git a/generic/tkImgPhoto.c b/generic/tkImgPhoto.c
index cbd91c4..0c38cc4 100644
--- a/generic/tkImgPhoto.c
+++ b/generic/tkImgPhoto.c
@@ -620,7 +620,7 @@ ImgPhotoCmd(
return TCL_ERROR;
}
Tk_PhotoGetImage(srcHandle, &block);
- if ((options.fromX2 > block.width) || (options.fromY2 > block.height)
+ if ((options.fromX > block.width) || (options.fromY > block.height)
|| (options.fromX2 > block.width)
|| (options.fromY2 > block.height)) {
Tcl_SetObjResult(interp, Tcl_NewStringObj(
diff --git a/generic/tkMessage.c b/generic/tkMessage.c
index 2d2f73e..ec44fcb 100644
--- a/generic/tkMessage.c
+++ b/generic/tkMessage.c
@@ -547,17 +547,9 @@ MessageWorldChanged(
Tk_GetFontMetrics(msgPtr->tkfont, &fm);
if (msgPtr->padX < 0) {
msgPtr->padX = fm.ascent / 2;
- if (msgPtr->padXPtr) {
- Tcl_DecrRefCount(msgPtr->padXPtr);
- msgPtr->padXPtr = NULL;
- }
}
- if (msgPtr->padY == -1) {
+ if (msgPtr->padY < 0) {
msgPtr->padY = fm.ascent / 4;
- if (msgPtr->padYPtr) {
- Tcl_DecrRefCount(msgPtr->padYPtr);
- msgPtr->padYPtr = NULL;
- }
}
/*
diff --git a/generic/ttk/ttkButton.c b/generic/ttk/ttkButton.c
index ce1f323..af72ea4 100644
--- a/generic/ttk/ttkButton.c
+++ b/generic/ttk/ttkButton.c
@@ -229,7 +229,6 @@ typedef struct
Tcl_Obj *borderWidthObj;
Tcl_Obj *reliefObj;
Tcl_Obj *anchorObj;
- Tcl_Obj *justifyObj;
Tcl_Obj *wrapLengthObj;
} LabelPart;
@@ -260,9 +259,6 @@ static const Tk_OptionSpec LabelOptionSpecs[] =
{TK_OPTION_ANCHOR, "-anchor", "anchor", "Anchor",
"w", offsetof(Label,label.anchorObj), TCL_INDEX_NONE,
0, 0, GEOMETRY_CHANGED},
- {TK_OPTION_JUSTIFY, "-justify", "justify", "Justify",
- "left", offsetof(Label, label.justifyObj), TCL_INDEX_NONE,
- 0,0,GEOMETRY_CHANGED },
{TK_OPTION_PIXELS, "-wraplength", "wrapLength", "WrapLength",
NULL, offsetof(Label, label.wrapLengthObj), TCL_INDEX_NONE,
TK_OPTION_NULL_OK,0,GEOMETRY_CHANGED /*SB: SIZE_CHANGED*/ },
diff --git a/generic/ttk/ttkEntry.c b/generic/ttk/ttkEntry.c
index 85d65e9..8c023d4 100644
--- a/generic/ttk/ttkEntry.c
+++ b/generic/ttk/ttkEntry.c
@@ -1257,10 +1257,15 @@ static void EntryDisplay(void *clientData, Drawable d)
Tk_GetPixelsFromObj(NULL, tkwin, es.selBorderWidthObj, &borderWidth);
if (selBorder) {
- Tk_Fill3DRectangle(tkwin, d, selBorder,
+ int selWidth;
+ int textareaEnd = textarea.x + textarea.width;
+ if (selEndX > textareaEnd)
+ selEndX = textareaEnd;
+ selWidth = selEndX - selStartX + 2 * borderWidth;
+ if (selWidth > 0)
+ Tk_Fill3DRectangle(tkwin, d, selBorder,
selStartX - borderWidth, entryPtr->entry.layoutY - borderWidth,
- selEndX - selStartX + 2*borderWidth,
- entryPtr->entry.layoutHeight + 2*borderWidth,
+ selWidth, entryPtr->entry.layoutHeight + 2*borderWidth,
borderWidth, TK_RELIEF_RAISED);
}
}
diff --git a/generic/ttk/ttkManager.c b/generic/ttk/ttkManager.c
index 6988c51..1ea5f54 100644
--- a/generic/ttk/ttkManager.c
+++ b/generic/ttk/ttkManager.c
@@ -434,17 +434,21 @@ Tcl_Size Ttk_ContentIndex(Ttk_Manager *mgr, Tk_Window window)
return -1;
}
-/* ++ Ttk_GetContentIndexFromObj(interp, mgr, objPtr, indexPtr) --
+/* ++ Ttk_GetContentIndexFromObj(interp, mgr, objPtr, lastOK, indexPtr) --
* Return the index of the content window specified by objPtr.
* Content windows may be specified as an integer index or
* as the name of the managed window.
*
+ * The parameter lastOK should be non-0 if the resolved index can be equal to
+ * the current size (i.e. one more than the current highest index) and 0
+ * otherwise.
+ *
* Returns:
* Standard Tcl completion code. Leaves an error message in case of error.
*/
int Ttk_GetContentIndexFromObj(
- Tcl_Interp *interp, Ttk_Manager *mgr, Tcl_Obj *objPtr, Tcl_Size *indexPtr)
+ Tcl_Interp *interp, Ttk_Manager *mgr, Tcl_Obj *objPtr, int lastOK, Tcl_Size *indexPtr)
{
const char *string = Tcl_GetString(objPtr);
Tcl_Size index = 0;
@@ -452,10 +456,15 @@ int Ttk_GetContentIndexFromObj(
/* Try interpreting as an integer first:
*/
- if (TkGetIntForIndex(objPtr, mgr->nContent - 1, 1, &index) == TCL_OK) {
- if (index < 0 || index > mgr->nContent) {
+ if (TkGetIntForIndex(objPtr, mgr->nContent - 1, lastOK, &index) == TCL_OK) {
+ /*
+ * Note despite passing lastOK above, we still need to check here
+ * as well as TkGetIntForIndex only uses lastOK for end-relative indices,
+ * not integers.
+ */
+ if (index < 0 || (index - !!lastOK) >= mgr->nContent) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "Managed window index %d out of bounds", (int)index));
+ "Managed window index \"%s\" out of bounds", Tcl_GetString(objPtr)));
Tcl_SetErrorCode(interp, "TTK", "MANAGED", "INDEX", NULL);
return TCL_ERROR;
}
diff --git a/generic/ttk/ttkManager.h b/generic/ttk/ttkManager.h
index 7b59807..78b9b0b 100644
--- a/generic/ttk/ttkManager.h
+++ b/generic/ttk/ttkManager.h
@@ -81,7 +81,7 @@ MODULE_SCOPE Tcl_Size Ttk_ContentIndex(Ttk_Manager *, Tk_Window);
#define Ttk_GetSlaveIndexFromObj Ttk_GetContentIndexFromObj
MODULE_SCOPE int Ttk_GetContentIndexFromObj(
- Tcl_Interp *, Ttk_Manager *, Tcl_Obj *, Tcl_Size *indexPtr);
+ Tcl_Interp *, Ttk_Manager *, Tcl_Obj *, int lastOK, Tcl_Size *indexPtr);
/* Accessor functions:
*/
diff --git a/generic/ttk/ttkNotebook.c b/generic/ttk/ttkNotebook.c
index 416ee7f..7c7e6a5 100644
--- a/generic/ttk/ttkNotebook.c
+++ b/generic/ttk/ttkNotebook.c
@@ -368,7 +368,7 @@ static void TabrowSize(
Ttk_RebindSublayout(tabLayout, tab);
Ttk_LayoutSize(tabLayout,tabState,&tab->width,&tab->height);
- tab->width = MAX(tab->width, minTabWidth);
+ tab->width = MAX(tab->width, minTabWidth);
if (orient == TTK_ORIENT_HORIZONTAL) {
tabrowHeight = MAX(tabrowHeight, tab->height);
@@ -863,7 +863,7 @@ static int FindTabIndex(
/* ... or integer index or content window name:
*/
if (Ttk_GetContentIndexFromObj(
- interp, nb->notebook.mgr, objPtr, index_rtn) == TCL_OK)
+ interp, nb->notebook.mgr, objPtr, 1, index_rtn) == TCL_OK)
{
return TCL_OK;
}
@@ -890,14 +890,14 @@ static int GetTabIndex(
int status = FindTabIndex(interp, nb, objPtr, index_rtn);
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)));
+ "Tab index \"%s\" out of bounds", Tcl_GetString(objPtr)));
Tcl_SetErrorCode(interp, "TTK", "NOTEBOOK", "INDEX", NULL);
return TCL_ERROR;
}
if (status == TCL_OK && *index_rtn < 0) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "tab '%s' not found", Tcl_GetString(objPtr)));
+ "Tab '%s' not found", Tcl_GetString(objPtr)));
Tcl_SetErrorCode(interp, "TTK", "NOTEBOOK", "TAB", NULL);
status = TCL_ERROR;
}
@@ -962,11 +962,6 @@ static int NotebookInsertCommand(
return TCL_ERROR;
}
- if (TCL_OK != Ttk_GetContentIndexFromObj(
- interp, nb->notebook.mgr, objv[2], &destIndex)) {
- return TCL_ERROR;
- }
-
if (Tcl_GetString(objv[3])[0] == '.') {
/* Window name -- could be new or existing content window.
*/
@@ -979,16 +974,25 @@ static int NotebookInsertCommand(
srcIndex = Ttk_ContentIndex(nb->notebook.mgr, window);
if (srcIndex < 0) { /* New content window */
+ if (TCL_OK != Ttk_GetContentIndexFromObj(
+ interp, nb->notebook.mgr, objv[2], 1, &destIndex)) {
+ return TCL_ERROR;
+ }
return AddTab(interp, nb, destIndex, window, objc-4,objv+4);
}
} else if (Ttk_GetContentIndexFromObj(
- interp, nb->notebook.mgr, objv[3], &srcIndex) != TCL_OK)
+ interp, nb->notebook.mgr, objv[3], 0, &srcIndex) != TCL_OK)
{
return TCL_ERROR;
} else if (srcIndex >= Ttk_NumberContent(nb->notebook.mgr)) {
srcIndex = Ttk_NumberContent(nb->notebook.mgr) - 1;
}
+ if (TCL_OK != Ttk_GetContentIndexFromObj(
+ interp, nb->notebook.mgr, objv[2], 0, &destIndex)) {
+ return TCL_ERROR;
+ }
+
/* Move existing content window:
*/
if (ConfigureTab(interp, nb,
@@ -1068,7 +1072,7 @@ static int NotebookHideCommand(
if (index == nb->notebook.currentIndex) {
SelectNearestTab(nb);
} else {
- TtkRedisplayWidget(&nb->core);
+ TtkRedisplayWidget(&nb->core);
}
return TCL_OK;
@@ -1149,9 +1153,9 @@ static int NotebookIndexCommand(
status = FindTabIndex(interp, nb, objv[2], &index);
if (status == TCL_OK) {
- if (index >= 0) {
- Tcl_SetObjResult(interp, TkNewIndexObj(index));
- }
+ if (index >= 0) {
+ Tcl_SetObjResult(interp, TkNewIndexObj(index));
+ }
}
return status;
diff --git a/generic/ttk/ttkPanedwindow.c b/generic/ttk/ttkPanedwindow.c
index f0ed4de..5a97ca8 100644
--- a/generic/ttk/ttkPanedwindow.c
+++ b/generic/ttk/ttkPanedwindow.c
@@ -667,7 +667,7 @@ static int PanedInsertCommand(
}
if (TCL_OK != Ttk_GetContentIndexFromObj(
- interp,pw->paned.mgr, objv[2], &destIndex))
+ interp,pw->paned.mgr, objv[2], 1, &destIndex))
{
return TCL_ERROR;
}
@@ -702,7 +702,7 @@ static int PanedForgetCommand(
}
if (TCL_OK != Ttk_GetContentIndexFromObj(
- interp, pw->paned.mgr, objv[2], &paneIndex))
+ interp, pw->paned.mgr, objv[2], 0, &paneIndex))
{
return TCL_ERROR;
} else if (paneIndex >= Ttk_NumberContent(pw->paned.mgr)) {
@@ -783,7 +783,7 @@ static int PanedPaneCommand(
}
if (TCL_OK != Ttk_GetContentIndexFromObj(
- interp,pw->paned.mgr, objv[2], &paneIndex))
+ interp,pw->paned.mgr, objv[2], 0, &paneIndex))
{
return TCL_ERROR;
} else if (paneIndex >= Ttk_NumberContent(pw->paned.mgr)) {
diff --git a/generic/ttk/ttkTreeview.c b/generic/ttk/ttkTreeview.c
index 3e950ee..5106909 100644
--- a/generic/ttk/ttkTreeview.c
+++ b/generic/ttk/ttkTreeview.c
@@ -675,7 +675,7 @@ static TreeColumn *GetColumn(
return tv->tree.columns + columnIndex;
}
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "Invalid column index %s", Tcl_GetString(columnIDObj)));
+ "Invalid column index \"%s\"", Tcl_GetString(columnIDObj)));
Tcl_SetErrorCode(interp, "TTK", "TREE", "COLUMN", NULL);
return NULL;
}
@@ -1382,16 +1382,16 @@ TreeviewConfigure(Tcl_Interp *interp, void *recordPtr, int mask)
CellSelectionClear(tv);
}
if (tv->tree.nTitleColumns < 0) {
- Tcl_SetObjResult(interp, Tcl_ObjPrintf(
- "\"#%" TCL_SIZE_MODIFIER "d\" is out of range",
- tv->tree.nTitleColumns));
+ Tcl_SetObjResult(interp, Tcl_ObjPrintf(
+ "\"#%" TCL_SIZE_MODIFIER "d\" is out of range",
+ tv->tree.nTitleColumns));
Tcl_SetErrorCode(interp, "TTK", "TREE", "TITLECOLUMNS", 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_SetObjResult(interp, Tcl_ObjPrintf(
+ "\"%" TCL_SIZE_MODIFIER "d\" is out of range",
+ tv->tree.nTitleItems));
Tcl_SetErrorCode(interp, "TTK", "TREE", "TITLEITEMS", NULL);
return TCL_ERROR;
}
@@ -1541,10 +1541,10 @@ static int ConfigureColumn(
if (mask & GEOMETRY_CHANGED) {
if (!Tk_IsMapped(tv->core.tkwin)) {
TtkResizeWidget(&tv->core);
- } else {
+ } else {
RecomputeSlack(tv);
ResizeColumns(tv, TreeWidth(tv));
- }
+ }
}
TtkRedisplayWidget(&tv->core);
@@ -1974,13 +1974,13 @@ static void TreeviewDoLayout(void *clientData)
last = tv->tree.yscroll.first + visibleRows - tv->tree.titleRows;
total = tv->tree.totalRows - tv->tree.titleRows;
if (tv->tree.treeArea.height % tv->tree.rowHeight) {
- /* When the treeview height doesn't correspond to an exact number
- * of rows, the last row count must be incremented to draw a
- * partial row at the bottom. The total row count must also be
- * incremented to be able to scroll all the way to the bottom.
- */
- last++;
- total++;
+ /* When the treeview height doesn't correspond to an exact number
+ * of rows, the last row count must be incremented to draw a
+ * partial row at the bottom. The total row count must also be
+ * incremented to be able to scroll all the way to the bottom.
+ */
+ last++;
+ total++;
}
TtkScrolled(tv->tree.yscrollHandle, first, last, total);
}
@@ -2332,7 +2332,7 @@ static void DrawItem(
displayItemUsed);
}
- displayItem.anchorObj = tv->tree.column0.anchorObj;
+ displayItem.anchorObj = tv->tree.column0.anchorObj;
Tk_GetAnchorFromObj(NULL, column->anchorObj, &textAnchor);
displayItemUsed->textObj = item->textObj;
/* Item's image can be null, and may come from the tag */
@@ -2392,7 +2392,7 @@ static void DrawForest(
Treeview *tv, TreeItem *item, Drawable d, int depth)
{
while (item) {
- DrawSubtree(tv, item, d, depth);
+ DrawSubtree(tv, item, d, depth);
item = item->next;
}
}
@@ -2804,8 +2804,8 @@ static int TreeviewHorribleIdentify(
BoundingBox(tv, item, NULL, &itemBox);
PrepareItem(tv, item, &displayItem, state);
- if (item->textObj) { displayItem.textObj = item->textObj; }
- if (item->imageObj) { displayItem.imageObj = item->imageObj; }
+ if (item->textObj) { displayItem.textObj = item->textObj; }
+ if (item->imageObj) { displayItem.imageObj = item->imageObj; }
Ttk_RebindSublayout(layout, &displayItem);
Ttk_PlaceLayout(layout, state, itemBox);
element = Ttk_IdentifyElement(layout, x, y);
@@ -2862,7 +2862,7 @@ static int TreeviewIdentifyCommand(
if (Tcl_GetIndexFromObjStruct(interp, objv[2], submethodStrings,
sizeof(char *), "command", TCL_EXACT, &submethod) != TCL_OK
- || Tk_GetPixelsFromObj(interp, tv->core.tkwin, objv[3], &x) != TCL_OK
+ || Tk_GetPixelsFromObj(interp, tv->core.tkwin, objv[3], &x) != TCL_OK
|| Tk_GetPixelsFromObj(interp, tv->core.tkwin, objv[4], &y) != TCL_OK
) {
return TCL_ERROR;
@@ -2932,8 +2932,8 @@ static int TreeviewIdentifyCommand(
}
state = ItemState(tv, item);
PrepareItem(tv, item, &displayItem, state);
- if (item->textObj) { displayItem.textObj = item->textObj; }
- if (item->imageObj) { displayItem.imageObj = item->imageObj; }
+ if (item->textObj) { displayItem.textObj = item->textObj; }
+ if (item->imageObj) { displayItem.imageObj = item->imageObj; }
Ttk_RebindSublayout(layout, &displayItem);
Ttk_PlaceLayout(layout, state, bbox);
element = Ttk_IdentifyElement(layout, x, y);
@@ -3342,9 +3342,9 @@ static int TreeviewDeleteCommand(
*/
delq = 0;
for (i = 0; items[i]; ++i) {
- if (items[i]->state & TTK_STATE_SELECTED) {
- selChange = 1;
- } else if (items[i]->selObj != NULL) {
+ if (items[i]->state & TTK_STATE_SELECTED) {
+ selChange = 1;
+ } else if (items[i]->selObj != NULL) {
Tcl_Size length;
Tcl_ListObjLength(interp, items[i]->selObj, &length);
if (length > 0) {
@@ -3368,7 +3368,7 @@ static int TreeviewDeleteCommand(
ckfree(items);
if (selChange) {
- Tk_SendVirtualEvent(tv->core.tkwin, "TreeviewSelect", NULL);
+ Tk_SendVirtualEvent(tv->core.tkwin, "TreeviewSelect", NULL);
}
tv->tree.rowPosNeedsUpdate = 1;
TtkRedisplayWidget(&tv->core);
@@ -4037,7 +4037,7 @@ static int TreeviewTagDeleteCommand(
tag = Ttk_GetTagFromObj(tagTable, objv[3]);
/* remove the tag from all cells and items */
while (item) {
- RemoveTagFromCellsAtItem(item, tag);
+ RemoveTagFromCellsAtItem(item, tag);
RemoveTag(item, tag);
item = NextPreorder(item);
}
@@ -4285,9 +4285,9 @@ static void RemoveTagFromCellsAtItem(TreeItem *item, Ttk_Tag tag)
Tcl_Size i;
for (i = 0; i < item->nTagSets; i++) {
- if (item->cellTagSets[i] != NULL) {
- Ttk_TagSetRemove(item->cellTagSets[i], tag);
- }
+ if (item->cellTagSets[i] != NULL) {
+ Ttk_TagSetRemove(item->cellTagSets[i], tag);
+ }
}
}
@@ -4366,7 +4366,7 @@ static int TreeviewCtagRemoveCommand(
} else {
item = tv->tree.root;
while (item) {
- RemoveTagFromCellsAtItem(item, tag);
+ RemoveTagFromCellsAtItem(item, tag);
item = NextPreorder(item);
}
}
@@ -4400,7 +4400,7 @@ static const Ttk_Ensemble TreeviewTagCommands[] = {
*/
static const Ttk_Ensemble TreeviewCommands[] = {
{ "bbox", TreeviewBBoxCommand,0 },
- { "cellselection" , TreeviewCellSelectionCommand,0 },
+ { "cellselection", TreeviewCellSelectionCommand,0 },
{ "children", TreeviewChildrenCommand,0 },
{ "cget", TtkWidgetCgetCommand,0 },
{ "column", TreeviewColumnCommand,0 },
@@ -4423,7 +4423,7 @@ static const Ttk_Ensemble TreeviewCommands[] = {
{ "parent", TreeviewParentCommand,0 },
{ "prev", TreeviewPrevCommand,0 },
{ "see", TreeviewSeeCommand,0 },
- { "selection" , TreeviewSelectionCommand,0 },
+ { "selection", TreeviewSelectionCommand,0 },
{ "set", TreeviewSetCommand,0 },
{ "state", TtkWidgetStateCommand,0 },
{ "style", TtkWidgetStyleCommand,0 },