diff --git a/internal/types/event/events.go b/internal/types/event/events.go index 35ec3534..74b43f80 100644 --- a/internal/types/event/events.go +++ b/internal/types/event/events.go @@ -37,6 +37,7 @@ const ( CONTROL_KEYDOWN = "control/keydown" CONTROL_KEYUP = "control/keyup" // actions + CONTROL_CUT = "control/cut" CONTROL_COPY = "control/copy" CONTROL_PASTE = "control/paste" CONTROL_SELECT_ALL = "control/select_all" diff --git a/internal/websocket/handler/control.go b/internal/websocket/handler/control.go index 1413d165..3f56edae 100644 --- a/internal/websocket/handler/control.go +++ b/internal/websocket/handler/control.go @@ -83,6 +83,14 @@ func (h *MessageHandlerCtx) controlKeyUp(session types.Session, payload *message return h.desktop.KeyUp(payload.Keysym) } +func (h *MessageHandlerCtx) controlCut(session types.Session) error { + if err := h.controlRequest(session); err != nil && !errors.Is(err, ErrIsAlreadyTheHost) { + return err + } + + return h.desktop.KeyPress(xorg.XK_Control_L, xorg.XK_x) +} + func (h *MessageHandlerCtx) controlCopy(session types.Session) error { if err := h.controlRequest(session); err != nil && !errors.Is(err, ErrIsAlreadyTheHost) { return err diff --git a/internal/websocket/handler/handler.go b/internal/websocket/handler/handler.go index a98e7867..02469ed3 100644 --- a/internal/websocket/handler/handler.go +++ b/internal/websocket/handler/handler.go @@ -92,6 +92,8 @@ func (h *MessageHandlerCtx) Message(session types.Session, data types.WebSocketM err = utils.Unmarshal(payload, data.Payload, func() error { return h.controlKeyUp(session, payload) }) + case event.CONTROL_CUT: + err = h.controlCut(session) case event.CONTROL_COPY: err = h.controlCopy(session) case event.CONTROL_PASTE: