Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Changes In Branch bug-2a6c62afd9 Excluding Merge-Ins
This is equivalent to a diff from 8c100742 to 92527890
2021-12-04
| ||
18:28 | Fix [2a6c62afd9]: <<TreeviewSelect>> firing. check-in: 5d07f1a3 user: fvogel tags: core-8-6-branch | |
2021-11-24
| ||
10:27 | line-endings check-in: 55bcd286 user: jan.nijtmans tags: core-8-6-branch | |
07:14 | merge 8.6 Closed-Leaf check-in: 92527890 user: fvogel tags: bug-2a6c62afd9 | |
05:12 | Fix NULL/None mixup. check-in: 8c100742 user: culler tags: core-8-6-branch | |
2021-11-23
| ||
22:18 | merge 8.6 check-in: 60f10a4a user: fvogel tags: bug-2a6c62afd9 | |
21:58 | Rework mouse event handling. Improvements include making Enter and Leave events work correctly. check-in: 3d9f4b72 user: culler tags: core-8-6-branch | |
Changes to generic/ttk/ttkTreeview.c.
︙ | ︙ | |||
2675 2676 2677 2678 2679 2680 2681 | */ static int TreeviewDeleteCommand( void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) { Treeview *tv = recordPtr; TreeItem **items, *delq; | | | 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 | */ static int TreeviewDeleteCommand( void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) { Treeview *tv = recordPtr; TreeItem **items, *delq; int i, selChange = 0; if (objc != 3) { Tcl_WrongNumArgs(interp, 2, objv, "items"); return TCL_ERROR; } if (!(items = GetItemListFromObj(interp, tv, objv[2]))) { |
︙ | ︙ | |||
2703 2704 2705 2706 2707 2708 2709 | } /* Remove items from hash table. */ delq = 0; for (i=0; items[i]; ++i) { if (items[i]->state & TTK_STATE_SELECTED) { | | | | 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 | } /* Remove items from hash table. */ delq = 0; for (i=0; items[i]; ++i) { if (items[i]->state & TTK_STATE_SELECTED) { selChange = 1; } delq = DeleteItems(items[i], delq); } /* Free items: */ while (delq) { TreeItem *next = delq->next; if (tv->tree.focus == delq) tv->tree.focus = 0; if (tv->tree.endPtr == delq) tv->tree.endPtr = 0; FreeItem(delq); delq = next; } ckfree(items); if (selChange) { TtkSendVirtualEvent(tv->core.tkwin, "TreeviewSelect"); } TtkRedisplayWidget(&tv->core); return TCL_OK; } /* + $tv move $item $parent $index |
︙ | ︙ | |||
2950 2951 2952 2953 2954 2955 2956 | SELECTION_SET, SELECTION_ADD, SELECTION_REMOVE, SELECTION_TOGGLE }; static const char *selopStrings[] = { "set", "add", "remove", "toggle", NULL }; Treeview *tv = recordPtr; | | | 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 | SELECTION_SET, SELECTION_ADD, SELECTION_REMOVE, SELECTION_TOGGLE }; static const char *selopStrings[] = { "set", "add", "remove", "toggle", NULL }; Treeview *tv = recordPtr; int selop, i, selChange = 0; TreeItem *item, **items; if (objc == 2) { Tcl_Obj *result = Tcl_NewListObj(0,0); for (item = tv->tree.root->children; item; item=NextPreorder(item)) { if (item->state & TTK_STATE_SELECTED) Tcl_ListObjAppendElement(NULL, result, ItemID(tv, item)); |
︙ | ︙ | |||
2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 | if (!items) { return TCL_ERROR; } switch (selop) { case SELECTION_SET: for (item=tv->tree.root; item; item=NextPreorder(item)) { item->state &= ~TTK_STATE_SELECTED; } | > > > > > > > > > > > > > > > > > > > < > > > > > | > > > | > > > > | > | 2981 2982 2983 2984 2985 2986 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 | if (!items) { return TCL_ERROR; } switch (selop) { case SELECTION_SET: for (item=tv->tree.root; item; item=NextPreorder(item)) { int inSetList = 0; for (i=0; items[i]; ++i) { if (item == items[i]) { inSetList = 1; if (!(item->state & TTK_STATE_SELECTED)) { /* Item newly selected */ selChange = 1; } break; } } if (!inSetList && (item->state & TTK_STATE_SELECTED)) { /* Item newly deselected */ selChange = 1; } if (selChange) break; } for (item=tv->tree.root; item; item=NextPreorder(item)) { item->state &= ~TTK_STATE_SELECTED; } for (i=0; items[i]; ++i) { items[i]->state |= TTK_STATE_SELECTED; } break; case SELECTION_ADD: for (i=0; items[i]; ++i) { if (!(items[i]->state & TTK_STATE_SELECTED)) { items[i]->state |= TTK_STATE_SELECTED; selChange = 1; } } break; case SELECTION_REMOVE: for (i=0; items[i]; ++i) { if (items[i]->state & TTK_STATE_SELECTED) { items[i]->state &= ~TTK_STATE_SELECTED; selChange = 1; } } break; case SELECTION_TOGGLE: for (i=0; items[i]; ++i) { items[i]->state ^= TTK_STATE_SELECTED; selChange = 1; } break; } ckfree(items); if (selChange) { TtkSendVirtualEvent(tv->core.tkwin, "TreeviewSelect"); } TtkRedisplayWidget(&tv->core); return TCL_OK; } /*------------------------------------------------------------------------ * +++ Widget commands -- tags and bindings. |
︙ | ︙ |
Changes to tests/ttk/treeview.test.
︙ | ︙ | |||
456 457 458 459 460 461 462 | .tv selection } -result {} test treeview-8.5 "Selection - bad operation" -body { .tv selection badop foo } -returnCodes error -match glob -result {bad selection operation "badop": must be *} | | > > > | > | | > | > > > | > > > > > | > > > > > > > > > > > > > > | > > > | > > | | > > > > > > > > > > > > > > > > > > > > | | > > > > > > > > > > > > > | > > > > | > | > > > > > > > > > | | 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 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 | .tv selection } -result {} test treeview-8.5 "Selection - bad operation" -body { .tv selection badop foo } -returnCodes error -match glob -result {bad selection operation "badop": must be *} test treeview-8.7 "<<TreeviewSelect>> when deleting items" -body { .tv delete [.tv children {}] .tv insert "" end -id myItem1 -text FirstItem .tv insert "" end -id myItem2 -text SecondItem .tv selection add myItem1 update bind .tv <<TreeviewSelect>> {lappend res $val} set res {} set val 1 .tv delete myItem2 ; # no <<TreeviewSelect>> (selection unchanged) update set val 2 .tv delete myItem1 ; # <<TreeviewSelect>> triggers update set res } -result {2} test treeview-8.8 "<<TreeviewSelect>> when setting the selection" -body { .tv delete [.tv children {}] .tv insert "" end -id myItem1 -text FirstItem .tv insert "" end -id myItem2 -text SecondItem update bind .tv <<TreeviewSelect>> {lappend res $val} set res {} set val 1 .tv selection set "" ; # no <<TreeviewSelect>> (selection unchanged) update set val 2 .tv selection set myItem1 ; # <<TreeviewSelect>> triggers update set val 3 .tv selection set myItem1 ; # no <<TreeviewSelect>> (already selected) update set val 4 .tv selection set {myItem1 myItem2} ; # <<TreeviewSelect>> triggers update set val 5 .tv selection set {myItem2} ; # <<TreeviewSelect>> triggers update set res } -result {2 4 5} test treeview-8.9 "<<TreeviewSelect>> when removing items from the selection" -body { .tv delete [.tv children {}] .tv insert "" end -id myItem1 -text FirstItem .tv selection set myItem1 update bind .tv <<TreeviewSelect>> {lappend res $val} set res {} set val 1 .tv selection remove "" ; # no <<TreeviewSelect>> (selection unchanged) update set val 2 .tv selection remove myItem1 ; # <<TreeviewSelect>> triggers update set val 3 .tv selection remove myItem1 ; # no <<TreeviewSelect>> (selection unchanged) update set res } -result {2} test treeview-8.10 "<<TreeviewSelect>> when adding items in the selection" -body { .tv delete [.tv children {}] .tv insert "" end -id myItem1 -text FirstItem .tv insert "" end -id myItem2 -text SecondItem .tv insert "" end -id myItem3 -text ThirdItem update bind .tv <<TreeviewSelect>> {lappend res $val} set res {} set val 1 .tv selection add myItem2 ; # <<TreeviewSelect>> triggers update set val 2 .tv selection add myItem2 ; # no <<TreeviewSelect>> (selection unchanged) update set val 3 .tv selection add myItem3 ; # <<TreeviewSelect>> triggers update set res } -result {1 3} test treeview-8.11 "<<TreeviewSelect>> when toggling" -body { .tv delete [.tv children {}] .tv insert "" end -id myItem1 -text FirstItem .tv insert "" end -id myItem2 -text SecondItem .tv insert "" end -id myItem3 -text ThirdItem update bind .tv <<TreeviewSelect>> {lappend res $val} set res {} set val 1 .tv selection toggle "" ; # no <<TreeviewSelect>> (selection unchanged) update set val 2 .tv selection toggle {myItem1 myItem3} ; # <<TreeviewSelect>> triggers update set val 3 .tv selection toggle {myItem3 myItem2} ; # <<TreeviewSelect>> triggers update set val 4 .tv selection toggle {myItem3 myItem2} ; # <<TreeviewSelect>> triggers update set res } -result {2 3 4} ### NEED: more tests for see/yview/scrolling proc scrollcallback {args} { set ::scrolldata $args } test treeview-9.0 "scroll callback - empty tree" -body { |
︙ | ︙ |