OLD | NEW |
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 "base/nix/mime_util_xdg.h" | 5 #include "base/nix/mime_util_xdg.h" |
6 | 6 |
7 #include <cstdlib> | 7 #include <cstdlib> |
8 #include <list> | 8 #include <list> |
9 #include <map> | 9 #include <map> |
10 #include <vector> | 10 #include <vector> |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 // theme and load the first encountered index.theme. | 164 // theme and load the first encountered index.theme. |
165 MimeUtilConstants::IconDirMtimeMap::iterator iter; | 165 MimeUtilConstants::IconDirMtimeMap::iterator iter; |
166 FilePath theme_path; | 166 FilePath theme_path; |
167 MimeUtilConstants::IconDirMtimeMap* icon_dirs = | 167 MimeUtilConstants::IconDirMtimeMap* icon_dirs = |
168 &MimeUtilConstants::GetInstance()->icon_dirs_; | 168 &MimeUtilConstants::GetInstance()->icon_dirs_; |
169 for (iter = icon_dirs->begin(); iter != icon_dirs->end(); ++iter) { | 169 for (iter = icon_dirs->begin(); iter != icon_dirs->end(); ++iter) { |
170 theme_path = iter->first.Append(name); | 170 theme_path = iter->first.Append(name); |
171 if (!file_util::DirectoryExists(theme_path)) | 171 if (!file_util::DirectoryExists(theme_path)) |
172 continue; | 172 continue; |
173 FilePath theme_index = theme_path.Append("index.theme"); | 173 FilePath theme_index = theme_path.Append("index.theme"); |
174 if (!index_theme_loaded_ && file_util::PathExists(theme_index)) { | 174 if (!index_theme_loaded_ && PathExists(theme_index)) { |
175 if (!LoadIndexTheme(theme_index)) | 175 if (!LoadIndexTheme(theme_index)) |
176 return; | 176 return; |
177 index_theme_loaded_ = true; | 177 index_theme_loaded_ = true; |
178 } | 178 } |
179 dirs_.push_back(theme_path); | 179 dirs_.push_back(theme_path); |
180 } | 180 } |
181 } | 181 } |
182 | 182 |
183 FilePath IconTheme::GetIconPath(const std::string& icon_name, int size, | 183 FilePath IconTheme::GetIconPath(const std::string& icon_name, int size, |
184 bool inherits) { | 184 bool inherits) { |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
241 FilePath IconTheme::GetIconPathUnderSubdir(const std::string& icon_name, | 241 FilePath IconTheme::GetIconPathUnderSubdir(const std::string& icon_name, |
242 const std::string& subdir) { | 242 const std::string& subdir) { |
243 FilePath icon_path; | 243 FilePath icon_path; |
244 std::list<FilePath>::iterator dir_iter; | 244 std::list<FilePath>::iterator dir_iter; |
245 MimeUtilConstants::IconFormats* icon_formats = | 245 MimeUtilConstants::IconFormats* icon_formats = |
246 &MimeUtilConstants::GetInstance()->icon_formats_; | 246 &MimeUtilConstants::GetInstance()->icon_formats_; |
247 for (dir_iter = dirs_.begin(); dir_iter != dirs_.end(); ++dir_iter) { | 247 for (dir_iter = dirs_.begin(); dir_iter != dirs_.end(); ++dir_iter) { |
248 for (size_t i = 0; i < icon_formats->size(); ++i) { | 248 for (size_t i = 0; i < icon_formats->size(); ++i) { |
249 icon_path = dir_iter->Append(subdir); | 249 icon_path = dir_iter->Append(subdir); |
250 icon_path = icon_path.Append(icon_name + (*icon_formats)[i]); | 250 icon_path = icon_path.Append(icon_name + (*icon_formats)[i]); |
251 if (file_util::PathExists(icon_path)) | 251 if (PathExists(icon_path)) |
252 return icon_path; | 252 return icon_path; |
253 } | 253 } |
254 } | 254 } |
255 return FilePath(); | 255 return FilePath(); |
256 } | 256 } |
257 | 257 |
258 bool IconTheme::LoadIndexTheme(const FilePath& file) { | 258 bool IconTheme::LoadIndexTheme(const FilePath& file) { |
259 FILE* fp = file_util::OpenFile(file, "r"); | 259 FILE* fp = file_util::OpenFile(file, "r"); |
260 SubDirInfo* current_info = NULL; | 260 SubDirInfo* current_info = NULL; |
261 if (!fp) | 261 if (!fp) |
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
483 | 483 |
484 // Find a fallback icon if we cannot find it in the default theme. | 484 // Find a fallback icon if we cannot find it in the default theme. |
485 FilePath LookupFallbackIcon(const std::string& icon_name) { | 485 FilePath LookupFallbackIcon(const std::string& icon_name) { |
486 MimeUtilConstants* constants = MimeUtilConstants::GetInstance(); | 486 MimeUtilConstants* constants = MimeUtilConstants::GetInstance(); |
487 MimeUtilConstants::IconDirMtimeMap::iterator iter; | 487 MimeUtilConstants::IconDirMtimeMap::iterator iter; |
488 MimeUtilConstants::IconDirMtimeMap* icon_dirs = &constants->icon_dirs_; | 488 MimeUtilConstants::IconDirMtimeMap* icon_dirs = &constants->icon_dirs_; |
489 MimeUtilConstants::IconFormats* icon_formats = &constants->icon_formats_; | 489 MimeUtilConstants::IconFormats* icon_formats = &constants->icon_formats_; |
490 for (iter = icon_dirs->begin(); iter != icon_dirs->end(); ++iter) { | 490 for (iter = icon_dirs->begin(); iter != icon_dirs->end(); ++iter) { |
491 for (size_t i = 0; i < icon_formats->size(); ++i) { | 491 for (size_t i = 0; i < icon_formats->size(); ++i) { |
492 FilePath icon = iter->first.Append(icon_name + (*icon_formats)[i]); | 492 FilePath icon = iter->first.Append(icon_name + (*icon_formats)[i]); |
493 if (file_util::PathExists(icon)) | 493 if (PathExists(icon)) |
494 return icon; | 494 return icon; |
495 } | 495 } |
496 } | 496 } |
497 return FilePath(); | 497 return FilePath(); |
498 } | 498 } |
499 | 499 |
500 // Initialize the list of default themes. | 500 // Initialize the list of default themes. |
501 void InitDefaultThemes() { | 501 void InitDefaultThemes() { |
502 IconTheme** default_themes = | 502 IconTheme** default_themes = |
503 MimeUtilConstants::GetInstance()->default_themes_; | 503 MimeUtilConstants::GetInstance()->default_themes_; |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
633 // Try generic name like text-x-generic. | 633 // Try generic name like text-x-generic. |
634 icon_name = mime_type.substr(0, mime_type.find('/')) + "-x-generic"; | 634 icon_name = mime_type.substr(0, mime_type.find('/')) + "-x-generic"; |
635 icon_names.push_back(icon_name); | 635 icon_names.push_back(icon_name); |
636 | 636 |
637 // Last resort | 637 // Last resort |
638 icon_names.push_back("unknown"); | 638 icon_names.push_back("unknown"); |
639 | 639 |
640 for (size_t i = 0; i < icon_names.size(); i++) { | 640 for (size_t i = 0; i < icon_names.size(); i++) { |
641 if (icon_names[i][0] == '/') { | 641 if (icon_names[i][0] == '/') { |
642 icon_file = FilePath(icon_names[i]); | 642 icon_file = FilePath(icon_names[i]); |
643 if (file_util::PathExists(icon_file)) | 643 if (PathExists(icon_file)) |
644 return icon_file; | 644 return icon_file; |
645 } else { | 645 } else { |
646 icon_file = LookupIconInDefaultTheme(icon_names[i], size); | 646 icon_file = LookupIconInDefaultTheme(icon_names[i], size); |
647 if (!icon_file.empty()) | 647 if (!icon_file.empty()) |
648 return icon_file; | 648 return icon_file; |
649 } | 649 } |
650 } | 650 } |
651 return FilePath(); | 651 return FilePath(); |
652 } | 652 } |
653 | 653 |
654 } // namespace nix | 654 } // namespace nix |
655 } // namespace base | 655 } // namespace base |
OLD | NEW |