From 833671d30c7a9f2079cf1370556225a43eb8f3cf Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sat, 10 Jun 2023 13:01:10 +1000 Subject: [PATCH] [v3 windows] Add clipboard support --- v3/pkg/application/clipboard.go | 4 +-- v3/pkg/application/clipboard_darwin.go | 4 +-- v3/pkg/application/clipboard_windows.go | 33 +++++++++++++------------ 3 files changed, 21 insertions(+), 20 deletions(-) diff --git a/v3/pkg/application/clipboard.go b/v3/pkg/application/clipboard.go index 0217057e..8a651e43 100644 --- a/v3/pkg/application/clipboard.go +++ b/v3/pkg/application/clipboard.go @@ -2,7 +2,7 @@ package application type clipboardImpl interface { setText(text string) bool - text() string + text() (string, bool) } type Clipboard struct { @@ -19,6 +19,6 @@ func (c *Clipboard) SetText(text string) bool { return c.impl.setText(text) } -func (c *Clipboard) Text() string { +func (c *Clipboard) Text() (string, bool) { return c.impl.text() } diff --git a/v3/pkg/application/clipboard_darwin.go b/v3/pkg/application/clipboard_darwin.go index a46ff66d..3c0c80ac 100644 --- a/v3/pkg/application/clipboard_darwin.go +++ b/v3/pkg/application/clipboard_darwin.go @@ -43,12 +43,12 @@ func (m macosClipboard) setText(text string) bool { return bool(success) } -func (m macosClipboard) text() string { +func (m macosClipboard) text() (string, bool) { clipboardLock.RLock() defer clipboardLock.RUnlock() clipboardText := C.getClipboardText() result := C.GoString(clipboardText) - return result + return result, true } func newClipboardImpl() *macosClipboard { diff --git a/v3/pkg/application/clipboard_windows.go b/v3/pkg/application/clipboard_windows.go index 483c5156..507eac3d 100644 --- a/v3/pkg/application/clipboard_windows.go +++ b/v3/pkg/application/clipboard_windows.go @@ -2,25 +2,26 @@ package application -type windowsClipboard struct{} +import ( + "github.com/wailsapp/wails/v3/pkg/w32" + "sync" +) -func (m windowsClipboard) setText(text string) bool { - //clipboardLock.Lock() - //defer clipboardLock.Unlock() - //cText := C.CString(text) - //success := C.setClipboardText(cText) - //C.free(unsafe.Pointer(cText)) - //return bool(success) - panic("implement me") +type windowsClipboard struct { + lock sync.RWMutex } -func (m windowsClipboard) text() string { - //clipboardLock.RLock() - //defer clipboardLock.RUnlock() - //clipboardText := C.getClipboardText() - //result := C.GoString(clipboardText) - //return result - panic("implement me") +func (m *windowsClipboard) setText(text string) bool { + m.lock.Lock() + defer m.lock.Unlock() + return w32.SetClipboardText(text) == nil +} + +func (m *windowsClipboard) text() (string, bool) { + m.lock.Lock() + defer m.lock.Unlock() + text, err := w32.GetClipboardText() + return text, err == nil } func newClipboardImpl() *windowsClipboard {