xwayland: Remove xwl_present_event::buffer_released in favor of ::pixmap

No need for the separate boolean.

Reviewed-by: Olivier Fourdan <ofourdan@redhat.com>
This commit is contained in:
Michel Dänzer 2020-06-25 17:49:27 +02:00 committed by Michel Dänzer
parent 9141196d31
commit 9eb0b4f731
2 changed files with 16 additions and 14 deletions

View File

@ -117,19 +117,24 @@ xwl_present_reset_timer(struct xwl_present_window *xwl_present_window)
} }
} }
static void
xwl_present_release_pixmap(struct xwl_present_event *event)
{
if (!event->pixmap)
return;
xwl_pixmap_del_buffer_release_cb(event->pixmap);
dixDestroyPixmap(event->pixmap, event->pixmap->drawable.id);
event->pixmap = NULL;
}
static void static void
xwl_present_free_event(struct xwl_present_event *event) xwl_present_free_event(struct xwl_present_event *event)
{ {
if (!event) if (!event)
return; return;
if (event->pixmap) { xwl_present_release_pixmap(event);
if (!event->buffer_released)
xwl_pixmap_del_buffer_release_cb(event->pixmap);
dixDestroyPixmap(event->pixmap, event->pixmap->drawable.id);
}
xorg_list_del(&event->list); xorg_list_del(&event->list);
free(event); free(event);
} }
@ -178,8 +183,7 @@ xwl_present_buffer_release(PixmapPtr pixmap, void *data)
if (!event) if (!event)
return; return;
xwl_pixmap_del_buffer_release_cb(pixmap); xwl_present_release_pixmap(event);
event->buffer_released = TRUE;
if (event->abort) { if (event->abort) {
if (!event->pending) if (!event->pending)
@ -212,7 +216,7 @@ xwl_present_msc_bump(struct xwl_present_window *xwl_present_window)
present_wnmd_event_notify(xwl_present_window->window, event->event_id, present_wnmd_event_notify(xwl_present_window->window, event->event_id,
xwl_present_window->ust, msc); xwl_present_window->ust, msc);
if (event->buffer_released) { if (!event->pixmap) {
/* If the buffer was already released, clean up now */ /* If the buffer was already released, clean up now */
present_wnmd_event_notify(xwl_present_window->window, event->event_id, present_wnmd_event_notify(xwl_present_window->window, event->event_id,
xwl_present_window->ust, msc); xwl_present_window->ust, msc);
@ -281,7 +285,7 @@ xwl_present_sync_callback(void *data,
if (event->abort) { if (event->abort) {
/* Event might have been aborted */ /* Event might have been aborted */
if (event->buffer_released) if (!event->pixmap)
/* Buffer was already released, cleanup now */ /* Buffer was already released, cleanup now */
xwl_present_free_event(event); xwl_present_free_event(event);
return; return;
@ -292,7 +296,7 @@ xwl_present_sync_callback(void *data,
xwl_present_window->ust, xwl_present_window->ust,
xwl_present_window->msc); xwl_present_window->msc);
if (event->buffer_released) { if (!event->pixmap) {
/* If the buffer was already released, send the event now again */ /* If the buffer was already released, send the event now again */
present_wnmd_event_notify(xwl_present_window->window, present_wnmd_event_notify(xwl_present_window->window,
event->event_id, event->event_id,
@ -468,7 +472,6 @@ xwl_present_flip(WindowPtr present_window,
event->target_msc = target_msc; event->target_msc = target_msc;
event->pending = TRUE; event->pending = TRUE;
event->abort = FALSE; event->abort = FALSE;
event->buffer_released = FALSE;
if (sync_flip) { if (sync_flip) {
xorg_list_init(&event->list); xorg_list_init(&event->list);

View File

@ -56,7 +56,6 @@ struct xwl_present_event {
Bool abort; Bool abort;
Bool pending; Bool pending;
Bool buffer_released;
struct xwl_present_window *xwl_present_window; struct xwl_present_window *xwl_present_window;
PixmapPtr pixmap; PixmapPtr pixmap;