Better algorithm for getting and setting the dfault printer

Bug 117819 r-dcone sr=attinasi
This commit is contained in:
[email protected] committed 2002-01-04 14:46:26 +00:00
1 parent 42e1ebcd5c
commit 1751116373
1 file changed
+14 -12
+14 -12
View File
@@ -1433,23 +1433,17 @@ GlobalPrinters::EnumerateNativePrinters(DWORD aWhichPrinters, char* aDefPrinter)
return NS_ERROR_OUT_OF_MEMORY;
}
PRInt32 defInx = -1;
LPPRINTER_INFO_2 defPtr = nsnull;
for (DWORD i=0;i<dwNumItems;i++ ) {
PRBool isDef = aDefPrinter && !PL_strcmp(printerInfo[i].pPrinterName, aDefPrinter);
// put the default printer at the beginning of list
if (isDef) {
// shift all the items in the list
PRInt32 lastInx = mPrinters->Count()-1;
for (PRInt32 inx=lastInx;inx>=0;inx--) {
if (inx == lastInx) {
mPrinters->AppendElement(mPrinters->ElementAt(inx));
} else {
mPrinters->ReplaceElementAt(mPrinters->ElementAt(inx), inx-1);
}
}
mPrinters->ReplaceElementAt((void*)&printerInfo[i], 0);
} else {
mPrinters->AppendElement((void*)&printerInfo[i]);
defInx = i;
defPtr = &printerInfo[i];
}
mPrinters->AppendElement((void*)&printerInfo[i]);
#if defined(DEBUG_rods) || defined(DEBUG_dcone)
printf("-------- %d ---------\n", i);
@@ -1465,6 +1459,14 @@ GlobalPrinters::EnumerateNativePrinters(DWORD aWhichPrinters, char* aDefPrinter)
#endif
}
// swap the default printer with the zero'th item
if (defInx > 0) {
LPPRINTER_INFO_2 ptr = (LPPRINTER_INFO_2)mPrinters->ElementAt(0);
mPrinters->ReplaceElementAt((void*)defPtr, 0);
mPrinters->ReplaceElementAt((void*)ptr, defInx);
}
// hang onto the pointer until we are done
mPrinterInfoArray->AppendElement((void*)printerInfo);