mirror of
https://github.com/X11Libre/xserver.git
synced 2026-03-24 05:54:08 +00:00
present: Dispatch clear_window_flip via present_screen_priv hook
Eliminates special cases in present_destroy_window. Acked-by: Olivier Fourdan <ofourdan@redhat.com>
This commit is contained in:
committed by
Michel Dänzer
parent
93666ebe37
commit
b6d54b0f5d
@@ -86,50 +86,6 @@ present_free_window_vblank(WindowPtr window)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Clean up any pending or current flips for this window
|
||||
*/
|
||||
static void
|
||||
present_clear_window_flip(WindowPtr window)
|
||||
{
|
||||
ScreenPtr screen = window->drawable.pScreen;
|
||||
present_screen_priv_ptr screen_priv = present_screen_priv(screen);
|
||||
present_vblank_ptr flip_pending = screen_priv->flip_pending;
|
||||
|
||||
if (flip_pending && flip_pending->window == window) {
|
||||
present_set_abort_flip(screen);
|
||||
flip_pending->window = NULL;
|
||||
}
|
||||
if (screen_priv->flip_window == window) {
|
||||
present_restore_screen_pixmap(screen);
|
||||
screen_priv->flip_window = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
present_wnmd_clear_window_flip(WindowPtr window)
|
||||
{
|
||||
present_window_priv_ptr window_priv = present_window_priv(window);
|
||||
present_vblank_ptr vblank, tmp;
|
||||
|
||||
xorg_list_for_each_entry_safe(vblank, tmp, &window_priv->flip_queue, event_queue) {
|
||||
present_pixmap_idle(vblank->pixmap, vblank->window, vblank->serial, vblank->idle_fence);
|
||||
present_vblank_destroy(vblank);
|
||||
}
|
||||
|
||||
xorg_list_for_each_entry_safe(vblank, tmp, &window_priv->idle_queue, event_queue) {
|
||||
present_pixmap_idle(vblank->pixmap, vblank->window, vblank->serial, vblank->idle_fence);
|
||||
present_vblank_destroy(vblank);
|
||||
}
|
||||
|
||||
vblank = window_priv->flip_active;
|
||||
if (vblank) {
|
||||
present_pixmap_idle(vblank->pixmap, vblank->window, vblank->serial, vblank->idle_fence);
|
||||
present_vblank_destroy(vblank);
|
||||
}
|
||||
window_priv->flip_active = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Hook the close window function to clean up our window private
|
||||
*/
|
||||
@@ -146,10 +102,7 @@ present_destroy_window(WindowPtr window)
|
||||
present_free_events(window);
|
||||
present_free_window_vblank(window);
|
||||
|
||||
if (screen_priv->wnmd_info)
|
||||
present_wnmd_clear_window_flip(window);
|
||||
else
|
||||
present_clear_window_flip(window);
|
||||
screen_priv->clear_window_flip(window);
|
||||
|
||||
free(window_priv);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user