From 97d8aa0a0d48cea17c1cacb2e41f8e9d4883b69f Mon Sep 17 00:00:00 2001
From: John Preston <johnprestonmail@gmail.com>
Date: Tue, 25 Oct 2022 16:40:54 +0400
Subject: [PATCH] Add a distinct forum icon in chats list.

---
 .../Resources/icons/dialogs/dialogs_forum.png | Bin 0 -> 469 bytes
 .../icons/dialogs/dialogs_forum@2x.png        | Bin 0 -> 902 bytes
 .../icons/dialogs/dialogs_forum@3x.png        | Bin 0 -> 1285 bytes
 Telegram/SourceFiles/dialogs/dialogs.style    |   5 ++-
 .../dialogs/dialogs_inner_widget.cpp          |   8 +++-
 .../SourceFiles/dialogs/ui/dialogs_layout.cpp |  36 +++++++++++-------
 .../window/notifications_manager_default.cpp  |   4 +-
 .../window/themes/window_theme_preview.cpp    |   4 +-
 8 files changed, 38 insertions(+), 19 deletions(-)
 create mode 100644 Telegram/Resources/icons/dialogs/dialogs_forum.png
 create mode 100644 Telegram/Resources/icons/dialogs/dialogs_forum@2x.png
 create mode 100644 Telegram/Resources/icons/dialogs/dialogs_forum@3x.png

