1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127package main
import (
"fyne.io/fyne"
"fyne.io/fyne/driver/desktop"
"github.com/deluan/bring"
)
// Handles keyboard events mapping between Bring and Fyne
type keyboardHandler struct {
display *VncDisplay
shift bool
caps bool
}
func (ks *keyboardHandler) TypedKey(ev *fyne.KeyEvent) {
keyName := ev.Name
k, ok := keyMap[keyName]
if !ok && len(keyName) == 1 && keyName[0] < 128 {
k = bring.KeyCode(keyName[0])
}
if k > 0 {
ks.sendKey(k, true)
ks.sendKey(k, false)
}
}
func (ks *keyboardHandler) KeyDown(ev *fyne.KeyEvent) {
ks.handleDesktopKey(ev.Name, true)
}
func (ks *keyboardHandler) KeyUp(ev *fyne.KeyEvent) {
ks.handleDesktopKey(ev.Name, false)
}
func (ks *keyboardHandler) handleDesktopKey(keyName fyne.KeyName, pressed bool) {
if keyCode, ok := desktopKeyMap[keyName]; ok {
if keyCode == bring.KeyLeftShift || keyCode == bring.KeyRightShift {
ks.shift = pressed
}
if keyCode == bring.KeyCapsLock {
ks.caps = pressed
}
ks.sendKey(keyCode, pressed)
}
}
func (ks *keyboardHandler) sendKey(key bring.KeyCode, pressed bool) {
if key >= 'A' && key <= 'Z' {
if !ks.shift && !ks.caps {
key = key + 32
}
}
//_ = ks.display.Client.SendKey(key, pressed)
}
func (ks *keyboardHandler) Focused() bool {
return true
}
func (ks *keyboardHandler) FocusGained() {
}
func (ks *keyboardHandler) FocusLost() {
}
func (ks *keyboardHandler) TypedRune(ch rune) {
}
var (
keyMap map[fyne.KeyName]bring.KeyCode
desktopKeyMap map[fyne.KeyName]bring.KeyCode
)
func init() {
desktopKeyMap = map[fyne.KeyName]bring.KeyCode{
desktop.KeyAltLeft: bring.KeyLeftAlt,
desktop.KeyAltRight: bring.KeyRightAlt,
desktop.KeyControlLeft: bring.KeyLeftControl,
desktop.KeyControlRight: bring.KeyRightControl,
desktop.KeyShiftLeft: bring.KeyLeftShift,
desktop.KeyShiftRight: bring.KeyRightShift,
desktop.KeySuperLeft: bring.KeySuper,
desktop.KeySuperRight: bring.KeySuper,
//: bring.KeyCapsLock,
}
keyMap = map[fyne.KeyName]bring.KeyCode{
fyne.KeySpace: bring.KeyCode(32),
fyne.KeyBackspace: bring.KeyBackspace,
fyne.KeyDelete: bring.KeyDelete,
fyne.KeyDown: bring.KeyDown,
fyne.KeyEnd: bring.KeyEnd,
fyne.KeyEnter: bring.KeyEnter,
fyne.KeyReturn: bring.KeyEnter,
fyne.KeyEscape: bring.KeyEscape,
fyne.KeyF1: bring.KeyF1,
fyne.KeyF2: bring.KeyF2,
fyne.KeyF3: bring.KeyF3,
fyne.KeyF4: bring.KeyF4,
fyne.KeyF5: bring.KeyF5,
fyne.KeyF6: bring.KeyF6,
fyne.KeyF7: bring.KeyF7,
fyne.KeyF8: bring.KeyF8,
fyne.KeyF9: bring.KeyF9,
fyne.KeyF10: bring.KeyF10,
fyne.KeyF11: bring.KeyF11,
fyne.KeyF12: bring.KeyF12,
fyne.KeyHome: bring.KeyHome,
fyne.KeyInsert: bring.KeyInsert,
fyne.KeyLeft: bring.KeyLeft,
fyne.KeyPageDown: bring.KeyPageDown,
fyne.KeyPageUp: bring.KeyPageUp,
fyne.KeyRight: bring.KeyRight,
fyne.KeyTab: bring.KeyTab,
fyne.KeyUp: bring.KeyUp,
//: bring.KeyPause,
//: bring.KeyPrintScreen,
//: bring.KeyNumLock,
//: bring.KeyMeta,
//: bring.KeyWin,
}
}
// Make sure all necessary interfaces are implemented
var _ desktop.Keyable = (*keyboardHandler)(nil)