Module: wine Branch: master Commit: eb9f46037c2599caa240c1ebbd008d9b142d751f URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=eb9f46037c2599caa240c1eb...
Author: Mike McCormack mike@codeweavers.com Date: Mon Aug 14 14:07:30 2006 +0900
oleaut32: Calculate icon data if the picture is dirty, or there's no icon data.
---
dlls/oleaut32/olepicture.c | 45 ++++++++++++++++++-------------------------- 1 files changed, 18 insertions(+), 27 deletions(-)
diff --git a/dlls/oleaut32/olepicture.c b/dlls/oleaut32/olepicture.c index 66a76df..569fe15 100644 --- a/dlls/oleaut32/olepicture.c +++ b/dlls/oleaut32/olepicture.c @@ -1826,41 +1826,32 @@ static HRESULT WINAPI OLEPictureImpl_Sav unsigned int iDataSize; ULONG dummy; int iSerializeResult = 0; + OLEPictureImpl *This = impl_from_IPersistStream(iface);
- OLEPictureImpl *This = impl_from_IPersistStream(iface); + TRACE("%p %p %d\n", This, pStm, fClearDirty);
switch (This->desc.picType) { case PICTYPE_ICON: - if (This->bIsDirty) { - if (serializeIcon(This->desc.u.icon.hicon, &pIconData, &iDataSize)) { - if (This->loadtime_magic != 0xdeadbeef) { - DWORD header[2]; - - header[0] = This->loadtime_magic; - header[1] = iDataSize; - IStream_Write(pStm, header, 2 * sizeof(DWORD), &dummy); - } - IStream_Write(pStm, pIconData, iDataSize, &dummy); - - HeapFree(GetProcessHeap(), 0, This->data); - This->data = pIconData; - This->datalen = iDataSize; - hResult = S_OK; - } else { - FIXME("(%p,%p,%d), unable to serializeIcon()!\n",This,pStm,fClearDirty); + if (This->bIsDirty || !This->data) { + if (!serializeIcon(This->desc.u.icon.hicon, &pIconData, &iDataSize)) { + ERR("(%p,%p,%d), serializeIcon() failed\n", This, pStm, fClearDirty); hResult = E_FAIL; + break; } - } else { - if (This->loadtime_magic != 0xdeadbeef) { - DWORD header[2]; + This->data = pIconData; + This->datalen = iDataSize; + } + if (This->loadtime_magic != 0xdeadbeef) { + DWORD header[2];
- header[0] = This->loadtime_magic; - header[1] = This->datalen; - IStream_Write(pStm, header, 2 * sizeof(DWORD), &dummy); - } - IStream_Write(pStm, This->data, This->datalen, &dummy); - hResult = S_OK; + header[0] = This->loadtime_magic; + header[1] = This->datalen; + IStream_Write(pStm, header, 2 * sizeof(DWORD), &dummy); } + IStream_Write(pStm, This->data, This->datalen, &dummy); + + HeapFree(GetProcessHeap(), 0, This->data); + hResult = S_OK; break; case PICTYPE_BITMAP: if (This->bIsDirty) {