From 6db7840fa73df88a3cd1c46733d75ad887377b2b Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Sat, 12 Nov 2022 14:13:34 +0300 Subject: [PATCH] Added translate ability to context menu. --- Telegram/Resources/icons/menu/translate.png | Bin 0 -> 604 bytes .../Resources/icons/menu/translate@2x.png | Bin 0 -> 1153 bytes .../Resources/icons/menu/translate@3x.png | Bin 0 -> 1702 bytes Telegram/Resources/langs/lang.strings | 2 ++ .../history/history_inner_widget.cpp | 27 ++++++++++++++++++ .../view/history_view_context_menu.cpp | 24 ++++++++++++++++ Telegram/SourceFiles/ui/menu_icons.style | 1 + 7 files changed, 54 insertions(+) create mode 100644 Telegram/Resources/icons/menu/translate.png create mode 100644 Telegram/Resources/icons/menu/translate@2x.png create mode 100644 Telegram/Resources/icons/menu/translate@3x.png diff --git a/Telegram/Resources/icons/menu/translate.png b/Telegram/Resources/icons/menu/translate.png new file mode 100644 index 0000000000000000000000000000000000000000..b3752197656500e9259df9e5fcb11a7be41f4936 GIT binary patch literal 604 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1SIoCSFHz9jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDlgf?3kyEV~B;| z+hFh2je#OxcgS`6v`p#n@l8=lUB$!eBT;eWijU-sz&eIyPxv*M+1Q*OiAz+pOq%3A z!$WTMyWIPi-=1Fl?#(^psPws8uivbmUt6)qey0rIas4Z~CQ|v^XUFK(UwqwM(&=(2 zZ~Nsit*M7r#OTHAi9h)KljlN)NzqQ3%!m)UCUX6vT&&e*GJO5VmFJ)DKbo{QEZach zOqy}n2bSG;^BNr-l-6GdGUC^N)DF-PSr?|g#KG-vo&DsK7ryZdaJ620z13@}laGar zo0U}Wv)+nHi!|Ss?G9S`qGZ?IJaHbjmmCaBeAJR>y5C4J$T6FJG9_sJ^~kwlt8HcY zb~LNXCz?omKHU5Gqs3}(waK4<%IvwBlUA9hBi3zb*L_q;sB@0r@(``oB*oU>C04y| zi_fMR&punkF1$KK%dm9u#S=*z8%lP@R2&If$@1o7#kb$K&kj8Q+&INUMdT=>)m*>z z*MnDIEos}|bY+9<{;s2o;?|qb^fBOKVOsK#!K3kWU_$xcxR03`d(EGggj&sgSGN1a zm*Sf_W?SxLZJqQ$RY9n8+UceD-=|-_nq@lw{N^*oJ(}yUX4&t0U1G)Edg$|mde+hh Ye3rBJO|?JtgcB6Ap00i_>zopr0CE%ZO8@`> literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/menu/translate@2x.png b/Telegram/Resources/icons/menu/translate@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b4b7b9a26a8ee975858739844d25021e6db9db53 GIT binary patch literal 1153 zcmV-{1b+L8P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FrWhf1ONa40RR91FaQ7m0NXcg3;+NF>q$gGR9Fe^S4${-Q5ZKff3NYZ zNfPDbAR9Od))7Q=X~e7xoJbofR=&(ECU7w@2k`4+S=M;Vq#WTR~4wM zuacIQ_VxAk@$q3YnN+u~S76c4&ktI9z23*iM}fLn<^_OAkNFn%lrE~m+x}0rly9LI4LQ~<<8)s zqoZSBV8Gkko9oPAFdQErBcQptIW9qE(AU?O-ri!da7`B$77`&VD~n4|ADoz&fJ@Xw zbab@DI?}Vbxe4jc&W=Rn!pHFN@W;nTc%7M%cigK1N1HE-o%G zM@*=0uDRacUJ$UXxLT3o(b18h;J8L)!GM4OmjB`5VH8thV&c`+6~))r*C)9hp#R_9 z-9d^b2%~vBQ313`Xv@Ma!%1Xj%b3x_gra(a47*1uOVTJPlKBuS^HrkKt3^>u(ND=Q3XX=wq1PXja}20A^-$;qMS z07G?kbzFTcUu$bCHW7-32&t*56k=If8B+-f2|>XD$0rm6ou1%23lsPE_lQiaj5ClC zP-LW)k&%IKCN|LWfS;Y6NeYfB+Mg5^72#GIA0Ka@YGvRei*p%{1w+B*-)i3Ze|DV} z1cVJMXPAGLp?8L^#?(OY4V(>>C6b&T?_gbzYEGX@g zo}L~qL1l1!d>jFZ%XVmJ2%MXn8>7*vvU`cS;NW1|*zN7@5|QmA4mQdncTH`XKb>c1 zXTuXttcZvRv8}bWH882Gh?zf<;x2%r9CskQR#4H12ETTh8bQl|mH{mTzn+1=tb54r TB7$#%00000NkvXXu0mjfG^`B- literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/menu/translate@3x.png b/Telegram/Resources/icons/menu/translate@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..1ee1ff844d53d54d6dd393c9c9a422652c5164c7 GIT binary patch literal 1702 zcmV;X23h%uP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91NT34%1ONa40RR91NB{r;0FW_8?*IS>5J^NqRA>e5T1iM%Ul@0&6iY+J zsf;uboN&q$pU(NGuWoQi2-4yc(; zVu_~xe{k^Y@ZR&@`~L6w-V?4Hzk9yv_kHKw?|kRnXJjP*$r+F{AZI|%fSdt219ApV zbp}jLO;0s`72waGKi}WqzrVj>6qaq-DUqhviiJY3V+IMNq-$L8kdj>L5Fe{XMZadA;woBO7e*6)vH&7gM&13YKRLLF8uuYldZl_pFWwG2rU-P zqdHmZJU;B*mX?-mD3&I`Q5vBY`U=O92^`BB@!M7R?(X` zZ-DaS$B%Y)c0B7iIwmHDN?=P%%W-0Q9{2Y4CX|hhjiP8UU6YfOq~h=IFRG#+0rVnk zYikTBUX`0SZwljxj*h0N+S=NLh4su$Nl78B?skCQJbC?K)+_V(k%3}_r%?Vmq?80hcczuVi}D}%dq>C*Q0Hj_ayba!`GmNCSU z2M-?5Y&11BDMM^-ZYF{9@^WPX10BIpa(#WBpeH6K@<3x_V~K_C37rSeHFP>DDT&ad zV{&tIV~8(bzWnv;S7M>(H1tT6@nI2C0HdR$>|om4+e?FL?a1h6ii(P!J$sgulY@$? z>`r$hSYtTgP#9HJRi&k+^timdY;A2V9Stfc={|k>RJ!7cNc#Et?e6XpAne+V27#lB zbeEx_p=5*+o}Ql4)lWn+D=SL@6CN>jYB|FcDHt(``^k=u4jxudPmfwBR2v(c-@kwJ z7C>W%#3ig++0nAFqod=(!U7NL^XJdLzP{4k z+6oK|l;R9?`~LlVru*yHFB~9n8^<0;MnYs>cMu7A{qp6D z$|8X&dh+B6iGe_=yng*U4+w|UrKKe%^W(=4zPR%n0Gb=MHV@u~RQmq?`?zW+xF{7K z9v%Y9IELadM)KX=-MsMKyLX9IQ&YpUKsPir5H~V1Qh}?rM>M#&y&+E^@FGe1z=vK5 zO(RppA&m#r+1W`3QRR6S=-}XB;-bJPaJBaM@Zm#p0|Kpvm6er5>$s?^sHmu{ti%E% z6<1eRntWX8(Kt__oG_;-Feo!TOMw3OIZHr@SYcsdL<3@ee!lbz-ObHS+<%ZdBQi2F z=&l=|tW+M`hKGmQjU7I|p|q5hl_?m}!ee@RIug9Ivy+;ds<}CQ8H6c*35e3DSOPa< z8bLz$L|5<{88R|TNJtQkL|GszDoR7YC$8St*QbnIbfl}ROA0cP?_*L-{686-AW>17 zE?UjP!a`v?c%|95HAIe^l@A|22+Qk@iyH)*94V_SK0co0QC;7j$Qgg#w04OO;}J9;EXd zPBgfIl!(T~#f5hBfq?;uTDlWMyG(D(%aN5addAction(tr::lng_context_translate_selected({}), [=] { + _controller->show(Box( + Ui::TranslateBox, + item->history()->peer, + MsgId(), + getSelectedText().rich)); + }, &st::menuIconTranslate); } addItemActions(item, item); if (!selectedState.count) { @@ -2358,6 +2366,13 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { [=] { copySelectedText(); }, &st::menuIconCopy); } + _menu->addAction(tr::lng_context_translate_selected({}), [=] { + _controller->show(Box( + Ui::TranslateBox, + item->history()->peer, + MsgId(), + getSelectedText().rich)); + }, &st::menuIconTranslate); addItemActions(item, item); } else { addItemActions(item, albumPartItem); @@ -2415,6 +2430,18 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { copyContextText(itemId); }, &st::menuIconCopy); } + if (!item->isService() + && view + && actionText.isEmpty() + && (view->hasVisibleText() || mediaHasTextForCopy)) { + _menu->addAction(tr::lng_context_translate(tr::now), [=] { + _controller->show(Box( + Ui::TranslateBox, + item->history()->peer, + item->fullId().msg, + item->originalText())); + }, &st::menuIconTranslate); + } } } if (!actionText.isEmpty() && !hasCopyRestriction(item)) { diff --git a/Telegram/SourceFiles/history/view/history_view_context_menu.cpp b/Telegram/SourceFiles/history/view/history_view_context_menu.cpp index 7ed6de1f2..06497c91a 100644 --- a/Telegram/SourceFiles/history/view/history_view_context_menu.cpp +++ b/Telegram/SourceFiles/history/view/history_view_context_menu.cpp @@ -41,6 +41,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "boxes/report_messages_box.h" #include "boxes/sticker_set_box.h" #include "boxes/stickers_box.h" +#include "boxes/translate_box.h" #include "data/data_photo.h" #include "data/data_photo_media.h" #include "data/data_document.h" @@ -1004,6 +1005,18 @@ base::unique_qptr FillContextMenu( } }, &st::menuIconCopy); } + if (request.overSelection) { + const auto owner = &view->history()->owner(); + result->addAction(tr::lng_context_translate_selected(tr::now), [=] { + if (const auto item = owner->message(itemId)) { + list->controller()->show(Box( + Ui::TranslateBox, + item->history()->peer, + MsgId(), + list->getSelectedText().rich)); + } + }, &st::menuIconTranslate); + } AddTopMessageActions(result, request, list); if (lnkPhoto && request.selectedItems.empty()) { @@ -1038,6 +1051,17 @@ base::unique_qptr FillContextMenu( } }, &st::menuIconCopy); } + if (!link && (view->hasVisibleText() || mediaHasTextForCopy)) { + result->addAction(tr::lng_context_translate(tr::now), [=] { + if (const auto item = owner->message(itemId)) { + list->controller()->show(Box( + Ui::TranslateBox, + item->history()->peer, + item->fullId().msg, + item->originalText())); + } + }, &st::menuIconTranslate); + } } if (!view || !list->hasCopyRestriction(view->data())) { diff --git a/Telegram/SourceFiles/ui/menu_icons.style b/Telegram/SourceFiles/ui/menu_icons.style index 4871e9f8c..f11d4811f 100644 --- a/Telegram/SourceFiles/ui/menu_icons.style +++ b/Telegram/SourceFiles/ui/menu_icons.style @@ -92,6 +92,7 @@ menuIconSearch: icon {{ "menu/search", menuIconColor }}; menuIconStartStream: icon {{ "menu/start_stream", menuIconColor }}; menuIconStartStreamWith: icon {{ "menu/start_stream_with", menuIconColor }}; menuIconVideoChat: icon {{ "menu/video_chat", menuIconColor }}; +menuIconTranslate: icon {{ "menu/translate", menuIconColor }}; menuIconTTLAny: icon {{ "menu/auto_delete_plain", menuIconColor }}; menuIconTTLAnyTextPosition: point(11px, 22px);