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. 4 5 #ifndef CHROME_BROWSER_UI_LIBGTK2UI_PRINT_DIALOG_GTK2_H_ 6 #define CHROME_BROWSER_UI_LIBGTK2UI_PRINT_DIALOG_GTK2_H_ 7 8 #include <gtk/gtk.h> 9 #include <gtk/gtkunixprint.h> 10 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" 20 21 namespace printing { 22 class MetafilePlayer; 23 class PrintSettings; 24 } 25 26 using printing::PrintingContextLinux; 27 28 // Needs to be freed on the UI thread to clean up its GTK members variables. 29 class PrintDialogGtk2 30 : public printing::PrintDialogGtkInterface, 31 public base::RefCountedThreadSafe< 32 PrintDialogGtk2, content::BrowserThread::DeleteOnUIThread>, 33 public aura::WindowObserver { 34 public: 35 // Creates and returns a print dialog. 36 static printing::PrintDialogGtkInterface* CreatePrintDialog( 37 PrintingContextLinux* context); 38 39 // printing::PrintDialogGtkInterface implementation. 40 virtual void UseDefaultSettings() OVERRIDE; 41 virtual bool UpdateSettings(printing::PrintSettings* settings) OVERRIDE; 42 virtual void ShowDialog( 43 gfx::NativeView parent_view, 44 bool has_selection, 45 const PrintingContextLinux::PrintSettingsCallback& callback) OVERRIDE; 46 virtual void PrintDocument(const printing::MetafilePlayer& metafile, 47 const base::string16& document_name) OVERRIDE; 48 virtual void AddRefToDialog() OVERRIDE; 49 virtual void ReleaseDialog() OVERRIDE; 50 51 private: 52 friend struct content::BrowserThread::DeleteOnThread< 53 content::BrowserThread::UI>; 54 friend class base::DeleteHelper<PrintDialogGtk2>; 55 56 explicit PrintDialogGtk2(PrintingContextLinux* context); 57 virtual ~PrintDialogGtk2(); 58 59 // Handles dialog response. 60 CHROMEGTK_CALLBACK_1(PrintDialogGtk2, void, OnResponse, int); 61 62 // Prints document named |document_name|. 63 void SendDocumentToPrinter(const base::string16& document_name); 64 65 // Handles print job response. 66 static void OnJobCompletedThunk(GtkPrintJob* print_job, 67 gpointer user_data, 68 GError* error); 69 void OnJobCompleted(GtkPrintJob* print_job, GError* error); 70 71 // Helper function for initializing |context_|'s PrintSettings with a given 72 // |settings|. 73 void InitPrintSettings(printing::PrintSettings* settings); 74 75 // aura::WindowObserver implementation. 76 virtual void OnWindowDestroying(aura::Window* window) OVERRIDE; 77 78 // Printing dialog callback. 79 PrintingContextLinux::PrintSettingsCallback callback_; 80 PrintingContextLinux* context_; 81 82 // Print dialog settings. PrintDialogGtk2 owns |dialog_| and holds references 83 // to the other objects. 84 GtkWidget* dialog_; 85 GtkPrintSettings* gtk_settings_; 86 GtkPageSetup* page_setup_; 87 GtkPrinter* printer_; 88 89 base::FilePath path_to_pdf_; 90 91 DISALLOW_COPY_AND_ASSIGN(PrintDialogGtk2); 92 }; 93 94 #endif // CHROME_BROWSER_UI_LIBGTK2UI_PRINT_DIALOG_GTK2_H_ 95