From e5720c0ad180250c9eedb03d3da9843cd8b765bc Mon Sep 17 00:00:00 2001
From: Gerd Hoffmann <kraxel@redhat.com>
Date: Thu, 3 Jun 2010 10:09:49 -0300
Subject: [PATCH 18/20] vnc: move size-changed check into the vnc_desktop_resize function.

RH-Author: Gerd Hoffmann <kraxel@redhat.com>
Message-id: <1275559789-2280-6-git-send-email-kraxel@redhat.com>
Patchwork-id: 9698
O-Subject: [RHEL-6 kvm PATCH 5/5] vnc: move size-changed check into the
	vnc_desktop_resize function.
Bugzilla: 590070
RH-Acked-by: Jes Sorensen <Jes.Sorensen@redhat.com>
RH-Acked-by: Markus Armbruster <armbru@redhat.com>
RH-Acked-by: Amit Shah <amit.shah@redhat.com>

This make sure we send a desktop resize message only in case we actually
have to, using the new variables which track the clients desktop size.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>

bugzilla: #590070 -- QEMU misses DESKTOP-RESIZE event if it is triggered
                     during client connection initialization
upstream: 1d4b638ad1fc273a19d93c7d4725fecdd7e5182a
---
 vnc.c |   11 +++++------
 1 files changed, 5 insertions(+), 6 deletions(-)

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 vnc.c |   11 +++++------
 1 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/vnc.c b/vnc.c
index 0a9d45e..0467056 100644
--- a/vnc.c
+++ b/vnc.c
@@ -522,6 +522,10 @@ static void vnc_desktop_resize(VncState *vs)
     if (vs->csock == -1 || !vnc_has_feature(vs, VNC_FEATURE_RESIZE)) {
         return;
     }
+    if (vs->client_width == ds_get_width(ds) &&
+        vs->client_height == ds_get_height(ds)) {
+        return;
+    }
     vs->client_width = ds_get_width(ds);
     vs->client_height = ds_get_height(ds);
     vnc_write_u8(vs, 0); /* VNC_MSG_SERVER_FRAMEBUFFER_UPDATE */
@@ -534,7 +538,6 @@ static void vnc_desktop_resize(VncState *vs)
 
 static void vnc_dpy_resize(DisplayState *ds)
 {
-    int size_changed;
     VncDisplay *vd = ds->opaque;
     VncState *vs = vd->clients;
 
@@ -552,16 +555,12 @@ static void vnc_dpy_resize(DisplayState *ds)
         vd->guest.ds = qemu_mallocz(sizeof(*vd->guest.ds));
     if (ds_get_bytes_per_pixel(ds) != vd->guest.ds->pf.bytes_per_pixel)
         console_color_init(ds);
-    size_changed = ds_get_width(ds) != vd->guest.ds->width ||
-                   ds_get_height(ds) != vd->guest.ds->height;
     *(vd->guest.ds) = *(ds->surface);
     memset(vd->guest.dirty, 0xFF, sizeof(vd->guest.dirty));
 
     while (vs != NULL) {
         vnc_colordepth(vs);
-        if (size_changed) {
-            vnc_desktop_resize(vs);
-        }
+        vnc_desktop_resize(vs);
         memset(vs->dirty, 0xFF, sizeof(vs->dirty));
         vs = vs->next;
     }
-- 
1.7.0.3

