| Ticket UUID: | 1bb2f1d7abab69d31e49a159465e213944c92f3 | |||
| Title: | ttk::treeview doesn't delete tags | |||
| Type: | Bug | Version: | 8.7a4 | |
| Submitter: | emiliano | Created on: | 2020-05-03 23:13:56 | |
| Subsystem: | 88. Themed Tk | Assigned To: | fvogel | |
| Priority: | 5 Medium | Severity: | Severe | |
| Status: | Closed | Last Modified: | 2020-05-24 08:48:16 | |
| Resolution: | Fixed | Closed By: | fvogel | |
| Closed on: | 2020-05-24 08:48:16 | |||
| Description: |
ttk::treeview never releases or deletes tags, leading to a memory leak
Trigger script
package require Tk
ttk::treeview .t
set id 0
foreach n {100 1000 10000 1000 100} {
for {set i 0} {$i < $n} {incr i} {
set item [format {Item#%05d} [incr id]]
.t insert {} end -text $item -tags $item
}
puts "Items: $n\nNumber of tags: [llength [.t tag names]]"
foreach tag [.t tag names] {
.t tag remove $tag
}
}
"Items" and "Number of tags" should be equal but the last number is always increasing
| |||
| User Comments: |
fvogel added on 2020-05-24 08:48:16:
TIP #574 now accepted, and implementation is merged into trunk. Good job! Thanks Emiliano! fvogel added on 2020-05-08 15:46:47: Thank you! I have written the required TIP, see TIP #574 Also, I have committed your code and patch to branch tip-574. emiliano added on 2020-05-04 21:39:08: Attach a patch with a simple test emiliano added on 2020-05-04 00:55:23: The solution is to bring the tag facility in line with the one in the [text] widget, which provides [tag remove] and [tag delete] subcommands. The first one allows removing the tag from a given range of characters (including all characters in the widget, using [$text tag remove $tag 1.0 end]). This, however, doesn't delete the tag information, and it still shows in the [tag names] subcommand. This is exactly the same functionality of the [tag remove] in the treeview widget. The [tag delete] subcommand performs a complete deletion of the tag information, including the removal of the tag from the widget and the tag configuration. It will not show in the [tag names] subcommand anymore. Attached patch implements the [tag delete] subcommand for the ttk::treeview widget. | |||
Attachments:
- treetags.test.diff [download] added by emiliano on 2020-05-04 21:38:04. [details]
- treeview.patch [download] added by emiliano on 2020-05-04 00:56:45. [details]
