Well, a couple of days have gone by, so I assume that items (a) and (b)

in the freeglut_cursor.c file's "Open issues" comment are now satisfactor-
ily closed.

I also partially implemented some error-checking, using my limited
understanding of how Xlib users are supposed to do this.  (No one commented
about the lack of error-checking, pro or con.  Perhaps someone will care to
comment now?)

At present, it just will print out a warning, via fgWarning().  In part
because I'm not sure what is best to do, and in part because failure to
set the cursor type is probably not a fatal problem.


git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@327 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
rkrolib 2003-11-10 00:32:15 +00:00
parent 85e34f0062
commit fb26d91989

View File

@ -47,6 +47,35 @@
/* -- INTERNAL FUNCTIONS --------------------------------------------------- */
#if TARGET_HOST_UNIX_X11
fgGetCursorError( Cursor cursor )
{
int ret = 0;
char buf[ 256 ];
switch( cursor )
{
case BadAlloc:
case BadFont:
case BadMatch:
case BadPixmap:
case BadValue:
XGetErrorText( fgDisplay.Display, cursor, buf, sizeof buf );
fgWarning( "Error in setting cursor:\n %s.", buf );
ret = cursor;
break;
default:
/* no error */
break;
}
return ret;
}
#endif
/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
/*
@ -60,20 +89,19 @@ void FGAPIENTRY glutSetCursor( int cursorID )
#if TARGET_HOST_UNIX_X11
/*
* Open issues:
* (X) GLUT_CURSOR_NONE doesn't do what it should. We can probably
* build an empty pixmap for it, though, quite painlessly.
* (X) Are we allocating resources, or causing X to do so?
* If yes, we should arrange to deallocate!
* (c) No error checking. Is that a problem?
* (d) FULL_CROSSHAIR demotes to plain CROSSHAIR. Old GLUT allows
* (a) Partial error checking. Is that a problem?
* Is fgGetCursorError() correct? Should we abort on errors?
* Should there be a freeglut-wide X error handler? Should
* we use the X error-handler mechanism?
* (b) FULL_CROSSHAIR demotes to plain CROSSHAIR. Old GLUT allows
* for this, but if there is a system that easily supports a full-
* window (or full-screen) crosshair, we might consider it.
* (e) Out-of-range cursor-types are ignored. Should we abort?
* Print a warning message?
* (c) Out-of-range cursor-types generate warnings. Should we abort?
*/
{
Cursor cursor;
Pixmap no_cursor; /* Used for GLUT_CURSOR_NONE */
int error = 0;
#define MAP_CURSOR(a,b) \
case a: \
@ -107,6 +135,7 @@ void FGAPIENTRY glutSetCursor( int cursorID )
XC_bottom_right_corner);
MAP_CURSOR( GLUT_CURSOR_BOTTOM_LEFT_CORNER, XC_bottom_left_corner);
/* MAP_CURSOR( GLUT_CURSOR_NONE, XC_bogosity); */
case GLUT_CURSOR_NONE:
{
static unsigned char no_cursor_bits[ 32 ];
@ -130,10 +159,14 @@ void FGAPIENTRY glutSetCursor( int cursorID )
case GLUT_CURSOR_INHERIT:
break;
default:
fgWarning( "Unknown cursor type: %d\n", cursorID );
return;
}
error = fgGetCursorError( cursor );
if( GLUT_CURSOR_INHERIT == cursorID )
XUndefineCursor( fgDisplay.Display,
fgStructure.Window->Window.Handle );