summaryrefslogtreecommitdiffstats
path: root/printing/backend
diff options
context:
space:
mode:
authorvitalybuka <vitalybuka@chromium.org>2014-08-26 16:41:45 -0700
committerCommit bot <commit-bot@chromium.org>2014-08-26 23:45:57 +0000
commit92ab8ce04d850a59aa3d1b49ba2986845102baf3 (patch)
treede095372d9f4ae672eb11adef98681ae1d2acb04 /printing/backend
parentfa29c3e30198fcdb462ec65f0627a5e5f524effb (diff)
downloadchromium_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.cc32
-rw-r--r--printing/backend/win_helper.h8
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_