Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Changes In Branch tip-658 Excluding Merge-Ins
This is equivalent to a diff from 9c01fe70 to ff848406
2023-06-04
| ||
17:18 | Merge implementation of TIP #658 - Attach identifiers to Tk menu entries, following positive vote from the TCT. Thanks to the author, Schelte Bron! check-in: e2b00bfd user: fvogel tags: trunk, main | |
2023-05-29
| ||
12:59 | Fix first part of [0e658c9479]: Remove unused function declarations from tkMacOSXInt.h - TkpShiftButton() check-in: 35b1e576 user: fvogel tags: trunk, main | |
11:12 | merge trunk check-in: c0cfd57b user: fvogel tags: bug-f41f675cca | |
2023-05-28
| ||
10:21 | Continuation lines should be indented 8 chars. Closed-Leaf check-in: ff848406 user: fvogel tags: tip-658 | |
09:33 | merge trunk check-in: 2bf0d58a user: fvogel tags: tip-658 | |
2023-05-27
| ||
20:10 | Fix [2f92166f6f]: Crash setting -foreground to empty string in a ttk::theme. Closed-Leaf check-in: 0f4e2e8d user: fvogel tags: bug-2f92166f6f | |
19:52 | Add non-regression test for [6ee162c3d9]. check-in: 9c01fe70 user: fvogel tags: trunk, main | |
19:51 | Add non-regression test for [6ee162c3d9]. check-in: 123d3e3f user: fvogel tags: core-8-6-branch | |
2023-05-25
| ||
06:15 | Fix [7447ed20ec]: Color picker failure - tk::RestoreFocusGrab does not take into account the possibility of a failing grab. check-in: 14e607a7 user: fvogel tags: trunk, main | |
Changes to doc/menu.n.
︙ | |||
352 353 354 355 356 357 358 | 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 | - + - + + + + + + - + - - - - + + + + + + + | .TP 12 \fInumber\fR . Specifies the entry numerically, where 0 corresponds to the top-most entry of the menu, 1 to the entry below it, and so on. .TP 12 |
︙ | |||
442 443 444 445 446 447 448 449 450 451 452 453 454 | 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 | + + + + + + + + - + - - - + + + + | \fIOptions\fR may have any of the values described in the \fBMENU ENTRY OPTIONS\fR section below. If \fIoptions\fR are specified, options are modified as indicated in the command and the command returns an empty string. If no \fIoptions\fR are specified, returns a list describing the current options for entry \fIindex\fR (see \fBTk_ConfigureInfo\fR for information on the format of this list). .TP \fIpathName \fBid \fIindex\fR . Returns the id of the menu entry given by \fIindex\fR. This is the identifier that was assigned to the entry when it was created using the \fBadd\fR or \fBinsert\fR widget command. Returns an empty string for the tear-off entry, or if \fIindex\fR is equivalent to \fB{}\fR. .TP \fIpathName \fBindex \fIindex\fR . Returns the numerical index corresponding to \fIindex\fR, or \fB{}\fR if \fIindex\fR was specified as \fB{}\fR or \fBnone\fR. .TP |
︙ |
Changes to generic/tkMenu.c.
︙ | |||
302 303 304 305 306 307 308 | 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 | - + - + | /* * Command line options. Put here because MenuCmd has to look at them along * with MenuWidgetObjCmd. */ static const char *const menuOptions[] = { "activate", "add", "cget", "clone", "configure", "delete", "entrycget", |
︙ | |||
447 448 449 450 451 452 453 454 455 456 457 458 459 460 | 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 | + + | menuPtr->widgetCmd = Tcl_CreateObjCommand(interp, Tk_PathName(menuPtr->tkwin), MenuWidgetObjCmd, menuPtr, MenuCmdDeletedProc); menuPtr->active = TCL_INDEX_NONE; menuPtr->cursorPtr = NULL; menuPtr->mainMenuPtr = menuPtr; menuPtr->menuType = UNKNOWN_TYPE; Tcl_InitHashTable(&menuPtr->items, TCL_STRING_KEYS); menuPtr->serial = 0; TkMenuInitializeDrawingFields(menuPtr); Tk_SetClass(menuPtr->tkwin, "Menu"); Tk_SetClassProcs(menuPtr->tkwin, &menuClass, menuPtr); Tk_CreateEventHandler(newWin, ExposureMask|StructureNotifyMask|ActivateMask, TkMenuEventProc, menuPtr); |
︙ | |||
816 817 818 819 820 821 822 823 824 825 826 827 828 829 | 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 | + + + + + + + + + + + + + + + + + + + + + + | } } else { result = ConfigureMenuCloneEntries(menuPtr, index, objc-3, objv+3); } Tcl_Release(mePtr); break; } case MENU_ID: { Tcl_Size index; const char *idStr; Tcl_HashEntry *entryPtr; if (objc != 3) { Tcl_WrongNumArgs(interp, 2, objv, "index"); goto error; } if (GetMenuIndex(interp, menuPtr, objv[2], 0, &index) != TCL_OK) { goto error; } if (index == TCL_INDEX_NONE) { goto done; } entryPtr = menuPtr->entries[index]->entryPtr; if (entryPtr) { idStr = Tcl_GetHashKey(&menuPtr->items, entryPtr); Tcl_SetObjResult(interp, Tcl_NewStringObj(idStr, TCL_INDEX_NONE)); } break; } case MENU_INDEX: { Tcl_Size index; if (objc != 3) { Tcl_WrongNumArgs(interp, 2, objv, "string"); goto error; |
︙ | |||
1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 | 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 | + | DestroyMenuEntry(menuPtr->entries[i]); menuPtr->numEntries = i; } if (menuPtr->entries != NULL) { ckfree(menuPtr->entries); menuPtr->entries = NULL; } Tcl_DeleteHashTable(&menuPtr->items); TkMenuFreeDrawOptions(menuPtr); Tk_FreeConfigOptions((char *) menuPtr, tsdPtr->menuOptionTable, menuPtr->tkwin); if (menuPtr->tkwin != NULL) { Tk_Window tkwin = menuPtr->tkwin; menuPtr->tkwin = NULL; |
︙ | |||
1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 | 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 | + + + + | && (mePtr->namePtr != NULL)) { const char *varName = Tcl_GetString(mePtr->namePtr); Tcl_UntraceVar2(menuPtr->interp, varName, NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, MenuVarProc, mePtr); } if (mePtr->entryPtr) { Tcl_DeleteHashEntry(mePtr->entryPtr); mePtr->entryPtr = NULL; } TkpDestroyMenuEntry(mePtr); TkMenuEntryFreeDrawOptions(mePtr); Tk_FreeConfigOptions((char *) mePtr, mePtr->optionTable, menuPtr->tkwin); ckfree(mePtr); } /* |
︙ | |||
2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 | 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 | + | * manual entry for valid .*/ int lastOK, /* Non-zero means its OK to return index just * *after* last entry. */ Tcl_Size *indexPtr) /* Where to store converted index. */ { int i; const char *string; Tcl_HashEntry *entryPtr; if (TkGetIntForIndex(objPtr, menuPtr->numEntries - 1, lastOK, indexPtr) == TCL_OK) { /* TCL_INDEX_NONE is only accepted if it does not result from a negative number */ if (*indexPtr != TCL_INDEX_NONE || Tcl_GetString(objPtr)[0] != '-') { if (*indexPtr >= menuPtr->numEntries) { *indexPtr = menuPtr->numEntries - ((lastOK) ? 0 : 1); } |
︙ | |||
2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 | 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 | + + + + + + + | if (string[0] == '@') { if (GetIndexFromCoords(NULL, menuPtr, string, indexPtr) == TCL_OK) { goto success; } } entryPtr = Tcl_FindHashEntry(&menuPtr->items, string); if (entryPtr) { TkMenuEntry *mePtr = Tcl_GetHashValue(entryPtr); *indexPtr = mePtr->index; return TCL_OK; } for (i = 0; i < (int)menuPtr->numEntries; i++) { Tcl_Obj *labelPtr = menuPtr->entries[i]->labelPtr; const char *label = (labelPtr == NULL) ? NULL : Tcl_GetString(labelPtr); if ((label != NULL) && (Tcl_StringCaseMatch(label, string, 0))) { *indexPtr = i; |
︙ | |||
2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 | 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 | + | mePtr->index = index; mePtr->nextCascadePtr = NULL; if (Tk_InitOptions(menuPtr->interp, mePtr, mePtr->optionTable, menuPtr->tkwin) != TCL_OK) { ckfree(mePtr); return NULL; } mePtr->entryPtr = NULL; TkMenuInitializeEntryDrawingFields(mePtr); if (TkpMenuNewEntry(mePtr) != TCL_OK) { Tk_FreeConfigOptions((char *) mePtr, mePtr->optionTable, menuPtr->tkwin); ckfree(mePtr); return NULL; } |
︙ | |||
2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 | 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 | + + + + | Tcl_Obj *const objv[]) /* Arguments to command: first arg is type of * entry, others are config options. */ { int type; Tcl_Size index; TkMenuEntry *mePtr; TkMenu *menuListPtr; Tcl_HashEntry *entryPtr; Tcl_Obj *idPtr = NULL; int isNew; int offs; if (indexPtr != NULL) { if (GetMenuIndex(interp, menuPtr, indexPtr, 1, &index) != TCL_OK) { return TCL_ERROR; } } else { index = menuPtr->numEntries; |
︙ | |||
2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 | 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 | + + + + + + + + + + + + + + + + - - + | * Figure out the type of the new entry. */ if (Tcl_GetIndexFromObjStruct(interp, objv[0], menuEntryTypeStrings, sizeof(char *), "menu entry type", 0, &type) != TCL_OK) { return TCL_ERROR; } offs = 1; /* * Check for a user supplied id */ if (objc % 2 == 0) { idPtr = objv[offs]; if (Tcl_FindHashEntry(&menuPtr->items, Tcl_GetString(idPtr))) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "entry \"%s\" already exists", Tcl_GetString(idPtr))); Tcl_SetErrorCode(interp, "TK", "MENU", "ENTRY_EXISTS", NULL); return TCL_ERROR; } offs++; } /* * Now we have to add an entry for every instance related to this menu. */ |
︙ | |||
2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 | 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 | + + + + + + + + + + + + + + + + + | if (errorMenuPtr == menuListPtr) { break; } } return TCL_ERROR; } if (idPtr == NULL) { char idbuf[16]; /* Generate an id for the new entry on the main menu */ do { snprintf(idbuf, sizeof(idbuf), "e%03X", ++menuPtr->serial); entryPtr = Tcl_CreateHashEntry( &menuListPtr->items, idbuf, &isNew); } while (!isNew); idPtr = Tcl_NewStringObj(idbuf, TCL_INDEX_NONE); } else { /* Reuse the specified or previously generated id on all clones */ entryPtr = Tcl_CreateHashEntry( &menuListPtr->items, Tcl_GetString(idPtr), &isNew); } Tcl_SetHashValue(entryPtr, mePtr); mePtr->entryPtr = entryPtr; /* * If a menu has cascades, then every instance of the menu has to have * its own parallel cascade structure. So adding an entry to a menu * with clones means that the menu that the entry points to has to be * cloned for every clone the main menu has. This is special case #2 * in the comment at the top of this file. */ |
︙ | |||
2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 | 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 | + + | Tcl_DecrRefCount(newCascadePtr); Tcl_DecrRefCount(menuNamePtr); Tcl_DecrRefCount(windowNamePtr); Tcl_DecrRefCount(normalPtr); } } } Tcl_SetObjResult(interp, idPtr); return TCL_OK; } /* *-------------------------------------------------------------- * * MenuVarProc -- |
︙ |
Changes to generic/tkMenu.h.
︙ | |||
179 180 181 182 183 184 185 186 187 188 189 190 191 192 | 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 | + | */ int entryFlags; /* Various flags. See below for * definitions. */ int index; /* Need to know which index we are. This is * zero-based. This is the top-left entry of * the menu. */ Tcl_HashEntry *entryPtr; /* Back-pointer to hash table entry */ /* * Bookeeping for main menus and cascade menus. */ struct TkMenuReferences *childMenuRefPtr; /* A pointer to the hash table entry for the |
︙ | |||
375 376 377 378 379 380 381 382 383 384 385 386 387 388 | 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 | + + | Tk_OptionSpec *extensionPtr;/* Needed by the configuration package for * this widget to be extended. */ Tk_SavedOptions *errorStructPtr; /* We actually have to allocate these because * multiple menus get changed during one * ConfigureMenu call. */ Tcl_Obj *activeReliefPtr; /* 3-d effect for active element. */ Tcl_HashTable items; /* Map: id -> entry */ int serial; /* Next item # for autogenerated ids */ } TkMenu; /* * When the toplevel configure -menu command is executed, the menu may not * exist yet. We need to keep a linked list of windows that reference a * particular menu. */ |
︙ |
Changes to library/tearoff.tcl.
︙ | |||
136 137 138 139 140 141 142 | 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | - + | eval $cmd # Copy the meny entries, if any set last [$src index last] if {$last >= 0} { for {set i [$src cget -tearoff]} {$i <= $last} {incr i} { |
︙ |
Changes to tests/menu.test.
︙ | |||
1306 1307 1308 1309 1310 1311 1312 | 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 | - + | test menu-3.10 {MenuWidgetCmd procedure, "add" option} -setup { destroy .m1 } -body { menu .m1 .m1 add separator } -cleanup { destroy .m1 |
︙ | |||
1815 1816 1817 1818 1819 1820 1821 | 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 | - + | test menu-3.67 {MenuWidgetCmd procedure, bad option} -setup { destroy .m1 } -body { menu .m1 .m1 foo } -cleanup { destroy .m1 |
︙ | |||
2643 2644 2645 2646 2647 2648 2649 | 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 | - + - + | test menu-11.15 {ConfigureMenuEntry} -setup { deleteWindows } -body { menu .m1 list [.m1 add checkbutton -label "test"] [.m1 entrycget 1 -variable] } -cleanup { deleteWindows |
︙ | |||
2814 2815 2816 2817 2818 2819 2820 | 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 | - + - + | deleteWindows } -body { menu .m1 .m1 add command -label "test" list [.m1 insert last command -label "test2"] [.m1 entrycget last -label] } -cleanup { deleteWindows |
︙ | |||
2920 2921 2922 2923 2924 2925 2926 | 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 | - + - + - + - + - + | test menu-15.1 {MenuNewEntry} -setup { deleteWindows } -body { menu .m1 .m1 add command -label "test" } -cleanup { deleteWindows |
︙ | |||
2987 2988 2989 2990 2991 2992 2993 | 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 | - + - + - + - + - + - + - + - + - + - + - + - + - + | test menu-16.5 {MenuAddOrInsert} -setup { deleteWindows } -body { menu .m1 .m1 add cascade } -cleanup { deleteWindows |
︙ | |||
3131 3132 3133 3134 3135 3136 3137 | 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 | - + - + - + - + - + | catch {unset foo} menu .m1 set foo "hello" list [.m1 add checkbutton -variable foo -onvalue hello -offvalue goodbye] \ [unset foo] } -cleanup { deleteWindows |
︙ | |||
4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 | 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + | catch {destroy .m} } -body { menu .m -type {} } -cleanup { destroy .m } -returnCodes error -result {ambiguous type "": must be menubar, normal, or tearoff} test menu-40.1 {identifiers - auto generated} -setup { destroy .m } -body { menu .m list [.m add command -label 1] [.m add command -label 2] [.m add command -label 3] } -cleanup { destroy .m } -result {e001 e002 e003} test menu-40.2 {identifiers - out of sequence} -setup { destroy .m } -body { menu .m -tearoff 0 .m add command -label 1 .m insert 0 command -label 2 .m add command -label 3 list [.m index e001] [.m index e002] [.m index e003] } -cleanup { destroy .m } -result {1 0 2} test menu-40.3 {identifiers - out of sequence with tearoff} -setup { destroy .m } -body { menu .m -tearoff 1 .m add command -label 1 .m insert 0 command -label 2 .m add command -label 3 list [.m index e001] [.m index e002] [.m index e003] } -cleanup { destroy .m } -result {2 1 3} test menu-40.4 {identifiers - entry id} -setup { destroy .m } -body { menu .m -tearoff 1 .m add command -label 1 .m insert 0 command -label 2 .m add command -label 3 list [.m id 0] [.m id 1] [.m id 2] [.m id 3] } -cleanup { destroy .m } -result {{} e002 e001 e003} test menu-40.5 {identifiers - assigned} -setup { destroy .m } -body { menu .m list [.m add command cmd1 -label 1] [.m insert 0 command cmd2 -label 2] [.m add command cmd3 -label 3] } -cleanup { destroy .m } -result {cmd1 cmd2 cmd3} test menu-40.6 {identifiers - mixed} -setup { destroy .m } -body { menu .m list [.m add command -label 1] [.m insert 0 command cmd2 -label 2] [.m add command -label 3] } -cleanup { destroy .m } -result {e001 cmd2 e002} test menu-40.7 {identifiers - conflict} -setup { destroy .m } -body { menu .m list [.m add command e002 -label 1] [.m add command -label 2] [.m add command -label 3] } -cleanup { destroy .m } -result {e002 e001 e003} test menu-40.8 {identifiers - clone of complete menu} -setup { destroy .m1 .m2 } -body { menu .m1 -tearoff 0 .m1 add command -label 1 .m1 insert 0 command -label 2 .m1 add command cmd3 -label 3 .m1 clone .m2 list [.m2 index e001] [.m2 index e002] [.m2 index cmd3] } -cleanup { destroy .m1 .m2 } -result {1 0 2} test menu-40.9 {identifiers - modify after cloning} -setup { destroy .m1 .m2 } -body { menu .m1 -tearoff 0 .m1 clone .m2 .m1 add command -label 1 .m1 insert 0 command -label 2 .m1 add command cmd3 -label 3 list [.m2 index e001] [.m2 index e002] [.m2 index cmd3] } -cleanup { destroy .m1 .m2 } -result {1 0 2} test menu-40.10 {identifiers - modify clone} -setup { destroy .m1 .m2 } -body { menu .m1 -tearoff 0 .m1 clone .m2 .m2 add command -label 1 .m2 insert 0 command -label 2 .m2 add command cmd3 -label 3 list [.m1 index e001] [.m1 index e002] [.m1 index cmd3] } -cleanup { destroy .m1 .m2 } -result {1 0 2} test menu-40.11 {identifiers - entrycget by id} -setup { destroy .m } -body { menu .m .m add command -label 1 .m add command -label 2 .m add command cmd3 -label 3 list [.m entrycget e001 -label] [.m entrycget e002 -label] [.m entrycget cmd3 -label] } -cleanup { destroy .m } -result {1 2 3} test menu-40.12 {identifiers - delete by id} -setup { destroy .m } -body { menu .m .m add command -label 1 .m add command -label 2 .m add command -label 3 .m add command -label 4 .m add command -label 5 .m add command -label 6 .m add command -label 7 .m add command cmd8 -label 8 .m add command cmd9 -label 9 .m delete e003 cmd8 list [.m id 0] [.m id 1] [.m id 2] } -cleanup { destroy .m } -result {e001 e002 cmd9} test menu-40.13 {identifiers - duplicate} -setup { destroy .m } -body { menu .m .m add command foo -label 1 .m add command bar -label 2 .m add command foo -label 3 } -cleanup { destroy .m } -returnCodes error -result {entry "foo" already exists} test menu-40.14 {identifiers - reserved word} -setup { destroy .m } -body { menu .m -tearoff 0 .m add command last -label 1 .m add command -label 2 .m add command -label 3 .m index last } -cleanup { destroy .m } -result {2} # cleanup imageFinish deleteWindows cleanupTests return # Local variables: # mode: tcl # End: |
Changes to tests/menuDraw.test.
︙ | |||
23 24 25 26 27 28 29 | 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | - + | test menuDraw-2.1 {TkInitializeMenuEntryDrawingFields} -setup { deleteWindows } -body { menu .m1 .m1 add command } -cleanup { deleteWindows |
︙ | |||
82 83 84 85 86 87 88 | 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | - + - + | test menuDraw-6.1 {TkMenuConfigureEntryDrawOptions - no tkfont specified} -setup { deleteWindows } -body { menu .m1 .m1 add command -label "foo" } -cleanup { deleteWindows |
︙ | |||
136 137 138 139 140 141 142 | 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 | - + - + - + - + - + - + | test menuDraw-6.7 {TkMenuConfigureEntryDrawOptions - tkfont specified} -setup { deleteWindows } -body { menu .m1 .m1 add command -label "foo" -font "Courier 12" } -cleanup { deleteWindows |
︙ |
Changes to tests/winMenu.test.
︙ | |||
89 90 91 92 93 94 95 | 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 | - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + | } -setup { destroy .m1 } -body { catch {image delete image1} menu .m1 image create test image1 list [catch {.m1 add command -image image1} msg] $msg [destroy .m1] [image delete image1] |
︙ | |||
423 424 425 426 427 428 429 | 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 | - + | test winMenu-9.1 {TkpMenuNewEntry} -constraints win -setup { destroy .m1 } -body { menu .m1 list [catch {.m1 add command} msg] $msg [destroy .m1] |
︙ | |||
855 856 857 858 859 860 861 | 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 | - + - + | win } -setup { destroy .m1 } -body { menu .m1 -tearoff 0 .m1 add command -label Hello list [catch {.m1 add command -label Two} msg] $msg [destroy .m1] |
︙ |