cursor position bypass desktop module.

This commit is contained in:
Miroslav Šedivý 2021-02-28 18:50:32 +01:00
parent 66618b9e62
commit 663270b0f5
6 changed files with 11 additions and 27 deletions

View File

@ -9,21 +9,8 @@ import (
"demodesk/neko/internal/types"
)
// TODO: Refactor.
var cursorListeners []func(x, y int)
func (manager *DesktopManagerCtx) Move(x, y int) {
xorg.Move(x, y)
// TODO: Refactor.
for _, listener := range cursorListeners {
listener(x, y)
}
}
// TODO: Refactor.
func (manager *DesktopManagerCtx) OnCursorPosition(listener func(x, y int)) {
cursorListeners = append(cursorListeners, listener)
}
func (manager *DesktopManagerCtx) GetCursorPosition() (int, int) {

View File

@ -48,7 +48,6 @@ type DesktopManager interface {
// xorg
Move(x, y int)
OnCursorPosition(listener func(x, y int))
GetCursorPosition() (int, int)
Scroll(x, y int)
ButtonDown(code uint32) error

View File

@ -80,7 +80,7 @@ func (manager *ImageCtx) GetCached(serial uint64) (*ImageEntry, error) {
return entry, nil
}
func (manager *ImageCtx) GetCurrent() (*ImageEntry, error) {
func (manager *ImageCtx) Get() (*ImageEntry, error) {
if manager.current != nil {
return manager.current, nil
}

View File

@ -25,14 +25,6 @@ type PositionCtx struct {
listeners map[uintptr]*func(x, y int)
}
func (manager *PositionCtx) Start() {
manager.desktop.OnCursorPosition(func(x, y int) {
for _, emit := range manager.listeners {
(*emit)(x, y)
}
})
}
func (manager *PositionCtx) Shutdown() {
manager.logger.Info().Msgf("shutting down")
@ -43,10 +35,16 @@ func (manager *PositionCtx) Shutdown() {
manager.emitMu.Unlock()
}
func (manager *PositionCtx) GetCurrent() (x, y int) {
func (manager *PositionCtx) Get() (x, y int) {
return manager.desktop.GetCursorPosition()
}
func (manager *PositionCtx) Set(x, y int) {
for _, emit := range manager.listeners {
(*emit)(x, y)
}
}
func (manager *PositionCtx) AddListener(listener *func(x, y int)) {
manager.emitMu.Lock()
defer manager.emitMu.Unlock()

View File

@ -62,6 +62,7 @@ func (manager *WebRTCManagerCtx) handle(msg webrtc.DataChannelMessage) error {
}
manager.desktop.Move(int(payload.X), int(payload.Y))
manager.curPosition.Set(int(payload.X), int(payload.Y))
case OP_SCROLL:
payload := &PayloadScroll{}
if err := binary.Read(buffer, binary.BigEndian, payload); err != nil {

View File

@ -86,7 +86,6 @@ func (manager *WebRTCManagerCtx) Start() {
Msgf("webrtc starting")
manager.curImage.Start()
manager.curPosition.Start()
}
func (manager *WebRTCManagerCtx) Shutdown() error {
@ -314,7 +313,7 @@ func (manager *WebRTCManagerCtx) CreatePeer(session types.Session, videoID strin
manager.curPosition.AddListener(&cursorPosition)
// send initial cursor image
entry, err := manager.curImage.GetCurrent()
entry, err := manager.curImage.Get()
if err == nil {
cursorImage(entry)
} else {
@ -322,7 +321,7 @@ func (manager *WebRTCManagerCtx) CreatePeer(session types.Session, videoID strin
}
// send initial cursor position
x, y := manager.curPosition.GetCurrent()
x, y := manager.curPosition.Get()
cursorPosition(x, y)
})