diff -r 4553bc1087d9 tools/ioemu/hw/xenfb.c --- a/tools/ioemu/hw/xenfb.c Wed Dec 12 15:41:20 2007 +0000 +++ b/tools/ioemu/hw/xenfb.c Tue Dec 18 10:17:37 2007 -0700 @@ -267,6 +267,9 @@ struct xenfb *xenfb_new(int domid, Displ fprintf(stderr, "FB: Waiting for KBD backend creation\n"); xenfb_wait_for_backend(&xenfb->kbd, xenfb_backend_created_kbd); + + /* Indicate we have the frame buffer resize feature */ + xenfb_xs_printf(xenfb->xsh, xenfb->fb.nodename, "feature-resize", "1"); return xenfb; @@ -510,6 +513,13 @@ static void xenfb_on_fb_event(struct xen } xenfb_guest_copy(xenfb, x, y, w, h); break; + case XENFB_TYPE_RESIZE: + w = event->resize.width; + h = event->resize.height; + xenfb->width = w; + xenfb->height = h; + dpy_resize(xenfb->ds, xenfb->width, xenfb->height); + break; } } mb(); /* ensure we're done with ring contents */ diff -r 4553bc1087d9 xen/include/public/io/fbif.h --- a/xen/include/public/io/fbif.h Wed Dec 12 15:41:20 2007 +0000 +++ b/xen/include/public/io/fbif.h Thu Dec 13 04:16:46 2007 -0700 @@ -50,12 +50,26 @@ struct xenfb_update int32_t height; /* rect height */ }; +/* + * Framebuffer resize notification event + * Capable backend sets feature-resize in xenstore. + */ +#define XENFB_TYPE_RESIZE 3 + +struct xenfb_resize +{ + uint8_t type; /* XENFB_TYPE_RESIZE */ + int32_t width; /* xres */ + int32_t height; /* yres */ +}; + #define XENFB_OUT_EVENT_SIZE 40 union xenfb_out_event { uint8_t type; struct xenfb_update update; + struct xenfb_resize resize; char pad[XENFB_OUT_EVENT_SIZE]; };