diff --git a/Telegram/SourceFiles/boxes/choose_filter_box.cpp b/Telegram/SourceFiles/boxes/choose_filter_box.cpp index c2fdfa075..685ef547f 100644 --- a/Telegram/SourceFiles/boxes/choose_filter_box.cpp +++ b/Telegram/SourceFiles/boxes/choose_filter_box.cpp @@ -287,19 +287,24 @@ void FillChooseFilterMenu( }; const auto contains = filter.contains(history); + const auto title = filter.title(); auto item = base::make_unique_q( menu.get(), - menu->st().menu, + st::foldersMenu, Ui::Menu::CreateAction( - menu.get(), // todo filter emoji - Ui::Text::FixAmpersandInAction(filter.title().text.text), + menu.get(), + Ui::Text::FixAmpersandInAction(title.text.text), std::move(callback)), contains ? &st::mediaPlayerMenuCheck : nullptr, contains ? &st::mediaPlayerMenuCheck : nullptr); + const auto context = Core::MarkedTextContext{ + .session = &history->session(), + .customEmojiRepaint = [raw = item.get()] { raw->update(); }, + .customEmojiLoopLimit = title.isStatic ? -1 : 0, + }; + item->setMarkedText(title.text, QString(), context); item->setIcon(Icon(showColors ? filter : filter.withColorIndex({}))); - const auto &p = st::menuWithIcons.itemPadding; - item->setMinWidth(item->minWidth() + p.left() - p.right() - p.top()); const auto action = menu->addAction(std::move(item)); action->setEnabled(contains ? validator.canRemove(id) diff --git a/Telegram/SourceFiles/dialogs/dialogs.style b/Telegram/SourceFiles/dialogs/dialogs.style index 2914e3a8e..904c180c0 100644 --- a/Telegram/SourceFiles/dialogs/dialogs.style +++ b/Telegram/SourceFiles/dialogs/dialogs.style @@ -781,3 +781,7 @@ dialogsPopularAppsPadding: margins(10px, 8px, 10px, 12px); dialogsPopularAppsAbout: FlatLabel(boxDividerLabel) { minWidth: 128px; } + +foldersMenu: Menu(menuWithIcons) { + itemPadding: margins(54px, 8px, 44px, 8px); +} diff --git a/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_strip.cpp b/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_strip.cpp index 713f06d8e..fd8986458 100644 --- a/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_strip.cpp +++ b/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_strip.cpp @@ -21,6 +21,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "lang/lang_keys.h" #include "main/main_session.h" #include "settings/settings_folders.h" +#include "ui/widgets/menu/menu_action.h" #include "ui/power_saving.h" #include "ui/ui_utility.h" #include "ui/widgets/chat_filters_tabs_slider_reorder.h" @@ -150,18 +151,38 @@ void ShowFiltersListMenu( const auto premiumFrom = (reorderAll ? 0 : 1) + maxLimit; for (auto i = 0; i < list.size(); ++i) { - const auto &filter = list[i]; - auto title = filter.title(); - auto text = title.text.empty() + const auto title = list[i].title(); + const auto text = title.text.empty() ? tr::lng_filters_all_short(tr::now) - : title.text.text; // todo filter emoji - - const auto action = state->menu->addAction(std::move(text), [=] { + : title.text.text; + const auto callback = [=] { if (i != active) { changeActive(i); } - }, (i == active) ? &st::mediaPlayerMenuCheck : nullptr); + }; + const auto icon = (i == active) + ? &st::mediaPlayerMenuCheck + : nullptr; + const auto action = Ui::Menu::CreateAction( + state->menu.get(), + text, + callback); + auto item = base::make_unique_q( + state->menu.get(), + state->menu->st().menu, + action, + icon, + icon); action->setEnabled(i < premiumFrom); + if (!title.text.empty()) { + const auto context = Core::MarkedTextContext{ + .session = session, + .customEmojiRepaint = [raw = item.get()] { raw->update(); }, + .customEmojiLoopLimit = title.isStatic ? -1 : 0, + }; + item->setMarkedText(title.text, QString(), context); + } + state->menu->addAction(std::move(item)); } session->data().chatsFilters().changed() | rpl::start_with_next([=] { state->menu->hideMenu(); diff --git a/Telegram/lib_ui b/Telegram/lib_ui index 8cb06a75d..da44ac82a 160000 --- a/Telegram/lib_ui +++ b/Telegram/lib_ui @@ -1 +1 @@ -Subproject commit 8cb06a75d981d7a1a2f2a5df420ef20ff4c0b097 +Subproject commit da44ac82a99ec05d7091eaaf6ae96a63bbae3714