diff options
author | Peter Hutterer <peter@cs.unisa.edu.au> | 2007-12-20 12:29:27 +1030 |
---|---|---|
committer | Peter Hutterer <peter@cs.unisa.edu.au> | 2007-12-20 12:29:27 +1030 |
commit | a6feac1e18cdeffc42bc992faa8c95eaec420378 (patch) | |
tree | 22e94ded4c7cdf5d74b58b3b72ed5e4ced2e725e | |
parent | d02601e5c88d1d40e12cd71c2c10c7822919f7b8 (diff) |
Add support to set the client pointer.
Couple of whitespace changes too.
-rw-r--r-- | src/Makefile.am | 1 | ||||
-rw-r--r-- | src/hierarchy.c | 12 | ||||
-rw-r--r-- | src/setcp.c | 62 | ||||
-rw-r--r-- | src/xinput.c | 4 | ||||
-rw-r--r-- | src/xinput.h | 11 |
5 files changed, 84 insertions, 6 deletions
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 <peter@cs.unisa.edu.au> + * + * 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 <string.h> + +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[] = "<id>", float_device }, + { "set-cp", + "<window> <device>", + 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 */ |