mirror of
https://github.com/telegramdesktop/tdesktop
synced 2025-08-31 22:46:10 +00:00
Tab toggles search focus, Backspace doesn't focus.
This commit is contained in:
@@ -98,6 +98,15 @@ base::options::toggle OptionForumHideChatsList({
|
||||
.description = "Don't keep a narrow column of chats list.",
|
||||
});
|
||||
|
||||
[[nodiscard]] bool RedirectTextToSearch(const QString &text) {
|
||||
for (const auto &ch : text) {
|
||||
if (ch.unicode() >= 32) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
const char kOptionForumHideChatsList[] = "forum-hide-chats-list";
|
||||
@@ -454,7 +463,6 @@ Widget::Widget(
|
||||
loadMoreBlockedByDate();
|
||||
}, lifetime());
|
||||
|
||||
_search->setFocusPolicy(Qt::StrongFocus);
|
||||
_search->customUpDown(true);
|
||||
|
||||
updateJumpToDateVisibility(true);
|
||||
@@ -1514,16 +1522,17 @@ void Widget::checkUpdateStatus() {
|
||||
updateControlsGeometry();
|
||||
}
|
||||
|
||||
void Widget::setInnerFocus() {
|
||||
void Widget::setInnerFocus(bool unfocusSearch) {
|
||||
if (_childList) {
|
||||
_childList->setInnerFocus();
|
||||
} else if ((_openedFolder || _openedForum)
|
||||
&& _subsectionTopBar->searchSetFocus()) {
|
||||
return;
|
||||
} else if (!_search->getLastText().isEmpty()
|
||||
|| _searchInChat
|
||||
|| _searchHasFocus
|
||||
|| _searchSuggestionsLocked) {
|
||||
} else if (!unfocusSearch
|
||||
&& (!_search->getLastText().isEmpty()
|
||||
|| _searchInChat
|
||||
|| _searchHasFocus
|
||||
|| _searchSuggestionsLocked)) {
|
||||
_search->setFocus();
|
||||
} else {
|
||||
setFocus();
|
||||
@@ -2874,7 +2883,7 @@ bool Widget::setSearchInChat(
|
||||
if (_searchInChat || !_search->getLastText().isEmpty()) {
|
||||
_search->setFocus();
|
||||
} else {
|
||||
setFocus();
|
||||
setInnerFocus(true);
|
||||
}
|
||||
updateForceDisplayWide();
|
||||
return true;
|
||||
@@ -3255,7 +3264,7 @@ void Widget::keyPressEvent(QKeyEvent *e) {
|
||||
//} else {
|
||||
// e->ignore();
|
||||
//}
|
||||
} else if (e->key() == Qt::Key_Backspace
|
||||
} else if ((e->key() == Qt::Key_Backspace || e->key() == Qt::Key_Tab)
|
||||
&& _searchHasFocus
|
||||
&& !_searchInChat) {
|
||||
escape();
|
||||
@@ -3339,7 +3348,7 @@ bool Widget::redirectKeyToSearch(QKeyEvent *e) const {
|
||||
}
|
||||
const auto character = !(e->modifiers() & ~Qt::ShiftModifier)
|
||||
&& (e->key() != Qt::Key_Shift)
|
||||
&& !e->text().isEmpty();
|
||||
&& RedirectTextToSearch(e->text());
|
||||
if (character) {
|
||||
return true;
|
||||
} else if (e != QKeySequence::Paste) {
|
||||
@@ -3467,7 +3476,7 @@ bool Widget::cancelSearch() {
|
||||
if (!clearingQuery
|
||||
&& _subsectionTopBar
|
||||
&& _subsectionTopBar->toggleSearch(false, anim::type::normal)) {
|
||||
setFocus();
|
||||
setInnerFocus(true);
|
||||
clearingInChat = true;
|
||||
}
|
||||
const auto clearSearchFocus = !_searchInChat
|
||||
@@ -3478,7 +3487,7 @@ bool Widget::cancelSearch() {
|
||||
}
|
||||
if (!_suggestions && clearSearchFocus) {
|
||||
// Don't create suggestions in unfocus case.
|
||||
setFocus();
|
||||
setInnerFocus(true);
|
||||
}
|
||||
_lastSearchPeer = nullptr;
|
||||
_lastSearchId = _lastSearchMigratedId = 0;
|
||||
@@ -3486,7 +3495,7 @@ bool Widget::cancelSearch() {
|
||||
clearSearchField();
|
||||
applySearchUpdate();
|
||||
if (_suggestions && clearSearchFocus) {
|
||||
setFocus();
|
||||
setInnerFocus(true);
|
||||
}
|
||||
return clearingQuery || clearingInChat || clearSearchFocus;
|
||||
}
|
||||
|
Reference in New Issue
Block a user