summaryrefslogtreecommitdiffstats
path: root/chrome/browser/gtk/dialogs_gtk.cc
diff options
context:
space:
mode:
authorestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-03 21:37:15 +0000
committerestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-03 21:37:15 +0000
commitf1842acda1c8e7508e8d8fb3287362355eb95656 (patch)
treef0fcf8b42b460da389ee19debfa0c372f286b539 /chrome/browser/gtk/dialogs_gtk.cc
parent2698704599ee9236f6df5c0766fc6d9a2e4a3735 (diff)
downloadchromium_src-f1842acda1c8e7508e8d8fb3287362355eb95656.zip
chromium_src-f1842acda1c8e7508e8d8fb3287362355eb95656.tar.gz
chromium_src-f1842acda1c8e7508e8d8fb3287362355eb95656.tar.bz2
GTK file picker: Use mime type filters instead of shell-style glob filters.
BUG=12347 Review URL: http://codereview.chromium.org/192011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@25377 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/gtk/dialogs_gtk.cc')
-rw-r--r--chrome/browser/gtk/dialogs_gtk.cc21
1 files changed, 9 insertions, 12 deletions
diff --git a/chrome/browser/gtk/dialogs_gtk.cc b/chrome/browser/gtk/dialogs_gtk.cc
index 7475e12..f4a76db 100644
--- a/chrome/browser/gtk/dialogs_gtk.cc
+++ b/chrome/browser/gtk/dialogs_gtk.cc
@@ -10,6 +10,7 @@
#include "base/file_path.h"
#include "base/logging.h"
#include "base/message_loop.h"
+#include "base/mime_util.h"
#include "base/thread.h"
#include "base/string_util.h"
#include "base/sys_string_conversions.h"
@@ -216,13 +217,12 @@ void SelectFileDialogImpl::AddFilters(GtkFileChooser* chooser) {
for (size_t i = 0; i < file_types_.extensions.size(); ++i) {
GtkFileFilter* filter = NULL;
for (size_t j = 0; j < file_types_.extensions[i].size(); ++j) {
- // TODO(estade): it's probably preferable to use mime types, but we are
- // passed extensions, so it's much easier to use globs.
if (!file_types_.extensions[i][j].empty()) {
if (!filter)
filter = gtk_file_filter_new();
- gtk_file_filter_add_pattern(filter,
- ("*." + file_types_.extensions[i][j]).c_str());
+ std::string mime_type = mime_util::GetFileMimeType(
+ FilePath("name.").Append(file_types_.extensions[i][j]));
+ gtk_file_filter_add_mime_type(filter, mime_type.c_str());
}
}
// We didn't find any non-empty extensions to filter on.
@@ -235,14 +235,11 @@ void SelectFileDialogImpl::AddFilters(GtkFileChooser* chooser) {
gtk_file_filter_set_name(filter, UTF16ToUTF8(
file_types_.extension_description_overrides[i]).c_str());
} else {
- // TODO(estade): There is no system default filter description so we use
- // the filter itself if the description is blank. This is far from
- // perfect. If we have multiple patterns (such as *.png, *.bmp, etc.),
- // this will only show the first pattern. Also, it would be better to have
- // human readable names like "PNG image" rather than "*.png", particularly
- // since extensions aren't a requirement on linux.
- gtk_file_filter_set_name(filter,
- ("*." + file_types_.extensions[i][0]).c_str());
+ // There is no system default filter description so we use
+ // the MIME type itself if the description is blank.
+ std::string mime_type = mime_util::GetFileMimeType(
+ FilePath("name.").Append(file_types_.extensions[i][0]));
+ gtk_file_filter_set_name(filter, mime_type.c_str());
}
gtk_file_chooser_add_filter(chooser, filter);