From: Marc-André Lureau <marcandre.lureau@xxxxxxxxxx> Since 2.8, QEMU now longer creates QXL primary surfaces when using GL. This change broke client-side mouse mode, because Spice server relies on primary surface conditions. When GL is enabled, use GL scanout informations, similar to what red_qxl_get_allow_client_mouse() is doing. The main difference is that the GL surface doesn't have mouse_mode attached (what for?). NB: this code looks like it handles only first QXL instance only, and uses the whole scanout/surface size for the input table size, perhaps monitor-configs would be a better choice. Signed-off-by: Marc-André Lureau <marcandre.lureau@xxxxxxxxxx> --- server/red-qxl.c | 2 ++ server/reds.c | 8 +++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/server/red-qxl.c b/server/red-qxl.c index b6b3770..ba7b641 100644 --- a/server/red-qxl.c +++ b/server/red-qxl.c @@ -897,6 +897,8 @@ void spice_qxl_gl_scanout(QXLInstance *qxl, /* FIXME: find a way to coallesce all pending SCANOUTs */ dispatcher_send_message(qxl_state->dispatcher, RED_WORKER_MESSAGE_GL_SCANOUT, &payload); + + reds_update_client_mouse_allowed(qxl_state->reds); } SPICE_GNUC_VISIBLE diff --git a/server/reds.c b/server/reds.c index bd22333..a28da25 100644 --- a/server/reds.c +++ b/server/reds.c @@ -4250,10 +4250,16 @@ void reds_update_client_mouse_allowed(RedsState *reds) if (num_active_workers > 0) { GListIter it; QXLInstance *qxl; + SpiceMsgDisplayGlScanoutUnix *gl; allow_now = TRUE; FOREACH_QXL_INSTANCE(reds, it, qxl) { - if (red_qxl_get_primary_active(qxl)) { + if ((gl = red_qxl_get_gl_scanout(qxl))) { + x_res = gl->width; + y_res = gl->height; + red_qxl_put_gl_scanout(qxl, gl); + break; + } else if (red_qxl_get_primary_active(qxl)) { allow_now = red_qxl_get_allow_client_mouse(qxl, &x_res, &y_res); break; } -- 2.9.3 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel