From 9bd20d49e2ae9761192be74c1b3165f79ee55b57 Mon Sep 17 00:00:00 2001 From: stanton Date: Tue, 24 Nov 1998 21:42:39 +0000 Subject: * tkMacMenu.c, tkUnixMenu.c, tkWinMenu.c, tkMenuDraw.c, tkMenu.h, * tkMenu.c: Backed out the previous fix for bug 620 and eliminated a bunch of code that created unnecessary objects. Changed back to using internal types instead of objects for many configuration options. There are many more fixes like this that could be made, but some require a little restructuring of the code. In any case the leaks are fixed and there is a lot less allocation happening. [Bug: 620] --- ChangeLog | 20 +++++++++ generic/tkMenu.c | 114 ++++++++++++++++++------------------------------- generic/tkMenu.h | 38 +++++++++-------- generic/tkMenuDraw.c | 12 ++---- mac/tkMacMenu.c | 118 ++++++++++++--------------------------------------- unix/tkUnixMenu.c | 61 ++++++-------------------- win/tkWinMenu.c | 103 +++++++++++--------------------------------- 7 files changed, 149 insertions(+), 317 deletions(-) create mode 100644 ChangeLog diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..965191c --- /dev/null +++ b/ChangeLog @@ -0,0 +1,20 @@ +1998-11-24 + + * tkMacMenu.c, tkUnixMenu.c, tkWinMenu.c, tkMenuDraw.c, tkMenu.h, + * tkMenu.c: Backed out the previous fix for bug 620 and + eliminated a bunch of code that created unnecessary objects. + Changed back to using internal types instead of objects for many + configuration options. There are many more fixes like this that + could be made, but some require a little restructuring of the + code. In any case the leaks are fixed and there is a lot less + allocation happening. [Bug: 620] + +1998-11-19 + + * tkMenu.c (DestroyMenuEntry): fixed memory leaks [Bug: 620] + + * tkWinX.c (GetTranslatedKey): fixed bad code merge + + * tkWinWm.c, tkWinMenu.c: fixed titles and menus so they properly + display Unicode [Bug: 819] + diff --git a/generic/tkMenu.c b/generic/tkMenu.c index fd083cf..bef635f 100644 --- a/generic/tkMenu.c +++ b/generic/tkMenu.c @@ -12,7 +12,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkMenu.c,v 1.1.4.2 1998/09/30 02:17:08 stanton Exp $ + * RCS: @(#) $Id: tkMenu.c,v 1.1.4.3 1998/11/24 21:42:39 stanton Exp $ */ /* @@ -105,7 +105,7 @@ Tk_OptionSpec tkBasicMenuEntryConfigSpecs[] = { Tk_Offset(TkMenuEntry, bitmapPtr), -1, TK_OPTION_NULL_OK}, {TK_OPTION_BOOLEAN, "-columnbreak", (char *) NULL, (char *) NULL, DEF_MENU_ENTRY_COLUMN_BREAK, - Tk_Offset(TkMenuEntry, columnBreakPtr), -1}, + -1, Tk_Offset(TkMenuEntry, columnBreak)}, {TK_OPTION_STRING, "-command", (char *) NULL, (char *) NULL, DEF_MENU_ENTRY_COMMAND, Tk_Offset(TkMenuEntry, commandPtr), -1, TK_OPTION_NULL_OK}, @@ -117,7 +117,7 @@ Tk_OptionSpec tkBasicMenuEntryConfigSpecs[] = { Tk_Offset(TkMenuEntry, fgPtr), -1, TK_OPTION_NULL_OK}, {TK_OPTION_BOOLEAN, "-hidemargin", (char *) NULL, (char *) NULL, DEF_MENU_ENTRY_HIDE_MARGIN, - Tk_Offset(TkMenuEntry, hideMarginPtr), -1}, + -1, Tk_Offset(TkMenuEntry, hideMargin)}, {TK_OPTION_STRING, "-image", (char *) NULL, (char *) NULL, DEF_MENU_ENTRY_IMAGE, Tk_Offset(TkMenuEntry, imagePtr), -1, TK_OPTION_NULL_OK}, @@ -126,7 +126,7 @@ Tk_OptionSpec tkBasicMenuEntryConfigSpecs[] = { Tk_Offset(TkMenuEntry, labelPtr), -1, 0}, {TK_OPTION_STRING_TABLE, "-state", (char *) NULL, (char *) NULL, DEF_MENU_ENTRY_STATE, - Tk_Offset(TkMenuEntry, statePtr), -1, 0, + -1, Tk_Offset(TkMenuEntry, state), 0, (ClientData) tkMenuStateStrings}, {TK_OPTION_INT, "-underline", (char *) NULL, (char *) NULL, DEF_MENU_ENTRY_UNDERLINE, -1, Tk_Offset(TkMenuEntry, underline)}, @@ -143,7 +143,7 @@ Tk_OptionSpec tkSeparatorEntryConfigSpecs[] = { Tk_OptionSpec tkCheckButtonEntryConfigSpecs[] = { {TK_OPTION_BOOLEAN, "-indicatoron", (char *) NULL, (char *) NULL, DEF_MENU_ENTRY_INDICATOR, - Tk_Offset(TkMenuEntry, indicatorOnPtr), -1}, + -1, Tk_Offset(TkMenuEntry, indicatorOn)}, {TK_OPTION_STRING, "-offvalue", (char *) NULL, (char *) NULL, DEF_MENU_ENTRY_OFF_VALUE, Tk_Offset(TkMenuEntry, offValuePtr), -1}, @@ -166,7 +166,7 @@ Tk_OptionSpec tkCheckButtonEntryConfigSpecs[] = { Tk_OptionSpec tkRadioButtonEntryConfigSpecs[] = { {TK_OPTION_BOOLEAN, "-indicatoron", (char *) NULL, (char *) NULL, DEF_MENU_ENTRY_INDICATOR, - Tk_Offset(TkMenuEntry, indicatorOnPtr), -1}, + -1, Tk_Offset(TkMenuEntry, indicatorOn)}, {TK_OPTION_COLOR, "-selectcolor", (char *) NULL, (char *) NULL, DEF_MENU_ENTRY_SELECT, Tk_Offset(TkMenuEntry, indicatorFgPtr), -1, TK_OPTION_NULL_OK}, @@ -196,7 +196,7 @@ Tk_OptionSpec tkTearoffEntryConfigSpecs[] = { DEF_MENU_ENTRY_BG, Tk_Offset(TkMenuEntry, borderPtr), -1, TK_OPTION_NULL_OK}, {TK_OPTION_STRING_TABLE, "-state", (char *) NULL, (char *) NULL, - DEF_MENU_ENTRY_STATE, Tk_Offset(TkMenuEntry, statePtr), -1, 0, + DEF_MENU_ENTRY_STATE, -1, Tk_Offset(TkMenuEntry, state), 0, (ClientData) tkMenuStateStrings}, {TK_OPTION_END} }; @@ -260,8 +260,7 @@ Tk_OptionSpec tkMenuConfigSpecs[] = { DEF_MENU_TAKE_FOCUS, Tk_Offset(TkMenu, takeFocusPtr), -1, TK_OPTION_NULL_OK}, {TK_OPTION_BOOLEAN, "-tearoff", "tearOff", "TearOff", - DEF_MENU_TEAROFF, - Tk_Offset(TkMenu, tearoffPtr), -1}, + DEF_MENU_TEAROFF, -1, Tk_Offset(TkMenu, tearoff)}, {TK_OPTION_STRING, "-tearoffcommand", "tearOffCommand", "TearOffCommand", DEF_MENU_TEAROFF_CMD, Tk_Offset(TkMenu, tearoffCommandPtr), -1, TK_OPTION_NULL_OK}, @@ -484,7 +483,7 @@ MenuCmd(clientData, interp, objc, objv) menuPtr->disabledFgPtr = NULL; menuPtr->activeFgPtr = NULL; menuPtr->indicatorFgPtr = NULL; - menuPtr->tearoffPtr = NULL; + menuPtr->tearoff = 0; menuPtr->tearoffCommandPtr = NULL; menuPtr->cursorPtr = None; menuPtr->takeFocusPtr = NULL; @@ -692,17 +691,10 @@ MenuWidgetObjCmd(clientData, interp, objc, objv) if (menuPtr->active == index) { goto done; } - if (index >= 0) { - if (menuPtr->entries[index]->type == SEPARATOR_ENTRY) { - int state; - - Tcl_GetIndexFromObj(interp, - menuPtr->entries[index]->statePtr, - tkMenuStateStrings, NULL, 0, &state); - if (state == ENTRY_DISABLED) { - index = -1; - } - } + if ((index >= 0) + && (menuPtr->entries[index]->type == SEPARATOR_ENTRY) + && (menuPtr->entries[index]->state == ENTRY_DISABLED)) { + index = -1; } result = TkActivateMenuEntry(menuPtr, index); break; @@ -774,7 +766,7 @@ MenuWidgetObjCmd(clientData, interp, objc, objv) break; } case MENU_DELETE: { - int first, last, tearoff; + int first, last; if ((objc != 3) && (objc != 4)) { Tcl_WrongNumArgs(interp, 1, objv, "delete first ?last?"); @@ -792,8 +784,7 @@ MenuWidgetObjCmd(clientData, interp, objc, objv) goto error; } } - Tcl_GetBooleanFromObj(interp, menuPtr->tearoffPtr, &tearoff); - if (tearoff && (first == 0)) { + if (menuPtr->tearoff && (first == 0)) { /* * Sorry, can't delete the tearoff entry; must reconfigure @@ -889,9 +880,9 @@ MenuWidgetObjCmd(clientData, interp, objc, objv) goto error; } if (index < 0) { - Tcl_SetObjResult(interp, Tcl_NewStringObj("none", -1)); + Tcl_SetResult(interp, "none", TCL_STATIC); } else { - Tcl_SetObjResult(interp, Tcl_NewIntObj(index)); + Tcl_SetIntObj(Tcl_GetObjResult(interp), index); } break; } @@ -985,11 +976,11 @@ MenuWidgetObjCmd(clientData, interp, objc, objv) goto done; } if (menuPtr->entries[index]->type == TEAROFF_ENTRY) { - Tcl_SetObjResult(interp, Tcl_NewStringObj("tearoff", -1)); + Tcl_SetResult(interp, "tearoff", TCL_STATIC); } else { - Tcl_SetObjResult(interp, Tcl_NewStringObj( - menuEntryTypeStrings[menuPtr->entries[index]->type], - -1)); + Tcl_SetResult(interp, + menuEntryTypeStrings[menuPtr->entries[index]->type], + TCL_STATIC); } break; } @@ -1045,28 +1036,22 @@ TkInvokeMenu(interp, menuPtr, index) { int result = TCL_OK; TkMenuEntry *mePtr; - int state; if (index < 0) { goto done; } mePtr = menuPtr->entries[index]; - Tcl_GetIndexFromObj(NULL, mePtr->statePtr, tkMenuStateStrings, NULL, 0, - &state); - if (state == ENTRY_DISABLED) { + if (mePtr->state == ENTRY_DISABLED) { goto done; } Tcl_Preserve((ClientData) mePtr); if (mePtr->type == TEAROFF_ENTRY) { - Tcl_Obj *objv[2]; - - objv[0] = Tcl_NewStringObj("tkTearOffMenu", -1); - Tcl_IncrRefCount(objv[0]); - objv[1] = Tcl_NewStringObj(Tk_PathName(menuPtr->tkwin), -1); - Tcl_IncrRefCount(objv[1]); - result = Tcl_EvalObjv(interp, 2, objv, "", -1, 0); - Tcl_DecrRefCount(objv[0]); - Tcl_DecrRefCount(objv[1]); + Tcl_DString ds; + Tcl_DStringInit(&ds); + Tcl_DStringAppend(&ds, "tkTearOffMenu ", -1); + Tcl_DStringAppend(&ds, Tk_PathName(menuPtr->tkwin), -1); + result = Tcl_Eval(interp, Tcl_DStringValue(&ds)); + Tcl_DStringFree(&ds); } else if ((mePtr->type == CHECK_BUTTON_ENTRY) && (mePtr->namePtr != NULL)) { Tcl_Obj *valuePtr; @@ -1078,7 +1063,7 @@ TkInvokeMenu(interp, menuPtr, index) valuePtr = mePtr->onValuePtr; } if (valuePtr == NULL) { - valuePtr = Tcl_NewStringObj("", -1); + valuePtr = Tcl_NewObj(); } Tcl_IncrRefCount(valuePtr); name = Tcl_GetStringFromObj(mePtr->namePtr, NULL); @@ -1093,7 +1078,7 @@ TkInvokeMenu(interp, menuPtr, index) char *name = Tcl_GetStringFromObj(mePtr->namePtr, NULL); if (valuePtr == NULL) { - valuePtr = Tcl_NewStringObj("", -1); + valuePtr = Tcl_NewObj(); } Tcl_IncrRefCount(valuePtr); if (Tcl_SetObjVar2(interp, name, NULL, valuePtr, @@ -1490,7 +1475,6 @@ ConfigureMenu(interp, menuPtr, objc, objv) int i; TkMenu *menuListPtr, *cleanupPtr; int result; - int tearoff; for (menuListPtr = menuPtr->masterMenuPtr; menuListPtr != NULL; menuListPtr = menuListPtr->nextInstancePtr) { @@ -1543,8 +1527,7 @@ ConfigureMenu(interp, menuPtr, objc, objv) * isn't an initial tear-off entry at the beginning of the menu. */ - Tcl_GetBooleanFromObj(NULL, menuListPtr->tearoffPtr, &tearoff); - if (tearoff) { + if (menuListPtr->tearoff) { if ((menuListPtr->numEntries == 0) || (menuListPtr->entries[0]->type != TEAROFF_ENTRY)) { if (MenuNewEntry(menuListPtr, 0, TEAROFF_ENTRY) == NULL) { @@ -1817,8 +1800,8 @@ PostProcessEntry(mePtr) char *name = Tcl_GetStringFromObj(mePtr->namePtr, NULL); Tcl_SetObjVar2(menuPtr->interp, name, NULL, (mePtr->type == CHECK_BUTTON_ENTRY) - ? mePtr->offValuePtr : - Tcl_NewStringObj("", 0), + ? mePtr->offValuePtr + : Tcl_NewObj(), TCL_GLOBAL_ONLY); } } @@ -2233,20 +2216,16 @@ MenuNewEntry(menuPtr, index, type) mePtr->selectImage = NULL; mePtr->accelPtr = NULL; mePtr->accelLength = 0; - mePtr->statePtr = Tcl_NewStringObj("disabled", -1); - Tcl_IncrRefCount(mePtr->statePtr); + mePtr->state = ENTRY_DISABLED; mePtr->borderPtr = NULL; mePtr->fgPtr = NULL; mePtr->activeBorderPtr = NULL; mePtr->activeFgPtr = NULL; mePtr->fontPtr = NULL; - mePtr->indicatorOnPtr = Tcl_NewBooleanObj(1); - Tcl_IncrRefCount(mePtr->indicatorOnPtr); + mePtr->indicatorOn = 0; mePtr->indicatorFgPtr = NULL; - mePtr->columnBreakPtr = Tcl_NewBooleanObj(0); - Tcl_IncrRefCount(mePtr->columnBreakPtr); - mePtr->hideMarginPtr = Tcl_NewBooleanObj(0); - Tcl_IncrRefCount(mePtr->hideMarginPtr); + mePtr->columnBreak = 0; + mePtr->hideMargin = 0; mePtr->commandPtr = NULL; mePtr->namePtr = NULL; mePtr->childMenuRefPtr = NULL; @@ -2304,7 +2283,6 @@ MenuAddOrInsert(interp, menuPtr, indexPtr, objc, objv) int type, index; TkMenuEntry *mePtr; TkMenu *menuListPtr; - int tearoff; if (indexPtr != NULL) { if (TkGetMenuIndex(interp, menuPtr, indexPtr, 1, &index) @@ -2320,8 +2298,7 @@ MenuAddOrInsert(interp, menuPtr, indexPtr, objc, objv) (char *) NULL); return TCL_ERROR; } - Tcl_GetBooleanFromObj(NULL, menuPtr->tearoffPtr, &tearoff); - if (tearoff && (index == 0)) { + if (menuPtr->tearoff && (index == 0)) { index = 1; } @@ -2529,7 +2506,6 @@ TkActivateMenuEntry(menuPtr, index) { register TkMenuEntry *mePtr; int result = TCL_OK; - int state; if (menuPtr->active >= 0) { mePtr = menuPtr->entries[menuPtr->active]; @@ -2539,21 +2515,15 @@ TkActivateMenuEntry(menuPtr, index) * might already have been changed to disabled). */ - Tcl_GetIndexFromObj(NULL, mePtr->statePtr, tkMenuStateStrings, - NULL, 0, &state); - if (state == ENTRY_ACTIVE) { - Tcl_DecrRefCount(mePtr->statePtr); - mePtr->statePtr = Tcl_NewStringObj("normal", -1); - Tcl_IncrRefCount(mePtr->statePtr); + if (mePtr->state == ENTRY_ACTIVE) { + mePtr->state = ENTRY_NORMAL; } TkEventuallyRedrawMenu(menuPtr, menuPtr->entries[menuPtr->active]); } menuPtr->active = index; if (index >= 0) { mePtr = menuPtr->entries[index]; - Tcl_DecrRefCount(mePtr->statePtr); - mePtr->statePtr = Tcl_NewStringObj("active", -1); - Tcl_IncrRefCount(mePtr->statePtr); + mePtr->state = ENTRY_ACTIVE; TkEventuallyRedrawMenu(menuPtr, mePtr); } return result; @@ -3134,7 +3104,7 @@ TkSetWindowMenuBar(interp, tkwin, oldMenuName, menuName) if ((cloneMenuRefPtr != NULL) && (cloneMenuRefPtr->menuPtr != NULL)) { Tcl_Obj *cursorPtr = Tcl_NewStringObj("-cursor", -1); - Tcl_Obj *nullPtr = Tcl_NewStringObj("", -1); + Tcl_Obj *nullPtr = Tcl_NewObj(); cloneMenuRefPtr->menuPtr->parentTopLevelPtr = tkwin; menuBarPtr = cloneMenuRefPtr->menuPtr; newObjv[0] = cursorPtr; diff --git a/generic/tkMenu.h b/generic/tkMenu.h index b3c9bf2..502b575 100644 --- a/generic/tkMenu.h +++ b/generic/tkMenu.h @@ -8,7 +8,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkMenu.h,v 1.1.4.2 1998/09/30 02:17:09 stanton Exp $ + * RCS: @(#) $Id: tkMenu.h,v 1.1.4.3 1998/11/24 21:42:43 stanton Exp $ */ #ifndef _TKMENU @@ -51,7 +51,7 @@ typedef struct TkMenuEntry { Tcl_Obj *labelPtr; /* Main text label displayed in entry (NULL * if no label). */ int labelLength; /* Number of non-NULL characters in label. */ - Tcl_Obj *statePtr; /* State of button for display purposes: + int state; /* State of button for display purposes: * normal, active, or disabled. */ int underline; /* Value of -underline option: specifies index * of character to underline (<0 means don't @@ -74,8 +74,9 @@ typedef struct TkMenuEntry { * accelerator. Malloc'ed. */ int accelLength; /* Number of non-NULL characters in * accelerator. */ - Tcl_Obj *indicatorOnPtr; /* True means draw indicator, false means - * don't draw it. */ + int indicatorOn; /* True means draw indicator, false means + * don't draw it. This field is ignored unless + * the entry is a radio or check button. */ /* * Display attributes */ @@ -96,21 +97,22 @@ typedef struct TkMenuEntry { * GC from menu. */ Tcl_Obj *fontPtr; /* Text font for menu entries. NULL means * use overall font for menu. */ - Tcl_Obj *columnBreakPtr; /* If this is 0, this item appears below + int columnBreak; /* If this is 0, this item appears below * the item in front of it. If this is - * 1, this item starts a new column. */ - Tcl_Obj *hideMarginPtr; /* If this is 0, then the item has enough - * margin to accomodate a standard check - * mark and a default right margin. If this - * is 1, then the item has no such margins. - * and checkbuttons and radiobuttons with - * this set will have a rectangle drawn - * in the indicator around the item if - * the item is checked. - * This is useful palette menus.*/ + * 1, this item starts a new column. This + * field is always 0 for tearoff and separator + * entries. */ + int hideMargin; /* If this is 0, then the item has enough + * margin to accomodate a standard check mark + * and a default right margin. If this is 1, + * then the item has no such margins. and + * checkbuttons and radiobuttons with this set + * will have a rectangle drawn in the indicator + * around the item if the item is checked. This + * is useful for palette menus. This field is + * ignored for separators and tearoffs. */ int indicatorSpace; /* The width of the indicator space for this - * entry. - */ + * entry. */ int labelWidth; /* Number of pixels to allow for displaying * labels in menu entries. */ @@ -307,7 +309,7 @@ typedef struct TkMenu { * Miscellaneous information: */ - Tcl_Obj *tearoffPtr; /* 1 means this menu can be torn off. On some + int tearoff; /* 1 means this menu can be torn off. On some * platforms, the user can drag an outline * of the menu by just dragging outside of * the menu, and the tearoff is created where diff --git a/generic/tkMenuDraw.c b/generic/tkMenuDraw.c index f0cff47..0917964 100644 --- a/generic/tkMenuDraw.c +++ b/generic/tkMenuDraw.c @@ -9,7 +9,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkMenuDraw.c,v 1.1.4.2 1998/09/30 02:17:10 stanton Exp $ + * RCS: @(#) $Id: tkMenuDraw.c,v 1.1.4.3 1998/11/24 21:42:43 stanton Exp $ */ #include "tkMenu.h" @@ -310,14 +310,11 @@ TkMenuConfigureEntryDrawOptions(mePtr, index) unsigned long mask; Tk_Font tkfont; TkMenu *menuPtr = mePtr->menuPtr; - int state; tkfont = Tk_GetFontFromObj(menuPtr->tkwin, (mePtr->fontPtr != NULL) ? mePtr->fontPtr : menuPtr->fontPtr); - Tcl_GetIndexFromObj(NULL, mePtr->statePtr, tkMenuStateStrings, - NULL, 0, &state); - if (state == ENTRY_ACTIVE) { + if (mePtr->state == ENTRY_ACTIVE) { if (index != menuPtr->active) { TkActivateMenuEntry(menuPtr, index); } @@ -637,7 +634,6 @@ DisplayMenu(clientData) Tk_FontMetrics menuMetrics; int width; int borderWidth; - int columnBreak; Tk_3DBorder border; int activeBorderWidth; int relief; @@ -696,8 +692,8 @@ DisplayMenu(clientData) TkpDrawMenuEntry(mePtr, Tk_WindowId(menuPtr->tkwin), tkfont, &menuMetrics, mePtr->x, mePtr->y, width, mePtr->height, strictMotif, 1); - Tcl_GetBooleanFromObj(NULL, mePtr->columnBreakPtr, &columnBreak); - if ((index > 0) && (menuPtr->menuType != MENUBAR) && columnBreak) { + if ((index > 0) && (menuPtr->menuType != MENUBAR) + && mePtr->columnBreak) { mePtr = menuPtr->entries[index - 1]; Tk_Fill3DRectangle(tkwin, Tk_WindowId(tkwin), border, mePtr->x, mePtr->y + mePtr->height, diff --git a/mac/tkMacMenu.c b/mac/tkMacMenu.c index 54aa33d..0097c3f 100644 --- a/mac/tkMacMenu.c +++ b/mac/tkMacMenu.c @@ -8,7 +8,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkMacMenu.c,v 1.1.4.2 1998/09/30 02:18:11 stanton Exp $ + * RCS: @(#) $Id: tkMacMenu.c,v 1.1.4.3 1998/11/24 21:42:44 stanton Exp $ */ #include @@ -800,7 +800,6 @@ SetMenuIndicator( TkMenu *menuPtr = mePtr->menuPtr; MenuHandle macMenuHdl = ((MacMenu *) menuPtr->platformData)->menuHdl; char markChar; - int indicatorOn; /* * There can be no indicators on menus that are not checkbuttons @@ -819,8 +818,7 @@ SetMenuIndicator( markChar = 0; if ((mePtr->type == RADIO_BUTTON_ENTRY) || (mePtr->type == CHECK_BUTTON_ENTRY)) { - Tcl_GetBooleanFromObj(NULL, mePtr->indicatorOnPtr, &indicatorOn); - if (indicatorOn && (mePtr->entryFlags & ENTRY_SELECTED)) { + if (mePtr->indicatorOn && (mePtr->entryFlags & ENTRY_SELECTED)) { markChar = FindMarkCharacter(mePtr); } } @@ -1050,9 +1048,7 @@ ReconfigureIndividualMenu( : Tcl_GetStringFromObj(mePtr->namePtr, NULL); if (strcmp(Tk_PathName(menuPtr->tkwin), name) == 0) { - Tcl_GetIndexFromObj(NULL, mePtr->statePtr, tkMenuStateStrings, - NULL, 0, &state); - if (state == ENTRY_DISABLED) { + if (mePtr->state == ENTRY_DISABLED) { parentDisabled = 1; } break; @@ -1099,9 +1095,7 @@ ReconfigureIndividualMenu( * Set enabling and disabling correctly. */ - Tcl_GetIndexFromObj(NULL, mePtr->statePtr, tkMenuStateStrings, - NULL, 0, &state); - if (parentDisabled || (state == ENTRY_DISABLED)) { + if (parentDisabled || (mePtr->state == ENTRY_DISABLED)) { DisableItem(macMenuHdl, base + index); } else { EnableItem(macMenuHdl, base + index); @@ -1114,13 +1108,9 @@ ReconfigureIndividualMenu( SetItemMark(macMenuHdl, base + index, 0); if ((mePtr->type == CHECK_BUTTON_ENTRY) || (mePtr->type == RADIO_BUTTON_ENTRY)) { - int indicatorOn; - - Tcl_GetBooleanFromObj(NULL, mePtr->indicatorOnPtr, - &indicatorOn); CheckItem(macMenuHdl, base + index, (mePtr->entryFlags - & ENTRY_SELECTED) && (indicatorOn)); - if ((indicatorOn) + & ENTRY_SELECTED) && mePtr->indicatorOn); + if (mePtr->indicatorOn && (mePtr->entryFlags & ENTRY_SELECTED)) { SetItemMark(macMenuHdl, base + index, FindMarkCharacter(mePtr)); @@ -1607,13 +1597,8 @@ DrawMenuBarWhenIdle( if (menuBarPtr == NULL) { SetDefaultMenubar(); } else { - int menuBarTearoff, menuTearoff; - - Tcl_GetBooleanFromObj(NULL, menuBarPtr->tearoffPtr, - &menuBarTearoff); - Tcl_GetBooleanFromObj(NULL, menuPtr->tearoffPtr, &menuTearoff); - if (menuBarTearoff != menuTearoff) { - if (menuBarTearoff) { + if (menuBarPtr->tearoff != menuPtr->tearoff) { + if (menuBarPtr->tearoff) { appleIndex = (-1 == appleIndex) ? appleIndex : appleIndex + 1; helpIndex = (-1 == helpIndex) ? helpIndex @@ -1661,12 +1646,7 @@ DrawMenuBarWhenIdle( for (i = 0; i < menuBarPtr->numEntries; i++) { if (i == appleIndex) { - int state; - - Tcl_GetIndexFromObj(NULL, - menuBarPtr->entries[i]->statePtr, - tkMenuStateStrings, NULL, 0, &state); - if (state == ENTRY_DISABLED) { + if (menuBarPtr->entries[i]->state == ENTRY_DISABLED) { DisableItem(((MacMenu *) menuBarPtr->entries[i] ->childMenuRefPtr->menuPtr ->platformData)->menuHdl, @@ -1702,8 +1682,6 @@ DrawMenuBarWhenIdle( if ((menuBarPtr->entries[i]->childMenuRefPtr != NULL) && menuBarPtr->entries[i]->childMenuRefPtr ->menuPtr != NULL) { - int state; - cascadeMenuPtr = menuBarPtr->entries[i] ->childMenuRefPtr->menuPtr; macMenuHdl = ((MacMenu *) cascadeMenuPtr @@ -1711,10 +1689,7 @@ DrawMenuBarWhenIdle( DeleteMenu((*macMenuHdl)->menuID); InsertMenu(macMenuHdl, 0); RecursivelyInsertMenu(cascadeMenuPtr); - Tcl_GetIndexFromObj(NULL, - menuBarPtr->entries[i]->statePtr, - tkMenuStateStrings, NULL, 0, &state); - if (state == ENTRY_DISABLED) { + if (menuBarPtr->entries[i]->state == ENTRY_DISABLED) { DisableItem(((MacMenu *) menuBarPtr->entries[i] ->childMenuRefPtr->menuPtr ->platformData)->menuHdl, @@ -2262,11 +2237,7 @@ DrawMenuEntryIndicator( { if ((mePtr->type == CHECK_BUTTON_ENTRY) || (mePtr->type == RADIO_BUTTON_ENTRY)) { - int indicatorOn; - - Tcl_GetBooleanFromObj(NULL, mePtr->indicatorOnPtr, &indicatorOn); - - if ((indicatorOn) + if (mePtr->indicatorOn && (mePtr->entryFlags & ENTRY_SELECTED)) { int baseline; short markShort; @@ -2711,7 +2682,7 @@ MenuDefProc( break; case mChooseMsg: { - int hasTopScroll, hasBottomScroll, tearoff; + int hasTopScroll, hasBottomScroll; enum { DONT_SCROLL, DOWN_SCROLL, UP_SCROLL } scrollDirection; @@ -2753,12 +2724,8 @@ MenuDefProc( itemRect.bottom = itemRect.top + menuPtr->entries[i]->height; if (PtInRect(hitPt, &itemRect)) { - int state; - - Tcl_GetIndexFromObj(NULL, mePtr->statePtr, - tkMenuStateStrings, NULL, 0, &state); if ((mePtr->type == SEPARATOR_ENTRY) - || (state == ENTRY_DISABLED)) { + || (mePtr->state == ENTRY_DISABLED)) { newItem = -1; } else { TkMenuEntry *cascadeEntryPtr; @@ -2775,11 +2742,7 @@ MenuDefProc( cascadeEntryPtr->namePtr, NULL); if (strcmp(name, Tk_PathName(menuPtr->tkwin)) == 0) { - Tcl_GetIndexFromObj(NULL, - cascadeEntryPtr->statePtr, - tkMenuStateStrings, NULL, 0, - &state); - if (state == ENTRY_DISABLED) { + if (cascadeEntryPtr->state == ENTRY_DISABLED) { parentDisabled = 1; } break; @@ -2831,8 +2794,6 @@ MenuDefProc( ClipRect(&menuClipRect); if (oldItem != newItem) { - int state; - if (oldItem >= 0) { mePtr = menuPtr->entries[oldItem]; if (mePtr->fontPtr == NULL) { @@ -2855,9 +2816,7 @@ MenuDefProc( int oldActiveItem = menuPtr->active; mePtr = menuPtr->entries[newItem]; - Tcl_GetIndexFromObj(NULL, mePtr->statePtr, - tkMenuStateStrings, NULL, 0, &state); - if (state != ENTRY_DISABLED) { + if (mePtr->state != ENTRY_DISABLED) { TkActivateMenuEntry(menuPtr, newItem); } if (mePtr->fontPtr == NULL) { @@ -2882,9 +2841,7 @@ MenuDefProc( MenuSelectEvent(menuPtr); Tcl_ServiceAll(); tkUseMenuCascadeRgn = 0; - Tcl_GetIndexFromObj(NULL, mePtr->statePtr, - tkMenuStateStrings, NULL, 0, &state); - if (state != ENTRY_DISABLED) { + if (mePtr->state != ENTRY_DISABLED) { TkActivateMenuEntry(menuPtr, -1); } *whichItem = newItem + 1; @@ -3006,8 +2963,7 @@ MenuDefProc( } } - Tcl_GetBooleanFromObj(NULL, menuPtr->tearoffPtr, &tearoff); - if (tearoff) { + if (menuPtr->tearoff) { scratchRect = *menuRectPtr; if (tearoffStruct.menuPtr == NULL) { scratchRect.top -= 10; @@ -3389,9 +3345,7 @@ TkpDrawMenuEntry( * Choose the gc for drawing the foreground part of the entry. */ - Tcl_GetIndexFromObj(NULL, mePtr->statePtr, tkMenuStateStrings, NULL, - 0, &state); - if ((state == ENTRY_ACTIVE) && !strictMotif) { + if ((mePtr->state == ENTRY_ACTIVE) && !strictMotif) { gc = mePtr->activeGC; if (gc == NULL) { gc = menuPtr->activeGC; @@ -3407,11 +3361,7 @@ TkpDrawMenuEntry( : Tcl_GetStringFromObj(cascadeEntryPtr->namePtr, NULL); if (strcmp(name, Tk_PathName(menuPtr->tkwin)) == 0) { - int cascadeState; - - Tcl_GetIndexFromObj(NULL, cascadeEntryPtr->statePtr, - tkMenuStateStrings, NULL, 0, &cascadeState); - if (cascadeState == ENTRY_DISABLED) { + if (cascadeEntryPtr->state == ENTRY_DISABLED) { parentDisabled = 1; } break; @@ -3471,14 +3421,11 @@ TkpDrawMenuEntry( DrawTearoffEntry(menuPtr, mePtr, d, gc, tkfont, fmPtr, x, adjustedY, width, adjustedHeight); } else { - int hideMargin; - DrawMenuEntryLabel(menuPtr, mePtr, d, gc, tkfont, fmPtr, x, adjustedY, width, adjustedHeight); DrawMenuEntryAccelerator(menuPtr, mePtr, d, gc, tkfont, fmPtr, activeBorder, x, adjustedY, width, adjustedHeight, drawArrow); - Tcl_GetBooleanFromObj(NULL, mePtr->hideMarginPtr, &hideMargin); - if (!hideMargin) { + if (!mePtr->hideMargin) { DrawMenuEntryIndicator(menuPtr, mePtr, d, gc, indicatorGC, tkfont, fmPtr, x, adjustedY, width, adjustedHeight); } @@ -3548,8 +3495,6 @@ TkpComputeStandardMenuGeometry( Tk_GetFontMetrics(menuFont, &menuMetrics); for (i = 0; i < menuPtr->numEntries; i++) { - int columnBreak; - mePtr = menuPtr->entries[i]; if (mePtr->fontPtr == NULL) { tkfont = menuFont; @@ -3560,8 +3505,7 @@ TkpComputeStandardMenuGeometry( fmPtr = &entryMetrics; } - Tcl_GetBooleanFromObj(NULL, mePtr->columnBreakPtr, &columnBreak); - if ((i > 0) && columnBreak) { + if ((i > 0) && mePtr->columnBreak) { if (maxIndicatorSpace != 0) { maxIndicatorSpace += 2; } @@ -3605,10 +3549,6 @@ TkpComputeStandardMenuGeometry( fmPtr, &entryWidth, &height); mePtr->height = height; } else { - int hideMargin; - - Tcl_GetBooleanFromObj(NULL, mePtr->hideMarginPtr, &hideMargin); - /* * For each entry, compute the height required by that * particular entry, plus three widths: the width of the @@ -3628,8 +3568,8 @@ TkpComputeStandardMenuGeometry( &modifierWidth, &accelWidth, &height); nonAccelMargin = 0; } else if (mePtr->accelLength == 0) { - nonAccelMargin = hideMargin ? 0 - : Tk_TextWidth(tkfont, "m", 1); + nonAccelMargin = mePtr->hideMargin ? 0 + : Tk_TextWidth(tkfont, "m", 1); accelWidth = modifierWidth = 0; } else { labelWidth += Tk_TextWidth(tkfont, "m", 1); @@ -3641,7 +3581,7 @@ TkpComputeStandardMenuGeometry( nonAccelMargin = 0; } - if (!(hideMargin)) { + if (!(mePtr->hideMargin)) { GetMenuIndicatorGeometry(menuPtr, mePtr, tkfont, fmPtr, &indicatorSpace, &height); if (height > mePtr->height) { @@ -3804,9 +3744,7 @@ DrawMenuEntryLabel( } } - Tcl_GetIndexFromObj(NULL, mePtr->statePtr, tkMenuStateStrings, NULL, - 0, &state); - if (state == ENTRY_DISABLED) { + if (mePtr->state == ENTRY_DISABLED) { if (menuPtr->disabledFgPtr == NULL) { XFillRectangle(menuPtr->display, d, menuPtr->disabledGC, x, y, (unsigned) width, (unsigned) height); @@ -3849,11 +3787,7 @@ DrawMenuEntryBackground( int width, /* width of rectangle to draw */ int height) /* height of rectangle to draw */ { - int state; - - Tcl_GetIndexFromObj(NULL, mePtr->statePtr, tkMenuStateStrings, NULL, - 0, &state); - if (state == ENTRY_ACTIVE) { + if (mePtr->state == ENTRY_ACTIVE) { bgBorder = activeBorder; } Tk_Fill3DRectangle(menuPtr->tkwin, d, bgBorder, diff --git a/unix/tkUnixMenu.c b/unix/tkUnixMenu.c index 3ecdee7..06c37fd 100644 --- a/unix/tkUnixMenu.c +++ b/unix/tkUnixMenu.c @@ -8,7 +8,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkUnixMenu.c,v 1.1.4.2 1998/09/30 02:19:19 stanton Exp $ + * RCS: @(#) $Id: tkUnixMenu.c,v 1.1.4.3 1998/11/24 21:42:47 stanton Exp $ */ #include "tkPort.h" @@ -323,12 +323,7 @@ GetMenuIndicatorGeometry(menuPtr, mePtr, tkfont, fmPtr, widthPtr, heightPtr) { if ((mePtr->type == CHECK_BUTTON_ENTRY) || (mePtr->type == RADIO_BUTTON_ENTRY)) { - int hideMargin; - int indicatorOn; - - Tcl_GetBooleanFromObj(NULL, mePtr->hideMarginPtr, &hideMargin); - Tcl_GetBooleanFromObj(NULL, mePtr->indicatorOnPtr, &indicatorOn); - if (!hideMargin && indicatorOn) { + if (!mePtr->hideMargin && mePtr->indicatorOn) { if ((mePtr->image != NULL) || (mePtr->bitmapPtr != NULL)) { *widthPtr = (14 * mePtr->height) / 10; *heightPtr = mePtr->height; @@ -438,11 +433,7 @@ DrawMenuEntryBackground(menuPtr, mePtr, d, activeBorder, bgBorder, x, y, int width; /* Width of entry rect */ int height; /* Height of entry rect */ { - int state; - - Tcl_GetIndexFromObj(NULL, mePtr->statePtr, tkMenuStateStrings, - NULL, 0, &state); - if (state == ENTRY_ACTIVE) { + if (mePtr->state == ENTRY_ACTIVE) { int relief; int activeBorderWidth; @@ -572,17 +563,11 @@ DrawMenuEntryIndicator(menuPtr, mePtr, d, gc, indicatorGC, tkfont, fmPtr, int width; /* Width of menu entry */ int height; /* Height of menu entry */ { - /* * Draw check-button indicator. */ - if (mePtr->type == CHECK_BUTTON_ENTRY) { - int indicatorOn; - - Tcl_GetBooleanFromObj(NULL, mePtr->indicatorOnPtr, &indicatorOn); - - if (indicatorOn) { + if ((mePtr->type == CHECK_BUTTON_ENTRY) && mePtr->indicatorOn) { int dim, top, left; int activeBorderWidth; Tk_3DBorder border; @@ -614,12 +599,7 @@ DrawMenuEntryIndicator(menuPtr, mePtr, d, gc, indicatorGC, tkfont, fmPtr, * Draw radio-button indicator. */ - if (mePtr->type == RADIO_BUTTON_ENTRY) { - int indicatorOn; - - Tcl_GetBooleanFromObj(NULL, mePtr->indicatorOnPtr, &indicatorOn); - - if (indicatorOn) { + if ((mePtr->type == RADIO_BUTTON_ENTRY) && mePtr->indicatorOn) { XPoint points[4]; int radius; Tk_3DBorder border; @@ -775,9 +755,7 @@ DrawMenuEntryLabel(menuPtr, mePtr, d, gc, tkfont, fmPtr, x, y, width, height) } } - Tcl_GetIndexFromObj(NULL, mePtr->statePtr, tkMenuStateStrings, NULL, - 0, &state); - if (state == ENTRY_DISABLED) { + if (mePtr->state == ENTRY_DISABLED) { if (menuPtr->disabledFgPtr == NULL) { XFillRectangle(menuPtr->display, d, menuPtr->disabledGC, x, y, (unsigned) width, (unsigned) height); @@ -1302,15 +1280,12 @@ TkpDrawMenuEntry(mePtr, d, tkfont, menuMetricsPtr, x, y, width, height, int padY = (menuPtr->menuType == MENUBAR) ? 3 : 0; int adjustedY = y + padY; int adjustedHeight = height - 2 * padY; - int state; /* * Choose the gc for drawing the foreground part of the entry. */ - Tcl_GetIndexFromObj(NULL, mePtr->statePtr, tkMenuStateStrings, NULL, - 0, &state); - if ((state == ENTRY_ACTIVE) && !strictMotif) { + if ((mePtr->state == ENTRY_ACTIVE) && !strictMotif) { gc = mePtr->activeGC; if (gc == NULL) { gc = menuPtr->activeGC; @@ -1327,11 +1302,7 @@ TkpDrawMenuEntry(mePtr, d, tkfont, menuMetricsPtr, x, y, width, height, NULL); if (strcmp(name, Tk_PathName(menuPtr->tkwin)) == 0) { - int cascadeState; - - Tcl_GetIndexFromObj(NULL, cascadeEntryPtr->statePtr, - tkMenuStateStrings, NULL, 0, &cascadeState); - if (cascadeState == ENTRY_DISABLED) { + if (cascadeEntryPtr->state == ENTRY_DISABLED) { parentDisabled = 1; } break; @@ -1392,14 +1363,11 @@ TkpDrawMenuEntry(mePtr, d, tkfont, menuMetricsPtr, x, y, width, height, DrawTearoffEntry(menuPtr, mePtr, d, gc, tkfont, fmPtr, x, adjustedY, width, adjustedHeight); } else { - int hideMargin; - DrawMenuEntryLabel(menuPtr, mePtr, d, gc, tkfont, fmPtr, x, adjustedY, width, adjustedHeight); DrawMenuEntryAccelerator(menuPtr, mePtr, d, gc, tkfont, fmPtr, activeBorder, x, adjustedY, width, adjustedHeight, drawArrow); - Tcl_GetBooleanFromObj(NULL, mePtr->hideMarginPtr, &hideMargin); - if (!hideMargin) { + if (!mePtr->hideMargin) { DrawMenuEntryIndicator(menuPtr, mePtr, d, gc, indicatorGC, tkfont, fmPtr, x, adjustedY, width, adjustedHeight); } @@ -1485,7 +1453,6 @@ TkpComputeStandardMenuGeometry( int i, j, lastColumnBreak = 0; TkMenuEntry *mePtr; int borderWidth, activeBorderWidth; - int columnBreak, hideMargin; if (menuPtr->tkwin == NULL) { return; @@ -1525,8 +1492,7 @@ TkpComputeStandardMenuGeometry( fmPtr = &entryMetrics; } - Tcl_GetBooleanFromObj(NULL, mePtr->columnBreakPtr, &columnBreak); - if ((i > 0) && columnBreak) { + if ((i > 0) && mePtr->columnBreak) { if (accelWidth != 0) { labelWidth += accelSpace; } @@ -1570,8 +1536,7 @@ TkpComputeStandardMenuGeometry( GetMenuLabelGeometry(mePtr, tkfont, fmPtr, &width, &height); mePtr->height = height; - Tcl_GetBooleanFromObj(NULL, mePtr->hideMarginPtr, &hideMargin); - if (!hideMargin) { + if (!mePtr->hideMargin) { width += MENU_MARGIN_WIDTH; } if (width > labelWidth) { @@ -1583,7 +1548,7 @@ TkpComputeStandardMenuGeometry( if (height > mePtr->height) { mePtr->height = height; } - if (hideMargin) { + if (mePtr->hideMargin) { width += MENU_MARGIN_WIDTH; } if (width > accelWidth) { @@ -1595,7 +1560,7 @@ TkpComputeStandardMenuGeometry( if (height > mePtr->height) { mePtr->height = height; } - if (hideMargin) { + if (mePtr->hideMargin) { width += MENU_MARGIN_WIDTH; } if (width > indicatorSpace) { diff --git a/win/tkWinMenu.c b/win/tkWinMenu.c index 1a42038..ddb7caf 100644 --- a/win/tkWinMenu.c +++ b/win/tkWinMenu.c @@ -8,7 +8,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkWinMenu.c,v 1.1.4.4 1998/11/20 02:36:27 stanton Exp $ + * RCS: @(#) $Id: tkWinMenu.c,v 1.1.4.5 1998/11/24 21:42:48 stanton Exp $ */ #define OEMRESOURCE @@ -555,8 +555,6 @@ ReconfigureWindowsMenu( if (mePtr->type == SEPARATOR_ENTRY) { flags |= MF_SEPARATOR; } else { - int columnBreak, state; - itemText = GetEntryText(mePtr); if ((menuPtr->menuType == MENUBAR) || (menuPtr->menuFlags & MENU_SYSTEM_MENU)) { @@ -571,9 +569,7 @@ ReconfigureWindowsMenu( * Set enabling and disabling correctly. */ - Tcl_GetIndexFromObj(NULL, mePtr->statePtr, tkMenuStateStrings, - NULL, 0, &state); - if (state == ENTRY_DISABLED) { + if (mePtr->state == ENTRY_DISABLED) { flags |= MF_DISABLED; } @@ -587,9 +583,7 @@ ReconfigureWindowsMenu( flags |= MF_CHECKED; } - Tcl_GetBooleanFromObj(NULL, mePtr->columnBreakPtr, - &columnBreak); - if (columnBreak) { + if (mePtr->columnBreak) { flags |= MF_MENUBREAK; } @@ -938,7 +932,6 @@ TkWinHandleMenuEvent(phwnd, pMessage, pwParam, plParam, plResult) if ((menuRefPtr != NULL) && (menuRefPtr->parentEntryPtr != NULL)) { char *name; - int state; for (parentEntryPtr = menuRefPtr->parentEntryPtr; ; @@ -951,11 +944,8 @@ TkWinHandleMenuEvent(phwnd, pMessage, pwParam, plParam, plResult) break; } } - Tcl_GetIndexFromObj(NULL, parentEntryPtr->menuPtr - ->entries[parentEntryPtr->index] - ->statePtr, tkMenuStateStrings, NULL, - 0, &state); - if (state != ENTRY_DISABLED) { + if (parentEntryPtr->menuPtr->entries[parentEntryPtr->index] + ->state != ENTRY_DISABLED) { TkActivateMenuEntry(parentEntryPtr->menuPtr, parentEntryPtr->index); } @@ -1012,17 +1002,13 @@ TkWinHandleMenuEvent(phwnd, pMessage, pwParam, plParam, plResult) LPMEASUREITEMSTRUCT itemPtr = (LPMEASUREITEMSTRUCT) *plParam; if (itemPtr != NULL) { - int hideMargin; - mePtr = (TkMenuEntry *) itemPtr->itemData; menuPtr = mePtr->menuPtr; TkRecomputeMenu(menuPtr); itemPtr->itemHeight = mePtr->height; itemPtr->itemWidth = mePtr->width; - Tcl_GetBooleanFromObj(NULL, mePtr->hideMarginPtr, - &hideMargin); - if (hideMargin) { + if (mePtr->hideMargin) { itemPtr->itemWidth += 2 - indicatorDimensions[1]; } else { int activeBorderWidth; @@ -1044,7 +1030,6 @@ TkWinHandleMenuEvent(phwnd, pMessage, pwParam, plParam, plResult) Tk_FontMetrics fontMetrics; if (itemPtr != NULL) { - int state; Tk_Font tkfont; mePtr = (TkMenuEntry *) itemPtr->itemData; @@ -1053,9 +1038,7 @@ TkWinHandleMenuEvent(phwnd, pMessage, pwParam, plParam, plResult) twdPtr->type = TWD_WINDC; twdPtr->winDC.hdc = itemPtr->hDC; - Tcl_GetIndexFromObj(NULL, mePtr->statePtr, - tkMenuStateStrings, NULL, 0, &state); - if (state != ENTRY_DISABLED) { + if (mePtr->state != ENTRY_DISABLED) { if (itemPtr->itemState & ODS_SELECTED) { TkActivateMenuEntry(menuPtr, mePtr->index); } else { @@ -1099,8 +1082,6 @@ TkWinHandleMenuEvent(phwnd, pMessage, pwParam, plParam, plResult) } if (menuPtr != NULL) { - int state; - mePtr = NULL; if (flags != 0xFFFF) { if (flags & MF_POPUP) { @@ -1115,16 +1096,10 @@ TkWinHandleMenuEvent(phwnd, pMessage, pwParam, plParam, plResult) } } - if (mePtr == NULL) { + if ((mePtr == NULL) || (mePtr->state == ENTRY_DISABLED)) { TkActivateMenuEntry(menuPtr, -1); } else { - Tcl_GetIndexFromObj(NULL, mePtr->statePtr, - tkMenuStateStrings, NULL, 0, &state); - if (state == ENTRY_DISABLED) { - TkActivateMenuEntry(menuPtr, -1); - } else { - TkActivateMenuEntry(menuPtr, mePtr->index); - } + TkActivateMenuEntry(menuPtr, mePtr->index); } MenuSelectEvent(menuPtr); Tcl_ServiceAll(); @@ -1273,11 +1248,8 @@ GetMenuIndicatorGeometry ( int *widthPtr, /* The resulting width */ int *heightPtr) /* The resulting height */ { - int hideMargin; - *heightPtr = indicatorDimensions[0]; - Tcl_GetBooleanFromObj(NULL, mePtr->hideMarginPtr, &hideMargin); - if (hideMargin) { + if (mePtr->hideMargin) { *widthPtr = 0; } else { int borderWidth; @@ -1498,18 +1470,11 @@ DrawMenuEntryIndicator(menuPtr, mePtr, d, gc, indicatorGC, tkfont, fmPtr, x, { if ((mePtr->type == CHECK_BUTTON_ENTRY) || (mePtr->type == RADIO_BUTTON_ENTRY)) { - int indicatorOn; - - Tcl_GetBooleanFromObj(NULL, mePtr->indicatorOnPtr, &indicatorOn); - - if (indicatorOn && (mePtr->entryFlags & ENTRY_SELECTED)) { + if (mePtr->indicatorOn && (mePtr->entryFlags & ENTRY_SELECTED)) { RECT rect; GC whichGC; - int state; int borderWidth, activeBorderWidth; - Tcl_GetIndexFromObj(NULL, mePtr->statePtr, tkMenuStateStrings, - NULL, 0, &state); - if (state != ENTRY_NORMAL) { + if (mePtr->state != ENTRY_NORMAL) { whichGC = gc; } else { whichGC = indicatorGC; @@ -1524,7 +1489,7 @@ DrawMenuEntryIndicator(menuPtr, mePtr, d, gc, indicatorGC, tkfont, fmPtr, x, rect.left = borderWidth + activeBorderWidth + x; rect.right = mePtr->indicatorSpace + x; - if ((state == ENTRY_DISABLED) + if ((mePtr->state == ENTRY_DISABLED) && (menuPtr->disabledFgPtr != NULL) && (versionInfo.dwMajorVersion >= 4)) { RECT hilightRect; @@ -1543,7 +1508,7 @@ DrawMenuEntryIndicator(menuPtr, mePtr, d, gc, indicatorGC, tkfont, fmPtr, x, DrawWindowsSystemBitmap(menuPtr->display, d, whichGC, &rect, OBM_CHECK, 0); - if ((state == ENTRY_DISABLED) + if ((mePtr->state == ENTRY_DISABLED) && (menuPtr->disabledImageGC != None) && (versionInfo.dwMajorVersion < 4)) { XFillRectangle(menuPtr->display, d, menuPtr->disabledImageGC, @@ -1593,7 +1558,6 @@ DrawMenuEntryAccelerator(menuPtr, mePtr, d, gc, tkfont, fmPtr, { int baseline; int leftEdge = x + mePtr->indicatorSpace + mePtr->labelWidth; - int state; char *accel; if (mePtr->accelPtr != NULL) { @@ -1602,9 +1566,7 @@ DrawMenuEntryAccelerator(menuPtr, mePtr, d, gc, tkfont, fmPtr, baseline = y + (height + fmPtr->ascent - fmPtr->descent) / 2; - Tcl_GetIndexFromObj(NULL, mePtr->statePtr, tkMenuStateStrings, NULL, - 0, &state); - if ((state == ENTRY_DISABLED) && (menuPtr->disabledFgPtr != NULL) + if ((mePtr->state == ENTRY_DISABLED) && (menuPtr->disabledFgPtr != NULL) && ((mePtr->accelPtr != NULL) || ((mePtr->type == CASCADE_ENTRY) && drawArrow))) { if (versionInfo.dwMajorVersion >= 4) { @@ -1635,7 +1597,7 @@ DrawMenuEntryAccelerator(menuPtr, mePtr, d, gc, tkfont, fmPtr, mePtr->accelLength, leftEdge, baseline); } - if ((state == ENTRY_DISABLED) + if ((mePtr->state == ENTRY_DISABLED) && (menuPtr->disabledImageGC != None) && (versionInfo.dwMajorVersion < 4)) { XFillRectangle(menuPtr->display, d, menuPtr->disabledImageGC, @@ -1652,7 +1614,7 @@ DrawMenuEntryAccelerator(menuPtr, mePtr, d, gc, tkfont, fmPtr, rect.right = x + width - 1; DrawWindowsSystemBitmap(menuPtr->display, d, gc, &rect, OBM_MNARROW, ALIGN_BITMAP_RIGHT); - if ((state == ENTRY_DISABLED) + if ((mePtr->state == ENTRY_DISABLED) && (menuPtr->disabledImageGC != None) && (versionInfo.dwMajorVersion < 4)) { XFillRectangle(menuPtr->display, d, menuPtr->disabledImageGC, @@ -1930,7 +1892,6 @@ DrawMenuEntryLabel( int activeBorderWidth; int leftEdge; int imageHeight, imageWidth; - int state; Tk_GetPixelsFromObj(menuPtr->interp, menuPtr->tkwin, menuPtr->activeBorderWidthPtr, &activeBorderWidth); @@ -1970,9 +1931,7 @@ DrawMenuEntryLabel( } } - Tcl_GetIndexFromObj(NULL, mePtr->statePtr, tkMenuStateStrings, NULL, - 0, &state); - if (state == ENTRY_DISABLED) { + if (mePtr->state == ENTRY_DISABLED) { if (menuPtr->disabledFgPtr == NULL) { XFillRectangle(menuPtr->display, d, menuPtr->disabledGC, x, y, (unsigned) width, (unsigned) height); @@ -2143,15 +2102,12 @@ TkpDrawMenuEntry(mePtr, d, tkfont, menuMetricsPtr, x, y, width, height, int padY = (menuPtr->menuType == MENUBAR) ? 3 : 0; int adjustedY = y + padY; int adjustedHeight = height - 2 * padY; - int state; /* * Choose the gc for drawing the foreground part of the entry. */ - Tcl_GetIndexFromObj(NULL, mePtr->statePtr, tkMenuStateStrings, NULL, - 0, &state); - if ((state == ENTRY_ACTIVE) && !strictMotif) { + if ((mePtr->state == ENTRY_ACTIVE) && !strictMotif) { gc = mePtr->activeGC; if (gc == NULL) { gc = menuPtr->activeGC; @@ -2166,14 +2122,14 @@ TkpDrawMenuEntry(mePtr, d, tkfont, menuMetricsPtr, x, y, width, height, cascadeEntryPtr = cascadeEntryPtr->nextCascadePtr) { name = Tcl_GetStringFromObj(cascadeEntryPtr->namePtr, NULL); if (strcmp(name, Tk_PathName(menuPtr->tkwin)) == 0) { - if (state == ENTRY_DISABLED) { + if (mePtr->state == ENTRY_DISABLED) { parentDisabled = 1; } break; } } - if (((parentDisabled || (state == ENTRY_DISABLED))) + if (((parentDisabled || (mePtr->state == ENTRY_DISABLED))) && (menuPtr->disabledFgPtr != NULL)) { gc = mePtr->disabledGC; if (gc == NULL) { @@ -2226,14 +2182,11 @@ TkpDrawMenuEntry(mePtr, d, tkfont, menuMetricsPtr, x, y, width, height, DrawTearoffEntry(menuPtr, mePtr, d, gc, tkfont, fmPtr, x, adjustedY, width, adjustedHeight); } else { - int hideMargin; - DrawMenuEntryLabel(menuPtr, mePtr, d, gc, tkfont, fmPtr, x, adjustedY, width, adjustedHeight); DrawMenuEntryAccelerator(menuPtr, mePtr, d, gc, tkfont, fmPtr, activeBorder, x, adjustedY, width, adjustedHeight, drawArrow); - Tcl_GetBooleanFromObj(NULL, mePtr->hideMarginPtr, &hideMargin); - if (!hideMargin) { + if (!mePtr->hideMargin) { DrawMenuEntryIndicator(menuPtr, mePtr, d, gc, indicatorGC, tkfont, fmPtr, x, adjustedY, width, adjustedHeight); } @@ -2317,11 +2270,7 @@ DrawMenuEntryBackground( int width, /* width of rectangle to draw */ int height) /* height of rectangle to draw */ { - int state; - - Tcl_GetIndexFromObj(NULL, mePtr->statePtr, tkMenuStateStrings, - NULL, 0, &state); - if (state == ENTRY_ACTIVE) { + if (mePtr->state == ENTRY_ACTIVE) { bgBorder = activeBorder; } Tk_Fill3DRectangle(menuPtr->tkwin, d, bgBorder, @@ -2356,7 +2305,6 @@ TkpComputeStandardMenuGeometry( int x, y, height, width, indicatorSpace, labelWidth, accelWidth; int windowWidth, windowHeight, accelSpace; int i, j, lastColumnBreak = 0; - int columnBreak; int activeBorderWidth, borderWidth; if (menuPtr->tkwin == NULL) { @@ -2396,10 +2344,7 @@ TkpComputeStandardMenuGeometry( Tk_GetFontMetrics(tkfont, &entryMetrics); fmPtr = &entryMetrics; } - - Tcl_GetBooleanFromObj(NULL, menuPtr->entries[i]->columnBreakPtr, - &columnBreak); - if ((i > 0) && columnBreak) { + if ((i > 0) && menuPtr->entries[i]->columnBreak) { if (accelWidth != 0) { labelWidth += accelSpace; } -- cgit v0.12