Module: wine Branch: master Commit: 79aac9fabce638cc9676b6e128018b7b364f6504 URL: http://source.winehq.org/git/wine.git/?a=commit;h=79aac9fabce638cc9676b6e128...
Author: Huw Davies huw@codeweavers.com Date: Thu Apr 5 13:25:51 2012 +0100
winspool: Implement SetPrinterW for level 9.
---
dlls/winspool.drv/info.c | 51 +++++++++++++++++++++++++++++++++++++--------- 1 files changed, 41 insertions(+), 10 deletions(-)
diff --git a/dlls/winspool.drv/info.c b/dlls/winspool.drv/info.c index 72fa8f0..a5b065c 100644 --- a/dlls/winspool.drv/info.c +++ b/dlls/winspool.drv/info.c @@ -2243,16 +2243,6 @@ BOOL WINAPI DeletePortW (LPWSTR pName, HWND hWnd, LPWSTR pPortName) }
/****************************************************************************** - * SetPrinterW [WINSPOOL.@] - */ -BOOL WINAPI SetPrinterW(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD Command) -{ - FIXME("(%p, %d, %p, %d): stub\n", hPrinter, Level, pPrinter, Command); - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return FALSE; -} - -/****************************************************************************** * WritePrinter [WINSPOOL.@] */ BOOL WINAPI WritePrinter(HANDLE hPrinter, LPVOID pBuf, DWORD cbBuf, LPDWORD pcWritten) @@ -2869,6 +2859,47 @@ BOOL WINAPI SetPrinterA( HANDLE printer, DWORD level, LPBYTE data, DWORD command return ret; }
+static BOOL set_printer_9( HKEY key, const PRINTER_INFO_9W *pi ) +{ + if (!pi->pDevMode) return FALSE; + + set_reg_devmode( key, Default_DevModeW, pi->pDevMode ); + return TRUE; +} + +/****************************************************************************** + * SetPrinterW [WINSPOOL.@] + */ +BOOL WINAPI SetPrinterW( HANDLE printer, DWORD level, LPBYTE data, DWORD command ) +{ + HKEY key; + BOOL ret = FALSE; + + TRACE( "(%p, %d, %p, %d)\n", printer, level, data, command ); + + if (command != 0) FIXME( "Ignoring command %d\n", command ); + + if (WINSPOOL_GetOpenedPrinterRegKey( printer, &key )) + return FALSE; + + switch (level) + { + case 9: + { + PRINTER_INFO_9W *pi = (PRINTER_INFO_9W *)data; + ret = set_printer_9( key, pi ); + break; + } + + default: + FIXME( "Unimplemented level %d\n", level ); + SetLastError( ERROR_INVALID_LEVEL ); + } + + RegCloseKey( key ); + return ret; +} + /***************************************************************************** * SetJobA [WINSPOOL.@] */