Adjusted code for refactor of input fields in lib_ui.

This commit is contained in:
23rd 2023-08-31 14:21:24 +03:00 committed by John Preston
parent ae2182c1e5
commit 98bb520f47
89 changed files with 413 additions and 300 deletions

View File

@ -29,6 +29,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/labels.h" #include "ui/widgets/labels.h"
#include "ui/toast/toast.h" #include "ui/toast/toast.h"
#include "ui/widgets/fields/input_field.h"
#include "ui/widgets/fields/special_fields.h" #include "ui/widgets/fields/special_fields.h"
#include "ui/widgets/popup_menu.h" #include "ui/widgets/popup_menu.h"
#include "ui/text/format_values.h" #include "ui/text/format_values.h"
@ -297,8 +298,11 @@ void AddContactBox::prepare() {
: tr::lng_enter_contact_data()); : tr::lng_enter_contact_data());
updateButtons(); updateButtons();
connect(_first, &Ui::InputField::submitted, [=] { submit(); }); const auto submitted = [=] { submit(); };
connect(_last, &Ui::InputField::submitted, [=] { submit(); }); _first->submits(
) | rpl::start_with_next(submitted, _first->lifetime());
_last->submits(
) | rpl::start_with_next(submitted, _last->lifetime());
connect(_phone, &Ui::PhoneInput::submitted, [=] { submit(); }); connect(_phone, &Ui::PhoneInput::submitted, [=] { submit(); });
setDimensions( setDimensions(
@ -567,23 +571,24 @@ void GroupInfoBox::prepare() {
_description->setSubmitSettings( _description->setSubmitSettings(
Core::App().settings().sendSubmitWay()); Core::App().settings().sendSubmitWay());
connect(_description, &Ui::InputField::resized, [=] { _description->heightChanges(
) | rpl::start_with_next([=] {
descriptionResized(); descriptionResized();
}); }, _description->lifetime());
connect(_description, &Ui::InputField::submitted, [=] { _description->submits(
submit(); ) | rpl::start_with_next([=] { submit(); }, _description->lifetime());
}); _description->cancelled(
connect(_description, &Ui::InputField::cancelled, [=] { ) | rpl::start_with_next([=] {
closeBox(); closeBox();
}); }, _description->lifetime());
Ui::Emoji::SuggestionsController::Init( Ui::Emoji::SuggestionsController::Init(
getDelegate()->outerContainer(), getDelegate()->outerContainer(),
_description, _description,
&_navigation->session()); &_navigation->session());
} }
_title->submits(
connect(_title, &Ui::InputField::submitted, [=] { submitName(); }); ) | rpl::start_with_next([=] { submitName(); }, _title->lifetime());
addButton( addButton(
((_type != Type::Group || _canAddBot) ((_type != Type::Group || _canAddBot)
@ -1522,20 +1527,22 @@ void EditNameBox::prepare() {
_first->setMaxLength(Ui::EditPeer::kMaxUserFirstLastName); _first->setMaxLength(Ui::EditPeer::kMaxUserFirstLastName);
_last->setMaxLength(Ui::EditPeer::kMaxUserFirstLastName); _last->setMaxLength(Ui::EditPeer::kMaxUserFirstLastName);
connect(_first, &Ui::InputField::submitted, [=] { submit(); }); _first->submits(
connect(_last, &Ui::InputField::submitted, [=] { submit(); }); ) | rpl::start_with_next([=] { submit(); }, _first->lifetime());
_last->submits(
) | rpl::start_with_next([=] { submit(); }, _last->lifetime());
_first->customTab(true); _first->customTab(true);
_last->customTab(true); _last->customTab(true);
QObject::connect( _first->tabbed(
_first, ) | rpl::start_with_next([=] {
&Ui::InputField::tabbed, _last->setFocus();
[=] { _last->setFocus(); }); }, _first->lifetime());
QObject::connect( _last->tabbed(
_last, ) | rpl::start_with_next([=] {
&Ui::InputField::tabbed, _first->setFocus();
[=] { _first->setFocus(); }); }, _last->lifetime());
} }
void EditNameBox::setInnerFocus() { void EditNameBox::setInnerFocus() {

View File

@ -18,7 +18,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "mtproto/facade.h" #include "mtproto/facade.h"
#include "ui/widgets/checkbox.h" #include "ui/widgets/checkbox.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/fields/number_input.h"
#include "ui/widgets/fields/password_input.h"
#include "ui/widgets/labels.h" #include "ui/widgets/labels.h"
#include "ui/widgets/dropdown_menu.h" #include "ui/widgets/dropdown_menu.h"
#include "ui/wrap/slide_wrap.h" #include "ui/wrap/slide_wrap.h"

View File

@ -13,7 +13,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/wrap/vertical_layout.h" #include "ui/wrap/vertical_layout.h"
#include "ui/wrap/slide_wrap.h" #include "ui/wrap/slide_wrap.h"
#include "ui/wrap/fade_wrap.h" #include "ui/wrap/fade_wrap.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/shadow.h" #include "ui/widgets/shadow.h"
#include "ui/widgets/labels.h" #include "ui/widgets/labels.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
@ -184,7 +184,8 @@ not_null<Ui::FlatLabel*> CreateWarningLabel(
QString(), QString(),
st::createPollWarning); st::createPollWarning);
result->setAttribute(Qt::WA_TransparentForMouseEvents); result->setAttribute(Qt::WA_TransparentForMouseEvents);
QObject::connect(field, &Ui::InputField::changed, [=] { field->changes(
) | rpl::start_with_next([=] {
Ui::PostponeCall(crl::guard(field, [=] { Ui::PostponeCall(crl::guard(field, [=] {
const auto length = field->getLastText().size(); const auto length = field->getLastText().size();
const auto value = valueLimit - length; const auto value = valueLimit - length;
@ -198,7 +199,7 @@ not_null<Ui::FlatLabel*> CreateWarningLabel(
} }
result->setVisible(shown); result->setVisible(shown);
})); }));
}); }, field->lifetime());
return result; return result;
} }
@ -243,13 +244,14 @@ Options::Option::Option(
_content->resize(_content->width(), height); _content->resize(_content->width(), height);
}, _field->lifetime()); }, _field->lifetime());
QObject::connect(_field, &Ui::InputField::changed, [=] { _field->changes(
) | rpl::start_with_next([=] {
Ui::PostponeCall(crl::guard(_field, [=] { Ui::PostponeCall(crl::guard(_field, [=] {
if (_hasCorrect) { if (_hasCorrect) {
_correct->toggle(isGood(), anim::type::normal); _correct->toggle(isGood(), anim::type::normal);
} }
})); }));
}); }, _field->lifetime());
createShadow(); createShadow();
createRemove(); createRemove();
@ -303,10 +305,11 @@ void Options::Option::createRemove() {
const auto toggle = lifetime.make_state<rpl::variable<bool>>(false); const auto toggle = lifetime.make_state<rpl::variable<bool>>(false);
_removeAlways = lifetime.make_state<rpl::variable<bool>>(false); _removeAlways = lifetime.make_state<rpl::variable<bool>>(false);
QObject::connect(field, &Ui::InputField::changed, [=] { field->changes(
) | rpl::start_with_next([field, toggle] {
// Don't capture 'this'! Because Option is a value type. // Don't capture 'this'! Because Option is a value type.
*toggle = !field->getLastText().isEmpty(); *toggle = !field->getLastText().isEmpty();
}); }, field->lifetime());
rpl::combine( rpl::combine(
toggle->value(), toggle->value(),
_removeAlways->value(), _removeAlways->value(),
@ -649,28 +652,32 @@ void Options::addEmptyOption() {
_position + _list.size() + _destroyed.size(), _position + _list.size() + _destroyed.size(),
_chooseCorrectGroup)); _chooseCorrectGroup));
const auto field = _list.back()->field(); const auto field = _list.back()->field();
QObject::connect(field, &Ui::InputField::submitted, [=] { field->submits(
) | rpl::start_with_next([=] {
const auto index = findField(field); const auto index = findField(field);
if (_list[index]->isGood() && index + 1 < _list.size()) { if (_list[index]->isGood() && index + 1 < _list.size()) {
_list[index + 1]->setFocus(); _list[index + 1]->setFocus();
} }
}); }, field->lifetime());
QObject::connect(field, &Ui::InputField::changed, [=] { field->changes(
) | rpl::start_with_next([=] {
Ui::PostponeCall(crl::guard(field, [=] { Ui::PostponeCall(crl::guard(field, [=] {
validateState(); validateState();
})); }));
}); }, field->lifetime());
QObject::connect(field, &Ui::InputField::focused, [=] { field->focusedChanges(
) | rpl::filter(rpl::mappers::_1) | rpl::start_with_next([=] {
_scrollToWidget.fire_copy(field); _scrollToWidget.fire_copy(field);
}); }, field->lifetime());
QObject::connect(field, &Ui::InputField::tabbed, [=] { field->tabbed(
) | rpl::start_with_next([=] {
const auto index = findField(field); const auto index = findField(field);
if (index + 1 < _list.size()) { if (index + 1 < _list.size()) {
_list[index + 1]->setFocus(); _list[index + 1]->setFocus();
} else { } else {
_tabbed.fire({}); _tabbed.fire({});
} }
}); }, field->lifetime());
base::install_event_filter(field, [=](not_null<QEvent*> event) { base::install_event_filter(field, [=](not_null<QEvent*> event) {
if (event->type() != QEvent::KeyPress if (event->type() != QEvent::KeyPress
|| !field->getLastText().isEmpty()) { || !field->getLastText().isEmpty()) {
@ -927,9 +934,10 @@ object_ptr<Ui::RpWidget> CreatePollBox::setupContent() {
st::boxDividerLabel), st::boxDividerLabel),
st::createPollLimitPadding)); st::createPollLimitPadding));
connect(question, &Ui::InputField::tabbed, [=] { question->tabbed(
) | rpl::start_with_next([=] {
options->focusFirst(); options->focusFirst();
}); }, question->lifetime());
AddSkip(container); AddSkip(container);
AddSubsectionTitle(container, tr::lng_polls_create_settings()); AddSubsectionTitle(container, tr::lng_polls_create_settings());
@ -975,9 +983,10 @@ object_ptr<Ui::RpWidget> CreatePollBox::setupContent() {
} }
}, question->lifetime()); }, question->lifetime());
connect(solution, &Ui::InputField::tabbed, [=] { solution->tabbed(
) | rpl::start_with_next([=] {
question->setFocus(); question->setFocus();
}); }, solution->lifetime());
quiz->setDisabled(_disabled & PollData::Flag::Quiz); quiz->setDisabled(_disabled & PollData::Flag::Quiz);
if (multiple) { if (multiple) {
@ -1009,12 +1018,12 @@ object_ptr<Ui::RpWidget> CreatePollBox::setupContent() {
const auto text = question->getLastText().trimmed(); const auto text = question->getLastText().trimmed();
return !text.isEmpty() && (text.size() <= kQuestionLimit); return !text.isEmpty() && (text.size() <= kQuestionLimit);
}; };
question->submits(
connect(question, &Ui::InputField::submitted, [=] { ) | rpl::start_with_next([=] {
if (isValidQuestion()) { if (isValidQuestion()) {
options->focusFirst(); options->focusFirst();
} }
}); }, question->lifetime());
_setInnerFocus = [=] { _setInnerFocus = [=] {
question->setFocusFast(); question->setFocusFast();

View File

@ -54,7 +54,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/painter.h" #include "ui/painter.h"
#include "ui/ui_utility.h" #include "ui/ui_utility.h"
#include "ui/widgets/checkbox.h" #include "ui/widgets/checkbox.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/scroll_area.h" #include "ui/widgets/scroll_area.h"
#include "ui/wrap/slide_wrap.h" #include "ui/wrap/slide_wrap.h"
#include "ui/wrap/vertical_layout.h" #include "ui/wrap/vertical_layout.h"
@ -488,9 +488,16 @@ void EditCaptionBox::setupField() {
Core::App().settings().sendSubmitWay()); Core::App().settings().sendSubmitWay());
_field->setMaxHeight(st::defaultComposeFiles.caption.heightMax); _field->setMaxHeight(st::defaultComposeFiles.caption.heightMax);
connect(_field, &Ui::InputField::submitted, [=] { save(); }); _field->submits(
connect(_field, &Ui::InputField::cancelled, [=] { closeBox(); }); ) | rpl::start_with_next([=] { save(); }, _field->lifetime());
connect(_field, &Ui::InputField::resized, [=] { captionResized(); }); _field->cancelled(
) | rpl::start_with_next([=] {
closeBox();
}, _field->lifetime());
_field->heightChanges(
) | rpl::start_with_next([=] {
captionResized();
}, _field->lifetime());
_field->setMimeDataHook([=]( _field->setMimeDataHook([=](
not_null<const QMimeData*> data, not_null<const QMimeData*> data,
Ui::InputField::MimeAction action) { Ui::InputField::MimeAction action) {
@ -522,10 +529,11 @@ void EditCaptionBox::setInitialText() {
setCloseByOutsideClick(true); setCloseByOutsideClick(true);
} }
}); });
connect(_field, &Ui::InputField::changed, [=] { _field->changes(
) | rpl::start_with_next([=] {
_checkChangedTimer.callOnce(kChangesDebounceTimeout); _checkChangedTimer.callOnce(kChangesDebounceTimeout);
setCloseByOutsideClick(false); setCloseByOutsideClick(false);
}); }, _field->lifetime());
} }
void EditCaptionBox::setupControls() { void EditCaptionBox::setupControls() {

View File

@ -15,7 +15,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/text/text_utilities.h" #include "ui/text/text_utilities.h"
#include "ui/text/text_options.h" #include "ui/text/text_options.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/wrap/slide_wrap.h" #include "ui/wrap/slide_wrap.h"
#include "ui/effects/panel_animation.h" #include "ui/effects/panel_animation.h"
#include "ui/filter_icons.h" #include "ui/filter_icons.h"
@ -619,11 +619,12 @@ void EditFilterBox(
nameEditing->custom = true; nameEditing->custom = true;
}, box->lifetime()); }, box->lifetime());
QObject::connect(name, &Ui::InputField::changed, [=] { name->changes(
) | rpl::start_with_next([=] {
if (!nameEditing->settingDefault) { if (!nameEditing->settingDefault) {
nameEditing->custom = true; nameEditing->custom = true;
} }
}); }, name->lifetime());
const auto updateDefaultTitle = [=](const Data::ChatFilter &filter) { const auto updateDefaultTitle = [=](const Data::ChatFilter &filter) {
if (nameEditing->custom) { if (nameEditing->custom) {
return; return;

View File

@ -26,7 +26,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/controls/invite_link_label.h" #include "ui/controls/invite_link_label.h"
#include "ui/text/text_utilities.h" #include "ui/text/text_utilities.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/popup_menu.h" #include "ui/widgets/popup_menu.h"
#include "ui/wrap/vertical_layout.h" #include "ui/wrap/vertical_layout.h"
#include "ui/wrap/slide_wrap.h" #include "ui/wrap/slide_wrap.h"

View File

@ -21,10 +21,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/layers/generic_box.h" #include "ui/layers/generic_box.h"
#include "ui/text/text_utilities.h" #include "ui/text/text_utilities.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/fields/password_input.h"
#include "ui/widgets/labels.h" #include "ui/widgets/labels.h"
#include "ui/widgets/sent_code_field.h"
#include "ui/wrap/vertical_layout.h"
#include "ui/wrap/fade_wrap.h" #include "ui/wrap/fade_wrap.h"
#include "ui/painter.h" #include "ui/painter.h"
#include "passport/passport_encryption.h" #include "passport/passport_encryption.h"
@ -306,15 +305,26 @@ void PasscodeBox::prepare() {
connect(_oldPasscode, &Ui::MaskedInputField::changed, [=] { oldChanged(); }); connect(_oldPasscode, &Ui::MaskedInputField::changed, [=] { oldChanged(); });
connect(_newPasscode, &Ui::MaskedInputField::changed, [=] { newChanged(); }); connect(_newPasscode, &Ui::MaskedInputField::changed, [=] { newChanged(); });
connect(_reenterPasscode, &Ui::MaskedInputField::changed, [=] { newChanged(); }); connect(_reenterPasscode, &Ui::MaskedInputField::changed, [=] { newChanged(); });
connect(_passwordHint, &Ui::InputField::changed, [=] { newChanged(); }); _passwordHint->changes(
connect(_recoverEmail, &Ui::InputField::changed, [=] { emailChanged(); }); ) | rpl::start_with_next([=] {
newChanged();
}, _passwordHint->lifetime());
_recoverEmail->changes(
) | rpl::start_with_next([=] {
if (!_emailError.isEmpty()) {
_emailError = QString();
update();
}
}, _recoverEmail->lifetime());
const auto fieldSubmit = [=] { submit(); }; const auto fieldSubmit = [=] { submit(); };
connect(_oldPasscode, &Ui::MaskedInputField::submitted, fieldSubmit); connect(_oldPasscode, &Ui::MaskedInputField::submitted, fieldSubmit);
connect(_newPasscode, &Ui::MaskedInputField::submitted, fieldSubmit); connect(_newPasscode, &Ui::MaskedInputField::submitted, fieldSubmit);
connect(_reenterPasscode, &Ui::MaskedInputField::submitted, fieldSubmit); connect(_reenterPasscode, &Ui::MaskedInputField::submitted, fieldSubmit);
connect(_passwordHint, &Ui::InputField::submitted, fieldSubmit); _passwordHint->submits(
connect(_recoverEmail, &Ui::InputField::submitted, fieldSubmit); ) | rpl::start_with_next(fieldSubmit, _passwordHint->lifetime());
_recoverEmail->submits(
) | rpl::start_with_next(fieldSubmit, _recoverEmail->lifetime());
_recover->addClickHandler([=] { recoverByEmail(); }); _recover->addClickHandler([=] { recoverByEmail(); });
@ -1061,13 +1071,6 @@ void PasscodeBox::newChanged() {
} }
} }
void PasscodeBox::emailChanged() {
if (!_emailError.isEmpty()) {
_emailError = QString();
update();
}
}
void PasscodeBox::recoverByEmail() { void PasscodeBox::recoverByEmail() {
if (!_cloudFields.hasRecovery) { if (!_cloudFields.hasRecovery) {
Assert(_session != nullptr); Assert(_session != nullptr);
@ -1189,8 +1192,12 @@ void RecoverBox::prepare() {
+ _recoverCode->height() + _recoverCode->height()
+ st::passcodeTextLine)); + st::passcodeTextLine));
connect(_recoverCode, &Ui::InputField::changed, [=] { codeChanged(); }); _recoverCode->changes(
connect(_recoverCode, &Ui::InputField::submitted, [=] { submit(); }); ) | rpl::start_with_next([=] {
codeChanged();
}, _recoverCode->lifetime());
_recoverCode->submits(
) | rpl::start_with_next([=] { submit(); }, _recoverCode->lifetime());
} }
void RecoverBox::paintEvent(QPaintEvent *e) { void RecoverBox::paintEvent(QPaintEvent *e) {

View File

@ -90,7 +90,6 @@ private:
void closeReplacedBy(); void closeReplacedBy();
void oldChanged(); void oldChanged();
void newChanged(); void newChanged();
void emailChanged();
void save(bool force = false); void save(bool force = false);
void badOldPasscode(); void badOldPasscode();
void recoverByEmail(); void recoverByEmail();

View File

@ -13,7 +13,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/wrap/vertical_layout.h" #include "ui/wrap/vertical_layout.h"
#include "ui/widgets/labels.h" #include "ui/widgets/labels.h"
#include "ui/widgets/checkbox.h" #include "ui/widgets/checkbox.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/text/format_values.h" // Ui::FormatPhone #include "ui/text/format_values.h" // Ui::FormatPhone
#include "ui/text/text_utilities.h" #include "ui/text/text_utilities.h"
#include "info/profile/info_profile_cover.h" #include "info/profile/info_profile_cover.h"
@ -239,8 +239,8 @@ void Controller::initNameFields(
_save(); _save();
} }
}; };
QObject::connect(first, &Ui::InputField::submitted, submit); first->submits() | rpl::start_with_next(submit, first->lifetime());
QObject::connect(last, &Ui::InputField::submitted, submit); last->submits() | rpl::start_with_next(submit, last->lifetime());
first->setMaxLength(Ui::EditPeer::kMaxUserFirstLastName); first->setMaxLength(Ui::EditPeer::kMaxUserFirstLastName);
first->setMaxLength(Ui::EditPeer::kMaxUserFirstLastName); first->setMaxLength(Ui::EditPeer::kMaxUserFirstLastName);
} }

