Merge tag 'v7.0.4' into dev

This commit is contained in:
AlexeyZavar
2026-07-23 06:48:00 +03:00
1335 changed files with 217894 additions and 24157 deletions
@@ -434,6 +434,8 @@ public:
void setQueryChangedCallback(Fn<void(const QString &query)> callback);
void setSubmittedCallback(Fn<void(Qt::KeyboardModifiers)> callback);
void setCancelledCallback(Fn<void()> callback);
void setFocusedChangedCallback(Fn<void(bool focused)> callback);
void setCancelButtonShown(bool shown);
void addItemInBunch(std::unique_ptr<Item> item);
void finishItemsBunch(AddItemWay way);
@@ -504,6 +506,7 @@ private:
int _fieldWidth = 0;
object_ptr<Ui::InputField> _field;
object_ptr<Ui::CrossButton> _cancel;
bool _cancelShown = true;
int _newHeight = 0;
Ui::Animations::Simple _height;
@@ -511,6 +514,7 @@ private:
Fn<void(const QString &query)> _queryChangedCallback;
Fn<void(Qt::KeyboardModifiers)> _submittedCallback;
Fn<void()> _cancelledCallback;
Fn<void(bool focused)> _focusedChangedCallback;
Fn<void(uint64 itemId)> _itemRemovedCallback;
Fn<void(int heightDelta)> _resizedCallback;
@@ -553,7 +557,7 @@ MultiSelect::MultiSelect(
}
});
setAttribute(Qt::WA_OpaquePaintEvent);
setAttribute(Qt::WA_OpaquePaintEvent, _st.bg->c.alpha() == 255);
auto defaultWidth = _st.item.maxWidth + _st.fieldMinWidth + _st.fieldCancelSkip;
resizeToWidth(_st.padding.left() + defaultWidth + _st.padding.right());
}
@@ -589,10 +593,18 @@ void MultiSelect::setCancelledCallback(Fn<void()> callback) {
_inner->setCancelledCallback(std::move(callback));
}
void MultiSelect::setFocusedChangedCallback(Fn<void(bool focused)> callback) {
_inner->setFocusedChangedCallback(std::move(callback));
}
void MultiSelect::setResizedCallback(Fn<void()> callback) {
_resizedCallback = std::move(callback);
}
void MultiSelect::setCancelButtonShown(bool shown) {
_inner->setCancelButtonShown(shown);
}
void MultiSelect::setInnerFocus() {
if (_inner->setInnerFocus()) {
_scroll->scrollToY(_scroll->scrollTopMax());
@@ -669,6 +681,12 @@ MultiSelect::Inner::Inner(
) | rpl::filter(rpl::mappers::_1) | rpl::on_next([=] {
fieldFocused();
}, _field->lifetime());
_field->focusedChanges(
) | rpl::on_next([=](bool focused) {
if (_focusedChangedCallback) {
_focusedChangedCallback(focused);
}
}, _field->lifetime());
_field->changes(
) | rpl::on_next([=] {
queryChanged();
@@ -692,7 +710,7 @@ MultiSelect::Inner::Inner(
void MultiSelect::Inner::queryChanged() {
auto query = getQuery();
_cancel->toggle(!query.isEmpty(), anim::type::normal);
_cancel->toggle(_cancelShown && !query.isEmpty(), anim::type::normal);
updateFieldGeometry();
if (_queryChangedCallback) {
_queryChangedCallback(query);
@@ -737,6 +755,23 @@ void MultiSelect::Inner::setCancelledCallback(Fn<void()> callback) {
_cancelledCallback = std::move(callback);
}
void MultiSelect::Inner::setFocusedChangedCallback(
Fn<void(bool focused)> callback) {
_focusedChangedCallback = std::move(callback);
}
void MultiSelect::Inner::setCancelButtonShown(bool shown) {
if (_cancelShown == shown) {
return;
}
_cancelShown = shown;
const auto toggled = _cancelShown && !getQuery().isEmpty();
if (_cancel->toggled() != toggled) {
_cancel->toggle(toggled, anim::type::instant);
updateFieldGeometry();
}
}
void MultiSelect::Inner::updateFieldGeometry() {
auto fieldFinalWidth = _fieldWidth;
if (_cancel->toggled()) {