mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2026-03-22 05:40:39 +01:00
evdev: replace get_key_type with evdev_usage_is_button/key
Makes this easier to use from other areas and we never cared about the key type NONE anyway. Part-of: <https://gitlab.freedesktop.org/libinput/libinput/-/merge_requests/1230>
This commit is contained in:
parent
9b28e7fd35
commit
6f403a0cc9
4 changed files with 74 additions and 83 deletions
|
|
@ -491,7 +491,7 @@ fallback_debounce_handle_state(struct fallback_dispatch *dispatch,
|
|||
for (evdev_usage_t usage = evdev_usage_from(EVDEV_KEY_RESERVED);
|
||||
evdev_usage_le(usage, EVDEV_KEY_MAX);
|
||||
usage = evdev_usage_next(usage)) {
|
||||
if (get_key_type(usage) != KEY_TYPE_BUTTON)
|
||||
if (!evdev_usage_is_button(usage))
|
||||
continue;
|
||||
|
||||
if (hw_key_has_changed(dispatch, usage))
|
||||
|
|
|
|||
|
|
@ -472,8 +472,6 @@ fallback_process_key(struct fallback_dispatch *dispatch,
|
|||
struct evdev_device *device,
|
||||
struct evdev_event *e, uint64_t time)
|
||||
{
|
||||
enum key_type type;
|
||||
|
||||
/* ignore kernel key repeat */
|
||||
if (e->value == 2)
|
||||
return;
|
||||
|
|
@ -487,40 +485,29 @@ fallback_process_key(struct fallback_dispatch *dispatch,
|
|||
return;
|
||||
}
|
||||
|
||||
type = get_key_type(e->usage);
|
||||
bool is_button = evdev_usage_is_button(e->usage);
|
||||
bool is_key = evdev_usage_is_key(e->usage);
|
||||
|
||||
/* Ignore key release events from the kernel for keys that libinput
|
||||
* never got a pressed event for or key presses for keys that we
|
||||
* think are still down */
|
||||
switch (type) {
|
||||
case KEY_TYPE_NONE:
|
||||
break;
|
||||
case KEY_TYPE_KEY:
|
||||
case KEY_TYPE_BUTTON:
|
||||
if (is_button || is_key) {
|
||||
if ((e->value && hw_is_key_down(dispatch, e->usage)) ||
|
||||
(e->value == 0 && !hw_is_key_down(dispatch, e->usage)))
|
||||
return;
|
||||
|
||||
dispatch->pending_event |= EVDEV_KEY;
|
||||
break;
|
||||
}
|
||||
|
||||
hw_set_key_down(dispatch, e->usage, e->value);
|
||||
|
||||
switch (type) {
|
||||
case KEY_TYPE_NONE:
|
||||
break;
|
||||
case KEY_TYPE_KEY:
|
||||
fallback_keyboard_notify_key(
|
||||
dispatch,
|
||||
device,
|
||||
time,
|
||||
e->usage,
|
||||
e->value ? LIBINPUT_KEY_STATE_PRESSED :
|
||||
LIBINPUT_KEY_STATE_RELEASED);
|
||||
break;
|
||||
case KEY_TYPE_BUTTON:
|
||||
break;
|
||||
if (is_key) {
|
||||
fallback_keyboard_notify_key(dispatch,
|
||||
device,
|
||||
time,
|
||||
e->usage,
|
||||
e->value ? LIBINPUT_KEY_STATE_PRESSED :
|
||||
LIBINPUT_KEY_STATE_RELEASED);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -965,7 +952,7 @@ fallback_handle_state(struct fallback_dispatch *dispatch,
|
|||
if (!hw_key_has_changed(dispatch, usage))
|
||||
continue;
|
||||
|
||||
if (get_key_type(usage) == KEY_TYPE_BUTTON) {
|
||||
if (evdev_usage_is_button(usage)) {
|
||||
want_debounce = true;
|
||||
break;
|
||||
}
|
||||
|
|
@ -1073,18 +1060,13 @@ release_pressed_keys(struct fallback_dispatch *dispatch,
|
|||
count);
|
||||
}
|
||||
|
||||
switch (get_key_type(usage)) {
|
||||
case KEY_TYPE_NONE:
|
||||
break;
|
||||
case KEY_TYPE_KEY:
|
||||
fallback_keyboard_notify_key(
|
||||
dispatch,
|
||||
device,
|
||||
time,
|
||||
usage,
|
||||
LIBINPUT_KEY_STATE_RELEASED);
|
||||
break;
|
||||
case KEY_TYPE_BUTTON:
|
||||
if (evdev_usage_is_key(usage)) {
|
||||
fallback_keyboard_notify_key(dispatch,
|
||||
device,
|
||||
time,
|
||||
usage,
|
||||
LIBINPUT_KEY_STATE_RELEASED);
|
||||
} else if (evdev_usage_is_button(usage)) {
|
||||
/* Note: the left-handed configuration is nonzero for
|
||||
* the mapped button (not the physical button), in
|
||||
* get_key_down_count(). We must not map this to left-handed
|
||||
|
|
@ -1095,7 +1077,6 @@ release_pressed_keys(struct fallback_dispatch *dispatch,
|
|||
time,
|
||||
usage,
|
||||
LIBINPUT_BUTTON_STATE_RELEASED);
|
||||
break;
|
||||
}
|
||||
|
||||
count = get_key_down_count(device, usage);
|
||||
|
|
|
|||
|
|
@ -184,51 +184,6 @@ fallback_dispatch(struct evdev_dispatch *dispatch)
|
|||
return container_of(dispatch, struct fallback_dispatch, base);
|
||||
}
|
||||
|
||||
enum key_type {
|
||||
KEY_TYPE_NONE,
|
||||
KEY_TYPE_KEY,
|
||||
KEY_TYPE_BUTTON,
|
||||
};
|
||||
|
||||
static inline enum key_type
|
||||
get_key_type(evdev_usage_t evdev_usage)
|
||||
{
|
||||
switch (evdev_usage_enum(evdev_usage)) {
|
||||
case EVDEV_BTN_TOOL_PEN:
|
||||
case EVDEV_BTN_TOOL_RUBBER:
|
||||
case EVDEV_BTN_TOOL_BRUSH:
|
||||
case EVDEV_BTN_TOOL_PENCIL:
|
||||
case EVDEV_BTN_TOOL_AIRBRUSH:
|
||||
case EVDEV_BTN_TOOL_MOUSE:
|
||||
case EVDEV_BTN_TOOL_LENS:
|
||||
case EVDEV_BTN_TOOL_QUINTTAP:
|
||||
case EVDEV_BTN_TOOL_DOUBLETAP:
|
||||
case EVDEV_BTN_TOOL_TRIPLETAP:
|
||||
case EVDEV_BTN_TOOL_QUADTAP:
|
||||
case EVDEV_BTN_TOOL_FINGER:
|
||||
case EVDEV_BTN_TOUCH:
|
||||
return KEY_TYPE_NONE;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
enum evdev_usage usage = evdev_usage_enum(evdev_usage);
|
||||
if (usage >= EVDEV_KEY_ESC && usage <= EVDEV_KEY_MICMUTE)
|
||||
return KEY_TYPE_KEY;
|
||||
if (usage >= EVDEV_BTN_MISC && usage <= EVDEV_BTN_GEAR_UP)
|
||||
return KEY_TYPE_BUTTON;
|
||||
if (usage >= EVDEV_KEY_OK && usage <= EVDEV_KEY_LIGHTS_TOGGLE)
|
||||
return KEY_TYPE_KEY;
|
||||
if (usage >= EVDEV_BTN_DPAD_UP && usage <= EVDEV_BTN_DPAD_RIGHT)
|
||||
return KEY_TYPE_BUTTON;
|
||||
if (usage >= EVDEV_KEY_ALS_TOGGLE && usage < EVDEV_BTN_TRIGGER_HAPPY)
|
||||
return KEY_TYPE_KEY;
|
||||
if (usage >= EVDEV_BTN_TRIGGER_HAPPY && usage <= EVDEV_BTN_TRIGGER_HAPPY40)
|
||||
return KEY_TYPE_BUTTON;
|
||||
|
||||
return KEY_TYPE_NONE;
|
||||
}
|
||||
|
||||
static inline void
|
||||
hw_set_key_down(struct fallback_dispatch *dispatch, evdev_usage_t usage, int pressed)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -88,6 +88,8 @@ enum evdev_usage {
|
|||
EVDEV_BTN_TOOL_QUADTAP = _evbit(EV_KEY, BTN_TOOL_QUADTAP),
|
||||
EVDEV_BTN_TOOL_FINGER = _evbit(EV_KEY, BTN_TOOL_FINGER),
|
||||
EVDEV_BTN_MISC = _evbit(EV_KEY, BTN_MISC),
|
||||
EVDEV_BTN_DIGI = _evbit(EV_KEY, BTN_DIGI),
|
||||
EVDEV_BTN_WHEEL = _evbit(EV_KEY, BTN_WHEEL),
|
||||
EVDEV_BTN_GEAR_UP = _evbit(EV_KEY, BTN_GEAR_UP),
|
||||
EVDEV_BTN_DPAD_UP = _evbit(EV_KEY, BTN_DPAD_UP),
|
||||
EVDEV_BTN_DPAD_RIGHT = _evbit(EV_KEY, BTN_DPAD_RIGHT),
|
||||
|
|
@ -197,6 +199,59 @@ evdev_usage_next(evdev_usage_t usage)
|
|||
return evdev_usage_from_code(evdev_usage_type(usage), evdev_usage_code(usage) + 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the usage is a real button, i.e. BTN_FOO
|
||||
* excluding the various BTN_TOOL and BTN_TOUCH usages.
|
||||
*/
|
||||
static inline bool
|
||||
evdev_usage_is_button(evdev_usage_t usage)
|
||||
{
|
||||
switch (evdev_usage_as_uint32_t(usage)) {
|
||||
case EVDEV_BTN_TOOL_PEN:
|
||||
case EVDEV_BTN_TOOL_RUBBER:
|
||||
case EVDEV_BTN_TOOL_BRUSH:
|
||||
case EVDEV_BTN_TOOL_PENCIL:
|
||||
case EVDEV_BTN_TOOL_AIRBRUSH:
|
||||
case EVDEV_BTN_TOOL_MOUSE:
|
||||
case EVDEV_BTN_TOOL_LENS:
|
||||
case EVDEV_BTN_TOOL_QUINTTAP:
|
||||
case EVDEV_BTN_TOOL_DOUBLETAP:
|
||||
case EVDEV_BTN_TOOL_TRIPLETAP:
|
||||
case EVDEV_BTN_TOOL_QUADTAP:
|
||||
case EVDEV_BTN_TOOL_FINGER:
|
||||
case EVDEV_BTN_TOUCH:
|
||||
return false;
|
||||
case BTN_STYLUS:
|
||||
case BTN_STYLUS2:
|
||||
case BTN_STYLUS3:
|
||||
return true;
|
||||
case EVDEV_BTN_MISC ... EVDEV_BTN_DIGI - 1:
|
||||
case EVDEV_BTN_WHEEL ... EVDEV_BTN_GEAR_UP:
|
||||
case EVDEV_BTN_DPAD_UP ... EVDEV_BTN_DPAD_RIGHT:
|
||||
case EVDEV_BTN_TRIGGER_HAPPY ... EVDEV_BTN_TRIGGER_HAPPY40:
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the usage is a real key, i.e. KEY_FOO
|
||||
* excluding the various BTN_ ranges
|
||||
*/
|
||||
static inline bool
|
||||
evdev_usage_is_key(evdev_usage_t usage)
|
||||
{
|
||||
switch (evdev_usage_as_uint32_t(usage)) {
|
||||
case EVDEV_KEY_ESC ... EVDEV_KEY_MICMUTE:
|
||||
case EVDEV_KEY_OK ... EVDEV_KEY_LIGHTS_TOGGLE:
|
||||
case EVDEV_KEY_ALS_TOGGLE ... EVDEV_BTN_TRIGGER_HAPPY - 1:
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
struct evdev_event {
|
||||
/* this may be a value outside the known usages above but it's just an int */
|
||||
evdev_usage_t usage;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue