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

Side by Side Diff: chrome/browser/ui/libgtkui/select_file_dialog_impl_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 (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/ui/libgtkui/select_file_dialog_impl_gtk.h" 5 #include "chrome/browser/ui/libgtkui/select_file_dialog_impl_gtk.h"
6 6
7 #include <gdk/gdkx.h> 7 #include <gdk/gdkx.h>
8 #include <gtk/gtk.h> 8 #include <gtk/gtk.h>
9 #include <stddef.h> 9 #include <stddef.h>
10 #include <sys/stat.h> 10 #include <sys/stat.h>
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 static const int kPreviewHeight = 512; 69 static const int kPreviewHeight = 512;
70 70
71 SelectFileDialogImpl* SelectFileDialogImpl::NewSelectFileDialogImplGTK( 71 SelectFileDialogImpl* SelectFileDialogImpl::NewSelectFileDialogImplGTK(
72 Listener* listener, 72 Listener* listener,
73 ui::SelectFilePolicy* policy) { 73 ui::SelectFilePolicy* policy) {
74 return new SelectFileDialogImplGTK(listener, policy); 74 return new SelectFileDialogImplGTK(listener, policy);
75 } 75 }
76 76
77 SelectFileDialogImplGTK::SelectFileDialogImplGTK(Listener* listener, 77 SelectFileDialogImplGTK::SelectFileDialogImplGTK(Listener* listener,
78 ui::SelectFilePolicy* policy) 78 ui::SelectFilePolicy* policy)
79 : SelectFileDialogImpl(listener, policy), preview_(NULL) {} 79 : SelectFileDialogImpl(listener, policy), preview_(nullptr) {}
80 80
81 SelectFileDialogImplGTK::~SelectFileDialogImplGTK() { 81 SelectFileDialogImplGTK::~SelectFileDialogImplGTK() {
82 for (std::set<aura::Window*>::iterator iter = parents_.begin(); 82 for (std::set<aura::Window*>::iterator iter = parents_.begin();
83 iter != parents_.end(); ++iter) { 83 iter != parents_.end(); ++iter) {
84 (*iter)->RemoveObserver(this); 84 (*iter)->RemoveObserver(this);
85 } 85 }
86 while (dialogs_.begin() != dialogs_.end()) { 86 while (dialogs_.begin() != dialogs_.end()) {
87 gtk_widget_destroy(*(dialogs_.begin())); 87 gtk_widget_destroy(*(dialogs_.begin()));
88 } 88 }
89 } 89 }
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 owning_window->AddObserver(this); 127 owning_window->AddObserver(this);
128 parents_.insert(owning_window); 128 parents_.insert(owning_window);
129 } 129 }
130 130
131 std::string title_string = base::UTF16ToUTF8(title); 131 std::string title_string = base::UTF16ToUTF8(title);
132 132
133 file_type_index_ = file_type_index; 133 file_type_index_ = file_type_index;
134 if (file_types) 134 if (file_types)
135 file_types_ = *file_types; 135 file_types_ = *file_types;
136 136
137 GtkWidget* dialog = NULL; 137 GtkWidget* dialog = nullptr;
138 switch (type) { 138 switch (type) {
139 case SELECT_FOLDER: 139 case SELECT_FOLDER:
140 case SELECT_UPLOAD_FOLDER: 140 case SELECT_UPLOAD_FOLDER:
141 dialog = CreateSelectFolderDialog(type, title_string, default_path, 141 dialog = CreateSelectFolderDialog(type, title_string, default_path,
142 owning_window); 142 owning_window);
143 break; 143 break;
144 case SELECT_OPEN_FILE: 144 case SELECT_OPEN_FILE:
145 dialog = CreateFileOpenDialog(title_string, default_path, owning_window); 145 dialog = CreateFileOpenDialog(title_string, default_path, owning_window);
146 break; 146 break;
147 case SELECT_OPEN_MULTI_FILE: 147 case SELECT_OPEN_MULTI_FILE:
148 dialog = 148 dialog =
149 CreateMultiFileOpenDialog(title_string, default_path, owning_window); 149 CreateMultiFileOpenDialog(title_string, default_path, owning_window);
150 break; 150 break;
151 case SELECT_SAVEAS_FILE: 151 case SELECT_SAVEAS_FILE:
152 dialog = CreateSaveAsDialog(title_string, default_path, owning_window); 152 dialog = CreateSaveAsDialog(title_string, default_path, owning_window);
153 break; 153 break;
154 default: 154 default:
155 NOTREACHED(); 155 NOTREACHED();
156 return; 156 return;
157 } 157 }
158 g_signal_connect(dialog, "delete-event", 158 g_signal_connect(dialog, "delete-event",
159 G_CALLBACK(gtk_widget_hide_on_delete), NULL); 159 G_CALLBACK(gtk_widget_hide_on_delete), nullptr);
160 dialogs_.insert(dialog); 160 dialogs_.insert(dialog);
161 161
162 preview_ = gtk_image_new(); 162 preview_ = gtk_image_new();
163 g_signal_connect(dialog, "destroy", G_CALLBACK(OnFileChooserDestroyThunk), 163 g_signal_connect(dialog, "destroy", G_CALLBACK(OnFileChooserDestroyThunk),
164 this); 164 this);
165 g_signal_connect(dialog, "update-preview", G_CALLBACK(OnUpdatePreviewThunk), 165 g_signal_connect(dialog, "update-preview", G_CALLBACK(OnUpdatePreviewThunk),
166 this); 166 this);
167 gtk_file_chooser_set_preview_widget(GTK_FILE_CHOOSER(dialog), preview_); 167 gtk_file_chooser_set_preview_widget(GTK_FILE_CHOOSER(dialog), preview_);
168 168
169 params_map_[dialog] = params; 169 params_map_[dialog] = params;
(...skipping 20 matching lines...) Expand all
190 gtk_widget_show_all(dialog); 190 gtk_widget_show_all(dialog);
191 191
192 // We need to call gtk_window_present after making the widgets visible to make 192 // We need to call gtk_window_present after making the widgets visible to make
193 // sure window gets correctly raised and gets focus. 193 // sure window gets correctly raised and gets focus.
194 gtk_window_present_with_time( 194 gtk_window_present_with_time(
195 GTK_WINDOW(dialog), ui::X11EventSource::GetInstance()->GetTimestamp()); 195 GTK_WINDOW(dialog), ui::X11EventSource::GetInstance()->GetTimestamp());
196 } 196 }
197 197
198 void SelectFileDialogImplGTK::AddFilters(GtkFileChooser* chooser) { 198 void SelectFileDialogImplGTK::AddFilters(GtkFileChooser* chooser) {
199 for (size_t i = 0; i < file_types_.extensions.size(); ++i) { 199 for (size_t i = 0; i < file_types_.extensions.size(); ++i) {
200 GtkFileFilter* filter = NULL; 200 GtkFileFilter* filter = nullptr;
201 std::set<std::string> fallback_labels; 201 std::set<std::string> fallback_labels;
202 202
203 for (size_t j = 0; j < file_types_.extensions[i].size(); ++j) { 203 for (size_t j = 0; j < file_types_.extensions[i].size(); ++j) {
204 const std::string& current_extension = file_types_.extensions[i][j]; 204 const std::string& current_extension = file_types_.extensions[i][j];
205 if (!current_extension.empty()) { 205 if (!current_extension.empty()) {
206 if (!filter) 206 if (!filter)
207 filter = gtk_file_filter_new(); 207 filter = gtk_file_filter_new();
208 std::unique_ptr<std::string> file_extension( 208 std::unique_ptr<std::string> file_extension(
209 new std::string("." + current_extension)); 209 new std::string("." + current_extension));
210 fallback_labels.insert(std::string("*").append(*file_extension)); 210 fallback_labels.insert(std::string("*").append(*file_extension));
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 if (listener_) 289 if (listener_)
290 listener_->FileSelectionCanceled(params); 290 listener_->FileSelectionCanceled(params);
291 gtk_widget_destroy(dialog); 291 gtk_widget_destroy(dialog);
292 } 292 }
293 293
294 GtkWidget* SelectFileDialogImplGTK::CreateFileOpenHelper( 294 GtkWidget* SelectFileDialogImplGTK::CreateFileOpenHelper(
295 const std::string& title, 295 const std::string& title,
296 const base::FilePath& default_path, 296 const base::FilePath& default_path,
297 gfx::NativeWindow parent) { 297 gfx::NativeWindow parent) {
298 GtkWidget* dialog = gtk_file_chooser_dialog_new( 298 GtkWidget* dialog = gtk_file_chooser_dialog_new(
299 title.c_str(), NULL, GTK_FILE_CHOOSER_ACTION_OPEN, "_Cancel", 299 title.c_str(), nullptr, GTK_FILE_CHOOSER_ACTION_OPEN, "_Cancel",
300 GTK_RESPONSE_CANCEL, "_Open", GTK_RESPONSE_ACCEPT, nullptr); 300 GTK_RESPONSE_CANCEL, "_Open", GTK_RESPONSE_ACCEPT, nullptr);
301 SetGtkTransientForAura(dialog, parent); 301 SetGtkTransientForAura(dialog, parent);
302 AddFilters(GTK_FILE_CHOOSER(dialog)); 302 AddFilters(GTK_FILE_CHOOSER(dialog));
303 303
304 if (!default_path.empty()) { 304 if (!default_path.empty()) {
305 if (CallDirectoryExistsOnUIThread(default_path)) { 305 if (CallDirectoryExistsOnUIThread(default_path)) {
306 gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), 306 gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),
307 default_path.value().c_str()); 307 default_path.value().c_str());
308 } else { 308 } else {
309 // If the file doesn't exist, this will just switch to the correct 309 // If the file doesn't exist, this will just switch to the correct
(...skipping 20 matching lines...) Expand all
330 ? l10n_util::GetStringUTF8(IDS_SELECT_UPLOAD_FOLDER_DIALOG_TITLE) 330 ? l10n_util::GetStringUTF8(IDS_SELECT_UPLOAD_FOLDER_DIALOG_TITLE)
331 : l10n_util::GetStringUTF8(IDS_SELECT_FOLDER_DIALOG_TITLE); 331 : l10n_util::GetStringUTF8(IDS_SELECT_FOLDER_DIALOG_TITLE);
332 } 332 }
333 std::string accept_button_label = 333 std::string accept_button_label =
334 (type == SELECT_UPLOAD_FOLDER) 334 (type == SELECT_UPLOAD_FOLDER)
335 ? l10n_util::GetStringUTF8( 335 ? l10n_util::GetStringUTF8(
336 IDS_SELECT_UPLOAD_FOLDER_DIALOG_UPLOAD_BUTTON) 336 IDS_SELECT_UPLOAD_FOLDER_DIALOG_UPLOAD_BUTTON)
337 : "_Open"; 337 : "_Open";
338 338
339 GtkWidget* dialog = gtk_file_chooser_dialog_new( 339 GtkWidget* dialog = gtk_file_chooser_dialog_new(
340 title_string.c_str(), NULL, GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, 340 title_string.c_str(), nullptr, GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
341 "_Cancel", GTK_RESPONSE_CANCEL, accept_button_label.c_str(), 341 "_Cancel", GTK_RESPONSE_CANCEL, accept_button_label.c_str(),
342 GTK_RESPONSE_ACCEPT, nullptr); 342 GTK_RESPONSE_ACCEPT, nullptr);
343 SetGtkTransientForAura(dialog, parent); 343 SetGtkTransientForAura(dialog, parent);
344 344
345 if (!default_path.empty()) { 345 if (!default_path.empty()) {
346 gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), 346 gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog),
347 default_path.value().c_str()); 347 default_path.value().c_str());
348 } else if (!last_opened_path_->empty()) { 348 } else if (!last_opened_path_->empty()) {
349 gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), 349 gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),
350 last_opened_path_->value().c_str()); 350 last_opened_path_->value().c_str());
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 387
388 GtkWidget* SelectFileDialogImplGTK::CreateSaveAsDialog( 388 GtkWidget* SelectFileDialogImplGTK::CreateSaveAsDialog(
389 const std::string& title, 389 const std::string& title,
390 const base::FilePath& default_path, 390 const base::FilePath& default_path,
391 gfx::NativeWindow parent) { 391 gfx::NativeWindow parent) {
392 std::string title_string = 392 std::string title_string =
393 !title.empty() ? title 393 !title.empty() ? title
394 : l10n_util::GetStringUTF8(IDS_SAVE_AS_DIALOG_TITLE); 394 : l10n_util::GetStringUTF8(IDS_SAVE_AS_DIALOG_TITLE);
395 395
396 GtkWidget* dialog = gtk_file_chooser_dialog_new( 396 GtkWidget* dialog = gtk_file_chooser_dialog_new(
397 title_string.c_str(), NULL, GTK_FILE_CHOOSER_ACTION_SAVE, "_Cancel", 397 title_string.c_str(), nullptr, GTK_FILE_CHOOSER_ACTION_SAVE, "_Cancel",
398 GTK_RESPONSE_CANCEL, "_Save", GTK_RESPONSE_ACCEPT, nullptr); 398 GTK_RESPONSE_CANCEL, "_Save", GTK_RESPONSE_ACCEPT, nullptr);
399 SetGtkTransientForAura(dialog, parent); 399 SetGtkTransientForAura(dialog, parent);
400 400
401 AddFilters(GTK_FILE_CHOOSER(dialog)); 401 AddFilters(GTK_FILE_CHOOSER(dialog));
402 if (!default_path.empty()) { 402 if (!default_path.empty()) {
403 if (CallDirectoryExistsOnUIThread(default_path)) { 403 if (CallDirectoryExistsOnUIThread(default_path)) {
404 // If this is an existing directory, navigate to that directory, with no 404 // If this is an existing directory, navigate to that directory, with no
405 // filename. 405 // filename.
406 gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), 406 gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),
407 default_path.value().c_str()); 407 default_path.value().c_str());
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
491 return; 491 return;
492 } 492 }
493 493
494 GSList* filenames = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(dialog)); 494 GSList* filenames = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(dialog));
495 if (!filenames) { 495 if (!filenames) {
496 FileNotSelected(dialog); 496 FileNotSelected(dialog);
497 return; 497 return;
498 } 498 }
499 499
500 std::vector<base::FilePath> filenames_fp; 500 std::vector<base::FilePath> filenames_fp;
501 for (GSList* iter = filenames; iter != NULL; iter = g_slist_next(iter)) { 501 for (GSList* iter = filenames; iter != nullptr; iter = g_slist_next(iter)) {
502 base::FilePath path(static_cast<char*>(iter->data)); 502 base::FilePath path(static_cast<char*>(iter->data));
503 g_free(iter->data); 503 g_free(iter->data);
504 if (CallDirectoryExistsOnUIThread(path)) 504 if (CallDirectoryExistsOnUIThread(path))
505 continue; 505 continue;
506 filenames_fp.push_back(path); 506 filenames_fp.push_back(path);
507 } 507 }
508 g_slist_free(filenames); 508 g_slist_free(filenames);
509 509
510 if (filenames_fp.empty()) { 510 if (filenames_fp.empty()) {
511 FileNotSelected(dialog); 511 FileNotSelected(dialog);
512 return; 512 return;
513 } 513 }
514 MultiFilesSelected(dialog, filenames_fp); 514 MultiFilesSelected(dialog, filenames_fp);
515 } 515 }
516 516
517 void SelectFileDialogImplGTK::OnFileChooserDestroy(GtkWidget* dialog) { 517 void SelectFileDialogImplGTK::OnFileChooserDestroy(GtkWidget* dialog) {
518 dialogs_.erase(dialog); 518 dialogs_.erase(dialog);
519 519
520 // |parent| can be NULL when closing the host window 520 // |parent| can be nullptr when closing the host window
521 // while opening the file-picker. 521 // while opening the file-picker.
522 aura::Window* parent = GetAuraTransientParent(dialog); 522 aura::Window* parent = GetAuraTransientParent(dialog);
523 if (!parent) 523 if (!parent)
524 return; 524 return;
525 std::set<aura::Window*>::iterator iter = parents_.find(parent); 525 std::set<aura::Window*>::iterator iter = parents_.find(parent);
526 if (iter != parents_.end()) { 526 if (iter != parents_.end()) {
527 (*iter)->RemoveObserver(this); 527 (*iter)->RemoveObserver(this);
528 parents_.erase(iter); 528 parents_.erase(iter);
529 } else { 529 } else {
530 NOTREACHED(); 530 NOTREACHED();
(...skipping 14 matching lines...) Expand all
545 struct stat stat_buf; 545 struct stat stat_buf;
546 if (stat(filename, &stat_buf) != 0 || !S_ISREG(stat_buf.st_mode)) { 546 if (stat(filename, &stat_buf) != 0 || !S_ISREG(stat_buf.st_mode)) {
547 g_free(filename); 547 g_free(filename);
548 gtk_file_chooser_set_preview_widget_active(GTK_FILE_CHOOSER(chooser), 548 gtk_file_chooser_set_preview_widget_active(GTK_FILE_CHOOSER(chooser),
549 FALSE); 549 FALSE);
550 return; 550 return;
551 } 551 }
552 552
553 // This will preserve the image's aspect ratio. 553 // This will preserve the image's aspect ratio.
554 GdkPixbuf* pixbuf = gdk_pixbuf_new_from_file_at_size(filename, kPreviewWidth, 554 GdkPixbuf* pixbuf = gdk_pixbuf_new_from_file_at_size(filename, kPreviewWidth,
555 kPreviewHeight, NULL); 555 kPreviewHeight, nullptr);
556 g_free(filename); 556 g_free(filename);
557 if (pixbuf) { 557 if (pixbuf) {
558 gtk_image_set_from_pixbuf(GTK_IMAGE(preview_), pixbuf); 558 gtk_image_set_from_pixbuf(GTK_IMAGE(preview_), pixbuf);
559 g_object_unref(pixbuf); 559 g_object_unref(pixbuf);
560 } 560 }
561 gtk_file_chooser_set_preview_widget_active(GTK_FILE_CHOOSER(chooser), 561 gtk_file_chooser_set_preview_widget_active(GTK_FILE_CHOOSER(chooser),
562 pixbuf ? TRUE : FALSE); 562 pixbuf ? TRUE : FALSE);
563 } 563 }
564 564
565 } // namespace libgtkui 565 } // namespace libgtkui
OLDNEW
« no previous file with comments | « chrome/browser/ui/libgtkui/select_file_dialog_impl.cc ('k') | chrome/browser/ui/libgtkui/skia_utils_gtk.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698