[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)
|
? _moderateKeyActivateCallback(key)
|
||||||
: false;
|
: 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);
|
return QWidget::eventFilter(obj, e);
|
||||||
|
|
@ -1303,7 +1307,7 @@ void FieldAutocomplete::Inner::setRecentInlineBotsInRows(int32 bots) {
|
||||||
|
|
||||||
void FieldAutocomplete::Inner::mousePressEvent(QMouseEvent *e) {
|
void FieldAutocomplete::Inner::mousePressEvent(QMouseEvent *e) {
|
||||||
selectByMouse(e->globalPos());
|
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)) {
|
if (_overDelete && _sel >= 0 && _sel < (_mrows->empty() ? _hrows->size() : _recentInlineBotsInRows)) {
|
||||||
bool removed = false;
|
bool removed = false;
|
||||||
if (_mrows->empty()) {
|
if (_mrows->empty()) {
|
||||||
|
|
@ -1333,7 +1337,15 @@ void FieldAutocomplete::Inner::mousePressEvent(QMouseEvent *e) {
|
||||||
|
|
||||||
selectByMouse(e->globalPos());
|
selectByMouse(e->globalPos());
|
||||||
} else if (_srows->empty()) {
|
} 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 {
|
} else {
|
||||||
_down = _sel;
|
_down = _sel;
|
||||||
_previewTimer.callOnce(QApplication::startDragTime());
|
_previewTimer.callOnce(QApplication::startDragTime());
|
||||||
|
|
@ -1356,7 +1368,15 @@ void FieldAutocomplete::Inner::mouseReleaseEvent(QMouseEvent *e) {
|
||||||
|
|
||||||
if (_sel < 0 || _sel != pressed || _srows->empty()) return;
|
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) {
|
void FieldAutocomplete::Inner::contextMenuEvent(QContextMenuEvent *e) {
|
||||||
|
|
|
||||||
|
|
@ -85,6 +85,9 @@ public:
|
||||||
ByEnter,
|
ByEnter,
|
||||||
ByTab,
|
ByTab,
|
||||||
ByClick,
|
ByClick,
|
||||||
|
ByRightClick,
|
||||||
|
ByCtrlEnter,
|
||||||
|
ByCtrlClick,
|
||||||
};
|
};
|
||||||
struct MentionChosen {
|
struct MentionChosen {
|
||||||
not_null<UserData*> user;
|
not_null<UserData*> user;
|
||||||
|
|
|
||||||
|
|
@ -452,7 +452,10 @@ HistoryWidget::HistoryWidget(
|
||||||
) | rpl::start_with_next([=](FieldAutocomplete::MentionChosen data) {
|
) | rpl::start_with_next([=](FieldAutocomplete::MentionChosen data) {
|
||||||
auto replacement = QString();
|
auto replacement = QString();
|
||||||
auto entityTag = 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;
|
replacement = data.user->firstName;
|
||||||
if (replacement.isEmpty()) {
|
if (replacement.isEmpty()) {
|
||||||
replacement = data.user->name();
|
replacement = data.user->name();
|
||||||
|
|
@ -7671,14 +7674,14 @@ void HistoryWidget::mentionUser(PeerData *peer) {
|
||||||
|
|
||||||
const auto user = peer->asUser();
|
const auto user = peer->asUser();
|
||||||
QString replacement, entityTag;
|
QString replacement, entityTag;
|
||||||
if (user->username.isEmpty()) {
|
if (user->username().isEmpty()) {
|
||||||
replacement = user->firstName;
|
replacement = user->firstName;
|
||||||
if (replacement.isEmpty()) {
|
if (replacement.isEmpty()) {
|
||||||
replacement = user->name;
|
replacement = user->name();
|
||||||
}
|
}
|
||||||
entityTag = PrepareMentionTag(user);
|
entityTag = PrepareMentionTag(user);
|
||||||
} else {
|
} else {
|
||||||
replacement = '@' + user->username;
|
replacement = '@' + user->username();
|
||||||
}
|
}
|
||||||
_field->insertTag(replacement, entityTag);
|
_field->insertTag(replacement, entityTag);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1682,7 +1682,10 @@ void ComposeControls::initAutocomplete() {
|
||||||
_autocomplete->mentionChosen(
|
_autocomplete->mentionChosen(
|
||||||
) | rpl::start_with_next([=](FieldAutocomplete::MentionChosen data) {
|
) | rpl::start_with_next([=](FieldAutocomplete::MentionChosen data) {
|
||||||
const auto user = data.user;
|
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(
|
_field->insertTag(
|
||||||
user->firstName.isEmpty() ? user->name() : user->firstName,
|
user->firstName.isEmpty() ? user->name() : user->firstName,
|
||||||
PrepareMentionTag(user));
|
PrepareMentionTag(user));
|
||||||
|
|
|
||||||
|
|
@ -2797,7 +2797,7 @@ int MainWidget::backgroundFromY() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWidget::mentionUser(PeerData *peer) {
|
void MainWidget::mentionUser(PeerData *peer) {
|
||||||
if (!_history->peer() || !_history->peer()->canWrite()) {
|
if (!_history->peer() || !Data::CanSendTexts(_history->peer())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue