summaryrefslogtreecommitdiffstats
path: root/src/virt-viewer-display-spice.c
diff options
context:
space:
mode:
authorJonathon Jongsma <jjongsma@redhat.com>2014-02-21 16:39:30 -0600
committerJonathon Jongsma <jjongsma@redhat.com>2014-02-26 13:50:58 -0600
commit895ef8029e794e7b74a45f27c7c741d1332bc02b (patch)
treefd7ecd73f6b19eba5bf763ba174d8f75a055f0c6 /src/virt-viewer-display-spice.c
parent7212c8745a4853e99e9a5a1473aa45ce141c2506 (diff)
downloadvirt-viewer-895ef8029e794e7b74a45f27c7c741d1332bc02b.tar.gz
virt-viewer-895ef8029e794e7b74a45f27c7c741d1332bc02b.tar.xz
virt-viewer-895ef8029e794e7b74a45f27c7c741d1332bc02b.zip
Don't resize guest display on zoom change
When the zoom level is changed, the virt-viewer window gets resized. But we don't want this to trigger a resize of the guest display. But occasionally rounding errors cause the guest display to be reconfigured when zooming out. To fix this, we first check whether the current size is the preferred size. If it is, we don't send down a resize command to the guest. In addition to preventing guest resizes in response to zooming, it also improves the behavior when the guest display resolution is changed from within the guest. Before this change, we'd have the following behavior: A. guest changes display to WxH B. client gets notified of change and resizes the window to WxH C. client responds to window resize by sending a new monitor config command to the guest With this change, the extra step C will be avoided because we're already at the preferred size. Resolves: rhbz#1004051
Diffstat (limited to 'src/virt-viewer-display-spice.c')
-rw-r--r--src/virt-viewer-display-spice.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/virt-viewer-display-spice.c b/src/virt-viewer-display-spice.c
index d13fbda..e1f7335 100644
--- a/src/virt-viewer-display-spice.c
+++ b/src/virt-viewer-display-spice.c
@@ -190,9 +190,22 @@ virt_viewer_display_spice_mouse_grab(SpiceDisplay *display G_GNUC_UNUSED,
static void
virt_viewer_display_spice_size_allocate(VirtViewerDisplaySpice *self,
- GtkAllocation *allocation G_GNUC_UNUSED,
+ GtkAllocation *allocation,
gpointer data G_GNUC_UNUSED)
{
+ GtkRequisition preferred;
+ gtk_widget_get_preferred_size(GTK_WIDGET(self), NULL, &preferred);
+
+ /* when the window gets resized due to a change in zoom level, we don't want
+ * to re-size the guest display. So if we get an allocation event that
+ * resizes the window to the size it already wants to be (based on desktop
+ * size and zoom level), just return early
+ */
+ if (preferred.width == allocation->width
+ && preferred.height == allocation->height) {
+ return;
+ }
+
if (self->priv->auto_resize != AUTO_RESIZE_NEVER)
virt_viewer_display_spice_monitor_geometry_changed(self);