[Improvement] Allow to mention by name from autocomplete
This commit is contained in:
parent
0a4eebfa98
commit
6fb484d618
5 changed files with 39 additions and 10 deletions
|
|
@ -767,6 +767,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);
|
||||||
|
|
@ -1132,7 +1136,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()) {
|
||||||
|
|
@ -1162,7 +1166,15 @@ void FieldAutocomplete::Inner::mousePressEvent(QMouseEvent *e) {
|
||||||
|
|
||||||
selectByMouse(e->globalPos());
|
selectByMouse(e->globalPos());
|
||||||
} else if (_srows->empty()) {
|
} else if (_srows->empty()) {
|
||||||
|
if (e->button() == Qt::LeftButton) {
|
||||||
|
if (e->modifiers() & Qt::ControlModifier) {
|
||||||
|
chooseSelected(FieldAutocomplete::ChooseMethod::ByCtrlClick);
|
||||||
|
} else {
|
||||||
chooseSelected(FieldAutocomplete::ChooseMethod::ByClick);
|
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());
|
||||||
|
|
@ -1185,7 +1197,15 @@ void FieldAutocomplete::Inner::mouseReleaseEvent(QMouseEvent *e) {
|
||||||
|
|
||||||
if (_sel < 0 || _sel != pressed || _srows->empty()) return;
|
if (_sel < 0 || _sel != pressed || _srows->empty()) return;
|
||||||
|
|
||||||
|
if (e->button() == Qt::LeftButton) {
|
||||||
|
if (e->modifiers() & Qt::ControlModifier) {
|
||||||
|
chooseSelected(FieldAutocomplete::ChooseMethod::ByCtrlClick);
|
||||||
|
} else {
|
||||||
chooseSelected(FieldAutocomplete::ChooseMethod::ByClick);
|
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) {
|
||||||
|
|
|
||||||
|
|
@ -69,6 +69,9 @@ public:
|
||||||
ByEnter,
|
ByEnter,
|
||||||
ByTab,
|
ByTab,
|
||||||
ByClick,
|
ByClick,
|
||||||
|
ByRightClick,
|
||||||
|
ByCtrlEnter,
|
||||||
|
ByCtrlClick,
|
||||||
};
|
};
|
||||||
struct MentionChosen {
|
struct MentionChosen {
|
||||||
not_null<UserData*> user;
|
not_null<UserData*> user;
|
||||||
|
|
|
||||||
|
|
@ -389,7 +389,7 @@ HistoryWidget::HistoryWidget(
|
||||||
|
|
||||||
_fieldAutocomplete->mentionChosen(
|
_fieldAutocomplete->mentionChosen(
|
||||||
) | rpl::start_with_next([=](FieldAutocomplete::MentionChosen data) {
|
) | rpl::start_with_next([=](FieldAutocomplete::MentionChosen data) {
|
||||||
insertMention(data.user);
|
insertMention(data.user, data.method);
|
||||||
}, lifetime());
|
}, lifetime());
|
||||||
|
|
||||||
_fieldAutocomplete->hashtagChosen(
|
_fieldAutocomplete->hashtagChosen(
|
||||||
|
|
@ -1420,9 +1420,12 @@ void HistoryWidget::start() {
|
||||||
session().data().stickers().notifySavedGifsUpdated();
|
session().data().stickers().notifySavedGifsUpdated();
|
||||||
}
|
}
|
||||||
|
|
||||||
void HistoryWidget::insertMention(UserData *user) {
|
void HistoryWidget::insertMention(UserData *user, FieldAutocomplete::ChooseMethod method) {
|
||||||
QString replacement, entityTag;
|
QString replacement, entityTag;
|
||||||
if (user->username.isEmpty()) {
|
if (user->username.isEmpty()
|
||||||
|
|| method == FieldAutocomplete::ChooseMethod::ByRightClick
|
||||||
|
|| method == FieldAutocomplete::ChooseMethod::ByCtrlEnter
|
||||||
|
|| method == FieldAutocomplete::ChooseMethod::ByCtrlClick) {
|
||||||
replacement = user->firstName;
|
replacement = user->firstName;
|
||||||
if (replacement.isEmpty()) {
|
if (replacement.isEmpty()) {
|
||||||
replacement = user->name;
|
replacement = user->name;
|
||||||
|
|
|
||||||
|
|
@ -357,7 +357,7 @@ private:
|
||||||
void insertHashtagOrBotCommand(
|
void insertHashtagOrBotCommand(
|
||||||
QString str,
|
QString str,
|
||||||
FieldAutocomplete::ChooseMethod method);
|
FieldAutocomplete::ChooseMethod method);
|
||||||
void insertMention(UserData *user);
|
void insertMention(UserData *user, FieldAutocomplete::ChooseMethod method);
|
||||||
void cancelInlineBot();
|
void cancelInlineBot();
|
||||||
void saveDraft(bool delayed = false);
|
void saveDraft(bool delayed = false);
|
||||||
void saveCloudDraft();
|
void saveCloudDraft();
|
||||||
|
|
|
||||||
|
|
@ -1220,8 +1220,11 @@ void ComposeControls::initAutocomplete() {
|
||||||
_field->insertTag(string);
|
_field->insertTag(string);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
const auto insertMention = [=](not_null<UserData*> user) {
|
const auto insertMention = [=](not_null<UserData*> user, FieldAutocomplete::ChooseMethod method) {
|
||||||
if (user->username.isEmpty()) {
|
if (user->username.isEmpty()
|
||||||
|
|| method == FieldAutocomplete::ChooseMethod::ByRightClick
|
||||||
|
|| method == FieldAutocomplete::ChooseMethod::ByCtrlEnter
|
||||||
|
|| 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));
|
||||||
|
|
@ -1232,7 +1235,7 @@ void ComposeControls::initAutocomplete() {
|
||||||
|
|
||||||
_autocomplete->mentionChosen(
|
_autocomplete->mentionChosen(
|
||||||
) | rpl::start_with_next([=](FieldAutocomplete::MentionChosen data) {
|
) | rpl::start_with_next([=](FieldAutocomplete::MentionChosen data) {
|
||||||
insertMention(data.user);
|
insertMention(data.user, data.method);
|
||||||
}, _autocomplete->lifetime());
|
}, _autocomplete->lifetime());
|
||||||
|
|
||||||
_autocomplete->hashtagChosen(
|
_autocomplete->hashtagChosen(
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue