----- Original Message ----- > Add spice_display_get_monitor_config() to get the current configuration of > the > display. > --- > doc/reference/spice-gtk-sections.txt | 2 ++ > gtk/channel-display.c | 2 +- > gtk/channel-display.h | 9 ++++++++ > gtk/map-file | 1 + > gtk/spice-gtk-sym-file | 1 + > gtk/spice-widget.c | 44 > ++++++++++++++++++++++++++---------- > gtk/spice-widget.h | 2 ++ > 7 files changed, 48 insertions(+), 13 deletions(-) > > diff --git a/doc/reference/spice-gtk-sections.txt > b/doc/reference/spice-gtk-sections.txt > index 8d61aa9..9d8551b 100644 > --- a/doc/reference/spice-gtk-sections.txt > +++ b/doc/reference/spice-gtk-sections.txt > @@ -146,6 +146,7 @@ SpiceAudioPrivate > <TITLE>SpiceDisplayChannel</TITLE> > SpiceDisplayChannel > SpiceDisplayChannelClass > +SpiceDisplayMonitorConfig > <SUBSECTION Standard> > SPICE_DISPLAY_CHANNEL > SPICE_IS_DISPLAY_CHANNEL > @@ -352,6 +353,7 @@ spice_display_set_grab_keys > spice_display_get_grab_keys > spice_display_send_keys > spice_display_get_pixbuf > +spice_display_get_monitor_config > <SUBSECTION> > SpiceGrabSequence > spice_grab_sequence_new > diff --git a/gtk/channel-display.c b/gtk/channel-display.c > index a57453f..030679b 100644 > --- a/gtk/channel-display.c > +++ b/gtk/channel-display.c > @@ -262,7 +262,7 @@ static void > spice_display_channel_class_init(SpiceDisplayChannelClass *klass) > /** > * SpiceDisplayChannel:monitors: > * > - * Current monitors configuration. > + * Current monitors configuration. An array of > #SpiceDisplayMonitorConfig > * > * Since: 0.13 > */ > diff --git a/gtk/channel-display.h b/gtk/channel-display.h > index 88e60d9..4a5428e 100644 > --- a/gtk/channel-display.h > +++ b/gtk/channel-display.h > @@ -33,6 +33,15 @@ typedef struct _SpiceDisplayChannel SpiceDisplayChannel; > typedef struct _SpiceDisplayChannelClass SpiceDisplayChannelClass; > typedef struct _SpiceDisplayChannelPrivate SpiceDisplayChannelPrivate; > > +/** > + * SpiceDisplayMonitorConfig: > + * @id: the id of the monitor > + * @surface_id: the surface id of the monitor > + * @x: the position of the monitor on the x axis > + * @y: the position of the monitor on the y axis > + * @width: the width of the monitor > + * @height: the height of the monitor > + */ > typedef struct _SpiceDisplayMonitorConfig SpiceDisplayMonitorConfig; > struct _SpiceDisplayMonitorConfig { > guint id; > diff --git a/gtk/map-file b/gtk/map-file > index 368b44f..d093f7c 100644 > --- a/gtk/map-file > +++ b/gtk/map-file > @@ -32,6 +32,7 @@ spice_display_new_with_monitor; > spice_display_paste_from_guest; > spice_display_send_keys; > spice_display_set_grab_keys; > +spice_display_get_monitor_config; > 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..8d3c9a0 100644 > --- a/gtk/spice-gtk-sym-file > +++ b/gtk/spice-gtk-sym-file > @@ -9,6 +9,7 @@ spice_display_new_with_monitor > spice_display_paste_from_guest > spice_display_send_keys > spice_display_set_grab_keys > +spice_display_get_monitor_config > 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..8b5fa59 100644 > --- a/gtk/spice-widget.c > +++ b/gtk/spice-widget.c > @@ -278,25 +278,47 @@ static gint get_display_id(SpiceDisplay *display) > return d->channel_id; > } > > -static void update_monitor_area(SpiceDisplay *display) > +/** > + * spice_display_get_monitor_config: > + * @display: the display widget > + * > + * Gets the monitor configuration for the display, from which you can > determine > + * the current position and resolution of the monitor > + * > + * Returns (transfer none): the monitor configuration for the display > + **/ > +const SpiceDisplayMonitorConfig* > spice_display_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 = NULL; > + 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(SPICE_IS_DISPLAY(display), NULL); > + > + d = SPICE_DISPLAY_GET_PRIVATE(display); > + 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); > + const SpiceDisplayMonitorConfig *c = > spice_display_get_monitor_config(display); > + > if (c == NULL) { > SPICE_DEBUG("update monitor: no monitor %d", d->monitor_id); > set_monitor_ready(display, false); > @@ -318,11 +340,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); > diff --git a/gtk/spice-widget.h b/gtk/spice-widget.h > index d239ed2..f7cfbf1 100644 > --- a/gtk/spice-widget.h > +++ b/gtk/spice-widget.h > @@ -80,6 +80,8 @@ void spice_display_send_keys(SpiceDisplay *display, const > guint *keyvals, > int nkeyvals, SpiceDisplayKeyEvent kind); > GdkPixbuf *spice_display_get_pixbuf(SpiceDisplay *display); > > +const SpiceDisplayMonitorConfig* > spice_display_get_monitor_config(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 ack > > _______________________________________________ > Spice-devel mailing list > Spice-devel@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/spice-devel > _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel