kdrive: fix up NewInputDeviceRequest() implementation
This patch simplifies NewInputDeviceRequest() implementation in kinput.c, making use of improved KdParseKbdOptions() / KdParsePointerOptions() and merging several "if (ki)"/"if (pi)" clauses. Reviewed-by: Adam Jackson <ajax@redhat.com> Signed-off-by: Laércio de Sousa <laerciosousa@sme-mogidascruzes.sp.gov.br>
This commit is contained in:
parent
2c3e876844
commit
6d6fd688ec
|
@ -1091,6 +1091,8 @@ KdParseKbdOptions(KdKeyboardInfo * ki)
|
||||||
ki->xkbOptions = strdup(value);
|
ki->xkbOptions = strdup(value);
|
||||||
else if (!strcasecmp(key, "device"))
|
else if (!strcasecmp(key, "device"))
|
||||||
ki->path = strdup(value);
|
ki->path = strdup(value);
|
||||||
|
else if (!strcasecmp(key, "driver"))
|
||||||
|
ki->driver = KdFindKeyboardDriver(value);
|
||||||
else
|
else
|
||||||
ErrorF("Kbd option key (%s) of value (%s) not assigned!\n",
|
ErrorF("Kbd option key (%s) of value (%s) not assigned!\n",
|
||||||
key, value);
|
key, value);
|
||||||
|
@ -1171,18 +1173,20 @@ KdParsePointerOptions(KdPointerInfo * pi)
|
||||||
const char *key = input_option_get_key(option);
|
const char *key = input_option_get_key(option);
|
||||||
const char *value = input_option_get_value(option);
|
const char *value = input_option_get_value(option);
|
||||||
|
|
||||||
if (!strcmp(key, "emulatemiddle"))
|
if (!strcasecmp(key, "emulatemiddle"))
|
||||||
pi->emulateMiddleButton = TRUE;
|
pi->emulateMiddleButton = TRUE;
|
||||||
else if (!strcmp(key, "noemulatemiddle"))
|
else if (!strcasecmp(key, "noemulatemiddle"))
|
||||||
pi->emulateMiddleButton = FALSE;
|
pi->emulateMiddleButton = FALSE;
|
||||||
else if (!strcmp(key, "transformcoord"))
|
else if (!strcasecmp(key, "transformcoord"))
|
||||||
pi->transformCoordinates = TRUE;
|
pi->transformCoordinates = TRUE;
|
||||||
else if (!strcmp(key, "rawcoord"))
|
else if (!strcasecmp(key, "rawcoord"))
|
||||||
pi->transformCoordinates = FALSE;
|
pi->transformCoordinates = FALSE;
|
||||||
else if (!strcasecmp(key, "device"))
|
else if (!strcasecmp(key, "device"))
|
||||||
pi->path = strdup(value);
|
pi->path = strdup(value);
|
||||||
else if (!strcasecmp(key, "protocol"))
|
else if (!strcasecmp(key, "protocol"))
|
||||||
pi->protocol = strdup(value);
|
pi->protocol = strdup(value);
|
||||||
|
else if (!strcasecmp(key, "driver"))
|
||||||
|
pi->driver = KdFindPointerDriver(value);
|
||||||
else
|
else
|
||||||
ErrorF("Pointer option key (%s) of value (%s) not assigned!\n",
|
ErrorF("Pointer option key (%s) of value (%s) not assigned!\n",
|
||||||
key, value);
|
key, value);
|
||||||
|
@ -2152,68 +2156,48 @@ NewInputDeviceRequest(InputOption *options, InputAttributes * attrs,
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ki && !pi) {
|
|
||||||
ErrorF("unrecognised device identifier!\n");
|
|
||||||
return BadValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* FIXME: change this code below to use KdParseKbdOptions and
|
|
||||||
* KdParsePointerOptions */
|
|
||||||
nt_list_for_each_entry(option, options, list.next) {
|
|
||||||
const char *key = input_option_get_key(option);
|
|
||||||
const char *value = input_option_get_value(option);
|
|
||||||
|
|
||||||
if (strcmp(key, "device") == 0) {
|
|
||||||
if (pi && value)
|
|
||||||
pi->path = strdup(value);
|
|
||||||
else if (ki && value)
|
|
||||||
ki->path = strdup(value);
|
|
||||||
}
|
|
||||||
else if (strcmp(key, "driver") == 0) {
|
|
||||||
if (pi) {
|
if (pi) {
|
||||||
pi->driver = KdFindPointerDriver(value);
|
pi->options = options;
|
||||||
|
KdParsePointerOptions(pi);
|
||||||
|
|
||||||
if (!pi->driver) {
|
if (!pi->driver) {
|
||||||
ErrorF("couldn't find driver!\n");
|
ErrorF("couldn't find driver!\n");
|
||||||
KdFreePointer(pi);
|
KdFreePointer(pi);
|
||||||
return BadValue;
|
return BadValue;
|
||||||
}
|
}
|
||||||
pi->options = options;
|
|
||||||
}
|
|
||||||
else if (ki) {
|
|
||||||
ki->driver = KdFindKeyboardDriver(value);
|
|
||||||
if (!ki->driver) {
|
|
||||||
ErrorF("couldn't find driver!\n");
|
|
||||||
KdFreeKeyboard(ki);
|
|
||||||
return BadValue;
|
|
||||||
}
|
|
||||||
ki->options = options;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pi) {
|
|
||||||
if (KdAddPointer(pi) != Success ||
|
if (KdAddPointer(pi) != Success ||
|
||||||
ActivateDevice(pi->dixdev, TRUE) != Success ||
|
ActivateDevice(pi->dixdev, TRUE) != Success ||
|
||||||
EnableDevice(pi->dixdev, TRUE) != TRUE) {
|
EnableDevice(pi->dixdev, TRUE) != TRUE) {
|
||||||
ErrorF("couldn't add or enable pointer\n");
|
ErrorF("couldn't add or enable pointer\n");
|
||||||
return BadImplementation;
|
return BadImplementation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*pdev = pi->dixdev;
|
||||||
}
|
}
|
||||||
else if (ki) {
|
else if (ki) {
|
||||||
|
ki->options = options;
|
||||||
|
KdParseKbdOptions(ki);
|
||||||
|
|
||||||
|
if (!ki->driver) {
|
||||||
|
ErrorF("couldn't find driver!\n");
|
||||||
|
KdFreeKeyboard(ki);
|
||||||
|
return BadValue;
|
||||||
|
}
|
||||||
|
|
||||||
if (KdAddKeyboard(ki) != Success ||
|
if (KdAddKeyboard(ki) != Success ||
|
||||||
ActivateDevice(ki->dixdev, TRUE) != Success ||
|
ActivateDevice(ki->dixdev, TRUE) != Success ||
|
||||||
EnableDevice(ki->dixdev, TRUE) != TRUE) {
|
EnableDevice(ki->dixdev, TRUE) != TRUE) {
|
||||||
ErrorF("couldn't add or enable keyboard\n");
|
ErrorF("couldn't add or enable keyboard\n");
|
||||||
return BadImplementation;
|
return BadImplementation;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (pi) {
|
|
||||||
*pdev = pi->dixdev;
|
|
||||||
}
|
|
||||||
else if (ki) {
|
|
||||||
*pdev = ki->dixdev;
|
*pdev = ki->dixdev;
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
ErrorF("unrecognised device identifier!\n");
|
||||||
|
return BadValue;
|
||||||
|
}
|
||||||
|
|
||||||
return Success;
|
return Success;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user