[libvirt] [PATCH] add fullscreen support to qemu sdl xml (via fullscreen='true' attribute for the graphics element)

Daniel Veillard veillard at redhat.com
Thu Dec 11 11:44:32 UTC 2008


On Wed, Dec 10, 2008 at 06:06:51AM -0500, Itamar Heim wrote:
> Sure - probably not a good idea to send patches at such a late hour anyway
> :)
> Attached diff.
> 
> Some more details:
> For those using SDL ("for some crazy reason" as Berrange put it in the
> original patch), there is a use for the fullscreen option, causing the
> qemu window to open in full screen, change resolution, etc.
> This patch accepts an additional attribute in the graphics element:
> <graphics type='sdl' display=':0.1' xauth='/root/.Xauthority'
> fullscreen='true'/>
> 
> If fullscreen is true, "-full-screen" is added to the qemu command line
> (unlike the display and auth which are added as environment variables)

  Okay, to avoid having this patch forgotten in a nitpicking discussion
(I'm guilty I started :-) I commited the following which integrate the
associated changes and keep the final code in line with the existing one:
   - make the check at parse time
   - use an int to store the data
   - use yes/no as the accepted values
   - error out if the attribute value does not follow
   - drop all bool usage
   - fix docs/libvirt.rng to detail the new optional attribute and its 2
     values
   - fix docs/formatdomain.html[.in] to describe the attributes for the
     sdl display type.
   - fix the test to use the new value 'yes' in the xml

I guess this covers most of the changes needed for this patch, now you
can blame me if I forgot something :-) but this passes the tests (well
there is errors on the uml tests I didn't figured out yet but looks
unrelated.

 thanks Itamar !

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/
-------------- next part --------------
Index: docs/formatdomain.html
===================================================================
RCS file: /data/cvs/libxen/docs/formatdomain.html,v
retrieving revision 1.13
diff -u -p -u -p -r1.13 formatdomain.html
--- docs/formatdomain.html	13 Oct 2008 15:25:38 -0000	1.13
+++ docs/formatdomain.html	11 Dec 2008 11:33:27 -0000
@@ -713,6 +713,10 @@ qemu-kvm -net nic,model=? /dev/null
         <dl><dt><code>graphics</code></dt><dd>The <code>graphics</code> element has a mandatory <code>type</code>
 	attribute which takes the value "sdl" or "vnc". The former displays
 	a window on the host desktop, while the latter activates a VNC server.
+        The former accepts 3 optional arguments: a <code>display</code>
+        attribute for the display to use, an <code>xauth</code> attribute for
+        the authentication identifier, and an optional <code>fullscreen</code>
+        attribute accepting values 'yes' or 'no'.
 	If the latter is used the <code>port</code> attribute specifies the TCP
 	port number (with -1 as legacy syntax indicating that it should be
 	auto-allocated). The <code>autoport</code> attribute is the new
Index: docs/formatdomain.html.in
===================================================================
RCS file: /data/cvs/libxen/docs/formatdomain.html.in,v
retrieving revision 1.8
diff -u -p -u -p -r1.8 formatdomain.html.in
--- docs/formatdomain.html.in	13 Oct 2008 15:25:38 -0000	1.8
+++ docs/formatdomain.html.in	11 Dec 2008 11:33:27 -0000
@@ -657,6 +657,10 @@ qemu-kvm -net nic,model=? /dev/null
       <dd>The <code>graphics</code> element has a mandatory <code>type</code>
 	attribute which takes the value "sdl" or "vnc". The former displays
 	a window on the host desktop, while the latter activates a VNC server.
+        The former accepts 3 optional arguments: a <code>display</code>
+        attribute for the display to use, an <code>xauth</code> attribute for
+        the authentication identifier, and an optional <code>fullscreen</code>
+        attribute accepting values 'yes' or 'no'.
 	If the latter is used the <code>port</code> attribute specifies the TCP
 	port number (with -1 as legacy syntax indicating that it should be
 	auto-allocated). The <code>autoport</code> attribute is the new
Index: docs/libvirt.rng
===================================================================
RCS file: /data/cvs/libxen/docs/libvirt.rng,v
retrieving revision 1.15
diff -u -p -u -p -r1.15 libvirt.rng
--- docs/libvirt.rng	10 Oct 2008 16:52:20 -0000	1.15
+++ docs/libvirt.rng	11 Dec 2008 11:33:27 -0000
@@ -638,7 +638,7 @@
 
   <!--
       A graphic description, currently in Xen only 2 types are supported:
-        - sdl without arguments
+        - sdl with optional display, xauth and fullscreen
 	- vnc with a required port and optional listen IP address, password
           and keymap
     -->
@@ -659,6 +659,14 @@
 	      <text/>
 	    </attribute>
 	  </optional>
+	  <optional>
+	    <attribute name='fullscreen'>
+	      <choice>
+		<value>yes</value>
+		<value>no</value>
+	      </choice>
+	    </attribute>
+	  </optional>
 	</group>
 	<group>
           <attribute name='type'>
Index: src/domain_conf.c
===================================================================
RCS file: /data/cvs/libxen/src/domain_conf.c,v
retrieving revision 1.44
diff -u -p -u -p -r1.44 domain_conf.c
--- src/domain_conf.c	5 Dec 2008 10:10:41 -0000	1.44
+++ src/domain_conf.c	11 Dec 2008 11:33:27 -0000
@@ -1401,6 +1401,22 @@ virDomainGraphicsDefParseXML(virConnectP
         def->data.vnc.passwd = virXMLPropString(node, "passwd");
         def->data.vnc.keymap = virXMLPropString(node, "keymap");
     } else if (def->type == VIR_DOMAIN_GRAPHICS_TYPE_SDL) {
+        char *fullscreen = virXMLPropString(node, "fullscreen");
+
+        if (fullscreen != NULL) {
+            if (STREQ(fullscreen, "yes")) {
+                def->data.sdl.fullscreen = 1;
+            } else if (STREQ(fullscreen, "no")) {
+                def->data.sdl.fullscreen = 0;
+            } else {
+                virDomainReportError(conn, VIR_ERR_INTERNAL_ERROR,
+                             _("unknown fullscreen value '%s'"), fullscreen);
+                VIR_FREE(fullscreen);
+                goto error;
+            }
+            VIR_FREE(fullscreen);
+        } else
+            def->data.sdl.fullscreen = 0;
         def->data.sdl.xauth = virXMLPropString(node, "xauth");
         def->data.sdl.display = virXMLPropString(node, "display");
     }
@@ -2951,6 +2967,9 @@ virDomainGraphicsDefFormat(virConnectPtr
         if (def->data.sdl.xauth)
             virBufferEscapeString(buf, " xauth='%s'",
                                   def->data.sdl.xauth);
+        if (def->data.sdl.fullscreen)
+            virBufferAddLit(buf, " fullscreen='yes'");
+
         break;
     }
 
Index: src/domain_conf.h
===================================================================
RCS file: /data/cvs/libxen/src/domain_conf.h,v
retrieving revision 1.22
diff -u -p -u -p -r1.22 domain_conf.h
--- src/domain_conf.h	4 Dec 2008 22:00:14 -0000	1.22
+++ src/domain_conf.h	11 Dec 2008 11:33:27 -0000
@@ -268,6 +268,7 @@ struct _virDomainGraphicsDef {
         struct {
             char *display;
             char *xauth;
+            int fullscreen;
         } sdl;
     } data;
 };
