From 3e6da6210ef76d2d7794f2a907673f96ba8d89ae Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Mon, 30 Mar 2026 12:19:35 +0300 Subject: [PATCH] Added to dialogs mute icon near name behind new experimental option. --- .../Resources/icons/dialogs/dialogs_mute.png | Bin 0 -> 395 bytes .../icons/dialogs/dialogs_mute@2x.png | Bin 0 -> 541 bytes .../icons/dialogs/dialogs_mute@3x.png | Bin 0 -> 653 bytes Telegram/SourceFiles/dialogs/dialogs.style | 7 +++ .../SourceFiles/dialogs/ui/dialogs_layout.cpp | 43 ++++++++++++++++++ .../SourceFiles/dialogs/ui/dialogs_layout.h | 2 + .../settings/settings_experimental.cpp | 2 + 7 files changed, 54 insertions(+) create mode 100644 Telegram/Resources/icons/dialogs/dialogs_mute.png create mode 100644 Telegram/Resources/icons/dialogs/dialogs_mute@2x.png create mode 100644 Telegram/Resources/icons/dialogs/dialogs_mute@3x.png diff --git a/Telegram/Resources/icons/dialogs/dialogs_mute.png b/Telegram/Resources/icons/dialogs/dialogs_mute.png new file mode 100644 index 0000000000000000000000000000000000000000..3b37e1172dbf7af5b1d5c4c77a7c572911d04e72 GIT binary patch literal 395 zcmeAS@N?(olHy`uVBq!ia0vp^93TuL7#^lP32OC7#SED>l&Eo8X1HbT3Q*ISeY7X8yHv_7_7Bgn1rGsH$Npa ztrE9}JL!`5fEqO5Hk4%MrWThZ<`#hTnCTiA>lzz`7+6{vn_3y0K`hz(;;jczk3e#w zUm1`V1hIjb6^L0PUj@Df(!riCjv*Y^89f-b|7VV}yTIu1>oWuMk1$n>_H(xxSj0Aj zgt0IKm2djc|2q=MVEoVUs#Afp@(r`j8#eddf4#3TvNFrJ*~MytOl6SlFk%*2c|cr2 SLOA0ONWjz8&t;ucLK6Uuz-Mj% literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/dialogs/dialogs_mute@2x.png b/Telegram/Resources/icons/dialogs/dialogs_mute@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..96681eb66f571f9946a535d1ed2fc112955cf334 GIT binary patch literal 541 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx*Bp9q_EZ7UA6p}rHd>I(3)EF2VS{N990fib~ zFff!FFfhDI0I6bN5HFasE6@fg!Ib3f?!xfDz5mR9AdkJo)7O>#6|)?tvI?VE0y|Jh zwZt`|BqgyV)hf9t6-Y4{85kMs8kp!B8H5;GS{a#GnHp*v7+4t?thHL0grXrgKP5A* z61Rps>5}(=8Z_WGlw{_n7MCRE7J&4a=^7a88XJTdSXvpIS{a)`EZO_wtp`w#KyspA z8IV>6VkIC3g$L)Mmt5O{^ixk4#}J9j$pZJc`ZP5Hfn(q#5Y_0IaCZMuAs(I{$8hmN zN0%qp{>JMbp7rz7f6hQQAP{SFx3pKjk-z+t(Vu3GgoHGa*bndj13|xI$Pr5e9gSZT z51nCPmjCyE|J!r+AH{uG4})aye}DS+&&U5eIAR|BpB(V+nEd%z0jB@)M+!n~cRxFE z;J|?ovPz$f!1;wAF;LPEbcpd^8axci5Y8h9`KpmxOes#&`bsfb*E%?V-vxNKo2u` My85}Sb4q9e0F?j4%m4rY literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/dialogs/dialogs_mute@3x.png b/Telegram/Resources/icons/dialogs/dialogs_mute@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a246b7e6a5c0234034e0d4bb903bdbec36fa3ea8 GIT binary patch literal 653 zcmeAS@N?(olHy`uVBq!ia0vp^5+KY0Bp8m$B&h%?g=CK)Uj~LMH3o);76yi2K%s^g z3=E|P3=FRl7#OT(FffQ0%-I!a1C(G&@^*J&_}|`tWo>zjCBo6bd3x`3@xpUOsq@|wG9lc3=Gy9 znO2Eg!<}@=dq52ua2rZ8b5n~;5_1bcddzeUjCG9-LJTaej7_bK%^;TSeeu=cB^kJnnu zRy^SO9>=P4`*Eh=|1)a)YiiHt#LS<(HR0jRsj{jJ2kOH7`?or5`*q?K&^zaOf4+OA z5q&Q3%jyl&7PD-av9w~t$5ZwU`E8~Xg#ee&ig5^sJd^d?*I8dnB zXytjWDe6W`UWUn){*n!99{VhJH}bqRlvKB$zU06L!DkXPH+VG)3i}8KZSZU~H10|K zbcm7RM7hTurrH(frbss|TCjSW*V0LQ#1Fjq5^83cbk*|xCk8fNwr0ouMgEgS-dteI zK2ve4dXA{aBu{0NMtQr6+eU(_Cl_%C{B(V%9Ti|BKX20Fnm;XGoBkBts1*JB&Yau0 mH@d{$XaD=hDJy2yGftiI?ueeEStl@{89ZJ6T-G@yGywoHIq3la literal 0 HcmV?d00001 diff --git a/Telegram/SourceFiles/dialogs/dialogs.style b/Telegram/SourceFiles/dialogs/dialogs.style index dd5350b054..bb5d7963b6 100644 --- a/Telegram/SourceFiles/dialogs/dialogs.style +++ b/Telegram/SourceFiles/dialogs/dialogs.style @@ -603,6 +603,13 @@ dialogsUnreadPollMuted: ThreeStateIcon { active: icon{{ "dialogs/dialogs_chatlist_poll-18x18", dialogsUnreadBgMutedActive }}; } +dialogsMuteIcon: ThreeStateIcon { + icon: icon{{ "dialogs/dialogs_mute", dialogsUnreadBgMuted }}; + over: icon{{ "dialogs/dialogs_mute", dialogsUnreadBgMutedOver }}; + active: icon{{ "dialogs/dialogs_mute", dialogsUnreadBgMutedActive }}; +} +dialogsMuteIconSkip: 4px; + downloadBarHeight: 46px; downloadArrow: icon{{ "fast_to_original", menuIconFg }}; downloadArrowOver: icon{{ "fast_to_original", menuIconFgOver }}; diff --git a/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp b/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp index 38688943e5..83c975146b 100644 --- a/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp +++ b/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp @@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "dialogs/ui/dialogs_layout.h" +#include "base/options.h" #include "base/unixtime.h" #include "core/ui_integration.h" #include "data/data_channel.h" @@ -51,8 +52,18 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "styles/style_window.h" namespace Dialogs::Ui { + +const char kOptionDialogsMuteIcon[] = "dialogs-mute-icon"; + namespace { +base::options::toggle DialogsMuteIcon({ + .id = kOptionDialogsMuteIcon, + .name = "Mute icon in dialogs", + .description = "Show a small mute icon next to the chat name " + "for muted chats.", +}); + const auto kPsaBadgePrefix = "cloud_lng_badge_psa_"; [[nodiscard]] bool ShowUserBotIcon(not_null user) { @@ -796,8 +807,24 @@ void PaintRow( context.width, text); } else if (from) { + auto badgeWidth = 0; if ((history || sublist) && !context.search) { + const auto widthBefore = rectForName.width(); paintPeerBadge(rowName.maxWidth()); + badgeWidth = widthBefore - rectForName.width(); + } + const auto drawMuteIcon = DialogsMuteIcon.value() + && thread + && thread->muted(); + if (drawMuteIcon) { + const auto &muteIcon = ThreeStateIcon( + st::dialogsMuteIcon, + context.active, + context.selected); + rectForName.setWidth( + rectForName.width() + - muteIcon.width() + - st::dialogsMuteIconSkip); } p.setPen(context.active ? st::dialogsNameFgActive @@ -809,6 +836,22 @@ void PaintRow( .availableWidth = rectForName.width(), .elisionLines = 1, }); + if (drawMuteIcon) { + const auto &muteIcon = ThreeStateIcon( + st::dialogsMuteIcon, + context.active, + context.selected); + const auto nameW = std::min( + rowName.maxWidth(), + rectForName.width()); + const auto muteLeft = rectForName.left() + + nameW + + badgeWidth + + st::dialogsMuteIconSkip; + const auto muteTop = rectForName.top() + + (st::semiboldFont->height - muteIcon.height()) / 2; + muteIcon.paint(p, muteLeft, muteTop, context.width); + } } else if (hiddenSenderInfo) { p.setPen(context.active ? st::dialogsNameFgActive diff --git a/Telegram/SourceFiles/dialogs/ui/dialogs_layout.h b/Telegram/SourceFiles/dialogs/ui/dialogs_layout.h index e8542902e0..d5a36aeae7 100644 --- a/Telegram/SourceFiles/dialogs/ui/dialogs_layout.h +++ b/Telegram/SourceFiles/dialogs/ui/dialogs_layout.h @@ -76,6 +76,8 @@ struct PaintContext { bool displayUnreadInfo = false; }; +extern const char kOptionDialogsMuteIcon[]; + [[nodiscard]] const style::icon *ChatTypeIcon( not_null peer, const PaintContext &context); diff --git a/Telegram/SourceFiles/settings/settings_experimental.cpp b/Telegram/SourceFiles/settings/settings_experimental.cpp index 3bbddecc62..57747c20d5 100644 --- a/Telegram/SourceFiles/settings/settings_experimental.cpp +++ b/Telegram/SourceFiles/settings/settings_experimental.cpp @@ -26,6 +26,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "core/sandbox.h" #include "chat_helpers/tabbed_panel.h" #include "dialogs/dialogs_widget.h" +#include "dialogs/ui/dialogs_layout.h" #include "history/history_item_components.h" #include "info/profile/info_profile_actions.h" #include "lang/lang_keys.h" @@ -204,6 +205,7 @@ void SetupExperimental( addToggle(ChatHelpers::kOptionTabbedPanelShowOnClick); addToggle(Dialogs::kOptionForumHideChatsList); + addToggle(Dialogs::Ui::kOptionDialogsMuteIcon); addToggle(Core::kOptionFractionalScalingEnabled); addToggle(Core::kOptionHighDpiDownscale); addToggle(Window::kOptionViewProfileInChatsListContextMenu);