diff options
author | Daniel P. Berrange <berrange@redhat.com> | 2012-02-07 17:04:57 +0000 |
---|---|---|
committer | Daniel P. Berrange <berrange@redhat.com> | 2012-02-08 13:23:48 +0000 |
commit | 50632ea038d87239092a3bed584680279e312d19 (patch) | |
tree | fc6f68838ef945a6692c0b17ccb5db3994af1756 /src/virt-viewer-display.c | |
parent | 3a8cdd901ff4efe52427950dd45a341521499fb0 (diff) | |
download | virt-viewer-50632ea038d87239092a3bed584680279e312d19.tar.gz virt-viewer-50632ea038d87239092a3bed584680279e312d19.tar.xz virt-viewer-50632ea038d87239092a3bed584680279e312d19.zip |
Implement SPICE desktop resizing that takes account of zoom level
The standard SPICE widget guest resize implementation does not
take into account the zoom level settings in virt-viewer, because
it has no knowledge of this functionality. The guest resize can,
however, be done by calling spice_main_set_display() directly.
This allows virt-viewer to resize the guest taking into account
zoom levels.
ie, if virt-viewer is run with --zoom 50 and the window
is resized to 400x300, then the guest agent should
be told to set its resolution to 800x600
Diffstat (limited to 'src/virt-viewer-display.c')
-rw-r--r-- | src/virt-viewer-display.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/virt-viewer-display.c b/src/virt-viewer-display.c index 1d2ade2..a62c289 100644 --- a/src/virt-viewer-display.c +++ b/src/virt-viewer-display.c @@ -26,6 +26,7 @@ #include <locale.h> +#include "virt-viewer-session.h" #include "virt-viewer-display.h" #include "virt-viewer-util.h" @@ -40,6 +41,7 @@ struct _VirtViewerDisplayPrivate gboolean zoom; gint nth_display; gint show_hint; + VirtViewerSession *session; }; static void virt_viewer_display_size_request(GtkWidget *widget, @@ -75,6 +77,7 @@ enum { PROP_ZOOM, PROP_ZOOM_LEVEL, PROP_SHOW_HINT, + PROP_SESSION, }; static void @@ -154,6 +157,15 @@ virt_viewer_display_class_init(VirtViewerDisplayClass *class) 0, G_PARAM_READABLE)); + g_object_class_install_property(object_class, + PROP_SESSION, + g_param_spec_object("session", + "Session", + "VirtSession", + VIRT_VIEWER_TYPE_SESSION, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); + g_signal_new("display-pointer-grab", G_OBJECT_CLASS_TYPE(object_class), @@ -252,6 +264,11 @@ virt_viewer_display_set_property(GObject *object, case PROP_NTH_DISPLAY: priv->nth_display = g_value_get_int(value); break; + case PROP_SESSION: + g_warn_if_fail(priv->session == NULL); + priv->session = g_value_dup_object(value); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -280,6 +297,9 @@ virt_viewer_display_get_property(GObject *object, case PROP_SHOW_HINT: g_value_set_int(value, priv->show_hint); break; + case PROP_SESSION: + g_value_set_object(value, virt_viewer_display_get_session(display)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -468,6 +488,13 @@ void virt_viewer_display_set_zoom_level(VirtViewerDisplay *display, } +guint virt_viewer_display_get_zoom_level(VirtViewerDisplay *display) +{ + VirtViewerDisplayPrivate *priv = display->priv; + return priv->zoom_level; +} + + void virt_viewer_display_set_zoom(VirtViewerDisplay *display, gboolean zoom) { @@ -481,6 +508,14 @@ void virt_viewer_display_set_zoom(VirtViewerDisplay *display, } } + +gboolean virt_viewer_display_get_zoom(VirtViewerDisplay *display) +{ + VirtViewerDisplayPrivate *priv = display->priv; + return priv->zoom; +} + + void virt_viewer_display_send_keys(VirtViewerDisplay *display, const guint *keyvals, int nkeyvals) { @@ -509,6 +544,13 @@ void virt_viewer_display_set_show_hint(VirtViewerDisplay *self, gint hint) g_object_notify(G_OBJECT(self), "show-hint"); } +VirtViewerSession* virt_viewer_display_get_session(VirtViewerDisplay *self) +{ + g_return_val_if_fail(VIRT_VIEWER_IS_DISPLAY(self), NULL); + + return self->priv->session; +} + /* * Local variables: * c-indent-level: 4 |