On 04.06.2013 16:33, Christophe Fergeau wrote:
> This allows to choose between SPICE, VNC or a local display, which
> will go through SDL or 'desktop' depending on the hypervisor.
> ---
> configure.ac | 2 +-
> examples/virtxml.c | 4 ++
> libvirt-designer/libvirt-designer-domain.c | 111
> +++++++++++++++++++++++++++++
> libvirt-designer/libvirt-designer-domain.h | 10 +++
> libvirt-designer/libvirt-designer.sym | 2 +
> 5 files changed, 128 insertions(+), 1 deletion(-)
>
> diff --git a/configure.ac b/configure.ac
> index 228a85c..bad199b 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -11,7 +11,7 @@ AC_CANONICAL_HOST
> AM_SILENT_RULES([yes])
>
> LIBOSINFO_REQUIRED=0.2.7
> -LIBVIRT_GCONFIG_REQUIRED=0.0.9
> +LIBVIRT_GCONFIG_REQUIRED=0.1.7
> LIBVIRT_GOBJECT_REQUIRED=0.1.3
> GOBJECT_INTROSPECTION_REQUIRED=0.10.8
>
> diff --git a/examples/virtxml.c b/examples/virtxml.c
> index d127406..46fb551 100644
> --- a/examples/virtxml.c
> +++ b/examples/virtxml.c
> @@ -641,6 +641,10 @@ main(int argc, char *argv[])
>
> gvir_designer_domain_setup_machine(domain, &error);
> CHECK_ERROR;
> + g_object_unref(gvir_designer_domain_add_graphics(domain,
> +
> GVIR_DESIGNER_DOMAIN_GRAPHICS_SPICE,
> + &error));
> + CHECK_ERROR;
I'd rather let users to choose if they want VNC or SPICE or ...
>
> g_object_unref(gvir_designer_domain_add_sound(domain, &error));
> CHECK_ERROR;
> diff --git a/libvirt-designer/libvirt-designer-domain.c
> b/libvirt-designer/libvirt-designer-domain.c
> index 36fc8ed..a1914dd 100644
> --- a/libvirt-designer/libvirt-designer-domain.c
> +++ b/libvirt-designer/libvirt-designer-domain.c
> @@ -348,6 +348,117 @@ static void
> gvir_designer_domain_add_clock(GVirDesignerDomain *design)
> g_object_unref(G_OBJECT(clock));
> }
>
> +
> +static GVirConfigDomainGraphics *
> +gvir_designer_domain_create_graphics_desktop(GVirDesignerDomain *design,
> + GError **error)
> +{
> + int virt_type;
> +
> + virt_type = gvir_config_domain_get_virt_type(design->priv->config);
> +
> + switch (virt_type) {
> + case GVIR_CONFIG_DOMAIN_VIRT_QEMU:
> + case GVIR_CONFIG_DOMAIN_VIRT_KQEMU:
> + case GVIR_CONFIG_DOMAIN_VIRT_KVM: {
> + GVirConfigDomainGraphicsSdl *sdl;
> + sdl = gvir_config_domain_graphics_sdl_new();
> + return GVIR_CONFIG_DOMAIN_GRAPHICS(sdl);
> + }
> + case GVIR_CONFIG_DOMAIN_VIRT_VBOX: {
> + GVirConfigDomainGraphicsDesktop *desktop;
> + desktop = gvir_config_domain_graphics_desktop_new();
> + return GVIR_CONFIG_DOMAIN_GRAPHICS(desktop);
> + }
> + default:
> + g_set_error(error, GVIR_DESIGNER_DOMAIN_ERROR, 0,
> + "Virt type %d does not support this graphics output",
> + virt_type);
> + return NULL;
> + }
> +}
> +
> +/**
> + * gvir_designer_domain_add_graphics:
> + * @design: (transfer none): the domain designer instance
> + * @error: return location for a #GError, or NULL
> + *
> + * Add a new graphical framebuffer to @design. This allows
> + * to see what the VM displays.
> + * Remote display protocols will only be listening on localhost, and the
> + * port will be automatically allocated when the VM starts (usually
> + * starting at 5900). You can manipulate further the returned
> + * #GVirConfigDomainGraphics if you want a different behaviour.
> + * When setting up a SPICE display, the SPICE agent channel will be
> + * automatically added to the VM if it's supported and not already
> + * present.
> + *
> + * Returns: (transfer full): the pointer to the new graphical framebuffer
> + * configuration object.
> + */
> +GVirConfigDomainGraphics *
> +gvir_designer_domain_add_graphics(GVirDesignerDomain *design,
> + GVirDesignerDomainGraphics type,
> + GError **error)
> +{
> + GVirConfigDomainGraphics *graphics;
> +
> + g_return_val_if_fail(GVIR_DESIGNER_IS_DOMAIN(design), NULL);
> + g_return_val_if_fail(!error_is_set(error), NULL);
> +
> + switch (type) {
> + case GVIR_DESIGNER_DOMAIN_GRAPHICS_DESKTOP: {
> + graphics = gvir_designer_domain_create_graphics_desktop(design,
> error);
> + if (graphics == NULL)
> + return NULL;
> + }
> +
> + case GVIR_DESIGNER_DOMAIN_GRAPHICS_RDP: {
> + GVirConfigDomainGraphicsRdp *rdp;
> +
> + rdp = gvir_config_domain_graphics_rdp_new();
> + gvir_config_domain_graphics_rdp_set_autoport(rdp, TRUE);
> + graphics = GVIR_CONFIG_DOMAIN_GRAPHICS(rdp);
> +
> + break;
> + }
> +
> + case GVIR_DESIGNER_DOMAIN_GRAPHICS_SPICE: {
> + GVirConfigDomainGraphicsSpice *spice;
> +
> + spice = gvir_config_domain_graphics_spice_new();
> + gvir_config_domain_graphics_spice_set_autoport(spice, TRUE);
> + /* FIXME: Should only be done for local domains */
> + gvir_config_domain_graphics_spice_set_image_compression(spice,
> +
> GVIR_CONFIG_DOMAIN_GRAPHICS_SPICE_IMAGE_COMPRESSION_OFF);
> + graphics = GVIR_CONFIG_DOMAIN_GRAPHICS(spice);
> +
> + break;
> + }
> +
> + case GVIR_DESIGNER_DOMAIN_GRAPHICS_VNC: {
> + GVirConfigDomainGraphicsVnc *vnc;
> +
> + vnc = gvir_config_domain_graphics_vnc_new();
> + gvir_config_domain_graphics_vnc_set_autoport(vnc, TRUE);
> + graphics = GVIR_CONFIG_DOMAIN_GRAPHICS(vnc);
> +
> + break;
> + }
> +
> + default:
> + g_set_error(error, GVIR_DESIGNER_DOMAIN_ERROR, 0,
> + "Unknown graphics type: %d", type);
> + g_return_val_if_reached(NULL);
> + }
> +
> + gvir_config_domain_add_device(design->priv->config,
> + GVIR_CONFIG_DOMAIN_DEVICE(graphics));
> +
> + return graphics;
> +}
> +
> +
> static void gvir_designer_domain_add_power_management(GVirDesignerDomain
> *design)
> {
> GVirConfigDomainPowerManagement *pm;
> diff --git a/libvirt-designer/libvirt-designer-domain.h
> b/libvirt-designer/libvirt-designer-domain.h
> index c0d06e8..1399bd4 100644
> --- a/libvirt-designer/libvirt-designer-domain.h
> +++ b/libvirt-designer/libvirt-designer-domain.h
> @@ -44,6 +44,13 @@ typedef enum {
> GVIR_DESIGNER_DOMAIN_RESOURCES_RECOMMENDED,
> } GVirDesignerDomainResources;
>
> +typedef enum {
> + GVIR_DESIGNER_DOMAIN_GRAPHICS_DESKTOP,
> + GVIR_DESIGNER_DOMAIN_GRAPHICS_RDP,
> + GVIR_DESIGNER_DOMAIN_GRAPHICS_SPICE,
> + GVIR_DESIGNER_DOMAIN_GRAPHICS_VNC,
> +} GVirDesignerDomainGraphics;
> +
> typedef struct _GVirDesignerDomain GVirDesignerDomain;
> typedef struct _GVirDesignerDomainPrivate GVirDesignerDomainPrivate;
> typedef struct _GVirDesignerDomainClass GVirDesignerDomainClass;
> @@ -125,6 +132,9 @@ GVirConfigDomainInterface
> *gvir_designer_domain_add_interface_network(GVirDesign
> const
> char *network,
> GError
> **error);
>
> +GVirConfigDomainGraphics
> *gvir_designer_domain_add_graphics(GVirDesignerDomain *design,
> +
> GVirDesignerDomainGraphics type,
> + GError **error);
> GVirConfigDomainSound *gvir_designer_domain_add_sound(GVirDesignerDomain
> *design, GError **error);
>
> gboolean gvir_designer_domain_setup_resources(GVirDesignerDomain *design,
> diff --git a/libvirt-designer/libvirt-designer.sym
> b/libvirt-designer/libvirt-designer.sym
> index 0a8b49e..9a73993 100644
> --- a/libvirt-designer/libvirt-designer.sym
> +++ b/libvirt-designer/libvirt-designer.sym
> @@ -5,6 +5,7 @@ LIBVIRT_DESIGNER_0.0.2 {
>
> gvir_designer_domain_new;
> gvir_designer_domain_get_type;
> + gvir_designer_domain_graphics_get_type;
> gvir_designer_domain_get_config;
> gvir_designer_domain_get_os;
> gvir_designer_domain_get_platform;
> @@ -19,6 +20,7 @@ LIBVIRT_DESIGNER_0.0.2 {
> gvir_designer_domain_add_disk_device;
> gvir_designer_domain_add_floppy_file;
> gvir_designer_domain_add_floppy_device;
> + gvir_designer_domain_add_graphics;
> gvir_designer_domain_add_interface_network;
> gvir_designer_domain_add_sound;
> gvir_designer_domain_setup_resources;
>
--
libvir-list mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/libvir-list