diff --git a/Telegram/Resources/icons/dialogs/dialogs_forum.png b/Telegram/Resources/icons/dialogs/dialogs_forum.png
new file mode 100644
index 0000000000000000000000000000000000000000..3b589bf06f0657eb19325c7ffbbc651dcf98af38
GIT binary patch
literal 469
zcmeAS@N?(olHy`uVBq!ia0vp^!a&T$!2~34zW#IqNHG=%xjQkeJ16rJ$Z<)H@J#dd
zWzYh$IT#q*GZ|PwN`P1jh#44|7cep~18GK(*a9ZFtndP6I2&XegYW#Mp+IH!o-U3d
z8lrP28m?{%5IKI-;k2hXr&5Q2_<l$EL+=$hg1r44y|<ZLZZoyoVWH}w*u-Jx5}nJN
z_iBkB*WS<fD!(bsx+lBt|L4#3?{+?qY5K9nC9r4F3LWq3rIqvkr({NMzkRi|c4y2c
z9qu!q_qgxgc3XGC!GsNQ>qA3TJvaIO`k7}YT@p2o^+DbK?VbIPKXRz_C97P1DPmmD
zFVTNoVsXPPi9>zA&VKmg?V~nX#q*QR^i;`=_1B}<hHc9||NOJxa%L7U$J^ImhYGap
z-|}DEbJBw9<ArIPC4Dc?S|-cau5<d;uD0kO`}pTPwzzEaP^|lCl8IEUxG@iNbo<Hx
zk*)XN&)-}rnkez@_uo~k7|eVZYj6dMuv(SvmbE##`nNBC`(XtRfjB*Jp<}(ZMm)^R
r=bTUHx&Q6<+iA-*efWO9EcwNB^vT_s)mnv(pdj^h^>bP0l+XkK(T}l;

literal 0
HcmV?d00001

diff --git a/Telegram/Resources/icons/dialogs/dialogs_forum@2x.png b/Telegram/Resources/icons/dialogs/dialogs_forum@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..e0b170f748ca0b12caee2e338b642a0d0da84313
GIT binary patch
literal 902
zcmV;119|+3P)<h;3K|Lk000e1NJLTq001Tc000yS0ssI2Ztd7#00001b5ch_0Itp)
z=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@
z1ONa40RR91CZGcV1ONa40RR916aWAK0ACZ!y#N3L@JU2LR7efIls!nYQ546`3=I3Q
z!7Q{7A_|0pg0_M-O+mvUK~RUlt)->Wp}|0uriQ>Jv>|W^K?njRLdl8-Nh2o}M9n@h
zD5COx|8eW~be{*`T;6BUbI$*F&iy*~ibPF*R;%^s=;-e5u23k1!{O=a=_U&_iEnRj
z|M~g7zP@4-O_mYDrBZ2kcQ>OL42GY>eR}uz_kDeR46INnT3cJ0ps+hKGIDr$`2PNm
zdg*j}etw>EJ3BjqLn7#KI4HKVvQn*95qy4r-rCxd$z)U#FtE6*t1E8Zr>CdU(NTh)
zot<$duD!9bK^VK;&W*$N`~3nV(U8$-WD?-I-EIOzA`!kyBCD&bggHGuWte)s&MZ_+
z$Ad96G{kj@Jv=;2jFXcSzDgp=WRe&ZresS?%i!Q3by;I!VS$+=-1YT!!gY3b=5jec
zu(!8I3&rDc26%gWYj1C-0BcAjlJoO(ZqCEQgG!~M-1zu-B9Y(%II6C$E((}TCawzG
z=krlj*y!!;4F-d_>1dp2G&(ss$#7z^cxr0OX0w^iX0$h>!d+Tgy1cx^ea+|dE|;sV
zt&PtJM{owh!tbJ(+3&#rLa|H1USZz`1_tDE`Stbn?(Qy`23%aBxw$#0{r&xLu@1aD
zl}hE};^O%Dcz=H%F92Y)z0>K$xu6fS*(}tXn;U_(OiWB{Zf;`t>EXv>G13=mwHl}U
z^729@K?8>u3WdhT#!ww^*5l(N#n6&#YimlS@^fHJ7S{k5mJ%?KfTe(#nVBgTi(IL(
zjdg3aS|lznFEb<-y|}peF{;PoVKlg2uNM+#gPq~4jU(vxj*bqbXEGT+snh91rBaD6
z==FN!;3?rtzlqGw&LSN*k`D(00rB@1gZlbzZ*O6uN4^5h{rB|rAb}KNGBKPO`@lru
zq8IRsZp1YC>OUjcIa-8)KZdhdEah^U*#R^dL1ENtHAZdV;%=bxk&Bn);NXBuqC-=u
clt!cZ3k_0%hVplzp8x;=07*qoM6N<$f@!OqGXMYp

literal 0
HcmV?d00001

diff --git a/Telegram/Resources/icons/dialogs/dialogs_forum@3x.png b/Telegram/Resources/icons/dialogs/dialogs_forum@3x.png
new file mode 100644
index 0000000000000000000000000000000000000000..43cf0b718af4c3862bd4c61326680bc574851f71
GIT binary patch
literal 1285
zcmV+g1^W7lP)<h;3K|Lk000e1NJLTq0021v0015c0ssI28Pg$L00001b5ch_0Itp)
z=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@
z1ONa40RR91IiLdo1ONa40RR919smFU0K{;4v;Y7EZ%IT!R9Fe^SV<_gQ5e3iS?DLq
zkRcQqN=PKbMp;NQ!~!cNp=?-*jTI{^MY2F7k`x&h$n0O3ii{;>p6BWRAOF$Y>AUAU
z?&U83Z=v^l-{*PGx#xS&d)`B%G1BAU;80OfF*`eZet!P+^t8Xf-`(Avnwn}PdE?0>
zCMKSpo&6C#!^6Xlj*i9~>Ss!^v9Zt3&!TyL`moqmR#rb7#29RIbMu{@9mzylsH&>!
z=cAcOB=GGrGc!X%LhSABS5{VrhK3dv78LlbtgMcX4uw<q_2S~f+1dH+?TrtanwqAk
zr-y}wd3t(oZf?%Z%=Gv7^8kJAl$4ai!$W?-USD5pYiqHPyhLMTBae~Tk&%%+F(4pd
zZf;J29~c;Lb#>)oU)xwqwG^zZtmOHFgM*6k)Lt_(GKgqxZN0v}E<}!wj+&UrzBY+`
z8sp>RLLoR&kG#CRh%hoTqJ~uXkuAi+4^~9^*PNUjLh^=|e_=Mha#U25uAg}<EG+ow
z!NGwVQsL*3adB~qDF3P!70lJw*H@90ybx@p8hOUX#>kc!4-XIX^YaAY705}3T2wGs
zY$>7%4Ia?h*?D?;DunUQrlzLH$4Bz;3gje1Eh?Dn<>lq>?k+KPjm5=9a^BqB6c-oM
ztI$9JR@B#}r6nPfIpt9$F+V?_Pj=o$l~tlOnu3A?wYssoy6WfWr=Z{~W0`qbvX76C
zot&H$_%B}D+S-Uu#@5yrUj%rGz`($kmKMG%!0}ODUT$M!!^6nN&wF`!A!TOV-rgoB
zClkg1165{XVgf0FHCtX@uBoX}8<<43S}o2eZ*Ol~TU&Cf8KI$}eSLlC$ll-Iktgl#
z?I5aw_4S*XnduAt7EWGvz9sper2h)YPF|eLZf<U9_<#L-uy3ZPrxntcmX<LwG2!9i
z5fKqSK0XYLzU=Pq4!so~l)vBqp2^8cY#p8sio3h}{r&yb)fILH%Ifv?H4pg0MxU0D
zkbr&)Jp}l)Ptg-Wm&o`TNl8hl6;LOP+`yc0t4T{sqwGh|+1lF5v$nUlySlncOH04l
zWI;heb#-+oCnr3a*(d^7S(+$1rj3maU6`Jpy}iA{!a`IGCRklvEhOS&0A^=rN8^4N
z_+-t^%_tl~4hmLqa4-?->+6LuL!D?Qkv~ip2elgg=;$anH}`XNw31U(Q)*E7(M{7t
zahyt!hKBI7nX-$E3z{1Vy{M?@16fv9CIKN7A0N*YQ3cW0$-xFi@x^ElAWbD)<od^b
z0gZwLgq=%;+TY(_g8W_xTa7J5US6JDp`@fltJ_#GGW&~)gHxN?9v&Wi$S5{$g-iz(
zKrV=RYLTxJ5P$QeS|h<58bXO=6kI&zT+CC822=u~MFmEmo?0R$4B>oXetsY!5`|pb
z)6*l2={k|wYinz|{%?D5)}V4Ry8P~nRPOEV)u7lmG&Eq%)KZ(jE8{8#b?iztu%3QY
v033wT(a~(8$OQZsL&!xEVu7-=vw{2zcbsnTtD+iS00000NkvXXu0mjfiZ4}s

literal 0
HcmV?d00001

diff --git a/Telegram/SourceFiles/dialogs/dialogs.style b/Telegram/SourceFiles/dialogs/dialogs.style
index 811214809..b5f503ef4 100644
--- a/Telegram/SourceFiles/dialogs/dialogs.style
+++ b/Telegram/SourceFiles/dialogs/dialogs.style
@@ -271,7 +271,7 @@ dialogSearchFrom: IconButton(dialogCalendar) {
 	iconPosition: point(9px, 8px);
 }
 
-dialogsChatTypeSkip: 20px;
+dialogsChatTypeSkip: 3px;
 dialogsChatIcon: icon {{ "dialogs/dialogs_chat", dialogsChatIconFg, point(1px, 4px) }};
 dialogsChatIconOver: icon {{ "dialogs/dialogs_chat", dialogsChatIconFgOver, point(1px, 4px) }};
 dialogsChatIconActive: icon {{ "dialogs/dialogs_chat", dialogsChatIconFgActive, point(1px, 4px) }};
@@ -281,6 +281,9 @@ dialogsChannelIconActive: icon {{ "dialogs/dialogs_channel", dialogsChatIconFgAc
 dialogsBotIcon: icon {{ "dialogs/dialogs_bot", dialogsChatIconFg, point(1px, 3px) }};
 dialogsBotIconOver: icon {{ "dialogs/dialogs_bot", dialogsChatIconFgOver, point(1px, 3px) }};
 dialogsBotIconActive: icon {{ "dialogs/dialogs_bot", dialogsChatIconFgActive, point(1px, 3px) }};
+dialogsForumIcon: icon {{ "dialogs/dialogs_forum", dialogsChatIconFg, point(1px, 4px) }};
+dialogsForumIconOver: icon {{ "dialogs/dialogs_forum", dialogsChatIconFgOver, point(1px, 4px) }};
+dialogsForumIconActive: icon {{ "dialogs/dialogs_forum", dialogsChatIconFgActive, point(1px, 4px) }};
 dialogsArchiveUserpic: icon {{ "archive_userpic", historyPeerUserpicFg }};
 dialogsRepliesUserpic: icon {{ "replies_userpic", historyPeerUserpicFg }};
 
diff --git a/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp
index 784baa107..d3794d7ef 100644
--- a/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp
+++ b/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp
@@ -859,7 +859,9 @@ void InnerWidget::paintPeerSearchResult(
 	// draw chat icon
 	if (const auto chatTypeIcon = Ui::ChatTypeIcon(peer, context)) {
 		chatTypeIcon->paint(p, rectForName.topLeft(), context.width);
-		rectForName.setLeft(rectForName.left() + st::dialogsChatTypeSkip);
+		rectForName.setLeft(rectForName.left()
+			+ chatTypeIcon->width()
+			+ st::dialogsChatTypeSkip);
 	}
 	const auto badgeWidth = result->badge.drawGetWidth(
 		p,
@@ -987,7 +989,9 @@ void InnerWidget::paintSearchInFilter(
 		st::semiboldFont->height);
 	if (icon) {
 		icon->paint(p, rectForName.topLeft(), width());
-		rectForName.setLeft(rectForName.left() + st::dialogsChatTypeSkip);
+		rectForName.setLeft(rectForName.left()
+			+ icon->width()
+			+ st::dialogsChatTypeSkip);
 	}
 	p.setPen(savedPen);
 	text.drawLeftElided(
diff --git a/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp b/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp
index ab3cd321b..075ae864d 100644
--- a/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp
+++ b/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp
@@ -340,7 +340,9 @@ void PaintRow(
 	} else if (from) {
 		if (const auto chatTypeIcon = ChatTypeIcon(from, context)) {
 			chatTypeIcon->paint(p, rectForName.topLeft(), context.width);
-			rectForName.setLeft(rectForName.left() + st::dialogsChatTypeSkip);
+			rectForName.setLeft(rectForName.left()
+				+ chatTypeIcon->width()
+				+ st::dialogsChatTypeSkip);
 		}
 	}
 	auto texttop = context.st->textTop;
@@ -739,19 +741,7 @@ void PaintUnreadBadge(QPainter &p, const QRect &rect, const UnreadBadgeStyle &st
 const style::icon *ChatTypeIcon(
 		not_null<PeerData*> peer,
 		const PaintContext &context) {
-	if (peer->isChat() || peer->isMegagroup()) {
-		return &(context.active
-			? st::dialogsChatIconActive
-			: context.selected
-			? st::dialogsChatIconOver
-			: st::dialogsChatIcon);
-	} else if (peer->isChannel()) {
-		return &(context.active
-			? st::dialogsChannelIconActive
-			: context.selected
-			? st::dialogsChannelIconOver
-			: st::dialogsChannelIcon);
-	} else if (const auto user = peer->asUser()) {
+	if (const auto user = peer->asUser()) {
 		if (ShowUserBotIcon(user)) {
 			return &(context.active
 				? st::dialogsBotIconActive
@@ -759,6 +749,24 @@ const style::icon *ChatTypeIcon(
 				? st::dialogsBotIconOver
 				: st::dialogsBotIcon);
 		}
+	} else if (peer->isBroadcast()) {
+		return &(context.active
+			? st::dialogsChannelIconActive
+			: context.selected
+			? st::dialogsChannelIconOver
+			: st::dialogsChannelIcon);
+	} else if (peer->isForum()) {
+		return &(context.active
+			? st::dialogsForumIconActive
+			: context.selected
+			? st::dialogsForumIconOver
+			: st::dialogsForumIcon);
+	} else {
+		return &(context.active
+			? st::dialogsChatIconActive
+			: context.selected
+			? st::dialogsChatIconOver
+			: st::dialogsChatIcon);
 	}
 	return nullptr;
 }
diff --git a/Telegram/SourceFiles/window/notifications_manager_default.cpp b/Telegram/SourceFiles/window/notifications_manager_default.cpp
index 3017e473d..95ac393ef 100644
--- a/Telegram/SourceFiles/window/notifications_manager_default.cpp
+++ b/Telegram/SourceFiles/window/notifications_manager_default.cpp
@@ -870,7 +870,9 @@ void Notification::updateNotifyDisplay() {
 			}
 			if (const auto chatTypeIcon = Dialogs::Ui::ChatTypeIcon(_history->peer)) {
 				chatTypeIcon->paint(p, rectForName.topLeft(), w);
-				rectForName.setLeft(rectForName.left() + st::dialogsChatTypeSkip);
+				rectForName.setLeft(rectForName.left()
+					+ chatTypeIcon->width()
+					+ st::dialogsChatTypeSkip);
 			}
 		}
 
diff --git a/Telegram/SourceFiles/window/themes/window_theme_preview.cpp b/Telegram/SourceFiles/window/themes/window_theme_preview.cpp
index 514a59954..797273504 100644
--- a/Telegram/SourceFiles/window/themes/window_theme_preview.cpp
+++ b/Telegram/SourceFiles/window/themes/window_theme_preview.cpp
@@ -700,7 +700,9 @@ void Generator::paintRow(const Row &row) {
 	})();
 	if (chatTypeIcon) {
 		(*chatTypeIcon)[_palette].paint(*_p, rectForName.topLeft(), fullWidth);
-		rectForName.setLeft(rectForName.left() + st::dialogsChatTypeSkip);
+		rectForName.setLeft(rectForName.left()
+			+ chatTypeIcon->width()
+			+ st::dialogsChatTypeSkip);
 	}
 
 	auto texttop = y + st.textTop;