Files
cef/patch/patches/linux_printing_context.patch

161 lines
5.4 KiB
Diff

diff --git printing/printing_context_linux.cc printing/printing_context_linux.cc
index e83735211e30a77ef1bc82b6a252da02a18626fc..d328c3de6901dca94301c76913bb1c8c6d7479c4 100644
--- printing/printing_context_linux.cc
+++ printing/printing_context_linux.cc
@@ -69,11 +69,11 @@ mojom::ResultCode PrintingContextLinux::UseDefaultSettings() {
ResetSettings();
#if BUILDFLAG(IS_LINUX)
- if (!ui::LinuxUi::instance())
+ if (!ui::PrintingContextLinuxDelegate::instance())
return mojom::ResultCode::kSuccess;
if (!print_dialog_)
- print_dialog_ = ui::LinuxUi::instance()->CreatePrintDialog(this);
+ print_dialog_ = ui::PrintingContextLinuxDelegate::instance()->CreatePrintDialog(this);
if (print_dialog_) {
print_dialog_->UseDefaultSettings();
@@ -85,8 +85,8 @@ mojom::ResultCode PrintingContextLinux::UseDefaultSettings() {
gfx::Size PrintingContextLinux::GetPdfPaperSizeDeviceUnits() {
#if BUILDFLAG(IS_LINUX)
- if (ui::LinuxUi::instance())
- return ui::LinuxUi::instance()->GetPdfPaperSize(this);
+ if (ui::PrintingContextLinuxDelegate::instance())
+ return ui::PrintingContextLinuxDelegate::instance()->GetPdfPaperSize(this);
#endif
return gfx::Size();
@@ -98,11 +98,11 @@ mojom::ResultCode PrintingContextLinux::UpdatePrinterSettings(
DCHECK(!in_print_job_);
#if BUILDFLAG(IS_LINUX)
- if (!ui::LinuxUi::instance())
+ if (!ui::PrintingContextLinuxDelegate::instance())
return mojom::ResultCode::kSuccess;
if (!print_dialog_)
- print_dialog_ = ui::LinuxUi::instance()->CreatePrintDialog(this);
+ print_dialog_ = ui::PrintingContextLinuxDelegate::instance()->CreatePrintDialog(this);
if (print_dialog_) {
// PrintDialogGtk::UpdateSettings() calls InitWithSettings() so settings_ will
diff --git ui/linux/BUILD.gn ui/linux/BUILD.gn
index 267de0acbaf5a01f0b9aa5c456e90e32721a31cd..ce4f0836692a292fb9c768124a63ff468ced225b 100644
--- ui/linux/BUILD.gn
+++ ui/linux/BUILD.gn
@@ -3,6 +3,7 @@
# found in the LICENSE file.
import("//build/config/linux/gtk/gtk.gni")
+import("//printing/buildflags/buildflags.gni")
import("//ui/qt/qt.gni")
assert(is_linux)
@@ -35,6 +36,11 @@ component("linux_ui") {
"//ui/display/types",
"//ui/gfx/geometry",
]
+
+ if (enable_printing) {
+ deps += [ "//printing/mojom" ]
+ }
+
public_deps = [ "//printing/buildflags" ]
}
diff --git ui/linux/linux_ui.cc ui/linux/linux_ui.cc
index 13bc34539823f91770f2aa45bb1b2d852bd39075..6e7d729ce561619bb9f8444db8793ba93d860f3f 100644
--- ui/linux/linux_ui.cc
+++ ui/linux/linux_ui.cc
@@ -20,11 +20,29 @@ namespace ui {
namespace {
LinuxUi* g_linux_ui = nullptr;
+static PrintingContextLinuxDelegate* g_delegate = nullptr;
} // namespace
+// static
+PrintingContextLinuxDelegate* PrintingContextLinuxDelegate::SetInstance(
+ PrintingContextLinuxDelegate* delegate) {
+ auto old_delegate = g_delegate;
+ g_delegate = delegate;
+ return old_delegate;
+}
+
+// static
+PrintingContextLinuxDelegate* PrintingContextLinuxDelegate::instance() {
+ return g_delegate;
+}
+
// static
LinuxUi* LinuxUi::SetInstance(LinuxUi* instance) {
+#if BUILDFLAG(IS_LINUX) && BUILDFLAG(ENABLE_PRINTING)
+ PrintingContextLinuxDelegate::SetInstance(instance);
+#endif
+
return std::exchange(g_linux_ui, instance);
}
diff --git ui/linux/linux_ui.h ui/linux/linux_ui.h
index 6679d98793f741a8138bcfde21acae9893fabeec..64eab490bf7936cac2aa18003b722a29b9f2de6a 100644
--- ui/linux/linux_ui.h
+++ ui/linux/linux_ui.h
@@ -20,6 +20,10 @@
#include "printing/buildflags/buildflags.h"
#include "ui/display/types/display_config.h"
+#if BUILDFLAG(ENABLE_PRINTING)
+#include "printing/printing_context_linux.h" // nogncheck
+#endif
+
// The main entrypoint into Linux toolkit specific code. GTK/QT code should only
// be executed behind this interface.
@@ -59,9 +63,27 @@ class WindowButtonOrderObserver;
class WindowFrameProvider;
enum class TextEditCommand;
+class COMPONENT_EXPORT(LINUX_UI) PrintingContextLinuxDelegate {
+ public:
+ virtual ~PrintingContextLinuxDelegate() = default;
+
+ virtual printing::PrintDialogLinuxInterface* CreatePrintDialog(
+ printing::PrintingContextLinux* context) = 0;
+
+ virtual gfx::Size GetPdfPaperSize(printing::PrintingContextLinux* context) = 0;
+
+ static PrintingContextLinuxDelegate* SetInstance(
+ PrintingContextLinuxDelegate* delegate);
+ static PrintingContextLinuxDelegate* instance();
+};
+
// Adapter class with targets to render like different toolkits. Set by any
// project that wants to do linux desktop native rendering.
-class COMPONENT_EXPORT(LINUX_UI) LinuxUi {
+class COMPONENT_EXPORT(LINUX_UI) LinuxUi
+#if BUILDFLAG(ENABLE_PRINTING)
+ : public PrintingContextLinuxDelegate
+#endif
+ {
public:
// Describes the window management actions that could be taken in response to
// a middle click in the non client area.
@@ -150,14 +172,6 @@ class COMPONENT_EXPORT(LINUX_UI) LinuxUi {
// Returns a map of KeyboardEvent code to KeyboardEvent key values.
virtual base::flat_map<std::string, std::string> GetKeyboardLayoutMap() = 0;
-#if BUILDFLAG(ENABLE_PRINTING)
- virtual printing::PrintDialogLinuxInterface* CreatePrintDialog(
- printing::PrintingContextLinux* context) = 0;
-
- virtual gfx::Size GetPdfPaperSize(
- printing::PrintingContextLinux* context) = 0;
-#endif
-
// Returns a native file selection dialog. `listener` is of type
// SelectFileDialog::Listener. TODO(thomasanderson): Move
// SelectFileDialog::Listener to SelectFileDialogListener so that it can be