Mercurial > projects > qtd
diff qt/d2/qt/QtdObject.d @ 253:073b9153ed8a
Rev. 264 done right.
Problems:
- classwizard segfaults on exit due to a bug in signals/slots or runtime.
- hellogl doesn't compile with dmd2 due to a bug in the compiler backend
author | maxter |
---|---|
date | Sun, 30 Aug 2009 09:59:12 +0000 |
parents | |
children | f9559a957be9 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qt/d2/qt/QtdObject.d Sun Aug 30 09:59:12 2009 +0000 @@ -0,0 +1,66 @@ +/** +* +* Copyright: Copyright QtD Team, 2008-2009 +* License: <a href="http://www.boost.org/LICENSE_1_0.txt>Boost License 1.0</a> +* +* Copyright QtD Team, 2008-2009 +* Distributed under the Boost Software License, Version 1.0. +* (See accompanying file boost-license-1.0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +* +*/ + +module qt.QtdObject; + +import qt.Signal; + +enum QtdObjectFlags : ubyte +{ + none, + nativeOwnership = 0x1, + dOwnership = 0x2, + dynamicEntity = 0x4 + //gcManaged = 0x4 +} + +package abstract class QtdObject +{ + protected QtdObjectFlags __flags_; + void* __nativeId; + + mixin SignalHandlerOps; + + this(void* nativeId, QtdObjectFlags flags = QtdObjectFlags.none) + { + __nativeId = nativeId; + __flags_ = flags; + } + + final QtdObjectFlags __flags() + { + return __flags_; + } + + /+ final +/ void __setFlags(QtdObjectFlags flags, bool value) + { + if (value) + __flags_ |= flags; + else + __flags_ &= ~flags; + } + + // COMPILER BUG: 3206 + protected void __deleteNative() + { + assert(false); + } + + ~this() + { + if (!(__flags_ & QtdObjectFlags.nativeOwnership)) + { + // avoid deleting D object twice. + __flags_ |= QtdObjectFlags.dOwnership; + __deleteNative; + } + } +}