diff --git a/src/Avalonia.Native.OSX/clipboard.mm b/src/Avalonia.Native.OSX/clipboard.mm index 2d64f83e91..44ee68bb52 100644 --- a/src/Avalonia.Native.OSX/clipboard.mm +++ b/src/Avalonia.Native.OSX/clipboard.mm @@ -5,16 +5,26 @@ class Clipboard : public ComSingleObject public: virtual HRESULT GetText (void** retOut) { - NSString *str = [[NSPasteboard generalPasteboard] stringForType:NSPasteboardTypeString]; - *retOut = (void *)str.UTF8String; + @autoreleasepool { + NSString *str = [[NSPasteboard generalPasteboard] stringForType:NSPasteboardTypeString]; + *retOut = (void *)str.UTF8String; + } return S_OK; } virtual HRESULT SetText (char* text) { - NSPasteboard *pasteBoard = [NSPasteboard generalPasteboard]; - [pasteBoard clearContents]; - [pasteBoard setString:@(text) forType:NSPasteboardTypeString]; + @autoreleasepool { + NSPasteboard *pasteBoard = [NSPasteboard generalPasteboard]; + [pasteBoard clearContents]; + [pasteBoard setString:@(text) forType:NSPasteboardTypeString]; + } + return S_OK; + } + + virtual HRESULT Clear() + { + [[NSPasteboard generalPasteboard] clearContents]; return S_OK; } }; diff --git a/src/Avalonia.Native/Stubs.cs b/src/Avalonia.Native/Stubs.cs index e7b7b277d7..a9da99fb21 100644 --- a/src/Avalonia.Native/Stubs.cs +++ b/src/Avalonia.Native/Stubs.cs @@ -21,17 +21,26 @@ namespace Avalonia.Native public Task ClearAsync() { + _native.Clear(); return Task.CompletedTask; } public Task GetTextAsync() { var outPtr = _native.GetText(); +<<<<<<< Updated upstream return Task.FromResult(Marshal.PtrToStringAnsi(outPtr)); +======= + var text = Marshal.PtrToStringAnsi(outPtr); + return Task.FromResult(text); +>>>>>>> Stashed changes } public Task SetTextAsync(string text) { + _native.Clear(); + if(text != null) + _native.SetText(text); return Task.CompletedTask; } } diff --git a/src/headers/avalonia-native.h b/src/headers/avalonia-native.h index 528375b39e..6743b0dc3e 100644 --- a/src/headers/avalonia-native.h +++ b/src/headers/avalonia-native.h @@ -217,6 +217,7 @@ AVNCOM(IAvnClipboard, 0f) : virtual IUnknown { virtual HRESULT GetText (void** retOut) = 0; virtual HRESULT SetText (char* text) = 0; + virtual HRESULT Clear() = 0; }; extern "C" IAvaloniaNativeFactory* CreateAvaloniaNative();