[Spice-devel] [PATCH v2] Add ability to get SpiceDisplay resolution
Jonathon Jongsma
jjongsma at redhat.com
Fri Nov 1 21:07:54 CET 2013
Add spice_display_get_monitor_config() to get the current configuration of the
display.
---
Change to return the SpiceDisplayMonitorConfig struct as suggested by Marc-Andre
gtk/map-file | 1 +
gtk/spice-gtk-sym-file | 1 +
gtk/spice-widget.c | 32 ++++++++++++++++++++------------
gtk/spice-widget.h | 2 ++
4 files changed, 24 insertions(+), 12 deletions(-)
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..335b0af 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)
+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 = 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);
+ 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 +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);
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
More information about the Spice-devel
mailing list