Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(279)

Side by Side Diff: chrome/browser/ui/libgtkui/print_dialog_gtk.cc

Issue 2707313002: Gtk: Change NULL to nullptr (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 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/ui/libgtkui/print_dialog_gtk.h" 5 #include "chrome/browser/ui/libgtkui/print_dialog_gtk.h"
6 6
7 #include <gtk/gtkunixprint.h> 7 #include <gtk/gtkunixprint.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <cmath> 10 #include <cmath>
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 std::abs(paper_size_microns.height() - media.size_microns.height())); 65 std::abs(paper_size_microns.height() - media.size_microns.height()));
66 if (fuzzy_match) { 66 if (fuzzy_match) {
67 return diff <= kPaperSizeTresholdMicrons; 67 return diff <= kPaperSizeTresholdMicrons;
68 } 68 }
69 return !media.vendor_id.empty() && 69 return !media.vendor_id.empty() &&
70 media.vendor_id == gtk_paper_size_get_ppd_name(gtk_paper_size) && 70 media.vendor_id == gtk_paper_size_get_ppd_name(gtk_paper_size) &&
71 diff <= kPaperSizeTresholdMicrons; 71 diff <= kPaperSizeTresholdMicrons;
72 } 72 }
73 73
74 // Looks up a paper size matching (in terms of PaperSizeMatch) the user selected 74 // Looks up a paper size matching (in terms of PaperSizeMatch) the user selected
75 // media in the paper size list reported by GTK. Returns NULL if there's no 75 // media in the paper size list reported by GTK. Returns nullptr if there's no
76 // match found. 76 // match found.
77 GtkPaperSize* FindPaperSizeMatch(GList* gtk_paper_sizes, 77 GtkPaperSize* FindPaperSizeMatch(GList* gtk_paper_sizes,
78 const PrintSettings::RequestedMedia& media) { 78 const PrintSettings::RequestedMedia& media) {
79 GtkPaperSize* first_fuzzy_match = NULL; 79 GtkPaperSize* first_fuzzy_match = nullptr;
80 for (GList* p = gtk_paper_sizes; p && p->data; p = g_list_next(p)) { 80 for (GList* p = gtk_paper_sizes; p && p->data; p = g_list_next(p)) {
81 GtkPaperSize* gtk_paper_size = static_cast<GtkPaperSize*>(p->data); 81 GtkPaperSize* gtk_paper_size = static_cast<GtkPaperSize*>(p->data);
82 if (PaperSizeMatch(gtk_paper_size, media, false)) { 82 if (PaperSizeMatch(gtk_paper_size, media, false)) {
83 return gtk_paper_size; 83 return gtk_paper_size;
84 } 84 }
85 if (!first_fuzzy_match && PaperSizeMatch(gtk_paper_size, media, true)) { 85 if (!first_fuzzy_match && PaperSizeMatch(gtk_paper_size, media, true)) {
86 first_fuzzy_match = gtk_paper_size; 86 first_fuzzy_match = gtk_paper_size;
87 } 87 }
88 } 88 }
89 return first_fuzzy_match; 89 return first_fuzzy_match;
(...skipping 19 matching lines...) Expand all
109 109
110 DISALLOW_COPY_AND_ASSIGN(StickyPrintSettingGtk); 110 DISALLOW_COPY_AND_ASSIGN(StickyPrintSettingGtk);
111 }; 111 };
112 112
113 base::LazyInstance<StickyPrintSettingGtk>::Leaky g_last_used_settings = 113 base::LazyInstance<StickyPrintSettingGtk>::Leaky g_last_used_settings =
114 LAZY_INSTANCE_INITIALIZER; 114 LAZY_INSTANCE_INITIALIZER;
115 115
116 // Helper class to track GTK printers. 116 // Helper class to track GTK printers.
117 class GtkPrinterList { 117 class GtkPrinterList {
118 public: 118 public:
119 GtkPrinterList() : default_printer_(NULL) { 119 GtkPrinterList() : default_printer_(nullptr) {
120 gtk_enumerate_printers(SetPrinter, this, NULL, TRUE); 120 gtk_enumerate_printers(SetPrinter, this, nullptr, TRUE);
121 } 121 }
122 122
123 ~GtkPrinterList() { 123 ~GtkPrinterList() {
124 for (std::vector<GtkPrinter*>::iterator it = printers_.begin(); 124 for (std::vector<GtkPrinter*>::iterator it = printers_.begin();
125 it < printers_.end(); ++it) { 125 it < printers_.end(); ++it) {
126 g_object_unref(*it); 126 g_object_unref(*it);
127 } 127 }
128 } 128 }
129 129
130 // Can return NULL if there's no default printer. E.g. Printer on a laptop 130 // Can return nullptr if there's no default printer. E.g. Printer on a laptop
131 // is "home_printer", but the laptop is at work. 131 // is "home_printer", but the laptop is at work.
132 GtkPrinter* default_printer() { return default_printer_; } 132 GtkPrinter* default_printer() { return default_printer_; }
133 133
134 // Can return NULL if the printer cannot be found due to: 134 // Can return nullptr if the printer cannot be found due to:
135 // - Printer list out of sync with printer dialog UI. 135 // - Printer list out of sync with printer dialog UI.
136 // - Querying for non-existant printers like 'Print to PDF'. 136 // - Querying for non-existant printers like 'Print to PDF'.
137 GtkPrinter* GetPrinterWithName(const std::string& name) { 137 GtkPrinter* GetPrinterWithName(const std::string& name) {
138 if (name.empty()) 138 if (name.empty())
139 return NULL; 139 return nullptr;
140 140
141 for (std::vector<GtkPrinter*>::iterator it = printers_.begin(); 141 for (std::vector<GtkPrinter*>::iterator it = printers_.begin();
142 it < printers_.end(); ++it) { 142 it < printers_.end(); ++it) {
143 if (gtk_printer_get_name(*it) == name) { 143 if (gtk_printer_get_name(*it) == name) {
144 return *it; 144 return *it;
145 } 145 }
146 } 146 }
147 147
148 return NULL; 148 return nullptr;
149 } 149 }
150 150
151 private: 151 private:
152 // Callback function used by gtk_enumerate_printers() to get all printer. 152 // Callback function used by gtk_enumerate_printers() to get all printer.
153 static gboolean SetPrinter(GtkPrinter* printer, gpointer data) { 153 static gboolean SetPrinter(GtkPrinter* printer, gpointer data) {
154 GtkPrinterList* printer_list = reinterpret_cast<GtkPrinterList*>(data); 154 GtkPrinterList* printer_list = reinterpret_cast<GtkPrinterList*>(data);
155 if (gtk_printer_is_default(printer)) 155 if (gtk_printer_is_default(printer))
156 printer_list->default_printer_ = printer; 156 printer_list->default_printer_ = printer;
157 157
158 g_object_ref(printer); 158 g_object_ref(printer);
(...skipping 10 matching lines...) Expand all
169 169
170 // static 170 // static
171 printing::PrintDialogGtkInterface* PrintDialogGtk2::CreatePrintDialog( 171 printing::PrintDialogGtkInterface* PrintDialogGtk2::CreatePrintDialog(
172 PrintingContextLinux* context) { 172 PrintingContextLinux* context) {
173 DCHECK_CURRENTLY_ON(BrowserThread::UI); 173 DCHECK_CURRENTLY_ON(BrowserThread::UI);
174 return new PrintDialogGtk2(context); 174 return new PrintDialogGtk2(context);
175 } 175 }
176 176
177 PrintDialogGtk2::PrintDialogGtk2(PrintingContextLinux* context) 177 PrintDialogGtk2::PrintDialogGtk2(PrintingContextLinux* context)
178 : context_(context), 178 : context_(context),
179 dialog_(NULL), 179 dialog_(nullptr),
180 gtk_settings_(NULL), 180 gtk_settings_(nullptr),
181 page_setup_(NULL), 181 page_setup_(nullptr),
182 printer_(NULL) {} 182 printer_(nullptr) {}
183 183
184 PrintDialogGtk2::~PrintDialogGtk2() { 184 PrintDialogGtk2::~PrintDialogGtk2() {
185 DCHECK_CURRENTLY_ON(BrowserThread::UI); 185 DCHECK_CURRENTLY_ON(BrowserThread::UI);
186 186
187 if (dialog_) { 187 if (dialog_) {
188 aura::Window* parent = libgtkui::GetAuraTransientParent(dialog_); 188 aura::Window* parent = libgtkui::GetAuraTransientParent(dialog_);
189 if (parent) { 189 if (parent) {
190 parent->RemoveObserver(this); 190 parent->RemoveObserver(this);
191 libgtkui::ClearAuraTransientParent(dialog_); 191 libgtkui::ClearAuraTransientParent(dialog_);
192 } 192 }
193 gtk_widget_destroy(dialog_); 193 gtk_widget_destroy(dialog_);
194 dialog_ = NULL; 194 dialog_ = nullptr;
195 } 195 }
196 if (gtk_settings_) { 196 if (gtk_settings_) {
197 g_object_unref(gtk_settings_); 197 g_object_unref(gtk_settings_);
198 gtk_settings_ = NULL; 198 gtk_settings_ = nullptr;
199 } 199 }
200 if (page_setup_) { 200 if (page_setup_) {
201 g_object_unref(page_setup_); 201 g_object_unref(page_setup_);
202 page_setup_ = NULL; 202 page_setup_ = nullptr;
203 } 203 }
204 if (printer_) { 204 if (printer_) {
205 g_object_unref(printer_); 205 g_object_unref(printer_);
206 printer_ = NULL; 206 printer_ = nullptr;
207 } 207 }
208 } 208 }
209 209
210 void PrintDialogGtk2::UseDefaultSettings() { 210 void PrintDialogGtk2::UseDefaultSettings() {
211 DCHECK(!page_setup_); 211 DCHECK(!page_setup_);
212 DCHECK(!printer_); 212 DCHECK(!printer_);
213 213
214 // |gtk_settings_| is a new copy. 214 // |gtk_settings_| is a new copy.
215 gtk_settings_ = 215 gtk_settings_ =
216 gtk_print_settings_copy(g_last_used_settings.Get().settings()); 216 gtk_print_settings_copy(g_last_used_settings.Get().settings());
(...skipping 26 matching lines...) Expand all
243 243
244 #if defined(USE_CUPS) 244 #if defined(USE_CUPS)
245 std::string color_value; 245 std::string color_value;
246 std::string color_setting_name; 246 std::string color_setting_name;
247 printing::GetColorModelForMode(settings->color(), &color_setting_name, 247 printing::GetColorModelForMode(settings->color(), &color_setting_name,
248 &color_value); 248 &color_value);
249 gtk_print_settings_set(gtk_settings_, color_setting_name.c_str(), 249 gtk_print_settings_set(gtk_settings_, color_setting_name.c_str(),
250 color_value.c_str()); 250 color_value.c_str());
251 251
252 if (settings->duplex_mode() != printing::UNKNOWN_DUPLEX_MODE) { 252 if (settings->duplex_mode() != printing::UNKNOWN_DUPLEX_MODE) {
253 const char* cups_duplex_mode = NULL; 253 const char* cups_duplex_mode = nullptr;
254 switch (settings->duplex_mode()) { 254 switch (settings->duplex_mode()) {
255 case printing::LONG_EDGE: 255 case printing::LONG_EDGE:
256 cups_duplex_mode = kDuplexNoTumble; 256 cups_duplex_mode = kDuplexNoTumble;
257 break; 257 break;
258 case printing::SHORT_EDGE: 258 case printing::SHORT_EDGE:
259 cups_duplex_mode = kDuplexTumble; 259 cups_duplex_mode = kDuplexTumble;
260 break; 260 break;
261 case printing::SIMPLEX: 261 case printing::SIMPLEX:
262 cups_duplex_mode = kDuplexNone; 262 cups_duplex_mode = kDuplexNone;
263 break; 263 break;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 requested_media.size_microns.height() / kMicronsInMm, 295 requested_media.size_microns.height() / kMicronsInMm,
296 GTK_UNIT_MM); 296 GTK_UNIT_MM);
297 gtk_page_setup_set_paper_size(page_setup_, custom_size); 297 gtk_page_setup_set_paper_size(page_setup_, custom_size);
298 gtk_paper_size_free(custom_size); 298 gtk_paper_size_free(custom_size);
299 } 299 }
300 #if GTK_CHECK_VERSION(2, 28, 0) 300 #if GTK_CHECK_VERSION(2, 28, 0)
301 g_list_free_full(gtk_paper_sizes, 301 g_list_free_full(gtk_paper_sizes,
302 reinterpret_cast<GDestroyNotify>(gtk_paper_size_free)); 302 reinterpret_cast<GDestroyNotify>(gtk_paper_size_free));
303 #else 303 #else
304 g_list_foreach(gtk_paper_sizes, 304 g_list_foreach(gtk_paper_sizes,
305 reinterpret_cast<GFunc>(gtk_paper_size_free), NULL); 305 reinterpret_cast<GFunc>(gtk_paper_size_free), nullptr);
306 g_list_free(gtk_paper_sizes); 306 g_list_free(gtk_paper_sizes);
307 #endif 307 #endif
308 } 308 }
309 } else { 309 } else {
310 VLOG(1) << "Using default paper size"; 310 VLOG(1) << "Using default paper size";
311 } 311 }
312 } 312 }
313 313
314 gtk_print_settings_set_orientation( 314 gtk_print_settings_set_orientation(
315 gtk_settings_, settings->landscape() ? GTK_PAGE_ORIENTATION_LANDSCAPE 315 gtk_settings_, settings->landscape() ? GTK_PAGE_ORIENTATION_LANDSCAPE
316 : GTK_PAGE_ORIENTATION_PORTRAIT); 316 : GTK_PAGE_ORIENTATION_PORTRAIT);
317 317
318 InitPrintSettings(settings); 318 InitPrintSettings(settings);
319 return true; 319 return true;
320 } 320 }
321 321
322 void PrintDialogGtk2::ShowDialog( 322 void PrintDialogGtk2::ShowDialog(
323 gfx::NativeView parent_view, 323 gfx::NativeView parent_view,
324 bool has_selection, 324 bool has_selection,
325 const PrintingContextLinux::PrintSettingsCallback& callback) { 325 const PrintingContextLinux::PrintSettingsCallback& callback) {
326 callback_ = callback; 326 callback_ = callback;
327 DCHECK(!callback_.is_null()); 327 DCHECK(!callback_.is_null());
328 328
329 dialog_ = gtk_print_unix_dialog_new(NULL, NULL); 329 dialog_ = gtk_print_unix_dialog_new(nullptr, nullptr);
330 libgtkui::SetGtkTransientForAura(dialog_, parent_view); 330 libgtkui::SetGtkTransientForAura(dialog_, parent_view);
331 if (parent_view) 331 if (parent_view)
332 parent_view->AddObserver(this); 332 parent_view->AddObserver(this);
333 g_signal_connect(dialog_, "delete-event", 333 g_signal_connect(dialog_, "delete-event",
334 G_CALLBACK(gtk_widget_hide_on_delete), NULL); 334 G_CALLBACK(gtk_widget_hide_on_delete), nullptr);
335 335
336 // Handle the case when the existing |gtk_settings_| has "selection" selected 336 // Handle the case when the existing |gtk_settings_| has "selection" selected
337 // as the page range, but |has_selection| is false. 337 // as the page range, but |has_selection| is false.
338 if (!has_selection) { 338 if (!has_selection) {
339 GtkPrintPages range = gtk_print_settings_get_print_pages(gtk_settings_); 339 GtkPrintPages range = gtk_print_settings_get_print_pages(gtk_settings_);
340 if (range == GTK_PRINT_PAGES_SELECTION) 340 if (range == GTK_PRINT_PAGES_SELECTION)
341 gtk_print_settings_set_print_pages(gtk_settings_, GTK_PRINT_PAGES_ALL); 341 gtk_print_settings_set_print_pages(gtk_settings_, GTK_PRINT_PAGES_ALL);
342 } 342 }
343 343
344 // Set modal so user cannot focus the same tab and press print again. 344 // Set modal so user cannot focus the same tab and press print again.
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
497 #else 497 #else
498 const GError* error 498 const GError* error
499 #endif 499 #endif
500 ) { 500 ) {
501 static_cast<PrintDialogGtk2*>(user_data)->OnJobCompleted(print_job, error); 501 static_cast<PrintDialogGtk2*>(user_data)->OnJobCompleted(print_job, error);
502 } 502 }
503 void PrintDialogGtk2::SendDocumentToPrinter( 503 void PrintDialogGtk2::SendDocumentToPrinter(
504 const base::string16& document_name) { 504 const base::string16& document_name) {
505 DCHECK_CURRENTLY_ON(BrowserThread::UI); 505 DCHECK_CURRENTLY_ON(BrowserThread::UI);
506 506
507 // If |printer_| is NULL then somehow the GTK printer list changed out under 507 // If |printer_| is nullptr then somehow the GTK printer list changed out
508 // us. In which case, just bail out. 508 // under us. In which case, just bail out.
509 if (!printer_) { 509 if (!printer_) {
510 // Matches AddRef() in PrintDocument(); 510 // Matches AddRef() in PrintDocument();
511 Release(); 511 Release();
512 return; 512 return;
513 } 513 }
514 514
515 // Save the settings for next time. 515 // Save the settings for next time.
516 g_last_used_settings.Get().SetLastUsedSettings(gtk_settings_); 516 g_last_used_settings.Get().SetLastUsedSettings(gtk_settings_);
517 517
518 GtkPrintJob* print_job = 518 GtkPrintJob* print_job =
519 gtk_print_job_new(base::UTF16ToUTF8(document_name).c_str(), printer_, 519 gtk_print_job_new(base::UTF16ToUTF8(document_name).c_str(), printer_,
520 gtk_settings_, page_setup_); 520 gtk_settings_, page_setup_);
521 gtk_print_job_set_source_file(print_job, path_to_pdf_.value().c_str(), NULL); 521 gtk_print_job_set_source_file(print_job, path_to_pdf_.value().c_str(),
522 gtk_print_job_send(print_job, OnJobCompletedThunk, this, NULL); 522 nullptr);
523 gtk_print_job_send(print_job, OnJobCompletedThunk, this, nullptr);
523 } 524 }
524 525
525 void PrintDialogGtk2::OnJobCompleted(GtkPrintJob* print_job, 526 void PrintDialogGtk2::OnJobCompleted(GtkPrintJob* print_job,
526 const GError* error) { 527 const GError* error) {
527 if (error) 528 if (error)
528 LOG(ERROR) << "Printing failed: " << error->message; 529 LOG(ERROR) << "Printing failed: " << error->message;
529 if (print_job) 530 if (print_job)
530 g_object_unref(print_job); 531 g_object_unref(print_job);
531 BrowserThread::PostTask( 532 BrowserThread::PostTask(
532 BrowserThread::FILE, FROM_HERE, 533 BrowserThread::FILE, FROM_HERE,
(...skipping 10 matching lines...) Expand all
543 void PrintDialogGtk2::OnWindowDestroying(aura::Window* window) { 544 void PrintDialogGtk2::OnWindowDestroying(aura::Window* window) {
544 DCHECK_EQ(libgtkui::GetAuraTransientParent(dialog_), window); 545 DCHECK_EQ(libgtkui::GetAuraTransientParent(dialog_), window);
545 546
546 libgtkui::ClearAuraTransientParent(dialog_); 547 libgtkui::ClearAuraTransientParent(dialog_);
547 window->RemoveObserver(this); 548 window->RemoveObserver(this);
548 if (!callback_.is_null()) { 549 if (!callback_.is_null()) {
549 callback_.Run(PrintingContextLinux::CANCEL); 550 callback_.Run(PrintingContextLinux::CANCEL);
550 callback_.Reset(); 551 callback_.Reset();
551 } 552 }
552 } 553 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/libgtkui/native_theme_gtk3.cc ('k') | chrome/browser/ui/libgtkui/select_file_dialog_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698