Browse Source

Finish clipboard implementation

* uses autoreleasepool
* implments Clear method
* fixes SetText when text is null
pull/1977/head
ElBuda 8 years ago
parent
commit
9b232fec4b
  1. 20
      src/Avalonia.Native.OSX/clipboard.mm
  2. 9
      src/Avalonia.Native/Stubs.cs
  3. 1
      src/headers/avalonia-native.h

20
src/Avalonia.Native.OSX/clipboard.mm

@ -5,16 +5,26 @@ class Clipboard : public ComSingleObject<IAvnClipboard, &IID_IAvnClipboard>
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;
}
};

9
src/Avalonia.Native/Stubs.cs

@ -21,17 +21,26 @@ namespace Avalonia.Native
public Task ClearAsync()
{
_native.Clear();
return Task.CompletedTask;
}
public Task<string> 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;
}
}

1
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();

Loading…
Cancel
Save