summaryrefslogtreecommitdiff
path: root/xsetpointer.c
diff options
context:
space:
mode:
Diffstat (limited to 'xsetpointer.c')
-rw-r--r--xsetpointer.c56
1 files changed, 46 insertions, 10 deletions
diff --git a/xsetpointer.c b/xsetpointer.c
index a3b69cc..25a115d 100644
--- a/xsetpointer.c
+++ b/xsetpointer.c
@@ -59,20 +59,28 @@ StrCaseCmp(char *s1, char *s2)
int
main(int argc, char * argv[])
{
- int loop, num_extensions, num_devices;
- char **extensions;
- XDeviceInfo *devices;
- Display *dpy;
- int list = 0;
+ int loop, num_extensions, num_devices;
+ char **extensions;
+ XDeviceInfo *devices;
+ XDeviceCoreControl corectl;
+ Display *dpy;
+ int list = 0, core = 0;
+ XDevice *device;
- if (argc != 2) {
- fprintf(stderr, "usage : %s (-l | <device name>)\n", argv[0]);
+ if (argc < 2 || argc > 3) {
+ fprintf(stderr, "usage : %s (-l | -c | +c ) <device name>)\n", argv[0]);
exit(1);
}
if (strcmp(argv[1], "-l") == 0) {
list = 1;
}
+ else if (strcmp(argv[1], "-c") == 0) {
+ core = 1;
+ }
+ else if (strcmp(argv[1], "+c") == 0) {
+ core = 2;
+ }
dpy = XOpenDisplay(NULL);
@@ -106,18 +114,45 @@ main(int argc, char * argv[])
case IsXExtensionDevice:
printf("XExtensionDevice]\n");
break;
+ case IsXExtensionKeyboard:
+ printf("XExtensionKeyboard]\n");
+ break;
+ case IsXExtensionPointer:
+ printf("XExtensionPointer]\n");
+ break;
default:
printf("invalid value]\n");
break;
}
}
+ else if (core) {
+ if (argc == 3 && devices[loop].name &&
+ StrCaseCmp(devices[loop].name, argv[2]) == 0) {
+#ifdef DEBUG
+ fprintf(stderr, "opening device %s at %d\n",
+ devices[loop].name ? devices[loop].name : "<noname>",
+ devices[loop].id);
+#endif
+ device = XOpenDevice(dpy, devices[loop].id);
+ if (device) {
+ corectl.status = (core - 1);
+ corectl.length = sizeof(corectl);
+ corectl.control = DEVICE_CORE;
+ XChangeDeviceControl(dpy, device, DEVICE_CORE,
+ (XDeviceControl *)&corectl);
+ exit(0);
+ }
+ else {
+ fprintf(stderr, "error opening device\n");
+ exit(1);
+ }
+ }
+ }
else {
if ((argc == 2) && devices[loop].name &&
(StrCaseCmp(devices[loop].name, argv[1]) == 0))
if (devices[loop].use == IsXExtensionDevice)
{
- XDevice *device;
-
#ifdef DEBUG
fprintf(stderr, "opening device %s\n",
devices[loop].name ? devices[loop].name : "<noname>");
@@ -148,7 +183,8 @@ main(int argc, char * argv[])
exit(0);
}
else {
- fprintf(stderr, "Extended device %s not found\n", argv[1]);
+ fprintf(stderr, "Extended device %s not found\n", core ? argv[2] :
+ argv[1]);
exit(1);
}
}