diff --git a/harbour/ChangeLog b/harbour/ChangeLog index f67f99e009..fc8fb5e4b0 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,6 +16,16 @@ The license applies to all entries newer than 2009-04-28. */ +2012-05-12 00:55 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com) + * contrib/hbqt/hbmk2_qt.hb + * Fixed: the objects derived from QObject but without a constructor + were conflickting somehow with the use of shared pointer. + Now any demo in hbqt/tests and hbxbp/tests does not through + error messages at EXIT. TESTBROW.PRG with #if 0 / #if 1 + works flawlessly. However, in hbIDE these error messages still + exist if :destroy() is not employed, otherwise, neither error + messages nor GPF. + 2012-05-11 18:45 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com) * contrib/hbide/idefunctions.prg * contrib/hbide/ideharbourhelp.prg diff --git a/harbour/contrib/hbqt/hbmk2_qt.hb b/harbour/contrib/hbqt/hbmk2_qt.hb index d5f83d9e54..50933be148 100644 --- a/harbour/contrib/hbqt/hbmk2_qt.hb +++ b/harbour/contrib/hbqt/hbmk2_qt.hb @@ -1494,7 +1494,7 @@ METHOD HbQtSource:build() ENDIF AAdd( aLine, "typedef struct" ) AAdd( aLine, "{" ) - IF ::isObject + IF ::isObject .AND. ::isConstructor AAdd( aLine, " QPointer< "+ cObjPfx + ::cQtObject +" > ph;" ) ELSE IF ::isList @@ -1573,7 +1573,10 @@ METHOD HbQtSource:build() AAdd( aLine, " int i; " ) AAdd( aLine, " for( i = 0; i < p->ph->size(); i++ )" ) AAdd( aLine, " {" ) - AAdd( aLine, " hb_itemRelease( p->ph->at( i ) );" ) + AAdd( aLine, " if( p->ph->at( i ) != NULL )" ) + AAdd( aLine, " {" ) + AAdd( aLine, " hb_itemRelease( p->ph->at( i ) );" ) + AAdd( aLine, " }" ) AAdd( aLine, " }" ) ENDIF AAdd( aLine, " delete ( ( " + cObjPfx + ::cQtObject + iif( ::isList, "< void * >", "" ) + " * ) p->ph ); " ) @@ -1607,7 +1610,7 @@ METHOD HbQtSource:build() AAdd( aLine, " /* CASE else */" ) AAdd( aLine, " HBQT_GC_T * p = ( HBQT_GC_T * ) Cargo;" ) AAdd( aLine, " " ) - AAdd( aLine, " if( p && p->bNew )" ) + AAdd( aLine, " if( p )" ) //&& p->bNew )" ) AAdd( aLine, " p->ph = NULL;" ) ENDIF AAdd( aLine, "}" ) @@ -1621,7 +1624,8 @@ METHOD HbQtSource:build() AAdd( aLine, " HBQT_GC_T_" + ::cQtObject + " * p = ( HBQT_GC_T_" + ::cQtObject + " * ) hb_gcAllocate( sizeof( HBQT_GC_T_" + ::cQtObject + " ), hbqt_gcFuncs() );" ) ENDIF AAdd( aLine, "" ) - IF ::isObject + + IF ::isObject .AND. ::isConstructor AAdd( aLine, " new( & p->ph ) QPointer< "+ cObjPfx + ::cQtObject +" >( ( " + cObjPfx + ::cQtObject + " * ) pObj );" ) ELSE AAdd( aLine, " p->ph = ( " + cObjPfx + ::cQtObject + iif( ::isList, "< void * >", "" ) + " * ) pObj;" )