1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CHROME_BROWSER_UI_LIBGTK2UI_PRINT_DIALOG_GTK2_H_
6 #define CHROME_BROWSER_UI_LIBGTK2UI_PRINT_DIALOG_GTK2_H_
9 #include <gtk/gtkunixprint.h>
11 #include "base/compiler_specific.h"
12 #include "base/files/file_path.h"
13 #include "base/memory/ref_counted.h"
14 #include "base/sequenced_task_runner_helpers.h"
15 #include "chrome/browser/ui/libgtk2ui/gtk2_signal.h"
16 #include "content/public/browser/browser_thread.h"
17 #include "printing/print_dialog_gtk_interface.h"
18 #include "printing/printing_context_linux.h"
19 #include "ui/aura/window_observer.h"
26 using printing::PrintingContextLinux
;
28 // Needs to be freed on the UI thread to clean up its GTK members variables.
30 : public printing::PrintDialogGtkInterface
,
31 public base::RefCountedThreadSafe
<
32 PrintDialogGtk2
, content::BrowserThread::DeleteOnUIThread
>,
33 public aura::WindowObserver
{
35 // Creates and returns a print dialog.
36 static printing::PrintDialogGtkInterface
* CreatePrintDialog(
37 PrintingContextLinux
* context
);
39 // printing::PrintDialogGtkInterface implementation.
40 void UseDefaultSettings() override
;
41 bool UpdateSettings(printing::PrintSettings
* settings
) override
;
43 gfx::NativeView parent_view
,
45 const PrintingContextLinux::PrintSettingsCallback
& callback
) override
;
46 void PrintDocument(const printing::MetafilePlayer
& metafile
,
47 const base::string16
& document_name
) override
;
48 void AddRefToDialog() override
;
49 void ReleaseDialog() override
;
52 friend struct content::BrowserThread::DeleteOnThread
<
53 content::BrowserThread::UI
>;
54 friend class base::DeleteHelper
<PrintDialogGtk2
>;
56 explicit PrintDialogGtk2(PrintingContextLinux
* context
);
57 ~PrintDialogGtk2() override
;
59 // Handles dialog response.
60 CHROMEGTK_CALLBACK_1(PrintDialogGtk2
, void, OnResponse
, int);
62 // Prints document named |document_name|.
63 void SendDocumentToPrinter(const base::string16
& document_name
);
65 // Handles print job response.
66 static void OnJobCompletedThunk(GtkPrintJob
* print_job
,
69 void OnJobCompleted(GtkPrintJob
* print_job
, GError
* error
);
71 // Helper function for initializing |context_|'s PrintSettings with a given
73 void InitPrintSettings(printing::PrintSettings
* settings
);
75 // aura::WindowObserver implementation.
76 void OnWindowDestroying(aura::Window
* window
) override
;
78 // Printing dialog callback.
79 PrintingContextLinux::PrintSettingsCallback callback_
;
80 PrintingContextLinux
* context_
;
82 // Print dialog settings. PrintDialogGtk2 owns |dialog_| and holds references
83 // to the other objects.
85 GtkPrintSettings
* gtk_settings_
;
86 GtkPageSetup
* page_setup_
;
89 base::FilePath path_to_pdf_
;
91 DISALLOW_COPY_AND_ASSIGN(PrintDialogGtk2
);
94 #endif // CHROME_BROWSER_UI_LIBGTK2UI_PRINT_DIALOG_GTK2_H_