diff options
author | vitalybuka <vitalybuka@chromium.org> | 2014-08-26 16:41:45 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-08-26 23:45:57 +0000 |
commit | 92ab8ce04d850a59aa3d1b49ba2986845102baf3 (patch) | |
tree | de095372d9f4ae672eb11adef98681ae1d2acb04 /printing/backend | |
parent | fa29c3e30198fcdb462ec65f0627a5e5f524effb (diff) | |
download | chromium_src-92ab8ce04d850a59aa3d1b49ba2986845102baf3.zip chromium_src-92ab8ce04d850a59aa3d1b49ba2986845102baf3.tar.gz chromium_src-92ab8ce04d850a59aa3d1b49ba2986845102baf3.tar.bz2 |
Use document from preview for System Dialog printing on Windows.
System dialog shows only properties of selected printers, no system dialog with printers.
Removed global Ctrl+Shift+P shortcut on windows.
BUG=374321
Review URL: https://codereview.chromium.org/480303002
Cr-Commit-Position: refs/heads/master@{#292032}
Diffstat (limited to 'printing/backend')
-rw-r--r-- | printing/backend/win_helper.cc | 32 | ||||
-rw-r--r-- | printing/backend/win_helper.h | 8 |
2 files changed, 40 insertions, 0 deletions
diff --git a/printing/backend/win_helper.cc b/printing/backend/win_helper.cc index 6aba7c6..db8d735 100644 --- a/printing/backend/win_helper.cc +++ b/printing/backend/win_helper.cc @@ -488,4 +488,36 @@ scoped_ptr<DEVMODE, base::FreeDeleter> CreateDevMode(HANDLE printer, return out.Pass(); } +scoped_ptr<DEVMODE, base::FreeDeleter> PromptDevMode( + HANDLE printer, + const base::string16& printer_name, + DEVMODE* in, + HWND window, + bool* canceled) { + LONG buffer_size = + DocumentProperties(window, + printer, + const_cast<wchar_t*>(printer_name.c_str()), + NULL, + NULL, + 0); + if (buffer_size < static_cast<int>(sizeof(DEVMODE))) + return scoped_ptr<DEVMODE, base::FreeDeleter>(); + scoped_ptr<DEVMODE, base::FreeDeleter> out( + reinterpret_cast<DEVMODE*>(malloc(buffer_size))); + DWORD flags = (in ? (DM_IN_BUFFER) : 0) | DM_OUT_BUFFER | DM_IN_PROMPT; + LONG result = DocumentProperties(window, + printer, + const_cast<wchar_t*>(printer_name.c_str()), + out.get(), + in, + flags); + if (canceled) + *canceled = (result == IDCANCEL); + if (result != IDOK) + return scoped_ptr<DEVMODE, base::FreeDeleter>(); + CHECK_GE(buffer_size, out.get()->dmSize + out.get()->dmDriverExtra); + return out.Pass(); +} + } // namespace printing diff --git a/printing/backend/win_helper.h b/printing/backend/win_helper.h index 18d0355..c6665f4 100644 --- a/printing/backend/win_helper.h +++ b/printing/backend/win_helper.h @@ -186,6 +186,14 @@ PRINTING_EXPORT scoped_ptr<DEVMODE, base::FreeDeleter> CreateDevMode( HANDLE printer, DEVMODE* in); +// Prompts for new DEVMODE. If |in| is not NULL copy settings from there. +PRINTING_EXPORT scoped_ptr<DEVMODE, base::FreeDeleter> PromptDevMode( + HANDLE printer, + const base::string16& printer_name, + DEVMODE* in, + HWND window, + bool* canceled); + } // namespace printing #endif // PRINTING_BACKEND_WIN_HELPER_H_ |