use defer for cleanup

This commit is contained in:
Unrud 2018-07-31 20:18:49 +02:00
parent 26337f3a0e
commit a9230ceea4

View file

@ -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
} }