ui/dbus: associate the DBusDisplayConsole listener with the given console
DBusDisplayConsole is specific to a given QemuConsole.
Fixes: commit 142ca628
("ui: add a D-Bus display backend")
Reported-by: Akihiko Odaki <akihiko.odaki@gmail.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
cd19c25fbf
commit
417a231947
@ -36,7 +36,6 @@ struct _DBusDisplayConsole {
|
|||||||
DisplayChangeListener dcl;
|
DisplayChangeListener dcl;
|
||||||
|
|
||||||
DBusDisplay *display;
|
DBusDisplay *display;
|
||||||
QemuConsole *con;
|
|
||||||
GHashTable *listeners;
|
GHashTable *listeners;
|
||||||
QemuDBusDisplay1Console *iface;
|
QemuDBusDisplay1Console *iface;
|
||||||
|
|
||||||
@ -118,7 +117,7 @@ dbus_gl_scanout_update(DisplayChangeListener *dcl,
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static const DisplayChangeListenerOps dbus_console_dcl_ops = {
|
const DisplayChangeListenerOps dbus_console_dcl_ops = {
|
||||||
.dpy_name = "dbus-console",
|
.dpy_name = "dbus-console",
|
||||||
.dpy_gfx_switch = dbus_gfx_switch,
|
.dpy_gfx_switch = dbus_gfx_switch,
|
||||||
.dpy_gfx_update = dbus_gfx_update,
|
.dpy_gfx_update = dbus_gfx_update,
|
||||||
@ -191,7 +190,7 @@ dbus_console_set_ui_info(DBusDisplayConsole *ddc,
|
|||||||
.height = arg_height,
|
.height = arg_height,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!dpy_ui_info_supported(ddc->con)) {
|
if (!dpy_ui_info_supported(ddc->dcl.con)) {
|
||||||
g_dbus_method_invocation_return_error(invocation,
|
g_dbus_method_invocation_return_error(invocation,
|
||||||
DBUS_DISPLAY_ERROR,
|
DBUS_DISPLAY_ERROR,
|
||||||
DBUS_DISPLAY_ERROR_UNSUPPORTED,
|
DBUS_DISPLAY_ERROR_UNSUPPORTED,
|
||||||
@ -199,7 +198,7 @@ dbus_console_set_ui_info(DBusDisplayConsole *ddc,
|
|||||||
return DBUS_METHOD_INVOCATION_HANDLED;
|
return DBUS_METHOD_INVOCATION_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
dpy_set_ui_info(ddc->con, &info, false);
|
dpy_set_ui_info(ddc->dcl.con, &info, false);
|
||||||
qemu_dbus_display1_console_complete_set_uiinfo(ddc->iface, invocation);
|
qemu_dbus_display1_console_complete_set_uiinfo(ddc->iface, invocation);
|
||||||
return DBUS_METHOD_INVOCATION_HANDLED;
|
return DBUS_METHOD_INVOCATION_HANDLED;
|
||||||
}
|
}
|
||||||
@ -335,8 +334,8 @@ dbus_mouse_rel_motion(DBusDisplayConsole *ddc,
|
|||||||
return DBUS_METHOD_INVOCATION_HANDLED;
|
return DBUS_METHOD_INVOCATION_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
qemu_input_queue_rel(ddc->con, INPUT_AXIS_X, dx);
|
qemu_input_queue_rel(ddc->dcl.con, INPUT_AXIS_X, dx);
|
||||||
qemu_input_queue_rel(ddc->con, INPUT_AXIS_Y, dy);
|
qemu_input_queue_rel(ddc->dcl.con, INPUT_AXIS_Y, dy);
|
||||||
qemu_input_event_sync();
|
qemu_input_event_sync();
|
||||||
|
|
||||||
qemu_dbus_display1_mouse_complete_rel_motion(ddc->iface_mouse,
|
qemu_dbus_display1_mouse_complete_rel_motion(ddc->iface_mouse,
|
||||||
@ -362,8 +361,8 @@ dbus_mouse_set_pos(DBusDisplayConsole *ddc,
|
|||||||
return DBUS_METHOD_INVOCATION_HANDLED;
|
return DBUS_METHOD_INVOCATION_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
width = qemu_console_get_width(ddc->con, 0);
|
width = qemu_console_get_width(ddc->dcl.con, 0);
|
||||||
height = qemu_console_get_height(ddc->con, 0);
|
height = qemu_console_get_height(ddc->dcl.con, 0);
|
||||||
if (x >= width || y >= height) {
|
if (x >= width || y >= height) {
|
||||||
g_dbus_method_invocation_return_error(
|
g_dbus_method_invocation_return_error(
|
||||||
invocation, DBUS_DISPLAY_ERROR,
|
invocation, DBUS_DISPLAY_ERROR,
|
||||||
@ -371,8 +370,8 @@ dbus_mouse_set_pos(DBusDisplayConsole *ddc,
|
|||||||
"Invalid mouse position");
|
"Invalid mouse position");
|
||||||
return DBUS_METHOD_INVOCATION_HANDLED;
|
return DBUS_METHOD_INVOCATION_HANDLED;
|
||||||
}
|
}
|
||||||
qemu_input_queue_abs(ddc->con, INPUT_AXIS_X, x, 0, width);
|
qemu_input_queue_abs(ddc->dcl.con, INPUT_AXIS_X, x, 0, width);
|
||||||
qemu_input_queue_abs(ddc->con, INPUT_AXIS_Y, y, 0, height);
|
qemu_input_queue_abs(ddc->dcl.con, INPUT_AXIS_Y, y, 0, height);
|
||||||
qemu_input_event_sync();
|
qemu_input_event_sync();
|
||||||
|
|
||||||
qemu_dbus_display1_mouse_complete_set_abs_position(ddc->iface_mouse,
|
qemu_dbus_display1_mouse_complete_set_abs_position(ddc->iface_mouse,
|
||||||
@ -388,7 +387,7 @@ dbus_mouse_press(DBusDisplayConsole *ddc,
|
|||||||
{
|
{
|
||||||
trace_dbus_mouse_press(button);
|
trace_dbus_mouse_press(button);
|
||||||
|
|
||||||
qemu_input_queue_btn(ddc->con, button, true);
|
qemu_input_queue_btn(ddc->dcl.con, button, true);
|
||||||
qemu_input_event_sync();
|
qemu_input_event_sync();
|
||||||
|
|
||||||
qemu_dbus_display1_mouse_complete_press(ddc->iface_mouse, invocation);
|
qemu_dbus_display1_mouse_complete_press(ddc->iface_mouse, invocation);
|
||||||
@ -403,7 +402,7 @@ dbus_mouse_release(DBusDisplayConsole *ddc,
|
|||||||
{
|
{
|
||||||
trace_dbus_mouse_release(button);
|
trace_dbus_mouse_release(button);
|
||||||
|
|
||||||
qemu_input_queue_btn(ddc->con, button, false);
|
qemu_input_queue_btn(ddc->dcl.con, button, false);
|
||||||
qemu_input_event_sync();
|
qemu_input_event_sync();
|
||||||
|
|
||||||
qemu_dbus_display1_mouse_complete_release(ddc->iface_mouse, invocation);
|
qemu_dbus_display1_mouse_complete_release(ddc->iface_mouse, invocation);
|
||||||
@ -424,7 +423,7 @@ dbus_mouse_mode_change(Notifier *notify, void *data)
|
|||||||
|
|
||||||
int dbus_display_console_get_index(DBusDisplayConsole *ddc)
|
int dbus_display_console_get_index(DBusDisplayConsole *ddc)
|
||||||
{
|
{
|
||||||
return qemu_console_get_index(ddc->con);
|
return qemu_console_get_index(ddc->dcl.con);
|
||||||
}
|
}
|
||||||
|
|
||||||
DBusDisplayConsole *
|
DBusDisplayConsole *
|
||||||
@ -446,7 +445,7 @@ dbus_display_console_new(DBusDisplay *display, QemuConsole *con)
|
|||||||
"g-object-path", path,
|
"g-object-path", path,
|
||||||
NULL);
|
NULL);
|
||||||
ddc->display = display;
|
ddc->display = display;
|
||||||
ddc->con = con;
|
ddc->dcl.con = con;
|
||||||
/* handle errors, and skip non graphics? */
|
/* handle errors, and skip non graphics? */
|
||||||
qemu_console_fill_device_address(
|
qemu_console_fill_device_address(
|
||||||
con, device_addr, sizeof(device_addr), NULL);
|
con, device_addr, sizeof(device_addr), NULL);
|
||||||
|
@ -52,7 +52,7 @@ static bool
|
|||||||
dbus_is_compatible_dcl(DisplayGLCtx *dgc,
|
dbus_is_compatible_dcl(DisplayGLCtx *dgc,
|
||||||
DisplayChangeListener *dcl)
|
DisplayChangeListener *dcl)
|
||||||
{
|
{
|
||||||
return dcl->ops == &dbus_gl_dcl_ops;
|
return dcl->ops == &dbus_gl_dcl_ops || dcl->ops == &dbus_console_dcl_ops;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const DisplayGLCtxOps dbus_gl_ops = {
|
static const DisplayGLCtxOps dbus_gl_ops = {
|
||||||
|
@ -79,6 +79,9 @@ dbus_display_console_new(DBusDisplay *display, QemuConsole *con);
|
|||||||
int
|
int
|
||||||
dbus_display_console_get_index(DBusDisplayConsole *ddc);
|
dbus_display_console_get_index(DBusDisplayConsole *ddc);
|
||||||
|
|
||||||
|
|
||||||
|
extern const DisplayChangeListenerOps dbus_console_dcl_ops;
|
||||||
|
|
||||||
#define DBUS_DISPLAY_TYPE_LISTENER dbus_display_listener_get_type()
|
#define DBUS_DISPLAY_TYPE_LISTENER dbus_display_listener_get_type()
|
||||||
G_DECLARE_FINAL_TYPE(DBusDisplayListener,
|
G_DECLARE_FINAL_TYPE(DBusDisplayListener,
|
||||||
dbus_display_listener,
|
dbus_display_listener,
|
||||||
|
Loading…
Reference in New Issue
Block a user