[Spice-devel] [PATCH v2 1/2] Add spice_main_update_display_enabled()

Pavel Grunt pgrunt at redhat.com
Tue Aug 18 06:36:24 PDT 2015


Hi Jonathon,

docs should be updated as well, like it is in Marc-André's patch
http://lists.freedesktop.org/archives/spice-devel/2015-April/019387.html

Pavel

On Thu, 2015-08-06 at 15:22 -0500, Jonathon Jongsma wrote:
> 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.
> ---
>  src/channel-main.c      | 40 ++++++++++++++++++++++++++++++++--------
>  src/channel-main.h      |  1 +
>  src/map-file            |  1 +
>  src/spice-glib-sym-file |  1 +
>  4 files changed, 35 insertions(+), 8 deletions(-)
> 
> diff --git a/src/channel-main.c b/src/channel-main.c
> index 1b9c4d4..e4484e3 100644
> --- a/src/channel-main.c
> +++ b/src/channel-main.c
> @@ -2756,19 +2756,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);
> @@ -2789,7 +2794,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


More information about the Spice-devel mailing list