Tk Source Code

Check-in [0e4d8eb0]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:3574893 Add overlooked toplevel ref count maintenance in the [wm manage|forget] operations that could cause segfaults due to premature free of structs.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | core-8-5-branch
Files: files | file ages | folders
SHA1: 0e4d8eb0465070ac0ecbe4ce0166a7dfbdecaea8
User & Date: dgp 2012-10-24 19:03:03
Context
2012-11-05
20:54
Update changes for 8.5.13. check-in: ee2c5639 user: dgp tags: core-8-5-branch
18:49
Release branch for Tk 8.5.13. check-in: 12ca1b7f user: dgp tags: core-8-5-13-rc
2012-10-24
19:21
3574893 Add overlooked toplevel ref count maintenance in the [wm manage|forget] operations that could cause segfaults due to premature free of structs. check-in: bda8f8dc user: dgp tags: trunk
19:03
3574893 Add overlooked toplevel ref count maintenance in the [wm manage|forget] operations that could cause segfaults due to premature free of structs. check-in: 0e4d8eb0 user: dgp tags: core-8-5-branch
2012-10-23
13:28
sync nmakehlp.c with Tcl version

purge spaces at end of lines

clean-up unix/Makefile.in after carbon removal

check-in: 9e2fc38c user: jan.nijtmans tags: core-8-5-branch
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to ChangeLog.







1
2
3
4
5
6
7






2012-10-23  Jan Nijtmans  <[email protected]>

	* generic/tkButton.h: Backport of ::tk::mac::useCompatibilityMetrics
	* generic/tkButton.c  handling and scrollbar metrics handling from trunk.
	* generic/tkScrollbar.h
	* generic/tkScrollbar.c
	* macosx/tkMacOSXButton.c
>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
2012-10-24  Don Porter  <[email protected]>

	* macosx/tkMacOSXWm.c:	[Bug 3574893] Add overlooked toplevel ref
	count maintenance in the [wm manage|forget] operations that could
	cause segfaults due to premature free of structs.

2012-10-23  Jan Nijtmans  <[email protected]>

	* generic/tkButton.h: Backport of ::tk::mac::useCompatibilityMetrics
	* generic/tkButton.c  handling and scrollbar metrics handling from trunk.
	* generic/tkScrollbar.h
	* generic/tkScrollbar.c
	* macosx/tkMacOSXButton.c

Changes to macosx/tkMacOSXWm.c.

1650
1651
1652
1653
1654
1655
1656

1657

1658
1659
1660
1661
1662
1663
1664
	Tk_MakeWindowExist(winPtr->parentPtr);

	macWin = (MacDrawable *) winPtr->window;

	TkFocusJoin(winPtr);
	Tk_UnmapWindow(frameWin);


	macWin->toplevel = winPtr->parentPtr->privatePtr->toplevel;

	macWin->flags &= ~TK_HOST_EXISTS;

	TkWmDeadWindow(winPtr);
	RemapWindows(winPtr, (MacDrawable *) winPtr->parentPtr->window);

	winPtr->flags &=~(TK_TOP_HIERARCHY|TK_TOP_LEVEL|TK_HAS_WRAPPER|TK_WIN_MANAGED);








>

>







1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
	Tk_MakeWindowExist(winPtr->parentPtr);

	macWin = (MacDrawable *) winPtr->window;

	TkFocusJoin(winPtr);
	Tk_UnmapWindow(frameWin);

	macWin->toplevel->referenceCount--;
	macWin->toplevel = winPtr->parentPtr->privatePtr->toplevel;
	macWin->toplevel->referenceCount++;
	macWin->flags &= ~TK_HOST_EXISTS;

	TkWmDeadWindow(winPtr);
	RemapWindows(winPtr, (MacDrawable *) winPtr->parentPtr->window);

	winPtr->flags &=~(TK_TOP_HIERARCHY|TK_TOP_LEVEL|TK_HAS_WRAPPER|TK_WIN_MANAGED);

2415
2416
2417
2418
2419
2420
2421

2422

2423
2424
2425
2426
2427
2428
2429
		macWin = (MacDrawable *) winPtr->window;
	    }
	    TkWmMapWindow(winPtr);
	    Tk_UnmapWindow(frameWin);
	}
	wmPtr = winPtr->wmInfoPtr;
	winPtr->flags &= ~TK_MAPPED;

	macWin->toplevel = macWin;

	RemapWindows(winPtr, macWin);
	winPtr->flags |=
		(TK_TOP_HIERARCHY|TK_TOP_LEVEL|TK_HAS_WRAPPER|TK_WIN_MANAGED);
	TkMapTopFrame(frameWin);
    } else if (Tk_IsTopLevel(frameWin)) {
	/* Already managed by wm - ignore it */
    }







>

>







2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
		macWin = (MacDrawable *) winPtr->window;
	    }
	    TkWmMapWindow(winPtr);
	    Tk_UnmapWindow(frameWin);
	}
	wmPtr = winPtr->wmInfoPtr;
	winPtr->flags &= ~TK_MAPPED;
	macWin->toplevel->referenceCount--;
	macWin->toplevel = macWin;
	macWin->toplevel->referenceCount++;
	RemapWindows(winPtr, macWin);
	winPtr->flags |=
		(TK_TOP_HIERARCHY|TK_TOP_LEVEL|TK_HAS_WRAPPER|TK_WIN_MANAGED);
	TkMapTopFrame(frameWin);
    } else if (Tk_IsTopLevel(frameWin)) {
	/* Already managed by wm - ignore it */
    }
6532
6533
6534
6535
6536
6537
6538

6539

6540
6541
6542
6543
6544
6545
6546
     * Remove the OS specific window. It will get rebuilt when the window gets
     * Mapped.
     */

    if (winPtr->window != None) {
	MacDrawable *macWin = (MacDrawable *) winPtr->window;


	macWin->toplevel = parentWin->toplevel;

	winPtr->flags &= ~TK_MAPPED;
#ifdef TK_REBUILD_TOPLEVEL
	winPtr->flags |= TK_REBUILD_TOPLEVEL;
#endif
    }

    /* Repeat for all the children */







>

>







6536
6537
6538
6539
6540
6541
6542
6543
6544
6545
6546
6547
6548
6549
6550
6551
6552
     * Remove the OS specific window. It will get rebuilt when the window gets
     * Mapped.
     */

    if (winPtr->window != None) {
	MacDrawable *macWin = (MacDrawable *) winPtr->window;

	macWin->toplevel->referenceCount--;
	macWin->toplevel = parentWin->toplevel;
	macWin->toplevel->referenceCount++;
	winPtr->flags &= ~TK_MAPPED;
#ifdef TK_REBUILD_TOPLEVEL
	winPtr->flags |= TK_REBUILD_TOPLEVEL;
#endif
    }

    /* Repeat for all the children */