diff options
author | sabetts <sabetts> | 2005-08-24 00:12:39 +0000 |
---|---|---|
committer | sabetts <sabetts> | 2005-08-24 00:12:39 +0000 |
commit | 49adcf350c0e8b3981f007ca2277fc1b67f6d59d (patch) | |
tree | b582011cd5b3d9ef08f4ed3f23948b765dd2e3d9 | |
parent | 558a08aed80bd57db21785db7a973ef21ea4f1c1 (diff) | |
download | ratpoison-49adcf350c0e8b3981f007ca2277fc1b67f6d59d.zip |
(pkgdata_DATA): add unrat.c
(EXTRA_DIST): likewise
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | contrib/Makefile.am | 4 | ||||
-rw-r--r-- | contrib/unrat.c | 101 |
3 files changed, 108 insertions, 2 deletions
@@ -1,3 +1,8 @@ +2005-08-23 Shawn Betts <sabetts@vcn.bc.ca> + + * contrib/Makefile.am (pkgdata_DATA): add unrat.c + (EXTRA_DIST): likewise + 2005-06-13 Shawn Betts <sabetts@shitbender.gagrod> * src/editor.c (edit_bindings): add C-h and C-m diff --git a/contrib/Makefile.am b/contrib/Makefile.am index d978632..70c0385 100644 --- a/contrib/Makefile.am +++ b/contrib/Makefile.am @@ -19,5 +19,5 @@ bin_SCRIPTS = rpws -pkgdata_DATA = ratpoison.el split.sh genrpbindings rpws allwindows.sh clickframe.pl rpshowall.sh -EXTRA_DIST = ratpoison.el split.sh genrpbindings rpws allwindows.sh clickframe.pl rpshowall.sh +pkgdata_DATA = ratpoison.el split.sh genrpbindings rpws allwindows.sh clickframe.pl rpshowall.sh unrat.c +EXTRA_DIST = ratpoison.el split.sh genrpbindings rpws allwindows.sh clickframe.pl rpshowall.sh unrat.c diff --git a/contrib/unrat.c b/contrib/unrat.c new file mode 100644 index 0000000..adce9b9 --- /dev/null +++ b/contrib/unrat.c @@ -0,0 +1,101 @@ +/* Warp the pointer to the bottom right corner of the screen any time a key is pressed. + * + * Copyright (C) 2005 Shawn Betts <sabetts@vcn.bc.ca> + * + * unrat is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * unrat is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + */ + +/* +This is what I used to compile it: + +gcc -g -Wall -O2 -I/usr/X11R6/include -o unrat unrat.c -L /usr/X11R6/lib -lX11 +*/ + +#include <X11/Xos.h> +#include <X11/Xlib.h> +#include <X11/Xutil.h> +#include <X11/Xproto.h> +#include <stdio.h> +#include <stdlib.h> + +int (*defaulthandler)(); + +int +errorhandler(Display *display, XErrorEvent *error) +{ + if(error->error_code!=BadWindow) + (*defaulthandler)(display,error); + return 0; +} + +int +main (int argc, char **argv) +{ + Display *display; + int i, numscreens; + + display = XOpenDisplay(NULL); + if(!display) + { + perror("could not open display"); + exit(1); + } + + defaulthandler = XSetErrorHandler(errorhandler); + numscreens = ScreenCount(display); + + for (i=0; i<numscreens; i++) + { + unsigned int j, nwins; + Window dw1, dw2, *wins; + + XSelectInput(display,RootWindow(display, i), KeyReleaseMask | SubstructureNotifyMask); + XQueryTree(display, RootWindow(display, i), &dw1, &dw2, &wins, &nwins); + for (j=0; j<nwins; j++) + XSelectInput(display, wins[j], KeyReleaseMask); + } + + while (1) + { + XEvent event; + do + { + XNextEvent(display,&event); + if (event.type == CreateNotify) + XSelectInput(display, event.xcreatewindow.window, KeyReleaseMask); + } while(event.type != KeyRelease); + + /* A key was pressed. warp the rat. */ + for (i=0; i<numscreens; i++) + { + int x, y, wx, wy; + unsigned int mask; + Window root, child; + + XQueryPointer (display, RootWindow(display, i), + &root, &child, + &x, &y, &wx, &wy, + &mask); + if (x < DisplayWidth (display, i)-1 + || y < DisplayHeight (display, i)-1) + XWarpPointer (display, None, RootWindow(display, i), 0, 0, 0, 0, DisplayWidth (display, i), DisplayHeight (display, i)); + } + } + + XCloseDisplay (display); + + return 0; +} |