use defer for cleanup
This commit is contained in:
parent
26337f3a0e
commit
a9230ceea4
1 changed files with 9 additions and 7 deletions
|
|
@ -76,6 +76,7 @@ func (p *x11Plugin) KeyboardText(text string) error {
|
||||||
if keysyms == nil {
|
if keysyms == nil {
|
||||||
return errors.New("failed to get keyboard mapping")
|
return errors.New("failed to get keyboard mapping")
|
||||||
}
|
}
|
||||||
|
defer C.XFree(unsafe.Pointer(keysyms))
|
||||||
emptyKeycode := C.KeyCode(0)
|
emptyKeycode := C.KeyCode(0)
|
||||||
keycodes:
|
keycodes:
|
||||||
for keycode := C.KeyCode(minKeycodes); keycode <= C.KeyCode(maxKeycodes); keycode++ {
|
for keycode := C.KeyCode(minKeycodes); keycode <= C.KeyCode(maxKeycodes); keycode++ {
|
||||||
|
|
@ -91,11 +92,18 @@ keycodes:
|
||||||
emptyKeycode = keycode
|
emptyKeycode = keycode
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
C.XFree(unsafe.Pointer(keysyms))
|
|
||||||
if emptyKeycode == 0 {
|
if emptyKeycode == 0 {
|
||||||
return errors.New("no empty keycode found")
|
return errors.New("no empty keycode found")
|
||||||
}
|
}
|
||||||
keycodeMapping := make([]C.KeySym, keysymsPerKeycode)
|
keycodeMapping := make([]C.KeySym, keysymsPerKeycode)
|
||||||
|
defer func() {
|
||||||
|
for i := range keycodeMapping {
|
||||||
|
keycodeMapping[i] = 0
|
||||||
|
}
|
||||||
|
C.XChangeKeyboardMapping(p.display, C.int(emptyKeycode), keysymsPerKeycode,
|
||||||
|
(*C.KeySym)(unsafe.Pointer(&keycodeMapping[0])), 1)
|
||||||
|
C.XFlush(p.display)
|
||||||
|
}()
|
||||||
for _, runeValue := range text {
|
for _, runeValue := range text {
|
||||||
keysym := C.KeySym(0x01000000 + runeValue)
|
keysym := C.KeySym(0x01000000 + runeValue)
|
||||||
for i := range keycodeMapping {
|
for i := range keycodeMapping {
|
||||||
|
|
@ -109,12 +117,6 @@ keycodes:
|
||||||
C.XFlush(p.display)
|
C.XFlush(p.display)
|
||||||
time.Sleep(typingDelay)
|
time.Sleep(typingDelay)
|
||||||
}
|
}
|
||||||
for i := range keycodeMapping {
|
|
||||||
keycodeMapping[i] = 0
|
|
||||||
}
|
|
||||||
C.XChangeKeyboardMapping(p.display, C.int(emptyKeycode), keysymsPerKeycode,
|
|
||||||
(*C.KeySym)(unsafe.Pointer(&keycodeMapping[0])), 1)
|
|
||||||
C.XFlush(p.display)
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue