[Spice-devel] [PATCH spice-gtk 1/4] gtk: add spice_main_request_mouse_mode()

Victor Toso lists at victortoso.com
Tue Nov 10 06:49:32 PST 2015


Hi,

On Tue, Nov 10, 2015 at 02:05:23PM +0100, Marc-André Lureau wrote:
> Hi
>
> On Tue, Nov 10, 2015 at 11:05 AM, Victor Toso <lists at victortoso.com> wrote:
> > Hi,
> >
> > On Mon, Nov 09, 2015 at 03:02:07PM +0100, Marc-André Lureau wrote:
> >> Send a SpiceMsgcMainMouseModeRequest message to request a mouse mode.
> >>
> >> This allows to switch between client/absolute and server/relative mouse
> >> modes.
> >>
> >> This is necessary for some applications that require pointer
> >> re-positioning, which we can't provide through a remote protocol easily
> >> with client pointer (no such hardware-level message exists afaik).
> >
> > I've retested again in top of rhel7 server/qemu and upstream
> > server/qemu. On rhel7, the mouse pointer barely moves and it goes back
> > againt to its original position in top-left corner. On upstream, the
> > mouse pointer does not move at all.
>
> Are you running the client in a vm? If yes, you can't use server-side
> mouse this way, because there is no way for the client cursor to be
> wrapped.
> Please test server-side cursor mode on bare-metal.

All tests client was on bare-metal, f23 with upstream client.
rhel7 server is also bare-metal desktop with some VMs running.

>
> > I did not lose my pointer this time (I could toggle back with
> > Shift+F12).
> >
> > All VMs has ps/2 device. The mouse pointer should keep moving, right?
>
> It needs -machine ..vmport=off to work properly as explained:
>
> http://libvirt.org/git/?p=libvirt.git;a=commitdiff;h=208abbcbd7b7225d4506cfbb230cb2cb3fce87f8
>

Okay, I'll retest on rhel7 again but even with vmport=off, this still
fails with upstream spice-server. Mouse pointer did not change:
on client=host, upstream spice-server.

Btw, your patches look good, I'm just trying to understand the change
and check if there are any issues.

Also, it would be nice to include the information regarding vmport=off
requirement, maybe in the API.

Do you think the mouse mode should still change if vmport=off is not
set?

Thanks,
  toso

