return xname;
}
-int in_bind_key(int dev_id, int keycode, int bind_type, int mask, int force_unbind)
+int in_bind_key(int dev_id, int keycode, int mask, int bind_type, int force_unbind)
{
int ret, count;
in_dev_t *dev;
return 0;
}
+void in_unbind_all(int dev_id, int act_mask, int bind_type)
+{
+ int i, count;
+ in_dev_t *dev;
+
+ if (dev_id < 0 || dev_id >= IN_MAX_DEVS || bind_type >= IN_BINDTYPE_COUNT)
+ return;
+
+ dev = &in_devices[dev_id];
+ count = dev->key_count;
+
+ if (dev->binds == NULL)
+ return;
+
+ for (i = 0; i < count; i++)
+ dev->binds[IN_BIND_OFFS(i, bind_type)] &= ~act_mask;
+}
+
/* returns device id, or -1 on error */
int in_config_parse_dev(const char *name)
{
int i;
for (i = 0; i < IN_MAX_DEVS; i++) {
- int n, ret, count, *binds, *def_binds;
+ int n, t, ret, count, *binds, *def_binds;
in_dev_t *dev = &in_devices[i];
if (dev->binds == NULL)
binds = dev->binds;
def_binds = binds + count * IN_BINDTYPE_COUNT;
- for (n = 0; n < count * IN_BINDTYPE_COUNT; n++)
- if (binds[n] == -1)
- binds[n] = def_binds[n];
+ for (n = 0; n < count; n++) {
+ int is_default = 1;
+ for (t = 0; t < IN_BINDTYPE_COUNT; t++)
+ if (binds[IN_BIND_OFFS(n, t)] == -1)
+ binds[IN_BIND_OFFS(n, t)] = 0;
+ else
+ is_default = 0;
+
+ if (is_default)
+ for (t = 0; t < IN_BINDTYPE_COUNT; t++)
+ binds[IN_BIND_OFFS(n, t)] = def_binds[IN_BIND_OFFS(n, t)];
+ }
if (dev->drv_data == NULL)
continue;