xwayland: Return NULL from xwl_window_buffer_get_available
If there's no available window buffer. This allows keeping xwl_window_buffer->damage_region empty for a newly allocated xwl_window_buffer in xwl_window_buffers_get_pixmap, instead of first populating it in xwl_window_buffer_add_damage_region and then emptying it again.
This commit is contained in:
		
							parent
							
								
									6779ec5bf6
								
							
						
					
					
						commit
						777c3e0000
					
				|  | @ -140,7 +140,7 @@ static struct xwl_window_buffer * | |||
| xwl_window_buffer_get_available(struct xwl_window *xwl_window) | ||||
| { | ||||
|     if (xorg_list_is_empty(&xwl_window->window_buffers_available)) | ||||
|         return xwl_window_buffer_new(xwl_window); | ||||
|         return NULL; | ||||
| 
 | ||||
|     return xorg_list_last_entry(&xwl_window->window_buffers_available, | ||||
|                                 struct xwl_window_buffer, | ||||
|  | @ -341,13 +341,10 @@ xwl_window_buffers_get_pixmap(struct xwl_window *xwl_window, | |||
|         return window_pixmap; | ||||
| #endif /* XWL_HAS_GLAMOR */ | ||||
| 
 | ||||
|     xwl_window_buffer = xwl_window_buffer_get_available(xwl_window); | ||||
|     if (!xwl_window_buffer) | ||||
|         return window_pixmap; | ||||
| 
 | ||||
|     xwl_window_buffer_add_damage_region(xwl_window, damage_region); | ||||
| 
 | ||||
|     if (xwl_window_buffer->pixmap) { | ||||
|     xwl_window_buffer = xwl_window_buffer_get_available(xwl_window); | ||||
|     if (xwl_window_buffer) { | ||||
|         RegionPtr full_damage = xwl_window_buffer->damage_region; | ||||
|         BoxPtr pBox = RegionRects(full_damage); | ||||
|         int nBox = RegionNumRects(full_damage); | ||||
|  | @ -364,10 +361,16 @@ xwl_window_buffers_get_pixmap(struct xwl_window *xwl_window, | |||
| 
 | ||||
|             pBox++; | ||||
|         } | ||||
| 
 | ||||
|         RegionEmpty(xwl_window_buffer->damage_region); | ||||
|     } else { | ||||
|         xwl_window_buffer = xwl_window_buffer_new(xwl_window); | ||||
| 
 | ||||
|         new_window_pixmap = xwl_window_allocate_pixmap(xwl_window); | ||||
|         if (!new_window_pixmap) | ||||
|         if (!new_window_pixmap) { | ||||
|             xwl_window_buffer_maybe_dispose(xwl_window_buffer); | ||||
|             return window_pixmap; | ||||
|         } | ||||
| 
 | ||||
|         copy_pixmap_area(window_pixmap, | ||||
|                          new_window_pixmap, | ||||
|  | @ -376,7 +379,6 @@ xwl_window_buffers_get_pixmap(struct xwl_window *xwl_window, | |||
|                          window_pixmap->drawable.height); | ||||
|     } | ||||
| 
 | ||||
|     RegionEmpty(xwl_window_buffer->damage_region); | ||||
|     xwl_window_buffer->pixmap = window_pixmap; | ||||
| 
 | ||||
|     /* Hold a reference on the buffer until it's released by the compositor */ | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue