From df50e6eb7fcee1b7b60c7dc9c0d1968124197b9e Mon Sep 17 00:00:00 2001 From: hobbs Date: Fri, 6 Dec 2002 23:29:37 +0000 Subject: * win/tkWinX.c (TkWinXInit): Move cleanup into an exit handler * win/tkWin32Dll.c (DllMain): to ensure that it will be called * win/tkWinWm.c (TkWinWmCleanup): without having to unload the dll. Also reset the static int initialized on cleanup to allow reinit. --- ChangeLog | 7 +++++++ win/tkWin32Dll.c | 23 +++++++---------------- win/tkWinWm.c | 7 ++++++- win/tkWinX.c | 8 +++++++- 4 files changed, 27 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index 459a635..8b93609 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2002-12-06 Jeff Hobbs + + * win/tkWinX.c (TkWinXInit): Move cleanup into an exit handler + * win/tkWin32Dll.c (DllMain): to ensure that it will be called + * win/tkWinWm.c (TkWinWmCleanup): without having to unload the dll. + Also reset the static int initialized on cleanup to allow reinit. + 2002-12-01 Mo DeJong * tests/event.test (_keypress, _text_ind_to_x_y): diff --git a/win/tkWin32Dll.c b/win/tkWin32Dll.c index cc77be7..c8e03c1 100644 --- a/win/tkWin32Dll.c +++ b/win/tkWin32Dll.c @@ -8,7 +8,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkWin32Dll.c,v 1.4 2000/03/31 09:24:26 hobbs Exp $ + * RCS: @(#) $Id: tkWin32Dll.c,v 1.5 2002/12/06 23:29:37 hobbs Exp $ */ #include "tkWinInt.h" @@ -52,10 +52,13 @@ DllEntryPoint(hInst, reason, reserved) * * DllMain -- * - * DLL entry point. + * DLL entry point. It is not necessary to do anything here as + * Tk will initialize and clean up after itself through other + * methods, in order to be consistent whether the build is static + * or dynamic. * * Results: - * TRUE on sucess, FALSE on failure. + * Always TRUE. * * Side effects: * None. @@ -69,17 +72,5 @@ DllMain(hInstance, reason, reserved) DWORD reason; LPVOID reserved; { - - /* - * If we are attaching to the DLL from a new process, tell Tk about - * the hInstance to use. If we are detaching then clean up any - * data structures related to this DLL. - */ - - if (reason == DLL_PROCESS_ATTACH) { - TkWinXInit(hInstance); - } else if (reason == DLL_PROCESS_DETACH) { - TkWinXCleanup(hInstance); - } - return(TRUE); + return (TRUE); } diff --git a/win/tkWinWm.c b/win/tkWinWm.c index 8442881..69a4bd5 100644 --- a/win/tkWinWm.c +++ b/win/tkWinWm.c @@ -12,7 +12,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkWinWm.c,v 1.53 2002/12/01 23:37:54 mdejong Exp $ + * RCS: @(#) $Id: tkWinWm.c,v 1.54 2002/12/06 23:29:37 hobbs Exp $ */ #include "tkWinInt.h" @@ -1680,6 +1680,11 @@ TkWinWmCleanup(hInstance) } #endif + if (!initialized) { + return; + } + initialized = 0; + tsdPtr = (ThreadSpecificData *) Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); diff --git a/win/tkWinX.c b/win/tkWinX.c index 9de5da3..f97db04 100644 --- a/win/tkWinX.c +++ b/win/tkWinX.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkWinX.c,v 1.23 2002/06/19 19:37:55 mdejong Exp $ + * RCS: @(#) $Id: tkWinX.c,v 1.24 2002/12/06 23:29:37 hobbs Exp $ */ #include "tkWinInt.h" @@ -249,6 +249,12 @@ TkWinXInit(hInstance) if (!RegisterClass(&childClass)) { panic("Unable to register TkChild class"); } + + /* + * Make sure we cleanup on finalize. + */ + Tcl_CreateExitHandler((Tcl_ExitProc *) TkWinXCleanup, + (ClientData) hInstance); } /* -- cgit v0.12