diff --git a/src/Generation/Generator/Renderer/Public/OpaqueTypedRecord.cs b/src/Generation/Generator/Renderer/Public/OpaqueTypedRecord.cs index b405ba7f6..6c20b67ec 100644 --- a/src/Generation/Generator/Renderer/Public/OpaqueTypedRecord.cs +++ b/src/Generation/Generator/Renderer/Public/OpaqueTypedRecord.cs @@ -34,6 +34,12 @@ public partial class {name} Initialize(); }} + //TODO: This is a workaround constructor as long as we are + //not having https://github.com/gircore/gir.core/issues/397 + private {name}(IntPtr ptr, bool ownsHandle) : this(ownsHandle + ? new {Model.OpaqueTypedRecord.GetFullyQuallifiedOwnedHandle(record)}(ptr) + : new {Model.OpaqueTypedRecord.GetFullyQuallifiedUnownedHandle(record)}(ptr).OwnedCopy()){{ }} + // Implement this to perform additional steps in the constructor partial void Initialize(); diff --git a/src/Tests/Libs/GirTest-0.1.Tests/OpaqueTypedRecordTest.cs b/src/Tests/Libs/GirTest-0.1.Tests/OpaqueTypedRecordTest.cs index da9d7a1e4..51113608b 100644 --- a/src/Tests/Libs/GirTest-0.1.Tests/OpaqueTypedRecordTest.cs +++ b/src/Tests/Libs/GirTest-0.1.Tests/OpaqueTypedRecordTest.cs @@ -287,4 +287,20 @@ void Callback(OpaqueTypedRecordTester? obj) called.Should().BeTrue(); } + + [TestMethod] + public void SupportsWrapHandle() + { + var recordTester = OpaqueTypedRecordTester.New(); + + var wrapped = (OpaqueTypedRecordTester) GObject.Internal.BoxedWrapper.WrapHandle( + handle: recordTester.Handle.DangerousGetHandle(), + ownsHandle: false, + gtype: OpaqueTypedRecordTester.GetGType() + ); + + wrapped.Handle.DangerousGetHandle().Should().Be(recordTester.Handle.DangerousGetHandle()); + recordTester.GetRefCount().Should().Be(2); + wrapped.GetRefCount().Should().Be(2); + } }