mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2026-04-20 23:30:40 +02:00
xwayland: Use WindowPtr for damage closure again
This reverts commit d3448f7aad.
Signed-off-by: Michel Dänzer <mdaenzer@redhat.com>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2135>
This commit is contained in:
parent
ceb313f277
commit
0472d7389e
1 changed files with 19 additions and 18 deletions
|
|
@ -295,11 +295,14 @@ need_source_validate_inc(struct xwl_screen *xwl_screen)
|
|||
static void
|
||||
damage_report(DamagePtr pDamage, RegionPtr pRegion, void *data)
|
||||
{
|
||||
struct xwl_window *xwl_window = data;
|
||||
struct xwl_screen *xwl_screen = xwl_window->xwl_screen;
|
||||
WindowPtr window = data;
|
||||
struct xwl_window *xwl_window = xwl_window_from_window(window);
|
||||
ScreenPtr screen = window->drawable.pScreen;
|
||||
struct xwl_screen *xwl_screen = xwl_screen_get(screen);
|
||||
PixmapPtr window_pixmap;
|
||||
|
||||
if (xwl_window->surface_window_damage &&
|
||||
if (xwl_window &&
|
||||
xwl_window->surface_window_damage &&
|
||||
RegionNotEmpty(pRegion)) {
|
||||
if (!RegionNotEmpty(xwl_window->surface_window_damage))
|
||||
need_source_validate_inc(xwl_screen);
|
||||
|
|
@ -312,10 +315,10 @@ damage_report(DamagePtr pDamage, RegionPtr pRegion, void *data)
|
|||
if (xwl_screen->ignore_damage)
|
||||
return;
|
||||
|
||||
if (xorg_list_is_empty(&xwl_window->link_damage))
|
||||
if (xwl_window && xorg_list_is_empty(&xwl_window->link_damage))
|
||||
xorg_list_add(&xwl_window->link_damage, &xwl_screen->damage_window_list);
|
||||
|
||||
window_pixmap = xwl_screen->screen->GetWindowPixmap(xwl_window->surface_window);
|
||||
window_pixmap = screen->GetWindowPixmap(xwl_window->surface_window);
|
||||
if (xwl_is_client_pixmap(window_pixmap))
|
||||
xwl_screen->screen->DestroyPixmap(xwl_window_swap_pixmap(xwl_window, FALSE));
|
||||
}
|
||||
|
|
@ -326,38 +329,36 @@ damage_destroy(DamagePtr pDamage, void *data)
|
|||
}
|
||||
|
||||
static Bool
|
||||
register_damage(struct xwl_window *xwl_window)
|
||||
register_damage(WindowPtr window)
|
||||
{
|
||||
WindowPtr surface_window = xwl_window->surface_window;
|
||||
DamagePtr damage;
|
||||
|
||||
damage = DamageCreate(damage_report, damage_destroy, DamageReportNonEmpty,
|
||||
FALSE, surface_window->drawable.pScreen, xwl_window);
|
||||
FALSE, window->drawable.pScreen, window);
|
||||
if (damage == NULL) {
|
||||
ErrorF("Failed creating damage\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
DamageRegister(&surface_window->drawable, damage);
|
||||
dixSetPrivate(&surface_window->devPrivates, &xwl_damage_private_key, damage);
|
||||
DamageRegister(&window->drawable, damage);
|
||||
dixSetPrivate(&window->devPrivates, &xwl_damage_private_key, damage);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
unregister_damage(struct xwl_window *xwl_window)
|
||||
unregister_damage(WindowPtr window)
|
||||
{
|
||||
WindowPtr surface_window = xwl_window->surface_window;
|
||||
DamagePtr damage;
|
||||
|
||||
damage = dixLookupPrivate(&surface_window->devPrivates, &xwl_damage_private_key);
|
||||
damage = dixLookupPrivate(&window->devPrivates, &xwl_damage_private_key);
|
||||
if (!damage)
|
||||
return;
|
||||
|
||||
DamageUnregister(damage);
|
||||
DamageDestroy(damage);
|
||||
|
||||
dixSetPrivate(&surface_window->devPrivates, &xwl_damage_private_key, NULL);
|
||||
dixSetPrivate(&window->devPrivates, &xwl_damage_private_key, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -1469,14 +1470,14 @@ xwl_window_update_surface_window(struct xwl_window *xwl_window)
|
|||
if (window_damage) {
|
||||
RegionInit(&damage_region, NullBox, 1);
|
||||
RegionCopy(&damage_region, DamageRegion(window_damage));
|
||||
unregister_damage(xwl_window);
|
||||
unregister_damage(xwl_window->surface_window);
|
||||
}
|
||||
|
||||
if (surface_window->drawable.depth != xwl_window->surface_window->drawable.depth)
|
||||
xwl_window_buffers_dispose(xwl_window, FALSE);
|
||||
|
||||
xwl_window->surface_window = surface_window;
|
||||
register_damage(xwl_window);
|
||||
register_damage(surface_window);
|
||||
|
||||
if (window_damage) {
|
||||
RegionPtr new_region = DamageRegion(window_get_damage(surface_window));
|
||||
|
|
@ -1632,7 +1633,7 @@ xwl_realize_window(WindowPtr window)
|
|||
|
||||
if (window == xwl_window->surface_window &&
|
||||
!window_get_damage(window))
|
||||
return register_damage(xwl_window);
|
||||
return register_damage(window);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -1789,7 +1790,7 @@ xwl_unrealize_window(WindowPtr window)
|
|||
|
||||
if (xwl_window) {
|
||||
if (window == xwl_window->toplevel) {
|
||||
unregister_damage(xwl_window);
|
||||
unregister_damage(window);
|
||||
xwl_window_dispose(xwl_window);
|
||||
} else if (window == xwl_window->surface_window) {
|
||||
xwl_window_update_surface_window(xwl_window);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue