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:
@@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user