summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathon Jongsma <jjongsma@redhat.com>2015-07-16 14:01:06 -0500
committerJonathon Jongsma <jjongsma@redhat.com>2015-09-10 15:52:12 -0500
commit94347e71d225408e5e21577770e6e5d2e78ca780 (patch)
tree6ca1610d6df65a4a3faf424dacb35c95477a8e7f
parentc32ca1aa824dd3aa6be5dee4d328f83987412a06 (diff)
Add spice_main_update_display_enabled()
This is a new function that allows the caller to decide whether to send the new status down to the server or not (analogous to the difference between spice_main_set_display() vs spice_man_update_display()). This new function is needed to reduce unnecessary MonitorsConfig messages from being sent to the server. Because spice-gtk does not maintain any display state internally, it depends on the application to maintain that state. Some state changes come from the server itself (e.g. the guest has changed resolution due to some activity within the guest), and some come from the application (e.g. the user has resized the window of the client). Changes that come from server updates do not need to be sent back down to the server, whereas those that originate from the application *do* need to be sent to the server.
-rw-r--r--doc/reference/spice-gtk-sections.txt1
-rw-r--r--src/channel-main.c40
-rw-r--r--src/channel-main.h1
-rw-r--r--src/map-file1
-rw-r--r--src/spice-glib-sym-file1
5 files changed, 36 insertions, 8 deletions
diff --git a/doc/reference/spice-gtk-sections.txt b/doc/reference/spice-gtk-sections.txt
index 5d7b176..2f3e09e 100644
--- a/doc/reference/spice-gtk-sections.txt
+++ b/doc/reference/spice-gtk-sections.txt
@@ -63,6 +63,7 @@ SpiceMainChannelClass
<SUBSECTION>
spice_main_set_display
spice_main_set_display_enabled
+spice_main_update_display_enabled
spice_main_send_monitor_config
spice_main_agent_test_capability
spice_main_clipboard_selection_grab
diff --git a/src/channel-main.c b/src/channel-main.c
index 42c9a65..03e407e 100644
--- a/src/channel-main.c
+++ b/src/channel-main.c
@@ -2788,19 +2788,24 @@ void spice_main_clipboard_selection_request(SpiceMainChannel *channel, guint sel
}
/**
- * spice_main_set_display_enabled:
+ * spice_main_update_display_enabled:
* @channel: a #SpiceMainChannel
* @id: display ID (if -1: set all displays)
* @enabled: wether display @id is enabled
+ * @update: if %TRUE, update guest display state after 1sec.
*
- * When sending monitor configuration to agent guest, don't set
- * display @id, which the agent translates to disabling the display
- * id. Note: this will take effect next time the monitor
- * configuration is sent.
+ * When sending monitor configuration to agent guest, if @enabled is %FALSE,
+ * don't set display @id, which the agent translates to disabling the display
+ * id. If @enabled is %TRUE, the monitor will be included in the next monitor
+ * update. Note: this will take effect next time the monitor configuration is
+ * sent.
*
- * Since: 0.6
+ * If @update is %FALSE, no server update will be triggered by this call, but
+ * the value will be saved and used in the next configuration update.
+ *
+ * Since: 0.30
**/
-void spice_main_set_display_enabled(SpiceMainChannel *channel, int id, gboolean enabled)
+void spice_main_update_display_enabled(SpiceMainChannel *channel, int id, gboolean enabled, gboolean update)
{
SpiceDisplayState display_state = enabled ? DISPLAY_ENABLED : DISPLAY_DISABLED;
g_return_if_fail(channel != NULL);
@@ -2821,7 +2826,26 @@ void spice_main_set_display_enabled(SpiceMainChannel *channel, int id, gboolean
c->display[id].display_state = display_state;
}
- update_display_timer(channel, 1);
+ if (update)
+ update_display_timer(channel, 1);
+}
+
+/**
+ * spice_main_set_display_enabled:
+ * @channel: a #SpiceMainChannel
+ * @id: display ID (if -1: set all displays)
+ * @enabled: wether display @id is enabled
+ *
+ * When sending monitor configuration to agent guest, don't set
+ * display @id, which the agent translates to disabling the display
+ * id. Note: this will take effect next time the monitor
+ * configuration is sent.
+ *
+ * Since: 0.6
+ **/
+void spice_main_set_display_enabled(SpiceMainChannel *channel, int id, gboolean enabled)
+{
+ spice_main_update_display_enabled(channel, id, enabled, TRUE);
}
static void file_xfer_completed(SpiceFileXferTask *task, GError *error)
diff --git a/src/channel-main.h b/src/channel-main.h
index 3e4fc42..86bb46b 100644
--- a/src/channel-main.h
+++ b/src/channel-main.h
@@ -72,6 +72,7 @@ void spice_main_set_display(SpiceMainChannel *channel, int id,
void spice_main_update_display(SpiceMainChannel *channel, int id,
int x, int y, int width, int height, gboolean update);
void spice_main_set_display_enabled(SpiceMainChannel *channel, int id, gboolean enabled);
+void spice_main_update_display_enabled(SpiceMainChannel *channel, int id, gboolean enabled, gboolean update);
gboolean spice_main_send_monitor_config(SpiceMainChannel *channel);
void spice_main_clipboard_selection_grab(SpiceMainChannel *channel, guint selection, guint32 *types, int ntypes);
diff --git a/src/map-file b/src/map-file
index d5a073f..a9abc61 100644
--- a/src/map-file
+++ b/src/map-file
@@ -71,6 +71,7 @@ spice_main_send_monitor_config;
spice_main_set_display;
spice_main_set_display_enabled;
spice_main_update_display;
+spice_main_update_display_enabled;
spice_playback_channel_get_type;
spice_playback_channel_set_delay;
spice_port_channel_get_type;
diff --git a/src/spice-glib-sym-file b/src/spice-glib-sym-file
index 3a8da93..1d62716 100644
--- a/src/spice-glib-sym-file
+++ b/src/spice-glib-sym-file
@@ -48,6 +48,7 @@ spice_main_send_monitor_config
spice_main_set_display
spice_main_set_display_enabled
spice_main_update_display
+spice_main_update_display_enabled
spice_playback_channel_get_type
spice_playback_channel_set_delay
spice_port_channel_get_type