diff options
Diffstat (limited to 'generic')
-rw-r--r-- | generic/tkImgPhoto.c | 2 | ||||
-rw-r--r-- | generic/tkMessage.c | 10 | ||||
-rw-r--r-- | generic/ttk/ttkButton.c | 4 | ||||
-rw-r--r-- | generic/ttk/ttkEntry.c | 11 | ||||
-rw-r--r-- | generic/ttk/ttkManager.c | 19 | ||||
-rw-r--r-- | generic/ttk/ttkManager.h | 2 | ||||
-rw-r--r-- | generic/ttk/ttkNotebook.c | 32 | ||||
-rw-r--r-- | generic/ttk/ttkPanedwindow.c | 6 | ||||
-rw-r--r-- | generic/ttk/ttkTreeview.c | 68 |
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 }, |