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

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

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

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

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

9
src/Avalonia.Native/ClipboardImpl.cs

@ -26,11 +26,12 @@ namespace Avalonia.Native
public unsafe Task<string> GetTextAsync() public unsafe Task<string> GetTextAsync()
{ {
var text = _native.GetText(); using (var text = _native.GetText())
{
var result = System.Text.Encoding.UTF8.GetString((byte*)text.GetPointer(), text.GetLength()); 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) public Task SetTextAsync(string text)

Loading…
Cancel
Save