55include " cefpython.pyx"
66
77cdef int g_pythonCallbackMaxId = 0
8+ # [callbackId] = (browserId, frameId, func)
89cdef dict g_pythonCallbacks = {}
910
1011# TODO: send callbackId using CefBinaryNamedValue, see:
11- # http://www.magpcss.org/ceforum/viewtopic.php?f=6&t=10881
12+ # http://www.magpcss.org/ceforum/viewtopic.php?f=6&t=10881
13+
1214cdef struct PythonCallback:
1315 int callbackId
1416 char uniqueCefBinaryValueSize[16 ]
1517
1618cdef CefRefPtr[CefBinaryValue] PutPythonCallback(
1719 object browserId,
1820 object frameId,
19- object function
21+ object func
2022 ) except * :
2123 global g_pythonCallbacks
2224 global g_pythonCallbackMaxId
@@ -29,12 +31,11 @@ cdef CefRefPtr[CefBinaryValue] PutPythonCallback(
2931 pyCallback.callbackId = g_pythonCallbackMaxId
3032 cdef CefRefPtr[CefBinaryValue] binaryValue = CefBinaryValue_Create(
3133 & pyCallback, sizeof(pyCallback))
32- # [0] browserId, [1] frameId, [2] function.
33- g_pythonCallbacks[g_pythonCallbackMaxId] = (browserId, frameId, function)
34+ g_pythonCallbacks[g_pythonCallbackMaxId] = (browserId, frameId, func)
3435 return binaryValue
3536
3637cdef public void RemovePythonCallbacksForFrame(
37- int frameId
38+ object frameId
3839 ) except * with gil:
3940 # Cannot remove elements from g_pythonCallbacks (dict) while iterating.
4041 cdef list toRemove = []
@@ -46,8 +47,8 @@ cdef public void RemovePythonCallbacksForFrame(
4647 for callbackId in toRemove:
4748 del g_pythonCallbacks[callbackId]
4849 Debug(" RemovePythonCallbacksForFrame(): " \
49- " removed python callback, callbackId = %s " \
50- % callbackId)
50+ " removed python callback, callbackId = %s " \
51+ % callbackId)
5152 except :
5253 (exc_type, exc_value, exc_trace) = sys.exc_info()
5354 sys.excepthook(exc_type, exc_value, exc_trace)
@@ -62,33 +63,28 @@ cdef void RemovePythonCallbacksForBrowser(
6263 for callbackId in toRemove:
6364 del g_pythonCallbacks[callbackId]
6465 Debug(" RemovePythonCallbacksForBrowser(): " \
65- " removed python callback, callbackId = %s " \
66- % callbackId)
66+ " removed python callback, callbackId = %s " \
67+ % callbackId)
6768
6869cdef public cpp_bool ExecutePythonCallback(
6970 CefRefPtr[CefBrowser] cefBrowser,
7071 int callbackId,
71- CefRefPtr[CefListValue] cefFunctionArguments ,
72+ CefRefPtr[CefListValue] cefFuncArgs ,
7273 ) except * with gil:
73- cdef object function
74- cdef list functionArguments
74+ cdef object func
75+ cdef list funcArgs
7576 cdef object returnValue
7677 try :
7778 global g_pythonCallbacks
7879 if callbackId in g_pythonCallbacks:
79- # [0] browserId, [1] frameId, [2] function.
80- function = g_pythonCallbacks[callbackId][2 ]
81- functionArguments = CefListValueToPyList(
82- cefBrowser, cefFunctionArguments)
83- returnValue = function(* functionArguments)
84- if returnValue is not None :
85- Debug(" ExecutePythonCallback() WARNING: function returned" \
86- " value, but returning values to javascript is not " \
87- " supported, function name = %s " % function.__name__ )
80+ func = g_pythonCallbacks[callbackId][2 ]
81+ funcArgs = CefListValueToPyList(
82+ cefBrowser, cefFuncArgs)
83+ func(* funcArgs)
8884 return True
8985 else :
9086 Debug(" ExecutePythonCallback() FAILED: callback not found, " \
91- " callbackId = %s " % callbackId)
87+ " callbackId = %s " % callbackId)
9288 return False
9389 except :
9490 (exc_type, exc_value, exc_trace) = sys.exc_info()
0 commit comments