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.
This commit is contained in:
cosminp
2019-10-22 02:51:34 +02:00
committed by Vadim Zeitlin
parent 235e61c311
commit 7fa0074e1d

View File

@@ -126,10 +126,9 @@ void wxOSXPrintData::TransferPrinterNameFrom( const wxPrintData &data )
break; break;
else else
{ {
CFStringRef name; CFStringRef printerId = PMPrinterGetID(printer);
name = PMPrinterGetName(printer); CFRetain(printerId);
CFRetain(name); if (data.GetPrinterName() == wxCFStringRef(printerId).AsString())
if (data.GetPrinterName() == wxCFStringRef(name).AsString())
break; break;
} }
} }
@@ -301,16 +300,15 @@ bool wxOSXPrintData::TransferFrom( const wxPrintData &data )
void wxOSXPrintData::TransferPrinterNameTo( wxPrintData &data ) void wxOSXPrintData::TransferPrinterNameTo( wxPrintData &data )
{ {
CFStringRef name;
PMPrinter printer ; PMPrinter printer ;
PMSessionGetCurrentPrinter( m_macPrintSession, &printer ); PMSessionGetCurrentPrinter( m_macPrintSession, &printer );
if (PMPrinterIsDefault(printer)) if (PMPrinterIsDefault(printer))
data.SetPrinterName(wxEmptyString); data.SetPrinterName(wxEmptyString);
else else
{ {
name = PMPrinterGetName(printer); CFStringRef printerId = PMPrinterGetID(printer);
CFRetain(name); CFRetain(printerId);
data.SetPrinterName(wxCFStringRef(name).AsString()); data.SetPrinterName(wxCFStringRef(printerId).AsString());
} }
} }