[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 1/3] ui/console: Add placeholder flag to message surface
From: |
Akihiko Odaki |
Subject: |
[PATCH v3 1/3] ui/console: Add placeholder flag to message surface |
Date: |
Thu, 25 Feb 2021 10:36:07 +0900 |
The surfaces created with former qemu_create_message_surface
did not display the content from the guest and always contained
simple messages describing the reason.
A display backend may want to hide the window showing such a
surface. This change renames the function to
qemu_create_placeholder_surface, and adds "placeholder" flag; the
display can check the flag to decide to do anything special like
hiding the window.
Signed-off-by: Akihiko Odaki <akihiko.odaki@gmail.com>
---
hw/display/vhost-user-gpu.c | 4 ++--
hw/display/virtio-gpu.c | 6 +++---
include/ui/console.h | 10 ++++++++--
ui/console.c | 10 +++++-----
ui/vnc.c | 2 +-
5 files changed, 19 insertions(+), 13 deletions(-)
diff --git a/hw/display/vhost-user-gpu.c b/hw/display/vhost-user-gpu.c
index 4d8cb3525bf..3e911da795e 100644
--- a/hw/display/vhost-user-gpu.c
+++ b/hw/display/vhost-user-gpu.c
@@ -194,8 +194,8 @@ vhost_user_gpu_handle_display(VhostUserGPU *g,
VhostUserGpuMsg *msg)
con = s->con;
if (m->scanout_id == 0 && m->width == 0) {
- s->ds = qemu_create_message_surface(640, 480,
- "Guest disabled display.");
+ s->ds = qemu_create_placeholder_surface(640, 480,
+ "Guest disabled display.");
dpy_gfx_replace_surface(con, s->ds);
} else {
s->ds = qemu_create_displaysurface(m->width, m->height);
diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c
index 2e4a9822b6a..c1f17bec17e 100644
--- a/hw/display/virtio-gpu.c
+++ b/hw/display/virtio-gpu.c
@@ -338,9 +338,9 @@ static void virtio_gpu_disable_scanout(VirtIOGPU *g, int
scanout_id)
if (scanout_id == 0) {
/* primary head */
- ds = qemu_create_message_surface(scanout->width ?: 640,
- scanout->height ?: 480,
- "Guest disabled display.");
+ ds = qemu_create_placeholder_surface(scanout->width ?: 640,
+ scanout->height ?: 480,
+ "Guest disabled display.");
}
dpy_gfx_replace_surface(scanout->con, ds);
scanout->resource_id = 0;
diff --git a/include/ui/console.h b/include/ui/console.h
index d30e972d0b5..c960b7066cc 100644
--- a/include/ui/console.h
+++ b/include/ui/console.h
@@ -106,6 +106,7 @@ struct QemuConsoleClass {
};
#define QEMU_ALLOCATED_FLAG 0x01
+#define QEMU_PLACEHOLDER_FLAG 0x02
typedef struct DisplaySurface {
pixman_format_code_t format;
@@ -259,8 +260,8 @@ DisplaySurface *qemu_create_displaysurface_from(int width,
int height,
pixman_format_code_t format,
int linesize, uint8_t *data);
DisplaySurface *qemu_create_displaysurface_pixman(pixman_image_t *image);
-DisplaySurface *qemu_create_message_surface(int w, int h,
- const char *msg);
+DisplaySurface *qemu_create_placeholder_surface(int w, int h,
+ const char *msg);
PixelFormat qemu_default_pixelformat(int bpp);
DisplaySurface *qemu_create_displaysurface(int width, int height);
@@ -281,6 +282,11 @@ static inline int is_buffer_shared(DisplaySurface *surface)
return !(surface->flags & QEMU_ALLOCATED_FLAG);
}
+static inline int is_placeholder(DisplaySurface *surface)
+{
+ return surface->flags & QEMU_PLACEHOLDER_FLAG;
+}
+
void register_displaychangelistener(DisplayChangeListener *dcl);
void update_displaychangelistener(DisplayChangeListener *dcl,
uint64_t interval);
diff --git a/ui/console.c b/ui/console.c
index c5d11bc7017..0caa39a6ed3 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -1436,8 +1436,8 @@ DisplaySurface
*qemu_create_displaysurface_pixman(pixman_image_t *image)
return surface;
}
-DisplaySurface *qemu_create_message_surface(int w, int h,
- const char *msg)
+DisplaySurface *qemu_create_placeholder_surface(int w, int h,
+ const char *msg)
{
DisplaySurface *surface = qemu_create_displaysurface(w, h);
pixman_color_t bg = color_table_rgb[0][QEMU_COLOR_BLACK];
@@ -1550,7 +1550,7 @@ void register_displaychangelistener(DisplayChangeListener
*dcl)
dcl->ops->dpy_gfx_switch(dcl, con->surface);
} else {
if (!dummy) {
- dummy = qemu_create_message_surface(640, 480, nodev);
+ dummy = qemu_create_placeholder_surface(640, 480, nodev);
}
dcl->ops->dpy_gfx_switch(dcl, dummy);
}
@@ -1998,7 +1998,7 @@ QemuConsole *graphic_console_init(DeviceState *dev,
uint32_t head,
&error_abort);
}
- surface = qemu_create_message_surface(width, height, noinit);
+ surface = qemu_create_placeholder_surface(width, height, noinit);
dpy_gfx_replace_surface(s, surface);
return s;
}
@@ -2027,7 +2027,7 @@ void graphic_console_close(QemuConsole *con)
if (con->gl) {
dpy_gl_scanout_disable(con);
}
- surface = qemu_create_message_surface(width, height, unplugged);
+ surface = qemu_create_placeholder_surface(width, height, unplugged);
dpy_gfx_replace_surface(con, surface);
}
diff --git a/ui/vnc.c b/ui/vnc.c
index 16bb3be770b..4d2151272e5 100644
--- a/ui/vnc.c
+++ b/ui/vnc.c
@@ -799,7 +799,7 @@ static void vnc_dpy_switch(DisplayChangeListener *dcl,
if (surface == NULL) {
if (placeholder == NULL) {
- placeholder = qemu_create_message_surface(640, 480,
placeholder_msg);
+ placeholder = qemu_create_placeholder_surface(640, 480,
placeholder_msg);
}
surface = placeholder;
}
--
2.24.3 (Apple Git-128)
- [PATCH] ui/console: Assert graphic console surface is not NULL, Akihiko Odaki, 2021/02/19
- Re: [PATCH] ui/console: Assert graphic console surface is not NULL, Gerd Hoffmann, 2021/02/19
- [PATCH v2] ui/console: Pass placeholder surface to displays, Akihiko Odaki, 2021/02/20
- Re: [PATCH v2] ui/console: Pass placeholder surface to displays, Gerd Hoffmann, 2021/02/22
- Re: [PATCH v2] ui/console: Pass placeholder surface to displays, Akihiko Odaki, 2021/02/22
- Re: [PATCH v2] ui/console: Pass placeholder surface to displays, Gerd Hoffmann, 2021/02/24
- [PATCH v3 1/3] ui/console: Add placeholder flag to message surface,
Akihiko Odaki <=
- [PATCH v3 2/3] ui/console: Pass placeholder surface to displays, Akihiko Odaki, 2021/02/24
- Re: [PATCH v3 2/3] ui/console: Pass placeholder surface to displays, Gerd Hoffmann, 2021/02/25
- [PATCH v3 3/3] virtio-gpu: Do not distinguish the primary console, Akihiko Odaki, 2021/02/24
- Re: [PATCH v3 3/3] virtio-gpu: Do not distinguish the primary console, Gerd Hoffmann, 2021/02/25
- Re: [PATCH v3 3/3] virtio-gpu: Do not distinguish the primary console, Akihiko Odaki, 2021/02/25
- Re: [PATCH v3 3/3] virtio-gpu: Do not distinguish the primary console, Gerd Hoffmann, 2021/02/25
- Re: [PATCH v3 1/3] ui/console: Add placeholder flag to message surface, Gerd Hoffmann, 2021/02/25