From e5720c0ad180250c9eedb03d3da9843cd8b765bc Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann 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 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 RH-Acked-by: Markus Armbruster RH-Acked-by: Amit Shah 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 Signed-off-by: Anthony Liguori 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 --- 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