summaryrefslogtreecommitdiff
path: root/demo/xclient.py
diff options
context:
space:
mode:
authorArmin Rigo <arigo@tunes.org>2012-06-17 11:11:38 +0200
committerArmin Rigo <arigo@tunes.org>2012-06-17 11:11:38 +0200
commit332860b12a00b76337a8f7baac18541b488afd57 (patch)
treee61fd2ed9244a9e17cf721459f85b731ce0f69c8 /demo/xclient.py
parentfa85386bd835261fa790cd0a8936032cd48e70c8 (diff)
downloadcffi-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.py40
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()