Browse Source

[OSX] correctly use UTF8 encoded text for passing strings.

SetTitle on Window, SetText on Clipboard.
pull/2082/head
Dan Walmsley 8 years ago
parent
commit
d06ed4a7db
  1. 4
      native/Avalonia.Native/inc/avalonia-native.h
  2. 8
      native/Avalonia.Native/src/OSX/Avalonia.Native.OSX.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
  3. 4
      native/Avalonia.Native/src/OSX/clipboard.mm
  4. 4
      native/Avalonia.Native/src/OSX/window.mm
  5. 6
      src/Avalonia.Native/ClipboardImpl.cs
  6. 6
      src/Avalonia.Native/WindowImpl.cs

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

@ -216,7 +216,7 @@ AVNCOM(IAvnWindow, 04) : virtual IAvnWindowBase
virtual HRESULT ShowDialog (IUnknown**ppv) = 0;
virtual HRESULT SetCanResize(bool value) = 0;
virtual HRESULT SetHasDecorations(bool value) = 0;
virtual HRESULT SetTitle (const char* title) = 0;
virtual HRESULT SetTitle (void* utf8Title) = 0;
virtual HRESULT SetTitleBarColor (AvnColor color) = 0;
virtual HRESULT SetWindowState(AvnWindowState state) = 0;
virtual HRESULT GetWindowState(AvnWindowState*ret) = 0;
@ -322,7 +322,7 @@ AVNCOM(IAvnScreens, 0e) : IUnknown
AVNCOM(IAvnClipboard, 0f) : IUnknown
{
virtual IAvnString* GetText () = 0;
virtual HRESULT SetText (char* text) = 0;
virtual HRESULT SetText (void* utf8Text) = 0;
virtual HRESULT Clear() = 0;
};

8
native/Avalonia.Native/src/OSX/Avalonia.Native.OSX.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>

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

@ -16,13 +16,13 @@ public:
}
}
virtual HRESULT SetText (char* text) override
virtual HRESULT SetText (void* utf8String) override
{
@autoreleasepool
{
NSPasteboard *pasteBoard = [NSPasteboard generalPasteboard];
[pasteBoard clearContents];
[pasteBoard setString:@(text) forType:NSPasteboardTypeString];
[pasteBoard setString:[NSString stringWithUTF8String:(const char*)utf8String] forType:NSPasteboardTypeString];
}
return S_OK;

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

@ -530,11 +530,11 @@ private:
}
}
virtual HRESULT SetTitle (const char* title) override
virtual HRESULT SetTitle (void* utf8title) override
{
@autoreleasepool
{
_lastTitle = [NSString stringWithUTF8String:title];
_lastTitle = [NSString stringWithUTF8String:(const char*)utf8title];
[Window setTitle:_lastTitle];
[Window setTitleVisibility:NSWindowTitleVisible];

6
src/Avalonia.Native/ClipboardImpl.cs

@ -5,6 +5,7 @@ using System.Threading.Tasks;
using System.Runtime.InteropServices;
using Avalonia.Input.Platform;
using Avalonia.Native.Interop;
using Avalonia.Platform.Interop;
namespace Avalonia.Native
{
@ -40,7 +41,10 @@ namespace Avalonia.Native
if (text != null)
{
_native.SetText(text);
using (var buffer = new Utf8Buffer(text))
{
_native.SetText(buffer.DangerousGetHandle());
}
}
return Task.CompletedTask;

6
src/Avalonia.Native/WindowImpl.cs

@ -5,6 +5,7 @@ using System;
using Avalonia.Controls;
using Avalonia.Native.Interop;
using Avalonia.Platform;
using Avalonia.Platform.Interop;
namespace Avalonia.Native
{
@ -68,7 +69,10 @@ namespace Avalonia.Native
public void SetTitle(string title)
{
_native.SetTitle(title);
using (var buffer = new Utf8Buffer(title))
{
_native.SetTitle(buffer.DangerousGetHandle());
}
}
public WindowState WindowState

Loading…
Cancel
Save