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

Unified Diff: chrome/browser/ui/libgtk2ui/select_file_dialog_impl_gtk2.h

Issue 1363093004: Add BrowserSelectFileDialogTest.OpenCloseFileDialog (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: do not run the test-server Created 5 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/libgtk2ui/select_file_dialog_impl_gtk2.h
diff --git a/chrome/browser/ui/libgtk2ui/select_file_dialog_impl_gtk2.h b/chrome/browser/ui/libgtk2ui/select_file_dialog_impl_gtk2.h
new file mode 100644
index 0000000000000000000000000000000000000000..c034207d76125f62da0d691e4a7ff3454fe139ac
--- /dev/null
+++ b/chrome/browser/ui/libgtk2ui/select_file_dialog_impl_gtk2.h
@@ -0,0 +1,134 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_LIBGTK2UI_SELECT_FILE_DIALOG_IMPL_GTK2_H_
+#define CHROME_BROWSER_UI_LIBGTK2UI_SELECT_FILE_DIALOG_IMPL_GTK2_H_
+
+#include "base/macros.h"
+#include "chrome/browser/ui/libgtk2ui/gtk2_signal.h"
+#include "chrome/browser/ui/libgtk2ui/gtk2_util.h"
+#include "chrome/browser/ui/libgtk2ui/select_file_dialog_impl.h"
+
+namespace libgtk2ui {
+
+// Implementation of SelectFileDialog that shows a Gtk common dialog for
+// choosing a file or folder. This acts as a modal dialog.
+class SelectFileDialogImplGTK : public SelectFileDialogImpl,
+ public aura::WindowObserver {
+ public:
+ SelectFileDialogImplGTK(Listener* listener,
+ ui::SelectFilePolicy* policy);
+
+ protected:
+ ~SelectFileDialogImplGTK() override;
+
+ // BaseShellDialog implementation:
+ bool IsRunning(gfx::NativeWindow parent_window) const override;
+
+ // SelectFileDialog implementation.
+ // |params| is user data we pass back via the Listener interface.
+ void SelectFileImpl(Type type,
+ const base::string16& title,
+ const base::FilePath& default_path,
+ const FileTypeInfo* file_types,
+ int file_type_index,
+ const base::FilePath::StringType& default_extension,
+ gfx::NativeWindow owning_window,
+ void* params) override;
+
+ private:
+ friend class FilePicker;
+ bool HasMultipleFileTypeChoicesImpl() override;
+
+ // Overridden from aura::WindowObserver:
+ void OnWindowDestroying(aura::Window* window) override;
+
+ // Add the filters from |file_types_| to |chooser|.
+ void AddFilters(GtkFileChooser* chooser);
+
+ // Notifies the listener that a single file was chosen.
+ void FileSelected(GtkWidget* dialog, const base::FilePath& path);
+
+ // Notifies the listener that multiple files were chosen.
+ void MultiFilesSelected(GtkWidget* dialog,
+ const std::vector<base::FilePath>& files);
+
+ // Notifies the listener that no file was chosen (the action was canceled).
+ // Dialog is passed so we can find that |params| pointer that was passed to
+ // us when we were told to show the dialog.
+ void FileNotSelected(GtkWidget* dialog);
+
+ GtkWidget* CreateSelectFolderDialog(
+ Type type,
+ const std::string& title,
+ const base::FilePath& default_path,
+ gfx::NativeWindow parent);
+
+ GtkWidget* CreateFileOpenDialog(const std::string& title,
+ const base::FilePath& default_path, gfx::NativeWindow parent);
+
+ GtkWidget* CreateMultiFileOpenDialog(const std::string& title,
+ const base::FilePath& default_path, gfx::NativeWindow parent);
+
+ GtkWidget* CreateSaveAsDialog(const std::string& title,
+ const base::FilePath& default_path, gfx::NativeWindow parent);
+
+ // Removes and returns the |params| associated with |dialog| from
+ // |params_map_|.
+ void* PopParamsForDialog(GtkWidget* dialog);
+
+ // Take care of internal data structures when a file dialog is destroyed.
+ void FileDialogDestroyed(GtkWidget* dialog);
+
+ // Check whether response_id corresponds to the user cancelling/closing the
+ // dialog. Used as a helper for the below callbacks.
+ bool IsCancelResponse(gint response_id);
+
+ // Common function for OnSelectSingleFileDialogResponse and
+ // OnSelectSingleFolderDialogResponse.
+ void SelectSingleFileHelper(GtkWidget* dialog,
+ gint response_id,
+ bool allow_folder);
+
+ // Common function for CreateFileOpenDialog and CreateMultiFileOpenDialog.
+ GtkWidget* CreateFileOpenHelper(const std::string& title,
+ const base::FilePath& default_path,
+ gfx::NativeWindow parent);
+
+ // Callback for when the user responds to a Save As or Open File dialog.
+ CHROMEGTK_CALLBACK_1(SelectFileDialogImplGTK, void,
+ OnSelectSingleFileDialogResponse, int);
+
+ // Callback for when the user responds to a Select Folder dialog.
+ CHROMEGTK_CALLBACK_1(SelectFileDialogImplGTK, void,
+ OnSelectSingleFolderDialogResponse, int);
+
+ // Callback for when the user responds to a Open Multiple Files dialog.
+ CHROMEGTK_CALLBACK_1(SelectFileDialogImplGTK, void,
+ OnSelectMultiFileDialogResponse, int);
+
+ // Callback for when the file chooser gets destroyed.
+ CHROMEGTK_CALLBACK_0(SelectFileDialogImplGTK, void, OnFileChooserDestroy);
+
+ // Callback for when we update the preview for the selection.
+ CHROMEGTK_CALLBACK_0(SelectFileDialogImplGTK, void, OnUpdatePreview);
+
+ // A map from dialog windows to the |params| user data associated with them.
+ std::map<GtkWidget*, void*> params_map_;
+
+ // The GtkImage widget for showing previews of selected images.
+ GtkWidget* preview_;
+
+ // All our dialogs.
+ std::set<GtkWidget*> dialogs_;
+
+ // The set of all parent windows for which we are currently running dialogs.
+ std::set<aura::Window*> parents_;
+
+ DISALLOW_COPY_AND_ASSIGN(SelectFileDialogImplGTK);
+};
+
+} // namespace libgtk2ui
+
+#endif // CHROME_BROWSER_UI_LIBGTK2UI_SELECT_FILE_DIALOG_IMPL_GTK2_H_

Powered by Google App Engine
This is Rietveld 408576698