Browse Source

[OSX] fix pasting from clipboard

pull/2082/head
Dan Walmsley 8 years ago
parent
commit
f6d080feec
  1. 6
      native/Avalonia.Native/inc/avalonia-native.h
  2. 4
      native/Avalonia.Native/src/OSX/AvnString.mm
  3. 11
      native/Avalonia.Native/src/OSX/clipboard.mm
  4. 9
      src/Avalonia.Native/ClipboardImpl.cs

6
native/Avalonia.Native/inc/avalonia-native.h

@ -175,8 +175,8 @@ public:
AVNCOM(IAvnString, 17) : IUnknown
{
virtual HRESULT GetPointer(void**retOut) = 0;
virtual HRESULT GetLength(int*ret) = 0;
virtual HRESULT Pointer(void**retOut) = 0;
virtual HRESULT Length(int*ret) = 0;
};
AVNCOM(IAvnWindowBase, 02) : IUnknown
@ -321,7 +321,7 @@ AVNCOM(IAvnScreens, 0e) : IUnknown
AVNCOM(IAvnClipboard, 0f) : IUnknown
{
virtual HRESULT GetText (IAvnString** ppv ) = 0;
virtual IAvnString* GetText () = 0;
virtual HRESULT SetText (char* text) = 0;
virtual HRESULT Clear() = 0;
};

4
native/Avalonia.Native/src/OSX/AvnString.mm

@ -21,7 +21,7 @@ public:
_string = string;
}
virtual HRESULT GetPointer(void**retOut) override
virtual HRESULT Pointer(void**retOut) override
{
@autoreleasepool
{
@ -36,7 +36,7 @@ public:
}
}
virtual HRESULT GetLength(int*retOut) override
virtual HRESULT Length(int*retOut) override
{
if(retOut == nullptr)
{

11
native/Avalonia.Native/src/OSX/clipboard.mm

@ -8,18 +8,11 @@ class Clipboard : public ComSingleObject<IAvnClipboard, &IID_IAvnClipboard>
{
public:
FORWARD_IUNKNOWN()
virtual HRESULT GetText (IAvnString** retOut) override
virtual IAvnString* GetText () override
{
@autoreleasepool
{
if(retOut == nullptr)
{
return E_POINTER;
}
*retOut = CreateAvnString([[NSPasteboard generalPasteboard] stringForType:NSPasteboardTypeString]);
return S_OK;
return CreateAvnString([[NSPasteboard generalPasteboard] stringForType:NSPasteboardTypeString]);
}
}

9
src/Avalonia.Native/ClipboardImpl.cs

@ -26,11 +26,12 @@ namespace Avalonia.Native
public unsafe Task<string> GetTextAsync()
{
var text = _native.GetText();
var result = System.Text.Encoding.UTF8.GetString((byte*)text.GetPointer(), text.GetLength());
using (var text = _native.GetText())
{
var result = System.Text.Encoding.UTF8.GetString((byte*)text.Pointer(), text.Length());
return Task.FromResult(result);
return Task.FromResult(result);
}
}
public Task SetTextAsync(string text)

Loading…
Cancel
Save