[Improvement] Mention user from context menu

This commit is contained in:
Eric Kotato 2022-09-11 02:32:20 +03:00 committed by Eric Kotato
parent 6abe6de21f
commit 97b8081b32
10 changed files with 41 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

View file

@ -144,6 +144,7 @@
"ktg_forward_subtitle_uncaptioned": "uncaptioned",
"ktg_forward_subtitle_group_all_media": "as albums",
"ktg_forward_subtitle_separate_messages": "one by one",
"ktg_profile_mention_user": "Mention user",
"ktg_filters_exclude_not_owned": "Not owned",
"ktg_filters_exclude_not_admin": "Not administrated",
"ktg_filters_exclude_owned": "Owned",

View file

@ -1657,6 +1657,14 @@ base::unique_qptr<Ui::PopupMenu> ParticipantsBoxController::rowContextMenu(
: Dialogs::Key(),
user);
}), &st::menuIconSearch);
if (const auto openedPeer = mainwidget->peer()) {
if (Data::CanSendTexts(openedPeer) && participant->isUser()) {
result->addAction(
ktr("ktg_profile_mention_user"),
crl::guard(this, [=] { mainwidget->mentionUser(user); }),
&st::menuIconMention);
}
}
}
}
if (const auto by = _additional.restrictedBy(participant)) {

View file

@ -7480,6 +7480,25 @@ bool HistoryWidget::sendExistingPhoto(
return true;
}
void HistoryWidget::mentionUser(PeerData *peer) {
if (!peer || !peer->isUser()) {
return;
}
const auto user = peer->asUser();
QString replacement, entityTag;
if (user->username.isEmpty()) {
replacement = user->firstName;
if (replacement.isEmpty()) {
replacement = user->name;
}
entityTag = PrepareMentionTag(user);
} else {
replacement = '@' + user->username;
}
_field->insertTag(replacement, entityTag);
}
void HistoryWidget::showInfoTooltip(
const TextWithEntities &text,
Fn<void()> hiddenCallback) {

View file

@ -272,6 +272,8 @@ public:
not_null<PhotoData*> photo,
Api::SendOptions options);
void mentionUser(PeerData *peer);
void showInfoTooltip(
const TextWithEntities &text,
Fn<void()> hiddenCallback);

View file

@ -2697,6 +2697,14 @@ int MainWidget::backgroundFromY() const {
return -getMainSectionTop();
}
void MainWidget::mentionUser(PeerData *peer) {
if (!_history->peer() || !_history->peer()->canWrite()) {
return;
}
_history->mentionUser(peer);
}
bool MainWidget::contentOverlapped(const QRect &globalRect) {
return _history->contentOverlapped(globalRect)
|| _playerPlaylist->overlaps(globalRect);

View file

@ -203,6 +203,8 @@ public:
bool contentOverlapped(const QRect &globalRect);
void mentionUser(PeerData *peer);
void showChooseReportMessages(
not_null<PeerData*> peer,
Ui::ReportReason reason,

View file

@ -79,6 +79,7 @@ menuIconPersonal: icon {{ "menu/personal", menuIconColor }};
menuIconPorn: icon {{ "menu/porn", menuIconColor }};
menuIconViolence: icon {{ "menu/violence", menuIconColor }};
menuIconHide: icon {{ "menu/hide", menuIconColor }};
menuIconMention: icon {{ "menu/mention", menuSubmenuArrowFg }};
menuIconMuteFor: icon {{ "menu/mute_for", menuIconColor }};
menuIconSilent: icon {{ "menu/silent", menuIconColor }};
menuIconCustomize: icon {{ "menu/customize", menuIconColor }};