OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/printing/print_dialog_gtk.h" | 5 #include "chrome/browser/printing/print_dialog_gtk.h" |
6 | 6 |
7 #include <fcntl.h> | 7 #include <fcntl.h> |
8 #include <gtk/gtkunixprint.h> | 8 #include <gtk/gtkunixprint.h> |
9 #include <sys/stat.h> | 9 #include <sys/stat.h> |
10 #include <sys/types.h> | 10 #include <sys/types.h> |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
123 page_setup_ = NULL; | 123 page_setup_ = NULL; |
124 } | 124 } |
125 if (printer_) { | 125 if (printer_) { |
126 g_object_unref(printer_); | 126 g_object_unref(printer_); |
127 printer_ = NULL; | 127 printer_ = NULL; |
128 } | 128 } |
129 } | 129 } |
130 | 130 |
131 void PrintDialogGtk::UseDefaultSettings() { | 131 void PrintDialogGtk::UseDefaultSettings() { |
132 DCHECK(!page_setup_); | 132 DCHECK(!page_setup_); |
| 133 DCHECK(!printer_); |
133 | 134 |
134 // |gtk_settings_| is a new object. | 135 // |gtk_settings_| is a new object. |
135 gtk_settings_ = gtk_print_settings_new(); | 136 gtk_settings_ = gtk_print_settings_new(); |
136 | 137 page_setup_ = gtk_page_setup_new(); |
137 scoped_ptr<GtkPrinterList> printer_list(new GtkPrinterList); | |
138 printer_ = printer_list->default_printer(); | |
139 if (printer_) { | |
140 g_object_ref(printer_); | |
141 gtk_print_settings_set_printer(gtk_settings_, | |
142 gtk_printer_get_name(printer_)); | |
143 page_setup_ = gtk_printer_get_default_page_size(printer_); | |
144 } | |
145 | |
146 if (!page_setup_) | |
147 page_setup_ = gtk_page_setup_new(); | |
148 | 138 |
149 // No page range to initialize for default settings. | 139 // No page range to initialize for default settings. |
150 PageRanges ranges_vector; | 140 PageRanges ranges_vector; |
151 PrintSettings settings; | 141 PrintSettings settings; |
152 InitPrintSettings(ranges_vector, &settings); | 142 InitPrintSettings(ranges_vector, &settings); |
153 } | 143 } |
154 | 144 |
155 bool PrintDialogGtk::UpdateSettings(const base::DictionaryValue& job_settings, | 145 bool PrintDialogGtk::UpdateSettings(const base::DictionaryValue& job_settings, |
156 const printing::PageRanges& ranges, | 146 const printing::PageRanges& ranges, |
157 printing::PrintSettings* settings) { | 147 printing::PrintSettings* settings) { |
158 bool collate; | 148 bool collate; |
159 int color; | 149 int color; |
160 bool landscape; | 150 bool landscape; |
161 bool print_to_pdf; | 151 bool print_to_pdf; |
162 int copies; | 152 int copies; |
163 int duplex_mode; | 153 int duplex_mode; |
164 std::string device_name; | 154 std::string device_name; |
165 | 155 |
166 if (!job_settings.GetBoolean(printing::kSettingLandscape, &landscape) || | 156 if (!job_settings.GetBoolean(printing::kSettingLandscape, &landscape) || |
167 !job_settings.GetBoolean(printing::kSettingCollate, &collate) || | 157 !job_settings.GetBoolean(printing::kSettingCollate, &collate) || |
168 !job_settings.GetInteger(printing::kSettingColor, &color) || | 158 !job_settings.GetInteger(printing::kSettingColor, &color) || |
169 !job_settings.GetBoolean(printing::kSettingPrintToPDF, &print_to_pdf) || | 159 !job_settings.GetBoolean(printing::kSettingPrintToPDF, &print_to_pdf) || |
170 !job_settings.GetInteger(printing::kSettingDuplexMode, &duplex_mode) || | 160 !job_settings.GetInteger(printing::kSettingDuplexMode, &duplex_mode) || |
171 !job_settings.GetInteger(printing::kSettingCopies, &copies) || | 161 !job_settings.GetInteger(printing::kSettingCopies, &copies) || |
172 !job_settings.GetString(printing::kSettingDeviceName, &device_name)) { | 162 !job_settings.GetString(printing::kSettingDeviceName, &device_name)) { |
173 return false; | 163 return false; |
174 } | 164 } |
175 | 165 |
| 166 bool is_cloud_print = job_settings.HasKey(printing::kSettingCloudPrintId); |
| 167 |
176 if (!gtk_settings_) | 168 if (!gtk_settings_) |
177 gtk_settings_ = gtk_print_settings_new(); | 169 gtk_settings_ = gtk_print_settings_new(); |
178 | 170 |
179 if (!print_to_pdf) { | 171 if (!print_to_pdf && !is_cloud_print) { |
180 scoped_ptr<GtkPrinterList> printer_list(new GtkPrinterList); | 172 scoped_ptr<GtkPrinterList> printer_list(new GtkPrinterList); |
181 printer_ = printer_list->GetPrinterWithName(device_name.c_str()); | 173 printer_ = printer_list->GetPrinterWithName(device_name.c_str()); |
182 if (printer_) { | 174 if (printer_) { |
183 g_object_ref(printer_); | 175 g_object_ref(printer_); |
184 gtk_print_settings_set_printer(gtk_settings_, | 176 gtk_print_settings_set_printer(gtk_settings_, |
185 gtk_printer_get_name(printer_)); | 177 gtk_printer_get_name(printer_)); |
186 if (!page_setup_) { | 178 if (!page_setup_) { |
187 page_setup_ = gtk_printer_get_default_page_size(printer_); | 179 page_setup_ = gtk_printer_get_default_page_size(printer_); |
188 } | 180 } |
189 } | 181 } |
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
420 // Printing finished. Matches AddRef() in PrintDocument(); | 412 // Printing finished. Matches AddRef() in PrintDocument(); |
421 Release(); | 413 Release(); |
422 } | 414 } |
423 | 415 |
424 void PrintDialogGtk::InitPrintSettings(const PageRanges& page_ranges, | 416 void PrintDialogGtk::InitPrintSettings(const PageRanges& page_ranges, |
425 PrintSettings* settings) { | 417 PrintSettings* settings) { |
426 printing::PrintSettingsInitializerGtk::InitPrintSettings( | 418 printing::PrintSettingsInitializerGtk::InitPrintSettings( |
427 gtk_settings_, page_setup_, page_ranges, false, settings); | 419 gtk_settings_, page_setup_, page_ranges, false, settings); |
428 context_->InitWithSettings(*settings); | 420 context_->InitWithSettings(*settings); |
429 } | 421 } |
OLD | NEW |