From 625ff44b4cbd4e2d133d798057e9c68c33f73aaf Mon Sep 17 00:00:00 2001 From: fvogel Date: Wed, 23 Sep 2015 19:47:25 +0000 Subject: Fixed bug [1501749fff] - Crash on embedded window deletion bound to event --- generic/tkTextWind.c | 16 ++++++++++------ tests/textWind.test | 14 ++++++++++++++ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/generic/tkTextWind.c b/generic/tkTextWind.c index 8d1f850..5b511d2 100644 --- a/generic/tkTextWind.c +++ b/generic/tkTextWind.c @@ -1123,6 +1123,16 @@ TkTextEmbWinDisplayProc( &lineX, &windowY, &width, &height); windowX = lineX - chunkPtr->x + x; + /* + * Mark the window as displayed so that it won't get unmapped. + * This needs to be done before the next instruction block because + * Tk_MaintainGeometry/Tk_MapWindow will run event handlers, in + * particular for the event, and if the bound script deletes + * the embedded window its clients will get freed. + */ + + client->displayed = 1; + if (textPtr->tkwin == Tk_Parent(tkwin)) { if ((windowX != Tk_X(tkwin)) || (windowY != Tk_Y(tkwin)) || (Tk_ReqWidth(tkwin) != Tk_Width(tkwin)) @@ -1134,12 +1144,6 @@ TkTextEmbWinDisplayProc( Tk_MaintainGeometry(tkwin, textPtr->tkwin, windowX, windowY, width, height); } - - /* - * Mark the window as displayed so that it won't get unmapped. - */ - - client->displayed = 1; } /* diff --git a/tests/textWind.test b/tests/textWind.test index 79dca50..2e16f7b 100644 --- a/tests/textWind.test +++ b/tests/textWind.test @@ -1023,6 +1023,20 @@ test textWind-17.9 {peer widget window configuration} { set res } {{-window {} {} {} {}} {-window {} {} {} {}} {-window {} {} {} .t.f} {-window {} {} {} .tt.t.f}} +test textWind-18.1 {embedded window deletion triggered by a script bound to } { + catch {destroy .t .f} + pack [text .t] + for {set i 1} {$i < 100} {incr i} {.t insert end "Line $i\n"} + .t window create end -window [frame .f -background red -width 80 -height 80] + .t window create end -window [frame .f2 -background blue -width 80 -height 80] + bind .f {.t delete .f} + update + # this shall not crash (bug 1501749) + after 100 {.t yview end} + tkwait visibility .f2 + update +} {} + catch {destroy .t} option clear -- cgit v0.12 From a7bd1b8b54051af0e4a59ca36d6fa8cbbd221487 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Wed, 30 Sep 2015 11:16:38 +0000 Subject: Don't limit Universal runtime support to VisualStudio version 14 only, future versions will probably have it as well. --- win/configure | 4 ++-- win/tcl.m4 | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/win/configure b/win/configure index 57e0453..c493d8b 100755 --- a/win/configure +++ b/win/configure @@ -3828,7 +3828,7 @@ echo "${ECHO_T}using shared flags" >&6 LIBRARIES="\${SHARED_LIBRARIES}" SHLIB_LD_LIBS='${LIBS}' case "x`echo \${VisualStudioVersion}`" in - x14*) + x1[4-9]*) lflags="${lflags} -nodefaultlib:libucrt.lib" ;; *) @@ -3873,7 +3873,7 @@ echo "${ECHO_T} Using 64-bit $MACHINE mode" >&6 LIBS="user32.lib advapi32.lib ws2_32.lib" case "x`echo \${VisualStudioVersion}`" in - x14*) + x1[4-9]*) LIBS="$LIBS ucrt.lib" ;; *) diff --git a/win/tcl.m4 b/win/tcl.m4 index 6f10a96..aa3c4b3 100644 --- a/win/tcl.m4 +++ b/win/tcl.m4 @@ -784,7 +784,7 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [ LIBRARIES="\${SHARED_LIBRARIES}" SHLIB_LD_LIBS='${LIBS}' case "x`echo \${VisualStudioVersion}`" in - x14*) + x1[4-9]*) lflags="${lflags} -nodefaultlib:libucrt.lib" ;; *) @@ -826,7 +826,7 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [ LIBS="user32.lib advapi32.lib ws2_32.lib" case "x`echo \${VisualStudioVersion}`" in - x14*) + x1[4-9]*) LIBS="$LIBS ucrt.lib" ;; *) -- cgit v0.12