From 7fa0074e1d6a1173b2a09c1ed8dffc903560924b Mon Sep 17 00:00:00 2001 From: cosminp Date: Tue, 22 Oct 2019 02:51:34 +0200 Subject: [PATCH] Use unique printer ID as its name under macOS Apparently, the user-readable name retrieved by PMPrinterGetName() is not necessarily unique when multiple printers are available, so use PMPrinterGetID() which is guaranteed to return a unique string. Closes #16774. --- src/osx/core/printmac.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/osx/core/printmac.cpp b/src/osx/core/printmac.cpp index 8f561a205f..6d36184fc6 100644 --- a/src/osx/core/printmac.cpp +++ b/src/osx/core/printmac.cpp @@ -126,10 +126,9 @@ void wxOSXPrintData::TransferPrinterNameFrom( const wxPrintData &data ) break; else { - CFStringRef name; - name = PMPrinterGetName(printer); - CFRetain(name); - if (data.GetPrinterName() == wxCFStringRef(name).AsString()) + CFStringRef printerId = PMPrinterGetID(printer); + CFRetain(printerId); + if (data.GetPrinterName() == wxCFStringRef(printerId).AsString()) break; } } @@ -301,16 +300,15 @@ bool wxOSXPrintData::TransferFrom( const wxPrintData &data ) void wxOSXPrintData::TransferPrinterNameTo( wxPrintData &data ) { - CFStringRef name; PMPrinter printer ; PMSessionGetCurrentPrinter( m_macPrintSession, &printer ); if (PMPrinterIsDefault(printer)) data.SetPrinterName(wxEmptyString); else { - name = PMPrinterGetName(printer); - CFRetain(name); - data.SetPrinterName(wxCFStringRef(name).AsString()); + CFStringRef printerId = PMPrinterGetID(printer); + CFRetain(printerId); + data.SetPrinterName(wxCFStringRef(printerId).AsString()); } }