From: SourceForge.net <no...@so...> - 2011-07-29 20:00:00
|
Bugs item #3382423, was opened at 2011-07-29 21:59 Message generated for change (Tracker Item Submitted) made by auriocus You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=112997&aid=3382423&group_id=12997 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: 65. Generic Window Operations Group: development: 8.6b1.1 Status: Open Resolution: None Priority: 5 Private: No Submitted By: Christian Gollwitzer (auriocus) Assigned to: Jeffrey Hobbs (hobbs) Summary: wm forget / manage crash and zombie windows Initial Comment: I stumbled across an issue with wm forget/wm manage on Aqua. One of the symptoms also appears on Windows. Issue 1: "wm forget" doesn't work correctly, when the toplevel has never been mapped so far: package require Tk toplevel .t # update wm forget .t WIthout the update, on Windows I get a "zombie" frame .t - it is possible to pack anythng inside, but it never updates. If it is undocked using wm manage, the toplevel doesn't repaint. WIth an "update" in between, it works on Windows. Only on X11, it works correctly. On Aqua, it crashes in Tk_WmDeadWindow. Issue 2: On Aqua, repeatedly docking/undocking a frame irregularly crashes in Tk_WmDeadWIndow at "wm forget". Code: package require Tk toplevel .dock pack [ttk::label .dock.text -text "This is a toplevel\nwhich can be docked"] pack [ttk::button .dock.d -text "(un)dock" -command dock] pack [ttk::label .p -text "Place your \nwindow here"] -side left set docked false proc dock {} { if {$::docked} { pack forget .dock wm manage .dock set ::docked false } else { wm forget .dock pack .dock -side left set ::docked true } } Tracking this issue with valgrind, I noticed an error message already when a toplevel is created and then mapped to the screen: Valgrind says, after toplevel .t triggers the mapping: ==29387== Address 0x11a246818 is 40 bytes inside a block of size 480 alloc'd ==29387== at 0x10001150E: calloc (vg_replace_malloc.c:467) ==29387== by 0x1039DAD1F: CGSNewWindowWithOpaqueShape (in /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics. framework/Versions/A/CoreGraphics) ==29387== by 0x1016BAF03: _NSCreateWindowWithOpaqueShape2 (in /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit) ==29387== by 0x10164F690: -[NSWindow _commonAwake] (in /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit) ==29387== by 0x10166D1C8: -[NSWindow _makeKeyRegardlessOfVisibility] (in /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit) ==29387== by 0x10166D13D: -[NSWindow makeKeyAndOrderFront:] (in /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit) ==29387== by 0x1010C975E: XMapWindow (tkMacOSXSubwindows.c:153) ==29387== by 0x10103238E: Tk_MapWindow (tkWindow.c:1658) ==29387== by 0x10103B239: MapFrame (tkFrame.c:1782) ==29387== by 0x1000CFC02: TclServiceIdle (in /Users/chris/Programmieren/lib/libtcl8.6.dylib) ==29387== by 0x1000B340A: Tcl_DoOneEvent (in /Users/chris/Programmieren/lib/libtcl8.6.dylib) ==29387== by 0x1010176CB: Tk_MainLoop (tkEvent.c:2131) ==29387== It is strange that Tk_MapWindow calls XMapWindow instead of TkWmMapWindow, because there is the following code: if (winPtr->flags & TK_WIN_MANAGED) { /* * Lots of special processing has to be done for top-level windows. * Let tkWm.c handle everything itself. */ TkWmMapWindow(winPtr); return; } Can it be, that toplevel does not set TK_WIN_MANAGED correctly? ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=112997&aid=3382423&group_id=12997 |