xclient.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. from cffi import FFI
  2. ffi = FFI()
  3. ffi.cdef("""
  4. typedef ... Display;
  5. typedef struct { ...; } Window;
  6. typedef struct { int type; ...; } XEvent;
  7. Display *XOpenDisplay(char *display_name);
  8. Window DefaultRootWindow(Display *display);
  9. int XMapRaised(Display *display, Window w);
  10. Window XCreateSimpleWindow(Display *display, Window parent, int x, int y,
  11. unsigned int width, unsigned int height,
  12. unsigned int border_width, unsigned long border,
  13. unsigned long background);
  14. int XNextEvent(Display *display, XEvent *event_return);
  15. """)
  16. lib = ffi.verify("""
  17. #include <X11/Xlib.h>
  18. """, libraries=['X11'])
  19. globals().update(lib.__dict__)
  20. class XError(Exception):
  21. pass
  22. def main():
  23. display = XOpenDisplay(ffi.NULL)
  24. if display == ffi.NULL:
  25. raise XError("cannot open display")
  26. w = XCreateSimpleWindow(display, DefaultRootWindow(display),
  27. 10, 10, 500, 350, 0, 0, 0)
  28. XMapRaised(display, w)
  29. event = ffi.new("XEvent *")
  30. XNextEvent(display, event)
  31. if __name__ == '__main__':
  32. main()