From 39bdab02ce224157c898b23c5c0a42482f8c916e Mon Sep 17 00:00:00 2001 From: Pritpal Bedi Date: Wed, 2 Jul 2008 21:38:06 +0000 Subject: [PATCH] 2008-07-02 14:35 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) * contrib/gtwvg/gtwvg.c * source/rtl/gtwvt/gtwvt.c ! Changed the wat EXIT procedure works. ; The change is provided by Ron Pinkas so I have implemented as is. Before also I was not finding any problems on Harbour but appln was GPFing on Exit with GTWVG. ; TOCHECK: Viktor see if it resolves the EXIT problem you are reporting --- harbour/ChangeLog | 9 ++++++ harbour/contrib/gtwvg/gtwvg.c | 51 ++++++++++++++++++++++---------- harbour/source/rtl/gtwvt/gtwvt.c | 15 ++++++---- 3 files changed, 53 insertions(+), 22 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index ce08bdc661..ba6d62c68d 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,15 @@ 2008-12-31 13:59 UTC+0100 Foo Bar */ +2008-07-02 14:35 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) + * contrib/gtwvg/gtwvg.c + * source/rtl/gtwvt/gtwvt.c + ! Changed the wat EXIT procedure works. + ; The change is provided by Ron Pinkas so I have implemented as is. + Before also I was not finding any problems on Harbour but + appln was GPFing on Exit with GTWVG. + ; TOCHECK: Viktor see if it resolves the EXIT problem you are reporting + 2008-07-02 22:42 UTC+0200 Viktor Szakats (harbour.01 syenar hu) * contrib/hbsqlit3/Makefile * contrib/Makefile diff --git a/harbour/contrib/gtwvg/gtwvg.c b/harbour/contrib/gtwvg/gtwvg.c index 1daaae933c..2454dfeed3 100644 --- a/harbour/contrib/gtwvg/gtwvg.c +++ b/harbour/contrib/gtwvg/gtwvg.c @@ -170,12 +170,41 @@ static BOOL hb_gt_wvt_Alloc( PHB_GTWVT pWVT ) static void hb_gt_wvt_Free( PHB_GTWVT pWVT ) { + int iIndex; + --s_wvtCount; s_wvtWindows[pWVT->iHandle] = NULL; if( pWVT->pszSelectCopy ) hb_xfree( pWVT->pszSelectCopy ); + // Detach PRG callback + pWVT->pSymWVT_PAINT = NULL; + pWVT->pSymWVT_SETFOCUS = NULL; + pWVT->pSymWVT_KILLFOCUS = NULL; + pWVT->pSymWVT_MOUSE = NULL; + pWVT->pSymWVT_TIMER = NULL; + pWVT->pSymWVT_KEY = NULL; + for ( iIndex = 0; iIndex < WVT_DLGML_MAX; iIndex++ ) + { + if ( pWVT->pFunc[ iIndex ] != NULL && pWVT->iType[ iIndex ] == 2 ) + { + hb_itemRelease( ( PHB_ITEM ) pWVT->pFunc[ iIndex ] ); + pWVT->pFunc[ iIndex ] = NULL; + } + if ( pWVT->pcbFunc[ iIndex ] != NULL ) + { + hb_itemRelease( ( PHB_ITEM ) pWVT->pcbFunc[ iIndex ] ); + pWVT->pcbFunc[ iIndex ] = NULL; + } + } + + if( pWVT->hWnd ) + { + DestroyWindow( pWVT->hWnd ); + pWVT->hWnd = NULL; + } + hb_xfree( pWVT ); } @@ -183,19 +212,14 @@ static void hb_gt_wvt_FreeAll( void ) { if( s_wvtCount > 0 ) { - int iPos; + int iPos, iIndex; + for ( iPos = 1; iPos < WVT_MAX_WINDOWS; iPos++ ) { - if( s_wvtWindows[ iPos ] != NULL ) + if( !s_wvtWindows[ iPos ] == NULL ) { - PHB_GTWVT pWVT; - - pWVT = s_wvtWindows[ iPos ]; - - DestroyWindow( pWVT->hWnd ); - pWVT->hWnd = NULL; - hb_gt_wvt_Free( pWVT ); - HB_GTSUPER_EXIT( pWVT->pGT ); + hb_gt_wvt_Free( s_wvtWindows[ iPos ] ); + HB_GTSUPER_EXIT( s_wvtWindows[ iPos ]->pGT ); } } } @@ -1922,19 +1946,14 @@ static void hb_gt_wvt_Exit( PHB_GT pGT ) pWVT = HB_GTWVT_GET( pGT ); HB_GTSUPER_EXIT( pGT ); - hb_gt_wvt_FreeAll(); /* MW */ + hb_gt_wvt_FreeAll(); if( pWVT ) { if( pWVT->hWnd ) { hb_wvt_gtExitGui( pWVT ); - DestroyWindow( pWVT->hWnd ); - pWVT->hWnd = NULL; } - if( pWVT->pszSelectCopy ) - hb_xfree( pWVT->pszSelectCopy ); - UnregisterClass( s_szClassName, ( HINSTANCE ) s_hInstance ); hb_gt_wvt_Free( pWVT ); } diff --git a/harbour/source/rtl/gtwvt/gtwvt.c b/harbour/source/rtl/gtwvt/gtwvt.c index a091cb9904..708c1fe52c 100644 --- a/harbour/source/rtl/gtwvt/gtwvt.c +++ b/harbour/source/rtl/gtwvt/gtwvt.c @@ -150,12 +150,20 @@ static BOOL hb_gt_wvt_Alloc( PHB_GTWVT pWVT ) static void hb_gt_wvt_Free( PHB_GTWVT pWVT ) { + int iIndex; + --s_wvtCount; s_wvtWindows[pWVT->iHandle] = NULL; if( pWVT->pszSelectCopy ) hb_xfree( pWVT->pszSelectCopy ); + if( pWVT->hWnd ) + { + DestroyWindow( pWVT->hWnd ); + pWVT->hWnd = NULL; + } + hb_xfree( pWVT ); } @@ -1562,7 +1570,7 @@ static HWND hb_gt_wvt_CreateWindow( HINSTANCE hInstance, HINSTANCE hPrevInstance NULL, /* menu */ hInstance, /* instance */ NULL ); /* lpParam */ - + if( hWnd ) { ShowWindow( hWnd, iCmdShow ); @@ -1657,11 +1665,6 @@ static void hb_gt_wvt_Exit( PHB_GT pGT ) if( pWVT ) { - if( pWVT->hWnd ) - { - DestroyWindow( pWVT->hWnd ); - pWVT->hWnd = NULL; - } UnregisterClass( s_szClassName, ( HINSTANCE ) s_hInstance ); hb_gt_wvt_Free( pWVT ); }