fckeuspy-go/vendor/fyne.io/fyne/v2/internal/driver/glfw/clipboard.go

65 lines
1.4 KiB
Go

//go:build !wasm && !test_web_driver
package glfw
import (
"runtime"
"time"
"fyne.io/fyne/v2"
"github.com/go-gl/glfw/v3.3/glfw"
)
// Declare conformity with Clipboard interface
var _ fyne.Clipboard = clipboard{}
func NewClipboard() fyne.Clipboard {
return clipboard{}
}
// clipboard represents the system clipboard
type clipboard struct{}
// Content returns the clipboard content
func (c clipboard) Content() string {
// This retry logic is to work around the "Access Denied" error often thrown in windows PR#1679
if runtime.GOOS != "windows" {
return c.content()
}
for i := 3; i > 0; i-- {
cb := c.content()
if cb != "" {
return cb
}
time.Sleep(50 * time.Millisecond)
}
//can't log retry as it would also log errors for an empty clipboard
return ""
}
func (c clipboard) content() string {
return glfw.GetClipboardString()
}
// SetContent sets the clipboard content
func (c clipboard) SetContent(content string) {
// This retry logic is to work around the "Access Denied" error often thrown in windows PR#1679
if runtime.GOOS != "windows" {
c.setContent(content)
return
}
for i := 3; i > 0; i-- {
c.setContent(content)
if c.content() == content {
return
}
time.Sleep(50 * time.Millisecond)
}
fyne.LogError("GLFW clipboard set failed", nil)
}
func (c clipboard) setContent(content string) {
glfw.SetClipboardString(content)
}