From fa28ed77a672e04722aa7d1e9055ed80776dd0da Mon Sep 17 00:00:00 2001 From: KebsCS Date: Thu, 5 Sep 2024 12:50:23 +0200 Subject: [PATCH] Change country and types filter behavior --- src/engine/client/serverbrowser.cpp | 3 --- src/engine/serverbrowser.h | 3 +++ src/game/client/components/menus_browser.cpp | 16 +++++++++++----- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/engine/client/serverbrowser.cpp b/src/engine/client/serverbrowser.cpp index 6c93b3aba..6ac324702 100644 --- a/src/engine/client/serverbrowser.cpp +++ b/src/engine/client/serverbrowser.cpp @@ -27,9 +27,6 @@ #include #include -static constexpr const char *COMMUNITY_COUNTRY_NONE = "none"; -static constexpr const char *COMMUNITY_TYPE_NONE = "None"; - class CSortWrap { typedef bool (CServerBrowser::*SortFunc)(int, int) const; diff --git a/src/engine/serverbrowser.h b/src/engine/serverbrowser.h index f3957b48b..c788fccc2 100644 --- a/src/engine/serverbrowser.h +++ b/src/engine/serverbrowser.h @@ -309,6 +309,9 @@ public: static constexpr const char *COMMUNITY_DDNET = "ddnet"; static constexpr const char *COMMUNITY_NONE = "none"; + + static constexpr const char *COMMUNITY_COUNTRY_NONE = "none"; + static constexpr const char *COMMUNITY_TYPE_NONE = "None"; /** * Special community value for country/type filters that * affect all communities. diff --git a/src/game/client/components/menus_browser.cpp b/src/game/client/components/menus_browser.cpp index 6e6901106..f609855c5 100644 --- a/src/game/client/components/menus_browser.cpp +++ b/src/game/client/components/menus_browser.cpp @@ -869,11 +869,14 @@ void CMenus::RenderServerbrowserDDNetFilter(CUIRect View, { if(Click == 1) { - // Left click: when all are active, only activate one + // Left click: when all are active, only activate one and none for(int j = 0; j < MaxItems; ++j) { - if(j != ItemIndex) - Filter.Add(GetItemName(j)); + if(const char *pItemName = GetItemName(j); + j != ItemIndex && + !((&Filter == &ServerBrowser()->CountriesFilter() && str_comp(pItemName, IServerBrowser::COMMUNITY_COUNTRY_NONE) == 0) || + (&Filter == &ServerBrowser()->TypesFilter() && str_comp(pItemName, IServerBrowser::COMMUNITY_TYPE_NONE) == 0))) + Filter.Add(pItemName); } } else if(Click == 2) @@ -890,7 +893,10 @@ void CMenus::RenderServerbrowserDDNetFilter(CUIRect View, bool AllFilteredExceptUs = true; for(int j = 0; j < MaxItems; ++j) { - if(j != ItemIndex && !Filter.Filtered(GetItemName(j))) + if(const char *pItemName = GetItemName(j); + j != ItemIndex && !Filter.Filtered(pItemName) && + !((&Filter == &ServerBrowser()->CountriesFilter() && str_comp(pItemName, IServerBrowser::COMMUNITY_COUNTRY_NONE) == 0) || + (&Filter == &ServerBrowser()->TypesFilter() && str_comp(pItemName, IServerBrowser::COMMUNITY_TYPE_NONE) == 0))) { AllFilteredExceptUs = false; break; @@ -898,7 +904,7 @@ void CMenus::RenderServerbrowserDDNetFilter(CUIRect View, } // When last one is removed, re-enable all currently selectable items. // Don't use Clear, to avoid enabling also currently unselectable items. - if(AllFilteredExceptUs) + if(AllFilteredExceptUs && Active) { for(int j = 0; j < MaxItems; ++j) {