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;
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());
}
}