mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 08:25:03 +00:00
[WINSPOOL] Semi implement DocumentPropertiesW
CORE-15522
This commit is contained in:
parent
796dd5f53c
commit
8ad7517446
1 changed files with 81 additions and 2 deletions
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue