mirror of
https://github.com/reactos/reactos.git
synced 2025-08-06 15:13:18 +00:00
Sync with trunk r63430.
svn path=/branches/shell-experiments/; revision=63433
This commit is contained in:
commit
d5e23caf7a
136 changed files with 6159 additions and 3600 deletions
|
@ -118,8 +118,8 @@ BmfdQueryGlyphAndBitmap(
|
|||
}
|
||||
else
|
||||
{
|
||||
cxDst = cxSrc * yScale;
|
||||
cyDst = cySrc * xScale;
|
||||
cxDst = cxSrc * xScale;
|
||||
cyDst = cySrc * yScale;
|
||||
}
|
||||
cjDstRow = (cxDst + 7) / 8;
|
||||
|
||||
|
@ -154,7 +154,7 @@ BmfdQueryGlyphAndBitmap(
|
|||
}
|
||||
|
||||
/* Fill GLYPHBITS structure */
|
||||
pgb->ptlOrigin.x = yScale * pface->wA;
|
||||
pgb->ptlOrigin.x = xScale * pface->wA;
|
||||
pgb->ptlOrigin.y = - yScale * pface->wAscent;
|
||||
pgb->sizlBitmap.cx = cxDst;
|
||||
pgb->sizlBitmap.cy = cyDst;
|
||||
|
|
|
@ -29,6 +29,8 @@ BOOLEAN DIB_XXBPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf, SURFOBJ *Ma
|
|||
LONG DstWidth;
|
||||
LONG SrcHeight;
|
||||
LONG SrcWidth;
|
||||
LONG MaskCy;
|
||||
LONG SourceCy;
|
||||
|
||||
ULONG Color;
|
||||
ULONG Dest, Source = 0, Pattern = 0;
|
||||
|
@ -56,6 +58,7 @@ BOOLEAN DIB_XXBPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf, SURFOBJ *Ma
|
|||
|
||||
if (UsesSource)
|
||||
{
|
||||
SourceCy = abs(SourceSurf->sizlBitmap.cy);
|
||||
fnSource_GetPixel = DibFunctionsForBitmapFormat[SourceSurf->iBitmapFormat].DIB_GetPixel;
|
||||
DPRINT("Source BPP: %u, srcRect: (%d,%d)-(%d,%d)\n",
|
||||
BitsPerFormat(SourceSurf->iBitmapFormat), SourceRect->left, SourceRect->top, SourceRect->right, SourceRect->bottom);
|
||||
|
@ -64,6 +67,7 @@ BOOLEAN DIB_XXBPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf, SURFOBJ *Ma
|
|||
if (MaskSurf)
|
||||
{
|
||||
fnMask_GetPixel = DibFunctionsForBitmapFormat[MaskSurf->iBitmapFormat].DIB_GetPixel;
|
||||
MaskCy = abs(MaskSurf->sizlBitmap.cy);
|
||||
}
|
||||
|
||||
DstHeight = DestRect->bottom - DestRect->top;
|
||||
|
@ -124,7 +128,7 @@ BOOLEAN DIB_XXBPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf, SURFOBJ *Ma
|
|||
{
|
||||
sx = SourceRect->left+(DesX - DestRect->left) * SrcWidth / DstWidth;
|
||||
if (sx < 0 || sy < 0 ||
|
||||
MaskSurf->sizlBitmap.cx < sx || MaskSurf->sizlBitmap.cy < sy ||
|
||||
MaskSurf->sizlBitmap.cx < sx || MaskCy < sy ||
|
||||
fnMask_GetPixel(MaskSurf, sx, sy) != 0)
|
||||
{
|
||||
CanDraw = FALSE;
|
||||
|
@ -135,7 +139,7 @@ BOOLEAN DIB_XXBPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf, SURFOBJ *Ma
|
|||
{
|
||||
sx = SourceRect->left+(DesX - DestRect->left) * SrcWidth / DstWidth;
|
||||
if (sx >= 0 && sy >= 0 &&
|
||||
SourceSurf->sizlBitmap.cx > sx && SourceSurf->sizlBitmap.cy > sy)
|
||||
SourceSurf->sizlBitmap.cx > sx && SourceCy > sy)
|
||||
{
|
||||
Source = XLATEOBJ_iXlate(ColorTranslation, fnSource_GetPixel(SourceSurf, sx, sy));
|
||||
}
|
||||
|
|
|
@ -19,8 +19,9 @@
|
|||
/*!
|
||||
* \brief DRIVEROBJ cleanup function
|
||||
*/
|
||||
BOOL NTAPI
|
||||
DRIVEROBJ_Cleanup(PVOID pObject)
|
||||
VOID
|
||||
NTAPI
|
||||
DRIVEROBJ_vCleanup(PVOID pObject)
|
||||
{
|
||||
PEDRIVEROBJ pedo = pObject;
|
||||
FREEOBJPROC pFreeProc;
|
||||
|
@ -28,10 +29,8 @@ DRIVEROBJ_Cleanup(PVOID pObject)
|
|||
pFreeProc = pedo->drvobj.pFreeProc;
|
||||
if (pFreeProc)
|
||||
{
|
||||
return pFreeProc(pedo->drvobj.pvObj);
|
||||
NT_VERIFY(pFreeProc(pedo->drvobj.pvObj));
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/** Public interface **********************************************************/
|
||||
|
|
|
@ -11,7 +11,7 @@ typedef struct _EDRIVEROBJ
|
|||
typedef DRIVEROBJ *PDRIVEROBJ;
|
||||
|
||||
/* Cleanup function */
|
||||
BOOL NTAPI DRIVEROBJ_Cleanup(PVOID pObject);
|
||||
VOID NTAPI DRIVEROBJ_vCleanup(PVOID pObject);
|
||||
|
||||
|
||||
#define DRIVEROBJ_AllocObjectWithHandle() ((PEDRIVEROBJ)GDIOBJ_AllocObjWithHandle(GDI_OBJECT_TYPE_DRIVEROBJ, sizeof(EDRIVEROBJ)))
|
||||
|
|
|
@ -62,9 +62,9 @@ BitmapFormat(ULONG cBits, ULONG iCompression)
|
|||
}
|
||||
}
|
||||
|
||||
BOOL
|
||||
VOID
|
||||
NTAPI
|
||||
SURFACE_Cleanup(PVOID ObjectBody)
|
||||
SURFACE_vCleanup(PVOID ObjectBody)
|
||||
{
|
||||
PSURFACE psurf = (PSURFACE)ObjectBody;
|
||||
PVOID pvBits = psurf->SurfObj.pvBits;
|
||||
|
@ -108,8 +108,6 @@ SURFACE_Cleanup(PVOID ObjectBody)
|
|||
{
|
||||
PALETTE_ShareUnlockPalette(psurf->ppal);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -111,9 +111,9 @@ ULONG
|
|||
FASTCALL
|
||||
BitmapFormat(ULONG cBits, ULONG iCompression);
|
||||
|
||||
BOOL
|
||||
VOID
|
||||
NTAPI
|
||||
SURFACE_Cleanup(PVOID ObjectBody);
|
||||
SURFACE_vCleanup(PVOID ObjectBody);
|
||||
|
||||
PSURFACE
|
||||
NTAPI
|
||||
|
|
|
@ -114,9 +114,9 @@ BRUSH_vFreeBrushAttr(PBRUSH pbr)
|
|||
pbr->pBrushAttr = &pbr->BrushAttr;
|
||||
}
|
||||
|
||||
BOOL
|
||||
VOID
|
||||
NTAPI
|
||||
BRUSH_Cleanup(PVOID ObjectBody)
|
||||
BRUSH_vCleanup(PVOID ObjectBody)
|
||||
{
|
||||
PBRUSH pbrush = (PBRUSH)ObjectBody;
|
||||
if (pbrush->hbmPattern)
|
||||
|
@ -136,8 +136,6 @@ BRUSH_Cleanup(PVOID ObjectBody)
|
|||
{
|
||||
ExFreePool(pbrush->pStyle);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
INT
|
||||
|
|
|
@ -94,7 +94,7 @@ typedef struct _EBRUSHOBJ
|
|||
#define BRUSH_ShareUnlockBrush(pBrush) GDIOBJ_vDereferenceObject((POBJ)pBrush)
|
||||
|
||||
INT FASTCALL BRUSH_GetObject (PBRUSH GdiObject, INT Count, LPLOGBRUSH Buffer);
|
||||
BOOL NTAPI BRUSH_Cleanup(PVOID ObjectBody);
|
||||
VOID NTAPI BRUSH_vCleanup(PVOID ObjectBody);
|
||||
|
||||
extern HSURF gahsurfHatch[HS_DDI_MAX];
|
||||
|
||||
|
|
|
@ -194,7 +194,7 @@ INIT_FUNCTION NTSTATUS NTAPI InitDcImpl(VOID);
|
|||
PPDEVOBJ FASTCALL IntEnumHDev(VOID);
|
||||
PDC NTAPI DC_AllocDcWithHandle(VOID);
|
||||
BOOL NTAPI DC_bAllocDcAttr(PDC pdc);
|
||||
BOOL NTAPI DC_Cleanup(PVOID ObjectBody);
|
||||
VOID NTAPI DC_vCleanup(PVOID ObjectBody);
|
||||
BOOL FASTCALL IntGdiDeleteDC(HDC, BOOL);
|
||||
|
||||
BOOL FASTCALL DC_InvertXform(const XFORM *xformSrc, XFORM *xformDest);
|
||||
|
|
|
@ -344,9 +344,9 @@ DC_vInitDc(
|
|||
}
|
||||
}
|
||||
|
||||
BOOL
|
||||
VOID
|
||||
NTAPI
|
||||
DC_Cleanup(PVOID ObjectBody)
|
||||
DC_vCleanup(PVOID ObjectBody)
|
||||
{
|
||||
PDC pdc = (PDC)ObjectBody;
|
||||
|
||||
|
@ -391,8 +391,6 @@ DC_Cleanup(PVOID ObjectBody)
|
|||
SURFACE_ShareUnlockSurface(pdc->dclevel.pSurface);
|
||||
|
||||
PDEVOBJ_vRelease(pdc->ppdev) ;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
VOID
|
||||
|
|
|
@ -87,53 +87,54 @@ ULONG gulFirstFree;
|
|||
ULONG gulFirstUnused;
|
||||
static PPAGED_LOOKASIDE_LIST gpaLookasideList;
|
||||
|
||||
static BOOL NTAPI GDIOBJ_Cleanup(PVOID ObjectBody);
|
||||
static VOID NTAPI GDIOBJ_vCleanup(PVOID ObjectBody);
|
||||
|
||||
static const
|
||||
GDICLEANUPPROC
|
||||
apfnCleanup[] =
|
||||
{
|
||||
NULL, /* 00 GDIObjType_DEF_TYPE */
|
||||
DC_Cleanup, /* 01 GDIObjType_DC_TYPE */
|
||||
NULL, /* 02 GDIObjType_UNUSED1_TYPE */
|
||||
NULL, /* 03 GDIObjType_UNUSED2_TYPE */
|
||||
REGION_Cleanup, /* 04 GDIObjType_RGN_TYPE */
|
||||
SURFACE_Cleanup, /* 05 GDIObjType_SURF_TYPE */
|
||||
GDIOBJ_Cleanup, /* 06 GDIObjType_CLIENTOBJ_TYPE */
|
||||
GDIOBJ_Cleanup, /* 07 GDIObjType_PATH_TYPE */
|
||||
PALETTE_Cleanup, /* 08 GDIObjType_PAL_TYPE */
|
||||
GDIOBJ_Cleanup, /* 09 GDIObjType_ICMLCS_TYPE */
|
||||
GDIOBJ_Cleanup, /* 0a GDIObjType_LFONT_TYPE */
|
||||
NULL, /* 0b GDIObjType_RFONT_TYPE, unused */
|
||||
NULL, /* 0c GDIObjType_PFE_TYPE, unused */
|
||||
NULL, /* 0d GDIObjType_PFT_TYPE, unused */
|
||||
GDIOBJ_Cleanup, /* 0e GDIObjType_ICMCXF_TYPE */
|
||||
NULL, /* 0f GDIObjType_SPRITE_TYPE, unused */
|
||||
BRUSH_Cleanup, /* 10 GDIObjType_BRUSH_TYPE, BRUSH, PEN, EXTPEN */
|
||||
NULL, /* 11 GDIObjType_UMPD_TYPE, unused */
|
||||
NULL, /* 12 GDIObjType_UNUSED4_TYPE */
|
||||
NULL, /* 13 GDIObjType_SPACE_TYPE, unused */
|
||||
NULL, /* 14 GDIObjType_UNUSED5_TYPE */
|
||||
NULL, /* 15 GDIObjType_META_TYPE, unused */
|
||||
NULL, /* 16 GDIObjType_EFSTATE_TYPE, unused */
|
||||
NULL, /* 17 GDIObjType_BMFD_TYPE, unused */
|
||||
NULL, /* 18 GDIObjType_VTFD_TYPE, unused */
|
||||
NULL, /* 19 GDIObjType_TTFD_TYPE, unused */
|
||||
NULL, /* 1a GDIObjType_RC_TYPE, unused */
|
||||
NULL, /* 1b GDIObjType_TEMP_TYPE, unused */
|
||||
DRIVEROBJ_Cleanup,/* 1c GDIObjType_DRVOBJ_TYPE */
|
||||
NULL, /* 1d GDIObjType_DCIOBJ_TYPE, unused */
|
||||
NULL, /* 1e GDIObjType_SPOOL_TYPE, unused */
|
||||
NULL, /* 1f reserved entry */
|
||||
NULL, /* 00 GDIObjType_DEF_TYPE */
|
||||
DC_vCleanup, /* 01 GDIObjType_DC_TYPE */
|
||||
NULL, /* 02 GDIObjType_UNUSED1_TYPE */
|
||||
NULL, /* 03 GDIObjType_UNUSED2_TYPE */
|
||||
REGION_vCleanup, /* 04 GDIObjType_RGN_TYPE */
|
||||
SURFACE_vCleanup, /* 05 GDIObjType_SURF_TYPE */
|
||||
GDIOBJ_vCleanup, /* 06 GDIObjType_CLIENTOBJ_TYPE */
|
||||
GDIOBJ_vCleanup, /* 07 GDIObjType_PATH_TYPE */
|
||||
PALETTE_vCleanup, /* 08 GDIObjType_PAL_TYPE */
|
||||
GDIOBJ_vCleanup, /* 09 GDIObjType_ICMLCS_TYPE */
|
||||
GDIOBJ_vCleanup, /* 0a GDIObjType_LFONT_TYPE */
|
||||
NULL, /* 0b GDIObjType_RFONT_TYPE, unused */
|
||||
NULL, /* 0c GDIObjType_PFE_TYPE, unused */
|
||||
NULL, /* 0d GDIObjType_PFT_TYPE, unused */
|
||||
GDIOBJ_vCleanup, /* 0e GDIObjType_ICMCXF_TYPE */
|
||||
NULL, /* 0f GDIObjType_SPRITE_TYPE, unused */
|
||||
BRUSH_vCleanup, /* 10 GDIObjType_BRUSH_TYPE, BRUSH, PEN, EXTPEN */
|
||||
NULL, /* 11 GDIObjType_UMPD_TYPE, unused */
|
||||
NULL, /* 12 GDIObjType_UNUSED4_TYPE */
|
||||
NULL, /* 13 GDIObjType_SPACE_TYPE, unused */
|
||||
NULL, /* 14 GDIObjType_UNUSED5_TYPE */
|
||||
NULL, /* 15 GDIObjType_META_TYPE, unused */
|
||||
NULL, /* 16 GDIObjType_EFSTATE_TYPE, unused */
|
||||
NULL, /* 17 GDIObjType_BMFD_TYPE, unused */
|
||||
NULL, /* 18 GDIObjType_VTFD_TYPE, unused */
|
||||
NULL, /* 19 GDIObjType_TTFD_TYPE, unused */
|
||||
NULL, /* 1a GDIObjType_RC_TYPE, unused */
|
||||
NULL, /* 1b GDIObjType_TEMP_TYPE, unused */
|
||||
DRIVEROBJ_vCleanup,/* 1c GDIObjType_DRVOBJ_TYPE */
|
||||
NULL, /* 1d GDIObjType_DCIOBJ_TYPE, unused */
|
||||
NULL, /* 1e GDIObjType_SPOOL_TYPE, unused */
|
||||
NULL, /* 1f reserved entry */
|
||||
};
|
||||
|
||||
/* INTERNAL FUNCTIONS ********************************************************/
|
||||
|
||||
static
|
||||
BOOL NTAPI
|
||||
GDIOBJ_Cleanup(PVOID ObjectBody)
|
||||
VOID
|
||||
NTAPI
|
||||
GDIOBJ_vCleanup(PVOID ObjectBody)
|
||||
{
|
||||
return TRUE;
|
||||
/* Nothing to do */
|
||||
}
|
||||
|
||||
static
|
||||
|
|
|
@ -28,7 +28,7 @@ extern PGDI_HANDLE_TABLE GdiHandleTable;
|
|||
|
||||
typedef PVOID PGDIOBJ;
|
||||
|
||||
typedef BOOL (NTAPI *GDICLEANUPPROC)(PVOID ObjectBody);
|
||||
typedef VOID (NTAPI *GDICLEANUPPROC)(PVOID ObjectBody);
|
||||
|
||||
/* Every GDI Object must have this standard type of header.
|
||||
* It's for thread locking. */
|
||||
|
|
|
@ -230,17 +230,15 @@ PALETTE_AllocPalWithHandle(
|
|||
return ppal;
|
||||
}
|
||||
|
||||
BOOL
|
||||
VOID
|
||||
NTAPI
|
||||
PALETTE_Cleanup(PVOID ObjectBody)
|
||||
PALETTE_vCleanup(PVOID ObjectBody)
|
||||
{
|
||||
PPALETTE pPal = (PPALETTE)ObjectBody;
|
||||
if (pPal->IndexedColors && pPal->IndexedColors != pPal->apalColors)
|
||||
{
|
||||
ExFreePoolWithTag(pPal->IndexedColors, TAG_PALETTE);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
INT
|
||||
|
@ -702,15 +700,15 @@ NtGdiGetNearestColor(
|
|||
EngSetLastError(ERROR_INVALID_HANDLE);
|
||||
return CLR_INVALID;
|
||||
}
|
||||
|
||||
|
||||
if(dc->dclevel.pSurface == NULL)
|
||||
ppal = gppalMono;
|
||||
else
|
||||
ppal = dc->dclevel.pSurface->ppal;
|
||||
|
||||
|
||||
/* Translate the color to the DC format */
|
||||
Color = TranslateCOLORREF(dc, Color);
|
||||
|
||||
|
||||
/* XLATE it back to RGB color space */
|
||||
EXLATEOBJ_vInitialize(&exlo,
|
||||
ppal,
|
||||
|
@ -718,11 +716,11 @@ NtGdiGetNearestColor(
|
|||
0,
|
||||
RGB(0xff, 0xff, 0xff),
|
||||
RGB(0, 0, 0));
|
||||
|
||||
|
||||
nearest = XLATEOBJ_iXlate(&exlo.xlo, Color);
|
||||
|
||||
|
||||
EXLATEOBJ_vCleanup(&exlo);
|
||||
|
||||
|
||||
/* We're done */
|
||||
DC_UnlockDc(dc);
|
||||
|
||||
|
@ -771,7 +769,7 @@ IntGdiRealizePalette(HDC hDC)
|
|||
{
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
|
||||
if(pdc->dctype == DCTYPE_DIRECT)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
|
|
|
@ -117,9 +117,9 @@ PALETTE_vGetBitMasks(
|
|||
PPALETTE ppal,
|
||||
PULONG pulColors);
|
||||
|
||||
BOOL
|
||||
VOID
|
||||
NTAPI
|
||||
PALETTE_Cleanup(PVOID ObjectBody);
|
||||
PALETTE_vCleanup(PVOID ObjectBody);
|
||||
|
||||
FORCEINLINE
|
||||
ULONG
|
||||
|
|
|
@ -2275,8 +2275,8 @@ IntSysCreateRectRgn(INT LeftRect, INT TopRect, INT RightRect, INT BottomRect)
|
|||
return hrgn;
|
||||
}
|
||||
|
||||
BOOL NTAPI
|
||||
REGION_Cleanup(PVOID ObjectBody)
|
||||
VOID NTAPI
|
||||
REGION_vCleanup(PVOID ObjectBody)
|
||||
{
|
||||
PROSRGNDATA pRgn = (PROSRGNDATA)ObjectBody;
|
||||
PPROCESSINFO ppi = PsGetCurrentProcessWin32Process();
|
||||
|
@ -2288,7 +2288,6 @@ REGION_Cleanup(PVOID ObjectBody)
|
|||
|
||||
if (pRgn->Buffer && pRgn->Buffer != &pRgn->rdh.rcBound)
|
||||
ExFreePoolWithTag(pRgn->Buffer, TAG_REGION);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
VOID FASTCALL
|
||||
|
|
|
@ -29,7 +29,7 @@ INT FASTCALL REGION_GetRgnBox(PROSRGNDATA Rgn, RECTL *pRect);
|
|||
BOOL FASTCALL REGION_RectInRegion(PROSRGNDATA Rgn, const RECTL *rc);
|
||||
BOOL FASTCALL REGION_CropAndOffsetRegion(PROSRGNDATA rgnDst, PROSRGNDATA rgnSrc, const RECTL *rect, const POINT *off);
|
||||
VOID FASTCALL REGION_SetRectRgn(PROSRGNDATA pRgn, INT LeftRect, INT TopRect, INT RightRect, INT BottomRect);
|
||||
BOOL NTAPI REGION_Cleanup(PVOID ObjectBody);
|
||||
VOID NTAPI REGION_vCleanup(PVOID ObjectBody);
|
||||
|
||||
extern PROSRGNDATA prgnDefault;
|
||||
extern HRGN hrgnDefault;
|
||||
|
|
|
@ -81,6 +81,7 @@ typedef struct _EVENTPROC_CALLBACK_ARGUMENTS
|
|||
typedef struct _LOADMENU_CALLBACK_ARGUMENTS
|
||||
{
|
||||
HINSTANCE hModule;
|
||||
LPCWSTR InterSource;
|
||||
WCHAR MenuName[1];
|
||||
} LOADMENU_CALLBACK_ARGUMENTS, *PLOADMENU_CALLBACK_ARGUMENTS;
|
||||
|
||||
|
|
|
@ -884,7 +884,7 @@ co_IntCallLoadMenu( HINSTANCE hModule,
|
|||
if (pMenuName->Length)
|
||||
RtlCopyMemory(&Common->MenuName, pMenuName->Buffer, pMenuName->Length);
|
||||
else
|
||||
RtlCopyMemory(&Common->MenuName, &pMenuName->Buffer, sizeof(WCHAR));
|
||||
Common->InterSource = pMenuName->Buffer;
|
||||
|
||||
ResultPointer = NULL;
|
||||
ResultLength = sizeof(LRESULT);
|
||||
|
|
|
@ -51,7 +51,7 @@ IntDesktopObjectParse(IN PVOID ParseObject,
|
|||
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||
PLIST_ENTRY NextEntry, ListHead;
|
||||
PWINSTATION_OBJECT WinStaObject = (PWINSTATION_OBJECT)ParseObject;
|
||||
PUNICODE_STRING DesktopName;
|
||||
UNICODE_STRING DesktopName;
|
||||
PBOOLEAN pContext = (PBOOLEAN) Context;
|
||||
|
||||
if(pContext)
|
||||
|
@ -65,43 +65,40 @@ IntDesktopObjectParse(IN PVOID ParseObject,
|
|||
/* Get the current desktop */
|
||||
Desktop = CONTAINING_RECORD(NextEntry, DESKTOP, ListEntry);
|
||||
|
||||
/// @todo Don't mess around with the object headers!
|
||||
/* Get its name */
|
||||
_PRAGMA_WARNING_SUPPRESS(__WARNING_DEREF_NULL_PTR)
|
||||
DesktopName = GET_DESKTOP_NAME(Desktop);
|
||||
if (DesktopName)
|
||||
/* Get the desktop name */
|
||||
ASSERT(Desktop->pDeskInfo != NULL);
|
||||
RtlInitUnicodeString(&DesktopName, Desktop->pDeskInfo->szDesktopName);
|
||||
|
||||
/* Compare the name */
|
||||
if (RtlEqualUnicodeString(RemainingName,
|
||||
&DesktopName,
|
||||
(Attributes & OBJ_CASE_INSENSITIVE)))
|
||||
{
|
||||
/* Compare the name */
|
||||
if (RtlEqualUnicodeString(RemainingName,
|
||||
DesktopName,
|
||||
(Attributes & OBJ_CASE_INSENSITIVE)))
|
||||
/* We found a match. Did this come from a create? */
|
||||
if (Context)
|
||||
{
|
||||
/* We found a match. Did this come from a create? */
|
||||
if (Context)
|
||||
/* Unless OPEN_IF was given, fail with an error */
|
||||
if (!(Attributes & OBJ_OPENIF))
|
||||
{
|
||||
/* Unless OPEN_IF was given, fail with an error */
|
||||
if (!(Attributes & OBJ_OPENIF))
|
||||
{
|
||||
/* Name collision */
|
||||
return STATUS_OBJECT_NAME_COLLISION;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Otherwise, return with a warning only */
|
||||
Status = STATUS_OBJECT_NAME_EXISTS;
|
||||
}
|
||||
/* Name collision */
|
||||
return STATUS_OBJECT_NAME_COLLISION;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* This was a real open, so this is OK */
|
||||
Status = STATUS_SUCCESS;
|
||||
/* Otherwise, return with a warning only */
|
||||
Status = STATUS_OBJECT_NAME_EXISTS;
|
||||
}
|
||||
|
||||
/* Reference the desktop and return it */
|
||||
ObReferenceObject(Desktop);
|
||||
*Object = Desktop;
|
||||
return Status;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* This was a real open, so this is OK */
|
||||
Status = STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/* Reference the desktop and return it */
|
||||
ObReferenceObject(Desktop);
|
||||
*Object = Desktop;
|
||||
return Status;
|
||||
}
|
||||
|
||||
/* Go to the next desktop */
|
||||
|
@ -522,7 +519,7 @@ IntSetFocusMessageQueue(PUSER_MESSAGE_QUEUE NewQueue)
|
|||
{
|
||||
gpqForeground = pdo->ActiveMessageQueue;
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
gpqForeground = NULL;
|
||||
ERR("ptiLastInput is CLEARED!!\n");
|
||||
|
|
|
@ -174,11 +174,6 @@ HDC FASTCALL UserGetDesktopDC(ULONG,BOOL,BOOL);
|
|||
#define IntIsActiveDesktop(Desktop) \
|
||||
((Desktop)->rpwinstaParent->ActiveDesktop == (Desktop))
|
||||
|
||||
#define GET_DESKTOP_NAME(d) \
|
||||
OBJECT_HEADER_TO_NAME_INFO(OBJECT_TO_OBJECT_HEADER(d)) ? \
|
||||
&(OBJECT_HEADER_TO_NAME_INFO(OBJECT_TO_OBJECT_HEADER(d))->Name) : \
|
||||
NULL
|
||||
|
||||
HWND FASTCALL IntGetMessageWindow(VOID);
|
||||
PWND FASTCALL UserGetMessageWindow(VOID);
|
||||
|
||||
|
|
|
@ -901,7 +901,9 @@ IntGetSystemMenu(PWND Window, BOOL bRevert, BOOL RetMenu)
|
|||
PMENU Menu, NewMenu = NULL, SysMenu = NULL, ret = NULL;
|
||||
PTHREADINFO W32Thread;
|
||||
HMENU hNewMenu, hSysMenu;
|
||||
ROSMENUITEMINFO ItemInfoSet = {0};
|
||||
ROSMENUITEMINFO ItemInfo = {0};
|
||||
UNICODE_STRING MenuName;
|
||||
|
||||
if(bRevert)
|
||||
{
|
||||
|
@ -952,14 +954,21 @@ IntGetSystemMenu(PWND Window, BOOL bRevert, BOOL RetMenu)
|
|||
}
|
||||
SysMenu->fFlags |= MNF_SYSDESKMN;
|
||||
SysMenu->hWnd = Window->head.h;
|
||||
hNewMenu = co_IntLoadSysMenuTemplate();
|
||||
//hNewMenu = co_IntLoadSysMenuTemplate();
|
||||
//if ( Window->ExStyle & WS_EX_MDICHILD )
|
||||
//hNewMenu = co_IntCallLoadMenu( NULL, L"SYSMENUMDI");
|
||||
// else
|
||||
//hNewMenu = co_IntCallLoadMenu( NULL, L"SYSMENU");
|
||||
// Do the rest in here.
|
||||
//{
|
||||
// RtlInitUnicodeString( &MenuName, L"SYSMENUMDI");
|
||||
// hNewMenu = co_IntCallLoadMenu( hModClient, &MenuName);
|
||||
//}
|
||||
//else
|
||||
{
|
||||
RtlInitUnicodeString( &MenuName, L"SYSMENU");
|
||||
hNewMenu = co_IntCallLoadMenu( hModClient, &MenuName);
|
||||
//ERR("%wZ\n",&MenuName);
|
||||
}
|
||||
if(!hNewMenu)
|
||||
{
|
||||
ERR("No Menu!!\n");
|
||||
IntReleaseMenuObject(SysMenu);
|
||||
UserDestroyMenu(hSysMenu);
|
||||
return NULL;
|
||||
|
@ -972,6 +981,21 @@ IntGetSystemMenu(PWND Window, BOOL bRevert, BOOL RetMenu)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
// Do the rest in here.
|
||||
|
||||
Menu->fFlags |= MNS_CHECKORBMP | MNF_SYSDESKMN | MNF_POPUP;
|
||||
|
||||
ItemInfoSet.cbSize = sizeof( MENUITEMINFOW);
|
||||
ItemInfoSet.fMask = MIIM_BITMAP;
|
||||
ItemInfoSet.hbmpItem = HBMMENU_POPUP_CLOSE;
|
||||
IntMenuItemInfo(Menu, SC_CLOSE, FALSE, &ItemInfoSet, TRUE, NULL);
|
||||
ItemInfoSet.hbmpItem = HBMMENU_POPUP_RESTORE;
|
||||
IntMenuItemInfo(Menu, SC_RESTORE, FALSE, &ItemInfoSet, TRUE, NULL);
|
||||
ItemInfoSet.hbmpItem = HBMMENU_POPUP_MAXIMIZE;
|
||||
IntMenuItemInfo(Menu, SC_MAXIMIZE, FALSE, &ItemInfoSet, TRUE, NULL);
|
||||
ItemInfoSet.hbmpItem = HBMMENU_POPUP_MINIMIZE;
|
||||
IntMenuItemInfo(Menu, SC_MINIMIZE, FALSE, &ItemInfoSet, TRUE, NULL);
|
||||
|
||||
NewMenu = IntCloneMenu(Menu);
|
||||
if(NewMenu)
|
||||
{
|
||||
|
|
|
@ -1210,7 +1210,7 @@ BuildDesktopNameList(
|
|||
DWORD EntryCount;
|
||||
ULONG ReturnLength;
|
||||
WCHAR NullWchar;
|
||||
PUNICODE_STRING DesktopName;
|
||||
UNICODE_STRING DesktopName;
|
||||
|
||||
Status = IntValidateWindowStationHandle(hWindowStation,
|
||||
KernelMode,
|
||||
|
@ -1233,8 +1233,8 @@ BuildDesktopNameList(
|
|||
DesktopEntry = DesktopEntry->Flink)
|
||||
{
|
||||
DesktopObject = CONTAINING_RECORD(DesktopEntry, DESKTOP, ListEntry);
|
||||
DesktopName = GET_DESKTOP_NAME(DesktopObject);
|
||||
if (DesktopName) ReturnLength += DesktopName->Length + sizeof(WCHAR);
|
||||
RtlInitUnicodeString(&DesktopName, DesktopObject->pDeskInfo->szDesktopName);
|
||||
ReturnLength += DesktopName.Length + sizeof(WCHAR);
|
||||
EntryCount++;
|
||||
}
|
||||
TRACE("Required size: %lu Entry count: %lu\n", ReturnLength, EntryCount);
|
||||
|
@ -1277,18 +1277,15 @@ BuildDesktopNameList(
|
|||
DesktopEntry = DesktopEntry->Flink)
|
||||
{
|
||||
DesktopObject = CONTAINING_RECORD(DesktopEntry, DESKTOP, ListEntry);
|
||||
_PRAGMA_WARNING_SUPPRESS(__WARNING_DEREF_NULL_PTR)
|
||||
DesktopName = GET_DESKTOP_NAME(DesktopObject);/// @todo Don't mess around with the object headers!
|
||||
if (!DesktopName) continue;
|
||||
|
||||
Status = MmCopyToCaller(lpBuffer, DesktopName->Buffer, DesktopName->Length);
|
||||
RtlInitUnicodeString(&DesktopName, DesktopObject->pDeskInfo->szDesktopName);
|
||||
Status = MmCopyToCaller(lpBuffer, DesktopName.Buffer, DesktopName.Length);
|
||||
if (! NT_SUCCESS(Status))
|
||||
{
|
||||
KeReleaseSpinLock(&WindowStation->Lock, OldLevel);
|
||||
ObDereferenceObject(WindowStation);
|
||||
return Status;
|
||||
}
|
||||
lpBuffer = (PVOID) ((PCHAR)lpBuffer + DesktopName->Length);
|
||||
lpBuffer = (PVOID) ((PCHAR)lpBuffer + DesktopName.Length);
|
||||
Status = MmCopyToCaller(lpBuffer, &NullWchar, sizeof(WCHAR));
|
||||
if (! NT_SUCCESS(Status))
|
||||
{
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -30,8 +30,8 @@
|
|||
WINE_DEFAULT_DEBUG_CHANNEL(ddeml);
|
||||
|
||||
static LRESULT CALLBACK WDML_ClientProc(HWND, UINT, WPARAM, LPARAM); /* only for one client, not conv list */
|
||||
const char WDML_szClientConvClassA[] = "DdeClientAnsi";
|
||||
const WCHAR WDML_szClientConvClassW[] = {'D','d','e','C','l','i','e','n','t','U','n','i','c','o','d','e',0};
|
||||
const char WDML_szClientConvClassA[] = "DDEMLAnsiClient";
|
||||
const WCHAR WDML_szClientConvClassW[] = {'D','D','E','M','L','U','n','i','c','o','d','e','C','l','i','e','n','t',0};
|
||||
|
||||
/******************************************************************************
|
||||
* DdeConnectList [USER32.@] Establishes conversation with DDE servers
|
||||
|
@ -91,7 +91,7 @@ HCONV WINAPI DdeConnect(DWORD idInst, HSZ hszService, HSZ hszTopic,
|
|||
WDML_CONV* pConv = NULL;
|
||||
ATOM aSrv = 0, aTpc = 0;
|
||||
|
||||
TRACE("(0x%x,%p,%p,%p)\n", idInst, hszService, hszTopic, pCC);
|
||||
ERR("(0x%x,%p,%p,%p)\n", idInst, hszService, hszTopic, pCC);
|
||||
|
||||
pInstance = WDML_GetInstance(idInst);
|
||||
if (!pInstance)
|
||||
|
@ -166,7 +166,7 @@ HCONV WINAPI DdeConnect(DWORD idInst, HSZ hszService, HSZ hszTopic,
|
|||
|
||||
/* note: sent messages shall not use packing */
|
||||
SendMessageTimeoutW( HWND_BROADCAST, WM_DDE_INITIATE, (WPARAM)hwndClient, MAKELPARAM(aSrv, aTpc),
|
||||
SMTO_ABORTIFHUNG, 2000, NULL );
|
||||
SMTO_ABORTIFHUNG, 0, NULL );
|
||||
|
||||
pInstance = WDML_GetInstance(idInst);
|
||||
if (!pInstance)
|
||||
|
@ -180,12 +180,12 @@ HCONV WINAPI DdeConnect(DWORD idInst, HSZ hszService, HSZ hszTopic,
|
|||
pConv = WDML_GetConvFromWnd(hwndClient);
|
||||
if (pConv == NULL || pConv->hwndServer == 0)
|
||||
{
|
||||
WARN("Done with INITIATE, but no Server window available\n");
|
||||
ERR("Done with INITIATE, but no Server window available %p\n", (pConv ? pConv->hwndServer : NULL));
|
||||
pConv = NULL;
|
||||
pInstance->lastError = DMLERR_NO_CONV_ESTABLISHED;
|
||||
goto theEnd;
|
||||
}
|
||||
TRACE("Connected to Server window (%p)\n", pConv->hwndServer);
|
||||
ERR("Connected to Server window (%p)\n", pConv->hwndServer);
|
||||
pConv->wConvst = XST_CONNECTED;
|
||||
|
||||
/* finish init of pConv */
|
||||
|
@ -312,8 +312,8 @@ static WDML_XACT* WDML_ClientQueueAdvise(WDML_CONV* pConv, UINT wType, UINT wFmt
|
|||
|
||||
/* pack DdeAdvise */
|
||||
pDdeAdvise = GlobalLock(pXAct->hMem);
|
||||
pDdeAdvise->fAckReq = (wType & XTYPF_ACKREQ) ? TRUE : FALSE;
|
||||
pDdeAdvise->fDeferUpd = (wType & XTYPF_NODATA) ? TRUE : FALSE;
|
||||
pDdeAdvise->fAckReq = (wType & XTYPF_ACKREQ) != 0;
|
||||
pDdeAdvise->fDeferUpd = (wType & XTYPF_NODATA) != 0;
|
||||
pDdeAdvise->cfFormat = wFmt;
|
||||
GlobalUnlock(pXAct->hMem);
|
||||
|
||||
|
@ -848,7 +848,7 @@ static WDML_QUEUE_STATE WDML_HandleIncomingData(WDML_CONV* pConv, MSG* msg, HDDE
|
|||
* XTYP_ADVDATA and callback should return the proper status.
|
||||
*/
|
||||
pLink = WDML_FindLink(pConv->instance, (HCONV)pConv, WDML_CLIENT_SIDE, hsz,
|
||||
uiLo ? TRUE : FALSE, wdh.cfFormat);
|
||||
uiLo != 0, wdh.cfFormat);
|
||||
if (!pLink)
|
||||
{
|
||||
WDML_DecHSZ(pConv->instance, hsz);
|
||||
|
@ -1008,22 +1008,20 @@ static WDML_QUEUE_STATE WDML_HandleReply(WDML_CONV* pConv, MSG* msg, HDDEDATA* h
|
|||
*/
|
||||
static HDDEDATA WDML_SyncWaitTransactionReply(HCONV hConv, DWORD dwTimeout, const WDML_XACT* pXAct, DWORD *ack)
|
||||
{
|
||||
DWORD dwTime;
|
||||
DWORD start, elapsed;
|
||||
DWORD err;
|
||||
WDML_CONV* pConv;
|
||||
|
||||
TRACE("Starting wait for a timeout of %d ms\n", dwTimeout);
|
||||
ERR("Starting wait for a timeout of %d ms\n", dwTimeout);
|
||||
|
||||
/* FIXME: time 32 bit wrap around */
|
||||
dwTimeout += GetCurrentTime();
|
||||
|
||||
while ((dwTime = GetCurrentTime()) < dwTimeout)
|
||||
start = GetTickCount();
|
||||
while ((elapsed = GetTickCount() - start) < dwTimeout)
|
||||
{
|
||||
/* we cannot be in the crit sect all the time because when client and server run in a
|
||||
* single process they need to share the access to the internal data
|
||||
*/
|
||||
if (MsgWaitForMultipleObjects(0, NULL, FALSE,
|
||||
dwTimeout - dwTime, QS_POSTMESSAGE) == WAIT_OBJECT_0)
|
||||
dwTimeout - elapsed, QS_POSTMESSAGE) == WAIT_OBJECT_0)
|
||||
{
|
||||
MSG msg;
|
||||
|
||||
|
@ -1034,16 +1032,18 @@ static HDDEDATA WDML_SyncWaitTransactionReply(HCONV hConv, DWORD dwTimeout, cons
|
|||
pConv = WDML_GetConv(hConv, FALSE);
|
||||
if (pConv == NULL)
|
||||
{
|
||||
ERR("conversation no longer available\n");
|
||||
/* conversation no longer available... return failure */
|
||||
return 0;
|
||||
}
|
||||
ERR("Msg hWnd %p & Client %p\n",msg.hwnd,pConv->hwndClient);
|
||||
if (msg.hwnd == pConv->hwndClient)
|
||||
{
|
||||
/* check that either pXAct has been processed or no more xActions are pending */
|
||||
BOOL ret = (pConv->transactions == pXAct);
|
||||
if (WDML_HandleReply(pConv, &msg, &hdd, ack) == WDML_QS_HANDLED)
|
||||
{
|
||||
TRACE("WDML_HandleReply returned WDML_QS_HANDLED\n");
|
||||
ERR("WDML_HandleReply returned WDML_QS_HANDLED\n");
|
||||
ret = TRUE;
|
||||
}
|
||||
else
|
||||
|
@ -1057,13 +1057,14 @@ static HDDEDATA WDML_SyncWaitTransactionReply(HCONV hConv, DWORD dwTimeout, cons
|
|||
}
|
||||
else
|
||||
{
|
||||
ERR("Dispatching message\n");
|
||||
DispatchMessageW(&msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TRACE("Timeout !!\n");
|
||||
ERR("Timeout !!\n");
|
||||
|
||||
pConv = WDML_GetConv(hConv, FALSE);
|
||||
if (pConv != NULL)
|
||||
|
@ -1143,6 +1144,7 @@ HDDEDATA WINAPI DdeClientTransaction(LPBYTE pData, DWORD cbData, HCONV hConv, HS
|
|||
if (pConv == NULL)
|
||||
{
|
||||
/* cannot set error... cannot get back to DDE instance */
|
||||
ERR("No Conv!\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1237,14 +1239,18 @@ BOOL WINAPI DdeAbandonTransaction(DWORD idInst, HCONV hConv, DWORD idTransaction
|
|||
{
|
||||
if ((pConv = WDML_GetConv(hConv, TRUE)) && pConv->instance == pInstance)
|
||||
{
|
||||
for (pXAct = pConv->transactions; pXAct; pXAct = pXAct->next)
|
||||
{
|
||||
|
||||
pXAct = pConv->transactions;
|
||||
while (pXAct) {
|
||||
WDML_XACT *nextXAct = pXAct->next;
|
||||
|
||||
if (pXAct->dwTimeout == TIMEOUT_ASYNC &&
|
||||
(idTransaction == 0 || pXAct->xActID == idTransaction))
|
||||
{
|
||||
WDML_UnQueueTransaction(pConv, pXAct);
|
||||
WDML_FreeTransaction(pInstance, pXAct, TRUE);
|
||||
}
|
||||
pXAct = nextXAct;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1253,13 +1259,16 @@ BOOL WINAPI DdeAbandonTransaction(DWORD idInst, HCONV hConv, DWORD idTransaction
|
|||
for (pConv = pInstance->convs[WDML_CLIENT_SIDE]; pConv; pConv = pConv->next)
|
||||
{
|
||||
if (!(pConv->wStatus & ST_CONNECTED)) continue;
|
||||
for (pXAct = pConv->transactions; pXAct; pXAct = pXAct->next)
|
||||
{
|
||||
pXAct = pConv->transactions;
|
||||
while (pXAct) {
|
||||
WDML_XACT *nextXAct = pXAct->next;
|
||||
|
||||
if (pXAct->dwTimeout == TIMEOUT_ASYNC)
|
||||
{
|
||||
WDML_UnQueueTransaction(pConv, pXAct);
|
||||
WDML_FreeTransaction(pInstance, pXAct, TRUE);
|
||||
}
|
||||
pXAct = nextXAct;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1278,16 +1287,18 @@ static LRESULT CALLBACK WDML_ClientProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPA
|
|||
UINT uiLo, uiHi;
|
||||
WDML_CONV* pConv = NULL;
|
||||
HSZ hszSrv, hszTpc;
|
||||
char buf[256];
|
||||
WDML_INSTANCE* pInstance;
|
||||
|
||||
TRACE("%p %04x %08lx %08lx\n", hwnd, iMsg, wParam , lParam);
|
||||
ERR("%p %04x %08lx %08lx\n", hwnd, iMsg, wParam , lParam);
|
||||
|
||||
if (iMsg == WM_DDE_ACK &&
|
||||
/* in the initial WM_INITIATE sendmessage */
|
||||
((pConv = WDML_GetConvFromWnd(hwnd)) == NULL || pConv->wStatus == XST_INIT1))
|
||||
if (iMsg == WM_DDE_ACK &&
|
||||
(!(pConv = WDML_GetConvFromWnd(hwnd)) || pConv->wStatus == XST_INIT1))
|
||||
{
|
||||
|
||||
ERR("WM_DDE_ACK\n");
|
||||
/* In response to WM_DDE_INITIATE, save server window */
|
||||
char buf[256];
|
||||
WDML_INSTANCE* pInstance;
|
||||
|
||||
/* note: sent messages do not need packing */
|
||||
uiLo = LOWORD(lParam);
|
||||
|
|
|
@ -30,8 +30,8 @@
|
|||
WINE_DEFAULT_DEBUG_CHANNEL(ddeml);
|
||||
|
||||
static const WCHAR szServerNameClass[] = {'D','d','e','S','e','r','v','e','r','N','a','m','e',0};
|
||||
const char WDML_szServerConvClassA[] = "DdeServerConvAnsi";
|
||||
const WCHAR WDML_szServerConvClassW[] = {'D','d','e','S','e','r','v','e','r','C','o','n','v','U','n','i','c','o','d','e',0};
|
||||
const char WDML_szServerConvClassA[] = "DdeServerConvA";
|
||||
const WCHAR WDML_szServerConvClassW[] = {'D','d','e','S','e','r','v','e','r','C','o','n','v','W',0};
|
||||
|
||||
static LRESULT CALLBACK WDML_ServerNameProc(HWND, UINT, WPARAM, LPARAM);
|
||||
static LRESULT CALLBACK WDML_ServerConvProc(HWND, UINT, WPARAM, LPARAM);
|
||||
|
@ -62,7 +62,7 @@ BOOL WINAPI DdePostAdvise(DWORD idInst, HSZ hszTopic, HSZ hszItem)
|
|||
|
||||
pInstance = WDML_GetInstance(idInst);
|
||||
|
||||
if (pInstance == NULL || pInstance->links == NULL)
|
||||
if (pInstance == NULL)
|
||||
return FALSE;
|
||||
|
||||
atom = WDML_MakeAtomFromHsz(hszItem);
|
||||
|
@ -135,7 +135,7 @@ BOOL WINAPI DdePostAdvise(DWORD idInst, HSZ hszTopic, HSZ hszItem)
|
|||
return TRUE;
|
||||
|
||||
theError:
|
||||
if (atom) GlobalDeleteAtom(atom);
|
||||
GlobalDeleteAtom(atom);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -380,12 +380,12 @@ static LRESULT CALLBACK WDML_ServerNameProc(HWND hwndServer, UINT iMsg, WPARAM w
|
|||
LOWORD(lParam) -- application atom
|
||||
HIWORD(lParam) -- topic atom */
|
||||
|
||||
TRACE("WM_DDE_INITIATE message received!\n");
|
||||
ERR("WM_DDE_INITIATE message received!\n");
|
||||
hwndClient = (HWND)wParam;
|
||||
|
||||
pInstance = WDML_GetInstanceFromWnd(hwndServer);
|
||||
TRACE("idInst=%d, threadID=0x%x\n", pInstance->instanceID, GetCurrentThreadId());
|
||||
if (!pInstance) return 0;
|
||||
ERR("idInst=%d, threadID=0x%x\n", pInstance->instanceID, GetCurrentThreadId());
|
||||
|
||||
/* don't free DDEParams, since this is a broadcast */
|
||||
UnpackDDElParam(WM_DDE_INITIATE, lParam, &uiLo, &uiHi);
|
||||
|
@ -708,7 +708,7 @@ static WDML_QUEUE_STATE WDML_ServerHandleUnadvise(WDML_CONV* pConv, WDML_XACT* p
|
|||
pXAct->hszItem, TRUE, pXAct->wFmt);
|
||||
if (pLink == NULL)
|
||||
{
|
||||
ERR("Couln'd find link for %p, dropping request\n", pXAct->hszItem);
|
||||
ERR("Couldn't find link for %p, dropping request\n", pXAct->hszItem);
|
||||
FreeDDElParam(WM_DDE_UNADVISE, pXAct->lParam);
|
||||
return WDML_QS_ERROR;
|
||||
}
|
||||
|
@ -748,6 +748,54 @@ static WDML_XACT* WDML_ServerQueueExecute(WDML_CONV* pConv, LPARAM lParam)
|
|||
return pXAct;
|
||||
}
|
||||
|
||||
static BOOL data_looks_unicode( const WCHAR *data, DWORD size )
|
||||
{
|
||||
DWORD i;
|
||||
|
||||
if (size % sizeof(WCHAR)) return FALSE;
|
||||
for (i = 0; i < size / sizeof(WCHAR); i++) if (data[i] > 255) return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* convert data to Unicode, unless it looks like it's already Unicode */
|
||||
static HDDEDATA map_A_to_W( DWORD instance, void *ptr, DWORD size )
|
||||
{
|
||||
HDDEDATA ret;
|
||||
DWORD len;
|
||||
const char *end;
|
||||
|
||||
if (!data_looks_unicode( ptr, size ))
|
||||
{
|
||||
if ((end = memchr( ptr, 0, size ))) size = end + 1 - (const char *)ptr;
|
||||
len = MultiByteToWideChar( CP_ACP, 0, ptr, size, NULL, 0 );
|
||||
ret = DdeCreateDataHandle( instance, NULL, len * sizeof(WCHAR), 0, 0, CF_TEXT, 0);
|
||||
MultiByteToWideChar( CP_ACP, 0, ptr, size, (WCHAR *)DdeAccessData(ret, NULL), len );
|
||||
}
|
||||
else ret = DdeCreateDataHandle( instance, ptr, size, 0, 0, CF_TEXT, 0 );
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* convert data to ASCII, unless it looks like it's not in Unicode format */
|
||||
static HDDEDATA map_W_to_A( DWORD instance, void *ptr, DWORD size )
|
||||
{
|
||||
HDDEDATA ret;
|
||||
DWORD len;
|
||||
const WCHAR *end;
|
||||
|
||||
if (data_looks_unicode( ptr, size ))
|
||||
{
|
||||
size /= sizeof(WCHAR);
|
||||
if ((end = memchrW( ptr, 0, size ))) size = end + 1 - (const WCHAR *)ptr;
|
||||
len = WideCharToMultiByte( CP_ACP, 0, ptr, size, NULL, 0, NULL, NULL );
|
||||
ret = DdeCreateDataHandle( instance, NULL, len, 0, 0, CF_TEXT, 0);
|
||||
WideCharToMultiByte( CP_ACP, 0, ptr, size, (char *)DdeAccessData(ret, NULL), len, NULL, NULL );
|
||||
}
|
||||
else ret = DdeCreateDataHandle( instance, ptr, size, 0, 0, CF_TEXT, 0 );
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/******************************************************************
|
||||
* WDML_ServerHandleExecute
|
||||
*
|
||||
|
@ -761,11 +809,16 @@ static WDML_QUEUE_STATE WDML_ServerHandleExecute(WDML_CONV* pConv, WDML_XACT* pX
|
|||
if (!(pConv->instance->CBFflags & CBF_FAIL_EXECUTES))
|
||||
{
|
||||
LPVOID ptr = GlobalLock(pXAct->hMem);
|
||||
DWORD size = GlobalSize(pXAct->hMem);
|
||||
|
||||
if (ptr)
|
||||
{
|
||||
hDdeData = DdeCreateDataHandle(pConv->instance->instanceID, ptr, GlobalSize(pXAct->hMem),
|
||||
0, 0, CF_TEXT, 0);
|
||||
if (pConv->instance->unicode) /* Unicode server, try to map A->W */
|
||||
hDdeData = map_A_to_W( pConv->instance->instanceID, ptr, size );
|
||||
else if (!IsWindowUnicode( pConv->hwndClient )) /* ASCII server and client, try to map W->A */
|
||||
hDdeData = map_W_to_A( pConv->instance->instanceID, ptr, size );
|
||||
else
|
||||
hDdeData = DdeCreateDataHandle(pConv->instance->instanceID, ptr, size, 0, 0, CF_TEXT, 0);
|
||||
GlobalUnlock(pXAct->hMem);
|
||||
}
|
||||
hDdeData = WDML_InvokeCallback(pConv->instance, XTYP_EXECUTE, 0, (HCONV)pConv,
|
||||
|
|
|
@ -860,8 +860,8 @@ static void MDITile( HWND client, MDICLIENTINFO *ci, WPARAM wParam )
|
|||
for (r = 1; r <= rows && *pWnd; r++, i++)
|
||||
{
|
||||
LONG posOptions = SWP_DRAWFRAME | SWP_NOACTIVATE | SWP_NOZORDER;
|
||||
LONG style = GetWindowLongW(win_array[i], GWL_STYLE);
|
||||
if (!(style & WS_SIZEBOX)) posOptions |= SWP_NOSIZE;
|
||||
LONG style = GetWindowLongW(win_array[i], GWL_STYLE);
|
||||
if (!(style & WS_SIZEBOX)) posOptions |= SWP_NOSIZE;
|
||||
|
||||
SetWindowPos(*pWnd, 0, x, y, xsize, ysize, posOptions);
|
||||
y += ysize;
|
||||
|
@ -1091,9 +1091,9 @@ static void MDI_UpdateFrameText( HWND frame, HWND hClient, BOOL repaint, LPCWSTR
|
|||
|
||||
DefWindowProcW( frame, WM_SETTEXT, 0, (LPARAM)lpBuffer );
|
||||
|
||||
if (repaint)
|
||||
SetWindowPos( frame, 0,0,0,0,0, SWP_FRAMECHANGED |
|
||||
SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER );
|
||||
if (repaint)
|
||||
SetWindowPos( frame, 0,0,0,0,0, SWP_FRAMECHANGED |
|
||||
SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER );
|
||||
}
|
||||
|
||||
|
||||
|
@ -1830,7 +1830,7 @@ void WINAPI CalcChildScroll( HWND hwnd, INT scroll )
|
|||
return;
|
||||
}
|
||||
|
||||
ERR("CalcChildScroll 1\n");
|
||||
TRACE("CalcChildScroll 1\n");
|
||||
if ((list = WIN_ListChildren( hwnd )))
|
||||
{
|
||||
int i;
|
||||
|
@ -1851,14 +1851,14 @@ void WINAPI CalcChildScroll( HWND hwnd, INT scroll )
|
|||
OffsetRect(&rect, -WindowInfo.rcClient.left,
|
||||
-WindowInfo.rcClient.top);
|
||||
//WIN_GetRectangles( list[i], COORDS_PARENT, &rect, NULL );
|
||||
ERR("CalcChildScroll L\n");
|
||||
TRACE("CalcChildScroll L\n");
|
||||
UnionRect( &childRect, &rect, &childRect );
|
||||
}
|
||||
}
|
||||
HeapFree( GetProcessHeap(), 0, list );
|
||||
}
|
||||
UnionRect( &childRect, &clientRect, &childRect );
|
||||
ERR("CalcChildScroll 3\n");
|
||||
TRACE("CalcChildScroll 3\n");
|
||||
/* set common info values */
|
||||
info.cbSize = sizeof(info);
|
||||
info.fMask = SIF_POS | SIF_RANGE | SIF_PAGE;
|
||||
|
@ -1883,12 +1883,12 @@ void WINAPI CalcChildScroll( HWND hwnd, INT scroll )
|
|||
SetScrollInfo(hwnd, SB_HORZ, &info, TRUE);
|
||||
if (scroll == SB_HORZ)
|
||||
{
|
||||
ERR("CalcChildScroll H\n");
|
||||
TRACE("CalcChildScroll H\n");
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
ERR("CalcChildScroll B\n");
|
||||
TRACE("CalcChildScroll B\n");
|
||||
}
|
||||
/* fall through */
|
||||
case SB_VERT:
|
||||
|
@ -1898,7 +1898,7 @@ void WINAPI CalcChildScroll( HWND hwnd, INT scroll )
|
|||
info.nPage = 1 + clientRect.bottom - clientRect.top;
|
||||
//info.nMax = childRect.bottom - clientRect.bottom;
|
||||
//info.nPos = clientRect.top - childRect.top;
|
||||
ERR("CalcChildScroll V\n");
|
||||
TRACE("CalcChildScroll V\n");
|
||||
if (ci->initialStyle & WS_VSCROLL)
|
||||
SetScrollInfo(hwnd, SB_VERT, &info, TRUE);
|
||||
break;
|
||||
|
@ -2029,7 +2029,7 @@ TileWindows (HWND hwndParent, UINT wFlags, LPCRECT lpRect,
|
|||
* TileChildWindows (USER32.@)
|
||||
*/
|
||||
WORD WINAPI TileChildWindows( HWND parent, UINT flags )
|
||||
{
|
||||
{
|
||||
return TileWindows( parent, flags, NULL, 0, NULL );
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -245,7 +245,7 @@ DWORD FASTCALL get_input_codepage( void )
|
|||
if (!ret) cp = CP_ACP;
|
||||
return cp;
|
||||
}
|
||||
|
||||
|
||||
static WPARAM FASTCALL map_wparam_char_WtoA( WPARAM wParam, DWORD len )
|
||||
{
|
||||
WCHAR wch = wParam;
|
||||
|
@ -253,7 +253,7 @@ static WPARAM FASTCALL map_wparam_char_WtoA( WPARAM wParam, DWORD len )
|
|||
DWORD cp = get_input_codepage();
|
||||
|
||||
len = WideCharToMultiByte( cp, 0, &wch, 1, (LPSTR)ch, len, NULL, NULL );
|
||||
if (len == 2)
|
||||
if (len == 2)
|
||||
return MAKEWPARAM( (ch[0] << 8) | ch[1], HIWORD(wParam) );
|
||||
else
|
||||
return MAKEWPARAM( ch[0], HIWORD(wParam) );
|
||||
|
@ -743,9 +743,9 @@ MsgiAnsiToUnicodeMessage(HWND hwnd, LPMSG UnicodeMsg, LPMSG AnsiMsg)
|
|||
|
||||
case WM_CHARTOITEM:
|
||||
case WM_MENUCHAR:
|
||||
case WM_CHAR:
|
||||
case WM_CHAR:
|
||||
case WM_DEADCHAR:
|
||||
case WM_SYSCHAR:
|
||||
case WM_SYSCHAR:
|
||||
case WM_SYSDEADCHAR:
|
||||
case EM_SETPASSWORDCHAR:
|
||||
case WM_IME_CHAR:
|
||||
|
@ -1139,14 +1139,14 @@ MsgiUnicodeToAnsiMessage(HWND hwnd, LPMSG AnsiMsg, LPMSG UnicodeMsg)
|
|||
}
|
||||
|
||||
case WM_GETDLGCODE:
|
||||
if (UnicodeMsg->lParam)
|
||||
if (UnicodeMsg->lParam)
|
||||
{
|
||||
MSG newmsg = *(MSG *)UnicodeMsg->lParam;
|
||||
switch(newmsg.message)
|
||||
{
|
||||
case WM_CHAR:
|
||||
case WM_DEADCHAR:
|
||||
case WM_SYSCHAR:
|
||||
case WM_SYSCHAR:
|
||||
case WM_SYSDEADCHAR:
|
||||
newmsg.wParam = map_wparam_char_WtoA( newmsg.wParam, 1 );
|
||||
break;
|
||||
|
@ -1169,9 +1169,9 @@ MsgiUnicodeToAnsiMessage(HWND hwnd, LPMSG AnsiMsg, LPMSG UnicodeMsg)
|
|||
break;
|
||||
|
||||
case WM_CHARTOITEM:
|
||||
case WM_MENUCHAR:
|
||||
case WM_DEADCHAR:
|
||||
case WM_SYSCHAR:
|
||||
case WM_MENUCHAR:
|
||||
case WM_DEADCHAR:
|
||||
case WM_SYSCHAR:
|
||||
case WM_SYSDEADCHAR:
|
||||
case EM_SETPASSWORDCHAR:
|
||||
AnsiMsg->wParam = map_wparam_char_WtoA(UnicodeMsg->wParam,1);
|
||||
|
@ -1303,7 +1303,7 @@ MsgiUnicodeToAnsiReply(LPMSG AnsiMsg, LPMSG UnicodeMsg, LRESULT *Result)
|
|||
{
|
||||
DWORD len = AnsiMsg->wParam;// * 2;
|
||||
if (len)
|
||||
{
|
||||
{
|
||||
if (*Result)
|
||||
{
|
||||
RtlMultiByteToUnicodeN( UBuffer, AnsiMsg->wParam*sizeof(WCHAR), &len, Buffer, strlen(Buffer)+1 );
|
||||
|
@ -2404,7 +2404,7 @@ SendMessageW(HWND Wnd,
|
|||
|
||||
if ( Window != NULL &&
|
||||
Window->head.pti == ti &&
|
||||
!ISITHOOKED(WH_CALLWNDPROC) &&
|
||||
!ISITHOOKED(WH_CALLWNDPROC) &&
|
||||
!ISITHOOKED(WH_CALLWNDPROCRET) &&
|
||||
!(Window->state & WNDS_SERVERSIDEWINDOWPROC) )
|
||||
{
|
||||
|
@ -2468,7 +2468,7 @@ SendMessageA(HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
|||
|
||||
if ( Window != NULL &&
|
||||
Window->head.pti == ti &&
|
||||
!ISITHOOKED(WH_CALLWNDPROC) &&
|
||||
!ISITHOOKED(WH_CALLWNDPROC) &&
|
||||
!ISITHOOKED(WH_CALLWNDPROCRET) &&
|
||||
!(Window->state & WNDS_SERVERSIDEWINDOWPROC) )
|
||||
{
|
||||
|
@ -2935,7 +2935,7 @@ User32CallWindowProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
|
|||
case WM_SIZING:
|
||||
{
|
||||
PRECT prect = (PRECT) KMMsg.lParam;
|
||||
ERR("WM_SIZING 1 t %d l %d r %d b %d\n",prect->top,prect->left,prect->right,prect->bottom);
|
||||
TRACE("WM_SIZING 1 t %d l %d r %d b %d\n",prect->top,prect->left,prect->right,prect->bottom);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
@ -2983,7 +2983,7 @@ User32CallWindowProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
|
|||
case WM_SIZING:
|
||||
{
|
||||
PRECT prect = (PRECT) KMMsg.lParam;
|
||||
ERR("WM_SIZING 2 t %d l %d r %d b %d\n",prect->top,prect->left,prect->right,prect->bottom);
|
||||
TRACE("WM_SIZING 2 t %d l %d r %d b %d\n",prect->top,prect->left,prect->right,prect->bottom);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue