I am trying to use x11/xlib from occt but I am facing this error:
In the following code:
...
proc processMessage*(this: var XwWindow; theListener: var AIS_ViewController;
theMsg: var XEvent): bool {.cdecl, importcpp: "ProcessMessage".} # <-------------
proc main =
var aViewer:OcctAisHello
(aViewer.myContext, aViewer.myView) = getContextAndView()
# X11 event loop
var aWindow:Handle[Xw_Window] = newHandle( cast[ptr Xw_Window]( get(window( *aViewer.view() )) ) )
var aDispConn:Handle[Aspect_DisplayConnection] = getDisplayConnection(*driver( *viewer(*aViewer.view() )))
var display = getDisplayAspect( *aDispConn )
var event: XEvent # <--------------
var anDisplay = cast[ptr Display](display)
while true:
discard XNextEvent(anDisplay, event.addr)
discard (*aWindow).processMessage(aViewer, event) # <--------------
main()
y get the error:
/home/jose/.cache/nim/viewer04_d/@mviewer04.nim.cpp: In function 'void main__viewer4852_467()':
/home/jose/.cache/nim/viewer04_d/@mviewer04.nim.cpp:1031:68: error: cannot convert 'tyObject_XEvent__EZvRvOUywFnBp4PzilZBoA' to 'XEvent&' {aka '_XEvent&'}
1031 | (void)((* aWindow).ProcessMessage(aViewer, event));
| ^~~~~
| |
| tyObject_XEvent__EZvRvOUywFnBp4PzilZBoA
In file included from /home/jose/.cache/nim/viewer04_d/@mviewer04.nim.cpp:19:
/usr/include/opencascade/Xw_Window.hxx:129:56: note: initializing argument 2 of 'virtual bool Xw_Window::ProcessMessage(Aspect_WindowInputListener&, XEvent&)'
129 | XEvent& theMsg);
| ~~~~~~~~^~~~~~
Error: execution of an external compiler program 'g++ -c -std=gnu++14 -funsigned-char -w -fmax-errors=3 -fpermissive -I/usr/include/opencascade/ -I/usr/import/opencascade/ -I/home/jose/.choosenim/toolchains/nim-1.6.6/lib -I/home/jose/src/nimlang/occt.nim/examples -o /home/jose/.cache/nim/viewer04_d/@mviewer04.nim.cpp.o /home/jose/.cache/nim/viewer04_d/@mviewer04.nim.cpp' failed with exit code: 1
processMessage has the argument: theMsg: var XEvent and later I define var event: XEvent. I don't understand why, when I call discard (*aWindow).processMessage(aViewer, event) it looks like if the were different types.
You can just convert the arguments when calling.
proc processMessage*(this: var XwWindow; theListener: var AIS_ViewController;
theMsg: var XEvent): bool {.cdecl, importcpp: "#.ProcessMessage(('2) #, ('3) #)".}