Skip to content

Commit

Permalink
mouse: Save initial position yet even if xrel and yrel are 0.
Browse files Browse the repository at this point in the history
The X11 target sets mouse->last_x and last_y in EnterNotify and then calls
SDL_SendMouseMotion(), which throws away the new position because it matches
the mouse->last_x and last_y we just set, meaning that if the pointer is
in the window when it created, SDL_GetMouseState() will report a position of
0,0 until a MotionNotify event (the pointer moves) arrives and corrects the
mouse state.

Mostly fixes Bugzilla #1612.
  • Loading branch information
icculus committed Oct 9, 2019
1 parent b38a5ba commit cf092ec
Showing 1 changed file with 5 additions and 8 deletions.
13 changes: 5 additions & 8 deletions src/events/SDL_mouse.c
Expand Up @@ -381,19 +381,16 @@ SDL_PrivateSendMouseMotion(SDL_Window * window, SDL_MouseID mouseID, int relativ
yrel = y - mouse->last_y;
}

/* Drop events that don't change state */
if (!xrel && !yrel) {
#ifdef DEBUG_MOUSE
printf("Mouse event didn't change state - dropped!\n");
#endif
return 0;
}

/* Ignore relative motion when first positioning the mouse */
if (!mouse->has_position) {
xrel = 0;
yrel = 0;
mouse->has_position = SDL_TRUE;
} else if (!xrel && !yrel) { /* Drop events that don't change state */
#ifdef DEBUG_MOUSE
printf("Mouse event didn't change state - dropped!\n");
#endif
return 0;
}

/* Ignore relative motion positioning the first touch */
Expand Down

0 comments on commit cf092ec

Please sign in to comment.