Index: trunk/src/printing/printing_context_win.cc |
=================================================================== |
--- trunk/src/printing/printing_context_win.cc (revision 251065) |
+++ trunk/src/printing/printing_context_win.cc (working copy) |
@@ -175,11 +175,11 @@ |
ReleaseContext(); |
} |
+// TODO(vitalybuka): Implement as ui::BaseShellDialog crbug.com/180997. |
void PrintingContextWin::AskUserForSettings( |
gfx::NativeView view, int max_pages, bool has_selection, |
const PrintSettingsCallback& callback) { |
DCHECK(!in_print_job_); |
- // TODO(scottmg): Possibly this has to move into the threaded runner too? |
if (win8::IsSingleWindowMetroMode()) { |
// The system dialog can not be opened while running in Metro. |
// But we can programatically launch the Metro print device charm though. |
@@ -212,40 +212,40 @@ |
// - Cancel, the settings are not changed, the previous setting, if it was |
// initialized before, are kept. CANCEL is returned. |
// On failure, the settings are reset and FAILED is returned. |
- PRINTDLGEX* dialog_options = |
- reinterpret_cast<PRINTDLGEX*>(malloc(sizeof(PRINTDLGEX))); |
- ZeroMemory(dialog_options, sizeof(PRINTDLGEX)); |
- dialog_options->lStructSize = sizeof(PRINTDLGEX); |
- dialog_options->hwndOwner = window; |
+ PRINTDLGEX dialog_options = { sizeof(PRINTDLGEX) }; |
+ dialog_options.hwndOwner = window; |
// Disable options we don't support currently. |
// TODO(maruel): Reuse the previously loaded settings! |
- dialog_options->Flags = PD_RETURNDC | PD_USEDEVMODECOPIESANDCOLLATE | |
- PD_NOCURRENTPAGE | PD_HIDEPRINTTOFILE; |
+ dialog_options.Flags = PD_RETURNDC | PD_USEDEVMODECOPIESANDCOLLATE | |
+ PD_NOCURRENTPAGE | PD_HIDEPRINTTOFILE; |
if (!has_selection) |
- dialog_options->Flags |= PD_NOSELECTION; |
+ dialog_options.Flags |= PD_NOSELECTION; |
- const size_t max_page_ranges = 32; |
- PRINTPAGERANGE* ranges = new PRINTPAGERANGE[max_page_ranges]; |
- dialog_options->lpPageRanges = ranges; |
- dialog_options->nStartPage = START_PAGE_GENERAL; |
+ PRINTPAGERANGE ranges[32]; |
+ dialog_options.nStartPage = START_PAGE_GENERAL; |
if (max_pages) { |
// Default initialize to print all the pages. |
memset(ranges, 0, sizeof(ranges)); |
ranges[0].nFromPage = 1; |
ranges[0].nToPage = max_pages; |
- dialog_options->nPageRanges = 1; |
- dialog_options->nMaxPageRanges = max_page_ranges; |
- dialog_options->nMinPage = 1; |
- dialog_options->nMaxPage = max_pages; |
+ dialog_options.nPageRanges = 1; |
+ dialog_options.nMaxPageRanges = arraysize(ranges); |
+ dialog_options.nMinPage = 1; |
+ dialog_options.nMaxPage = max_pages; |
+ dialog_options.lpPageRanges = ranges; |
} else { |
// No need to bother, we don't know how many pages are available. |
- dialog_options->Flags |= PD_NOPAGENUMS; |
+ dialog_options.Flags |= PD_NOPAGENUMS; |
} |
- callback_ = callback; |
- print_settings_dialog_ = new ui::PrintSettingsDialogWin(this); |
- print_settings_dialog_->GetPrintSettings( |
- print_dialog_func_, window, dialog_options); |
+ HRESULT hr = (*print_dialog_func_)(&dialog_options); |
+ if (hr != S_OK) { |
+ ResetSettings(); |
+ callback.Run(FAILED); |
+ } |
+ |
+ // TODO(maruel): Support PD_PRINTTOFILE. |
+ callback.Run(ParseDialogResultEx(dialog_options)); |
} |
PrintingContext::Result PrintingContextWin::UseDefaultSettings() { |
@@ -527,20 +527,6 @@ |
return context_; |
} |
-void PrintingContextWin::PrintSettingsConfirmed(PRINTDLGEX* dialog_options) { |
- // TODO(maruel): Support PD_PRINTTOFILE. |
- callback_.Run(ParseDialogResultEx(*dialog_options)); |
- delete [] dialog_options->lpPageRanges; |
- free(dialog_options); |
-} |
- |
-void PrintingContextWin::PrintSettingsCancelled(PRINTDLGEX* dialog_options) { |
- ResetSettings(); |
- callback_.Run(FAILED); |
- delete [] dialog_options->lpPageRanges; |
- free(dialog_options); |
-} |
- |
// static |
BOOL PrintingContextWin::AbortProc(HDC hdc, int nCode) { |
if (nCode) { |