diff options
author | Armin Rigo <arigo@tunes.org> | 2012-06-17 11:11:38 +0200 |
---|---|---|
committer | Armin Rigo <arigo@tunes.org> | 2012-06-17 11:11:38 +0200 |
commit | 332860b12a00b76337a8f7baac18541b488afd57 (patch) | |
tree | e61fd2ed9244a9e17cf721459f85b731ce0f69c8 /demo/xclient.py | |
parent | fa85386bd835261fa790cd0a8936032cd48e70c8 (diff) | |
download | cffi-332860b12a00b76337a8f7baac18541b488afd57.tar.gz |
Fix the issue. Tests pass but would need some review because it's
slightly fragile... But it's enough to have the simple xclient.py
demo work.
Diffstat (limited to 'demo/xclient.py')
-rw-r--r-- | demo/xclient.py | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/demo/xclient.py b/demo/xclient.py new file mode 100644 index 0000000..8bc05bd --- /dev/null +++ b/demo/xclient.py @@ -0,0 +1,40 @@ +from cffi import FFI + +ffi = FFI() +ffi.cdef(""" + +typedef ... Display; +typedef unsigned int Window; /* 32-bit integer */ + +typedef struct { int type; ...; } XEvent; + +Display *XOpenDisplay(char *display_name); +Window DefaultRootWindow(Display *display); +int XMapRaised(Display *display, Window w); +Window XCreateSimpleWindow(Display *display, Window parent, int x, int y, + unsigned int width, unsigned int height, + unsigned int border_width, unsigned long border, + unsigned long background); +int XNextEvent(Display *display, XEvent *event_return); +""") +lib = ffi.verify(""" +#include <X11/Xlib.h> +""", libraries=['X11']) + +globals().update(lib.__dict__) + +class XError(Exception): + pass + +def main(): + display = XOpenDisplay(None) + if display is None: + raise XError("cannot open display") + w = XCreateSimpleWindow(display, DefaultRootWindow(display), + 10, 10, 500, 350, 0, 0, 0) + XMapRaised(display, w) + event = ffi.new("XEvent") + XNextEvent(display, event) + +if __name__ == '__main__': + main() |