This makes qxl respond to user interface window resizes
when not using spice, so it works with gtk and vnc too.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/display/qxl.c | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/hw/display/qxl.c b/hw/display/qxl.c
index 431c1070967a..e1df95c3e8a9 100644
--- a/hw/display/qxl.c
+++ b/hw/display/qxl.c
@@ -1177,8 +1177,35 @@ static const QXLInterface qxl_interface = {
.client_monitors_config = interface_client_monitors_config,
};
+static int qxl_ui_info(void *opaque, uint32_t idx, QemuUIInfo *info)
+{
+ PCIQXLDevice *qxl = opaque;
+ VDAgentMonitorsConfig *cfg;
+ size_t size;
+
+ if (using_spice) {
+ /* spice agent will handle display resize */
+ return -1;
+ }
+ if (idx > 0) {
+ /* supporting only single head for now */
+ return -1;
+ }
+
+ /* go fake a spice agent message */
+ size = sizeof(VDAgentMonitorsConfig) + sizeof(VDAgentMonConfig);
+ cfg = g_malloc0(size);
+ cfg->num_of_monitors = 1;
+ cfg->monitors[0].width = info->width;
+ cfg->monitors[0].height = info->height;
+ interface_client_monitors_config(&qxl->ssd.qxl, cfg);
+ g_free(cfg);
+ return 0;
+}
+
static const GraphicHwOps qxl_ops = {
.gfx_update = qxl_hw_update,
+ .ui_info = qxl_ui_info,
.gfx_update_async = true,
};
--
2.27.0
On Thu, Dec 03, 2020 at 12:08:05PM +0100, Gerd Hoffmann wrote:
> This makes qxl respond to user interface window resizes
> when not using spice, so it works with gtk and vnc too.
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
> hw/display/qxl.c | 27 +++++++++++++++++++++++++++
> 1 file changed, 27 insertions(+)
>
> diff --git a/hw/display/qxl.c b/hw/display/qxl.c
> index 431c1070967a..e1df95c3e8a9 100644
> --- a/hw/display/qxl.c
> +++ b/hw/display/qxl.c
> @@ -1177,8 +1177,35 @@ static const QXLInterface qxl_interface = {
> .client_monitors_config = interface_client_monitors_config,
> };
>
> +static int qxl_ui_info(void *opaque, uint32_t idx, QemuUIInfo *info)
> +{
> + PCIQXLDevice *qxl = opaque;
> + VDAgentMonitorsConfig *cfg;
> + size_t size;
> +
> + if (using_spice) {
> + /* spice agent will handle display resize */
> + return -1;
> + }
Does this break VNC resizes if both VNC + SPICE are enabled
but the client is connected with VNC ?
> + if (idx > 0) {
> + /* supporting only single head for now */
> + return -1;
> + }
> +
> + /* go fake a spice agent message */
> + size = sizeof(VDAgentMonitorsConfig) + sizeof(VDAgentMonConfig);
> + cfg = g_malloc0(size);
> + cfg->num_of_monitors = 1;
> + cfg->monitors[0].width = info->width;
> + cfg->monitors[0].height = info->height;
> + interface_client_monitors_config(&qxl->ssd.qxl, cfg);
> + g_free(cfg);
> + return 0;
> +}
> +
> static const GraphicHwOps qxl_ops = {
> .gfx_update = qxl_hw_update,
> + .ui_info = qxl_ui_info,
> .gfx_update_async = true,
> };
>
> --
> 2.27.0
>
>
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
On Fri, Dec 4, 2020 at 4:21 PM Daniel P. Berrangé <berrange@redhat.com>
wrote:
> On Thu, Dec 03, 2020 at 12:08:05PM +0100, Gerd Hoffmann wrote:
> > This makes qxl respond to user interface window resizes
> > when not using spice, so it works with gtk and vnc too.
> >
> > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> > ---
> > hw/display/qxl.c | 27 +++++++++++++++++++++++++++
> > 1 file changed, 27 insertions(+)
> >
> > diff --git a/hw/display/qxl.c b/hw/display/qxl.c
> > index 431c1070967a..e1df95c3e8a9 100644
> > --- a/hw/display/qxl.c
> > +++ b/hw/display/qxl.c
> > @@ -1177,8 +1177,35 @@ static const QXLInterface qxl_interface = {
> > .client_monitors_config = interface_client_monitors_config,
> > };
> >
> > +static int qxl_ui_info(void *opaque, uint32_t idx, QemuUIInfo *info)
> > +{
> > + PCIQXLDevice *qxl = opaque;
> > + VDAgentMonitorsConfig *cfg;
> > + size_t size;
> > +
> > + if (using_spice) {
> > + /* spice agent will handle display resize */
> > + return -1;
> > + }
>
> Does this break VNC resizes if both VNC + SPICE are enabled
> but the client is connected with VNC ?
>
Yes. I am not sure we should worry about that case much, either way.
Perhaps it's best to handle both QEMU-originated resize and spice-agent
based resizes, even if the former can lose details from the later for
multiple screens.
> > + if (idx > 0) {
> > + /* supporting only single head for now */
> > + return -1;
> > + }
> > +
> > + /* go fake a spice agent message */
> > + size = sizeof(VDAgentMonitorsConfig) + sizeof(VDAgentMonConfig);
> > + cfg = g_malloc0(size);
> > + cfg->num_of_monitors = 1;
> > + cfg->monitors[0].width = info->width;
> > + cfg->monitors[0].height = info->height;
> > + interface_client_monitors_config(&qxl->ssd.qxl, cfg);
> > + g_free(cfg);
> > + return 0;
> > +}
> > +
> > static const GraphicHwOps qxl_ops = {
> > .gfx_update = qxl_hw_update,
> > + .ui_info = qxl_ui_info,
> > .gfx_update_async = true,
> > };
> >
> > --
> > 2.27.0
> >
> >
>
> Regards,
> Daniel
> --
> |: https://berrange.com -o-
> https://www.flickr.com/photos/dberrange :|
> |: https://libvirt.org -o-
> https://fstop138.berrange.com :|
> |: https://entangle-photo.org -o-
> https://www.instagram.com/dberrange :|
>
>
>
--
Marc-André Lureau
On Fri, Dec 04, 2020 at 04:45:41PM +0400, Marc-André Lureau wrote:
> On Fri, Dec 4, 2020 at 4:21 PM Daniel P. Berrangé <berrange@redhat.com>
> wrote:
>
> > On Thu, Dec 03, 2020 at 12:08:05PM +0100, Gerd Hoffmann wrote:
> > > This makes qxl respond to user interface window resizes
> > > when not using spice, so it works with gtk and vnc too.
> > >
> > > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> > > ---
> > > hw/display/qxl.c | 27 +++++++++++++++++++++++++++
> > > 1 file changed, 27 insertions(+)
> > >
> > > diff --git a/hw/display/qxl.c b/hw/display/qxl.c
> > > index 431c1070967a..e1df95c3e8a9 100644
> > > --- a/hw/display/qxl.c
> > > +++ b/hw/display/qxl.c
> > > @@ -1177,8 +1177,35 @@ static const QXLInterface qxl_interface = {
> > > .client_monitors_config = interface_client_monitors_config,
> > > };
> > >
> > > +static int qxl_ui_info(void *opaque, uint32_t idx, QemuUIInfo *info)
> > > +{
> > > + PCIQXLDevice *qxl = opaque;
> > > + VDAgentMonitorsConfig *cfg;
> > > + size_t size;
> > > +
> > > + if (using_spice) {
> > > + /* spice agent will handle display resize */
> > > + return -1;
> > > + }
> >
> > Does this break VNC resizes if both VNC + SPICE are enabled
> > but the client is connected with VNC ?
> >
>
> Yes. I am not sure we should worry about that case much, either way.
> Perhaps it's best to handle both QEMU-originated resize and spice-agent
> based resizes, even if the former can lose details from the later for
> multiple screens.
Or at least worth comment to say that we're intentionally breaking
VNC resizes when both are enabled.
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
© 2016 - 2025 Red Hat, Inc.