Browse Source

ui/dbus: factor out sending a scanout

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
pull/263/head
Marc-André Lureau 2 years ago
parent
commit
7945576cf2
  1. 35
      ui/dbus-listener.c

35
ui/dbus-listener.c

@ -630,11 +630,26 @@ static void dbus_gfx_update_sub(DBusDisplayListener *ddl,
DBUS_DEFAULT_TIMEOUT, NULL, NULL, NULL);
}
static void ddl_scanout(DBusDisplayListener *ddl)
{
GVariant *v_data;
v_data = g_variant_new_from_data(
G_VARIANT_TYPE("ay"), surface_data(ddl->ds),
surface_stride(ddl->ds) * surface_height(ddl->ds), TRUE,
(GDestroyNotify)pixman_image_unref, pixman_image_ref(ddl->ds->image));
qemu_dbus_display1_listener_call_scanout(
ddl->proxy, surface_width(ddl->ds), surface_height(ddl->ds),
surface_stride(ddl->ds), surface_format(ddl->ds), v_data,
G_DBUS_CALL_FLAGS_NONE, DBUS_DEFAULT_TIMEOUT, NULL, NULL,
g_object_ref(ddl));
}
static void dbus_gfx_update(DisplayChangeListener *dcl,
int x, int y, int w, int h)
{
DBusDisplayListener *ddl = container_of(dcl, DBusDisplayListener, dcl);
GVariant *v_data;
assert(ddl->ds);
@ -652,23 +667,7 @@ static void dbus_gfx_update(DisplayChangeListener *dcl,
#endif
if (x == 0 && y == 0 && w == surface_width(ddl->ds) && h == surface_height(ddl->ds)) {
v_data = g_variant_new_from_data(
G_VARIANT_TYPE("ay"),
surface_data(ddl->ds),
surface_stride(ddl->ds) * surface_height(ddl->ds),
TRUE,
(GDestroyNotify)pixman_image_unref,
pixman_image_ref(ddl->ds->image));
qemu_dbus_display1_listener_call_scanout(
ddl->proxy,
surface_width(ddl->ds),
surface_height(ddl->ds),
surface_stride(ddl->ds),
surface_format(ddl->ds),
v_data,
G_DBUS_CALL_FLAGS_NONE,
DBUS_DEFAULT_TIMEOUT, NULL, NULL, NULL);
return;
return ddl_scanout(ddl);
}
dbus_gfx_update_sub(ddl, x, y, w, h);

Loading…
Cancel
Save