Index: src/qemu_conf.c
===================================================================
RCS file: /data/cvs/libxen/src/qemu_conf.c,v
retrieving revision 1.109
diff -u -p -u -p -r1.109 qemu_conf.c
--- src/qemu_conf.c	28 Nov 2008 11:20:27 -0000	1.109
+++ src/qemu_conf.c	11 Dec 2008 11:33:27 -0000
@@ -1229,6 +1229,8 @@ int qemudBuildCommandLine(virConnectPtr 
             ADD_ENV(xauth);
         if (display)
             ADD_ENV(display);
+        if (vm->def->graphics->data.sdl.fullscreen)
+            ADD_ARG_LIT("-full-screen");
     }
 
     /* Add sound hardware */
Index: tests/qemuxml2argvtest.c
===================================================================
RCS file: /data/cvs/libxen/tests/qemuxml2argvtest.c,v
retrieving revision 1.34
diff -u -p -u -p -r1.34 qemuxml2argvtest.c
--- tests/qemuxml2argvtest.c	4 Dec 2008 12:02:59 -0000	1.34
+++ tests/qemuxml2argvtest.c	11 Dec 2008 11:33:27 -0000
@@ -195,6 +195,7 @@ mymain(int argc, char **argv)
     DO_TEST("disk-usb", 0);
     DO_TEST("graphics-vnc", 0);
     DO_TEST("graphics-sdl", 0);
+    DO_TEST("graphics-sdl-fullscreen", 0);
     DO_TEST("input-usbmouse", 0);
     DO_TEST("input-usbtablet", 0);
     DO_TEST("input-xen", 0);
Index: tests/qemuxml2xmltest.c
===================================================================
RCS file: /data/cvs/libxen/tests/qemuxml2xmltest.c,v
retrieving revision 1.22
diff -u -p -u -p -r1.22 qemuxml2xmltest.c
--- tests/qemuxml2xmltest.c	8 Aug 2008 15:03:00 -0000	1.22
+++ tests/qemuxml2xmltest.c	11 Dec 2008 11:33:27 -0000
@@ -98,6 +98,7 @@ mymain(int argc, char **argv)
     DO_TEST("disk-usb");
     DO_TEST("graphics-vnc");
     DO_TEST("graphics-sdl");
+    DO_TEST("graphics-sdl-fullscreen");
     DO_TEST("input-usbmouse");
     DO_TEST("input-usbtablet");
     DO_TEST("input-xen");


More information about the libvir-list mailing list