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

Marc-André Lureau marcandre.lureau at redhat.com
Mon Nov 9 06:02:07 PST 2015


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).

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



More information about the Spice-devel mailing list