fix: support mixed-case extensions in Linux file dialogs (#33918)
This commit is contained in:
parent
14f07d7814
commit
9901d2f281
1 changed files with 21 additions and 6 deletions
|
@ -31,6 +31,25 @@ namespace {
|
||||||
static const int kPreviewWidth = 256;
|
static const int kPreviewWidth = 256;
|
||||||
static const int kPreviewHeight = 512;
|
static const int kPreviewHeight = 512;
|
||||||
|
|
||||||
|
std::string MakeCaseInsensitivePattern(const std::string& extension) {
|
||||||
|
std::string pattern("*.");
|
||||||
|
|
||||||
|
for (std::size_t i = 0, n = extension.size(); i < n; i++) {
|
||||||
|
char ch = extension[i];
|
||||||
|
if (!base::IsAsciiAlpha(ch)) {
|
||||||
|
pattern.push_back(ch);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
pattern.push_back('[');
|
||||||
|
pattern.push_back(base::ToLowerASCII(ch));
|
||||||
|
pattern.push_back(base::ToUpperASCII(ch));
|
||||||
|
pattern.push_back(']');
|
||||||
|
}
|
||||||
|
|
||||||
|
return pattern;
|
||||||
|
}
|
||||||
|
|
||||||
class FileChooserDialog {
|
class FileChooserDialog {
|
||||||
public:
|
public:
|
||||||
FileChooserDialog(GtkFileChooserAction action, const DialogSettings& settings)
|
FileChooserDialog(GtkFileChooserAction action, const DialogSettings& settings)
|
||||||
|
@ -252,12 +271,8 @@ void FileChooserDialog::AddFilters(const Filters& filters) {
|
||||||
GtkFileFilter* gtk_filter = gtk_file_filter_new();
|
GtkFileFilter* gtk_filter = gtk_file_filter_new();
|
||||||
|
|
||||||
for (const auto& extension : filter.second) {
|
for (const auto& extension : filter.second) {
|
||||||
// guarantee a pure lowercase variant
|
std::string pattern = MakeCaseInsensitivePattern(extension);
|
||||||
std::string file_extension = base::ToLowerASCII("*." + extension);
|
gtk_file_filter_add_pattern(gtk_filter, pattern.c_str());
|
||||||
gtk_file_filter_add_pattern(gtk_filter, file_extension.c_str());
|
|
||||||
// guarantee a pure uppercase variant
|
|
||||||
file_extension = base::ToUpperASCII("*." + extension);
|
|
||||||
gtk_file_filter_add_pattern(gtk_filter, file_extension.c_str());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gtk_file_filter_set_name(gtk_filter, filter.first.c_str());
|
gtk_file_filter_set_name(gtk_filter, filter.first.c_str());
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue