[WINSPOOL] Semi implement DocumentPropertiesW

CORE-15522
This commit is contained in:
Mark Jansen 2019-01-06 02:24:42 +01:00
parent 796dd5f53c
commit 8ad7517446
No known key found for this signature in database
GPG key ID: B39240EE84BEAE8B

View file

@ -201,12 +201,91 @@ DocumentPropertiesA(HWND hWnd, HANDLE hPrinter, LPSTR pDeviceName, PDEVMODEA pDe
return -1;
}
static PRINTER_INFO_9W * get_devmodeW(HANDLE hprn)
{
PRINTER_INFO_9W *pi9 = NULL;
DWORD needed = 0;
BOOL res;
res = GetPrinterW(hprn, 9, NULL, 0, &needed);
if (!res && (GetLastError() == ERROR_INSUFFICIENT_BUFFER))
{
pi9 = HeapAlloc(hProcessHeap, 0, needed);
res = GetPrinterW(hprn, 9, (LPBYTE)pi9, needed, &needed);
}
if (res)
return pi9;
ERR("GetPrinterW failed with %u\n", GetLastError());
HeapFree(hProcessHeap, 0, pi9);
return NULL;
}
LONG WINAPI
DocumentPropertiesW(HWND hWnd, HANDLE hPrinter, LPWSTR pDeviceName, PDEVMODEW pDevModeOutput, PDEVMODEW pDevModeInput, DWORD fMode)
{
HANDLE hUseHandle = NULL;
PRINTER_INFO_9W *pi9 = NULL;
LONG Result = -1, Length;
TRACE("DocumentPropertiesW(%p, %p, %S, %p, %p, %lu)\n", hWnd, hPrinter, pDeviceName, pDevModeOutput, pDevModeInput, fMode);
UNIMPLEMENTED;
return -1;
if (hPrinter)
{
hUseHandle = hPrinter;
}
else if (!OpenPrinterW(pDeviceName, &hUseHandle, NULL))
{
ERR("No handle, and no usable printer name passed in\n");
return -1;
}
pi9 = get_devmodeW(hUseHandle);
if (pi9)
{
Length = pi9->pDevMode->dmSize + pi9->pDevMode->dmDriverExtra;
// See wineps.drv PSDRV_ExtDeviceMode
if (fMode)
{
Result = 1; /* IDOK */
if (fMode & DM_IN_BUFFER)
{
FIXME("Merge pDevModeInput with pi9, write back to driver!\n");
// See wineps.drv PSDRV_MergeDevmodes
}
if (fMode & DM_IN_PROMPT)
{
FIXME("Show property sheet!\n");
Result = 2; /* IDCANCEL */
}
if (fMode & (DM_OUT_BUFFER | DM_OUT_DEFAULT))
{
if (pDevModeOutput)
{
memcpy(pDevModeOutput, pi9->pDevMode, pi9->pDevMode->dmSize + pi9->pDevMode->dmDriverExtra);
}
else
{
ERR("No pDevModeOutput\n");
Result = -1;
}
}
}
else
{
Result = Length;
}
HeapFree(hProcessHeap, 0, pi9);
}
if (hUseHandle && !hPrinter)
ClosePrinter(hUseHandle);
return Result;
}
BOOL WINAPI