mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-03 06:01:52 +08:00
69 lines
1.5 KiB
Go
69 lines
1.5 KiB
Go
package dispatcher
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"github.com/wailsapp/wails/v2/pkg/runtime"
|
|
"strings"
|
|
|
|
"github.com/wailsapp/wails/v2/internal/frontend"
|
|
)
|
|
|
|
const systemCallPrefix = ":wails:"
|
|
|
|
type position struct {
|
|
X int `json:"x"`
|
|
Y int `json:"y"`
|
|
}
|
|
|
|
type size struct {
|
|
W int `json:"w"`
|
|
H int `json:"h"`
|
|
}
|
|
|
|
func (d *Dispatcher) processSystemCall(payload callMessage, sender frontend.Frontend) (interface{}, error) {
|
|
|
|
// Strip prefix
|
|
name := strings.TrimPrefix(payload.Name, systemCallPrefix)
|
|
|
|
switch name {
|
|
case "WindowGetPos":
|
|
x, y := sender.WindowGetPosition()
|
|
return &position{x, y}, nil
|
|
case "WindowGetSize":
|
|
w, h := sender.WindowGetSize()
|
|
return &size{w, h}, nil
|
|
case "ScreenGetAll":
|
|
return sender.ScreenGetAll()
|
|
case "WindowIsMaximised":
|
|
return sender.WindowIsMaximised(), nil
|
|
case "WindowIsMinimised":
|
|
return sender.WindowIsMinimised(), nil
|
|
case "WindowIsNormal":
|
|
return sender.WindowIsNormal(), nil
|
|
case "WindowIsFullscreen":
|
|
return sender.WindowIsFullscreen(), nil
|
|
case "Environment":
|
|
return runtime.Environment(d.ctx), nil
|
|
case "ClipboardGetText":
|
|
t, err := sender.ClipboardGetText()
|
|
return t, err
|
|
case "ClipboardSetText":
|
|
if len(payload.Args) < 1 {
|
|
return false, errors.New("empty argument, cannot set clipboard")
|
|
}
|
|
var arg string
|
|
if err := json.Unmarshal(payload.Args[0], &arg); err != nil {
|
|
return false, err
|
|
}
|
|
if err := sender.ClipboardSetText(arg); err != nil {
|
|
return false, err
|
|
}
|
|
return true, nil
|
|
default:
|
|
return nil, fmt.Errorf("unknown systemcall message: %s", payload.Name)
|
|
}
|
|
|
|
}
|