Register keys for keypress only when needed
there seems to be an issue that with too many registered events some window manager cannot recognize the device as input device with systemd 247. PixlOne#166
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user