forked from 1b-agent/opencadstudio-upstream
fix(print): send Windows plots to the chosen printer, name the default, report failures
On Windows a plot with no printer chosen went to the PDF application's bare "print" verb — whatever that application considered its default — and a viewer without a "printto" verb (Edge, store readers) silently dropped the printer the dialog had chosen. The dialog also never named the system default, and a failed printer enumeration left only "Default" and "PDF" with the reason written to a console nobody sees. - The default printer is looked up by name (GetDefaultPrinterW) both for the dialog's "System default printer (…)" entry and before every job. - A pure route decision (plan_print_route) resolves "Default" to that name and uses the PDF application only when it registered a "printto" verb for .pdf (AssocQueryStringW); otherwise the job goes straight to the spooler through the existing GDI path. The report says which: "Sent to printer: NAME (direct print | via the PDF application)". - list_printers reports the system's own error; the plot dialog shows it under the printer row and the command line warns once. A desktop without CUPS is an empty list, not an error. - PRINTERS command: default printer, listed printers (or the error) and, on Windows, the print route — a report to paste into an issue. - Properties… on the Default entry opens that printer's preferences sheet. - GDI path: the driver's dmSize is kept (its private data lives behind it), the print raster is no longer memoised for the session, and a spooled temporary PDF is removed. Tests: route planning (named / blank / no default / printto or not), the PRINTERS command; the two Windows-only GDI tests pass the resolved name. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
1 parent
2b38f798c0
commit
c36ae08fd0
29 files changed
+592
-112
No files matched your search
@@ -5100,6 +5100,15 @@ plot =
|
||||
.system-default-printer = Системный принтер по умолчанию
|
||||
.what-to-plot = Что спланировать
|
||||
.x-mm = X (мм)
|
||||
.default-printer-name = Принтер по умолчанию: __ocs_fmt_0__
|
||||
.default-printer-none-reported-by-the-system = Принтер по умолчанию: система не сообщает ни об одном
|
||||
.printers-none-listed-by-the-system = Принтеры: система не перечисляет ни одного
|
||||
.printers-count = Принтеры (__ocs_fmt_0__):
|
||||
.could-not-list-printers-error = Не удалось получить список принтеров: __ocs_fmt_0__
|
||||
.plots-go-through-the-pdf-application-command = Печать идёт через приложение PDF: __ocs_fmt_0__
|
||||
.plots-go-straight-to-the-printer-no-pdf-application-registers-a-print-verb = Печать идёт напрямую на принтер (ни одно приложение PDF не регистрирует команду печати).
|
||||
.via-the-pdf-application = через приложение PDF
|
||||
.direct-print = прямая печать
|
||||
.y-mm = Y (мм)
|
||||
|
||||
manage =
|
||||
|
||||
Reference in new issue
Block a user