diff options
Diffstat (limited to 'superkaramba/examples/globalMouse/extension/xcursor.c')
-rw-r--r-- | superkaramba/examples/globalMouse/extension/xcursor.c | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/superkaramba/examples/globalMouse/extension/xcursor.c b/superkaramba/examples/globalMouse/extension/xcursor.c new file mode 100644 index 0000000..8dad240 --- /dev/null +++ b/superkaramba/examples/globalMouse/extension/xcursor.c @@ -0,0 +1,104 @@ +/* + * This module is based on code by found in comp.lang.python: + * http://groups.google.at/groups?q=%22Re:+X+Gurus%22+group:comp.lang.python.*&hl=de&lr=&ie=UTF-8&selm=imnv4.314%24qL4.17232%40newsread1.prod.itd.earthlink.net&rnum=2 + * + * Build with: + * python setup.py build + * + * Copyright (C) 2003 Hans Karlsson <karlsson.h@home.se> + * Copyright (C) 2003-2004 Adam Geitgey <adam@rootnode.org> + * Copyright (c) 2005 Ryan Nickell <p0z3r@earthlink.net> + * + * This file is part of Superkaramba. + * + * Superkaramba 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 of the License, or + * (at your option) any later version. + * + * Superkaramba 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 Superkaramba; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + ****************************************************************************/ + +#include <Python.h> + +#include <X11/Xlib.h> +#include <X11/Xutil.h> +#include <stdlib.h> +#include <stdio.h> + +static Display* display = 0; +static Window root; +static int screen; + + +static PyObject* xcursor_position(self, args) + PyObject* self; + PyObject* args; +{ + /* Determine X Cursor coordinates */ + Window root_return, child_return; + char* display_name; + int root_x_return, root_y_return; + int win_x_return, win_y_return; + unsigned int mask_return; + + if (! (display_name = getenv("DISPLAY")) ) + { + /* add error handling! */ + + /* + * fprintf(stderr,"environment variable DISPLAY must be set\n"); + * exit(-1); + */ + + return NULL; + } + + if ( display == 0) + { + if (! (display = XOpenDisplay(display_name)) ) + { + /* add error handling! */ + + /* + * fprintf(stderr,"%s: Cannot open display %s\n", argv[0], + * display_name); + * exit(-1); + */ + + return NULL; + } + + screen = DefaultScreen(display); + root = RootWindow(display, screen); + } + + XQueryPointer(display, root, &root_return, &child_return, + &root_x_return, &root_y_return, + &win_x_return, &win_y_return, + &mask_return); + + /* return Python Object */ + return Py_BuildValue("(i,i)", root_x_return, root_y_return); +} + +/* Method Table */ +static PyMethodDef xcursorMethods[] = +{ + {"position", xcursor_position, METH_VARARGS, "Query X Cursor Coordinates"}, + {NULL, NULL, 0, NULL} /* Sentinel */ +}; + +void initxcursor(void) +{ + (void) Py_InitModule("xcursor", xcursorMethods); +} + + |