All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.