View File

@ -7,7 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/ */
#include "boxes/peers/edit_forum_topic_box.h" #include "boxes/peers/edit_forum_topic_box.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/shadow.h" #include "ui/widgets/shadow.h"
#include "ui/effects/emoji_fly_animation.h" #include "ui/effects/emoji_fly_animation.h"
#include "ui/abstract_button.h" #include "ui/abstract_button.h"
@ -465,15 +465,13 @@ void EditForumTopicBox(
ChooseNextColorId(current.colorId, state->otherColorIds), ChooseNextColorId(current.colorId, state->otherColorIds),
}; };
}); });
base::qt_signal_producer( title->changes(
title,
&Ui::InputField::changed
) | rpl::start_with_next([=] { ) | rpl::start_with_next([=] {
state->defaultIcon = DefaultIcon{ state->defaultIcon = DefaultIcon{
title->getLastText().trimmed(), title->getLastText().trimmed(),
state->defaultIcon.current().colorId, state->defaultIcon.current().colorId,
}; };
}, box->lifetime()); }, title->lifetime());
if (!topic || !topic->isGeneral()) { if (!topic || !topic->isGeneral()) {
Settings::AddDividerText( Settings::AddDividerText(

View File

@ -15,7 +15,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/widgets/checkbox.h" #include "ui/widgets/checkbox.h"
#include "ui/widgets/labels.h" #include "ui/widgets/labels.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/box_content_divider.h" #include "ui/widgets/box_content_divider.h"
#include "ui/layers/generic_box.h" #include "ui/layers/generic_box.h"
#include "ui/toast/toast.h" #include "ui/toast/toast.h"
@ -461,13 +461,14 @@ not_null<Ui::InputField*> EditAdminBox::addRankInput(
st::rightsAboutMargin); st::rightsAboutMargin);
result->setMaxLength(kAdminRoleLimit); result->setMaxLength(kAdminRoleLimit);
result->setInstantReplaces(Ui::InstantReplaces::TextOnly()); result->setInstantReplaces(Ui::InstantReplaces::TextOnly());
connect(result, &Ui::InputField::changed, [=] { result->changes(
) | rpl::start_with_next([=] {
const auto text = result->getLastText(); const auto text = result->getLastText();
const auto removed = TextUtilities::RemoveEmoji(text); const auto removed = TextUtilities::RemoveEmoji(text);
if (removed != text) { if (removed != text) {
result->setText(removed); result->setText(removed);
} }
}); }, result->lifetime());
container->add( container->add(
object_ptr<Ui::FlatLabel>( object_ptr<Ui::FlatLabel>(

View File

@ -51,7 +51,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/text/text_utilities.h" #include "ui/text/text_utilities.h"
#include "ui/widgets/checkbox.h" #include "ui/widgets/checkbox.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/labels.h" #include "ui/widgets/labels.h"
#include "ui/widgets/box_content_divider.h" #include "ui/widgets/box_content_divider.h"
#include "ui/wrap/padding_wrap.h" #include "ui/wrap/padding_wrap.h"
@ -519,10 +519,10 @@ object_ptr<Ui::RpWidget> Controller::createTitleEdit() {
result->entity(), result->entity(),
&_peer->session()); &_peer->session());
QObject::connect( result->entity()->submits(
result->entity(), ) | rpl::start_with_next([=] {
&Ui::InputField::submitted, submitTitle();
[=] { submitTitle(); }); }, result->entity()->lifetime());
_controls.title = result->entity(); _controls.title = result->entity();
return result; return result;
@ -555,10 +555,10 @@ object_ptr<Ui::RpWidget> Controller::createDescriptionEdit() {
result->entity(), result->entity(),
&_peer->session()); &_peer->session());
QObject::connect( result->entity()->submits(
result->entity(), ) | rpl::start_with_next([=] {
&Ui::InputField::submitted, submitDescription();
[=] { submitDescription(); }); }, result->entity()->lifetime());
_controls.description = result->entity(); _controls.description = result->entity();
return result; return result;

View File

@ -32,7 +32,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/controls/userpic_button.h" #include "ui/controls/userpic_button.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/checkbox.h" #include "ui/widgets/checkbox.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/labels.h" #include "ui/widgets/labels.h"
#include "ui/widgets/box_content_divider.h" #include "ui/widgets/box_content_divider.h"
#include "ui/wrap/padding_wrap.h" #include "ui/wrap/padding_wrap.h"

View File

@ -31,7 +31,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/effects/scroll_content_shadow.h" #include "ui/effects/scroll_content_shadow.h"
#include "ui/widgets/checkbox.h" #include "ui/widgets/checkbox.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/scroll_area.h" #include "ui/widgets/scroll_area.h"
#include "ui/widgets/popup_menu.h" #include "ui/widgets/popup_menu.h"
#include "ui/wrap/vertical_layout.h" #include "ui/wrap/vertical_layout.h"
@ -1030,17 +1030,21 @@ void SendFilesBox::setupCaption() {
Core::App().settings().sendSubmitWay()); Core::App().settings().sendSubmitWay());
_caption->setMaxLength(kMaxMessageLength); _caption->setMaxLength(kMaxMessageLength);
connect(_caption, &Ui::InputField::resized, [=] { _caption->heightChanges(
) | rpl::start_with_next([=] {
captionResized(); captionResized();
}); }, _caption->lifetime());
connect(_caption, &Ui::InputField::submitted, [=]( _caption->submits(
Qt::KeyboardModifiers modifiers) { ) | rpl::start_with_next([=](Qt::KeyboardModifiers modifiers) {
const auto ctrlShiftEnter = modifiers.testFlag(Qt::ShiftModifier) const auto ctrlShiftEnter = modifiers.testFlag(Qt::ShiftModifier)
&& (modifiers.testFlag(Qt::ControlModifier) && (modifiers.testFlag(Qt::ControlModifier)
|| modifiers.testFlag(Qt::MetaModifier)); || modifiers.testFlag(Qt::MetaModifier));
send({}, ctrlShiftEnter); send({}, ctrlShiftEnter);
}); }, _caption->lifetime());
connect(_caption, &Ui::InputField::cancelled, [=] { closeBox(); }); _caption->cancelled(
) | rpl::start_with_next([=] {
closeBox();
}, _caption->lifetime());
_caption->setMimeDataHook([=]( _caption->setMimeDataHook([=](
not_null<const QMimeData*> data, not_null<const QMimeData*> data,
Ui::InputField::MimeAction action) { Ui::InputField::MimeAction action) {

View File

@ -19,7 +19,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "lang/lang_keys.h" #include "lang/lang_keys.h"
#include "main/main_session.h" #include "main/main_session.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/labels.h" #include "ui/widgets/labels.h"
#include "ui/widgets/scroll_area.h" #include "ui/widgets/scroll_area.h"
#include "ui/wrap/slide_wrap.h" #include "ui/wrap/slide_wrap.h"
@ -144,7 +144,7 @@ void RenameBox(not_null<Ui::GenericBox*> box) {
Core::App().settings().setCustomDeviceModel(result); Core::App().settings().setCustomDeviceModel(result);
Core::App().saveSettingsDelayed(); Core::App().saveSettingsDelayed();
}; };
QObject::connect(name, &Ui::InputField::submitted, submit); name->submits() | rpl::start_with_next(submit, name->lifetime());
box->addButton(tr::lng_settings_save(), submit); box->addButton(tr::lng_settings_save(), submit);
box->addButton(tr::lng_cancel(), [=] { box->closeBox(); }); box->addButton(tr::lng_cancel(), [=] { box->closeBox(); });
} }

View File

@ -19,7 +19,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/widgets/checkbox.h" #include "ui/widgets/checkbox.h"
#include "ui/widgets/multi_select.h" #include "ui/widgets/multi_select.h"
#include "ui/widgets/scroll_area.h" #include "ui/widgets/scroll_area.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/popup_menu.h" #include "ui/widgets/popup_menu.h"
#include "ui/wrap/slide_wrap.h" #include "ui/wrap/slide_wrap.h"
#include "ui/text/text_options.h" #include "ui/text/text_options.h"
@ -226,9 +226,8 @@ void ShareBox::prepareCommentField() {
const auto field = _comment->entity(); const auto field = _comment->entity();
connect(field, &Ui::InputField::submitted, [=] { field->submits(
submit({}); ) | rpl::start_with_next([=] { submit({}); }, field->lifetime());
});
if (const auto show = uiShow(); show->valid()) { if (const auto show = uiShow(); show->valid()) {
InitMessageFieldHandlers( InitMessageFieldHandlers(
_descriptor.session, _descriptor.session,

View File

@ -31,7 +31,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/effects/ripple_animation.h" #include "ui/effects/ripple_animation.h"
#include "ui/effects/slide_animation.h" #include "ui/effects/slide_animation.h"
#include "ui/widgets/discrete_sliders.h" #include "ui/widgets/discrete_sliders.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/image/image.h" #include "ui/image/image.h"
#include "ui/cached_round_corners.h" #include "ui/cached_round_corners.h"
#include "ui/painter.h" #include "ui/painter.h"

View File

@ -19,7 +19,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/widgets/menu/menu_action.h" #include "ui/widgets/menu/menu_action.h"
#include "ui/widgets/labels.h" #include "ui/widgets/labels.h"
#include "ui/widgets/checkbox.h" #include "ui/widgets/checkbox.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/effects/ripple_animation.h" #include "ui/effects/ripple_animation.h"
#include "ui/layers/generic_box.h" #include "ui/layers/generic_box.h"
#include "ui/painter.h" #include "ui/painter.h"

View File

@ -23,7 +23,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/widgets/call_button.h" #include "ui/widgets/call_button.h"
#include "ui/widgets/checkbox.h" #include "ui/widgets/checkbox.h"
#include "ui/widgets/dropdown_menu.h" #include "ui/widgets/dropdown_menu.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/tooltip.h" #include "ui/widgets/tooltip.h"
#include "ui/widgets/rp_window.h" #include "ui/widgets/rp_window.h"
#include "ui/chat/group_call_bar.h" #include "ui/chat/group_call_bar.h"

View File

@ -16,7 +16,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/widgets/continuous_sliders.h" #include "ui/widgets/continuous_sliders.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/checkbox.h" #include "ui/widgets/checkbox.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/popup_menu.h" #include "ui/widgets/popup_menu.h"
#include "ui/wrap/slide_wrap.h" #include "ui/wrap/slide_wrap.h"
#include "ui/text/text_utilities.h" #include "ui/text/text_utilities.h"

View File

@ -12,7 +12,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/image/image_prepare.h" #include "ui/image/image_prepare.h"
#include "ui/layers/generic_box.h" #include "ui/layers/generic_box.h"
#include "ui/widgets/checkbox.h" #include "ui/widgets/checkbox.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/labels.h" #include "ui/widgets/labels.h"
#include "styles/style_calls.h" #include "styles/style_calls.h"
#include "styles/style_layers.h" #include "styles/style_layers.h"
@ -287,7 +287,7 @@ void EditGroupCallTitleBox(
box->closeBox(); box->closeBox();
done(result); done(result);
}; };
QObject::connect(input, &Ui::InputField::submitted, submit); input->submits() | rpl::start_with_next(submit, input->lifetime());
box->addButton(tr::lng_settings_save(), submit); box->addButton(tr::lng_settings_save(), submit);
box->addButton(tr::lng_cancel(), [=] { box->closeBox(); }); box->addButton(tr::lng_cancel(), [=] { box->closeBox(); });
} }
@ -346,7 +346,7 @@ void AddTitleGroupCallRecordingBox(
box->closeBox(); box->closeBox();
done(result); done(result);
}; };
QObject::connect(input, &Ui::InputField::submitted, submit); input->submits() | rpl::start_with_next(submit, input->lifetime());
box->addButton(tr::lng_group_call_recording_start_button(), submit); box->addButton(tr::lng_group_call_recording_start_button(), submit);
box->addButton(tr::lng_cancel(), [=] { box->closeBox(); }); box->addButton(tr::lng_cancel(), [=] { box->closeBox(); });
} }

View File

@ -14,7 +14,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/effects/ripple_animation.h" #include "ui/effects/ripple_animation.h"
#include "ui/widgets/shadow.h" #include "ui/widgets/shadow.h"
#include "ui/widgets/inner_dropdown.h" #include "ui/widgets/inner_dropdown.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/emoji_config.h" #include "ui/emoji_config.h"
#include "ui/ui_utility.h" #include "ui/ui_utility.h"
#include "ui/cached_round_corners.h" #include "ui/cached_round_corners.h"

View File

@ -31,7 +31,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "media/clip/media_clip_reader.h" #include "media/clip/media_clip_reader.h"
#include "ui/widgets/popup_menu.h" #include "ui/widgets/popup_menu.h"
#include "ui/widgets/scroll_area.h" #include "ui/widgets/scroll_area.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/text/text_options.h" #include "ui/text/text_options.h"
#include "ui/image/image.h" #include "ui/image/image.h"
#include "ui/effects/path_shift_gradient.h" #include "ui/effects/path_shift_gradient.h"

View File

@ -24,7 +24,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "core/click_handler_types.h" #include "core/click_handler_types.h"
#include "ui/controls/tabbed_search.h" #include "ui/controls/tabbed_search.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/popup_menu.h" #include "ui/widgets/popup_menu.h"
#include "ui/effects/ripple_animation.h" #include "ui/effects/ripple_animation.h"
#include "ui/image/image.h" #include "ui/image/image.h"

View File

@ -190,16 +190,18 @@ void EditLinkBox(
} }
}; };
QObject::connect(text, &Ui::InputField::submitted, [=] { text->submits(
) | rpl::start_with_next([=] {
url->setFocusFast(); url->setFocusFast();
}); }, text->lifetime());
QObject::connect(url, &Ui::InputField::submitted, [=] { url->submits(
) | rpl::start_with_next([=] {
if (text->getLastText().isEmpty()) { if (text->getLastText().isEmpty()) {
text->setFocusFast(); text->setFocusFast();
} else { } else {
submit(); submit();
} }
}); }, url->lifetime());
box->setTitle(url->getLastText().isEmpty() box->setTitle(url->getLastText().isEmpty()
? tr::lng_formatting_link_create_title() ? tr::lng_formatting_link_create_title()
@ -223,8 +225,14 @@ void EditLinkBox(
url->customTab(true); url->customTab(true);
text->customTab(true); text->customTab(true);
QObject::connect(url, &Ui::InputField::tabbed, [=] { text->setFocus(); }); url->tabbed(
QObject::connect(text, &Ui::InputField::tabbed, [=] { url->setFocus(); }); ) | rpl::start_with_next([=] {
text->setFocus();
}, url->lifetime());
text->tabbed(
) | rpl::start_with_next([=] {
url->setFocus();
}, text->lifetime());
} }
TextWithEntities StripSupportHashtag(TextWithEntities text) { TextWithEntities StripSupportHashtag(TextWithEntities text) {
@ -590,7 +598,8 @@ AutocompleteQuery ParseMentionHashtagBotCommandQuery(
MessageLinksParser::MessageLinksParser(not_null<Ui::InputField*> field) MessageLinksParser::MessageLinksParser(not_null<Ui::InputField*> field)
: _field(field) : _field(field)
, _timer([=] { parse(); }) { , _timer([=] { parse(); }) {
_connection = QObject::connect(_field, &Ui::InputField::changed, [=] { _lifetime = _field->changes(
) | rpl::start_with_next([=] {
const auto length = _field->getTextWithTags().text.size(); const auto length = _field->getTextWithTags().text.size();
const auto timeout = (std::abs(length - _lastLength) > 2) const auto timeout = (std::abs(length - _lastLength) > 2)
? 0 ? 0

View File

@ -7,9 +7,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/ */
#pragma once #pragma once
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "base/timer.h" #include "base/timer.h"
#include "base/qt_connection.h"
#include "chat_helpers/compose/compose_features.h" #include "chat_helpers/compose/compose_features.h"
#ifndef TDESKTOP_DISABLE_SPELLCHECK #ifndef TDESKTOP_DISABLE_SPELLCHECK
@ -132,7 +131,7 @@ private:
int _lastLength = 0; int _lastLength = 0;
bool _disabled = false; bool _disabled = false;
base::Timer _timer; base::Timer _timer;
base::qt_connection _connection; rpl::lifetime _lifetime;
}; };

View File

@ -26,7 +26,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "lottie/lottie_single_player.h" #include "lottie/lottie_single_player.h"
#include "ui/dpr/dpr_icon.h" #include "ui/dpr/dpr_icon.h"
#include "ui/dpr/dpr_image.h" #include "ui/dpr/dpr_image.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/painter.h" #include "ui/painter.h"
#include "ui/rect_part.h" #include "ui/rect_part.h"

View File

@ -9,7 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "boxes/send_files_box.h" #include "boxes/send_files_box.h"
#include "history/view/history_view_quick_action.h" #include "history/view/history_view_quick_action.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "storage/serialize_common.h" #include "storage/serialize_common.h"
#include "window/section_widget.h" #include "window/section_widget.h"
#include "base/platform/base_platform_info.h" #include "base/platform/base_platform_info.h"

View File

@ -8,7 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "data/data_drafts.h" #include "data/data_drafts.h"
#include "api/api_text_entities.h" #include "api/api_text_entities.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "chat_helpers/message_field.h" #include "chat_helpers/message_field.h"
#include "history/history.h" #include "history/history.h"
#include "history/history_widget.h" #include "history/history_widget.h"

View File

@ -24,7 +24,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "lang/lang_keys.h" #include "lang/lang_keys.h"
#include "core/application.h" #include "core/application.h"
#include "ui/layers/generic_box.h" #include "ui/layers/generic_box.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "storage/storage_facade.h" #include "storage/storage_facade.h"
#include "storage/storage_shared_media.h" #include "storage/storage_shared_media.h"
#include "window/window_session_controller.h" #include "window/window_session_controller.h"

View File

@ -7,7 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/ */
#include "data/data_types.h" #include "data/data_types.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "storage/cache/storage_cache_types.h" #include "storage/cache/storage_cache_types.h"
#include "base/openssl_help.h" #include "base/openssl_help.h"

View File

@ -23,7 +23,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ffmpeg/ffmpeg_frame_generator.h" #include "ffmpeg/ffmpeg_frame_generator.h"
#include "chat_helpers/stickers_lottie.h" #include "chat_helpers/stickers_lottie.h"
#include "storage/file_download.h" // kMaxFileInMemory #include "storage/file_download.h" // kMaxFileInMemory
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/text/text_custom_emoji.h" #include "ui/text/text_custom_emoji.h"
#include "ui/text/text_utilities.h" #include "ui/text/text_utilities.h"
#include "ui/ui_utility.h" #include "ui/ui_utility.h"

View File

@ -22,7 +22,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "boxes/peers/edit_peer_requests_box.h" #include "boxes/peers/edit_peer_requests_box.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/elastic_scroll.h" #include "ui/widgets/elastic_scroll.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/wrap/fade_wrap.h" #include "ui/wrap/fade_wrap.h"
#include "ui/effects/radial_animation.h" #include "ui/effects/radial_animation.h"
#include "ui/chat/requests_bar.h" #include "ui/chat/requests_bar.h"
@ -78,6 +78,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include <QtCore/QMimeData> #include <QtCore/QMimeData>
#include <QtWidgets/QScrollBar> #include <QtWidgets/QScrollBar>
#include <QtWidgets/QTextEdit>
namespace Dialogs { namespace Dialogs {
namespace { namespace {
@ -340,12 +341,12 @@ Widget::Widget(
Ui::PostponeCall(this, [=] { listScrollUpdated(); }); Ui::PostponeCall(this, [=] { listScrollUpdated(); });
}, lifetime()); }, lifetime());
QObject::connect(_filter, &Ui::InputField::changed, [=] { _filter->changes(
) | rpl::start_with_next([=] {
applyFilterUpdate(); applyFilterUpdate();
}); }, _filter->lifetime());
QObject::connect(_filter, &Ui::InputField::submitted, [=] { _filter->submits(
submit(); ) | rpl::start_with_next([=] { submit(); }, _filter->lifetime());
});
QObject::connect( QObject::connect(
_filter->rawTextEdit().get(), _filter->rawTextEdit().get(),
&QTextEdit::cursorPositionChanged, &QTextEdit::cursorPositionChanged,

View File

@ -15,7 +15,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/widgets/scroll_area.h" #include "ui/widgets/scroll_area.h"
#include "ui/widgets/shadow.h" #include "ui/widgets/shadow.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/ui_utility.h" #include "ui/ui_utility.h"
#include "mainwidget.h" #include "mainwidget.h"
#include "mainwindow.h" #include "mainwindow.h"
@ -125,9 +125,16 @@ FixedBar::FixedBar(
_cancel->setClickedCallback([=] { cancelSearch(); }); _cancel->setClickedCallback([=] { cancelSearch(); });
_field->hide(); _field->hide();
_filter->setTextTransform(Ui::RoundButton::TextTransform::NoTransform); _filter->setTextTransform(Ui::RoundButton::TextTransform::NoTransform);
connect(_field, &Ui::InputField::cancelled, [=] { cancelSearch(); }); _field->cancelled(
connect(_field, &Ui::InputField::changed, [=] { searchUpdated(); }); ) | rpl::start_with_next([=] {
connect(_field, &Ui::InputField::submitted, [=] { applySearch(); }); cancelSearch();
}, _field->lifetime());
_field->changes(
) | rpl::start_with_next([=] {
searchUpdated();
}, _field->lifetime());
_field->submits(
) | rpl::start_with_next([=] { applySearch(); }, _field->lifetime());
_searchTimer.setCallback([=] { applySearch(); }); _searchTimer.setCallback([=] { applySearch(); });
_cancel->hide(anim::type::instant); _cancel->hide(anim::type::instant);

View File

@ -304,25 +304,30 @@ HistoryWidget::HistoryWidget(
_joinChannel->addClickHandler([=] { joinChannel(); }); _joinChannel->addClickHandler([=] { joinChannel(); });
_muteUnmute->addClickHandler([=] { toggleMuteUnmute(); }); _muteUnmute->addClickHandler([=] { toggleMuteUnmute(); });
_reportMessages->addClickHandler([=] { reportSelectedMessages(); }); _reportMessages->addClickHandler([=] { reportSelectedMessages(); });
connect( _field->submits(
_field, ) | rpl::start_with_next([=](Qt::KeyboardModifiers modifiers) {
&Ui::InputField::submitted, sendWithModifiers(modifiers);
[=](Qt::KeyboardModifiers modifiers) { sendWithModifiers(modifiers); }); }, _field->lifetime());
connect(_field, &Ui::InputField::cancelled, [=] { _field->cancelled(
) | rpl::start_with_next([=] {
escape(); escape();
}); }, _field->lifetime());
connect(_field, &Ui::InputField::tabbed, [=] { _field->tabbed(
) | rpl::start_with_next([=] {
fieldTabbed(); fieldTabbed();
}); }, _field->lifetime());
connect(_field, &Ui::InputField::resized, [=] { _field->heightChanges(
) | rpl::start_with_next([=] {
fieldResized(); fieldResized();
}); }, _field->lifetime());
connect(_field, &Ui::InputField::focused, [=] { _field->focusedChanges(
) | rpl::filter(rpl::mappers::_1) | rpl::start_with_next([=] {
fieldFocused(); fieldFocused();
}); }, _field->lifetime());
connect(_field, &Ui::InputField::changed, [=] { _field->changes(
) | rpl::start_with_next([=] {
fieldChanged(); fieldChanged();
}); }, _field->lifetime());
connect( connect(
controller->widget()->windowHandle(), controller->widget()->windowHandle(),
&QWindow::visibleChanged, &QWindow::visibleChanged,

View File

@ -15,7 +15,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "chat_helpers/bot_command.h" #include "chat_helpers/bot_command.h"
#include "chat_helpers/field_autocomplete.h" #include "chat_helpers/field_autocomplete.h"
#include "window/section_widget.h" #include "window/section_widget.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "mtproto/sender.h" #include "mtproto/sender.h"
#include "base/flags.h" #include "base/flags.h"

View File

@ -60,7 +60,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "media/audio/media_audio.h" #include "media/audio/media_audio.h"
#include "ui/text/text_options.h" #include "ui/text/text_options.h"
#include "ui/ui_utility.h" #include "ui/ui_utility.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/dropdown_menu.h" #include "ui/widgets/dropdown_menu.h"
#include "ui/text/format_values.h" #include "ui/text/format_values.h"
#include "ui/controls/emoji_button.h" #include "ui/controls/emoji_button.h"
@ -1250,7 +1250,7 @@ bool ComposeControls::focused() const {
} }
rpl::producer<bool> ComposeControls::focusedValue() const { rpl::producer<bool> ComposeControls::focusedValue() const {
return rpl::single(focused()) | rpl::then(_focusChanges.events()); return rpl::single(focused()) | rpl::then(_field->focusedChanges());
} }
rpl::producer<bool> ComposeControls::tabbedPanelShownValue() const { rpl::producer<bool> ComposeControls::tabbedPanelShownValue() const {
@ -1291,12 +1291,9 @@ auto ComposeControls::sendContentRequests(SendRequestType requestType) const {
return (_send->type() == type) && (sendRequestType == requestType); return (_send->type() == type) && (sendRequestType == requestType);
}); });
auto map = rpl::map_to(Api::SendOptions()); auto map = rpl::map_to(Api::SendOptions());
auto submits = base::qt_signal_producer(
_field.get(),
&Ui::InputField::submitted);
return rpl::merge( return rpl::merge(
_send->clicks() | filter | map, _send->clicks() | filter | map,
std::move(submits) | filter | map, _field->submits() | filter | map,
_sendCustomRequests.events()); _sendCustomRequests.events());
} }
@ -1317,12 +1314,9 @@ rpl::producer<MessageToEdit> ComposeControls::editRequests() const {
auto filter = rpl::filter([=] { auto filter = rpl::filter([=] {
return _send->type() == Ui::SendButton::Type::Save; return _send->type() == Ui::SendButton::Type::Save;
}); });
auto submits = base::qt_signal_producer(
_field.get(),
&Ui::InputField::submitted);
return rpl::merge( return rpl::merge(
_send->clicks() | filter | toValue, _send->clicks() | filter | toValue,
std::move(submits) | filter | toValue); _field->submits() | filter | toValue);
} }
rpl::producer<std::optional<bool>> ComposeControls::attachRequests() const { rpl::producer<std::optional<bool>> ComposeControls::attachRequests() const {
@ -1776,17 +1770,22 @@ void ComposeControls::initKeyHandler() {
void ComposeControls::initField() { void ComposeControls::initField() {
_field->setMaxHeight(st::historyComposeFieldMaxHeight); _field->setMaxHeight(st::historyComposeFieldMaxHeight);
updateSubmitSettings(); updateSubmitSettings();
//Ui::Connect(_field, &Ui::InputField::submitted, [=] { send(); }); _field->cancelled(
Ui::Connect(_field, &Ui::InputField::cancelled, [=] { escape(); }); ) | rpl::start_with_next([=] {
Ui::Connect(_field, &Ui::InputField::tabbed, [=] { fieldTabbed(); }); escape();
Ui::Connect(_field, &Ui::InputField::resized, [=] { updateHeight(); }); }, _field->lifetime());
Ui::Connect(_field, &Ui::InputField::focused, [=] { _field->tabbed(
_focusChanges.fire(true); ) | rpl::start_with_next([=] {
}); fieldTabbed();
Ui::Connect(_field, &Ui::InputField::blurred, [=] { }, _field->lifetime());
_focusChanges.fire(false); _field->heightChanges(
}); ) | rpl::start_with_next([=] {
Ui::Connect(_field, &Ui::InputField::changed, [=] { fieldChanged(); }); updateHeight();
}, _field->lifetime());
_field->changes(
) | rpl::start_with_next([=] {
fieldChanged();
}, _field->lifetime());
InitMessageField(_show, _field, [=](not_null<DocumentData*> emoji) { InitMessageField(_show, _field, [=](not_null<DocumentData*> emoji) {
if (_history && Data::AllowEmojiWithoutPremium(_history->peer)) { if (_history && Data::AllowEmojiWithoutPremium(_history->peer)) {
return true; return true;

View File

@ -17,7 +17,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/round_rect.h" #include "ui/round_rect.h"
#include "ui/rp_widget.h" #include "ui/rp_widget.h"
#include "ui/effects/animations.h" #include "ui/effects/animations.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
class History; class History;
class DocumentData; class DocumentData;
@ -424,7 +424,6 @@ private:
std::unique_ptr<WebpageProcessor> _preview; std::unique_ptr<WebpageProcessor> _preview;
Fn<void()> _raiseEmojiSuggestions; Fn<void()> _raiseEmojiSuggestions;
rpl::event_stream<bool> _focusChanges;
rpl::lifetime _historyLifetime; rpl::lifetime _historyLifetime;
rpl::lifetime _uploaderSubscriptions; rpl::lifetime _uploaderSubscriptions;

View File

@ -14,7 +14,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "base/event_filter.h" #include "base/event_filter.h"
#include "base/qt/qt_key_modifiers.h" #include "base/qt/qt_key_modifiers.h"
#include "base/unixtime.h" #include "base/unixtime.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/labels.h" #include "ui/widgets/labels.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/popup_menu.h" #include "ui/widgets/popup_menu.h"

View File

@ -27,7 +27,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/controls/userpic_button.h" #include "ui/controls/userpic_button.h"
#include "ui/wrap/fade_wrap.h" #include "ui/wrap/fade_wrap.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/popup_menu.h" #include "ui/widgets/popup_menu.h"
#include "ui/widgets/menu/menu_add_action_callback_factory.h" #include "ui/widgets/menu/menu_add_action_callback_factory.h"
#include "ui/effects/radial_animation.h" #include "ui/effects/radial_animation.h"
@ -1225,10 +1225,12 @@ bool TopBarWidget::toggleSearch(bool shown, anim::type animated) {
_searchCancel.create(this, st::dialogsCancelSearch); _searchCancel.create(this, st::dialogsCancelSearch);
_searchCancel->show(anim::type::instant); _searchCancel->show(anim::type::instant);
_searchCancel->setClickedCallback([=] { _searchCancelled.fire({}); }); _searchCancel->setClickedCallback([=] { _searchCancelled.fire({}); });
QObject::connect(_searchField, &Ui::InputField::submitted, [=] { _searchField->submits(
) | rpl::start_with_next([=] {
_searchSubmitted.fire({}); _searchSubmitted.fire({});
}); }, _searchField->lifetime());
QObject::connect(_searchField, &Ui::InputField::changed, [=] { _searchField->changes(
) | rpl::start_with_next([=] {
const auto was = _searchQuery.current(); const auto was = _searchQuery.current();
const auto now = _searchField->getLastText(); const auto now = _searchField->getLastText();
if (_jumpToDate && was.isEmpty() != now.isEmpty()) { if (_jumpToDate && was.isEmpty() != now.isEmpty()) {
@ -1243,7 +1245,7 @@ bool TopBarWidget::toggleSearch(bool shown, anim::type animated) {
} }
} }
_searchQuery = now; _searchQuery = now;
}); }, _searchField->lifetime());
} else { } else {
Assert(_searchField != nullptr); Assert(_searchField != nullptr);
} }

View File

@ -9,7 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "window/window_session_controller.h" #include "window/window_session_controller.h"
#include "ui/widgets/scroll_area.h" #include "ui/widgets/scroll_area.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/wrap/padding_wrap.h" #include "ui/wrap/padding_wrap.h"
#include "ui/search_field_controller.h" #include "ui/search_field_controller.h"
#include "lang/lang_keys.h" #include "lang/lang_keys.h"

View File

@ -23,7 +23,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "main/main_session.h" #include "main/main_session.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/labels.h" #include "ui/widgets/labels.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/shadow.h" #include "ui/widgets/shadow.h"
#include "ui/wrap/fade_wrap.h" #include "ui/wrap/fade_wrap.h"
#include "ui/wrap/padding_wrap.h" #include "ui/wrap/padding_wrap.h"
@ -253,7 +253,8 @@ void TopBar::createSearchView(
}; };
cancel->addClickHandler(cancelSearch); cancel->addClickHandler(cancelSearch);
field->connect(field, &Ui::InputField::cancelled, cancelSearch); field->cancelled(
) | rpl::start_with_next(cancelSearch, field->lifetime());
wrap->widthValue( wrap->widthValue(
) | rpl::start_with_next([=](int newWidth) { ) | rpl::start_with_next([=](int newWidth) {

View File

@ -19,7 +19,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "info/info_memento.h" #include "info/info_memento.h"
#include "ui/widgets/labels.h" #include "ui/widgets/labels.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/scroll_area.h" #include "ui/widgets/scroll_area.h"
#include "ui/wrap/padding_wrap.h" #include "ui/wrap/padding_wrap.h"
#include "ui/text/text_utilities.h" // Ui::Text::ToUpper #include "ui/text/text_utilities.h" // Ui::Text::ToUpper

View File

@ -14,6 +14,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "core/update_checker.h" #include "core/update_checker.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/labels.h" #include "ui/widgets/labels.h"
#include "ui/widgets/fields/masked_input_field.h"
#include "ui/text/format_values.h" // Ui::FormatPhone #include "ui/text/format_values.h" // Ui::FormatPhone
#include "ui/text/text_utilities.h" #include "ui/text/text_utilities.h"
#include "ui/boxes/confirm_box.h" #include "ui/boxes/confirm_box.h"

View File

@ -9,7 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "intro/intro_step.h" #include "intro/intro_step.h"
#include "intro/intro_widget.h" #include "intro/intro_widget.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/masked_input_field.h"
#include "base/timer.h" #include "base/timer.h"
namespace Ui { namespace Ui {

View File

@ -8,15 +8,14 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "intro/intro_password_check.h" #include "intro/intro_password_check.h"
#include "intro/intro_widget.h" #include "intro/intro_widget.h"
#include "core/file_utilities.h"
#include "core/core_cloud_password.h" #include "core/core_cloud_password.h"
#include "ui/boxes/confirm_box.h" #include "ui/boxes/confirm_box.h"
#include "boxes/passcode_box.h" #include "boxes/passcode_box.h"
#include "lang/lang_keys.h" #include "lang/lang_keys.h"
#include "intro/intro_signup.h" #include "intro/intro_signup.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/labels.h" #include "ui/widgets/fields/password_input.h"
#include "main/main_account.h" #include "main/main_account.h"
#include "base/random.h" #include "base/random.h"
#include "styles/style_intro.h" #include "styles/style_intro.h"
@ -46,7 +45,10 @@ PasswordCheckWidget::PasswordCheckWidget(
_toRecover->addClickHandler([=] { toRecover(); }); _toRecover->addClickHandler([=] { toRecover(); });
_toPassword->addClickHandler([=] { toPassword(); }); _toPassword->addClickHandler([=] { toPassword(); });
connect(_pwdField, &Ui::PasswordInput::changed, [=] { hideError(); }); connect(_pwdField, &Ui::PasswordInput::changed, [=] { hideError(); });
connect(_codeField, &Ui::InputField::changed, [=] { hideError(); }); _codeField->changes(
) | rpl::start_with_next([=] {
hideError();
}, _codeField->lifetime());
setTitleText(tr::lng_signin_title()); setTitleText(tr::lng_signin_title());
updateDescriptionText(); updateDescriptionText();

View File

@ -13,7 +13,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "lang/lang_keys.h" #include "lang/lang_keys.h"
#include "ui/controls/userpic_button.h" #include "ui/controls/userpic_button.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/labels.h" #include "ui/widgets/labels.h"
#include "styles/style_intro.h" #include "styles/style_intro.h"
#include "styles/style_boxes.h" #include "styles/style_boxes.h"

View File

@ -8,7 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "main/main_session_settings.h" #include "main/main_session_settings.h"
#include "chat_helpers/tabbed_selector.h" #include "chat_helpers/tabbed_selector.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/chat/attach/attach_send_files_way.h" #include "ui/chat/attach/attach_send_files_way.h"
#include "window/section_widget.h" #include "window/section_widget.h"
#include "support/support_common.h" #include "support/support_common.h"

View File

@ -8,7 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "passport/passport_edit_identity_box.h" #include "passport/passport_edit_identity_box.h"
#include "passport/passport_panel_controller.h" #include "passport/passport_panel_controller.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/text_options.h" #include "ui/text_options.h"
#include "lang/lang_keys.h" #include "lang/lang_keys.h"

View File

@ -10,7 +10,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "core/file_utilities.h" #include "core/file_utilities.h"
#include "passport/passport_panel_controller.h" #include "passport/passport_panel_controller.h"
#include "passport/ui/passport_details_row.h" #include "passport/ui/passport_details_row.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/labels.h" #include "ui/widgets/labels.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/shadow.h" #include "ui/widgets/shadow.h"
@ -195,11 +195,12 @@ void VerifyBox::setupControls(
if (codeLength > 0) { if (codeLength > 0) {
_code->setAutoSubmit(codeLength, _submit); _code->setAutoSubmit(codeLength, _submit);
} else { } else {
connect(_code, &Ui::SentCodeField::submitted, _submit); _code->submits() | rpl::start_with_next(_submit, _code->lifetime());
} }
connect(_code, &Ui::SentCodeField::changed, [=] { _code->changes(
) | rpl::start_with_next([=] {
problem->hide(anim::type::normal); problem->hide(anim::type::normal);
}); }, _code->lifetime());
} }
void VerifyBox::setInnerFocus() { void VerifyBox::setInnerFocus() {

View File

@ -11,7 +11,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "passport/passport_panel_edit_scans.h" #include "passport/passport_panel_edit_scans.h"
#include "passport/ui/passport_details_row.h" #include "passport/ui/passport_details_row.h"
#include "ui/effects/scroll_content_shadow.h" #include "ui/effects/scroll_content_shadow.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/scroll_area.h" #include "ui/widgets/scroll_area.h"
#include "ui/widgets/labels.h" #include "ui/widgets/labels.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"

View File

@ -11,7 +11,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/controls/userpic_button.h" #include "ui/controls/userpic_button.h"
#include "ui/widgets/labels.h" #include "ui/widgets/labels.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/password_input.h"
#include "ui/wrap/vertical_layout.h" #include "ui/wrap/vertical_layout.h"
#include "ui/wrap/padding_wrap.h" #include "ui/wrap/padding_wrap.h"
#include "boxes/passcode_box.h" #include "boxes/passcode_box.h"

View File

@ -9,7 +9,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "lang/lang_keys.h" #include "lang/lang_keys.h"
#include "base/platform/base_platform_info.h" #include "base/platform/base_platform_info.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/fields/masked_input_field.h"
#include "ui/widgets/labels.h" #include "ui/widgets/labels.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/checkbox.h" #include "ui/widgets/checkbox.h"
@ -268,9 +269,16 @@ AbstractTextRow<Input>::AbstractTextRow(
, _field(this, st::passportDetailsField, nullptr, value) , _field(this, st::passportDetailsField, nullptr, value)
, _value(value) { , _value(value) {
_field->setMaxLength(limit); _field->setMaxLength(limit);
connect(_field, &Input::changed, [=] { if constexpr (std::is_same<Input, Ui::InputField>::value) {
_value = valueCurrent(); _field->changes(
}); ) | rpl::start_with_next([=] {
_value = valueCurrent();
}, _field->lifetime());
} else {
connect(_field, &Input::changed, [=] {
_value = valueCurrent();
});
}
} }
template <typename Input> template <typename Input>

View File

@ -7,7 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/ */
#include "payments/ui/payments_field.h" #include "payments/ui/payments_field.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/boxes/country_select_box.h" #include "ui/boxes/country_select_box.h"
#include "ui/text/format_values.h" #include "ui/text/format_values.h"
#include "ui/ui_utility.h" #include "ui/ui_utility.h"
@ -19,6 +19,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "styles/style_payments.h" #include "styles/style_payments.h"
#include <QtCore/QRegularExpression> #include <QtCore/QRegularExpression>
#include <QtWidgets/QTextEdit>
namespace Payments::Ui { namespace Payments::Ui {
namespace { namespace {
@ -610,7 +611,8 @@ void Field::setupValidator(Fn<ValidateResult(ValidateRequest)> validator) {
} else { } else {
const auto raw = _input->rawTextEdit(); const auto raw = _input->rawTextEdit();
QObject::connect(raw, &QTextEdit::cursorPositionChanged, save); QObject::connect(raw, &QTextEdit::cursorPositionChanged, save);
QObject::connect(_input, &InputField::changed, validate); _input->changes(
) | rpl::start_with_next(validate, _input->lifetime());
} }
} }
@ -648,7 +650,8 @@ void Field::setupSubmit() {
if (_masked) { if (_masked) {
QObject::connect(_masked, &MaskedInputField::submitted, submitted); QObject::connect(_masked, &MaskedInputField::submitted, submitted);
} else { } else {
QObject::connect(_input, &InputField::submitted, submitted); _input->submits(
) | rpl::start_with_next(submitted, _input->lifetime());
} }
} }

View File

@ -29,7 +29,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "base/event_filter.h" #include "base/event_filter.h"
#include "ui/platform/ui_platform_window_title.h" #include "ui/platform/ui_platform_window_title.h"
#include "ui/widgets/popup_menu.h" #include "ui/widgets/popup_menu.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/ui_utility.h" #include "ui/ui_utility.h"
#ifndef DESKTOP_APP_DISABLE_X11_INTEGRATION #ifndef DESKTOP_APP_DISABLE_X11_INTEGRATION
@ -40,6 +40,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include <QtCore/QMimeData> #include <QtCore/QMimeData>
#include <QtGui/QWindow> #include <QtGui/QWindow>
#include <QtWidgets/QMenuBar> #include <QtWidgets/QMenuBar>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QTextEdit>
#include <glibmm.h> #include <glibmm.h>
#include <giomm.h> #include <giomm.h>

View File

@ -33,10 +33,12 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "boxes/about_box.h" #include "boxes/about_box.h"
#include "lang/lang_keys.h" #include "lang/lang_keys.h"
#include "base/platform/mac/base_utilities_mac.h" #include "base/platform/mac/base_utilities_mac.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/ui_utility.h" #include "ui/ui_utility.h"
#include <QtWidgets/QApplication> #include <QtWidgets/QApplication>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QTextEdit>
#include <QtGui/QClipboard> #include <QtGui/QClipboard>
#include <qpa/qwindowsysteminterface.h> #include <qpa/qwindowsysteminterface.h>

View File

@ -30,7 +30,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "platform/mac/touchbar/mac_touchbar_common.h" #include "platform/mac/touchbar/mac_touchbar_common.h"
#include "styles/style_basic.h" #include "styles/style_basic.h"
#include "styles/style_settings.h" #include "styles/style_settings.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "window/section_widget.h" #include "window/section_widget.h"
#include "window/window_controller.h" #include "window/window_controller.h"
#include "window/window_session_controller.h" #include "window/window_session_controller.h"
@ -47,6 +47,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#import <AppKit/NSSegmentedControl.h> #import <AppKit/NSSegmentedControl.h>
#import <AppKit/NSTextField.h> #import <AppKit/NSTextField.h>
#include <QtWidgets/QTextEdit>
using TouchBar::kCircleDiameter; using TouchBar::kCircleDiameter;
using TouchBar::CreateNSImageFromStyleIcon; using TouchBar::CreateNSImageFromStyleIcon;

View File

@ -13,7 +13,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "lang/lang_keys.h" #include "lang/lang_keys.h"
#include "lottie/lottie_icon.h" #include "lottie/lottie_icon.h"
#include "main/main_session.h" #include "main/main_session.h"
#include "settings/cloud_password/settings_cloud_password_common.h"
#include "settings/cloud_password/settings_cloud_password_email.h" #include "settings/cloud_password/settings_cloud_password_email.h"
#include "settings/cloud_password/settings_cloud_password_email_confirm.h" #include "settings/cloud_password/settings_cloud_password_email_confirm.h"
#include "settings/cloud_password/settings_cloud_password_hint.h" #include "settings/cloud_password/settings_cloud_password_hint.h"
@ -23,7 +22,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "settings/settings_common.h" #include "settings/settings_common.h"
#include "ui/boxes/confirm_box.h" #include "ui/boxes/confirm_box.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/fields/password_input.h"
#include "ui/widgets/labels.h" #include "ui/widgets/labels.h"
#include "ui/wrap/vertical_layout.h" #include "ui/wrap/vertical_layout.h"
#include "window/window_session_controller.h" #include "window/window_session_controller.h"

View File

@ -15,7 +15,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "settings/cloud_password/settings_cloud_password_manage.h" #include "settings/cloud_password/settings_cloud_password_manage.h"
#include "ui/boxes/confirm_box.h" #include "ui/boxes/confirm_box.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/wrap/padding_wrap.h" #include "ui/wrap/padding_wrap.h"
#include "ui/wrap/vertical_layout.h" #include "ui/wrap/vertical_layout.h"
#include "window/window_session_controller.h" #include "window/window_session_controller.h"
@ -90,9 +90,10 @@ void Email::setupContent() {
currentStepDataEmail); currentStepDataEmail);
const auto newInput = wrap->entity(); const auto newInput = wrap->entity();
const auto error = AddError(content, nullptr); const auto error = AddError(content, nullptr);
QObject::connect(newInput, &Ui::InputField::changed, [=] { newInput->changes(
) | rpl::start_with_next([=] {
error->hide(); error->hide();
}); }, newInput->lifetime());
AddSkipInsteadOfField(content); AddSkipInsteadOfField(content);
const auto send = [=](Fn<void()> close) { const auto send = [=](Fn<void()> close) {
@ -189,7 +190,7 @@ void Email::setupContent() {
}); });
const auto submit = [=] { button->clicked({}, Qt::LeftButton); }; const auto submit = [=] { button->clicked({}, Qt::LeftButton); };
QObject::connect(newInput, &Ui::InputField::submitted, submit); newInput->submits() | rpl::start_with_next(submit, newInput->lifetime());
setFocusCallback([=] { newInput->setFocus(); }); setFocusCallback([=] { newInput->setFocus(); });

View File

@ -136,9 +136,10 @@ void EmailConfirm::setupContent() {
std::move(objectInput))); std::move(objectInput)));
const auto error = AddError(content, nullptr); const auto error = AddError(content, nullptr);
QObject::connect(newInput, &Ui::InputField::changed, [=] { newInput->changes(
) | rpl::start_with_next([=] {
error->hide(); error->hide();
}); }, newInput->lifetime());
AddSkipInsteadOfField(content); AddSkipInsteadOfField(content);
const auto resendInfo = Ui::CreateChild<Ui::FlatLabel>( const auto resendInfo = Ui::CreateChild<Ui::FlatLabel>(
@ -326,7 +327,7 @@ void EmailConfirm::setupContent() {
const auto submit = [=] { button->clicked({}, Qt::LeftButton); }; const auto submit = [=] { button->clicked({}, Qt::LeftButton); };
newInput->setAutoSubmit(currentStepDataCodeLength, submit); newInput->setAutoSubmit(currentStepDataCodeLength, submit);
QObject::connect(newInput, &Ui::InputField::submitted, submit); newInput->submits() | rpl::start_with_next(submit, newInput->lifetime());
setFocusCallback([=] { newInput->setFocus(); }); setFocusCallback([=] { newInput->setFocus(); });

View File

@ -13,7 +13,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "settings/cloud_password/settings_cloud_password_email.h" #include "settings/cloud_password/settings_cloud_password_email.h"
#include "settings/cloud_password/settings_cloud_password_manage.h" #include "settings/cloud_password/settings_cloud_password_manage.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/labels.h" #include "ui/widgets/labels.h"
#include "ui/wrap/padding_wrap.h" #include "ui/wrap/padding_wrap.h"
#include "ui/wrap/vertical_layout.h" #include "ui/wrap/vertical_layout.h"
@ -79,9 +79,10 @@ void Hint::setupContent() {
currentStepDataHint); currentStepDataHint);
const auto newInput = wrap->entity(); const auto newInput = wrap->entity();
const auto error = AddError(content, nullptr); const auto error = AddError(content, nullptr);
QObject::connect(newInput, &Ui::InputField::changed, [=] { newInput->changes(
) | rpl::start_with_next([=] {
error->hide(); error->hide();
}); }, newInput->lifetime());
AddSkipInsteadOfField(content); AddSkipInsteadOfField(content);
const auto save = [=](const QString &hint) { const auto save = [=](const QString &hint) {
@ -142,7 +143,7 @@ void Hint::setupContent() {
}); });
const auto submit = [=] { button->clicked({}, Qt::LeftButton); }; const auto submit = [=] { button->clicked({}, Qt::LeftButton); };
QObject::connect(newInput, &Ui::InputField::submitted, submit); newInput->submits() | rpl::start_with_next(submit, newInput->lifetime());
setFocusCallback([=] { newInput->setFocus(); }); setFocusCallback([=] { newInput->setFocus(); });

View File

@ -21,7 +21,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/boxes/confirm_box.h" #include "ui/boxes/confirm_box.h"
#include "ui/text/format_values.h" #include "ui/text/format_values.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/password_input.h"
#include "ui/widgets/labels.h" #include "ui/widgets/labels.h"
#include "ui/wrap/vertical_layout.h" #include "ui/wrap/vertical_layout.h"
#include "window/window_session_controller.h" #include "window/window_session_controller.h"

View File

@ -21,7 +21,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "boxes/local_storage_box.h" #include "boxes/local_storage_box.h"
#include "ui/wrap/vertical_layout.h" #include "ui/wrap/vertical_layout.h"
#include "ui/wrap/slide_wrap.h" #include "ui/wrap/slide_wrap.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/checkbox.h" #include "ui/widgets/checkbox.h"
#include "ui/widgets/color_editor.h" #include "ui/widgets/color_editor.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"

View File

@ -30,7 +30,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/text/text_utilities.h" #include "ui/text/text_utilities.h"
#include "ui/widgets/box_content_divider.h" #include "ui/widgets/box_content_divider.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/labels.h" #include "ui/widgets/labels.h"
#include "ui/wrap/slide_wrap.h" #include "ui/wrap/slide_wrap.h"
#include "window/window_controller.h" #include "window/window_controller.h"

View File

@ -15,7 +15,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/wrap/slide_wrap.h" #include "ui/wrap/slide_wrap.h"
#include "ui/widgets/labels.h" #include "ui/widgets/labels.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/popup_menu.h" #include "ui/widgets/popup_menu.h"
#include "ui/widgets/box_content_divider.h" #include "ui/widgets/box_content_divider.h"
#include "ui/widgets/menu/menu_add_action_callback_factory.h" #include "ui/widgets/menu/menu_add_action_callback_factory.h"
@ -538,10 +538,8 @@ void SetupBio(
auto cursor = bio->textCursor(); auto cursor = bio->textCursor();
cursor.setPosition(bio->getLastText().size()); cursor.setPosition(bio->getLastText().size());
bio->setTextCursor(cursor); bio->setTextCursor(cursor);
QObject::connect(bio, &Ui::InputField::submitted, [=] { bio->submits() | rpl::start_with_next([=] { save(); }, bio->lifetime());
save(); bio->changes() | rpl::start_with_next(updated, bio->lifetime());
});
QObject::connect(bio, &Ui::InputField::changed, updated);
bio->setInstantReplaces(Ui::InstantReplaces::Default()); bio->setInstantReplaces(Ui::InstantReplaces::Default());
bio->setInstantReplacesEnabled( bio->setInstantReplacesEnabled(
Core::App().settings().replaceEmojiValue()); Core::App().settings().replaceEmojiValue());

View File

@ -20,7 +20,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "storage/storage_domain.h" #include "storage/storage_domain.h"
#include "ui/boxes/confirm_box.h" #include "ui/boxes/confirm_box.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/password_input.h"
#include "ui/widgets/labels.h" #include "ui/widgets/labels.h"
#include "ui/wrap/vertical_layout.h" #include "ui/wrap/vertical_layout.h"
#include "window/window_session_controller.h" #include "window/window_session_controller.h"

View File

@ -13,7 +13,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "core/application.h" #include "core/application.h"
#include "core/core_settings.h" #include "core/core_settings.h"
#include "mtproto/mtproto_config.h" #include "mtproto/mtproto_config.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/chat/attach/attach_send_files_way.h" #include "ui/chat/attach/attach_send_files_way.h"
#include "ui/power_saving.h" #include "ui/power_saving.h"
#include "window/themes/window_theme.h" #include "window/themes/window_theme.h"

View File

@ -10,7 +10,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/chat/chat_theme.h" #include "ui/chat/chat_theme.h"
#include "ui/chat/chat_style.h" #include "ui/chat/chat_style.h"
#include "ui/widgets/scroll_area.h" #include "ui/widgets/scroll_area.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/wrap/padding_wrap.h" #include "ui/wrap/padding_wrap.h"
#include "ui/painter.h" #include "ui/painter.h"
@ -418,16 +418,20 @@ void Autocomplete::setupContent() {
}; };
inner->activated() | rpl::start_with_next(submit, lifetime()); inner->activated() | rpl::start_with_next(submit, lifetime());
connect(input, &Ui::InputField::blurred, [=] { input->focusedChanges(
) | rpl::filter(!rpl::mappers::_1) | rpl::start_with_next([=] {
base::call_delayed(10, this, [=] { base::call_delayed(10, this, [=] {
if (!input->hasFocus()) { if (!input->hasFocus()) {
deactivate(); deactivate();
} }
}); });
}); }, input->lifetime());
connect(input, &Ui::InputField::cancelled, [=] { deactivate(); }); input->cancelled(
connect(input, &Ui::InputField::changed, refresh); ) | rpl::start_with_next([=] {
connect(input, &Ui::InputField::submitted, submit); deactivate();
}, input->lifetime());
input->changes() | rpl::start_with_next(refresh, input->lifetime());
input->submits() | rpl::start_with_next(submit, input->lifetime());
input->customUpDown(true); input->customUpDown(true);
_activate = [=] { _activate = [=] {

View File

@ -18,7 +18,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "history/history.h" #include "history/history.h"
#include "boxes/abstract_box.h" #include "boxes/abstract_box.h"
#include "ui/toast/toast.h" #include "ui/toast/toast.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/chat/attach/attach_prepare.h" #include "ui/chat/attach/attach_prepare.h"
#include "ui/text/format_values.h" #include "ui/text/format_values.h"
#include "ui/text/text_entity.h" #include "ui/text/text_entity.h"
@ -109,8 +109,11 @@ void EditInfoBox::prepare() {
addButton(tr::lng_settings_save(), save); addButton(tr::lng_settings_save(), save);
addButton(tr::lng_cancel(), [=] { closeBox(); }); addButton(tr::lng_cancel(), [=] { closeBox(); });
connect(_field, &Ui::InputField::submitted, save); _field->submits() | rpl::start_with_next(save, _field->lifetime());
connect(_field, &Ui::InputField::cancelled, [=] { closeBox(); }); _field->cancelled(
) | rpl::start_with_next([=] {
closeBox();
}, _field->lifetime());
Ui::Emoji::SuggestionsController::Init( Ui::Emoji::SuggestionsController::Init(
getDelegate()->outerContainer(), getDelegate()->outerContainer(),
_field, _field,

View File

@ -11,13 +11,15 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "base/event_filter.h" #include "base/event_filter.h"
#include "ui/boxes/calendar_box.h" #include "ui/boxes/calendar_box.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/time_input.h" #include "ui/widgets/time_input.h"
#include "ui/ui_utility.h" #include "ui/ui_utility.h"
#include "lang/lang_keys.h" #include "lang/lang_keys.h"
#include "styles/style_layers.h" #include "styles/style_layers.h"
#include "styles/style_boxes.h" #include "styles/style_boxes.h"
#include <QtWidgets/QTextEdit>
namespace Ui { namespace Ui {
namespace { namespace {
@ -147,8 +149,9 @@ ChooseDateTimeBoxDescriptor ChooseDateTimeBox(
const auto calendar = const auto calendar =
content->lifetime().make_state<QPointer<CalendarBox>>(); content->lifetime().make_state<QPointer<CalendarBox>>();
const auto calendarStyle = args.style.calendarStyle; const auto calendarStyle = args.style.calendarStyle;
QObject::connect(state->day, &InputField::focused, [=] { state->day->focusedChanges(
if (*calendar) { ) | rpl::start_with_next([=](bool focused) {
if (*calendar || !focused) {
return; return;
} }
*calendar = box->getDelegate()->show( *calendar = box->getDelegate()->show(
@ -167,7 +170,7 @@ ChooseDateTimeBoxDescriptor ChooseDateTimeBox(
) | rpl::start_with_next(crl::guard(state->time, [=] { ) | rpl::start_with_next(crl::guard(state->time, [=] {
state->time->setFocusFast(); state->time->setFocusFast();
}), (*calendar)->lifetime()); }), (*calendar)->lifetime());
}); }, state->day->lifetime());
const auto collect = [=] { const auto collect = [=] {
const auto timeValue = state->time->valueCurrent().split(':'); const auto timeValue = state->time->valueCurrent().split(':');

View File

@ -73,7 +73,8 @@ void ConfirmPhoneBox::prepare() {
+ st::usernameSkip + st::usernameSkip
+ (_fragment ? (_fragment->height() + fragmentSkip()) : 0)); + (_fragment ? (_fragment->height() + fragmentSkip()) : 0));
connect(_code, &Ui::InputField::submitted, [=] { sendCode(); }); _code->submits(
) | rpl::start_with_next([=] { sendCode(); }, _code->lifetime());
showChildren(); showChildren();
} }

View File

@ -10,7 +10,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "lang/lang_keys.h" #include "lang/lang_keys.h"
#include "ui/boxes/choose_date_time.h" #include "ui/boxes/choose_date_time.h"
#include "ui/widgets/labels.h" #include "ui/widgets/labels.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/fields/number_input.h"
#include "ui/widgets/checkbox.h" #include "ui/widgets/checkbox.h"
#include "ui/wrap/slide_wrap.h" #include "ui/wrap/slide_wrap.h"
#include "base/unixtime.h" #include "base/unixtime.h"

View File

@ -9,7 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "lang/lang_keys.h" #include "lang/lang_keys.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "styles/style_layers.h" #include "styles/style_layers.h"
#include "styles/style_calls.h" #include "styles/style_calls.h"
@ -92,11 +92,16 @@ void RateCallBox::ratingChanged(int value) {
_comment->height()); _comment->height());
updateMaxHeight(); updateMaxHeight();
connect(_comment, &InputField::resized, [=] { _comment->heightChanges(
) | rpl::start_with_next([=] {
commentResized(); commentResized();
}); }, _comment->lifetime());
connect(_comment, &InputField::submitted, [=] { send(); }); _comment->submits(
connect(_comment, &InputField::cancelled, [=] { closeBox(); }); ) | rpl::start_with_next([=] { send(); }, _comment->lifetime());
_comment->cancelled(
) | rpl::start_with_next([=] {
closeBox();
}, _comment->lifetime());
} }
_comment->setFocusFast(); _comment->setFocusFast();
} else if (_comment) { } else if (_comment) {

View File

@ -11,7 +11,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/layers/generic_box.h" #include "ui/layers/generic_box.h"
#include "ui/wrap/vertical_layout.h" #include "ui/wrap/vertical_layout.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/toast/toast.h" #include "ui/toast/toast.h"
#include "info/profile/info_profile_icon.h" #include "info/profile/info_profile_icon.h"
#include "styles/style_chat_helpers.h" #include "styles/style_chat_helpers.h"
@ -148,7 +148,8 @@ void ReportDetailsBox(
const auto text = details->getLastText(); const auto text = details->getLastText();
done(text); done(text);
}; };
QObject::connect(details, &InputField::submitted, submit); details->submits(
) | rpl::start_with_next(submit, details->lifetime());
box->addButton(tr::lng_report_button(), submit); box->addButton(tr::lng_report_button(), submit);
box->addButton(tr::lng_cancel(), [=] { box->closeBox(); }); box->addButton(tr::lng_cancel(), [=] { box->closeBox(); });
} }

View File

@ -9,7 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "base/qt_signal_producer.h" #include "base/qt_signal_producer.h"
#include "lang/lang_keys.h" #include "lang/lang_keys.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/wrap/fade_wrap.h" #include "ui/wrap/fade_wrap.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/painter.h" #include "ui/painter.h"
@ -306,7 +306,8 @@ anim::type SearchWithGroups::animated() const {
} }
void SearchWithGroups::initField() { void SearchWithGroups::initField() {
connect(_field, &InputField::changed, [=] { _field->changes(
) | rpl::start_with_next([=] {
const auto last = FieldQuery(_field); const auto last = FieldQuery(_field);
_query = last; _query = last;
const auto empty = last.empty(); const auto empty = last.empty();
@ -319,7 +320,7 @@ void SearchWithGroups::initField() {
_chosenGroup = QString(); _chosenGroup = QString();
scrollGroupsToStart(); scrollGroupsToStart();
} }
}); }, _field->lifetime());
_fieldPlaceholderWidth = tr::lng_dlg_filter( _fieldPlaceholderWidth = tr::lng_dlg_filter(
) | rpl::map([=](const QString &value) { ) | rpl::map([=](const QString &value) {
@ -492,9 +493,10 @@ void SearchWithGroups::initButtons() {
_field->setFocus(); _field->setFocus();
scrollGroupsToStart(); scrollGroupsToStart();
}); });
QObject::connect(_field, &InputField::focused, [=] { _field->focusedChanges(
) | rpl::filter(rpl::mappers::_1) | rpl::start_with_next([=] {
scrollGroupsToStart(); scrollGroupsToStart();
}); }, _field->lifetime());
_field->raise(); _field->raise();
_fade->raise(); _fade->raise();
_search->raise(); _search->raise();
@ -519,9 +521,7 @@ void SearchWithGroups::ensureRounding(int size, float64 ratio) {
} }
rpl::producer<> SearchWithGroups::escapes() const { rpl::producer<> SearchWithGroups::escapes() const {
return base::qt_signal_producer( return _field->cancelled();
_field.get(),
&Ui::InputField::cancelled);
} }
rpl::producer<std::vector<QString>> SearchWithGroups::queryValue() const { rpl::producer<std::vector<QString>> SearchWithGroups::queryValue() const {

View File

@ -9,7 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "styles/style_widgets.h" #include "styles/style_widgets.h"
#include "ui/wrap/padding_wrap.h" #include "ui/wrap/padding_wrap.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/shadow.h" #include "ui/widgets/shadow.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "lang/lang_keys.h" #include "lang/lang_keys.h"
@ -30,9 +30,10 @@ auto SearchFieldController::createRowView(
auto field = createField(wrap, st.field).release(); auto field = createField(wrap, st.field).release();
field->show(); field->show();
field->connect(field, &Ui::InputField::cancelled, [=] { field->cancelled(
) | rpl::start_with_next([=] {
field->setText(QString()); field->setText(QString());
}); }, field->lifetime());
auto cancel = CreateChild<Ui::CrossButton>( auto cancel = CreateChild<Ui::CrossButton>(
wrap, wrap,
@ -104,9 +105,10 @@ base::unique_qptr<Ui::InputField> SearchFieldController::createField(
tr::lng_dlg_filter(), tr::lng_dlg_filter(),
_query.current()); _query.current());
auto field = result.get(); auto field = result.get();
field->connect(field, &Ui::InputField::changed, [=] { field->changes(
) | rpl::start_with_next([=] {
_query = field->getLastText(); _query = field->getLastText();
}); }, field->lifetime());
_view.reset(field); _view.reset(field);
return result; return result;
} }

View File

@ -12,7 +12,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/painter.h" #include "ui/painter.h"
#include "ui/rect.h" #include "ui/rect.h"
#include "ui/ui_utility.h" #include "ui/ui_utility.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/masked_input_field.h"
#include "ui/widgets/shadow.h" #include "ui/widgets/shadow.h"
#include "styles/style_boxes.h" #include "styles/style_boxes.h"
#include "styles/style_media_view.h" #include "styles/style_media_view.h"

View File

@ -9,6 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "lang/lang_keys.h" #include "lang/lang_keys.h"
#include "countries/countries_instance.h" // Countries::ValidPhoneCode #include "countries/countries_instance.h" // Countries::ValidPhoneCode
#include "styles/style_widgets.h"
#include <QtCore/QRegularExpression> #include <QtCore/QRegularExpression>

View File

@ -7,7 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/ */
#pragma once #pragma once
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/masked_input_field.h"
namespace Ui { namespace Ui {

View File

@ -8,7 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/widgets/multi_select.h" #include "ui/widgets/multi_select.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/scroll_area.h" #include "ui/widgets/scroll_area.h"
#include "ui/effects/animations.h" #include "ui/effects/animations.h"
#include "ui/effects/cross_animation.h" #include "ui/effects/cross_animation.h"
@ -453,7 +453,6 @@ protected:
void keyPressEvent(QKeyEvent *e) override; void keyPressEvent(QKeyEvent *e) override;
private: private:
void submitted(Qt::KeyboardModifiers modifiers);
void cancelled(); void cancelled();
void queryChanged(); void queryChanged();
void fieldFocused(); void fieldFocused();
@ -659,10 +658,24 @@ MultiSelect::Inner::Inner(
, _field(this, _st.field, std::move(placeholder), query) , _field(this, _st.field, std::move(placeholder), query)
, _cancel(this, _st.fieldCancel) { , _cancel(this, _st.fieldCancel) {
_field->customUpDown(true); _field->customUpDown(true);
connect(_field, &Ui::InputField::focused, [=] { fieldFocused(); }); _field->focusedChanges(
connect(_field, &Ui::InputField::changed, [=] { queryChanged(); }); ) | rpl::filter(rpl::mappers::_1) | rpl::start_with_next([=] {
connect(_field, &Ui::InputField::submitted, this, &Inner::submitted); fieldFocused();
connect(_field, &Ui::InputField::cancelled, this, &Inner::cancelled); }, _field->lifetime());
_field->changes(
) | rpl::start_with_next([=] {
queryChanged();
}, _field->lifetime());
_field->submits(
) | rpl::start_with_next([=](Qt::KeyboardModifiers m) {
if (_submittedCallback) {
_submittedCallback(m);
}
}, _field->lifetime());
_field->cancelled(
) | rpl::start_with_next([=] {
cancelled();
}, _field->lifetime());
_cancel->setClickedCallback([=] { _cancel->setClickedCallback([=] {
clearQuery(); clearQuery();
_field->setFocus(); _field->setFocus();
@ -874,12 +887,6 @@ void MultiSelect::Inner::keyPressEvent(QKeyEvent *e) {
} }
} }
void MultiSelect::Inner::submitted(Qt::KeyboardModifiers modifiers) {
if (_submittedCallback) {
_submittedCallback(modifiers);
}
}
void MultiSelect::Inner::cancelled() { void MultiSelect::Inner::cancelled() {
if (_cancelledCallback) { if (_cancelledCallback) {
_cancelledCallback(); _cancelledCallback();

View File

@ -19,7 +19,7 @@ SentCodeField::SentCodeField(
rpl::producer<QString> placeholder, rpl::producer<QString> placeholder,
const QString &val) const QString &val)
: Ui::InputField(parent, st, std::move(placeholder), val) { : Ui::InputField(parent, st, std::move(placeholder), val) {
connect(this, &Ui::InputField::changed, [this] { fix(); }); changes() | rpl::start_with_next([=] { fix(); }, lifetime());
} }
void SentCodeField::setAutoSubmit(int length, Fn<void()> submitCallback) { void SentCodeField::setAutoSubmit(int length, Fn<void()> submitCallback) {

View File

@ -8,7 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#pragma once #pragma once
#include "base/timer.h" #include "base/timer.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
namespace Ui { namespace Ui {

View File

@ -14,7 +14,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "chat_helpers/message_field.h" #include "chat_helpers/message_field.h"
#include "lang/lang_keys.h" #include "lang/lang_keys.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/platform/ui_platform_utility.h" #include "ui/platform/ui_platform_utility.h"
#include "ui/text/text_options.h" #include "ui/text/text_options.h"
#include "ui/text/text_utilities.h" #include "ui/text/text_utilities.h"
@ -1105,9 +1105,16 @@ void Notification::showReplyField() {
// Catch mouse press event to activate the window. // Catch mouse press event to activate the window.
QCoreApplication::instance()->installEventFilter(this); QCoreApplication::instance()->installEventFilter(this);
connect(_replyArea, &Ui::InputField::resized, [=] { replyResized(); }); _replyArea->heightChanges(
connect(_replyArea, &Ui::InputField::submitted, [=] { sendReply(); }); ) | rpl::start_with_next([=] {
connect(_replyArea, &Ui::InputField::cancelled, [=] { replyCancel(); }); replyResized();
}, _replyArea->lifetime());
_replyArea->submits(
) | rpl::start_with_next([=] { sendReply(); }, _replyArea->lifetime());
_replyArea->cancelled(
) | rpl::start_with_next([=] {
replyCancel();
}, _replyArea->lifetime());
_replySend.create(this, st::notifySendReply); _replySend.create(this, st::notifySendReply);
_replySend->moveToRight(st::notifyBorderWidth, st::notifyMinHeight); _replySend->moveToRight(st::notifyBorderWidth, st::notifyMinHeight);

View File

@ -14,7 +14,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "window/window_controller.h" #include "window/window_controller.h"
#include "ui/boxes/confirm_box.h" #include "ui/boxes/confirm_box.h"
#include "ui/text/text_utilities.h" #include "ui/text/text_utilities.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "ui/widgets/checkbox.h" #include "ui/widgets/checkbox.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/labels.h" #include "ui/widgets/labels.h"

View File

@ -15,7 +15,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/text/text.h" #include "ui/text/text.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
#include "ui/widgets/checkbox.h" #include "ui/widgets/checkbox.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/password_input.h"
#include "ui/widgets/labels.h" #include "ui/widgets/labels.h"
#include "ui/wrap/vertical_layout.h" #include "ui/wrap/vertical_layout.h"
#include "ui/toast/toast.h" #include "ui/toast/toast.h"

View File

@ -12,7 +12,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "chat_helpers/compose/compose_show.h" #include "chat_helpers/compose/compose_show.h"
#include "chat_helpers/message_field.h" #include "chat_helpers/message_field.h"
#include "ui/wrap/slide_wrap.h" #include "ui/wrap/slide_wrap.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/fields/input_field.h"
#include "api/api_chat_participants.h" #include "api/api_chat_participants.h"
#include "lang/lang_keys.h" #include "lang/lang_keys.h"
#include "ui/boxes/confirm_box.h" #include "ui/boxes/confirm_box.h"
@ -1924,9 +1924,8 @@ QPointer<Ui::BoxContent> ShowForwardMessagesBox(
const auto field = comment->entity(); const auto field = comment->entity();
QObject::connect(field, &Ui::InputField::submitted, [=] { field->submits(
submit({}); ) | rpl::start_with_next([=] { submit({}); }, field->lifetime());
});
InitMessageFieldHandlers( InitMessageFieldHandlers(
session, session,
show, show,

@ -1 +1 @@
Subproject commit c989a9f41e5bd8268587af2256efa89327cb3ae0 Subproject commit dfc42b20ce602b105e5400e03eed626fd5bab7df

@ -1 +1 @@
Subproject commit bcf88b90658c7e0925c11c486732d874477baf0d Subproject commit 5a2402ad5d7e41a48c84d56c45df6b5d49e8b176

@ -1 +1 @@
Subproject commit 5b9092bcb27a207fed3cb2155bb98db46d7cedfa Subproject commit 552d96a51fa5c8e50f9d6f631055558d99356cb4