@ -43,12 +43,7 @@ InputDevice::InputDevice(const char* name)
device = libevdev_new ( ) ;
libevdev_set_name ( device , name ) ;
///TODO: Is it really a good idea to enable all events?
libevdev_enable_event_type ( device , EV_KEY ) ;
// KEY_ROTATE_LOCK_TOGGLE is the highest key mapped by
// /usr/share/X11/xkb/keycodes/evdev
for ( unsigned int i = 0 ; i < = KEY_ROTATE_LOCK_TOGGLE ; i + + )
libevdev_enable_event_code ( device , EV_KEY , i , nullptr ) ;
libevdev_enable_event_type ( device , EV_REL ) ;
for ( unsigned int i = 0 ; i < REL_CNT ; i + + )
libevdev_enable_event_code ( device , EV_REL , i , nullptr ) ;
@ -68,6 +63,18 @@ InputDevice::~InputDevice()
libevdev_free ( device ) ;
}
void InputDevice : : registerKey ( uint code )
{
libevdev_enable_event_code ( device , EV_KEY , code , nullptr ) ;
int err = libevdev_uinput_create_from_device ( device ,
LIBEVDEV_UINPUT_OPEN_MANAGED , & ui_device ) ;
if ( err ! = 0 ) {
libevdev_free ( device ) ;
throw std : : system_error ( - err , std : : generic_category ( ) ) ;
}
}
void InputDevice : : moveAxis ( uint axis , int movement )
{
_sendEvent ( EV_REL , axis , movement ) ;
@ -123,4 +130,4 @@ void InputDevice::_sendEvent(uint type, uint code, int value)
{
libevdev_uinput_write_event ( ui_device , type , code , value ) ;
libevdev_uinput_write_event ( ui_device , EV_SYN , SYN_REPORT , 0 ) ;
}
}