ui/key,ui/app: introduce ModShift modifier

And add desktop implementations.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2019-06-18 20:10:52 +02:00
parent 535f61fbeb
commit e24f19ecba
5 changed files with 20 additions and 9 deletions
+9 -9
View File
@@ -80,9 +80,6 @@ type wlConn struct {
repeatRate int
repeatDelay time.Duration
repeatStop chan struct{}
// Cached strings
_XKB_MOD_NAME_CTRL *C.char
}
type window struct {
@@ -137,6 +134,11 @@ var (
outputConfig = make(map[*C.struct_wl_output]*wlOutput)
)
var (
_XKB_MOD_NAME_CTRL = []byte("Control\x00")
_XKB_MOD_NAME_SHIFT = []byte("Shift\x00")
)
func Main() {
<-mainDone
}
@@ -779,9 +781,12 @@ func (w *window) dispatchKey(keyCode C.uint32_t) {
sym := C.xkb_state_key_get_one_sym(conn.xkbState, C.xkb_keycode_t(keyCode))
if n, ok := convertKeysym(sym); ok {
cmd := key.Chord{Name: n}
if C.xkb_state_mod_name_is_active(conn.xkbState, conn._XKB_MOD_NAME_CTRL, C.XKB_STATE_MODS_EFFECTIVE) == 1 {
if C.xkb_state_mod_name_is_active(conn.xkbState, (*C.char)(unsafe.Pointer(&_XKB_MOD_NAME_CTRL[0])), C.XKB_STATE_MODS_EFFECTIVE) == 1 {
cmd.Modifiers |= key.ModCommand
}
if C.xkb_state_mod_name_is_active(conn.xkbState, (*C.char)(unsafe.Pointer(&_XKB_MOD_NAME_SHIFT[0])), C.XKB_STATE_MODS_EFFECTIVE) == 1 {
cmd.Modifiers |= key.ModShift
}
w.w.event(cmd)
}
C.xkb_compose_state_feed(conn.xkbCompState, sym)
@@ -1072,7 +1077,6 @@ func waylandConnect() error {
c.destroy()
return errors.New("wayland: wl_compositor_create_surface failed")
}
c._XKB_MOD_NAME_CTRL = C.CString(C.XKB_MOD_NAME_CTRL)
return nil
}
@@ -1087,10 +1091,6 @@ func (c *wlConn) stopRepeat() {
func (c *wlConn) destroy() {
c.stopRepeat()
if c._XKB_MOD_NAME_CTRL != nil {
C.free(unsafe.Pointer(c._XKB_MOD_NAME_CTRL))
c._XKB_MOD_NAME_CTRL = nil
}
if c.xkbCompState != nil {
C.xkb_compose_state_unref(c.xkbCompState)
c.xkbCompState = nil