Simplify error handling

This commit is contained in:
Unrud 2023-05-08 21:27:38 +02:00
parent 6a1a7420dc
commit 1794150285
3 changed files with 13 additions and 64 deletions

View file

@ -25,7 +25,6 @@ import (
"errors" "errors"
"fmt" "fmt"
"github.com/godbus/dbus/v5" "github.com/godbus/dbus/v5"
"sync"
) )
const ( const (
@ -45,7 +44,6 @@ type portalController struct {
bus *dbus.Conn bus *dbus.Conn
remoteDesktop dbus.BusObject remoteDesktop dbus.BusObject
sessionHandle dbus.ObjectPath sessionHandle dbus.ObjectPath
lock sync.RWMutex
} }
func init() { func init() {
@ -177,25 +175,10 @@ func getResponse(bus *dbus.Conn, object dbus.BusObject, method string,
} }
func (p *portalController) Close() error { func (p *portalController) Close() error {
p.lock.Lock() return p.bus.Close()
defer p.lock.Unlock()
if p.bus == nil {
return errors.New("dbus connection closed")
}
if err := p.bus.Close(); err != nil {
return err
}
p.bus = nil
p.remoteDesktop = nil
return nil
} }
func (p *portalController) keyboardKeys(keys []Keysym) error { func (p *portalController) keyboardKeys(keys []Keysym) error {
p.lock.RLock()
defer p.lock.RUnlock()
if p.bus == nil {
return errors.New("dbus connection closed")
}
inVardict := make(map[string]dbus.Variant) inVardict := make(map[string]dbus.Variant)
for _, keysym := range keys { for _, keysym := range keys {
for _, state := range [...]uint32{btnPressed, btnReleased} { for _, state := range [...]uint32{btnPressed, btnReleased} {
@ -231,11 +214,6 @@ func (p *portalController) KeyboardKey(key Key) error {
} }
func (p *portalController) PointerButton(button PointerButton, press bool) error { func (p *portalController) PointerButton(button PointerButton, press bool) error {
p.lock.RLock()
defer p.lock.RUnlock()
if p.bus == nil {
return errors.New("dbus connection closed")
}
var btn int32 var btn int32
switch button { switch button {
case PointerButtonLeft: case PointerButtonLeft:
@ -260,11 +238,6 @@ func (p *portalController) PointerButton(button PointerButton, press bool) error
} }
func (p *portalController) PointerMove(deltaX, deltaY int) error { func (p *portalController) PointerMove(deltaX, deltaY int) error {
p.lock.RLock()
defer p.lock.RUnlock()
if p.bus == nil {
return errors.New("dbus connection closed")
}
inVardict := make(map[string]dbus.Variant) inVardict := make(map[string]dbus.Variant)
if err := p.remoteDesktop.Call("org.freedesktop.portal.RemoteDesktop.NotifyPointerMotion", if err := p.remoteDesktop.Call("org.freedesktop.portal.RemoteDesktop.NotifyPointerMotion",
0, p.sessionHandle, inVardict, float64(deltaX), float64(deltaY)).Store(); err != nil { 0, p.sessionHandle, inVardict, float64(deltaX), float64(deltaY)).Store(); err != nil {
@ -274,11 +247,6 @@ func (p *portalController) PointerMove(deltaX, deltaY int) error {
} }
func (p *portalController) PointerScroll(deltaHorizontal, deltaVertical int, finish bool) error { func (p *portalController) PointerScroll(deltaHorizontal, deltaVertical int, finish bool) error {
p.lock.RLock()
defer p.lock.RUnlock()
if p.bus == nil {
return errors.New("dbus connection closed")
}
inVardict := make(map[string]dbus.Variant) inVardict := make(map[string]dbus.Variant)
inVardict["finish"] = dbus.MakeVariant(finish) inVardict["finish"] = dbus.MakeVariant(finish)
if err := p.remoteDesktop.Call("org.freedesktop.portal.RemoteDesktop.NotifyPointerAxis", if err := p.remoteDesktop.Call("org.freedesktop.portal.RemoteDesktop.NotifyPointerAxis",

View file

@ -74,11 +74,7 @@ func InitUinputController() (Controller, error) {
} }
func (p *uinputController) Close() error { func (p *uinputController) Close() error {
if err := p.keyboard.Close(); err != nil { return errors.Join(p.keyboard.Close(), p.mouse.Close())
p.mouse.Close()
return err
}
return p.mouse.Close()
} }
func (p *uinputController) KeyboardText(text string) error { func (p *uinputController) KeyboardText(text string) error {
@ -199,8 +195,5 @@ func (p *uinputController) PointerMove(deltaX, deltaY int) error {
} }
func (p *uinputController) PointerScroll(deltaHorizontal, deltaVertical int, finish bool) error { func (p *uinputController) PointerScroll(deltaHorizontal, deltaVertical int, finish bool) error {
if err := p.mouse.Wheel(false, int32(deltaVertical)); err != nil { return errors.Join(p.mouse.Wheel(false, int32(deltaVertical)), p.mouse.Wheel(true, int32(deltaHorizontal)))
return err
}
return p.mouse.Wheel(true, int32(deltaHorizontal))
} }

View file

@ -111,13 +111,10 @@ func (p *windowsController) sendInput(inputs []keybdInput) error {
if len(inputs) == 0 { if len(inputs) == 0 {
return nil return nil
} }
if r, _, err := sendInputProc.Call(uintptr(len(inputs)), _, _, err := sendInputProc.Call(uintptr(len(inputs)),
uintptr(unsafe.Pointer(&inputs[0])), uintptr(unsafe.Pointer(&inputs[0])), unsafe.Sizeof(inputs[0]))
unsafe.Sizeof(inputs[0])); int(r) != len(inputs) {
return err return err
} }
return nil
}
func (p *windowsController) KeyboardText(text string) error { func (p *windowsController) KeyboardText(text string) error {
inputs := make([]keybdInput, 0, len(text)*2) inputs := make([]keybdInput, 0, len(text)*2)
@ -197,12 +194,9 @@ func (p *windowsController) PointerButton(button PointerButton, press bool) erro
} else { } else {
return fmt.Errorf("unsupported pointer button: %#v", button) return fmt.Errorf("unsupported pointer button: %#v", button)
} }
if r, _, err := sendInputProc.Call(1, uintptr(unsafe.Pointer(&input)), _, _, err := sendInputProc.Call(1, uintptr(unsafe.Pointer(&input)), unsafe.Sizeof(input))
unsafe.Sizeof(input)); int(r) != 1 {
return err return err
} }
return nil
}
func (p *windowsController) PointerMove(deltaX, deltaY int) error { func (p *windowsController) PointerMove(deltaX, deltaY int) error {
input := mouseInput{ input := mouseInput{
@ -211,12 +205,9 @@ func (p *windowsController) PointerMove(deltaX, deltaY int) error {
dy: int32(deltaY), dy: int32(deltaY),
dwFlags: mouseeventfMove, dwFlags: mouseeventfMove,
} }
if r, _, err := sendInputProc.Call(1, uintptr(unsafe.Pointer(&input)), _, _, err := sendInputProc.Call(1, uintptr(unsafe.Pointer(&input)), unsafe.Sizeof(input))
unsafe.Sizeof(input)); int(r) != 1 {
return err return err
} }
return nil
}
func (p *windowsController) PointerScroll(deltaHorizontal, deltaVertical int, finish bool) error { func (p *windowsController) PointerScroll(deltaHorizontal, deltaVertical int, finish bool) error {
inputs := make([]mouseInput, 0, 2) inputs := make([]mouseInput, 0, 2)
@ -237,10 +228,7 @@ func (p *windowsController) PointerScroll(deltaHorizontal, deltaVertical int, fi
if len(inputs) == 0 { if len(inputs) == 0 {
return nil return nil
} }
if r, _, err := sendInputProc.Call(uintptr(len(inputs)), _, _, err := sendInputProc.Call(uintptr(len(inputs)),
uintptr(unsafe.Pointer(&inputs[0])), uintptr(unsafe.Pointer(&inputs[0])), unsafe.Sizeof(inputs[0]))
unsafe.Sizeof(inputs[0])); int(r) != len(inputs) {
return err return err
} }
return nil
}