* [PATCH] fix SDL mouse events processing
@ 2008-07-29 9:59 Stefano Stabellini
0 siblings, 0 replies; only message in thread
From: Stefano Stabellini @ 2008-07-29 9:59 UTC (permalink / raw)
To: xen-devel; +Cc: Ian Jackson, Samuel Thibault
Hi all,
this patch fixes some SDL mouse event related issues; it was originally
posted on qemu-devel by Samuel:
http://lists.gnu.org/archive/html/qemu-devel/2008-03/msg00049.html
Signed-off-by: Samuel Thibault <samuel.thibault@eu.citrix.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
diff --git a/sdl.c b/sdl.c
index 72e7d82..9afd884 100644
--- a/sdl.c
+++ b/sdl.c
@@ -492,8 +492,6 @@ static void sdl_grab_start(void)
{
sdl_hide_cursor();
SDL_WM_GrabInput(SDL_GRAB_ON);
- /* dummy read to avoid moving the mouse */
- SDL_GetRelativeMouseState(NULL, NULL);
gui_grab = 1;
sdl_update_caption();
}
@@ -685,39 +683,37 @@ static void sdl_refresh(DisplayState *ds)
absolute_enabled) {
int dx, dy, state;
state = SDL_GetRelativeMouseState(&dx, &dy);
- sdl_send_mouse_event(dx, dy, 0, state);
+ if (dx || dy)
+ sdl_send_mouse_event(dx, dy, 0, state);
}
break;
case SDL_MOUSEBUTTONUP:
- if (gui_grab || kbd_mouse_is_absolute()) {
- int dx, dy, state;
- state = SDL_GetRelativeMouseState(&dx, &dy);
- sdl_send_mouse_event(dx, dy, 0, state);
- }
- break;
case SDL_MOUSEBUTTONDOWN:
{
SDL_MouseButtonEvent *bev = &ev->button;
if (!gui_grab && !kbd_mouse_is_absolute()) {
if (ev->type == SDL_MOUSEBUTTONDOWN &&
- (bev->state & SDL_BUTTON_LMASK)) {
+ (bev->button == SDL_BUTTON_LEFT)) {
/* start grabbing all events */
sdl_grab_start();
}
} else {
- int dx, dy, dz, state;
+ int dz, state;
dz = 0;
- state = SDL_GetRelativeMouseState(&dx, &dy);
+ state = SDL_GetMouseState(NULL, NULL);
+ if (ev->type == SDL_MOUSEBUTTONDOWN) {
+ state |= SDL_BUTTON(bev->button);
+ } else {
+ state &= ~SDL_BUTTON(bev->button);
+ }
#ifdef SDL_BUTTON_WHEELUP
- if (bev->button == SDL_BUTTON_WHEELUP) {
+ if (bev->button == SDL_BUTTON_WHEELUP && ev->type == SDL_MOUSEBUTTONDOWN) {
dz = -1;
- } else if (bev->button == SDL_BUTTON_WHEELDOWN) {
+ } else if (bev->button == SDL_BUTTON_WHEELDOWN && ev->type == SDL_MOUSEBUTTONDOWN) {
dz = 1;
- } else {
- state = bev->button | state;
}
-#endif
- sdl_send_mouse_event(dx, dy, dz, state);
+#endif
+ sdl_send_mouse_event(0, 0, dz, state);
}
}
break;
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2008-07-29 9:59 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-07-29 9:59 [PATCH] fix SDL mouse events processing Stefano Stabellini
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.