# HG changeset patch # User Patrice Mandin # Date 1163945252 0 # Node ID 37dab4a917c4fa757ca8fe1625babd651582da0e # Parent 1a327643e74193dd51a24d2c1153dbfbb80da883 Check video driver mouse cursor pointers before using them diff -r 1a327643e741 -r 37dab4a917c4 src/video/SDL_cursor.c --- a/src/video/SDL_cursor.c Mon Nov 13 03:58:22 2006 +0000 +++ b/src/video/SDL_cursor.c Sun Nov 19 14:07:32 2006 +0000 @@ -188,7 +188,7 @@ it needs to hide the old cursor before (possibly) showing the new one. (But don't erase NULL cursor) */ - if ( SDL_cursor ) { + if ( SDL_cursor && video->ShowWMCursor ) { video->ShowWMCursor(this, NULL); } } @@ -198,8 +198,11 @@ /* Draw the new mouse cursor */ if ( SDL_cursor && (SDL_cursorstate&CURSOR_VISIBLE) ) { /* Use window manager cursor if possible */ - if ( SDL_cursor->wm_cursor && - video->ShowWMCursor(this, SDL_cursor->wm_cursor) ) { + int show_wm_cursor = 0; + if ( SDL_cursor->wm_cursor && video->ShowWMCursor ) { + show_wm_cursor = video->ShowWMCursor(this, SDL_cursor->wm_cursor); + } + if ( show_wm_cursor ) { SDL_cursorstate &= ~CURSOR_USINGSW; } else { SDL_cursorstate |= CURSOR_USINGSW; @@ -219,7 +222,9 @@ SDL_EraseCursor(SDL_VideoSurface); } else { if ( video ) { - video->ShowWMCursor(this, NULL); + if ( video->ShowWMCursor ) { + video->ShowWMCursor(this, NULL); + } } } } @@ -248,7 +253,9 @@ SDL_free(cursor->save[0]); } if ( video && cursor->wm_cursor ) { - video->FreeWMCursor(this, cursor->wm_cursor); + if ( video->FreeWMCursor ) { + video->FreeWMCursor(this, cursor->wm_cursor); + } } SDL_free(cursor); }