Commit 6a65a048 authored by Huw Davies's avatar Huw Davies Committed by Alexandre Julliard

winspool: On OS/X read the default paper size from the core printing api.

parent 0c31766c
...@@ -3,6 +3,7 @@ MODULE = winspool.drv ...@@ -3,6 +3,7 @@ MODULE = winspool.drv
IMPORTLIB = winspool IMPORTLIB = winspool
IMPORTS = user32 gdi32 advapi32 IMPORTS = user32 gdi32 advapi32
EXTRAINCL = @CUPSINCL@ EXTRAINCL = @CUPSINCL@
EXTRALIBS = @APPLICATIONSERVICESLIB@
C_SRCS = \ C_SRCS = \
info.c \ info.c \
......
...@@ -45,6 +45,63 @@ ...@@ -45,6 +45,63 @@
# include <cups/cups.h> # include <cups/cups.h>
#endif #endif
#ifdef HAVE_APPLICATIONSERVICES_APPLICATIONSERVICES_H
#define GetCurrentProcess GetCurrentProcess_Mac
#define GetCurrentThread GetCurrentThread_Mac
#define LoadResource LoadResource_Mac
#define AnimatePalette AnimatePalette_Mac
#define EqualRgn EqualRgn_Mac
#define FillRgn FillRgn_Mac
#define FrameRgn FrameRgn_Mac
#define GetPixel GetPixel_Mac
#define InvertRgn InvertRgn_Mac
#define LineTo LineTo_Mac
#define OffsetRgn OffsetRgn_Mac
#define PaintRgn PaintRgn_Mac
#define Polygon Polygon_Mac
#define ResizePalette ResizePalette_Mac
#define SetRectRgn SetRectRgn_Mac
#define EqualRect EqualRect_Mac
#define FillRect FillRect_Mac
#define FrameRect FrameRect_Mac
#define GetCursor GetCursor_Mac
#define InvertRect InvertRect_Mac
#define OffsetRect OffsetRect_Mac
#define PtInRect PtInRect_Mac
#define SetCursor SetCursor_Mac
#define SetRect SetRect_Mac
#define ShowCursor ShowCursor_Mac
#define UnionRect UnionRect_Mac
#include <ApplicationServices/ApplicationServices.h>
#undef GetCurrentProcess
#undef GetCurrentThread
#undef LoadResource
#undef AnimatePalette
#undef EqualRgn
#undef FillRgn
#undef FrameRgn
#undef GetPixel
#undef InvertRgn
#undef LineTo
#undef OffsetRgn
#undef PaintRgn
#undef Polygon
#undef ResizePalette
#undef SetRectRgn
#undef EqualRect
#undef FillRect
#undef FrameRect
#undef GetCursor
#undef InvertRect
#undef OffsetRect
#undef PtInRect
#undef SetCursor
#undef SetRect
#undef ShowCursor
#undef UnionRect
#undef DPRINTF
#endif
#define NONAMELESSUNION #define NONAMELESSUNION
#define NONAMELESSSTRUCT #define NONAMELESSSTRUCT
#include "wine/library.h" #include "wine/library.h"
...@@ -242,6 +299,9 @@ static const WCHAR LPR_Port[] = {'L','P','R',':',0}; ...@@ -242,6 +299,9 @@ static const WCHAR LPR_Port[] = {'L','P','R',':',0};
static const WCHAR default_doc_title[] = {'L','o','c','a','l',' ','D','o','w','n','l','e','v','e','l',' ', static const WCHAR default_doc_title[] = {'L','o','c','a','l',' ','D','o','w','n','l','e','v','e','l',' ',
'D','o','c','u','m','e','n','t',0}; 'D','o','c','u','m','e','n','t',0};
static const WCHAR PPD_Overrides[] = {'P','P','D',' ','O','v','e','r','r','i','d','e','s',0};
static const WCHAR DefaultPageSize[] = {'D','e','f','a','u','l','t','P','a','g','e','S','i','z','e',0};
static const DWORD di_sizeof[] = {0, sizeof(DRIVER_INFO_1W), sizeof(DRIVER_INFO_2W), static const DWORD di_sizeof[] = {0, sizeof(DRIVER_INFO_1W), sizeof(DRIVER_INFO_2W),
sizeof(DRIVER_INFO_3W), sizeof(DRIVER_INFO_4W), sizeof(DRIVER_INFO_3W), sizeof(DRIVER_INFO_4W),
sizeof(DRIVER_INFO_5W), sizeof(DRIVER_INFO_6W), sizeof(DRIVER_INFO_5W), sizeof(DRIVER_INFO_6W),
...@@ -944,6 +1004,50 @@ end: ...@@ -944,6 +1004,50 @@ end:
} }
static void set_ppd_overrides( HANDLE printer )
{
WCHAR *wstr = NULL;
int size = 0;
#ifdef HAVE_APPLICATIONSERVICES_APPLICATIONSERVICES_H
OSStatus status;
PMPrintSession session = NULL;
PMPageFormat format = NULL;
PMPaper paper;
CFStringRef paper_name;
CFRange range;
status = PMCreateSession( &session );
if (status) goto end;
status = PMCreatePageFormat( &format );
if (status) goto end;
status = PMSessionDefaultPageFormat( session, format );
if (status) goto end;
status = PMGetPageFormatPaper( format, &paper );
if (status) goto end;
status = PMPaperGetPPDPaperName( paper, &paper_name );
if (status) goto end;
range.location = 0;
range.length = CFStringGetLength( paper_name );
size = (range.length + 1) * sizeof(WCHAR);
wstr = HeapAlloc( GetProcessHeap(), 0, size );
CFStringGetCharacters( paper_name, range, (UniChar*)wstr );
wstr[range.length] = 0;
end:
if (format) PMRelease( format );
if (session) PMRelease( session );
#endif
SetPrinterDataExW( printer, PPD_Overrides, DefaultPageSize, REG_SZ, (BYTE*)wstr, size );
HeapFree( GetProcessHeap(), 0, wstr );
}
static BOOL update_driver( HANDLE printer ) static BOOL update_driver( HANDLE printer )
{ {
BOOL ret, is_cups; BOOL ret, is_cups;
...@@ -975,6 +1079,8 @@ static BOOL update_driver( HANDLE printer ) ...@@ -975,6 +1079,8 @@ static BOOL update_driver( HANDLE printer )
HeapFree( GetProcessHeap(), 0, ppd ); HeapFree( GetProcessHeap(), 0, ppd );
HeapFree( GetProcessHeap(), 0, queue_name ); HeapFree( GetProcessHeap(), 0, queue_name );
set_ppd_overrides( printer );
/* call into the driver to update the devmode */ /* call into the driver to update the devmode */
DocumentPropertiesW( 0, printer, NULL, NULL, NULL, 0 ); DocumentPropertiesW( 0, printer, NULL, NULL, NULL, 0 );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment