diff --git a/hw/xnest/Keyboard.c b/hw/xnest/Keyboard.c index 90d0d3423..063af3b52 100644 --- a/hw/xnest/Keyboard.c +++ b/hw/xnest/Keyboard.c @@ -81,7 +81,7 @@ xnestChangeKeyboardControl(DeviceIntPtr pDev, KeybdCtrl * ctrl) { #if 0 unsigned long value_mask; - XKeyboardControl values; + XnKeyboardControl values; int i; value_mask = KBKeyClickPercent | @@ -94,7 +94,9 @@ xnestChangeKeyboardControl(DeviceIntPtr pDev, KeybdCtrl * ctrl) values.auto_repeat_mode = ctrl->autoRepeat ? AutoRepeatModeOn : AutoRepeatModeOff; - XChangeKeyboardControl(xnestDisplay, value_mask, &values); + uint32_t value_list[16]; + xnestEncodeKeyboardControl(values, value_mask, value_list); + xcb_change_keyboard_control(xnestUpstreamConn(), value_mask, value_list); /* value_mask = KBKey | KBAutoRepeatMode; @@ -107,7 +109,9 @@ xnestChangeKeyboardControl(DeviceIntPtr pDev, KeybdCtrl * ctrl) values.led = i; values.led_mode = (ctrl->leds & (1 << (i - 1))) ? LedModeOn : LedModeOff; - XChangeKeyboardControl(xnestDisplay, value_mask, &values); + + xnestEncodeKeyboardControl(values, value_mask, value_list); + xcb_change_keyboard_control(xnestUpstreamConn(), value_mask, value_list); } #endif } diff --git a/hw/xnest/xcb.c b/hw/xnest/xcb.c index 8f526ddc4..f9c1c065a 100644 --- a/hw/xnest/xcb.c +++ b/hw/xnest/xcb.c @@ -88,3 +88,30 @@ void xnest_configure_window(xcb_connection_t *conn, uint32_t window, xcb_configure_window(conn, window, mask, value_list); } } + +void xnestEncodeKeyboardControl(XnKeyboardControl ctrl, long mask, uint32_t *value) +{ + if (mask & KBKeyClickPercent) + *value++ = ctrl.key_click_percent; + + if (mask & KBBellPercent) + *value++ = ctrl.bell_percent; + + if (mask & KBBellPitch) + *value++ = ctrl.bell_pitch; + + if (mask & KBBellDuration) + *value++ = ctrl.bell_duration; + + if (mask & KBLed) + *value++ = ctrl.led; + + if (mask & KBLedMode) + *value++ = ctrl.led_mode; + + if (mask & KBKey) + *value++ = ctrl.key; + + if (mask & KBAutoRepeatMode) + *value++ = ctrl.auto_repeat_mode; +} diff --git a/hw/xnest/xnest-xcb.h b/hw/xnest/xnest-xcb.h index 139f2fe83..28e0afcde 100644 --- a/hw/xnest/xnest-xcb.h +++ b/hw/xnest/xnest-xcb.h @@ -52,4 +52,17 @@ typedef struct { void xnest_configure_window(xcb_connection_t *conn, uint32_t window, uint32_t mask, XnWindowChanges values); +typedef struct { + int key_click_percent; + int bell_percent; + int bell_pitch; + int bell_duration; + int led; + int led_mode; + int key; + int auto_repeat_mode; +} XnKeyboardControl; + +void xnestEncodeKeyboardControl(XnKeyboardControl ctrl, long mask, uint32_t *value); + #endif /* __XNEST__XCB_H */