summaryrefslogtreecommitdiff
path: root/xsetpointer.c
diff options
context:
space:
mode:
Diffstat (limited to 'xsetpointer.c')
-rw-r--r--xsetpointer.c159
1 files changed, 159 insertions, 0 deletions
diff --git a/xsetpointer.c b/xsetpointer.c
new file mode 100644
index 0000000..2f7ad3f
--- /dev/null
+++ b/xsetpointer.c
@@ -0,0 +1,159 @@
+/* $XFree86: xc/programs/xsetpointer/xsetpointer.c,v 3.6 2001/04/01 14:00:23 tsi Exp $ */
+
+/*
+ * Copyright 1995 by Frederic Lepied, France. <fred@sugix.frmug.fr.net>
+ *
+ * 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.
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <X11/Xproto.h>
+#include <X11/extensions/XInput.h>
+
+int event_type;
+
+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);
+}
+
+int
+main(int argc, char * argv[])
+{
+ int loop, num_extensions, num_devices;
+ char **extensions;
+ XDeviceInfo *devices;
+ Display *dpy;
+ Window root_win;
+ unsigned long screen;
+ int list = 0;
+
+ if (argc != 2) {
+ fprintf(stderr, "usage : %s (-l | <device name>)\n", argv[0]);
+ exit(1);
+ }
+
+ if (strcmp(argv[1], "-l") == 0) {
+ list = 1;
+ }
+
+ 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
+
+ screen = DefaultScreen(dpy);
+ root_win = RootWindow(dpy, screen);
+
+ extensions = XListExtensions(dpy, &num_extensions);
+ for (loop = 0; loop < num_extensions &&
+ (strcmp(extensions[loop], "XInputExtension") != 0); loop++);
+ XFreeExtensionList(extensions);
+ if (loop != num_extensions)
+ {
+ devices = XListInputDevices(dpy, &num_devices);
+ for(loop=0; loop<num_devices; loop++)
+ {
+ if (list) {
+ printf("\"%s\" [", devices[loop].name ? devices[loop].name : "<noname>");
+ switch(devices[loop].use) {
+ case IsXPointer:
+ printf("XPointer]\n");
+ break;
+ case IsXKeyboard:
+ printf("XKeyboard]\n");
+ break;
+ case IsXExtensionDevice:
+ printf("XExtensionDevice]\n");
+ break;
+ default:
+ printf("invalid value]\n");
+ break;
+ }
+ }
+ 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>");
+#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);
+ }
+ else
+ {
+ fprintf(stderr, "No XInput extension available\n");
+ exit(1);
+ }
+
+ if (list) {
+ exit(0);
+ }
+ else {
+ fprintf(stderr, "Extended device %s not found\n", argv[1]);
+ exit(1);
+ }
+}