From 8c2b816fc5bf9d30138ac068d1665e473c7cb4bf Mon Sep 17 00:00:00 2001 From: Sebastian Krzyszkowiak Date: Wed, 24 Oct 2018 16:37:48 +0200 Subject: [PATCH 1/2] SDL: set a hint to not bypass the window compositor Without that, window effects in KWin get suspended as soon as any qemu-sdl window becomes visible. While the SDL default makes sense for games, it's not really suitable for QEMU. Signed-off-by: Sebastian Krzyszkowiak Message-id: 20181024143748.4425-1-dos@dosowisko.net Signed-off-by: Gerd Hoffmann --- ui/sdl2.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ui/sdl2.c b/ui/sdl2.c index 2696b95c79..a10b6e3a08 100644 --- a/ui/sdl2.c +++ b/ui/sdl2.c @@ -786,6 +786,9 @@ static void sdl2_display_init(DisplayState *ds, DisplayOptions *o) SDL_GetError()); exit(1); } +#ifdef SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR /* only available since SDL 2.0.8 */ + SDL_SetHint(SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR, "0"); +#endif SDL_SetHint(SDL_HINT_GRAB_KEYBOARD, "1"); memset(&info, 0, sizeof(info)); SDL_VERSION(&info.version); From 9c956e646178fee8c14ce7dfae5a9d7cb901876c Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Fri, 12 Oct 2018 13:45:51 +0200 Subject: [PATCH 2/2] spice: prepare for upcoming spice-server change MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Future spice-server versions will call the client_monitors_config callback with the monitors list filtered to only include the monitors of the given display channel (aka QXLInstance). Luckily this is easily detectable at runtime, so we can prepare for that in advance and also make qemu compatible with both old and new spice-server versions. While being at it also use the console index instead of head number as array index. The later doesn't work correctly in case multiple display devices are present. Cc: spice-devel@lists.freedesktop.org Signed-off-by: Gerd Hoffmann Reviewed-by: Lukáš Hrázký Message-id: 20181012114551.28809-1-kraxel@redhat.com --- ui/spice-display.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/ui/spice-display.c b/ui/spice-display.c index 2f8adb6b9f..52f8cb5ae1 100644 --- a/ui/spice-display.c +++ b/ui/spice-display.c @@ -674,10 +674,28 @@ static int interface_client_monitors_config(QXLInstance *sin, memset(&info, 0, sizeof(info)); - head = qemu_console_get_head(ssd->dcl.con); - if (mc->num_of_monitors > head) { - info.width = mc->monitors[head].width; - info.height = mc->monitors[head].height; + if (mc->num_of_monitors == 1) { + /* + * New spice-server version which filters the list of monitors + * to only include those that belong to our display channel. + * + * single-head configuration (where filtering doesn't matter) + * takes this code path too. + */ + info.width = mc->monitors[0].width; + info.height = mc->monitors[0].height; + } else { + /* + * Old spice-server which gives us all monitors, so we have to + * figure ourself which entry we need. Array index is the + * channel_id, which is the qemu console index, see + * qemu_spice_add_display_interface(). + */ + head = qemu_console_get_index(ssd->dcl.con); + if (mc->num_of_monitors > head) { + info.width = mc->monitors[head].width; + info.height = mc->monitors[head].height; + } } trace_qemu_spice_ui_info(ssd->qxl.id, info.width, info.height);