diff options
Diffstat (limited to 'generic/tkGrid.c')
-rw-r--r-- | generic/tkGrid.c | 547 |
1 files changed, 232 insertions, 315 deletions
diff --git a/generic/tkGrid.c b/generic/tkGrid.c index 2a88b76..ccdde19 100644 --- a/generic/tkGrid.c +++ b/generic/tkGrid.c @@ -241,13 +241,10 @@ typedef struct UniformGroup { * size. 0 means if this window is a master then * Tk will set its requested size to fit the * needs of its slaves. - * ALLOCED_MASTER 1 means that Grid has allocated itself as - * geometry master for this window. */ #define REQUESTED_RELAYOUT 1 #define DONT_PROPAGATE 2 -#define ALLOCED_MASTER 4 /* * Prototypes for procedures used only in this file: @@ -261,31 +258,31 @@ static void ArrangeGrid(ClientData clientData); static int CheckSlotData(Gridder *masterPtr, int slot, int slotType, int checkOnly); static int ConfigureSlaves(Tcl_Interp *interp, Tk_Window tkwin, - int objc, Tcl_Obj *const objv[]); -static void DestroyGrid(void *memPtr); + int objc, Tcl_Obj *CONST objv[]); +static void DestroyGrid(char *memPtr); static Gridder * GetGrid(Tk_Window tkwin); static int GridAnchorCommand(Tk_Window tkwin, Tcl_Interp *interp, - int objc, Tcl_Obj *const objv[]); + int objc, Tcl_Obj *CONST objv[]); static int GridBboxCommand(Tk_Window tkwin, Tcl_Interp *interp, - int objc, Tcl_Obj *const objv[]); + int objc, Tcl_Obj *CONST objv[]); static int GridForgetRemoveCommand(Tk_Window tkwin, Tcl_Interp *interp, int objc, - Tcl_Obj *const objv[]); + Tcl_Obj *CONST objv[]); static int GridInfoCommand(Tk_Window tkwin, Tcl_Interp *interp, - int objc, Tcl_Obj *const objv[]); + int objc, Tcl_Obj *CONST objv[]); static int GridLocationCommand(Tk_Window tkwin, Tcl_Interp *interp, int objc, - Tcl_Obj *const objv[]); + Tcl_Obj *CONST objv[]); static int GridPropagateCommand(Tk_Window tkwin, Tcl_Interp *interp, int objc, - Tcl_Obj *const objv[]); + Tcl_Obj *CONST objv[]); static int GridRowColumnConfigureCommand(Tk_Window tkwin, Tcl_Interp *interp, int objc, - Tcl_Obj *const objv[]); + Tcl_Obj *CONST objv[]); static int GridSizeCommand(Tk_Window tkwin, Tcl_Interp *interp, - int objc, Tcl_Obj *const objv[]); + int objc, Tcl_Obj *CONST objv[]); static int GridSlavesCommand(Tk_Window tkwin, Tcl_Interp *interp, - int objc, Tcl_Obj *const objv[]); + int objc, Tcl_Obj *CONST objv[]); static void GridStructureProc(ClientData clientData, XEvent *eventPtr); static void GridLostSlaveProc(ClientData clientData, @@ -301,8 +298,8 @@ static int SetSlaveColumn(Tcl_Interp *interp, Gridder *slavePtr, int column, int numCols); static int SetSlaveRow(Tcl_Interp *interp, Gridder *slavePtr, int row, int numRows); -static Tcl_Obj * StickyToObj(int flags); -static int StringToSticky(const char *string); +static void StickyToString(int flags, char *result); +static int StringToSticky(char *string); static void Unlink(Gridder *gridPtr); static const Tk_GeomMgr gridMgrType = { @@ -333,10 +330,10 @@ Tk_GridObjCmd( ClientData clientData, /* Main window associated with interpreter. */ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ - Tcl_Obj *const objv[]) /* Argument objects. */ + Tcl_Obj *CONST objv[]) /* Argument objects. */ { - Tk_Window tkwin = clientData; - static const char *const optionStrings[] = { + Tk_Window tkwin = (Tk_Window) clientData; + static CONST char *optionStrings[] = { "anchor", "bbox", "columnconfigure", "configure", "forget", "info", "location", "propagate", "remove", "rowconfigure", "size", "slaves", NULL @@ -349,7 +346,7 @@ Tk_GridObjCmd( int index; if (objc >= 2) { - const char *argv1 = Tcl_GetString(objv[1]); + char *argv1 = Tcl_GetString(objv[1]); if ((argv1[0] == '.') || (argv1[0] == REL_SKIP) || (argv1[0] == REL_VERT)) { @@ -361,8 +358,8 @@ Tk_GridObjCmd( return TCL_ERROR; } - if (Tcl_GetIndexFromObjStruct(interp, objv[1], optionStrings, - sizeof(char *), "option", 0, &index) != TCL_OK) { + if (Tcl_GetIndexFromObj(interp, objv[1], optionStrings, "option", 0, + &index) != TCL_OK) { return TCL_ERROR; } @@ -402,8 +399,7 @@ Tk_GridObjCmd( } /* This should not happen */ - Tcl_SetObjResult(interp, Tcl_NewStringObj("internal error in grid", -1)); - Tcl_SetErrorCode(interp, "TK", "API_ABUSE", NULL); + Tcl_SetResult(interp, "Internal error in grid.", TCL_STATIC); return TCL_ERROR; } @@ -429,7 +425,7 @@ GridAnchorCommand( Tk_Window tkwin, /* Main window of the application. */ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ - Tcl_Obj *const objv[]) /* Argument objects. */ + Tcl_Obj *CONST objv[]) /* Argument objects. */ { Tk_Window master; Gridder *masterPtr; @@ -448,9 +444,8 @@ GridAnchorCommand( if (objc == 3) { gridPtr = masterPtr->masterDataPtr; - Tcl_SetObjResult(interp, Tcl_NewStringObj( - Tk_NameOfAnchor(gridPtr?gridPtr->anchor:GRID_DEFAULT_ANCHOR), - -1)); + Tcl_SetResult(interp, (char *) Tk_NameOfAnchor(gridPtr == NULL ? + GRID_DEFAULT_ANCHOR : gridPtr->anchor), TCL_VOLATILE); return TCL_OK; } @@ -471,7 +466,7 @@ GridAnchorCommand( } if (!(masterPtr->flags & REQUESTED_RELAYOUT)) { masterPtr->flags |= REQUESTED_RELAYOUT; - Tcl_DoWhenIdle(ArrangeGrid, masterPtr); + Tcl_DoWhenIdle(ArrangeGrid, (ClientData) masterPtr); } } return TCL_OK; @@ -498,7 +493,7 @@ GridBboxCommand( Tk_Window tkwin, /* Main window of the application. */ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ - Tcl_Obj *const objv[]) /* Argument objects. */ + Tcl_Obj *CONST objv[]) /* Argument objects. */ { Tk_Window master; Gridder *masterPtr; /* master grid record */ @@ -628,12 +623,12 @@ GridForgetRemoveCommand( Tk_Window tkwin, /* Main window of the application. */ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ - Tcl_Obj *const objv[]) /* Argument objects. */ + Tcl_Obj *CONST objv[]) /* Argument objects. */ { Tk_Window slave; Gridder *slavePtr; int i; - const char *string = Tcl_GetString(objv[1]); + char *string = Tcl_GetString(objv[1]); char c = string[0]; for (i = 2; i < objc; i++) { @@ -664,7 +659,7 @@ GridForgetRemoveCommand( } slavePtr->doubleBw = 2*Tk_Changes(tkwin)->border_width; if (slavePtr->flags & REQUESTED_RELAYOUT) { - Tcl_CancelIdleCall(ArrangeGrid, slavePtr); + Tcl_CancelIdleCall(ArrangeGrid, (ClientData) slavePtr); } slavePtr->flags = 0; slavePtr->sticky = 0; @@ -684,7 +679,7 @@ GridForgetRemoveCommand( Tcl_IncrRefCount(slavePtr->in); } } - Tk_ManageGeometry(slave, NULL, NULL); + Tk_ManageGeometry(slave, NULL, (ClientData) NULL); if (slavePtr->masterPtr->tkwin != Tk_Parent(slavePtr->tkwin)) { Tk_UnmaintainGeometry(slavePtr->tkwin, slavePtr->masterPtr->tkwin); @@ -718,11 +713,11 @@ GridInfoCommand( Tk_Window tkwin, /* Main window of the application. */ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ - Tcl_Obj *const objv[]) /* Argument objects. */ + Tcl_Obj *CONST objv[]) /* Argument objects. */ { register Gridder *slavePtr; Tk_Window slave; - Tcl_Obj *infoObj; + char buffer[64 + TCL_INTEGER_SPACE * 4]; if (objc != 3) { Tcl_WrongNumArgs(interp, 2, objv, "window"); @@ -737,24 +732,18 @@ GridInfoCommand( return TCL_OK; } - infoObj = Tcl_NewObj(); - Tcl_DictObjPut(NULL, infoObj, Tcl_NewStringObj("-in", -1), - TkNewWindowObj(slavePtr->masterPtr->tkwin)); - Tcl_DictObjPut(NULL, infoObj, Tcl_NewStringObj("-column", -1), - Tcl_NewIntObj(slavePtr->column)); - Tcl_DictObjPut(NULL, infoObj, Tcl_NewStringObj("-row", -1), - Tcl_NewIntObj(slavePtr->row)); - Tcl_DictObjPut(NULL, infoObj, Tcl_NewStringObj("-columnspan", -1), - Tcl_NewIntObj(slavePtr->numCols)); - Tcl_DictObjPut(NULL, infoObj, Tcl_NewStringObj("-rowspan", -1), - Tcl_NewIntObj(slavePtr->numRows)); - TkAppendPadAmount(infoObj, "-ipadx", slavePtr->iPadX/2, slavePtr->iPadX); - TkAppendPadAmount(infoObj, "-ipady", slavePtr->iPadY/2, slavePtr->iPadY); - TkAppendPadAmount(infoObj, "-padx", slavePtr->padLeft, slavePtr->padX); - TkAppendPadAmount(infoObj, "-pady", slavePtr->padTop, slavePtr->padY); - Tcl_DictObjPut(NULL, infoObj, Tcl_NewStringObj("-sticky", -1), - StickyToObj(slavePtr->sticky)); - Tcl_SetObjResult(interp, infoObj); + Tcl_AppendElement(interp, "-in"); + Tcl_AppendElement(interp, Tk_PathName(slavePtr->masterPtr->tkwin)); + sprintf(buffer, " -column %d -row %d -columnspan %d -rowspan %d", + slavePtr->column, slavePtr->row, + slavePtr->numCols, slavePtr->numRows); + Tcl_AppendResult(interp, buffer, NULL); + TkPrintPadAmount(interp, "ipadx", slavePtr->iPadX/2, slavePtr->iPadX); + TkPrintPadAmount(interp, "ipady", slavePtr->iPadY/2, slavePtr->iPadY); + TkPrintPadAmount(interp, "padx", slavePtr->padLeft, slavePtr->padX); + TkPrintPadAmount(interp, "pady", slavePtr->padTop, slavePtr->padY); + StickyToString(slavePtr->sticky, buffer); + Tcl_AppendResult(interp, " -sticky ", buffer, NULL); return TCL_OK; } @@ -780,7 +769,7 @@ GridLocationCommand( Tk_Window tkwin, /* Main window of the application. */ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ - Tcl_Obj *const objv[]) /* Argument objects. */ + Tcl_Obj *CONST objv[]) /* Argument objects. */ { Tk_Window master; Gridder *masterPtr; /* Master grid record. */ @@ -820,8 +809,8 @@ GridLocationCommand( */ while (masterPtr->flags & REQUESTED_RELAYOUT) { - Tcl_CancelIdleCall(ArrangeGrid, masterPtr); - ArrangeGrid(masterPtr); + Tcl_CancelIdleCall(ArrangeGrid, (ClientData) masterPtr); + ArrangeGrid((ClientData) masterPtr); } SetGridSize(masterPtr); endX = MAX(gridPtr->columnEnd, gridPtr->columnMax); @@ -873,7 +862,7 @@ GridPropagateCommand( Tk_Window tkwin, /* Main window of the application. */ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ - Tcl_Obj *const objv[]) /* Argument objects. */ + Tcl_Obj *CONST objv[]) /* Argument objects. */ { Tk_Window master; Gridder *masterPtr; @@ -904,22 +893,8 @@ GridPropagateCommand( old = !(masterPtr->flags & DONT_PROPAGATE); if (propagate != old) { if (propagate) { - /* - * If we have slaves, we need to register as geometry master. - */ - - if (masterPtr->slavePtr != NULL) { - if (TkSetGeometryMaster(interp, master, "grid") != TCL_OK) { - return TCL_ERROR; - } - masterPtr->flags |= ALLOCED_MASTER; - } masterPtr->flags &= ~DONT_PROPAGATE; } else { - if (masterPtr->flags & ALLOCED_MASTER) { - TkFreeGeometryMaster(master, "grid"); - masterPtr->flags &= ~ALLOCED_MASTER; - } masterPtr->flags |= DONT_PROPAGATE; } @@ -933,7 +908,7 @@ GridPropagateCommand( } if (!(masterPtr->flags & REQUESTED_RELAYOUT)) { masterPtr->flags |= REQUESTED_RELAYOUT; - Tcl_DoWhenIdle(ArrangeGrid, masterPtr); + Tcl_DoWhenIdle(ArrangeGrid, (ClientData) masterPtr); } } return TCL_OK; @@ -961,7 +936,7 @@ GridRowColumnConfigureCommand( Tk_Window tkwin, /* Main window of the application. */ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ - Tcl_Obj *const objv[]) /* Argument objects. */ + Tcl_Obj *CONST objv[]) /* Argument objects. */ { Tk_Window master, slave; Gridder *masterPtr, *slavePtr; @@ -973,8 +948,8 @@ GridRowColumnConfigureCommand( Tcl_Obj **lObjv; /* array of indices */ int ok; /* temporary TCL result code */ int i, j, first, last; - const char *string; - static const char *const optionStrings[] = { + char *string; + static CONST char *optionStrings[] = { "-minsize", "-pad", "-uniform", "-weight", NULL }; enum options { @@ -984,7 +959,7 @@ GridRowColumnConfigureCommand( Tcl_Obj *listCopy; if (((objc % 2 != 0) && (objc > 6)) || (objc < 4)) { - Tcl_WrongNumArgs(interp, 2, objv, "master index ?-option value ...?"); + Tcl_WrongNumArgs(interp, 2, objv, "master index ?-option value...?"); return TCL_ERROR; } @@ -1002,9 +977,9 @@ GridRowColumnConfigureCommand( string = Tcl_GetString(objv[1]); slotType = (*string == 'c') ? COLUMN : ROW; if (lObjc == 0) { - Tcl_SetObjResult(interp, Tcl_ObjPrintf("no %s indices specified", - (slotType == COLUMN) ? "column" : "row")); - Tcl_SetErrorCode(interp, "TK", "GRID", "NO_INDEX", NULL); + Tcl_AppendResult(interp, "no ", + (slotType == COLUMN) ? "column" : "row", + " indices specified", NULL); Tcl_DecrRefCount(listCopy); return TCL_ERROR; } @@ -1015,17 +990,16 @@ GridRowColumnConfigureCommand( if ((objc == 4) || (objc == 5)) { if (lObjc != 1) { - Tcl_SetObjResult(interp, Tcl_NewStringObj( - "must specify a single element on retrieval", -1)); - Tcl_SetErrorCode(interp, "TK", "GRID", "USAGE", NULL); + Tcl_AppendResult(interp, Tcl_GetString(objv[0]), " ", + Tcl_GetString(objv[1]), + ": must specify a single element on retrieval", NULL); Tcl_DecrRefCount(listCopy); return TCL_ERROR; } if (Tcl_GetIntFromObj(interp, lObjv[0], &slot) != TCL_OK) { Tcl_AppendResult(interp, - " (when retrieving options only integer indices are " + " (when retreiving options only integer indices are " "allowed)", NULL); - Tcl_SetErrorCode(interp, "TK", "GRID", "INDEX_FORMAT", NULL); Tcl_DecrRefCount(listCopy); return TCL_ERROR; } @@ -1076,25 +1050,25 @@ GridRowColumnConfigureCommand( * returned. */ - if (Tcl_GetIndexFromObjStruct(interp, objv[4], optionStrings, - sizeof(char *), "option", 0, &index) != TCL_OK) { + if (Tcl_GetIndexFromObj(interp, objv[4], optionStrings, "option", 0, + &index) != TCL_OK) { Tcl_DecrRefCount(listCopy); return TCL_ERROR; } if (index == ROWCOL_MINSIZE) { - Tcl_SetObjResult(interp, Tcl_NewIntObj( - (ok == TCL_OK) ? slotPtr[slot].minSize : 0)); + Tcl_SetObjResult(interp, + Tcl_NewIntObj((ok == TCL_OK) ? slotPtr[slot].minSize : 0)); } else if (index == ROWCOL_WEIGHT) { - Tcl_SetObjResult(interp, Tcl_NewIntObj( - (ok == TCL_OK) ? slotPtr[slot].weight : 0)); + Tcl_SetObjResult(interp, + Tcl_NewIntObj((ok == TCL_OK) ? slotPtr[slot].weight : 0)); } else if (index == ROWCOL_UNIFORM) { Tk_Uid value = (ok == TCL_OK) ? slotPtr[slot].uniform : ""; - Tcl_SetObjResult(interp, Tcl_NewStringObj( - (value == NULL) ? "" : value, -1)); + Tcl_SetObjResult(interp, + Tcl_NewStringObj(value == NULL ? "" : value, -1)); } else if (index == ROWCOL_PAD) { - Tcl_SetObjResult(interp, Tcl_NewIntObj( - (ok == TCL_OK) ? slotPtr[slot].pad : 0)); + Tcl_SetObjResult(interp, + Tcl_NewIntObj((ok == TCL_OK) ? slotPtr[slot].pad : 0)); } Tcl_DecrRefCount(listCopy); return TCL_OK; @@ -1127,17 +1101,17 @@ GridRowColumnConfigureCommand( slavePtr = GetGrid(slave); if (slavePtr->masterPtr != masterPtr) { - Tcl_SetObjResult(interp, Tcl_ObjPrintf( - "the window \"%s\" is not managed by \"%s\"", - Tcl_GetString(lObjv[j]), Tcl_GetString(objv[2]))); - Tcl_SetErrorCode(interp, "TK", "GRID", "NOT_MASTER", NULL); + Tcl_AppendResult(interp, Tcl_GetString(objv[0]), " ", + Tcl_GetString(objv[1]), ": the window \"", + Tcl_GetString(lObjv[j]), "\" is not managed by \"", + Tcl_GetString(objv[2]), "\"", NULL); Tcl_DecrRefCount(listCopy); return TCL_ERROR; } } else { - Tcl_SetObjResult(interp, Tcl_ObjPrintf( - "illegal index \"%s\"", Tcl_GetString(lObjv[j]))); - Tcl_SetErrorCode(interp, "TK", "VALUE", "GRID_INDEX", NULL); + Tcl_AppendResult(interp, Tcl_GetString(objv[0]), " ", + Tcl_GetString(objv[1]), ": illegal index \"", + Tcl_GetString(lObjv[j]), "\"", NULL); Tcl_DecrRefCount(listCopy); return TCL_ERROR; } @@ -1157,12 +1131,11 @@ GridRowColumnConfigureCommand( for (slot = first; slot <= last; slot++) { ok = CheckSlotData(masterPtr, slot, slotType, /*checkOnly*/ 0); if (ok != TCL_OK) { - Tcl_SetObjResult(interp, Tcl_ObjPrintf( - "\"%s\" is out of range", - Tcl_GetString(lObjv[j]))); - Tcl_SetErrorCode(interp, "TK", "GRID", "INDEX_RANGE", - NULL); - Tcl_DecrRefCount(listCopy); + Tcl_AppendResult(interp, Tcl_GetString(objv[0]), " ", + Tcl_GetString(objv[1]), ": \"", + Tcl_GetString(lObjv[j]), + "\" is out of range", NULL); + Tcl_DecrRefCount(listCopy); return TCL_ERROR; } slotPtr = (slotType == COLUMN) ? @@ -1175,15 +1148,15 @@ GridRowColumnConfigureCommand( */ for (i = 4; i < objc; i += 2) { - if (Tcl_GetIndexFromObjStruct(interp, objv[i], optionStrings, - sizeof(char *), "option", 0, &index) != TCL_OK) { - Tcl_DecrRefCount(listCopy); + if (Tcl_GetIndexFromObj(interp, objv[i], optionStrings, + "option", 0, &index) != TCL_OK) { + Tcl_DecrRefCount(listCopy); return TCL_ERROR; } if (index == ROWCOL_MINSIZE) { if (Tk_GetPixelsFromObj(interp, master, objv[i+1], &size) != TCL_OK) { - Tcl_DecrRefCount(listCopy); + Tcl_DecrRefCount(listCopy); return TCL_ERROR; } else { slotPtr[slot].minSize = size; @@ -1192,11 +1165,14 @@ GridRowColumnConfigureCommand( int wt; if (Tcl_GetIntFromObj(interp,objv[i+1],&wt)!=TCL_OK) { - Tcl_DecrRefCount(listCopy); + Tcl_DecrRefCount(listCopy); return TCL_ERROR; } else if (wt < 0) { - Tcl_DecrRefCount(listCopy); - goto negativeIndex; + Tcl_AppendResult(interp, "invalid arg \"", + Tcl_GetString(objv[i]), + "\": should be non-negative", NULL); + Tcl_DecrRefCount(listCopy); + return TCL_ERROR; } else { slotPtr[slot].weight = wt; } @@ -1210,11 +1186,14 @@ GridRowColumnConfigureCommand( } else if (index == ROWCOL_PAD) { if (Tk_GetPixelsFromObj(interp, master, objv[i+1], &size) != TCL_OK) { - Tcl_DecrRefCount(listCopy); + Tcl_DecrRefCount(listCopy); return TCL_ERROR; } else if (size < 0) { - Tcl_DecrRefCount(listCopy); - goto negativeIndex; + Tcl_AppendResult(interp, "invalid arg \"", + Tcl_GetString(objv[i]), + "\": should be non-negative", NULL); + Tcl_DecrRefCount(listCopy); + return TCL_ERROR; } else { slotPtr[slot].pad = size; } @@ -1260,16 +1239,9 @@ GridRowColumnConfigureCommand( } if (!(masterPtr->flags & REQUESTED_RELAYOUT)) { masterPtr->flags |= REQUESTED_RELAYOUT; - Tcl_DoWhenIdle(ArrangeGrid, masterPtr); + Tcl_DoWhenIdle(ArrangeGrid, (ClientData) masterPtr); } return TCL_OK; - - negativeIndex: - Tcl_SetObjResult(interp, Tcl_ObjPrintf( - "invalid arg \"%s\": should be non-negative", - Tcl_GetString(objv[i]))); - Tcl_SetErrorCode(interp, "TK", "GRID", "NEG_INDEX", NULL); - return TCL_ERROR; } /* @@ -1294,7 +1266,7 @@ GridSizeCommand( Tk_Window tkwin, /* Main window of the application. */ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ - Tcl_Obj *const objv[]) /* Argument objects. */ + Tcl_Obj *CONST objv[]) /* Argument objects. */ { Tk_Window master; Gridder *masterPtr; @@ -1345,36 +1317,35 @@ GridSlavesCommand( Tk_Window tkwin, /* Main window of the application. */ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ - Tcl_Obj *const objv[]) /* Argument objects. */ + Tcl_Obj *CONST objv[]) /* Argument objects. */ { Tk_Window master; Gridder *masterPtr; /* master grid record */ Gridder *slavePtr; int i, value, index; int row = -1, column = -1; - static const char *const optionStrings[] = { + static CONST char *optionStrings[] = { "-column", "-row", NULL }; enum options { SLAVES_COLUMN, SLAVES_ROW }; Tcl_Obj *res; if ((objc < 3) || ((objc % 2) == 0)) { - Tcl_WrongNumArgs(interp, 2, objv, "window ?-option value ...?"); + Tcl_WrongNumArgs(interp, 2, objv, "window ?-option value...?"); return TCL_ERROR; } for (i = 3; i < objc; i += 2) { - if (Tcl_GetIndexFromObjStruct(interp, objv[i], optionStrings, - sizeof(char *), "option", 0, &index) != TCL_OK) { + if (Tcl_GetIndexFromObj(interp, objv[i], optionStrings, "option", 0, + &index) != TCL_OK) { return TCL_ERROR; } if (Tcl_GetIntFromObj(interp, objv[i+1], &value) != TCL_OK) { return TCL_ERROR; } if (value < 0) { - Tcl_SetObjResult(interp, Tcl_ObjPrintf( - "%d is an invalid value: should NOT be < 0", value)); - Tcl_SetErrorCode(interp, "TK", "GRID", "NEG_INDEX", NULL); + Tcl_AppendResult(interp, Tcl_GetString(objv[i]), + " is an invalid value: should NOT be < 0", NULL); return TCL_ERROR; } if (index == SLAVES_COLUMN) { @@ -1392,15 +1363,16 @@ GridSlavesCommand( res = Tcl_NewListObj(0, NULL); for (slavePtr = masterPtr->slavePtr; slavePtr != NULL; slavePtr = slavePtr->nextPtr) { - if ((column >= 0) && (slavePtr->column > column + if (column>=0 && (slavePtr->column > column || slavePtr->column+slavePtr->numCols-1 < column)) { continue; } - if ((row >= 0) && (slavePtr->row > row || + if (row>=0 && (slavePtr->row > row || slavePtr->row+slavePtr->numRows-1 < row)) { continue; } - Tcl_ListObjAppendElement(interp,res, TkNewWindowObj(slavePtr->tkwin)); + Tcl_ListObjAppendElement(interp, res, + Tcl_NewStringObj(Tk_PathName(slavePtr->tkwin), -1)); } Tcl_SetObjResult(interp, res); return TCL_OK; @@ -1431,12 +1403,12 @@ GridReqProc( Tk_Window tkwin) /* Other Tk-related information about the * window. */ { - register Gridder *gridPtr = clientData; + register Gridder *gridPtr = (Gridder *) clientData; gridPtr = gridPtr->masterPtr; if (gridPtr && !(gridPtr->flags & REQUESTED_RELAYOUT)) { gridPtr->flags |= REQUESTED_RELAYOUT; - Tcl_DoWhenIdle(ArrangeGrid, gridPtr); + Tcl_DoWhenIdle(ArrangeGrid, (ClientData) gridPtr); } } @@ -1463,7 +1435,7 @@ GridLostSlaveProc( * stolen away. */ Tk_Window tkwin) /* Tk's handle for the slave window. */ { - register Gridder *slavePtr = clientData; + register Gridder *slavePtr = (Gridder *) clientData; if (slavePtr->masterPtr->tkwin != Tk_Parent(slavePtr->tkwin)) { Tk_UnmaintainGeometry(slavePtr->tkwin, slavePtr->masterPtr->tkwin); @@ -1721,7 +1693,7 @@ ArrangeGrid( ClientData clientData) /* Structure describing master whose slaves * are to be re-layed out. */ { - register Gridder *masterPtr = clientData; + register Gridder *masterPtr = (Gridder *) clientData; register Gridder *slavePtr; GridMaster *slotPtr = masterPtr->masterDataPtr; int abort; @@ -1757,7 +1729,7 @@ ArrangeGrid( } masterPtr->abortPtr = &abort; abort = 0; - Tcl_Preserve(masterPtr); + Tcl_Preserve((ClientData) masterPtr); /* * Call the constraint engine to fill in the row and column offsets. @@ -1784,10 +1756,10 @@ ArrangeGrid( Tk_GeometryRequest(masterPtr->tkwin, width, height); if (width>1 && height>1) { masterPtr->flags |= REQUESTED_RELAYOUT; - Tcl_DoWhenIdle(ArrangeGrid, masterPtr); + Tcl_DoWhenIdle(ArrangeGrid, (ClientData) masterPtr); } masterPtr->abortPtr = NULL; - Tcl_Release(masterPtr); + Tcl_Release((ClientData) masterPtr); return; } @@ -1873,7 +1845,7 @@ ArrangeGrid( } masterPtr->abortPtr = NULL; - Tcl_Release(masterPtr); + Tcl_Release((ClientData) masterPtr); } /* @@ -1956,7 +1928,8 @@ ResolveConstraints( gridCount = MAX(constraintCount, slotCount); if (gridCount >= TYPICAL_SIZE) { - layoutPtr = ckalloc(sizeof(GridLayout) * (1+gridCount)); + layoutPtr = (GridLayout *) + ckalloc(sizeof(GridLayout) * (1+gridCount)); } else { layoutPtr = layoutData; } @@ -2078,12 +2051,12 @@ ResolveConstraints( * sizeof(UniformGroup); size_t newSize = (uniformGroupsAlloced + UNIFORM_PREALLOC) * sizeof(UniformGroup); - UniformGroup *newUG = ckalloc(newSize); + UniformGroup *newUG = (UniformGroup *) ckalloc(newSize); UniformGroup *oldUG = uniformGroupPtr; memcpy(newUG, oldUG, oldSize); if (oldUG != uniformPre) { - ckfree(oldUG); + ckfree((char *) oldUG); } uniformGroupPtr = newUG; uniformGroupsAlloced += UNIFORM_PREALLOC; @@ -2123,7 +2096,7 @@ ResolveConstraints( } if (uniformGroupPtr != uniformPre) { - ckfree(uniformGroupPtr); + ckfree((char *) uniformGroupPtr); } /* @@ -2393,7 +2366,7 @@ ResolveConstraints( --layoutPtr; if (layoutPtr != layoutData) { - ckfree(layoutPtr); + ckfree((char *) layoutPtr); } return requiredSize; } @@ -2439,9 +2412,9 @@ GetGrid( hPtr = Tcl_CreateHashEntry(&dispPtr->gridHashTable, (char*) tkwin, &isNew); if (!isNew) { - return Tcl_GetHashValue(hPtr); + return (Gridder *) Tcl_GetHashValue(hPtr); } - gridPtr = ckalloc(sizeof(Gridder)); + gridPtr = (Gridder *) ckalloc(sizeof(Gridder)); gridPtr->tkwin = tkwin; gridPtr->masterPtr = NULL; gridPtr->masterDataPtr = NULL; @@ -2460,7 +2433,7 @@ GetGrid( gridPtr->padTop = 0; gridPtr->iPadX = 0; gridPtr->iPadY = 0; - gridPtr->doubleBw = 2 * Tk_Changes(tkwin)->border_width; + gridPtr->doubleBw = 2*Tk_Changes(tkwin)->border_width; gridPtr->abortPtr = NULL; gridPtr->flags = 0; gridPtr->sticky = 0; @@ -2469,7 +2442,7 @@ GetGrid( gridPtr->masterDataPtr = NULL; Tcl_SetHashValue(hPtr, gridPtr); Tk_CreateEventHandler(tkwin, StructureNotifyMask, - GridStructureProc, gridPtr); + GridStructureProc, (ClientData) gridPtr); return gridPtr; } @@ -2540,8 +2513,7 @@ SetSlaveColumn( lastCol = ((newColumn >= 0) ? newColumn : 0) + newNumCols; if (lastCol >= MAX_ELEMENT) { - Tcl_SetObjResult(interp, Tcl_NewStringObj("column out of bounds",-1)); - Tcl_SetErrorCode(interp, "TK", "GRID", "BAD_COLUMN", NULL); + Tcl_SetResult(interp, "Column out of bounds", TCL_STATIC); return TCL_ERROR; } @@ -2581,8 +2553,7 @@ SetSlaveRow( lastRow = ((newRow >= 0) ? newRow : 0) + newNumRows; if (lastRow >= MAX_ELEMENT) { - Tcl_SetObjResult(interp, Tcl_NewStringObj("row out of bounds", -1)); - Tcl_SetErrorCode(interp, "TK", "GRID", "BAD_ROW", NULL); + Tcl_SetResult(interp, "Row out of bounds", TCL_STATIC); return TCL_ERROR; } @@ -2651,14 +2622,14 @@ CheckSlotData( int newNumSlot = slot + PREALLOC; size_t oldSize = numSlot * sizeof(SlotInfo); size_t newSize = newNumSlot * sizeof(SlotInfo); - SlotInfo *newSI = ckalloc(newSize); + SlotInfo *newSI = (SlotInfo *) ckalloc(newSize); SlotInfo *oldSI = (slotType == ROW) ? masterPtr->masterDataPtr->rowPtr : masterPtr->masterDataPtr->columnPtr; memcpy(newSI, oldSI, oldSize); memset(newSI+numSlot, 0, newSize - oldSize); - ckfree(oldSI); + ckfree((char *) oldSI); if (slotType == ROW) { masterPtr->masterDataPtr->rowPtr = newSI; masterPtr->masterDataPtr->rowSpace = newNumSlot; @@ -2701,17 +2672,17 @@ InitMasterData( Gridder *masterPtr) { if (masterPtr->masterDataPtr == NULL) { - GridMaster *gridPtr = masterPtr->masterDataPtr = + GridMaster *gridPtr = masterPtr->masterDataPtr = (GridMaster *) ckalloc(sizeof(GridMaster)); size_t size = sizeof(SlotInfo) * TYPICAL_SIZE; gridPtr->columnEnd = 0; gridPtr->columnMax = 0; - gridPtr->columnPtr = ckalloc(size); + gridPtr->columnPtr = (SlotInfo *) ckalloc(size); gridPtr->columnSpace = TYPICAL_SIZE; gridPtr->rowEnd = 0; gridPtr->rowMax = 0; - gridPtr->rowPtr = ckalloc(size); + gridPtr->rowPtr = (SlotInfo *) ckalloc(size); gridPtr->rowSpace = TYPICAL_SIZE; gridPtr->startX = 0; gridPtr->startY = 0; @@ -2765,7 +2736,7 @@ Unlink( } if (!(masterPtr->flags & REQUESTED_RELAYOUT)) { masterPtr->flags |= REQUESTED_RELAYOUT; - Tcl_DoWhenIdle(ArrangeGrid, masterPtr); + Tcl_DoWhenIdle(ArrangeGrid, (ClientData) masterPtr); } if (masterPtr->abortPtr != NULL) { *masterPtr->abortPtr = 1; @@ -2773,16 +2744,6 @@ Unlink( SetGridSize(slavePtr->masterPtr); slavePtr->masterPtr = NULL; - - /* - * If we have emptied this master from slaves it means we are no longer - * handling it and should mark it as free. - */ - - if ((masterPtr->slavePtr == NULL) && (masterPtr->flags & ALLOCED_MASTER)) { - TkFreeGeometryMaster(masterPtr->tkwin, "grid"); - masterPtr->flags &= ~ALLOCED_MASTER; - } } /* @@ -2807,23 +2768,23 @@ Unlink( static void DestroyGrid( - void *memPtr) /* Info about window that is now dead. */ + char *memPtr) /* Info about window that is now dead. */ { - register Gridder *gridPtr = memPtr; + register Gridder *gridPtr = (Gridder *) memPtr; if (gridPtr->masterDataPtr != NULL) { if (gridPtr->masterDataPtr->rowPtr != NULL) { - ckfree(gridPtr->masterDataPtr -> rowPtr); + ckfree((char *) gridPtr->masterDataPtr -> rowPtr); } if (gridPtr->masterDataPtr->columnPtr != NULL) { - ckfree(gridPtr->masterDataPtr -> columnPtr); + ckfree((char *) gridPtr->masterDataPtr -> columnPtr); } - ckfree(gridPtr->masterDataPtr); + ckfree((char *) gridPtr->masterDataPtr); } if (gridPtr->in != NULL) { Tcl_DecrRefCount(gridPtr->in); } - ckfree(gridPtr); + ckfree((char *) gridPtr); } /* @@ -2850,21 +2811,21 @@ GridStructureProc( * eventPtr. */ XEvent *eventPtr) /* Describes what just happened. */ { - register Gridder *gridPtr = clientData; + register Gridder *gridPtr = (Gridder *) clientData; TkDisplay *dispPtr = ((TkWindow *) gridPtr->tkwin)->dispPtr; if (eventPtr->type == ConfigureNotify) { if ((gridPtr->slavePtr != NULL) && !(gridPtr->flags & REQUESTED_RELAYOUT)) { gridPtr->flags |= REQUESTED_RELAYOUT; - Tcl_DoWhenIdle(ArrangeGrid, gridPtr); + Tcl_DoWhenIdle(ArrangeGrid, (ClientData) gridPtr); } if ((gridPtr->masterPtr != NULL) && (gridPtr->doubleBw != 2*Tk_Changes(gridPtr->tkwin)->border_width)) { if (!(gridPtr->masterPtr->flags & REQUESTED_RELAYOUT)) { gridPtr->doubleBw = 2*Tk_Changes(gridPtr->tkwin)->border_width; gridPtr->masterPtr->flags |= REQUESTED_RELAYOUT; - Tcl_DoWhenIdle(ArrangeGrid, gridPtr->masterPtr); + Tcl_DoWhenIdle(ArrangeGrid, (ClientData) gridPtr->masterPtr); } } } else if (eventPtr->type == DestroyNotify) { @@ -2883,15 +2844,15 @@ GridStructureProc( Tcl_DeleteHashEntry(Tcl_FindHashEntry(&dispPtr->gridHashTable, (char *) gridPtr->tkwin)); if (gridPtr->flags & REQUESTED_RELAYOUT) { - Tcl_CancelIdleCall(ArrangeGrid, gridPtr); + Tcl_CancelIdleCall(ArrangeGrid, (ClientData) gridPtr); } gridPtr->tkwin = NULL; - Tcl_EventuallyFree(gridPtr, (Tcl_FreeProc *)DestroyGrid); + Tcl_EventuallyFree((ClientData) gridPtr, DestroyGrid); } else if (eventPtr->type == MapNotify) { if ((gridPtr->slavePtr != NULL) && !(gridPtr->flags & REQUESTED_RELAYOUT)) { gridPtr->flags |= REQUESTED_RELAYOUT; - Tcl_DoWhenIdle(ArrangeGrid, gridPtr); + Tcl_DoWhenIdle(ArrangeGrid, (ClientData) gridPtr); } } else if (eventPtr->type == UnmapNotify) { register Gridder *gridPtr2; @@ -2929,7 +2890,7 @@ ConfigureSlaves( Tk_Window tkwin, /* Any window in application containing * slaves. Used to look up slave names. */ int objc, /* Number of elements in argv. */ - Tcl_Obj *const objv[]) /* Argument objects: contains one or more + Tcl_Obj *CONST objv[]) /* Argument objects: contains one or more * window names followed by any number of * "option value" pairs. Caller must make sure * that there is at least one window name. */ @@ -2943,10 +2904,10 @@ ConfigureSlaves( int defaultRow = -1; int defaultColumn = 0; /* Default column number */ int defaultColumnSpan = 1; /* Default number of columns */ - const char *lastWindow; /* Use this window to base current row/col + char *lastWindow; /* Use this window to base current row/col * on */ int numSkip; /* Number of 'x' found */ - static const char *const optionStrings[] = { + static CONST char *optionStrings[] = { "-column", "-columnspan", "-in", "-ipadx", "-ipady", "-padx", "-pady", "-row", "-rowspan", "-sticky", NULL }; @@ -2954,7 +2915,7 @@ ConfigureSlaves( CONF_COLUMN, CONF_COLUMNSPAN, CONF_IN, CONF_IPADX, CONF_IPADY, CONF_PADX, CONF_PADY, CONF_ROW, CONF_ROWSPAN, CONF_STICKY }; int index; - const char *string; + char *string; char firstChar; int positionGiven; @@ -3006,27 +2967,24 @@ ConfigureSlaves( continue; } if (length > 1 && i == 0) { - Tcl_SetObjResult(interp, Tcl_ObjPrintf( - "bad argument \"%s\": must be name of window", string)); - Tcl_SetErrorCode(interp, "TK", "GRID", "BAD_PARAMETER", NULL); + Tcl_AppendResult(interp, "bad argument \"", string, + "\": must be name of window", NULL); return TCL_ERROR; } if (length > 1 && firstChar == '-') { break; } if (length > 1) { - Tcl_SetObjResult(interp, Tcl_ObjPrintf( - "unexpected parameter \"%s\" in configure list:" - " should be window name or option", string)); - Tcl_SetErrorCode(interp, "TK", "GRID", "BAD_PARAMETER", NULL); + Tcl_AppendResult(interp, "unexpected parameter, \"", + string, "\", in configure list. ", + "Should be window name or option", NULL); return TCL_ERROR; } if ((firstChar == REL_HORIZ) && ((numWindows == 0) || (prevChar == REL_SKIP) || (prevChar == REL_VERT))) { - Tcl_SetObjResult(interp, Tcl_NewStringObj( - "must specify window before shortcut '-'", -1)); - Tcl_SetErrorCode(interp, "TK", "GRID", "SHORTCUT_USAGE", NULL); + Tcl_AppendResult(interp, + "Must specify window before shortcut '-'.", NULL); return TCL_ERROR; } @@ -3035,18 +2993,14 @@ ConfigureSlaves( continue; } - Tcl_SetObjResult(interp, Tcl_ObjPrintf( - "invalid window shortcut, \"%s\" should be '-', 'x', or '^'", - string)); - Tcl_SetErrorCode(interp, "TK", "GRID", "SHORTCUT_USAGE", NULL); + Tcl_AppendResult(interp, "invalid window shortcut, \"", + string, "\" should be '-', 'x', or '^'", NULL); return TCL_ERROR; } numWindows = i; if ((objc - numWindows) & 1) { - Tcl_SetObjResult(interp, Tcl_NewStringObj( - "extra option or option with no value", -1)); - Tcl_SetErrorCode(interp, "TK", "GRID", "BAD_PARAMETER", NULL); + Tcl_AppendResult(interp, "extra option or option with no value", NULL); return TCL_ERROR; } @@ -3058,8 +3012,8 @@ ConfigureSlaves( */ for (i = numWindows; i < objc; i += 2) { - if (Tcl_GetIndexFromObjStruct(interp, objv[i], optionStrings, - sizeof(char *), "option", 0, &index) != TCL_OK) { + if (Tcl_GetIndexFromObj(interp, objv[i], optionStrings, "option", 0, + &index) != TCL_OK) { return TCL_ERROR; } if (index == CONF_IN) { @@ -3072,10 +3026,10 @@ ConfigureSlaves( } else if (index == CONF_ROW) { if (Tcl_GetIntFromObj(interp, objv[i+1], &tmp) != TCL_OK || tmp < 0) { - Tcl_SetObjResult(interp, Tcl_ObjPrintf( - "bad row value \"%s\": must be a non-negative integer", - Tcl_GetString(objv[i+1]))); - Tcl_SetErrorCode(interp, "TK", "VALUE", "POSITIVE_INT", NULL); + Tcl_ResetResult(interp); + Tcl_AppendResult(interp, "bad row value \"", + Tcl_GetString(objv[i+1]), "\": must be ", + "a non-negative integer", NULL); return TCL_ERROR; } defaultRow = tmp; @@ -3125,7 +3079,7 @@ ConfigureSlaves( for (defaultColumnSpan = 1; j + defaultColumnSpan < numWindows; defaultColumnSpan++) { - const char *string = Tcl_GetString(objv[j + defaultColumnSpan]); + char *string = Tcl_GetString(objv[j + defaultColumnSpan]); if (*string != REL_HORIZ) { break; @@ -3137,10 +3091,8 @@ ConfigureSlaves( } if (Tk_TopWinHierarchy(slave)) { - Tcl_SetObjResult(interp, Tcl_ObjPrintf( - "can't manage \"%s\": it's a top-level window", - Tcl_GetString(objv[j]))); - Tcl_SetErrorCode(interp, "TK", "GEOMETRY", "TOPLEVEL", NULL); + Tcl_AppendResult(interp, "can't manage \"", Tcl_GetString(objv[j]), + "\": it's a top-level window", NULL); return TCL_ERROR; } slavePtr = GetGrid(slave); @@ -3161,16 +3113,15 @@ ConfigureSlaves( */ for (i = numWindows; i < objc; i += 2) { - Tcl_GetIndexFromObjStruct(interp, objv[i], optionStrings, - sizeof(char *), "option", 0, &index); + Tcl_GetIndexFromObj(interp, objv[i], optionStrings, "option", 0, + &index); switch ((enum options) index) { case CONF_COLUMN: if (Tcl_GetIntFromObj(NULL, objv[i+1], &tmp) != TCL_OK || tmp < 0) { - Tcl_SetObjResult(interp, Tcl_ObjPrintf( - "bad column value \"%s\": must be a non-negative integer", - Tcl_GetString(objv[i+1]))); - Tcl_SetErrorCode(interp, "TK", "VALUE", "COLUMN", NULL); + Tcl_AppendResult(interp, "bad column value \"", + Tcl_GetString(objv[i+1]), "\": must be ", + "a non-negative integer", NULL); return TCL_ERROR; } if (SetSlaveColumn(interp, slavePtr, tmp, -1) != TCL_OK) { @@ -3180,10 +3131,9 @@ ConfigureSlaves( case CONF_COLUMNSPAN: if (Tcl_GetIntFromObj(NULL, objv[i+1], &tmp) != TCL_OK || tmp <= 0) { - Tcl_SetObjResult(interp, Tcl_ObjPrintf( - "bad columnspan value \"%s\": must be a positive integer", - Tcl_GetString(objv[i+1]))); - Tcl_SetErrorCode(interp, "TK", "VALUE", "SPAN", NULL); + Tcl_AppendResult(interp, "bad columnspan value \"", + Tcl_GetString(objv[i+1]), "\": must be ", + "a positive integer", NULL); return TCL_ERROR; } if (SetSlaveColumn(interp, slavePtr, -1, tmp) != TCL_OK) { @@ -3196,9 +3146,8 @@ ConfigureSlaves( return TCL_ERROR; } if (other == slave) { - Tcl_SetObjResult(interp, Tcl_NewStringObj( - "window can't be managed in itself", -1)); - Tcl_SetErrorCode(interp, "TK", "GEOMETRY", "SELF", NULL); + Tcl_SetResult(interp, "Window can't be managed in itself", + TCL_STATIC); return TCL_ERROR; } positionGiven = 1; @@ -3209,11 +3158,9 @@ ConfigureSlaves( int sticky = StringToSticky(Tcl_GetString(objv[i+1])); if (sticky == -1) { - Tcl_SetObjResult(interp, Tcl_ObjPrintf( - "bad stickyness value \"%s\": must be" - " a string containing n, e, s, and/or w", - Tcl_GetString(objv[i+1]))); - Tcl_SetErrorCode(interp, "TK", "VALUE", "STICKY", NULL); + Tcl_AppendResult(interp, "bad stickyness value \"", + Tcl_GetString(objv[i+1]), "\": must be ", + "a string containing n, e, s, and/or w", NULL); return TCL_ERROR; } slavePtr->sticky = sticky; @@ -3222,24 +3169,22 @@ ConfigureSlaves( case CONF_IPADX: if ((Tk_GetPixelsFromObj(NULL, slave, objv[i+1], &tmp) != TCL_OK) || (tmp < 0)) { - Tcl_SetObjResult(interp, Tcl_ObjPrintf( - "bad ipadx value \"%s\": must be positive screen distance", - Tcl_GetString(objv[i+1]))); - Tcl_SetErrorCode(interp, "TK", "VALUE", "INT_PAD", NULL); + Tcl_AppendResult(interp, "bad ipadx value \"", + Tcl_GetString(objv[i+1]), "\": must be ", + "positive screen distance", NULL); return TCL_ERROR; } - slavePtr->iPadX = tmp * 2; + slavePtr->iPadX = tmp*2; break; case CONF_IPADY: if ((Tk_GetPixelsFromObj(NULL, slave, objv[i+1], &tmp) != TCL_OK) || (tmp < 0)) { - Tcl_SetObjResult(interp, Tcl_ObjPrintf( - "bad ipady value \"%s\": must be positive screen distance", - Tcl_GetString(objv[i+1]))); - Tcl_SetErrorCode(interp, "TK", "VALUE", "INT_PAD", NULL); + Tcl_AppendResult(interp, "bad ipady value \"", + Tcl_GetString(objv[i+1]), "\": must be ", + "positive screen distance", NULL); return TCL_ERROR; } - slavePtr->iPadY = tmp * 2; + slavePtr->iPadY = tmp*2; break; case CONF_PADX: if (TkParsePadAmount(interp, tkwin, objv[i+1], @@ -3256,10 +3201,9 @@ ConfigureSlaves( case CONF_ROW: if (Tcl_GetIntFromObj(NULL, objv[i+1], &tmp) != TCL_OK || tmp < 0) { - Tcl_SetObjResult(interp, Tcl_ObjPrintf( - "bad row value \"%s\": must be a non-negative integer", - Tcl_GetString(objv[i+1]))); - Tcl_SetErrorCode(interp, "TK", "VALUE", "COLUMN", NULL); + Tcl_AppendResult(interp, "bad row value \"", + Tcl_GetString(objv[i+1]), + "\": must be a non-negative integer", NULL); return TCL_ERROR; } if (SetSlaveRow(interp, slavePtr, tmp, -1) != TCL_OK) { @@ -3269,10 +3213,9 @@ ConfigureSlaves( case CONF_ROWSPAN: if ((Tcl_GetIntFromObj(NULL, objv[i+1], &tmp) != TCL_OK) || tmp <= 0) { - Tcl_SetObjResult(interp, Tcl_ObjPrintf( - "bad rowspan value \"%s\": must be a positive integer", - Tcl_GetString(objv[i+1]))); - Tcl_SetErrorCode(interp, "TK", "VALUE", "SPAN", NULL); + Tcl_AppendResult(interp, "bad rowspan value \"", + Tcl_GetString(objv[i+1]), + "\": must be a positive integer", NULL); return TCL_ERROR; } if (SetSlaveRow(interp, slavePtr, -1, tmp) != TCL_OK) { @@ -3337,10 +3280,8 @@ ConfigureSlaves( break; } if (Tk_TopWinHierarchy(ancestor)) { - Tcl_SetObjResult(interp, Tcl_ObjPrintf( - "can't put %s inside %s", Tcl_GetString(objv[j]), - Tk_PathName(masterPtr->tkwin))); - Tcl_SetErrorCode(interp, "TK", "GEOMETRY", "HIERARCHY", NULL); + Tcl_AppendResult(interp, "can't put ", Tcl_GetString(objv[j]), + " inside ", Tk_PathName(masterPtr->tkwin), NULL); Unlink(slavePtr); return TCL_ERROR; } @@ -3351,25 +3292,14 @@ ConfigureSlaves( */ if (masterPtr->masterPtr == slavePtr) { - Tcl_SetObjResult(interp, Tcl_ObjPrintf( - "can't put %s inside %s, would cause management loop", - Tcl_GetString(objv[j]), Tk_PathName(masterPtr->tkwin))); - Tcl_SetErrorCode(interp, "TK", "GEOMETRY", "LOOP", NULL); + Tcl_AppendResult(interp, "can't put ", Tcl_GetString(objv[j]), + " inside ", Tk_PathName(masterPtr->tkwin), + ", would cause management loop.", NULL); Unlink(slavePtr); return TCL_ERROR; } - Tk_ManageGeometry(slave, &gridMgrType, slavePtr); - - if (!(masterPtr->flags & DONT_PROPAGATE)) { - if (TkSetGeometryMaster(interp, masterPtr->tkwin, "grid") - != TCL_OK) { - Tk_ManageGeometry(slave, NULL, NULL); - Unlink(slavePtr); - return TCL_ERROR; - } - masterPtr->flags |= ALLOCED_MASTER; - } + Tk_ManageGeometry(slave, &gridMgrType, (ClientData) slavePtr); /* * Assign default position information. @@ -3402,7 +3332,7 @@ ConfigureSlaves( } if (!(masterPtr->flags & REQUESTED_RELAYOUT)) { masterPtr->flags |= REQUESTED_RELAYOUT; - Tcl_DoWhenIdle(ArrangeGrid, masterPtr); + Tcl_DoWhenIdle(ArrangeGrid, (ClientData) masterPtr); } } @@ -3414,8 +3344,8 @@ ConfigureSlaves( numSkip = 0; for (j = 0; j < numWindows; j++) { struct Gridder *otherPtr; - int match; /* Found a match for the ^ */ - int lastRow, lastColumn; /* Implied end of table. */ + int match; /* Found a match for the ^ */ + int lastRow, lastColumn; /* Implied end of table. */ string = Tcl_GetString(objv[j]); firstChar = string[0]; @@ -3432,9 +3362,7 @@ ConfigureSlaves( } if (masterPtr == NULL) { - Tcl_SetObjResult(interp, Tcl_NewStringObj( - "can't use '^', cant find master", -1)); - Tcl_SetErrorCode(interp, "TK", "GRID", "SHORTCUT_USAGE", NULL); + Tcl_AppendResult(interp, "can't use '^', cant find master", NULL); return TCL_ERROR; } @@ -3443,7 +3371,7 @@ ConfigureSlaves( */ for (width = 1; width + j < numWindows; width++) { - const char *string = Tcl_GetString(objv[j+width]); + char *string = Tcl_GetString(objv[j+width]); if (*string != REL_VERT) { break; @@ -3486,44 +3414,30 @@ ConfigureSlaves( } } if (!match) { - Tcl_SetObjResult(interp, Tcl_NewStringObj( - "can't find slave to extend with \"^\"", -1)); - Tcl_SetErrorCode(interp, "TK", "GRID", "SHORTCUT_USAGE", NULL); + Tcl_AppendResult(interp, "can't find slave to extend with \"^\".", + NULL); return TCL_ERROR; } } if (masterPtr == NULL) { - Tcl_SetObjResult(interp, Tcl_NewStringObj( - "can't determine master window", -1)); - Tcl_SetErrorCode(interp, "TK", "GRID", "SHORTCUT_USAGE", NULL); + Tcl_AppendResult(interp, "can't determine master window", NULL); return TCL_ERROR; } SetGridSize(masterPtr); - - /* - * If we have emptied this master from slaves it means we are no longer - * handling it and should mark it as free. - */ - - if (masterPtr->slavePtr == NULL && masterPtr->flags & ALLOCED_MASTER) { - TkFreeGeometryMaster(masterPtr->tkwin, "grid"); - masterPtr->flags &= ~ALLOCED_MASTER; - } - return TCL_OK; } /* *---------------------------------------------------------------------- * - * StickyToObj + * StickyToString * * Converts the internal boolean combination of "sticky" bits onto a Tcl * list element containing zero or more of n, s, e, or w. * * Results: - * A new object is returned that holds the sticky representation. + * A string is placed into the "result" pointer. * * Side effects: * none. @@ -3531,26 +3445,29 @@ ConfigureSlaves( *---------------------------------------------------------------------- */ -static Tcl_Obj * -StickyToObj( - int flags) /* The sticky flags. */ +static void +StickyToString( + int flags, /* The sticky flags. */ + char *result) /* Where to put the result. */ { int count = 0; - char buffer[4]; - - if (flags & STICK_NORTH) { - buffer[count++] = 'n'; + if (flags&STICK_NORTH) { + result[count++] = 'n'; } - if (flags & STICK_EAST) { - buffer[count++] = 'e'; + if (flags&STICK_EAST) { + result[count++] = 'e'; } - if (flags & STICK_SOUTH) { - buffer[count++] = 's'; + if (flags&STICK_SOUTH) { + result[count++] = 's'; } - if (flags & STICK_WEST) { - buffer[count++] = 'w'; + if (flags&STICK_WEST) { + result[count++] = 'w'; + } + if (count) { + result[count] = '\0'; + } else { + sprintf(result, "{}"); } - return Tcl_NewStringObj(buffer, count); } /* @@ -3573,7 +3490,7 @@ StickyToObj( static int StringToSticky( - const char *string) + char *string) { int sticky = 0; char c; |