From: Dave Airlie <airl...@redhat.com> These are to be used for the UI to signal the video display, and vice-versa about changes in the state of a console, like size and offsets in relation to other consoles for input handling.
Signed-off-by: Dave Airlie <airl...@redhat.com> --- include/ui/console.h | 8 +++++++- ui/console.c | 26 ++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/include/ui/console.h b/include/ui/console.h index 98edf41..5731081 100644 --- a/include/ui/console.h +++ b/include/ui/console.h @@ -174,6 +174,9 @@ typedef struct DisplayChangeListenerOps { int x, int y, int on); void (*dpy_cursor_define)(DisplayChangeListener *dcl, QEMUCursor *cursor); + + void (*dpy_notify_state)(DisplayChangeListener *dcl, + int x, int y, uint32_t width, uint32_t height); } DisplayChangeListenerOps; struct DisplayChangeListener { @@ -224,7 +227,8 @@ void dpy_text_resize(QemuConsole *con, int w, int h); void dpy_mouse_set(QemuConsole *con, int x, int y, int on); void dpy_cursor_define(QemuConsole *con, QEMUCursor *cursor); bool dpy_cursor_define_supported(QemuConsole *con); - +void dpy_notify_state(QemuConsole *con, int x, int y, + uint32_t width, uint32_t height); static inline int surface_stride(DisplaySurface *s) { return pixman_image_get_stride(s->image); @@ -275,6 +279,7 @@ typedef struct GraphicHwOps { void (*gfx_update)(void *opaque); void (*text_update)(void *opaque, console_ch_t *text); void (*update_interval)(void *opaque, uint64_t interval); + void (*notify_state)(void *opaque, int idx, int x, int y, uint32_t width, uint32_t height); } GraphicHwOps; QemuConsole *graphic_console_init(DeviceState *dev, @@ -284,6 +289,7 @@ QemuConsole *graphic_console_init(DeviceState *dev, void graphic_hw_update(QemuConsole *con); void graphic_hw_invalidate(QemuConsole *con); void graphic_hw_text_update(QemuConsole *con, console_ch_t *chardata); +void graphic_hw_notify_state(QemuConsole *con, int x, int y, uint32_t width, uint32_t height); QemuConsole *qemu_console_lookup_by_index(unsigned int index); QemuConsole *qemu_console_lookup_by_device(DeviceState *dev); diff --git a/ui/console.c b/ui/console.c index aad4fc9..c20e336 100644 --- a/ui/console.c +++ b/ui/console.c @@ -265,6 +265,16 @@ void graphic_hw_invalidate(QemuConsole *con) } } +void graphic_hw_notify_state(QemuConsole *con, int x, int y, uint32_t width, uint32_t height) +{ + if (!con) { + con = active_console; + } + if (con && con->hw_ops->notify_state) { + con->hw_ops->notify_state(con->hw, con->index, x, y, width, height); + } +} + static void ppm_save(const char *filename, struct DisplaySurface *ds, Error **errp) { @@ -1562,6 +1572,22 @@ bool dpy_cursor_define_supported(QemuConsole *con) return false; } +void dpy_notify_state(QemuConsole *con, int x, int y, + uint32_t width, uint32_t height) +{ + DisplayState *s = con->ds; + DisplayChangeListener *dcl; + + QLIST_FOREACH(dcl, &s->listeners, next) { + if (con != (dcl->con ? dcl->con : active_console)) { + continue; + } + if (dcl->ops->dpy_notify_state) { + dcl->ops->dpy_notify_state(dcl, x, y, width, height); + } + } +} + /***********************************************************/ /* register display */ -- 1.8.3.1