+Bool is_pointer(int use)
+{
+ return use == XIMasterPointer || use == XISlavePointer;
+}
+
+Bool is_keyboard(int use)
+{
+ return use == XIMasterKeyboard || use == XISlaveKeyboard;
+}
+
+Bool device_matches(XIDeviceInfo *info, char *name)
+{
+ if (strcmp(info->name, name) == 0) {
+ return True;
+ }
+
+ if (strncmp(name, "pointer:", strlen("pointer:")) == 0 &&
+ strcmp(info->name, name + strlen("pointer:")) == 0 &&
+ is_pointer(info->use)) {
+ return True;
+ }
+
+ if (strncmp(name, "keyboard:", strlen("keyboard:")) == 0 &&
+ strcmp(info->name, name + strlen("keyboard:")) == 0 &&
+ is_keyboard(info->use)) {
+ return True;
+ }
+
+ return False;
+}
+