summaryrefslogtreecommitdiff
path: root/spnav.py
diff options
context:
space:
mode:
authorStan Seibert <stan@mtrr.org>2011-08-09 12:40:53 -0400
committerStan Seibert <stan@mtrr.org>2011-08-09 12:40:53 -0400
commit57b7eb0f16e47ed673cd5a80ac064634436baecd (patch)
tree7402cee54b1f41a7d7d644daf265462816fdb4d1 /spnav.py
parentedd78c209c88a652691cc5602b37d79085fee795 (diff)
downloadchroma-57b7eb0f16e47ed673cd5a80ac064634436baecd.tar.gz
chroma-57b7eb0f16e47ed673cd5a80ac064634436baecd.tar.bz2
chroma-57b7eb0f16e47ed673cd5a80ac064634436baecd.zip
Update spnav ctypes wrapper to support X11-based communication.
Diffstat (limited to 'spnav.py')
-rw-r--r--spnav.py21
1 files changed, 20 insertions, 1 deletions
diff --git a/spnav.py b/spnav.py
index 9079114..05ffe6d 100644
--- a/spnav.py
+++ b/spnav.py
@@ -1,4 +1,8 @@
-from ctypes import cdll, c_int, c_uint, c_void_p, byref, Structure, Union
+from ctypes import cdll, c_int, c_uint, c_void_p, py_object, byref, Structure, Union, pythonapi
+
+# OMG CALLING CPYTHON FUNCTIONS FROM INSIDE PYTHON
+pythonapi.PyCObject_AsVoidPtr.restype = c_void_p
+pythonapi.PyCObject_AsVoidPtr.argtypes = [py_object]
libspnav = cdll.LoadLibrary('libspnav.so')
@@ -44,6 +48,13 @@ def spnav_open():
if libspnav.spnav_open() == -1:
raise Exception('failed to connect to the space navigator daemon')
+def spnav_x11_open(display, window):
+ display_ptr = pythonapi.PyCObject_AsVoidPtr(display)
+ libspnav.spnav_x11_open(display_ptr, window)
+
+def spnav_x11_window(window):
+ libspnav.spnav_x11_window(window)
+
def spnav_close():
libspnav.spnav_close()
@@ -69,6 +80,14 @@ def spnav_poll_event():
def spnav_remove_events(event_type):
return libspnav.spnav_remove_events(event_type)
+def spnav_x11_event(xevent):
+ ev = spnav_event()
+ ret = libspnav.spnav_x11_event(xevent, byref(ev))
+ if ret == 0:
+ return None
+ else:
+ return ev
+
if __name__ == '__main__':
spnav_open()
try: