xen/ioemu-vnc-resize.patch

37 lines
1.3 KiB
Diff

Index: xen-3.4.1-testing/tools/ioemu-remote/vnc.c
===================================================================
--- xen-3.4.1-testing.orig/tools/ioemu-remote/vnc.c
+++ xen-3.4.1-testing/tools/ioemu-remote/vnc.c
@@ -1713,6 +1713,31 @@ static int protocol_client_msg(VncState
}
set_encodings(vs, (int32_t *)(data + 4), limit);
+
+ /*
+ * The initialization of a VNC connection can race with xenfb changing
+ * the resolution. This happens when the VNC connection is already
+ * established, but the client has not yet advertised has_resize, so it
+ * won't get notified of the switch.
+ *
+ * Therefore we resend the resolution as soon as the client has sent its
+ * encodings.
+ */
+ if (vs->has_resize) {
+ /* Resize the VNC window */
+ vnc_write_u8(vs, 0); /* msg id */
+ vnc_write_u8(vs, 0);
+ vnc_write_u16(vs, 1); /* number of rects */
+ vnc_framebuffer_update(vs, 0, 0, vs->serverds.width, vs->serverds.height, -223);
+
+ /* Ensure that the new area is updated */
+ vnc_write_u8(vs, 0); /* msg id */
+ vnc_write_u8(vs, 0);
+ vnc_write_u16(vs, 1); /* number of rects */
+ send_framebuffer_update(vs, 0, 0, vs->serverds.width, vs->serverds.height);
+
+ vnc_flush(vs);
+ }
break;
case 3:
if (len == 1)