Archived
2
0

Merge branch 'kbd-modifier-state-sync' of github.com:m1k1o/neko into dev

This commit is contained in:
m1k1o 2020-06-20 00:57:57 +02:00
commit 4afcd9e2a9
6 changed files with 81 additions and 5 deletions

View File

@ -498,16 +498,33 @@
if (!this.hosting || this.locked) { if (!this.hosting || this.locked) {
return return
} }
this.onMousePos(e) this.onMousePos(e)
} }
onMouseEnter(e: MouseEvent) { onMouseEnter(e: MouseEvent) {
if(this.hosting) {
this.$accessor.remote.syncKeyboardModifierState({
capsLock: e.getModifierState("CapsLock"),
numLock: e.getModifierState("NumLock"),
scrollLock: e.getModifierState("ScrollLock"),
})
}
this._overlay.focus() this._overlay.focus()
this.onFocus() this.onFocus()
this.focused = true this.focused = true
} }
onMouseLeave(e: MouseEvent) { onMouseLeave(e: MouseEvent) {
if(this.hosting) {
this.$accessor.remote.setKeyboardModifierState({
capsLock: e.getModifierState("CapsLock"),
numLock: e.getModifierState("NumLock"),
scrollLock: e.getModifierState("ScrollLock"),
})
}
this.focused = false this.focused = false
} }

View File

@ -27,7 +27,7 @@ export const EVENT = {
REQUESTING: 'control/requesting', REQUESTING: 'control/requesting',
CLIPBOARD: 'control/clipboard', CLIPBOARD: 'control/clipboard',
GIVE: 'control/give', GIVE: 'control/give',
KEYBOARD: 'control/keyboard' KEYBOARD: 'control/keyboard',
}, },
CHAT: { CHAT: {
MESSAGE: 'chat/message', MESSAGE: 'chat/message',

View File

@ -122,7 +122,10 @@ export interface ControlClipboardPayload {
} }
export interface ControlKeyboardPayload { export interface ControlKeyboardPayload {
layout: string layout?: string
capsLock?: boolean
numLock?: boolean
scrollLock?: boolean
} }
/* /*

View File

@ -3,12 +3,18 @@ import { Member } from '~/neko/types'
import { EVENT } from '~/neko/events' import { EVENT } from '~/neko/events'
import { accessor } from '~/store' import { accessor } from '~/store'
const keyboardModifierState =
(capsLock: boolean, numLock: boolean, scrollLock: boolean) =>
Number(capsLock) + 2*Number(numLock) + 4*Number(scrollLock)
export const namespaced = true export const namespaced = true
export const state = () => ({ export const state = () => ({
id: '', id: '',
clipboard: '', clipboard: '',
locked: false, locked: false,
keyboardModifierState: -1,
}) })
export const getters = getterTree(state, { export const getters = getterTree(state, {
@ -36,6 +42,10 @@ export const mutations = mutationTree(state, {
state.clipboard = clipboard state.clipboard = clipboard
}, },
setKeyboardModifierState(state, { capsLock, numLock, scrollLock }) {
state.keyboardModifierState = keyboardModifierState(capsLock, numLock, scrollLock)
},
setLocked(state, locked: boolean) { setLocked(state, locked: boolean) {
state.locked = locked state.locked = locked
}, },
@ -44,6 +54,7 @@ export const mutations = mutationTree(state, {
state.id = '' state.id = ''
state.clipboard = '' state.clipboard = ''
state.locked = false state.locked = false
state.keyboardModifierState = -1
}, },
}) })
@ -140,6 +151,15 @@ export const actions = actionTree(
} }
$client.sendMessage(EVENT.CONTROL.KEYBOARD, { layout: accessor.settings.keyboard_layout }) $client.sendMessage(EVENT.CONTROL.KEYBOARD, { layout: accessor.settings.keyboard_layout })
},
syncKeyboardModifierState({ state, getters }, { capsLock, numLock, scrollLock }) {
if (state.keyboardModifierState === keyboardModifierState(capsLock, numLock, scrollLock)) {
return ;
}
accessor.remote.setKeyboardModifierState({ capsLock, numLock, scrollLock })
$client.sendMessage(EVENT.CONTROL.KEYBOARD, { capsLock, numLock, scrollLock })
} }
}, },
) )

View File

@ -48,7 +48,10 @@ type Clipboard struct {
type Keyboard struct { type Keyboard struct {
Event string `json:"event"` Event string `json:"event"`
Layout string `json:"layout"` Layout *string `json:"layout,omitempty"`
CapsLock *bool `json:"capsLock,omitempty"`
NumLock *bool `json:"numLock,omitempty"`
ScrollLock *bool `json:"scrollLock,omitempty"`
} }
type Control struct { type Control struct {

View File

@ -116,6 +116,11 @@ func (h *MessageHandler) controlClipboard(id string, session types.Session, payl
return nil return nil
} }
// TODO: Refactor
var CapsLock = false
var NumLock = false
var ScrollLock = false
func (h *MessageHandler) controlKeyboard(id string, session types.Session, payload *message.Keyboard) error { func (h *MessageHandler) controlKeyboard(id string, session types.Session, payload *message.Keyboard) error {
// check if session is host // check if session is host
if !h.sessions.IsHost(id) { if !h.sessions.IsHost(id) {
@ -123,6 +128,34 @@ func (h *MessageHandler) controlKeyboard(id string, session types.Session, paylo
return nil return nil
} }
h.remote.SetKeyboard(payload.Layout) // change layout
if payload.Layout != nil {
h.remote.SetKeyboard(*payload.Layout)
}
// set caps lock
if payload.CapsLock != nil && *payload.CapsLock != CapsLock {
h.remote.KeyDown(0xffe5)
h.remote.KeyUp(0xffe5)
CapsLock = *payload.CapsLock
}
// set num lock
if payload.NumLock != nil && *payload.NumLock != NumLock {
h.remote.KeyDown(0xff7f)
h.remote.KeyUp(0xff7f)
NumLock = *payload.NumLock
}
// set scroll lock
if payload.ScrollLock != nil && *payload.ScrollLock != ScrollLock {
h.remote.KeyDown(0xff14)
h.remote.KeyUp(0xff14)
ScrollLock = *payload.ScrollLock
}
return nil return nil
} }