From: Peter Hutterer Date: Thu, 20 Dec 2007 01:59:27 +0000 (+1030) Subject: Add support to set the client pointer. X-Git-Url: https://diplodocus.org/git/xorg-xinput/commitdiff_plain/a6feac1e18cdeffc42bc992faa8c95eaec420378?ds=inline;hp=-c Add support to set the client pointer. Couple of whitespace changes too. --- a6feac1e18cdeffc42bc992faa8c95eaec420378 diff --git a/src/Makefile.am b/src/Makefile.am index 67fa3a7..5b09539 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -30,6 +30,7 @@ xinput_SOURCES = \ hierarchy.c \ list.c \ setint.c \ + setcp.c \ setmode.c \ setptr.c \ state.c \ diff --git a/src/hierarchy.c b/src/hierarchy.c index edb66a1..f530192 100644 --- a/src/hierarchy.c +++ b/src/hierarchy.c @@ -6,10 +6,10 @@ * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. - * + * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. - * + * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. @@ -17,12 +17,12 @@ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. - * + * * Except as contained in this notice, the name of the author shall * not be used in advertising or otherwise to promote the sale, use or * other dealings in this Software without prior written authorization * from the author. - * + * */ #include "xinput.h" @@ -37,7 +37,7 @@ * Create a new master device. Name must be supplied, other values are * optional. */ -int +int create_master(Display* dpy, int argc, char** argv, char* name, char *desc) { XCreateMasterInfo c; @@ -88,7 +88,7 @@ remove_master(Display* dpy, int argc, char** argv, char *name, char *desc) r.returnMode = Floating; else if (!strcmp(argv[1], "AttachToMaster")) r.returnMode = AttachToMaster; - else + else Error(BadValue, "Invalid returnMode.\n"); } else r.returnMode = Floating; diff --git a/src/setcp.c b/src/setcp.c new file mode 100644 index 0000000..582d978 --- /dev/null +++ b/src/setcp.c @@ -0,0 +1,62 @@ +/* + * Copyright 2007 Peter Hutterer + * + * 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. + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of the author shall + * not be used in advertising or otherwise to promote the sale, use or + * other dealings in this Software without prior written authorization + * from the author. + * + */ + + +#include "xinput.h" +#include + +int +set_clientpointer(Display* dpy, int argc, char** argv, char* name, char *desc) +{ + XID window; + XID deviceid; + XDevice* dev = NULL; + char* id; + char* dummy; + + if (argc <= 1) + { + fprintf(stderr, "Usage: xinput %s %s\n", name, desc); + return EXIT_FAILURE; + } + + id = argv[0]; + + while(*id == '0') id++; + + window = strtol(argv[0], &dummy, (*id == 'x') ? 16 : 10); + deviceid = atol(argv[1]); + + dev = XOpenDevice(dpy, deviceid); + + if (!dev) + { + fprintf(stderr, "Cannot open device %ld.\n", deviceid); + } else + XSetClientPointer(dpy, window, dev); + return 0; +} diff --git a/src/xinput.c b/src/xinput.c index 47603d2..0fe8878 100644 --- a/src/xinput.c +++ b/src/xinput.c @@ -97,6 +97,10 @@ static entry drivers[] = "", float_device }, + { "set-cp", + " ", + set_clientpointer + }, {0, 0, 0 } }; diff --git a/src/xinput.h b/src/xinput.h index 8b94d6a..961d1f7 100644 --- a/src/xinput.h +++ b/src/xinput.h @@ -196,4 +196,15 @@ float_device( #endif ); +int +set_clientpointer( +#if NeedFunctionPrototypes + Display* display, + int argc, + char *argv[], + char *prog_name, + char *prog_desc +#endif +); + /* end of xinput.h */