/* For Apple touchpads, always use its internal keyboard */
if (vendor_tp == VENDOR_ID_APPLE) {
return vendor_kbd == vendor_tp &&
- keyboard->model_flags &
- EVDEV_MODEL_APPLE_INTERNAL_KEYBOARD;
+ keyboard->tags & EVDEV_TAG_INTERNAL_KEYBOARD;
}
/* everything else we don't really know, so we have to assume
device->tags |= EVDEV_TAG_TRACKPOINT;
}
+static inline void
+evdev_tag_keyboard_internal(struct evdev_device *device)
+{
+ device->tags |= EVDEV_TAG_INTERNAL_KEYBOARD;
+ device->tags &= ~EVDEV_TAG_EXTERNAL_KEYBOARD;
+}
+
+static inline void
+evdev_tag_keyboard_external(struct evdev_device *device)
+{
+ device->tags |= EVDEV_TAG_EXTERNAL_KEYBOARD;
+ device->tags &= ~EVDEV_TAG_INTERNAL_KEYBOARD;
+}
+
static void
evdev_tag_keyboard(struct evdev_device *device,
struct udev_device *udev_device)
{
+ const char *prop;
int code;
if (!libevdev_has_event_type(device->evdev, EV_KEY))
return;
}
+ /* This should eventually become ID_INPUT_KEYBOARD_INTEGRATION */
+ prop = udev_device_get_property_value(udev_device,
+ "LIBINPUT_ATTR_KEYBOARD_INTEGRATION");
+ if (prop) {
+ if (streq(prop, "internal")) {
+ evdev_tag_keyboard_internal(device);
+ } else if (streq(prop, "external")) {
+ evdev_tag_keyboard_external(device);
+ } else {
+ evdev_log_info(device,
+ "tagged with unknown value %s\n",
+ prop);
+ }
+ }
+
device->tags |= EVDEV_TAG_KEYBOARD;
}
MODEL(ALPS_TOUCHPAD),
MODEL(SYNAPTICS_SERIAL_TOUCHPAD),
MODEL(JUMPING_SEMI_MT),
- MODEL(APPLE_INTERNAL_KEYBOARD),
MODEL(CYBORG_RAT),
MODEL(HP_STREAM11_TOUCHPAD),
MODEL(LENOVO_T450_TOUCHPAD),
EVDEV_TAG_TRACKPOINT = (1 << 3),
EVDEV_TAG_KEYBOARD = (1 << 4),
EVDEV_TAG_LID_SWITCH = (1 << 5),
+ EVDEV_TAG_INTERNAL_KEYBOARD = (1 << 6),
+ EVDEV_TAG_EXTERNAL_KEYBOARD = (1 << 7),
};
enum evdev_middlebutton_state {
EVDEV_MODEL_SYNAPTICS_SERIAL_TOUCHPAD = (1 << 9),
EVDEV_MODEL_JUMPING_SEMI_MT = (1 << 10),
EVDEV_MODEL_LENOVO_X220_TOUCHPAD_FW81 = (1 << 12),
- EVDEV_MODEL_APPLE_INTERNAL_KEYBOARD = (1 << 13),
EVDEV_MODEL_CYBORG_RAT = (1 << 14),
EVDEV_MODEL_HP_STREAM11_TOUCHPAD = (1 << 16),
EVDEV_MODEL_LENOVO_T450_TOUCHPAD= (1 << 17),
libinput:name:*Lid Switch*:dmi:*:ct9:*
LIBINPUT_ATTR_LID_SWITCH_RELIABILITY=reliable
+##########################################
+# Serial keyboards are internal
+##########################################
+libinput:keyboard:input:b0011v*
+ LIBINPUT_ATTR_KEYBOARD_INTEGRATION=internal
+
##########################################
# ALPS
##########################################
LIBINPUT_ATTR_SIZE_HINT=104x75
libinput:name:*Apple Inc. Apple Internal Keyboard*:dmi:*
- LIBINPUT_MODEL_APPLE_INTERNAL_KEYBOARD=1
+ LIBINPUT_ATTR_KEYBOARD_INTEGRATION=internal
libinput:mouse:input:b0005v05ACp030D*
LIBINPUT_MODEL_APPLE_MAGICMOUSE=1
libinput:name:*Lid Switch*:dmi:*svnMicrosoftCorporation:pnSurface3:*
LIBINPUT_ATTR_LID_SWITCH_RELIABILITY=write_open
+# Surface 3 Type Cover keyboard
+libinput:name:*Microsoft Surface Type Cover Keyboard*:dmi:*svnMicrosoftCorporation:pnSurface3:*
+ LIBINPUT_ATTR_KEYBOARD_INTEGRATION=internal
+
##########################################
# Synaptics
##########################################
ENV{ID_INPUT_MOUSE}=="1", \
IMPORT{builtin}="hwdb --subsystem=input --lookup-prefix=libinput:mouse:"
+# libinput:touchpad:<modalias>
+ENV{ID_INPUT_KEYBOARD}=="1", \
+ IMPORT{builtin}="hwdb --subsystem=input --lookup-prefix=libinput:keyboard:"
+
# libinput:name:<name>:dmi:<dmi string>
KERNELS=="input*", \
IMPORT{builtin}="hwdb 'libinput:name:$attr{name}:$attr{[dmi/id]modalias}'"
UDEV_TAG = Word(string.ascii_uppercase, alphanums + '_')
TYPES = {
- 'libinput': ('name', 'touchpad', 'mouse'),
+ 'libinput': ('name', 'touchpad', 'mouse', 'keyboard'),
}
@functools.lru_cache()
Suppress('=') -
Group(pressure_range('SETTINGS*')) ]
+ kbintegration_tags = Or(('internal', 'external'))
+ kbintegration = [Literal('LIBINPUT_ATTR_KEYBOARD_INTEGRATION')('NAME') -
+ Suppress('=') -
+ kbintegration_tags('VALUE')]
+
grammar = Or(model_props + size_props + reliability + tpkbcombo +
- pressure_prop)
+ pressure_prop + kbintegration)
return grammar