> > Some videos:
> > http://people.freedesktop.org/~victortoso/videos/spice/
> >
> > Cheers,
> >   Victor Toso
> >
> >>
> >> Signed-off-by: Marc-André Lureau <marcandre.lureau at redhat.com>
> >> ---
> >>  doc/reference/spice-gtk-sections.txt |  1 +
> >>  src/channel-main.c                   | 29 +++++++++++++++++++++++++++++
> >>  src/channel-main.h                   |  2 ++
> >>  src/map-file                         |  1 +
> >>  src/spice-glib-sym-file              |  1 +
> >>  5 files changed, 34 insertions(+)
> >>
> >> diff --git a/doc/reference/spice-gtk-sections.txt b/doc/reference/spice-gtk-sections.txt
> >> index d8c4c79..9628471 100644
> >> --- a/doc/reference/spice-gtk-sections.txt
> >> +++ b/doc/reference/spice-gtk-sections.txt
> >> @@ -70,6 +70,7 @@ spice_main_update_display
> >>  spice_main_update_display_enabled
> >>  spice_main_send_monitor_config
> >>  spice_main_agent_test_capability
> >> +spice_main_request_mouse_mode
> >>  spice_main_clipboard_selection_grab
> >>  spice_main_clipboard_selection_notify
> >>  spice_main_clipboard_selection_release
> >> diff --git a/src/channel-main.c b/src/channel-main.c
> >> index 0eb40b9..f4213d7 100644
> >> --- a/src/channel-main.c
> >> +++ b/src/channel-main.c
> >> @@ -1610,6 +1610,35 @@ static void agent_stopped(SpiceMainChannel *channel)
> >>      set_agent_connected(channel, FALSE);
> >>  }
> >>
> >> +/**
> >> + * spice_main_request_mouse_mode:
> >> + * @channel: a %SpiceMainChannel
> >> + * @mode: a SPICE_MOUSE_MODE
> >> + *
> >> + * Request a mouse mode to the server. The server may not be able to
> >> + * change the mouse mode, but spice-gtk will try to request it
> >> + * when possible.
> >> + *
> >> + * Since: 0.31
> >> + **/
> >> +void spice_main_request_mouse_mode(SpiceMainChannel *channel, int mode)
> >> +{
> >> +    SpiceMsgcMainMouseModeRequest req = {
> >> +        .mode = mode,
> >> +    };
> >> +    SpiceMsgOut *out;
> >> +
> >> +    g_return_if_fail(SPICE_IS_MAIN_CHANNEL(channel));
> >> +
> >> +    if (spice_channel_get_read_only(SPICE_CHANNEL(channel)))
> >> +        return;
> >> +
> >> +    CHANNEL_DEBUG(channel, "request mouse mode %d", mode);
> >> +    out = spice_msg_out_new(SPICE_CHANNEL(channel), SPICE_MSGC_MAIN_MOUSE_MODE_REQUEST);
> >> +    out->marshallers->msgc_main_mouse_mode_request(out->marshaller, &req);
> >> +    spice_msg_out_send(out);
> >> +}
> >> +
> >>  /* coroutine context */
> >>  static void set_mouse_mode(SpiceMainChannel *channel, uint32_t supported, uint32_t current)
> >>  {
> >> diff --git a/src/channel-main.h b/src/channel-main.h
> >> index 6b94c25..3fe8df1 100644
> >> --- a/src/channel-main.h
> >> +++ b/src/channel-main.h
> >> @@ -98,6 +98,8 @@ gboolean spice_main_file_copy_finish(SpiceMainChannel *channel,
> >>                                       GAsyncResult *result,
> >>                                       GError **error);
> >>
> >> +void spice_main_request_mouse_mode(SpiceMainChannel *channel, int mode);
> >> +
> >>  #ifndef SPICE_DISABLE_DEPRECATED
> >>  SPICE_DEPRECATED_FOR(spice_main_clipboard_selection_grab)
> >>  void spice_main_clipboard_grab(SpiceMainChannel *channel, guint32 *types, int ntypes);
> >> diff --git a/src/map-file b/src/map-file
> >> index 92a9883..495a802 100644
> >> --- a/src/map-file
> >> +++ b/src/map-file
> >> @@ -72,6 +72,7 @@ spice_main_clipboard_selection_release;
> >>  spice_main_clipboard_selection_request;
> >>  spice_main_file_copy_async;
> >>  spice_main_file_copy_finish;
> >> +spice_main_request_mouse_mode;
> >>  spice_main_send_monitor_config;
> >>  spice_main_set_display;
> >>  spice_main_set_display_enabled;
> >> diff --git a/src/spice-glib-sym-file b/src/spice-glib-sym-file
> >> index 3817a46..080f079 100644
> >> --- a/src/spice-glib-sym-file
> >> +++ b/src/spice-glib-sym-file
> >> @@ -49,6 +49,7 @@ spice_main_clipboard_selection_release
> >>  spice_main_clipboard_selection_request
> >>  spice_main_file_copy_async
> >>  spice_main_file_copy_finish
> >> +spice_main_request_mouse_mode
> >>  spice_main_send_monitor_config
> >>  spice_main_set_display
> >>  spice_main_set_display_enabled
> >> --
> >> 2.5.0
> >>
> >> _______________________________________________
> >> Spice-devel mailing list
> >> Spice-devel at lists.freedesktop.org
> >> http://lists.freedesktop.org/mailman/listinfo/spice-devel
> > _______________________________________________
> > Spice-devel mailing list
> > Spice-devel at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/spice-devel
> 
> 
> 
> -- 
> Marc-André Lureau


More information about the Spice-devel mailing list