xwayland: Use xwl_window for damage closure

Preparation for later commits, no functional change intended.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1300>
This commit is contained in:
Michel Dänzer 2024-02-08 18:18:06 +01:00 committed by Marge Bot
parent 07f6032627
commit d3448f7aad

View File

@ -192,15 +192,10 @@ xwl_window_update_property(struct xwl_window *xwl_window,
static void static void
damage_report(DamagePtr pDamage, RegionPtr pRegion, void *data) damage_report(DamagePtr pDamage, RegionPtr pRegion, void *data)
{ {
WindowPtr window = data; struct xwl_window *xwl_window = data;
struct xwl_window *xwl_window = xwl_window_get(window); struct xwl_screen *xwl_screen = xwl_window->xwl_screen;
struct xwl_screen *xwl_screen;
PixmapPtr window_pixmap; PixmapPtr window_pixmap;
if (!xwl_window)
return;
xwl_screen = xwl_window->xwl_screen;
if (xwl_screen->ignore_damage) if (xwl_screen->ignore_damage)
return; return;
@ -218,37 +213,38 @@ damage_destroy(DamagePtr pDamage, void *data)
} }
static Bool static Bool
register_damage(WindowPtr window) register_damage(struct xwl_window *xwl_window)
{ {
WindowPtr toplevel = xwl_window->toplevel;
DamagePtr damage; DamagePtr damage;
damage = DamageCreate(damage_report, damage_destroy, DamageReportNonEmpty, damage = DamageCreate(damage_report, damage_destroy, DamageReportNonEmpty,
FALSE, window->drawable.pScreen, window); FALSE, toplevel->drawable.pScreen, xwl_window);
if (damage == NULL) { if (damage == NULL) {
ErrorF("Failed creating damage\n"); ErrorF("Failed creating damage\n");
return FALSE; return FALSE;
} }
DamageRegister(&window->drawable, damage); DamageRegister(&toplevel->drawable, damage);
dixSetPrivate(&toplevel->devPrivates, &xwl_damage_private_key, damage);
dixSetPrivate(&window->devPrivates, &xwl_damage_private_key, damage);
return TRUE; return TRUE;
} }
static void static void
unregister_damage(WindowPtr window) unregister_damage(struct xwl_window *xwl_window)
{ {
WindowPtr toplevel = xwl_window->toplevel;
DamagePtr damage; DamagePtr damage;
damage = dixLookupPrivate(&window->devPrivates, &xwl_damage_private_key); damage = dixLookupPrivate(&toplevel->devPrivates, &xwl_damage_private_key);
if (!damage) if (!damage)
return; return;
DamageUnregister(damage); DamageUnregister(damage);
DamageDestroy(damage); DamageDestroy(damage);
dixSetPrivate(&window->devPrivates, &xwl_damage_private_key, NULL); dixSetPrivate(&toplevel->devPrivates, &xwl_damage_private_key, NULL);
} }
static Bool static Bool
@ -1366,7 +1362,7 @@ xwl_realize_window(WindowPtr window)
if (window == xwl_window->toplevel && if (window == xwl_window->toplevel &&
!window_get_damage(window)) !window_get_damage(window))
return register_damage(window); return register_damage(xwl_window);
return TRUE; return TRUE;
} }
@ -1503,7 +1499,7 @@ xwl_unrealize_window(WindowPtr window)
release_wl_surface_for_window(xwl_window); release_wl_surface_for_window(xwl_window);
xorg_list_del(&xwl_window->link_damage); xorg_list_del(&xwl_window->link_damage);
xorg_list_del(&xwl_window->link_window); xorg_list_del(&xwl_window->link_window);
unregister_damage(window); unregister_damage(xwl_window);
xwl_window_buffers_dispose(xwl_window); xwl_window_buffers_dispose(xwl_window);