Made the clipboard API a bit better

This should work better with the X clipboard system better when I
eventually make use of that.
This commit is contained in:
Sasha Koshka 2023-01-30 00:54:06 -05:00
parent 44b9a1e717
commit 2c55824920
4 changed files with 13 additions and 19 deletions

View File

@ -22,11 +22,10 @@ type Backend interface {
NewWindow (width, height int) (window Window, err error) NewWindow (width, height int) (window Window, err error)
// Copy puts data into the clipboard. // Copy puts data into the clipboard.
Copy (data Data) Copy (Data)
// Paste returns the data currently in the clipboard. This method may // Paste returns the data currently in the clipboard.
// return nil. Paste (accept []Mime) (Data)
Paste () (data Data)
} }
// BackendFactory represents a function capable of constructing a backend // BackendFactory represents a function capable of constructing a backend

View File

@ -88,7 +88,7 @@ func (backend *Backend) Copy (data tomo.Data) {
// Paste returns the data currently in the clipboard. This method may // Paste returns the data currently in the clipboard. This method may
// return nil. This method is not yet implemented and will do nothing! // return nil. This method is not yet implemented and will do nothing!
func (backend *Backend) Paste () (data tomo.Data) { func (backend *Backend) Paste (accept []tomo.Mime) (data tomo.Data) {
backend.assert() backend.assert()
// TODO // TODO
return return

19
data.go
View File

@ -2,18 +2,9 @@ package tomo
import "io" import "io"
// Data represents drag-and-drop, selection, or clipboard data. // Data represents arbitrary polymorphic data that can be used for data transfer
type Data interface { // between applications.
io.Reader type Data map[Mime] io.ReadCloser
// Mime returns the MIME type of the data, such as text/plain,
// text/html, image/png, etc.
Mime () (mimeType Mime)
// Convert attempts to convert the data to another MIME type. If the
// data could not be converted, it should return an error.
Convert (to Mime) (converted Data, err error)
}
// Mime represents a MIME type. // Mime represents a MIME type.
type Mime struct { type Mime struct {
@ -23,3 +14,7 @@ type Mime struct {
// Mime { Type: "text", Subtype: "html" } // Mime { Type: "text", Subtype: "html" }
Type, Subtype string Type, Subtype string
} }
var MimePlain = Mime { "text", "plain" }
var MimeFile = Mime { "text", "uri-list" }

View File

@ -48,7 +48,7 @@ func Copy (data Data) {
// Paste returns the data currently in the clipboard. This method may // Paste returns the data currently in the clipboard. This method may
// return nil. // return nil.
func Paste () (data Data) { func Paste (accept []Mime) (Data) {
if backend == nil { panic("no backend is running") } if backend == nil { panic("no backend is running") }
return backend.Paste() return backend.Paste(accept)
} }