[Spice-devel] [PATCH spice] gl: fix client mouse mode
Christophe de Dinechin
christophe at dinechin.org
Wed Mar 1 13:40:19 UTC 2017
> On 30 Jan 2017, at 13:50, marcandre.lureau at redhat.com wrote:
>
> From: Marc-André Lureau <marcandre.lureau at redhat.com>
>
> Since 2.8, QEMU now longer creates QXL primary surfaces when using
Typo, “no longer"
> 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 at redhat.com>
> ---
> 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 b6b3770b..ba7b641a 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 40c94851..a89c5e90 100644
> --- a/server/reds.c
> +++ b/server/reds.c
> @@ -4256,10 +4256,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.11.0.295.gd7dffce1c.dirty
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
More information about the Spice-devel
mailing list