Switch from my own globbing function to fnmatch.

Detect keys numbered higher then buttons. Remove the (depreciated since
    long before xkb support was added to evdev) XkbKeymap option.
This commit is contained in:
Zephaniah E. Hull
2006-03-16 13:09:19 +00:00
parent a3149dc44a
commit 05b56eeb5c
3 changed files with 30 additions and 53 deletions

View File

@@ -1,3 +1,13 @@
2006-03-16 Zephaniah E. Hull,,, <warp@aehallh.com>
* src/evdev_brain.c: (MatchDriver):
Switch from my own globbing function to fnmatch.
* src/evdev_key.c: (EvdevKeyNew):
Detect keys numbered higher then buttons.
Remove the (depreciated since long before xkb support was added to
evdev) XkbKeymap option.
2006-03-16 Zephaniah E. Hull <warp@aehallh.com>
* man/evdev.man:

View File

@@ -39,6 +39,7 @@
#include "evdev.h"
#include <xf86.h>
#include <fnmatch.h>
#ifndef SYSCALL
#define SYSCALL(call) while(((call) == -1) && (errno == EINTR))
@@ -49,40 +50,6 @@ static InputInfoPtr evdev_pInfo = NULL;
static evdevDriverPtr evdev_drivers = NULL;
static int evdev_seq;
static int
glob_match(const char *pattern, const char *matchp)
{
int i, j = 0, ret = 0;
if (!(pattern && matchp))
return (strlen(pattern) == strlen(matchp));
for (i = 0; matchp[i]; i++) {
if (pattern[j] == '\\')
j++;
else if (pattern[j] == '*') {
if (pattern[j + 1]) {
if (!glob_match(pattern+j+1,matchp+i))
return 0;
} else
return 0;
continue;
} else if (pattern[j] == '?') {
j++;
continue;
}
if ((ret = (pattern[j] - matchp[i])))
return ret;
j++;
}
if (!pattern[j] || ((pattern[j] == '*') && !pattern[j + 1]))
return 0;
else
return 1;
}
int
evdevGetFDForDevice (evdevDevicePtr device)
{
@@ -160,11 +127,11 @@ MatchAny (long *dev, long *match, int len)
static Bool
MatchDriver (evdevDriverPtr driver, evdevDevInfoPtr info)
{
if (driver->name && glob_match(driver->name, info->name))
if (driver->name && fnmatch(driver->name, info->name, 0))
return FALSE;
if (driver->phys && glob_match(driver->phys, info->phys))
if (driver->phys && fnmatch(driver->phys, info->phys, 0))
return FALSE;
if (driver->device && glob_match(driver->device, info->dev))
if (driver->device && fnmatch(driver->device, info->dev, 0))
return FALSE;
if (driver->id.bustype && driver->id.bustype != info->id.bustype)

View File

@@ -365,6 +365,12 @@ EvdevKeyNew (InputInfoPtr pInfo)
keys = 1;
break;
}
if (!keys)
for (i = KEY_OK; i <= KEY_MAX; i++)
if (TestBit (i, pEvdev->bits.key)) {
keys = 1;
break;
}
if (!keys)
return !Success;
@@ -375,23 +381,17 @@ EvdevKeyNew (InputInfoPtr pInfo)
pInfo->flags |= XI86_KEYBOARD_CAPABLE | XI86_CONFIGURED;
SetXkbOption (pInfo, "XkbKeymap", NULL, &state->key->xkbnames.keymap);
if (state->key->xkbnames.keymap) {
xf86Msg(X_CONFIG, "%s: XkbKeymap overrides all other XKB settings\n",
pInfo->name);
} else {
SetXkbOption (pInfo, "XkbRules", __XKBDEFRULES__, &state->key->xkb_rules);
SetXkbOption (pInfo, "XkbModel", "evdev", &state->key->xkb_model);
SetXkbOption (pInfo, "XkbLayout", "us", &state->key->xkb_layout);
SetXkbOption (pInfo, "XkbVariant", NULL, &state->key->xkb_variant);
SetXkbOption (pInfo, "XkbOptions", NULL, &state->key->xkb_options);
SetXkbOption (pInfo, "XkbRules", __XKBDEFRULES__, &state->key->xkb_rules);
SetXkbOption (pInfo, "XkbModel", "evdev", &state->key->xkb_model);
SetXkbOption (pInfo, "XkbLayout", "us", &state->key->xkb_layout);
SetXkbOption (pInfo, "XkbVariant", NULL, &state->key->xkb_variant);
SetXkbOption (pInfo, "XkbOptions", NULL, &state->key->xkb_options);
SetXkbOption (pInfo, "XkbKeycodes", NULL, &state->key->xkbnames.keycodes);
SetXkbOption (pInfo, "XkbTypes", NULL, &state->key->xkbnames.types);
SetXkbOption (pInfo, "XkbCompat", NULL, &state->key->xkbnames.compat);
SetXkbOption (pInfo, "XkbSymbols", NULL, &state->key->xkbnames.symbols);
SetXkbOption (pInfo, "XkbGeometry", NULL, &state->key->xkbnames.geometry);
}
SetXkbOption (pInfo, "XkbKeycodes", NULL, &state->key->xkbnames.keycodes);
SetXkbOption (pInfo, "XkbTypes", NULL, &state->key->xkbnames.types);
SetXkbOption (pInfo, "XkbCompat", NULL, &state->key->xkbnames.compat);
SetXkbOption (pInfo, "XkbSymbols", NULL, &state->key->xkbnames.symbols);
SetXkbOption (pInfo, "XkbGeometry", NULL, &state->key->xkbnames.geometry);
return Success;
}