add button events to control WebSocket.

This commit is contained in:
Miroslav Šedivý 2022-07-23 00:22:26 +02:00
parent f4a4e0152e
commit 7d5ec0190a
6 changed files with 57 additions and 2 deletions

View File

@ -38,6 +38,13 @@ func (manager *DesktopManagerCtx) KeyUp(code uint32) error {
return xorg.KeyUp(code) return xorg.KeyUp(code)
} }
func (manager *DesktopManagerCtx) ButtonPress(code uint32) error {
xorg.ResetKeys()
defer xorg.ResetKeys()
return xorg.ButtonDown(code)
}
func (manager *DesktopManagerCtx) KeyPress(codes ...uint32) error { func (manager *DesktopManagerCtx) KeyPress(codes ...uint32) error {
xorg.ResetKeys() xorg.ResetKeys()
defer xorg.ResetKeys() defer xorg.ResetKeys()

View File

@ -79,6 +79,30 @@ func (h *MessageHandlerCtx) controlScroll(session types.Session, payload *messag
return nil return nil
} }
func (h *MessageHandlerCtx) controlButtonPress(session types.Session, payload *message.ControlButton) error {
if err := h.controlRequest(session); err != nil && !errors.Is(err, ErrIsAlreadyTheHost) {
return err
}
return h.desktop.ButtonPress(payload.Code)
}
func (h *MessageHandlerCtx) controlButtonDown(session types.Session, payload *message.ControlButton) error {
if err := h.controlRequest(session); err != nil && !errors.Is(err, ErrIsAlreadyTheHost) {
return err
}
return h.desktop.ButtonDown(payload.Code)
}
func (h *MessageHandlerCtx) controlButtonUp(session types.Session, payload *message.ControlButton) error {
if err := h.controlRequest(session); err != nil && !errors.Is(err, ErrIsAlreadyTheHost) {
return err
}
return h.desktop.ButtonUp(payload.Code)
}
func (h *MessageHandlerCtx) controlKeyPress(session types.Session, payload *message.ControlKey) error { func (h *MessageHandlerCtx) controlKeyPress(session types.Session, payload *message.ControlKey) error {
if err := h.controlRequest(session); err != nil && !errors.Is(err, ErrIsAlreadyTheHost) { if err := h.controlRequest(session); err != nil && !errors.Is(err, ErrIsAlreadyTheHost) {
return err return err

View File

@ -87,6 +87,21 @@ func (h *MessageHandlerCtx) Message(session types.Session, data types.WebSocketM
err = utils.Unmarshal(payload, data.Payload, func() error { err = utils.Unmarshal(payload, data.Payload, func() error {
return h.controlScroll(session, payload) return h.controlScroll(session, payload)
}) })
case event.CONTROL_BUTTONPRESS:
payload := &message.ControlButton{}
err = utils.Unmarshal(payload, data.Payload, func() error {
return h.controlButtonPress(session, payload)
})
case event.CONTROL_BUTTONDOWN:
payload := &message.ControlButton{}
err = utils.Unmarshal(payload, data.Payload, func() error {
return h.controlButtonDown(session, payload)
})
case event.CONTROL_BUTTONUP:
payload := &message.ControlButton{}
err = utils.Unmarshal(payload, data.Payload, func() error {
return h.controlButtonUp(session, payload)
})
case event.CONTROL_KEYPRESS: case event.CONTROL_KEYPRESS:
payload := &message.ControlKey{} payload := &message.ControlKey{}
err = utils.Unmarshal(payload, data.Payload, func() error { err = utils.Unmarshal(payload, data.Payload, func() error {
@ -102,6 +117,7 @@ func (h *MessageHandlerCtx) Message(session types.Session, data types.WebSocketM
err = utils.Unmarshal(payload, data.Payload, func() error { err = utils.Unmarshal(payload, data.Payload, func() error {
return h.controlKeyUp(session, payload) return h.controlKeyUp(session, payload)
}) })
// actions
case event.CONTROL_CUT: case event.CONTROL_CUT:
err = h.controlCut(session) err = h.controlCut(session)
case event.CONTROL_COPY: case event.CONTROL_COPY:

View File

@ -54,6 +54,7 @@ type DesktopManager interface {
KeyDown(code uint32) error KeyDown(code uint32) error
ButtonUp(code uint32) error ButtonUp(code uint32) error
KeyUp(code uint32) error KeyUp(code uint32) error
ButtonPress(code uint32) error
KeyPress(codes ...uint32) error KeyPress(codes ...uint32) error
ResetKeys() ResetKeys()
ScreenConfigurations() map[int]ScreenConfiguration ScreenConfigurations() map[int]ScreenConfiguration

View File

@ -32,8 +32,11 @@ const (
CONTROL_RELEASE = "control/release" CONTROL_RELEASE = "control/release"
CONTROL_REQUEST = "control/request" CONTROL_REQUEST = "control/request"
// mouse // mouse
CONTROL_MOVE = "control/move" CONTROL_MOVE = "control/move"
CONTROL_SCROLL = "control/scroll" CONTROL_SCROLL = "control/scroll"
CONTROL_BUTTONPRESS = "control/buttonpress"
CONTROL_BUTTONDOWN = "control/buttondown"
CONTROL_BUTTONUP = "control/buttonup"
// keyboard // keyboard
CONTROL_KEYPRESS = "control/keypress" CONTROL_KEYPRESS = "control/keypress"
CONTROL_KEYDOWN = "control/keydown" CONTROL_KEYDOWN = "control/keydown"

View File

@ -106,6 +106,10 @@ type ControlPos struct {
Y int `json:"y"` Y int `json:"y"`
} }
type ControlButton struct {
Code uint32 `json:"code"`
}
type ControlKey struct { type ControlKey struct {
Keysym uint32 `json:"keysym"` Keysym uint32 `json:"keysym"`
} }