[virt-tools-list] [PATCH virt-viewer 2/3] display-spice: Prevent update geometry when zoom changes

Pavel Grunt pgrunt at redhat.com
Thu May 21 17:19:19 UTC 2015


It should not be prevented when the zoom level was not set before,
otherwise it can avoid resizing the guest desktop.

Related: rhbz#1221501
---
 src/virt-viewer-display-spice.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/src/virt-viewer-display-spice.c b/src/virt-viewer-display-spice.c
index 399c207..f16b8db 100644
--- a/src/virt-viewer-display-spice.c
+++ b/src/virt-viewer-display-spice.c
@@ -47,9 +47,11 @@ struct _VirtViewerDisplaySpicePrivate {
     AutoResizeState auto_resize;
     guint x;
     guint y;
+    guint previous_zoom;
 };
 
 #define VIRT_VIEWER_DISPLAY_SPICE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), VIRT_VIEWER_TYPE_DISPLAY_SPICE, VirtViewerDisplaySpicePrivate))
+#define ZOOM_NOT_SET 0
 
 static void virt_viewer_display_spice_send_keys(VirtViewerDisplay *display,
                                                 const guint *keyvals,
@@ -174,14 +176,17 @@ virt_viewer_display_spice_mouse_grab(SpiceDisplay *display G_GNUC_UNUSED,
 
 static void
 virt_viewer_display_spice_size_allocate(VirtViewerDisplaySpice *self,
-                                        GtkAllocation *allocation,
+                                        GtkAllocation *allocation G_GNUC_UNUSED,
                                         gpointer data G_GNUC_UNUSED)
 {
-    GtkRequisition preferred;
     guint hint = virt_viewer_display_get_show_hint(VIRT_VIEWER_DISPLAY(self));
 
     if (hint & VIRT_VIEWER_DISPLAY_SHOW_HINT_READY)
     {
+        guint actual_zoom = virt_viewer_display_get_zoom_level(VIRT_VIEWER_DISPLAY(self));
+        gboolean zoom_changed = self->priv->previous_zoom != ZOOM_NOT_SET &&
+                                self->priv->previous_zoom != actual_zoom;
+        self->priv->previous_zoom = actual_zoom;
         /* ignore all allocations before the widget gets mapped to screen since we
          * only want to trigger guest resizing due to user actions
          */
@@ -193,9 +198,7 @@ virt_viewer_display_spice_size_allocate(VirtViewerDisplaySpice *self,
          * resizes the window to the size it already wants to be (based on desktop
          * size and zoom level), just return early
          */
-        virt_viewer_display_get_preferred_size(VIRT_VIEWER_DISPLAY(self), &preferred);
-        if (preferred.width == allocation->width
-            && preferred.height == allocation->height) {
+        if (zoom_changed) {
             return;
         }
     }
@@ -277,6 +280,7 @@ virt_viewer_display_spice_new(VirtViewerSessionSpice *session,
                         "nth-display", channelid + monitorid,
                         NULL);
     self->priv->channel = channel;
+    self->priv->previous_zoom = ZOOM_NOT_SET;
 
     g_object_get(session, "spice-session", &s, NULL);
     self->priv->display = spice_display_new_with_monitor(s, channelid, monitorid);
-- 
2.4.1




More information about the virt-tools-list mailing list