X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fx11%2Ffg_main_x11.c;h=c77f5e4c6fb42aec05d1be09f3f4dc71fb15d7cd;hb=41a0008578e0c3dff76f9706920c9a9b062a405d;hp=e72db37b562e1e3447ffb91d1b67837eb875e8ef;hpb=5b3d339481bac6dbaeb599bffc1325f716585bfe;p=freeglut diff --git a/src/x11/fg_main_x11.c b/src/x11/fg_main_x11.c index e72db37..c77f5e4 100644 --- a/src/x11/fg_main_x11.c +++ b/src/x11/fg_main_x11.c @@ -40,6 +40,8 @@ # define VFPRINTF(s,f,a) #endif +#include "fg_main.h" + /* * Try to get the maximum value allowed for ints, falling back to the minimum * guaranteed by ISO C99 if there is no suitable header. @@ -55,6 +57,9 @@ # define MIN(a,b) (((a)<(b)) ? (a) : (b)) #endif +/* used in the event handling code to match and discard stale mouse motion events */ +static Bool match_motion(Display *dpy, XEvent *xev, XPointer arg); + /* * TODO BEFORE THE STABLE RELEASE: * @@ -68,9 +73,7 @@ /* - * Handle a window configuration change. When no reshape - * callback is hooked, the viewport size is updated to - * match the new window size. + * Request a window resize */ void fgPlatformReshapeWindow ( SFG_Window *window, int width, int height ) { @@ -295,7 +298,7 @@ static const char* fghColormapStateToString( int state ) } } -static void fghPrintEvent( XEvent *event ) +__fg_unused static void fghPrintEvent( XEvent *event ) { switch( event->type ) { @@ -788,6 +791,13 @@ void fgPlatformProcessSingleEvent ( void ) case MotionNotify: { + /* if GLUT_SKIP_STALE_MOTION_EVENTS is true, then discard all but + * the last motion event from the queue + */ + if(fgState.SkipStaleMotion) { + while(XCheckIfEvent(fgDisplay.pDisplay.Display, &event, match_motion, 0)); + } + GETWINDOW( xmotion ); GETMOUSE( xmotion ); @@ -1077,6 +1087,11 @@ void fgPlatformProcessSingleEvent ( void ) } +static Bool match_motion(Display *dpy, XEvent *xev, XPointer arg) +{ + return xev->type == MotionNotify; +} + void fgPlatformMainLoopPreliminaryWork ( void ) { }