]> git.proxmox.com Git - mirror_qemu.git/commit - ui/console.c
ui/console: Pass placeholder surface to displays
authorAkihiko Odaki <akihiko.odaki@gmail.com>
Thu, 25 Feb 2021 10:13:15 +0000 (19:13 +0900)
committerGerd Hoffmann <kraxel@redhat.com>
Thu, 4 Mar 2021 08:35:36 +0000 (09:35 +0100)
commitc821a58ee7003c2a0567dddaee33c2a5ae71c404
tree9235443c12f984ebc66ef35e9b20e418ce4fd7de
parentb5a087b071b6d4752234d8c190cc7f22f44ec2e9
ui/console: Pass placeholder surface to displays

ui/console used to accept NULL as graphic console surface, but its
semantics was inconsistent among displays:
- cocoa and gtk-egl perform NULL dereference.
- egl-headless, spice and spice-egl do nothing.
- gtk releases underlying resources.
- sdl2-2d and sdl2-gl destroys the window.
- vnc shows a message, "Display output is not active."

Fortunately, only virtio-gpu and virtio-gpu-3d assign NULL so
we can study them to figure out the desired behavior. They assign
NULL *except* for the primary display when the device is realized,
reset, or its scanout is disabled. This effectively destroys
windows for the (uninitialized) secondary displays.

To implement the consistent behavior of display device
realization/reset, this change embeds it to the operation
switching the surface. When NULL was given as a new surface when
switching, ui/console will instead passes a placeholder down
to each display listeners.

sdl destroys the window for a secondary console if its surface is a
placeholder. The other displays simply shows the placeholder.

Signed-off-by: Akihiko Odaki <akihiko.odaki@gmail.com>
Message-Id: <20210225101316.83940-2-akihiko.odaki@gmail.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
ui/console.c
ui/gtk.c
ui/sdl2-2d.c
ui/sdl2-gl.c
ui/spice-display.c
ui/vnc.c