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: public:
virtual HRESULT GetText (void** retOut) virtual HRESULT GetText (void** retOut)
{ {
NSString *str = [[NSPasteboard generalPasteboard] stringForType:NSPasteboardTypeString]; @autoreleasepool {
*retOut = (void *)str.UTF8String; NSString *str = [[NSPasteboard generalPasteboard] stringForType:NSPasteboardTypeString];
*retOut = (void *)str.UTF8String;
}
return S_OK; return S_OK;
} }
virtual HRESULT SetText (char* text) virtual HRESULT SetText (char* text)
{ {
NSPasteboard *pasteBoard = [NSPasteboard generalPasteboard]; @autoreleasepool {
[pasteBoard clearContents]; NSPasteboard *pasteBoard = [NSPasteboard generalPasteboard];
[pasteBoard setString:@(text) forType:NSPasteboardTypeString]; [pasteBoard clearContents];
[pasteBoard setString:@(text) forType:NSPasteboardTypeString];
}
return S_OK;
}
virtual HRESULT Clear()
{
[[NSPasteboard generalPasteboard] clearContents];
return S_OK; return S_OK;
} }
}; };

9
src/Avalonia.Native/Stubs.cs

@ -21,17 +21,26 @@ namespace Avalonia.Native
public Task ClearAsync() public Task ClearAsync()
{ {
_native.Clear();
return Task.CompletedTask; return Task.CompletedTask;
} }
public Task<string> GetTextAsync() public Task<string> GetTextAsync()
{ {
var outPtr = _native.GetText(); var outPtr = _native.GetText();
<<<<<<< Updated upstream
return Task.FromResult(Marshal.PtrToStringAnsi(outPtr)); return Task.FromResult(Marshal.PtrToStringAnsi(outPtr));
=======
var text = Marshal.PtrToStringAnsi(outPtr);
return Task.FromResult(text);
>>>>>>> Stashed changes
} }
public Task SetTextAsync(string text) public Task SetTextAsync(string text)
{ {
_native.Clear();
if(text != null)
_native.SetText(text);
return Task.CompletedTask; 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 GetText (void** retOut) = 0;
virtual HRESULT SetText (char* text) = 0; virtual HRESULT SetText (char* text) = 0;
virtual HRESULT Clear() = 0;
}; };
extern "C" IAvaloniaNativeFactory* CreateAvaloniaNative(); extern "C" IAvaloniaNativeFactory* CreateAvaloniaNative();

Loading…
Cancel
Save