On Wed, Aug 06, 2008 at 08:58:49AM -0500, Drake Wilson wrote: > Attached is a draft patch that fixes this in my configuration; I don't > know whether it's good for everyone or not. One problem is that I > don't know whether earlier versions of SDL included the Meta modifier > or mapped it to Alt themselves, which I suspect may be the original > reason that this is now semi-broken for people who have only Meta > keysyms assigned.
Can you test this patch against current qemu svn and post it the qemu-devel mailing list? > ---> Drake Wilson > --- sdl.c.orig 2008-01-06 13:38:42.000000000 -0600 > +++ sdl.c 2008-08-06 08:53:32.000000000 -0500 > @@ -40,7 +40,9 @@ > static int gui_key_modifier_pressed; > static int gui_keysym; > static int gui_fullscreen_initial_grab; > -static int gui_grab_code = KMOD_LALT | KMOD_LCTRL; > +static int gui_grab_mods = KMOD_LALT | KMOD_LCTRL | KMOD_LMETA; > +static int gui_grab_req_all = KMOD_LCTRL; /* possibly modified on init */ > +static int gui_grab_req_any = KMOD_LALT | KMOD_LMETA; > static uint8_t modifiers_state[256]; > static int width, height; > static SDL_Cursor *sdl_cursor_normal; > @@ -303,20 +305,20 @@ > buttons |= MOUSE_EVENT_MBUTTON; > > if (kbd_mouse_is_absolute()) { > - if (!absolute_enabled) { > - sdl_hide_cursor(); > - if (gui_grab) { > - sdl_grab_end(); > - } > - absolute_enabled = 1; > - } > - > - SDL_GetMouseState(&dx, &dy); > - dx = dx * 0x7FFF / width; > - dy = dy * 0x7FFF / height; > + if (!absolute_enabled) { > + sdl_hide_cursor(); > + if (gui_grab) { > + sdl_grab_end(); > + } > + absolute_enabled = 1; > + } > + > + SDL_GetMouseState(&dx, &dy); > + dx = dx * 0x7FFF / width; > + dy = dy * 0x7FFF / height; > } else if (absolute_enabled) { > - sdl_show_cursor(); > - absolute_enabled = 0; > + sdl_show_cursor(); > + absolute_enabled = 0; > } else if (guest_cursor) { > SDL_GetMouseState(&dx, &dy); > dx -= guest_x; > @@ -363,13 +365,10 @@ > case SDL_KEYDOWN: > case SDL_KEYUP: > if (ev->type == SDL_KEYDOWN) { > - if (!alt_grab) { > - mod_state = (SDL_GetModState() & gui_grab_code) == > - gui_grab_code; > - } else { > - mod_state = (SDL_GetModState() & (gui_grab_code | > KMOD_LSHIFT)) == > - (gui_grab_code | KMOD_LSHIFT); > - } > + SDLMod sdl_mod_state = SDL_GetModState(); > + mod_state = (((sdl_mod_state & gui_grab_req_all) == > + gui_grab_req_all) && > + ((sdl_mod_state & gui_grab_req_any) != 0)); > gui_key_modifier_pressed = mod_state; > if (gui_key_modifier_pressed) { > int keycode; > @@ -430,12 +429,7 @@ > } > } > } else if (ev->type == SDL_KEYUP) { > - if (!alt_grab) { > - mod_state = (ev->key.keysym.mod & gui_grab_code); > - } else { > - mod_state = (ev->key.keysym.mod & > - (gui_grab_code | KMOD_LSHIFT)); > - } > + mod_state = (ev->key.keysym.mod & gui_grab_mods); > if (!mod_state) { > if (gui_key_modifier_pressed) { > gui_key_modifier_pressed = 0; > @@ -468,7 +462,7 @@ > case SDL_QUIT: > if (!no_quit) { > qemu_system_shutdown_request(); > - vm_start(); /* In case we're paused */ > + vm_start(); /* In case we're paused */ > } > break; > case SDL_MOUSEMOTION: > @@ -630,6 +624,9 @@ > SDL_EnableUNICODE(1); > gui_grab = 0; > > + if (alt_grab) > + gui_grab_req_all |= KMOD_LSHIFT; > + > sdl_cursor_hidden = SDL_CreateCursor(&data, &data, 8, 1, 0, 0); > sdl_cursor_normal = SDL_GetCursor(); > > _______________________________________________ > pkg-qemu-devel mailing list > [EMAIL PROTECTED] > http://lists.alioth.debian.org/mailman/listinfo/pkg-qemu-devel -- "rm -rf" only sounds scary if you don't have backups -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]