[Spice-devel] [PATCH spice] gl: fix client mouse mode

minava at t-online.de minava at t-online.de
Wed Mar 1 12:20:13 UTC 2017


Am 01.03.2017 um 12:48 schrieb Frediano Ziglio:
>
>     Am Mon, 30 Jan 2017 16:50:05 +0400 schrieb marcandre.lureau:
>
>
>      > From: Marc-André Lureau <marcandre.lureau at redhat.com>
>      >
>      > 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 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;
>      >              }
>
>     Hi,
>
>
>     I have tried virgl with qemu 2.8, spice 13.3 and a fedora rawhide
>     guest but the mouse pointer (usbtablet) didn't move, I was just able
>     to get the context menu on the desktop using the right mouse button.
>     Now I applied this patch and it works for me, thank you!
>
> Does this patch solve the problem too?
>
>
> diff --git a/server/red-qxl.c b/server/red-qxl.c
> index b6b3770..1b83c50 100644
> --- a/server/red-qxl.c
> +++ b/server/red-qxl.c
> @@ -897,6 +897,13 @@ 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);
> +
> +    qxl_state->x_res = width;
> +    qxl_state->y_res = height;
> +    qxl_state->use_hardware_cursor = TRUE;
> +    qxl_state->primary_active = TRUE;
> +
> +    reds_update_client_mouse_allowed(qxl_state->reds);
>   }
>
>   SPICE_GNUC_VISIBLE
>
>
> Frediano
>

Hi,

yes, by applying this patch instead of the other one it works, too


More information about the Spice-devel mailing list