/* $XFree86: xc/programs/xsetpointer/xsetpointer.c,v 3.7 2003/05/27 22:27:10 tsi Exp $ */ /* * Copyright 1995 by Frederic Lepied, France. * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of Frederic Lepied not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. Frederic Lepied makes no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * FREDERIC LEPIED DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL FREDERIC LEPIED BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. * */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #ifndef HAVE_STRCASECMP #include static int StrCaseCmp(char *s1, char *s2) { char c1, c2; if (*s1 == 0) { if (*s2 == 0) return(0); else return(1); } c1 = (isupper(*s1) ? tolower(*s1) : *s1); c2 = (isupper(*s2) ? tolower(*s2) : *s2); while (c1 == c2) { if (c1 == '\0') return(0); s1++; s2++; c1 = (isupper(*s1) ? tolower(*s1) : *s1); c2 = (isupper(*s2) ? tolower(*s2) : *s2); } return(c1 - c2); } #define strcasecmp StrCaseCmp #endif int main(int argc, char * argv[]) { int loop, num_devices; XDeviceInfo *devices; XDeviceCoreControl corectl; Display *dpy; int list = 0, core = 0; XDevice *device; int major, evt, err; /* event version, etc */ if (argc < 2 || argc > 3) { fprintf(stderr, "Usage: %s -l | -c | +c \n", argv[0]); fprintf(stderr, "Options:\n"); fprintf(stderr, " -l Lists the available devices\n"); fprintf(stderr, " -c Disables core events\n"); fprintf(stderr, " +c Enables core events\n"); 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); if (!dpy) { printf("unable to connect to X Server try to set the DISPLAY variable\n"); exit(1); } #ifdef DEBUG printf("connected to %s\n", XDisplayString(dpy)); #endif if (!XQueryExtension(dpy, INAME, &major, &evt, &err)) { fprintf(stderr, "No XInput extension available\n"); return 1; } else { XExtensionVersion *version; version = XGetExtensionVersion(dpy, INAME); if (version->major_version >= XI_Add_DevicePresenceNotify_Major && version->minor_version >= XI_Add_DevicePresenceNotify_Minor) { fprintf(stderr, "Sorry. %s is deprecated for the X Server version " "you are connecting to.\n", argv[0]); XFree(version); return 1; } XFree(version); } devices = XListInputDevices(dpy, &num_devices); for(loop=0; loop"); switch(devices[loop].use) { case IsXPointer: printf("XPointer]\n"); break; case IsXKeyboard: printf("XKeyboard]\n"); break; 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 : "", 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) { #ifdef DEBUG fprintf(stderr, "opening device %s\n", devices[loop].name ? devices[loop].name : ""); #endif device = XOpenDevice(dpy, devices[loop].id); if (device) { XChangePointerDevice(dpy, device, 0, 1); exit(0); } else { fprintf(stderr, "error opening device\n"); exit(1); } } } } XFreeDeviceList(devices); if (list) { exit(0); } else { fprintf(stderr, "Extended device %s not found\n", core ? argv[2] : argv[1]); exit(1); } }