xfree86: add support for MatchIsTabletPad

The tablet pads have been separate kernel devices for a while now and
libwacom has labelled them with the udev ID_INPUT_TABLET_PAD for over a year
now. Add a new MatchIsTabletPad directive to apply configuration options
specifically to the Pad part of a tablet.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
Peter Hutterer 2016-04-22 15:04:37 +10:00
parent fa02b05645
commit 2285fe78c0
8 changed files with 26 additions and 0 deletions

View File

@ -177,6 +177,8 @@ device_added(LibHalContext * hal_ctx, const char *udi)
attrs.flags |= ATTR_JOYSTICK;
if (libhal_device_query_capability(hal_ctx, udi, "input.tablet", NULL))
attrs.flags |= ATTR_TABLET;
if (libhal_device_query_capability(hal_ctx, udi, "input.tablet_pad", NULL))
attrs.flags |= ATTR_TABLET_PAD;
if (libhal_device_query_capability(hal_ctx, udi, "input.touchpad", NULL))
attrs.flags |= ATTR_TOUCHPAD;
if (libhal_device_query_capability(hal_ctx, udi, "input.touchscreen", NULL))

View File

@ -258,6 +258,10 @@ device_added(struct udev_device *udev_device)
LOG_PROPERTY(path, key, value);
attrs.flags |= ATTR_TABLET;
}
else if (!strcmp(key, "ID_INPUT_TABLET_PAD")) {
LOG_PROPERTY(path, key, value);
attrs.flags |= ATTR_TABLET_PAD;
}
else if (!strcmp(key, "ID_INPUT_TOUCHPAD")) {
LOG_PROPERTY(path, key, value);
attrs.flags |= ATTR_TOUCHPAD;

View File

@ -646,6 +646,9 @@ InputClassMatches(const XF86ConfInputClassPtr iclass, const InputInfoPtr idev,
if (iclass->is_tablet.set &&
iclass->is_tablet.val != ! !(attrs->flags & ATTR_TABLET))
return FALSE;
if (iclass->is_tablet_pad.set &&
iclass->is_tablet_pad.val != ! !(attrs->flags & ATTR_TABLET_PAD))
return FALSE;
if (iclass->is_touchpad.set &&
iclass->is_touchpad.val != ! !(attrs->flags & ATTR_TOUCHPAD))
return FALSE;

View File

@ -1188,6 +1188,8 @@ entries.
.TP 7
.BI "MatchIsTablet \*q" bool \*q
.TP 7
.BI "MatchIsTabletPad \*q" bool \*q
.TP 7
.BI "MatchIsTouchpad \*q" bool \*q
.TP 7
.BI "MatchIsTouchscreen \*q" bool \*q

View File

@ -52,6 +52,7 @@ static const xf86ConfigSymTabRec InputClassTab[] = {
{MATCH_IS_POINTER, "matchispointer"},
{MATCH_IS_JOYSTICK, "matchisjoystick"},
{MATCH_IS_TABLET, "matchistablet"},
{MATCH_IS_TABLET_PAD, "matchistabletpad"},
{MATCH_IS_TOUCHPAD, "matchistouchpad"},
{MATCH_IS_TOUCHSCREEN, "matchistouchscreen"},
{NOMATCH_PRODUCT, "nomatchproduct"},
@ -346,6 +347,14 @@ xf86parseInputClassSection(void)
if (!ptr->is_tablet.set)
Error(BOOL_MSG, "MatchIsTablet");
break;
case MATCH_IS_TABLET_PAD:
if (xf86getSubToken(&(ptr->comment)) != STRING)
Error(QUOTE_MSG, "MatchIsTabletPad");
ptr->is_tablet_pad.set = xf86getBoolValue(&ptr->is_tablet_pad.val, xf86_lex_val.str);
free(xf86_lex_val.str);
if (!ptr->is_tablet_pad.set)
Error(BOOL_MSG, "MatchIsTabletPad");
break;
case MATCH_IS_TOUCHPAD:
if (xf86getSubToken(&(ptr->comment)) != STRING)
Error(QUOTE_MSG, "MatchIsTouchpad");
@ -474,6 +483,9 @@ xf86printInputClassSection(FILE * cf, XF86ConfInputClassPtr ptr)
if (ptr->is_tablet.set)
fprintf(cf, "\tIsTablet \"%s\"\n",
ptr->is_tablet.val ? "yes" : "no");
if (ptr->is_tablet_pad.set)
fprintf(cf, "\tIsTabletPad \"%s\"\n",
ptr->is_tablet_pad.val ? "yes" : "no");
if (ptr->is_touchpad.set)
fprintf(cf, "\tIsTouchpad \"%s\"\n",
ptr->is_touchpad.val ? "yes" : "no");

View File

@ -326,6 +326,7 @@ typedef struct {
xf86TriState is_pointer;
xf86TriState is_joystick;
xf86TriState is_tablet;
xf86TriState is_tablet_pad;
xf86TriState is_touchpad;
xf86TriState is_touchscreen;
XF86OptionPtr option_lst;

View File

@ -285,6 +285,7 @@ typedef enum {
MATCH_IS_POINTER,
MATCH_IS_JOYSTICK,
MATCH_IS_TABLET,
MATCH_IS_TABLET_PAD,
MATCH_IS_TOUCHPAD,
MATCH_IS_TOUCHSCREEN,

View File

@ -237,6 +237,7 @@ typedef struct _InputAttributes {
#define ATTR_TOUCHPAD (1<<4)
#define ATTR_TOUCHSCREEN (1<<5)
#define ATTR_KEY (1<<6)
#define ATTR_TABLET_PAD (1<<7)
/* Key/Button has been run through all input processing and events sent to clients. */
#define KEY_PROCESSED 1