All of the patches were written for [bug 54956](https://bugs.winehq.org/show_bug.cgi?id=54956).
From: Piotr Caban piotr@codeweavers.com
--- dlls/localspl/provider.c | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-)
diff --git a/dlls/localspl/provider.c b/dlls/localspl/provider.c index 9e990c75e0f..be4b81091eb 100644 --- a/dlls/localspl/provider.c +++ b/dlls/localspl/provider.c @@ -3823,6 +3823,43 @@ static BOOL WINAPI fpScheduleJob(HANDLE hprinter, DWORD job_id) return ret; }
+static BOOL WINAPI fpAbortPrinter(HANDLE hprinter) +{ + printer_t *printer = (printer_t *)hprinter; + job_info_t *job; + + TRACE("%p\n", hprinter); + + if (!printer) + { + SetLastError(ERROR_INVALID_HANDLE); + return 0; + } + + if (printer->header.type != HANDLE_PRINTER) + { + FIXME("%x handle not supported\n", printer->header.type); + return FALSE; + } + + if (!printer->doc) + { + SetLastError(ERROR_SPL_NO_STARTDOC); + return FALSE; + } + + CloseHandle(printer->doc->hf); + printer->doc->hf = NULL; + + EnterCriticalSection(&printer->info->jobs_cs); + job = get_job(printer->info, printer->doc->id); + if (job) free_job(job); + LeaveCriticalSection(&printer->info->jobs_cs); + + printer->doc = NULL; + return TRUE; +} + static BOOL WINAPI fpReadPrinter(HANDLE hprinter, void *buf, DWORD size, DWORD *bytes_read) { job_t *job = (job_t *)hprinter; @@ -4003,7 +4040,7 @@ static const PRINTPROVIDOR backend = { NULL, /* fpStartPagePrinter */ fpWritePrinter, NULL, /* fpEndPagePrinter */ - NULL, /* fpAbortPrinter */ + fpAbortPrinter, fpReadPrinter, fpEndDocPrinter, fpAddJob,
From: Piotr Caban piotr@codeweavers.com
--- dlls/winspool.drv/info.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/dlls/winspool.drv/info.c b/dlls/winspool.drv/info.c index 3c513f1c0e8..30df3199f40 100644 --- a/dlls/winspool.drv/info.c +++ b/dlls/winspool.drv/info.c @@ -6029,10 +6029,13 @@ DWORD WINAPI EnumPrinterDataExA(HANDLE hPrinter, LPCSTR pKeyName, /****************************************************************************** * AbortPrinter (WINSPOOL.@) */ -BOOL WINAPI AbortPrinter( HANDLE hPrinter ) +BOOL WINAPI AbortPrinter(HANDLE printer) { - FIXME("(%p), stub!\n", hPrinter); - return TRUE; + HANDLE handle = get_backend_handle(printer); + + TRACE("(%p)\n", printer); + + return backend->fpAbortPrinter(handle); }
/******************************************************************************
From: Piotr Caban piotr@codeweavers.com
--- dlls/gdi32/dc.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c index e7f2d8526d1..5ae7cc653d1 100644 --- a/dlls/gdi32/dc.c +++ b/dlls/gdi32/dc.c @@ -479,7 +479,12 @@ BOOL WINAPI DeleteDC( HDC hdc )
if (is_meta_dc( hdc )) return METADC_DeleteDC( hdc ); if (!(dc_attr = get_dc_attr( hdc ))) return FALSE; - if (dc_attr->print) delete_print_dc( dc_attr ); + if (dc_attr->print) + { + if (dc_attr->emf) + AbortDoc( hdc ); + delete_print_dc( dc_attr ); + } if (dc_attr->emf) EMFDC_DeleteDC( dc_attr ); return NtGdiDeleteObjectApp( hdc ); }
From: Piotr Caban piotr@codeweavers.com
--- dlls/wineps.drv/download.c | 13 ------------- dlls/wineps.drv/psdrv.h | 1 - 2 files changed, 14 deletions(-)
diff --git a/dlls/wineps.drv/download.c b/dlls/wineps.drv/download.c index 89dd56d5b38..80cf4a0c13f 100644 --- a/dlls/wineps.drv/download.c +++ b/dlls/wineps.drv/download.c @@ -190,19 +190,6 @@ static UINT get_bbox(HDC hdc, RECT *rc) return GET_BE_WORD(head + 18); /* unitsPerEm */ }
-/**************************************************************************** - * PSDRV_SelectDownloadFont - * - * Set up ctx->font for a downloadable font - * - */ -BOOL PSDRV_SelectDownloadFont(print_ctx *ctx) -{ - ctx->font.fontloc = Download; - ctx->font.fontinfo.Download = NULL; - return TRUE; -} - static UINT calc_ppem_for_height(HDC hdc, LONG height) { BYTE os2[78]; /* size of version 0 table */ diff --git a/dlls/wineps.drv/psdrv.h b/dlls/wineps.drv/psdrv.h index 389c6a5b562..09b3a57b76c 100644 --- a/dlls/wineps.drv/psdrv.h +++ b/dlls/wineps.drv/psdrv.h @@ -491,7 +491,6 @@ SHORT PSDRV_CalcAvgCharWidth(const AFM *afm) DECLSPEC_HIDDEN; extern BOOL PSDRV_WriteSetBuiltinFont(print_ctx *ctx) DECLSPEC_HIDDEN; extern BOOL PSDRV_WriteBuiltinGlyphShow(print_ctx *ctx, LPCWSTR str, INT count) DECLSPEC_HIDDEN;
-extern BOOL PSDRV_SelectDownloadFont(print_ctx *ctx) DECLSPEC_HIDDEN; extern BOOL PSDRV_WriteSetDownloadFont(print_ctx *ctx, BOOL vertical) DECLSPEC_HIDDEN; extern BOOL PSDRV_WriteDownloadGlyphShow(print_ctx *ctx, const WORD *glyphs, UINT count) DECLSPEC_HIDDEN; extern BOOL PSDRV_EmptyDownloadList(print_ctx *ctx, BOOL write_undef) DECLSPEC_HIDDEN;
From: Piotr Caban piotr@codeweavers.com
--- dlls/wineps.drv/font.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/dlls/wineps.drv/font.c b/dlls/wineps.drv/font.c index 74171c09530..563f34afac8 100644 --- a/dlls/wineps.drv/font.c +++ b/dlls/wineps.drv/font.c @@ -41,6 +41,8 @@ HFONT CDECL PSDRV_SelectFont( print_ctx *ctx, HFONT hfont, UINT *aa_flags ) { struct font_info font_info;
+ ctx->font.set = UNSET; + if (ExtEscape(ctx->hdc, PSDRV_GET_BUILTIN_FONT_INFO, 0, NULL, sizeof(font_info), (char *)&font_info)) {
From: Piotr Caban piotr@codeweavers.com
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=54956 --- dlls/wineps.drv/download.c | 8 +++----- dlls/wineps.drv/psdrv.h | 3 --- 2 files changed, 3 insertions(+), 8 deletions(-)
diff --git a/dlls/wineps.drv/download.c b/dlls/wineps.drv/download.c index 80cf4a0c13f..2197a96027a 100644 --- a/dlls/wineps.drv/download.c +++ b/dlls/wineps.drv/download.c @@ -258,7 +258,6 @@ BOOL PSDRV_WriteSetDownloadFont(print_ctx *ctx, BOOL vertical) LOGFONTW lf; UINT ppem; XFORM xform; - INT escapement;
assert(ctx->font.fontloc == Download);
@@ -281,7 +280,7 @@ BOOL PSDRV_WriteSetDownloadFont(print_ctx *ctx, BOOL vertical)
if(GetGraphicsMode(ctx->hdc) == GM_COMPATIBLE) { - if (xform.eM22 < 0) ctx->font.escapement = -ctx->font.escapement; + if (xform.eM22 < 0) lf.lfEscapement = -lf.lfEscapement; xform.eM11 = xform.eM22 = fabs(xform.eM22); xform.eM21 = xform.eM12 = 0; } @@ -327,11 +326,10 @@ BOOL PSDRV_WriteSetDownloadFont(print_ctx *ctx, BOOL vertical) } }
- escapement = ctx->font.escapement; if (vertical) - escapement += 900; + lf.lfEscapement += 900;
- PSDRV_WriteSetFont(ctx, ps_name, ctx->font.size, escapement, + PSDRV_WriteSetFont(ctx, ps_name, ctx->font.size, lf.lfEscapement, is_fake_italic( ctx->hdc ));
HeapFree(GetProcessHeap(), 0, ps_name); diff --git a/dlls/wineps.drv/psdrv.h b/dlls/wineps.drv/psdrv.h index 09b3a57b76c..6173bdfc413 100644 --- a/dlls/wineps.drv/psdrv.h +++ b/dlls/wineps.drv/psdrv.h @@ -289,9 +289,6 @@ typedef struct { matrix size; PSCOLOR color; enum fontset set; /* Have we done a setfont yet */ - - /* These are needed by PSDRV_ExtTextOut */ - int escapement; } PSFONT;
typedef struct {
This merge request was approved by Huw Davies.