mirror of
https://github.com/reactos/reactos.git
synced 2024-09-28 21:44:31 +00:00
[WINSPOOL] Semi implement DocumentPropertiesW
CORE-15522
This commit is contained in:
parent
796dd5f53c
commit
8ad7517446
|
@ -201,14 +201,93 @@ DocumentPropertiesA(HWND hWnd, HANDLE hPrinter, LPSTR pDeviceName, PDEVMODEA pDe
|
||||||
return -1;
|
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
|
LONG WINAPI
|
||||||
DocumentPropertiesW(HWND hWnd, HANDLE hPrinter, LPWSTR pDeviceName, PDEVMODEW pDevModeOutput, PDEVMODEW pDevModeInput, DWORD fMode)
|
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);
|
TRACE("DocumentPropertiesW(%p, %p, %S, %p, %p, %lu)\n", hWnd, hPrinter, pDeviceName, pDevModeOutput, pDevModeInput, fMode);
|
||||||
UNIMPLEMENTED;
|
if (hPrinter)
|
||||||
|
{
|
||||||
|
hUseHandle = hPrinter;
|
||||||
|
}
|
||||||
|
else if (!OpenPrinterW(pDeviceName, &hUseHandle, NULL))
|
||||||
|
{
|
||||||
|
ERR("No handle, and no usable printer name passed in\n");
|
||||||
return -1;
|
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
|
BOOL WINAPI
|
||||||
EndDocPrinter(HANDLE hPrinter)
|
EndDocPrinter(HANDLE hPrinter)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue