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 ShowDialog (IUnknown**ppv) = 0;
virtual HRESULT SetCanResize(bool value) = 0; virtual HRESULT SetCanResize(bool value) = 0;
virtual HRESULT SetHasDecorations(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 SetTitleBarColor (AvnColor color) = 0;
virtual HRESULT SetWindowState(AvnWindowState state) = 0; virtual HRESULT SetWindowState(AvnWindowState state) = 0;
virtual HRESULT GetWindowState(AvnWindowState*ret) = 0; virtual HRESULT GetWindowState(AvnWindowState*ret) = 0;
@ -322,7 +322,7 @@ AVNCOM(IAvnScreens, 0e) : IUnknown
AVNCOM(IAvnClipboard, 0f) : IUnknown AVNCOM(IAvnClipboard, 0f) : IUnknown
{ {
virtual IAvnString* GetText () = 0; virtual IAvnString* GetText () = 0;
virtual HRESULT SetText (char* text) = 0; virtual HRESULT SetText (void* utf8Text) = 0;
virtual HRESULT Clear() = 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 @autoreleasepool
{ {
NSPasteboard *pasteBoard = [NSPasteboard generalPasteboard]; NSPasteboard *pasteBoard = [NSPasteboard generalPasteboard];
[pasteBoard clearContents]; [pasteBoard clearContents];
[pasteBoard setString:@(text) forType:NSPasteboardTypeString]; [pasteBoard setString:[NSString stringWithUTF8String:(const char*)utf8String] forType:NSPasteboardTypeString];
} }
return S_OK; 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 @autoreleasepool
{ {
_lastTitle = [NSString stringWithUTF8String:title]; _lastTitle = [NSString stringWithUTF8String:(const char*)utf8title];
[Window setTitle:_lastTitle]; [Window setTitle:_lastTitle];
[Window setTitleVisibility:NSWindowTitleVisible]; [Window setTitleVisibility:NSWindowTitleVisible];

6
src/Avalonia.Native/ClipboardImpl.cs

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

6
src/Avalonia.Native/WindowImpl.cs

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

Loading…
Cancel
Save