diff --git a/v3/pkg/application/clipboard.go b/v3/pkg/application/clipboard.go index 0217057ee..8a651e430 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 a46ff66d5..3c0c80ac6 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 483c51567..507eac3da 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 {