Module: wine Branch: master Commit: 495267e5f1cf110f041520f1ae8093b47ce9a5a1 URL: http://source.winehq.org/git/wine.git/?a=commit;h=495267e5f1cf110f041520f1ae...
Author: Detlef Riekenberg wine.dev@web.de Date: Sun Nov 15 23:51:47 2009 +0100
wineps: Don't depend on 16-bit PrinterData functions from gdi.
---
dlls/gdi32/gdi32.spec | 2 -- dlls/wineps.drv/init.c | 42 +++++++++++++++++++++++------------------- 2 files changed, 23 insertions(+), 21 deletions(-)
diff --git a/dlls/gdi32/gdi32.spec b/dlls/gdi32/gdi32.spec index 6a67f44..ebd9525 100644 --- a/dlls/gdi32/gdi32.spec +++ b/dlls/gdi32/gdi32.spec @@ -514,8 +514,6 @@ # Wine extensions: Win16 functions that are needed by other dlls # @ stdcall CloseJob16(long) -@ stdcall DrvGetPrinterData16(str str ptr ptr long ptr) -@ stdcall DrvSetPrinterData16(str str long ptr long) @ stdcall GetDCHook(long ptr) @ stdcall OpenJob16(str str long) @ stdcall SelectVisRgn(long long) diff --git a/dlls/wineps.drv/init.c b/dlls/wineps.drv/init.c index 78aa0cb..b923529 100644 --- a/dlls/wineps.drv/init.c +++ b/dlls/wineps.drv/init.c @@ -111,6 +111,8 @@ static const LOGFONTA DefaultLogFont = { DEFAULT_QUALITY, FIXED_PITCH | FF_MODERN, "" };
+static const CHAR default_devmodeA[] = "Default DevMode"; + /********************************************************************* * DllMain * @@ -532,7 +534,7 @@ PRINTERINFO *PSDRV_FindPrinterInfo(LPCSTR name) PRINTERINFO *pi = PSDRV_PrinterList, **last = &PSDRV_PrinterList; FONTNAME *font; const AFM *afm; - HANDLE hPrinter; + HANDLE hPrinter = 0; const char *ppd = NULL; DWORD ppdType; char* ppdFileName = NULL; @@ -556,32 +558,33 @@ PRINTERINFO *PSDRV_FindPrinterInfo(LPCSTR name) if (!(pi->FriendlyName = HeapAlloc( PSDRV_Heap, 0, strlen(name)+1 ))) goto fail; strcpy( pi->FriendlyName, name );
- /* Use Get|SetPrinterDataExA instead? */ + if (OpenPrinterA (pi->FriendlyName, &hPrinter, NULL) == 0) { + ERR ("OpenPrinterA failed with code %i\n", GetLastError ()); + goto cleanup; + }
- res = DrvGetPrinterData16((LPSTR)name, (LPSTR)INT_PD_DEFAULT_DEVMODE, &type, - NULL, 0, &needed ); + needed = 0; + res = GetPrinterDataExA(hPrinter, NULL, default_devmodeA, &type, NULL, 0, &needed);
- if(res == ERROR_INVALID_PRINTER_NAME || needed != sizeof(DefaultDevmode)) { + if (needed < sizeof(DefaultDevmode)) { pi->Devmode = HeapAlloc( PSDRV_Heap, 0, sizeof(DefaultDevmode) ); - if (pi->Devmode == NULL) - goto cleanup; - *pi->Devmode = DefaultDevmode; - lstrcpynA((LPSTR)pi->Devmode->dmPublic.dmDeviceName,name,CCHDEVICENAME); - using_default_devmode = TRUE; + if (pi->Devmode == NULL) + goto closeprinter;
- /* need to do something here AddPrinter?? */ + *pi->Devmode = DefaultDevmode; + lstrcpynA((LPSTR)pi->Devmode->dmPublic.dmDeviceName,name,CCHDEVICENAME); + using_default_devmode = TRUE; } else { pi->Devmode = HeapAlloc( PSDRV_Heap, 0, needed ); - DrvGetPrinterData16((LPSTR)name, (LPSTR)INT_PD_DEFAULT_DEVMODE, &type, - (LPBYTE)pi->Devmode, needed, &needed); - } + if (pi->Devmode == NULL) + goto closeprinter;
- if (OpenPrinterA (pi->FriendlyName, &hPrinter, NULL) == 0) { - ERR ("OpenPrinterA failed with code %i\n", GetLastError ()); - goto cleanup; + GetPrinterDataExA(hPrinter, NULL, default_devmodeA, &type, (LPBYTE)pi->Devmode, needed, &needed); }
+ + #ifdef SONAME_LIBCUPS if (cupshandle != (void*)-1) { typeof(cupsGetPPD) * pcupsGetPPD = NULL; @@ -687,8 +690,9 @@ PRINTERINFO *PSDRV_FindPrinterInfo(LPCSTR name) dm.dmPublic.u1.s1.dmPaperSize = papersize; PSDRV_MergeDevmodes(pi->Devmode, &dm, pi); } - DrvSetPrinterData16((LPSTR)name, (LPSTR)INT_PD_DEFAULT_DEVMODE, - REG_BINARY, (LPBYTE)pi->Devmode, sizeof(DefaultDevmode) ); + + SetPrinterDataExA(hPrinter, NULL, default_devmodeA, REG_BINARY, + (LPBYTE)pi->Devmode, sizeof(DefaultDevmode)); }
if(pi->ppd->DefaultPageSize) { /* We'll let the ppd override the devmode */