ui: keep current cursor with QemuConsole
Keeping the current cursor around is useful, not only for VNC, but for other displays. Let's move it down, see the following patches for other usages. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
2512a026fa
commit
385ac97f8f
@ -459,6 +459,7 @@ QemuConsole *qemu_console_lookup_by_device(DeviceState *dev, uint32_t head);
|
||||
QemuConsole *qemu_console_lookup_by_device_name(const char *device_id,
|
||||
uint32_t head, Error **errp);
|
||||
QemuConsole *qemu_console_lookup_unused(void);
|
||||
QEMUCursor *qemu_console_get_cursor(QemuConsole *con);
|
||||
bool qemu_console_is_visible(QemuConsole *con);
|
||||
bool qemu_console_is_graphic(QemuConsole *con);
|
||||
bool qemu_console_is_fixedsize(QemuConsole *con);
|
||||
|
@ -94,6 +94,7 @@ struct QemuConsole {
|
||||
uint32_t head;
|
||||
QemuUIInfo ui_info;
|
||||
QEMUTimer *ui_timer;
|
||||
QEMUCursor *cursor;
|
||||
const GraphicHwOps *hw_ops;
|
||||
void *hw;
|
||||
|
||||
@ -1923,6 +1924,8 @@ void dpy_cursor_define(QemuConsole *con, QEMUCursor *cursor)
|
||||
DisplayState *s = con->ds;
|
||||
DisplayChangeListener *dcl;
|
||||
|
||||
cursor_unref(con->cursor);
|
||||
con->cursor = cursor_ref(cursor);
|
||||
if (!qemu_console_is_visible(con)) {
|
||||
return;
|
||||
}
|
||||
@ -2288,6 +2291,11 @@ QemuConsole *qemu_console_lookup_unused(void)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
QEMUCursor *qemu_console_get_cursor(QemuConsole *con)
|
||||
{
|
||||
return con->cursor;
|
||||
}
|
||||
|
||||
bool qemu_console_is_visible(QemuConsole *con)
|
||||
{
|
||||
return (con == active_console) || (con->dcls > 0);
|
||||
|
7
ui/vnc.c
7
ui/vnc.c
@ -988,10 +988,10 @@ static void vnc_mouse_set(DisplayChangeListener *dcl,
|
||||
|
||||
static int vnc_cursor_define(VncState *vs)
|
||||
{
|
||||
QEMUCursor *c = vs->vd->cursor;
|
||||
QEMUCursor *c = qemu_console_get_cursor(vs->vd->dcl.con);
|
||||
int isize;
|
||||
|
||||
if (!vs->vd->cursor) {
|
||||
if (!c) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -1029,10 +1029,7 @@ static void vnc_dpy_cursor_define(DisplayChangeListener *dcl,
|
||||
VncDisplay *vd = container_of(dcl, VncDisplay, dcl);
|
||||
VncState *vs;
|
||||
|
||||
cursor_unref(vd->cursor);
|
||||
g_free(vd->cursor_mask);
|
||||
|
||||
vd->cursor = cursor_ref(vd->cursor);
|
||||
vd->cursor_msize = cursor_get_mono_bpl(c) * c->height;
|
||||
vd->cursor_mask = g_malloc0(vd->cursor_msize);
|
||||
cursor_get_mono_mask(c, 0, vd->cursor_mask);
|
||||
|
Loading…
Reference in New Issue
Block a user