app/internal/window: [wasm] implement clipboard

Update gio#31

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2020-05-17 16:22:37 +02:00
parent 503534e84e
commit 20fc81a57a
+31 -3
View File
@@ -19,10 +19,12 @@ import (
type window struct {
window js.Value
clipboard js.Value
cnv js.Value
tarea js.Value
w Callbacks
redraw js.Func
clipboardCallback js.Func
requestAnimationFrame js.Value
cleanfuncs []func()
touches []js.Value
@@ -43,15 +45,21 @@ func NewWindow(win Callbacks, opts *Options) error {
tarea := createTextArea(doc)
cont.Call("appendChild", tarea)
w := &window{
cnv: cnv,
tarea: tarea,
window: js.Global().Get("window"),
cnv: cnv,
tarea: tarea,
window: js.Global().Get("window"),
clipboard: js.Global().Get("navigator").Get("clipboard"),
}
w.requestAnimationFrame = w.window.Get("requestAnimationFrame")
w.redraw = w.funcOf(func(this js.Value, args []js.Value) interface{} {
w.animCallback()
return nil
})
w.clipboardCallback = w.funcOf(func(this js.Value, args []js.Value) interface{} {
content := args[0].String()
win.Event(system.ClipboardEvent{Text: content})
return nil
})
w.addEventListeners()
w.w = win
go func() {
@@ -343,6 +351,26 @@ func (w *window) SetAnimating(anim bool) {
w.animating = anim
}
func (w *window) ReadClipboard() {
if w.clipboard.IsUndefined() {
return
}
if w.clipboard.Get("readText").IsUndefined() {
return
}
w.clipboard.Call("readText", w.clipboard).Call("then", w.clipboardCallback)
}
func (w *window) WriteClipboard(s string) {
if w.clipboard.IsUndefined() {
return
}
if w.clipboard.Get("writeText").IsUndefined() {
return
}
w.clipboard.Call("writeText", s)
}
func (w *window) ShowTextInput(show bool) {
// Run in a goroutine to avoid a deadlock if the
// focus change result in an event.