fb: cleanup fbChangeWindowAttributes
This cleans up the duplication in fbChangeWindowAttributes, and fixes a bug if the fb24_32ReformatTile ever failed, since the old code would happily dereference it in the fbEvenTile call a few lines later. Signed-off-by: Dave Airlie <airlied@redhat.com> Reviewed-by: Mark Kettenis <kettenis@openbsd.org>
This commit is contained in:
		
							parent
							
								
									36c7158133
								
							
						
					
					
						commit
						f9834d312e
					
				|  | @ -146,51 +146,36 @@ fbCopyWindow(WindowPtr	    pWin, | |||
|     fbValidateDrawable (&pWin->drawable); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| fbFixupWindowPixmap(DrawablePtr pDrawable, PixmapPtr *ppPixmap) | ||||
| { | ||||
|     PixmapPtr pPixmap = *ppPixmap; | ||||
| 
 | ||||
|     if (pPixmap->drawable.bitsPerPixel != pDrawable->bitsPerPixel) | ||||
|     { | ||||
| 	pPixmap = fb24_32ReformatTile (pPixmap, pDrawable->bitsPerPixel); | ||||
| 	if (!pPixmap) | ||||
| 	    return; | ||||
| 	(*pDrawable->pScreen->DestroyPixmap) (*ppPixmap); | ||||
| 	*ppPixmap = pPixmap; | ||||
|     } | ||||
|     if (FbEvenTile (pPixmap->drawable.width * | ||||
| 		    pPixmap->drawable.bitsPerPixel)) | ||||
| 	fbPadPixmap (pPixmap); | ||||
| } | ||||
| 
 | ||||
| Bool | ||||
| fbChangeWindowAttributes(WindowPtr pWin, unsigned long mask) | ||||
| { | ||||
|     PixmapPtr	pPixmap; | ||||
|      | ||||
|     if (mask & CWBackPixmap) | ||||
|     { | ||||
| 	if (pWin->backgroundState == BackgroundPixmap) | ||||
| 	{ | ||||
| 	    pPixmap = pWin->background.pixmap; | ||||
| 	    if (pPixmap->drawable.bitsPerPixel != pWin->drawable.bitsPerPixel) | ||||
| 	    { | ||||
| 		pPixmap = fb24_32ReformatTile (pPixmap, | ||||
| 					       pWin->drawable.bitsPerPixel); | ||||
| 		if (pPixmap) | ||||
| 		{ | ||||
| 		    (*pWin->drawable.pScreen->DestroyPixmap) (pWin->background.pixmap); | ||||
| 		    pWin->background.pixmap = pPixmap; | ||||
| 		} | ||||
| 	    } | ||||
| 	    if (FbEvenTile (pPixmap->drawable.width * | ||||
| 			    pPixmap->drawable.bitsPerPixel)) | ||||
| 		fbPadPixmap (pPixmap); | ||||
| 	} | ||||
| 	    fbFixupWindowPixmap(&pWin->drawable, &pWin->background.pixmap); | ||||
|     } | ||||
|     if (mask & CWBorderPixmap) | ||||
|     { | ||||
| 	if (pWin->borderIsPixel == FALSE) | ||||
| 	{ | ||||
| 	    pPixmap = pWin->border.pixmap; | ||||
| 	    if (pPixmap->drawable.bitsPerPixel != | ||||
| 		pWin->drawable.bitsPerPixel) | ||||
| 	    { | ||||
| 		pPixmap = fb24_32ReformatTile (pPixmap, | ||||
| 					       pWin->drawable.bitsPerPixel); | ||||
| 		if (pPixmap) | ||||
| 		{ | ||||
| 		    (*pWin->drawable.pScreen->DestroyPixmap) (pWin->border.pixmap); | ||||
| 		    pWin->border.pixmap = pPixmap; | ||||
| 		} | ||||
| 	    } | ||||
| 	    if (FbEvenTile (pPixmap->drawable.width * | ||||
| 			    pPixmap->drawable.bitsPerPixel)) | ||||
| 		fbPadPixmap (pPixmap); | ||||
| 	} | ||||
| 	    fbFixupWindowPixmap(&pWin->drawable, &pWin->border.pixmap); | ||||
|     } | ||||
|     return TRUE; | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue