# define VFPRINTF(s,f,a)
#endif
+
/*
* Try to get the maximum value allowed for ints, falling back to the minimum
* guaranteed by ISO C99 if there is no suitable header.
# 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:
*
*/
-/*
- * Handle a window configuration change. When no reshape
- * callback is hooked, the viewport size is updated to
- * match the new window size.
- */
-void fgPlatformReshapeWindow ( SFG_Window *window, int width, int height )
-{
- XResizeWindow( fgDisplay.pDisplay.Display, window->Window.Handle,
- width, height );
- XFlush( fgDisplay.pDisplay.Display ); /* XXX Shouldn't need this */
-}
-
-
-/*
- * A static helper function to execute display callback for a window
- */
-void fgPlatformDisplayWindow ( SFG_Window *window )
-{
- fghRedrawWindow ( window ) ;
-}
-
fg_time_t fgPlatformSystemTime ( void )
{
}
}
-static void fghPrintEvent( XEvent *event )
+__fg_unused static void fghPrintEvent( XEvent *event )
{
switch( event->type ) {
switch( event.type )
{
case ClientMessage:
- if(fgIsSpaceballXEvent(&event)) {
- fgSpaceballHandleXEvent(&event);
- break;
- }
+ if (fgStructure.CurrentWindow)
+ if(fgIsSpaceballXEvent(&event)) {
+ fgSpaceballHandleXEvent(&event);
+ break;
+ }
/* Destroy the window when the WM_DELETE_WINDOW message arrives */
if( (Atom) event.xclient.data.l[ 0 ] == fgDisplay.pDisplay.DeleteWindow )
{
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 );
}
+static Bool match_motion(Display *dpy, XEvent *xev, XPointer arg)
+{
+ return xev->type == MotionNotify;
+}
+
void fgPlatformMainLoopPreliminaryWork ( void )
{
}