[Improvement] Allow to mention by name from autocomplete
This commit is contained in:
parent
a23dd642a6
commit
278cde7a8e
5 changed files with 38 additions and 9 deletions
|
|
@ -864,6 +864,10 @@ bool FieldAutocomplete::eventFilter(QObject *obj, QEvent *e) {
|
|||
? _moderateKeyActivateCallback(key)
|
||||
: false;
|
||||
}
|
||||
} else if (ev->modifiers() & Qt::ControlModifier) {
|
||||
if (ev->key() == Qt::Key_Enter || ev->key() == Qt::Key_Return) {
|
||||
return _inner->chooseSelected(ChooseMethod::ByCtrlEnter);
|
||||
}
|
||||
}
|
||||
}
|
||||
return QWidget::eventFilter(obj, e);
|
||||
|
|
@ -1303,7 +1307,7 @@ void FieldAutocomplete::Inner::setRecentInlineBotsInRows(int32 bots) {
|
|||
|
||||
void FieldAutocomplete::Inner::mousePressEvent(QMouseEvent *e) {
|
||||
selectByMouse(e->globalPos());
|
||||
if (e->button() == Qt::LeftButton) {
|
||||
if (e->button() == Qt::LeftButton || e->button() == Qt::RightButton) {
|
||||
if (_overDelete && _sel >= 0 && _sel < (_mrows->empty() ? _hrows->size() : _recentInlineBotsInRows)) {
|
||||
bool removed = false;
|
||||
if (_mrows->empty()) {
|
||||
|
|
@ -1333,7 +1337,15 @@ void FieldAutocomplete::Inner::mousePressEvent(QMouseEvent *e) {
|
|||
|
||||
selectByMouse(e->globalPos());
|
||||
} else if (_srows->empty()) {
|
||||
chooseSelected(FieldAutocomplete::ChooseMethod::ByClick);
|
||||
if (e->button() == Qt::LeftButton) {
|
||||
if (e->modifiers() & Qt::ControlModifier) {
|
||||
chooseSelected(FieldAutocomplete::ChooseMethod::ByCtrlClick);
|
||||
} else {
|
||||
chooseSelected(FieldAutocomplete::ChooseMethod::ByClick);
|
||||
}
|
||||
} else if (e->button() == Qt::RightButton) {
|
||||
chooseSelected(FieldAutocomplete::ChooseMethod::ByRightClick);
|
||||
}
|
||||
} else {
|
||||
_down = _sel;
|
||||
_previewTimer.callOnce(QApplication::startDragTime());
|
||||
|
|
@ -1356,7 +1368,15 @@ void FieldAutocomplete::Inner::mouseReleaseEvent(QMouseEvent *e) {
|
|||
|
||||
if (_sel < 0 || _sel != pressed || _srows->empty()) return;
|
||||
|
||||
chooseSelected(FieldAutocomplete::ChooseMethod::ByClick);
|
||||
if (e->button() == Qt::LeftButton) {
|
||||
if (e->modifiers() & Qt::ControlModifier) {
|
||||
chooseSelected(FieldAutocomplete::ChooseMethod::ByCtrlClick);
|
||||
} else {
|
||||
chooseSelected(FieldAutocomplete::ChooseMethod::ByClick);
|
||||
}
|
||||
} else if (e->button() == Qt::RightButton) {
|
||||
chooseSelected(FieldAutocomplete::ChooseMethod::ByRightClick);
|
||||
}
|
||||
}
|
||||
|
||||
void FieldAutocomplete::Inner::contextMenuEvent(QContextMenuEvent *e) {
|
||||
|
|
|
|||
|
|
@ -85,6 +85,9 @@ public:
|
|||
ByEnter,
|
||||
ByTab,
|
||||
ByClick,
|
||||
ByRightClick,
|
||||
ByCtrlEnter,
|
||||
ByCtrlClick,
|
||||
};
|
||||
struct MentionChosen {
|
||||
not_null<UserData*> user;
|
||||
|
|
|
|||
|
|
@ -452,7 +452,10 @@ HistoryWidget::HistoryWidget(
|
|||
) | rpl::start_with_next([=](FieldAutocomplete::MentionChosen data) {
|
||||
auto replacement = QString();
|
||||
auto entityTag = QString();
|
||||
if (data.mention.isEmpty()) {
|
||||
if (data.mention.isEmpty()
|
||||
|| data.method == FieldAutocomplete::ChooseMethod::ByRightClick
|
||||
|| data.method == FieldAutocomplete::ChooseMethod::ByCtrlEnter
|
||||
|| data.method == FieldAutocomplete::ChooseMethod::ByCtrlClick) {
|
||||
replacement = data.user->firstName;
|
||||
if (replacement.isEmpty()) {
|
||||
replacement = data.user->name();
|
||||
|
|
@ -7671,14 +7674,14 @@ void HistoryWidget::mentionUser(PeerData *peer) {
|
|||
|
||||
const auto user = peer->asUser();
|
||||
QString replacement, entityTag;
|
||||
if (user->username.isEmpty()) {
|
||||
if (user->username().isEmpty()) {
|
||||
replacement = user->firstName;
|
||||
if (replacement.isEmpty()) {
|
||||
replacement = user->name;
|
||||
replacement = user->name();
|
||||
}
|
||||
entityTag = PrepareMentionTag(user);
|
||||
} else {
|
||||
replacement = '@' + user->username;
|
||||
replacement = '@' + user->username();
|
||||
}
|
||||
_field->insertTag(replacement, entityTag);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1682,7 +1682,10 @@ void ComposeControls::initAutocomplete() {
|
|||
_autocomplete->mentionChosen(
|
||||
) | rpl::start_with_next([=](FieldAutocomplete::MentionChosen data) {
|
||||
const auto user = data.user;
|
||||
if (data.mention.isEmpty()) {
|
||||
if (data.mention.isEmpty()
|
||||
|| data.method == FieldAutocomplete::ChooseMethod::ByRightClick
|
||||
|| data.method == FieldAutocomplete::ChooseMethod::ByCtrlEnter
|
||||
|| data.method == FieldAutocomplete::ChooseMethod::ByCtrlClick) {
|
||||
_field->insertTag(
|
||||
user->firstName.isEmpty() ? user->name() : user->firstName,
|
||||
PrepareMentionTag(user));
|
||||
|
|
|
|||
|
|
@ -2797,7 +2797,7 @@ int MainWidget::backgroundFromY() const {
|
|||
}
|
||||
|
||||
void MainWidget::mentionUser(PeerData *peer) {
|
||||
if (!_history->peer() || !_history->peer()->canWrite()) {
|
||||
if (!_history->peer() || !Data::CanSendTexts(_history->peer())) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue