app,io/system: implement clipboard reading and writing

The app.ReadClipboard and app.WriteClipboard can be used to interact
with the system clipboard. The clipboard may be asynchronous, so
system.ClipboardEvent is introduced to deliver the result of a read.

Updates gio#31

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2020-05-17 18:51:24 +02:00
parent f210651b08
commit 59bc001677
2 changed files with 21 additions and 0 deletions
+5
View File
@@ -54,6 +54,11 @@ type Driver interface {
// ShowTextInput updates the virtual keyboard state.
ShowTextInput(show bool)
NewContext() (Context, error)
// ReadClipboard requests the clipboard content.
ReadClipboard()
// WriteClipboard requests a clipboard write.
WriteClipboard(s string)
}
type windowRendezvous struct {
+16
View File
@@ -191,6 +191,22 @@ func (w *Window) Invalidate() {
}
}
// ReadClipboard initiates a read of the clipboard in the form
// of a system.ClipboardEvent. Multiple reads may be coalescedd
// to a single event.
func (w *Window) ReadClipboard() {
w.driverDo(func() {
w.driver.ReadClipboard()
})
}
// WriteClipboard writes a string to the clipboard.
func (w *Window) WriteClipboard(s string) {
w.driverDo(func() {
w.driver.WriteClipboard(s)
})
}
// driverDo calls f as soon as the window has a valid driver attached,
// or does nothing if the window is destroyed while waiting.
func (w *Window) driverDo(f func()) {