[Spice-devel] [PATCH] Add ability to get SpiceDisplay resolution
Marc-André Lureau
mlureau at redhat.com
Fri Nov 1 14:05:01 CET 2013
----- Original Message -----
> add spice_display_get_width() and spice_display_get_height() to get the
> current
> configuration of the display resolution.
Why not a function to return the SpiceDisplayMonitorConfig ?
> ---
> gtk/map-file | 2 ++
> gtk/spice-gtk-sym-file | 2 ++
> gtk/spice-widget.c | 45 +++++++++++++++++++++++++++++++++------------
> gtk/spice-widget.h | 3 +++
> 4 files changed, 40 insertions(+), 12 deletions(-)
>
> diff --git a/gtk/map-file b/gtk/map-file
> index 368b44f..2f89d61 100644
> --- a/gtk/map-file
> +++ b/gtk/map-file
> @@ -32,6 +32,8 @@ spice_display_new_with_monitor;
> spice_display_paste_from_guest;
> spice_display_send_keys;
> spice_display_set_grab_keys;
> +spice_display_get_width;
> +spice_display_get_height;
> spice_error_get_type;
> spice_get_option_group;
> spice_grab_sequence_as_string;
> diff --git a/gtk/spice-gtk-sym-file b/gtk/spice-gtk-sym-file
> index 1574e07..8c8ca0b 100644
> --- a/gtk/spice-gtk-sym-file
> +++ b/gtk/spice-gtk-sym-file
> @@ -9,6 +9,8 @@ spice_display_new_with_monitor
> spice_display_paste_from_guest
> spice_display_send_keys
> spice_display_set_grab_keys
> +spice_display_get_width
> +spice_display_get_height
> spice_grab_sequence_as_string
> spice_grab_sequence_copy
> spice_grab_sequence_free
> diff --git a/gtk/spice-widget.c b/gtk/spice-widget.c
> index d39ff59..59b7087 100644
> --- a/gtk/spice-widget.c
> +++ b/gtk/spice-widget.c
> @@ -278,25 +278,35 @@ static gint get_display_id(SpiceDisplay *display)
> return d->channel_id;
> }
>
> -static void update_monitor_area(SpiceDisplay *display)
> +static SpiceDisplayMonitorConfig* get_monitor_config(SpiceDisplay* display)
> {
> - SpiceDisplayPrivate *d = SPICE_DISPLAY_GET_PRIVATE(display);
> - SpiceDisplayMonitorConfig *cfg, *c = NULL;
> - GArray *monitors = NULL;
> int i;
> + GArray *monitors = NULL;
> + SpiceDisplayPrivate *d = SPICE_DISPLAY_GET_PRIVATE(display);
> + SpiceDisplayMonitorConfig* c = NULL;
>
> - SPICE_DEBUG("update monitor area %d:%d", d->channel_id, d->monitor_id);
> - if (d->monitor_id < 0)
> - goto whole;
> + g_return_val_if_fail(d->monitor_id >= 0, NULL);
>
> g_object_get(d->display, "monitors", &monitors, NULL);
> for (i = 0; monitors != NULL && i < monitors->len; i++) {
> - cfg = &g_array_index(monitors, SpiceDisplayMonitorConfig, i);
> + SpiceDisplayMonitorConfig *cfg = &g_array_index(monitors,
> +
> SpiceDisplayMonitorConfig,
> + i);
> if (cfg->id == d->monitor_id) {
> - c = cfg;
> - break;
> + c = cfg;
> + break;
> }
> }
> +
> + g_clear_pointer(&monitors, g_array_unref);
> + return c;
> +}
> +
> +static void update_monitor_area(SpiceDisplay *display)
> +{
> + SpiceDisplayPrivate *d = SPICE_DISPLAY_GET_PRIVATE(display);
> + SpiceDisplayMonitorConfig *c = get_monitor_config(display);
> +
> if (c == NULL) {
> SPICE_DEBUG("update monitor: no monitor %d", d->monitor_id);
> set_monitor_ready(display, false);
> @@ -318,11 +328,9 @@ static void update_monitor_area(SpiceDisplay *display)
> c->x, c->y, c->width, c->height, FALSE);
>
> update_area(display, c->x, c->y, c->width, c->height);
> - g_clear_pointer(&monitors, g_array_unref);
> return;
>
> whole:
> - g_clear_pointer(&monitors, g_array_unref);
> /* by display whole surface */
> update_area(display, 0, 0, d->width, d->height);
> set_monitor_ready(display, true);
> @@ -2575,6 +2583,19 @@ GdkPixbuf *spice_display_get_pixbuf(SpiceDisplay
> *display)
> return pixbuf;
> }
>
> +gint spice_display_get_width(SpiceDisplay *display)
> +{
> + SpiceDisplayMonitorConfig* cfg = get_monitor_config(display);
> + return cfg ? cfg->width : 0;
> +}
> +
> +gint spice_display_get_height(SpiceDisplay *display)
> +{
> + SpiceDisplayMonitorConfig* cfg = get_monitor_config(display);
> + return cfg ? cfg->height : 0;
> +}
> +
> +
> #if HAVE_X11_XKBLIB_H
> static guint32 get_keyboard_lock_modifiers(Display *x_display)
> {
> diff --git a/gtk/spice-widget.h b/gtk/spice-widget.h
> index d239ed2..7335722 100644
> --- a/gtk/spice-widget.h
> +++ b/gtk/spice-widget.h
> @@ -80,6 +80,9 @@ void spice_display_send_keys(SpiceDisplay *display, const
> guint *keyvals,
> int nkeyvals, SpiceDisplayKeyEvent kind);
> GdkPixbuf *spice_display_get_pixbuf(SpiceDisplay *display);
>
> +gint spice_display_get_width(SpiceDisplay *display);
> +gint spice_display_get_height(SpiceDisplay *display);
> +
> #ifndef SPICE_DISABLE_DEPRECATED
> SPICE_DEPRECATED_FOR(spice_gtk_session_copy_to_guest)
> void spice_display_copy_to_guest(SpiceDisplay *display);
> --
> 1.8.3.1
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel
>
More information about the Spice-devel
mailing list