github.com/secoba/wails/v2@v2.6.4/internal/frontend/dispatcher/systemcalls.go (about) 1 package dispatcher 2 3 import ( 4 "encoding/json" 5 "errors" 6 "fmt" 7 "strings" 8 9 "github.com/secoba/wails/v2/pkg/runtime" 10 11 "github.com/secoba/wails/v2/internal/frontend" 12 ) 13 14 const systemCallPrefix = ":wails:" 15 16 type position struct { 17 X int `json:"x"` 18 Y int `json:"y"` 19 } 20 21 type size struct { 22 W int `json:"w"` 23 H int `json:"h"` 24 } 25 26 func (d *Dispatcher) processSystemCall(payload callMessage, sender frontend.Frontend) (interface{}, error) { 27 // Strip prefix 28 name := strings.TrimPrefix(payload.Name, systemCallPrefix) 29 30 switch name { 31 case "WindowGetPos": 32 x, y := sender.WindowGetPosition() 33 return &position{x, y}, nil 34 case "WindowGetSize": 35 w, h := sender.WindowGetSize() 36 return &size{w, h}, nil 37 case "ScreenGetAll": 38 return sender.ScreenGetAll() 39 case "WindowIsMaximised": 40 return sender.WindowIsMaximised(), nil 41 case "WindowIsMinimised": 42 return sender.WindowIsMinimised(), nil 43 case "WindowIsNormal": 44 return sender.WindowIsNormal(), nil 45 case "WindowIsFullscreen": 46 return sender.WindowIsFullscreen(), nil 47 case "Environment": 48 return runtime.Environment(d.ctx), nil 49 case "ClipboardGetText": 50 t, err := sender.ClipboardGetText() 51 return t, err 52 case "ClipboardSetText": 53 if len(payload.Args) < 1 { 54 return false, errors.New("empty argument, cannot set clipboard") 55 } 56 var arg string 57 if err := json.Unmarshal(payload.Args[0], &arg); err != nil { 58 return false, err 59 } 60 if err := sender.ClipboardSetText(arg); err != nil { 61 return false, err 62 } 63 return true, nil 64 default: 65 return nil, fmt.Errorf("unknown systemcall message: %s", payload.Name) 66 } 67 }