mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-12-11 16:00:50 -07:00
console: kill DisplayState->opaque
It's broken by design. There can be multiple DisplayChangeListener instances, so they simply can't store state in the (single) DisplayState struct. Try 'qemu -display gtk -vnc :0', watch it crash & burn. With DisplayChangeListenerOps having a more sane interface now we can simply use the DisplayChangeListener pointer to get access to our private data instead. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
7c20b4a374
commit
21ef45d712
4 changed files with 20 additions and 25 deletions
5
ui/gtk.c
5
ui/gtk.c
|
|
@ -230,7 +230,7 @@ static void gd_update_caption(GtkDisplayState *s)
|
|||
static void gd_update(DisplayChangeListener *dcl,
|
||||
DisplayState *ds, int x, int y, int w, int h)
|
||||
{
|
||||
GtkDisplayState *s = ds->opaque;
|
||||
GtkDisplayState *s = container_of(dcl, GtkDisplayState, dcl);
|
||||
int x1, x2, y1, y2;
|
||||
int mx, my;
|
||||
int fbw, fbh;
|
||||
|
|
@ -269,7 +269,7 @@ static void gd_refresh(DisplayChangeListener *dcl,
|
|||
static void gd_resize(DisplayChangeListener *dcl,
|
||||
DisplayState *ds)
|
||||
{
|
||||
GtkDisplayState *s = ds->opaque;
|
||||
GtkDisplayState *s = container_of(dcl, GtkDisplayState, dcl);
|
||||
cairo_format_t kind;
|
||||
int stride;
|
||||
|
||||
|
|
@ -1297,7 +1297,6 @@ void gtk_display_init(DisplayState *ds)
|
|||
|
||||
gtk_init(NULL, NULL);
|
||||
|
||||
ds->opaque = s;
|
||||
s->ds = ds;
|
||||
s->dcl.ops = &dcl_ops;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue