Extend case-insensitive filtering beyond ASCII characters (#9332)

This updates filtering for:
* Game Load dialogue
* MP lobby
* In-game label and unit search
* Add-ons client (now used consistently)
This commit is contained in:
Wedge009 2024-09-12 04:42:45 +10:00 committed by GitHub
parent ad85d62f7d
commit b316ee518b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 10 additions and 27 deletions

View File

@ -0,0 +1,2 @@
### User interface
* Search filter should now be case-insensitive for more than just ASCII characters (#9328)

View File

@ -500,10 +500,7 @@ bool game_info::match_string_filter(const std::string& filter) const
{
const std::string& s1 = name;
const std::string& s2 = map_info;
return std::search(s1.begin(), s1.end(), filter.begin(), filter.end(),
utils::chars_equal_insensitive) != s1.end()
|| std::search(s2.begin(), s2.end(), filter.begin(), filter.end(),
utils::chars_equal_insensitive) != s2.end();
return translation::ci_search(s1, filter) || translation::ci_search(s2, filter);
}
}

View File

@ -65,12 +65,7 @@ namespace {
for(const auto& attribute : cfg.attribute_range())
{
std::string val = attribute.second.str();
if(std::search(val.begin(),
val.end(),
filter.begin(),
filter.end(),
utils::chars_equal_insensitive)
!= val.end())
if(translation::ci_search(val, filter))
{
found = true;
break;

View File

@ -336,13 +336,7 @@ void game_load::apply_filter_text(const std::string& text, bool force)
bool found = false;
for(const auto & word : words)
{
found = std::search(games_[i].name().begin(),
games_[i].name().end(),
word.begin(),
word.end(),
utils::chars_equal_insensitive)
!= games_[i].name().end();
found = translation::ci_search(games_[i].name(), word);
if(!found) {
// one word doesn't match, we don't reach words.end()
break;

View File

@ -1389,22 +1389,17 @@ void menu_handler::do_search(const std::string& new_search)
if(!gui_->shrouded(loc)) {
const terrain_label* label = gui_->labels().get_label(loc);
if(label) {
std::string label_text = label->text().str();
if(std::search(label_text.begin(), label_text.end(), last_search_.begin(), last_search_.end(),
utils::chars_equal_insensitive)
!= label_text.end()) {
found = true;
}
const std::string& label_text = label->text().str();
found = translation::ci_search(label_text, last_search_);
}
}
// Search unit name
if(!gui_->fogged(loc)) {
unit_map::const_iterator ui = pc_.get_units().find(loc);
if(ui != pc_.get_units().end()) {
const std::string name = ui->name();
if(std::search(
name.begin(), name.end(), last_search_.begin(), last_search_.end(), utils::chars_equal_insensitive)
!= name.end()) {
const std::string& unit_name = ui->name();
if(translation::ci_search(unit_name, last_search_)) {
if(!gui_->viewing_team().is_enemy(ui->side())
|| !ui->invisible(ui->get_location())) {
found = true;