diff --git a/reactos/win32ss/gdi/gdi32/include/gdi32p.h b/reactos/win32ss/gdi/gdi32/include/gdi32p.h index 6158b02df84..63715679111 100644 --- a/reactos/win32ss/gdi/gdi32/include/gdi32p.h +++ b/reactos/win32ss/gdi/gdi32/include/gdi32p.h @@ -334,7 +334,7 @@ GdiAllocBatchCommand( /* Check if the buffer is full */ if ((pTeb->GdiBatchCount >= GDI_BatchLimit) || - ((pTeb->GdiTebBatch.Offset + cjSize) > GDIBATCHBUFSIZE)) + ((pTeb->GdiTebBatch.Offset + cjSize) > GDIBATCHBUFSIZE)) { /* Call win32k, the kernel will call NtGdiFlushUserBatch to flush the current batch */ diff --git a/reactos/win32ss/gdi/gdi32/objects/dc.c b/reactos/win32ss/gdi/gdi32/objects/dc.c index 5c2984cd942..be3ffb42947 100644 --- a/reactos/win32ss/gdi/gdi32/objects/dc.c +++ b/reactos/win32ss/gdi/gdi32/objects/dc.c @@ -320,27 +320,28 @@ BOOL WINAPI DeleteObject(HGDIOBJ hObject) { - UINT Type = 0; + DWORD dwType = 0; /* From Wine: DeleteObject does not SetLastError() on a null object */ if(!hObject) return FALSE; - if (0 != ((DWORD) hObject & GDI_HANDLE_STOCK_MASK)) + if ((DWORD)hObject & GDI_HANDLE_STOCK_MASK) { // Relax! This is a normal return! DPRINT("Trying to delete system object 0x%x\n", hObject); return TRUE; } + // If you dont own it?! Get OUT! if(!GdiIsHandleValid(hObject)) return FALSE; - Type = GDI_HANDLE_GET_TYPE(hObject); + dwType = GDI_HANDLE_GET_TYPE(hObject); - if ((Type == GDI_OBJECT_TYPE_METAFILE) || - (Type == GDI_OBJECT_TYPE_ENHMETAFILE)) + if ((dwType == GDI_OBJECT_TYPE_METAFILE) || + (dwType == GDI_OBJECT_TYPE_ENHMETAFILE)) return FALSE; - switch (Type) + switch (dwType) { case GDI_OBJECT_TYPE_DC: return DeleteDC((HDC) hObject); @@ -367,33 +368,30 @@ DeleteObject(HGDIOBJ hObject) { PBRUSH_ATTR Brh_Attr; PTEB pTeb; + PGDIBSOBJECT pgO; - if ((!GdiGetHandleUserData(hObject, (DWORD)Type, (PVOID) &Brh_Attr)) || - (Brh_Attr == NULL) ) break; + if ((!GdiGetHandleUserData(hObject, dwType, (PVOID) &Brh_Attr)) || + (Brh_Attr == NULL)) break; pTeb = NtCurrentTeb(); if (pTeb->Win32ThreadInfo == NULL) break; - if ((pTeb->GdiTebBatch.Offset + sizeof(GDIBSOBJECT)) <= GDIBATCHBUFSIZE) + pgO = GdiAllocBatchCommand(NULL, GdiBCDelObj); + if (pgO) { - PGDIBSOBJECT pgO = (PGDIBSOBJECT)(&pTeb->GdiTebBatch.Buffer[0] + - pTeb->GdiTebBatch.Offset); - pgO->gbHdr.Cmd = GdiBCDelObj; - pgO->gbHdr.Size = sizeof(GDIBSOBJECT); pgO->hgdiobj = hObject; - - pTeb->GdiTebBatch.Offset += sizeof(GDIBSOBJECT); - pTeb->GdiBatchCount++; - if (pTeb->GdiBatchCount >= GDI_BatchLimit) NtGdiFlush(); return TRUE; } + break; } + case GDI_OBJECT_TYPE_BITMAP: default: break; } + return NtGdiDeleteObjectApp(hObject); }