diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 7e3532ee23..92e4afdca8 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -134,3 +134,4 @@ jobs: pathToPublish: '$(Build.SourcesDirectory)/artifacts/zip' artifactName: 'Samples' condition: succeeded() + diff --git a/native/Avalonia.Native/src/OSX/AvnString.mm b/native/Avalonia.Native/src/OSX/AvnString.mm index b491cf2a92..b62fe8a968 100644 --- a/native/Avalonia.Native/src/OSX/AvnString.mm +++ b/native/Avalonia.Native/src/OSX/AvnString.mm @@ -11,14 +11,26 @@ class AvnStringImpl : public virtual ComSingleObject { private: - NSString* _string; + int _length; + const char* _cstring; public: FORWARD_IUNKNOWN() AvnStringImpl(NSString* string) + { + auto cstring = [string cStringUsingEncoding:NSUTF8StringEncoding]; + _length = (int)[string lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; + + _cstring = (const char*)malloc(_length + 5); + + memset((void*)_cstring, 0, _length + 5); + memcpy((void*)_cstring, (void*)cstring, _length); + } + + virtual ~AvnStringImpl() { - _string = string; + free((void*)_cstring); } virtual HRESULT Pointer(void**retOut) override @@ -30,7 +42,7 @@ public: return E_POINTER; } - *retOut = (void*)_string.UTF8String; + *retOut = (void*)_cstring; return S_OK; } @@ -43,7 +55,7 @@ public: return E_POINTER; } - *retOut = (int)_string.length; + *retOut = _length; return S_OK; } diff --git a/native/Avalonia.Native/src/OSX/clipboard.mm b/native/Avalonia.Native/src/OSX/clipboard.mm index 53c1fe3c2c..6e4d3ce668 100644 --- a/native/Avalonia.Native/src/OSX/clipboard.mm +++ b/native/Avalonia.Native/src/OSX/clipboard.mm @@ -8,6 +8,13 @@ class Clipboard : public ComSingleObject { public: FORWARD_IUNKNOWN() + + Clipboard() + { + NSPasteboard *pasteBoard = [NSPasteboard generalPasteboard]; + [pasteBoard stringForType:NSPasteboardTypeString]; + } + virtual HRESULT GetText (IAvnString**ppv) override { @autoreleasepool @@ -39,7 +46,9 @@ public: { @autoreleasepool { - [[NSPasteboard generalPasteboard] clearContents]; + NSPasteboard *pasteBoard = [NSPasteboard generalPasteboard]; + [pasteBoard clearContents]; + [pasteBoard setString:@"" forType:NSPasteboardTypeString]; } return S_OK;