Message ID | 20171023210803.20998-6-makovick@gmail.com |
---|---|
State | New |
Headers | show |
Series | [1/7] sdl2: Fix broken display updating after the window is hidden | expand |
Why? Also I think this breaks the pointer in case window size doesn't match surface size. cheers, Gerd
Hi, this patch fixes the exact case you mentioned. Currently, with surface size smaller than the window, the pointer is confined to the top left corner when using the absolute mode (-usbdevice tablet). On Wed, Nov 1, 2017 at 11:43 AM Gerd Hoffmann <kraxel@redhat.com> wrote: > Why? > > Also I think this breaks the pointer in case window size doesn't match > surface size. > > cheers, > Gerd > > -- Jindřich Makovička
On Thu, 2017-11-02 at 17:07 +0000, Jindřich Makovička wrote: > Hi, > > this patch fixes the exact case you mentioned. Currently, with > surface size > smaller than the window, the pointer is confined to the top left > corner > when using the absolute mode (-usbdevice tablet). Tracked down. Seems to be broken since commit 46522a82236ea0cf9011b89896d2d8f8ddaf2443. SDL doesn't only scale window output for us, but also pointer input, so qemu doesn't need to do this by itself any more. Patch is correct then. cheers, Gerd
diff --git a/ui/sdl2.c b/ui/sdl2.c index fa54353430..092eab37dc 100644 --- a/ui/sdl2.c +++ b/ui/sdl2.c @@ -276,32 +276,8 @@ static void sdl_send_mouse_event(struct sdl2_console *scon, int dx, int dy, } if (qemu_input_is_absolute()) { - int scr_w, scr_h; - int max_w = 0, max_h = 0; - int off_x = 0, off_y = 0; - int cur_off_x = 0, cur_off_y = 0; - int i; - - for (i = 0; i < sdl2_num_outputs; i++) { - struct sdl2_console *thiscon = &sdl2_console[i]; - if (thiscon->real_window && thiscon->surface) { - SDL_GetWindowSize(thiscon->real_window, &scr_w, &scr_h); - cur_off_x = thiscon->x; - cur_off_y = thiscon->y; - if (scr_w + cur_off_x > max_w) { - max_w = scr_w + cur_off_x; - } - if (scr_h + cur_off_y > max_h) { - max_h = scr_h + cur_off_y; - } - if (i == scon->idx) { - off_x = cur_off_x; - off_y = cur_off_y; - } - } - } - qemu_input_queue_abs(scon->dcl.con, INPUT_AXIS_X, off_x + x, 0, max_w); - qemu_input_queue_abs(scon->dcl.con, INPUT_AXIS_Y, off_y + y, 0, max_h); + qemu_input_queue_abs(scon->dcl.con, INPUT_AXIS_X, x, 0, surface_width(scon->surface)); + qemu_input_queue_abs(scon->dcl.con, INPUT_AXIS_Y, y, 0, surface_height(scon->surface)); } else { if (guest_cursor) { x -= guest_x;