Index: printing/printing_context_mac.mm |
diff --git a/printing/printing_context_mac.mm b/printing/printing_context_mac.mm |
index 599fa7859c25da2b84cadc33edd380da9c5e63b7..fa977934844251a8437c4f09dddd60531844453a 100644 |
--- a/printing/printing_context_mac.mm |
+++ b/printing/printing_context_mac.mm |
@@ -27,6 +27,7 @@ PrintingContext* PrintingContext::Create(const std::string& app_locale) { |
PrintingContextMac::PrintingContextMac(const std::string& app_locale) |
: PrintingContext(app_locale), |
+ print_info_([[NSPrintInfo sharedPrintInfo] copy]), |
context_(NULL) { |
} |
@@ -57,7 +58,7 @@ void PrintingContextMac::AskUserForSettings(gfx::NativeView parent_view, |
// adding a new custom view to the panel on 10.5; 10.6 has |
// NSPrintPanelShowsPrintSelection). |
NSPrintPanel* panel = [NSPrintPanel printPanel]; |
- NSPrintInfo* printInfo = [NSPrintInfo sharedPrintInfo]; |
+ NSPrintInfo* printInfo = print_info_.get(); |
NSPrintPanelOptions options = [panel options]; |
options |= NSPrintPanelShowsPaperSize; |
@@ -80,7 +81,8 @@ void PrintingContextMac::AskUserForSettings(gfx::NativeView parent_view, |
// Will require restructuring the PrintingContext API to use a callback. |
NSInteger selection = [panel runModalWithPrintInfo:printInfo]; |
if (selection == NSOKButton) { |
- ParsePrintInfo([panel printInfo]); |
+ print_info_.reset([[panel printInfo] retain]); |
+ InitPrintSettingsFromPrintInfo(GetPageRangesFromPrintInfo()); |
callback->Run(OK); |
} else { |
callback->Run(CANCEL); |
@@ -90,7 +92,8 @@ void PrintingContextMac::AskUserForSettings(gfx::NativeView parent_view, |
PrintingContext::Result PrintingContextMac::UseDefaultSettings() { |
DCHECK(!in_print_job_); |
- ParsePrintInfo([NSPrintInfo sharedPrintInfo]); |
+ print_info_.reset([[NSPrintInfo sharedPrintInfo] copy]); |
+ InitPrintSettingsFromPrintInfo(GetPageRangesFromPrintInfo()); |
return OK; |
} |
@@ -99,7 +102,8 @@ PrintingContext::Result PrintingContextMac::UpdatePrintSettings( |
const DictionaryValue& job_settings, const PageRanges& ranges) { |
DCHECK(!in_print_job_); |
- ResetSettings(); |
+ // NOTE: Reset |print_info_| with a copy of |sharedPrintInfo| so as to start |
+ // with a clean slate. |
print_info_.reset([[NSPrintInfo sharedPrintInfo] copy]); |
bool collate; |
@@ -250,9 +254,7 @@ bool PrintingContextMac::SetOutputIsColor(bool color) { |
false) == noErr; |
} |
-void PrintingContextMac::ParsePrintInfo(NSPrintInfo* print_info) { |
- ResetSettings(); |
- print_info_.reset([print_info retain]); |
+PageRanges PrintingContextMac::GetPageRangesFromPrintInfo() { |
PageRanges page_ranges; |
NSDictionary* print_info_dict = [print_info_.get() dictionary]; |
if (![[print_info_dict objectForKey:NSPrintAllPages] boolValue]) { |
@@ -261,7 +263,7 @@ void PrintingContextMac::ParsePrintInfo(NSPrintInfo* print_info) { |
range.to = [[print_info_dict objectForKey:NSPrintLastPage] intValue] - 1; |
page_ranges.push_back(range); |
} |
- InitPrintSettingsFromPrintInfo(page_ranges); |
+ return page_ranges; |
} |
PrintingContext::Result PrintingContextMac::InitWithSettings( |