From: Michel B. <mic...@fr...> - 2010-05-03 07:35:19
|
Michel Briand <mic...@fr...> - Sun, 2 May 2010 14:00:04 +0200 > >Dave Joubert <dav...@go...> - Sun, 2 May 2010 11:36:59 >+0100 > >>Hi Michel, >> >>I wrote: >>> >>>>Maybe the problem is within the mainloop function. It would certainly >>>>be the most logical place to get the current coordinates and act on a >>>>change (if mouse position is NOT handled via callbacks). >>>> >> >>On 2 May 2010 11:05, Michel Briand <mic...@fr...> wrote: >>> >>> Effectively, >>> >>> the problem is two fold. There is the main loop and the Motif >>> window/widgets. AFAIK the callbacks setup for Motif are used only for >>> the main menubar. >>> >>> If FreeWRL is compiled without Motif (--with-target=x11) then you would >>> have a program that uses only the lean event loop. If it is compiled >>> with Motif then events will be filtered out and passed to the Motif >>> library (except for events targeting the GL window). >>> >>> >>> http://www.web3d.org/x3d/content/examples/Conformance/Sensors/TouchSensor/touchtime.x3d >>> >>> Tell me if this is the good test case to base upon for debugging. >>> >> >>Yes, it is a good test case, as is freewrl/tests/48.wrl >> >>My investigation agrees with yours, ie Motif 'swallows' the mouse >>events, and therefore mouse events never trigger the critical piece of >>code: >> >>Note: line numbers are displaced due to my fiddling >> >>281-/* Main eventloop for FreeWRL!!! */ >>282-#ifndef IPHONE >>283:void EventLoop() { >>284- >>285-#if defined(TARGET_X11) || defined(TARGET_MOTIF) >>286- Cursor cursor; >>287-#endif >>288- while (refreshOK) { >>-- >>375- */ >>376- /* REMARK: Do we want to process all pending events ? */ >>377- >>378-#if defined(TARGET_X11) >>379- /* We are running our own bare window */ >>380: while (XPending(Xdpy)) { >>381- XNextEvent(Xdpy, &event); >>382- handle_Xevents(event); >>383- } >>384-#endif >>385- >>386-#if defined(TARGET_MOTIF) >>387: printf("%s %d EventLoop %d\n",__FILE__, __LINE__, XtAppPending(Xtcx)); >>388- sleep(1) ; >>389-#endif >>390- >>391-#if defined(TARGET_MOTIF) >>392- /* any updates to the menu buttons? Because of Linux threading >>393- issues, we try to make all updates come from 1 thread */ >>394- frontendUpdateButtons(); >>395- >>396- /* do the Xt events here. */ >> >>NEVER triggers for plain mouse movements >> >>Maybe we should just peek the mouse coordinates, and do some of our >>own processing..... >> >>397: while (XtAppPending(Xtcx)!= 0) { >>398- XAnyEvent *aev; >>399- >>400- XtAppNextEvent(Xtcx, &event); >>401- >>402- aev = &event.xany; > > >I've setup a quick test to show the problem : > >make clean > >make CFLAGS="-DSENSVERBOSE -DXEVENT_VERBOSE" > >Launch FreeWRL with the test file from web3d [1]. > >You'll see that button events are captured by FreeWRL but that motion >events are NOT. > >I'll try a fix to make those motion events pass into the main event >loop. > > >Cheers, >Michel > >[1] http://www.web3d.org/x3d/content/examples/Conformance/Sensors/TouchSensor/touchtime.x3d > PROBLEM APPARENTLY SOLVED. Modified: MainLoop.c and fwMotifWindow.c. Latest CVS comment: Track down problem when loosing mouse motion event through Motif event loop. Adding a proper callback to the GL draw area solve the problem. Tested and validated with 22.wrl 25.wrl 26.wrl 27.wrl 46.wrl. Cheers, Michel |