From 98bb520f476c3ca1df950969d6e5079036ec0de5 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Thu, 31 Aug 2023 14:21:24 +0300 Subject: [PATCH] Adjusted code for refactor of input fields in lib_ui. --- .../SourceFiles/boxes/add_contact_box.cpp | 49 +++++++++-------- Telegram/SourceFiles/boxes/connection_box.cpp | 4 +- .../SourceFiles/boxes/create_poll_box.cpp | 53 +++++++++++-------- .../SourceFiles/boxes/edit_caption_box.cpp | 20 ++++--- .../boxes/filters/edit_filter_box.cpp | 7 +-- .../boxes/filters/edit_filter_links.cpp | 2 +- Telegram/SourceFiles/boxes/passcode_box.cpp | 39 ++++++++------ Telegram/SourceFiles/boxes/passcode_box.h | 1 - .../boxes/peers/edit_contact_box.cpp | 6 +-- .../boxes/peers/edit_forum_topic_box.cpp | 8 ++- .../boxes/peers/edit_participant_box.cpp | 7 +-- .../boxes/peers/edit_peer_info_box.cpp | 18 +++---- .../boxes/peers/edit_peer_type_box.cpp | 2 +- Telegram/SourceFiles/boxes/send_files_box.cpp | 18 ++++--- Telegram/SourceFiles/boxes/sessions_box.cpp | 4 +- Telegram/SourceFiles/boxes/share_box.cpp | 7 ++- Telegram/SourceFiles/boxes/stickers_box.cpp | 2 +- .../calls/group/calls_group_menu.cpp | 2 +- .../calls/group/calls_group_panel.cpp | 2 +- .../calls/group/calls_group_settings.cpp | 2 +- .../group/ui/calls_group_recording_box.cpp | 6 +-- .../chat_helpers/emoji_suggestions_widget.cpp | 2 +- .../chat_helpers/field_autocomplete.cpp | 2 +- .../chat_helpers/gifs_list_widget.cpp | 2 +- .../chat_helpers/message_field.cpp | 23 +++++--- .../SourceFiles/chat_helpers/message_field.h | 5 +- .../chat_helpers/stickers_list_footer.cpp | 2 +- Telegram/SourceFiles/core/core_settings.cpp | 2 +- Telegram/SourceFiles/data/data_drafts.cpp | 2 +- Telegram/SourceFiles/data/data_forum.cpp | 2 +- Telegram/SourceFiles/data/data_types.cpp | 2 +- .../data/stickers/data_custom_emoji.cpp | 2 +- .../SourceFiles/dialogs/dialogs_widget.cpp | 13 ++--- .../admin_log/history_admin_log_section.cpp | 15 ++++-- .../SourceFiles/history/history_widget.cpp | 33 +++++++----- Telegram/SourceFiles/history/history_widget.h | 2 +- .../history_view_compose_controls.cpp | 41 +++++++------- .../controls/history_view_compose_controls.h | 3 +- .../view/history_view_schedule_box.cpp | 2 +- .../view/history_view_top_bar_widget.cpp | 12 +++-- .../SourceFiles/info/info_content_widget.cpp | 2 +- Telegram/SourceFiles/info/info_top_bar.cpp | 5 +- .../info/profile/info_profile_members.cpp | 2 +- Telegram/SourceFiles/intro/intro_code.cpp | 1 + Telegram/SourceFiles/intro/intro_code.h | 2 +- .../intro/intro_password_check.cpp | 10 ++-- Telegram/SourceFiles/intro/intro_signup.cpp | 2 +- .../main/main_session_settings.cpp | 2 +- .../passport/passport_edit_identity_box.cpp | 2 +- .../passport/passport_panel_edit_contact.cpp | 9 ++-- .../passport/passport_panel_edit_document.cpp | 2 +- .../passport/passport_panel_password.cpp | 2 +- .../passport/ui/passport_details_row.cpp | 16 ++++-- .../payments/ui/payments_field.cpp | 9 ++-- .../platform/linux/main_window_linux.cpp | 4 +- .../platform/mac/main_window_mac.mm | 4 +- .../mac/touchbar/items/mac_scrubber_item.mm | 4 +- .../settings_cloud_password_common.cpp | 4 +- .../settings_cloud_password_email.cpp | 9 ++-- .../settings_cloud_password_email_confirm.cpp | 7 +-- .../settings_cloud_password_hint.cpp | 9 ++-- .../settings_cloud_password_input.cpp | 2 +- .../SourceFiles/settings/settings_chat.cpp | 2 +- .../SourceFiles/settings/settings_folders.cpp | 2 +- .../settings/settings_information.cpp | 8 ++- .../settings/settings_local_passcode.cpp | 2 +- .../details/storage_settings_scheme.cpp | 2 +- .../support/support_autocomplete.cpp | 16 +++--- .../SourceFiles/support/support_helper.cpp | 9 ++-- .../SourceFiles/ui/boxes/choose_date_time.cpp | 11 ++-- .../ui/boxes/confirm_phone_box.cpp | 3 +- .../SourceFiles/ui/boxes/edit_invite_link.cpp | 3 +- .../SourceFiles/ui/boxes/rate_call_box.cpp | 15 ++++-- Telegram/SourceFiles/ui/boxes/report_box.cpp | 5 +- .../SourceFiles/ui/controls/tabbed_search.cpp | 16 +++--- .../ui/search_field_controller.cpp | 12 +++-- .../SourceFiles/ui/widgets/color_editor.cpp | 2 +- .../ui/widgets/fields/special_fields.cpp | 1 + .../ui/widgets/fields/special_fields.h | 2 +- .../SourceFiles/ui/widgets/multi_select.cpp | 31 ++++++----- .../ui/widgets/sent_code_field.cpp | 2 +- .../SourceFiles/ui/widgets/sent_code_field.h | 2 +- .../window/notifications_manager_default.cpp | 15 ++++-- .../window/themes/window_theme_editor_box.cpp | 2 +- .../window/window_lock_widgets.cpp | 2 +- .../SourceFiles/window/window_peer_menu.cpp | 7 ++- Telegram/lib_spellcheck | 2 +- Telegram/lib_ui | 2 +- Telegram/lib_webview | 2 +- 89 files changed, 413 insertions(+), 300 deletions(-) diff --git a/Telegram/SourceFiles/boxes/add_contact_box.cpp b/Telegram/SourceFiles/boxes/add_contact_box.cpp index ccea61d70..aab01656d 100644 --- a/Telegram/SourceFiles/boxes/add_contact_box.cpp +++ b/Telegram/SourceFiles/boxes/add_contact_box.cpp @@ -29,6 +29,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/widgets/buttons.h" #include "ui/widgets/labels.h" #include "ui/toast/toast.h" +#include "ui/widgets/fields/input_field.h" #include "ui/widgets/fields/special_fields.h" #include "ui/widgets/popup_menu.h" #include "ui/text/format_values.h" @@ -297,8 +298,11 @@ void AddContactBox::prepare() { : tr::lng_enter_contact_data()); updateButtons(); - connect(_first, &Ui::InputField::submitted, [=] { submit(); }); - connect(_last, &Ui::InputField::submitted, [=] { submit(); }); + const auto 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(); }); setDimensions( @@ -567,23 +571,24 @@ void GroupInfoBox::prepare() { _description->setSubmitSettings( Core::App().settings().sendSubmitWay()); - connect(_description, &Ui::InputField::resized, [=] { + _description->heightChanges( + ) | rpl::start_with_next([=] { descriptionResized(); - }); - connect(_description, &Ui::InputField::submitted, [=] { - submit(); - }); - connect(_description, &Ui::InputField::cancelled, [=] { + }, _description->lifetime()); + _description->submits( + ) | rpl::start_with_next([=] { submit(); }, _description->lifetime()); + _description->cancelled( + ) | rpl::start_with_next([=] { closeBox(); - }); + }, _description->lifetime()); Ui::Emoji::SuggestionsController::Init( getDelegate()->outerContainer(), _description, &_navigation->session()); } - - connect(_title, &Ui::InputField::submitted, [=] { submitName(); }); + _title->submits( + ) | rpl::start_with_next([=] { submitName(); }, _title->lifetime()); addButton( ((_type != Type::Group || _canAddBot) @@ -1522,20 +1527,22 @@ void EditNameBox::prepare() { _first->setMaxLength(Ui::EditPeer::kMaxUserFirstLastName); _last->setMaxLength(Ui::EditPeer::kMaxUserFirstLastName); - connect(_first, &Ui::InputField::submitted, [=] { submit(); }); - connect(_last, &Ui::InputField::submitted, [=] { submit(); }); + _first->submits( + ) | rpl::start_with_next([=] { submit(); }, _first->lifetime()); + _last->submits( + ) | rpl::start_with_next([=] { submit(); }, _last->lifetime()); _first->customTab(true); _last->customTab(true); - QObject::connect( - _first, - &Ui::InputField::tabbed, - [=] { _last->setFocus(); }); - QObject::connect( - _last, - &Ui::InputField::tabbed, - [=] { _first->setFocus(); }); + _first->tabbed( + ) | rpl::start_with_next([=] { + _last->setFocus(); + }, _first->lifetime()); + _last->tabbed( + ) | rpl::start_with_next([=] { + _first->setFocus(); + }, _last->lifetime()); } void EditNameBox::setInnerFocus() { diff --git a/Telegram/SourceFiles/boxes/connection_box.cpp b/Telegram/SourceFiles/boxes/connection_box.cpp index 626671cb4..144582a53 100644 --- a/Telegram/SourceFiles/boxes/connection_box.cpp +++ b/Telegram/SourceFiles/boxes/connection_box.cpp @@ -18,7 +18,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "mtproto/facade.h" #include "ui/widgets/checkbox.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/dropdown_menu.h" #include "ui/wrap/slide_wrap.h" diff --git a/Telegram/SourceFiles/boxes/create_poll_box.cpp b/Telegram/SourceFiles/boxes/create_poll_box.cpp index ca1eb70f3..3274e4eeb 100644 --- a/Telegram/SourceFiles/boxes/create_poll_box.cpp +++ b/Telegram/SourceFiles/boxes/create_poll_box.cpp @@ -13,7 +13,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/wrap/vertical_layout.h" #include "ui/wrap/slide_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/labels.h" #include "ui/widgets/buttons.h" @@ -184,7 +184,8 @@ not_null CreateWarningLabel( QString(), st::createPollWarning); result->setAttribute(Qt::WA_TransparentForMouseEvents); - QObject::connect(field, &Ui::InputField::changed, [=] { + field->changes( + ) | rpl::start_with_next([=] { Ui::PostponeCall(crl::guard(field, [=] { const auto length = field->getLastText().size(); const auto value = valueLimit - length; @@ -198,7 +199,7 @@ not_null CreateWarningLabel( } result->setVisible(shown); })); - }); + }, field->lifetime()); return result; } @@ -243,13 +244,14 @@ Options::Option::Option( _content->resize(_content->width(), height); }, _field->lifetime()); - QObject::connect(_field, &Ui::InputField::changed, [=] { + _field->changes( + ) | rpl::start_with_next([=] { Ui::PostponeCall(crl::guard(_field, [=] { if (_hasCorrect) { _correct->toggle(isGood(), anim::type::normal); } })); - }); + }, _field->lifetime()); createShadow(); createRemove(); @@ -303,10 +305,11 @@ void Options::Option::createRemove() { const auto toggle = lifetime.make_state>(false); _removeAlways = lifetime.make_state>(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. *toggle = !field->getLastText().isEmpty(); - }); + }, field->lifetime()); rpl::combine( toggle->value(), _removeAlways->value(), @@ -649,28 +652,32 @@ void Options::addEmptyOption() { _position + _list.size() + _destroyed.size(), _chooseCorrectGroup)); const auto field = _list.back()->field(); - QObject::connect(field, &Ui::InputField::submitted, [=] { + field->submits( + ) | rpl::start_with_next([=] { const auto index = findField(field); if (_list[index]->isGood() && index + 1 < _list.size()) { _list[index + 1]->setFocus(); } - }); - QObject::connect(field, &Ui::InputField::changed, [=] { + }, field->lifetime()); + field->changes( + ) | rpl::start_with_next([=] { Ui::PostponeCall(crl::guard(field, [=] { validateState(); })); - }); - QObject::connect(field, &Ui::InputField::focused, [=] { + }, field->lifetime()); + field->focusedChanges( + ) | rpl::filter(rpl::mappers::_1) | rpl::start_with_next([=] { _scrollToWidget.fire_copy(field); - }); - QObject::connect(field, &Ui::InputField::tabbed, [=] { + }, field->lifetime()); + field->tabbed( + ) | rpl::start_with_next([=] { const auto index = findField(field); if (index + 1 < _list.size()) { _list[index + 1]->setFocus(); } else { _tabbed.fire({}); } - }); + }, field->lifetime()); base::install_event_filter(field, [=](not_null event) { if (event->type() != QEvent::KeyPress || !field->getLastText().isEmpty()) { @@ -927,9 +934,10 @@ object_ptr CreatePollBox::setupContent() { st::boxDividerLabel), st::createPollLimitPadding)); - connect(question, &Ui::InputField::tabbed, [=] { + question->tabbed( + ) | rpl::start_with_next([=] { options->focusFirst(); - }); + }, question->lifetime()); AddSkip(container); AddSubsectionTitle(container, tr::lng_polls_create_settings()); @@ -975,9 +983,10 @@ object_ptr CreatePollBox::setupContent() { } }, question->lifetime()); - connect(solution, &Ui::InputField::tabbed, [=] { + solution->tabbed( + ) | rpl::start_with_next([=] { question->setFocus(); - }); + }, solution->lifetime()); quiz->setDisabled(_disabled & PollData::Flag::Quiz); if (multiple) { @@ -1009,12 +1018,12 @@ object_ptr CreatePollBox::setupContent() { const auto text = question->getLastText().trimmed(); return !text.isEmpty() && (text.size() <= kQuestionLimit); }; - - connect(question, &Ui::InputField::submitted, [=] { + question->submits( + ) | rpl::start_with_next([=] { if (isValidQuestion()) { options->focusFirst(); } - }); + }, question->lifetime()); _setInnerFocus = [=] { question->setFocusFast(); diff --git a/Telegram/SourceFiles/boxes/edit_caption_box.cpp b/Telegram/SourceFiles/boxes/edit_caption_box.cpp index 4a2b53c5f..defc4bd64 100644 --- a/Telegram/SourceFiles/boxes/edit_caption_box.cpp +++ b/Telegram/SourceFiles/boxes/edit_caption_box.cpp @@ -54,7 +54,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/painter.h" #include "ui/ui_utility.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/wrap/slide_wrap.h" #include "ui/wrap/vertical_layout.h" @@ -488,9 +488,16 @@ void EditCaptionBox::setupField() { Core::App().settings().sendSubmitWay()); _field->setMaxHeight(st::defaultComposeFiles.caption.heightMax); - connect(_field, &Ui::InputField::submitted, [=] { save(); }); - connect(_field, &Ui::InputField::cancelled, [=] { closeBox(); }); - connect(_field, &Ui::InputField::resized, [=] { captionResized(); }); + _field->submits( + ) | rpl::start_with_next([=] { save(); }, _field->lifetime()); + _field->cancelled( + ) | rpl::start_with_next([=] { + closeBox(); + }, _field->lifetime()); + _field->heightChanges( + ) | rpl::start_with_next([=] { + captionResized(); + }, _field->lifetime()); _field->setMimeDataHook([=]( not_null data, Ui::InputField::MimeAction action) { @@ -522,10 +529,11 @@ void EditCaptionBox::setInitialText() { setCloseByOutsideClick(true); } }); - connect(_field, &Ui::InputField::changed, [=] { + _field->changes( + ) | rpl::start_with_next([=] { _checkChangedTimer.callOnce(kChangesDebounceTimeout); setCloseByOutsideClick(false); - }); + }, _field->lifetime()); } void EditCaptionBox::setupControls() { diff --git a/Telegram/SourceFiles/boxes/filters/edit_filter_box.cpp b/Telegram/SourceFiles/boxes/filters/edit_filter_box.cpp index 88bbdca03..0c3760831 100644 --- a/Telegram/SourceFiles/boxes/filters/edit_filter_box.cpp +++ b/Telegram/SourceFiles/boxes/filters/edit_filter_box.cpp @@ -15,7 +15,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/text/text_utilities.h" #include "ui/text/text_options.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/effects/panel_animation.h" #include "ui/filter_icons.h" @@ -619,11 +619,12 @@ void EditFilterBox( nameEditing->custom = true; }, box->lifetime()); - QObject::connect(name, &Ui::InputField::changed, [=] { + name->changes( + ) | rpl::start_with_next([=] { if (!nameEditing->settingDefault) { nameEditing->custom = true; } - }); + }, name->lifetime()); const auto updateDefaultTitle = [=](const Data::ChatFilter &filter) { if (nameEditing->custom) { return; diff --git a/Telegram/SourceFiles/boxes/filters/edit_filter_links.cpp b/Telegram/SourceFiles/boxes/filters/edit_filter_links.cpp index d7e2c0920..557eefa9a 100644 --- a/Telegram/SourceFiles/boxes/filters/edit_filter_links.cpp +++ b/Telegram/SourceFiles/boxes/filters/edit_filter_links.cpp @@ -26,7 +26,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/controls/invite_link_label.h" #include "ui/text/text_utilities.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/wrap/vertical_layout.h" #include "ui/wrap/slide_wrap.h" diff --git a/Telegram/SourceFiles/boxes/passcode_box.cpp b/Telegram/SourceFiles/boxes/passcode_box.cpp index 5ec269aac..dd165ac61 100644 --- a/Telegram/SourceFiles/boxes/passcode_box.cpp +++ b/Telegram/SourceFiles/boxes/passcode_box.cpp @@ -21,10 +21,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/layers/generic_box.h" #include "ui/text/text_utilities.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/sent_code_field.h" -#include "ui/wrap/vertical_layout.h" #include "ui/wrap/fade_wrap.h" #include "ui/painter.h" #include "passport/passport_encryption.h" @@ -306,15 +305,26 @@ void PasscodeBox::prepare() { connect(_oldPasscode, &Ui::MaskedInputField::changed, [=] { oldChanged(); }); connect(_newPasscode, &Ui::MaskedInputField::changed, [=] { newChanged(); }); connect(_reenterPasscode, &Ui::MaskedInputField::changed, [=] { newChanged(); }); - connect(_passwordHint, &Ui::InputField::changed, [=] { newChanged(); }); - connect(_recoverEmail, &Ui::InputField::changed, [=] { emailChanged(); }); + _passwordHint->changes( + ) | 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(); }; connect(_oldPasscode, &Ui::MaskedInputField::submitted, fieldSubmit); connect(_newPasscode, &Ui::MaskedInputField::submitted, fieldSubmit); connect(_reenterPasscode, &Ui::MaskedInputField::submitted, fieldSubmit); - connect(_passwordHint, &Ui::InputField::submitted, fieldSubmit); - connect(_recoverEmail, &Ui::InputField::submitted, fieldSubmit); + _passwordHint->submits( + ) | rpl::start_with_next(fieldSubmit, _passwordHint->lifetime()); + _recoverEmail->submits( + ) | rpl::start_with_next(fieldSubmit, _recoverEmail->lifetime()); _recover->addClickHandler([=] { recoverByEmail(); }); @@ -1061,13 +1071,6 @@ void PasscodeBox::newChanged() { } } -void PasscodeBox::emailChanged() { - if (!_emailError.isEmpty()) { - _emailError = QString(); - update(); - } -} - void PasscodeBox::recoverByEmail() { if (!_cloudFields.hasRecovery) { Assert(_session != nullptr); @@ -1189,8 +1192,12 @@ void RecoverBox::prepare() { + _recoverCode->height() + st::passcodeTextLine)); - connect(_recoverCode, &Ui::InputField::changed, [=] { codeChanged(); }); - connect(_recoverCode, &Ui::InputField::submitted, [=] { submit(); }); + _recoverCode->changes( + ) | rpl::start_with_next([=] { + codeChanged(); + }, _recoverCode->lifetime()); + _recoverCode->submits( + ) | rpl::start_with_next([=] { submit(); }, _recoverCode->lifetime()); } void RecoverBox::paintEvent(QPaintEvent *e) { diff --git a/Telegram/SourceFiles/boxes/passcode_box.h b/Telegram/SourceFiles/boxes/passcode_box.h index ee11765a2..75a235b16 100644 --- a/Telegram/SourceFiles/boxes/passcode_box.h +++ b/Telegram/SourceFiles/boxes/passcode_box.h @@ -90,7 +90,6 @@ private: void closeReplacedBy(); void oldChanged(); void newChanged(); - void emailChanged(); void save(bool force = false); void badOldPasscode(); void recoverByEmail(); diff --git a/Telegram/SourceFiles/boxes/peers/edit_contact_box.cpp b/Telegram/SourceFiles/boxes/peers/edit_contact_box.cpp index 0aa24c79e..19af19ac6 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_contact_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_contact_box.cpp @@ -13,7 +13,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/wrap/vertical_layout.h" #include "ui/widgets/labels.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/text_utilities.h" #include "info/profile/info_profile_cover.h" @@ -239,8 +239,8 @@ void Controller::initNameFields( _save(); } }; - QObject::connect(first, &Ui::InputField::submitted, submit); - QObject::connect(last, &Ui::InputField::submitted, submit); + first->submits() | rpl::start_with_next(submit, first->lifetime()); + last->submits() | rpl::start_with_next(submit, last->lifetime()); first->setMaxLength(Ui::EditPeer::kMaxUserFirstLastName); first->setMaxLength(Ui::EditPeer::kMaxUserFirstLastName); } diff --git a/Telegram/SourceFiles/boxes/peers/edit_forum_topic_box.cpp b/Telegram/SourceFiles/boxes/peers/edit_forum_topic_box.cpp index d5dbc6789..5caa2ce5c 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_forum_topic_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_forum_topic_box.cpp @@ -7,7 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #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/effects/emoji_fly_animation.h" #include "ui/abstract_button.h" @@ -465,15 +465,13 @@ void EditForumTopicBox( ChooseNextColorId(current.colorId, state->otherColorIds), }; }); - base::qt_signal_producer( - title, - &Ui::InputField::changed + title->changes( ) | rpl::start_with_next([=] { state->defaultIcon = DefaultIcon{ title->getLastText().trimmed(), state->defaultIcon.current().colorId, }; - }, box->lifetime()); + }, title->lifetime()); if (!topic || !topic->isGeneral()) { Settings::AddDividerText( diff --git a/Telegram/SourceFiles/boxes/peers/edit_participant_box.cpp b/Telegram/SourceFiles/boxes/peers/edit_participant_box.cpp index f47beae75..6e205cb84 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_participant_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_participant_box.cpp @@ -15,7 +15,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/widgets/checkbox.h" #include "ui/widgets/labels.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/layers/generic_box.h" #include "ui/toast/toast.h" @@ -461,13 +461,14 @@ not_null EditAdminBox::addRankInput( st::rightsAboutMargin); result->setMaxLength(kAdminRoleLimit); result->setInstantReplaces(Ui::InstantReplaces::TextOnly()); - connect(result, &Ui::InputField::changed, [=] { + result->changes( + ) | rpl::start_with_next([=] { const auto text = result->getLastText(); const auto removed = TextUtilities::RemoveEmoji(text); if (removed != text) { result->setText(removed); } - }); + }, result->lifetime()); container->add( object_ptr( diff --git a/Telegram/SourceFiles/boxes/peers/edit_peer_info_box.cpp b/Telegram/SourceFiles/boxes/peers/edit_peer_info_box.cpp index 01251e1f8..3e95dcc1f 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_peer_info_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_peer_info_box.cpp @@ -51,7 +51,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/text/text_utilities.h" #include "ui/widgets/checkbox.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/box_content_divider.h" #include "ui/wrap/padding_wrap.h" @@ -519,10 +519,10 @@ object_ptr Controller::createTitleEdit() { result->entity(), &_peer->session()); - QObject::connect( - result->entity(), - &Ui::InputField::submitted, - [=] { submitTitle(); }); + result->entity()->submits( + ) | rpl::start_with_next([=] { + submitTitle(); + }, result->entity()->lifetime()); _controls.title = result->entity(); return result; @@ -555,10 +555,10 @@ object_ptr Controller::createDescriptionEdit() { result->entity(), &_peer->session()); - QObject::connect( - result->entity(), - &Ui::InputField::submitted, - [=] { submitDescription(); }); + result->entity()->submits( + ) | rpl::start_with_next([=] { + submitDescription(); + }, result->entity()->lifetime()); _controls.description = result->entity(); return result; diff --git a/Telegram/SourceFiles/boxes/peers/edit_peer_type_box.cpp b/Telegram/SourceFiles/boxes/peers/edit_peer_type_box.cpp index 2739eb125..bae0be7fe 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_peer_type_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_peer_type_box.cpp @@ -32,7 +32,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/controls/userpic_button.h" #include "ui/widgets/buttons.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/box_content_divider.h" #include "ui/wrap/padding_wrap.h" diff --git a/Telegram/SourceFiles/boxes/send_files_box.cpp b/Telegram/SourceFiles/boxes/send_files_box.cpp index 46ac4b111..efea9ad8e 100644 --- a/Telegram/SourceFiles/boxes/send_files_box.cpp +++ b/Telegram/SourceFiles/boxes/send_files_box.cpp @@ -31,7 +31,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/effects/scroll_content_shadow.h" #include "ui/widgets/checkbox.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/popup_menu.h" #include "ui/wrap/vertical_layout.h" @@ -1030,17 +1030,21 @@ void SendFilesBox::setupCaption() { Core::App().settings().sendSubmitWay()); _caption->setMaxLength(kMaxMessageLength); - connect(_caption, &Ui::InputField::resized, [=] { + _caption->heightChanges( + ) | rpl::start_with_next([=] { captionResized(); - }); - connect(_caption, &Ui::InputField::submitted, [=]( - Qt::KeyboardModifiers modifiers) { + }, _caption->lifetime()); + _caption->submits( + ) | rpl::start_with_next([=](Qt::KeyboardModifiers modifiers) { const auto ctrlShiftEnter = modifiers.testFlag(Qt::ShiftModifier) && (modifiers.testFlag(Qt::ControlModifier) || modifiers.testFlag(Qt::MetaModifier)); send({}, ctrlShiftEnter); - }); - connect(_caption, &Ui::InputField::cancelled, [=] { closeBox(); }); + }, _caption->lifetime()); + _caption->cancelled( + ) | rpl::start_with_next([=] { + closeBox(); + }, _caption->lifetime()); _caption->setMimeDataHook([=]( not_null data, Ui::InputField::MimeAction action) { diff --git a/Telegram/SourceFiles/boxes/sessions_box.cpp b/Telegram/SourceFiles/boxes/sessions_box.cpp index e30174be6..d458111f2 100644 --- a/Telegram/SourceFiles/boxes/sessions_box.cpp +++ b/Telegram/SourceFiles/boxes/sessions_box.cpp @@ -19,7 +19,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "lang/lang_keys.h" #include "main/main_session.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/scroll_area.h" #include "ui/wrap/slide_wrap.h" @@ -144,7 +144,7 @@ void RenameBox(not_null box) { Core::App().settings().setCustomDeviceModel(result); 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_cancel(), [=] { box->closeBox(); }); } diff --git a/Telegram/SourceFiles/boxes/share_box.cpp b/Telegram/SourceFiles/boxes/share_box.cpp index 154961016..d348b5aaf 100644 --- a/Telegram/SourceFiles/boxes/share_box.cpp +++ b/Telegram/SourceFiles/boxes/share_box.cpp @@ -19,7 +19,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/widgets/checkbox.h" #include "ui/widgets/multi_select.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/wrap/slide_wrap.h" #include "ui/text/text_options.h" @@ -226,9 +226,8 @@ void ShareBox::prepareCommentField() { const auto field = _comment->entity(); - connect(field, &Ui::InputField::submitted, [=] { - submit({}); - }); + field->submits( + ) | rpl::start_with_next([=] { submit({}); }, field->lifetime()); if (const auto show = uiShow(); show->valid()) { InitMessageFieldHandlers( _descriptor.session, diff --git a/Telegram/SourceFiles/boxes/stickers_box.cpp b/Telegram/SourceFiles/boxes/stickers_box.cpp index b1eef8d91..4f8c682a0 100644 --- a/Telegram/SourceFiles/boxes/stickers_box.cpp +++ b/Telegram/SourceFiles/boxes/stickers_box.cpp @@ -31,7 +31,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/effects/ripple_animation.h" #include "ui/effects/slide_animation.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/cached_round_corners.h" #include "ui/painter.h" diff --git a/Telegram/SourceFiles/calls/group/calls_group_menu.cpp b/Telegram/SourceFiles/calls/group/calls_group_menu.cpp index aad072371..51a9068a7 100644 --- a/Telegram/SourceFiles/calls/group/calls_group_menu.cpp +++ b/Telegram/SourceFiles/calls/group/calls_group_menu.cpp @@ -19,7 +19,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/widgets/menu/menu_action.h" #include "ui/widgets/labels.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/layers/generic_box.h" #include "ui/painter.h" diff --git a/Telegram/SourceFiles/calls/group/calls_group_panel.cpp b/Telegram/SourceFiles/calls/group/calls_group_panel.cpp index 210eb0dce..6002963a9 100644 --- a/Telegram/SourceFiles/calls/group/calls_group_panel.cpp +++ b/Telegram/SourceFiles/calls/group/calls_group_panel.cpp @@ -23,7 +23,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/widgets/call_button.h" #include "ui/widgets/checkbox.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/rp_window.h" #include "ui/chat/group_call_bar.h" diff --git a/Telegram/SourceFiles/calls/group/calls_group_settings.cpp b/Telegram/SourceFiles/calls/group/calls_group_settings.cpp index 59ed26a62..121d6d037 100644 --- a/Telegram/SourceFiles/calls/group/calls_group_settings.cpp +++ b/Telegram/SourceFiles/calls/group/calls_group_settings.cpp @@ -16,7 +16,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/widgets/continuous_sliders.h" #include "ui/widgets/buttons.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/wrap/slide_wrap.h" #include "ui/text/text_utilities.h" diff --git a/Telegram/SourceFiles/calls/group/ui/calls_group_recording_box.cpp b/Telegram/SourceFiles/calls/group/ui/calls_group_recording_box.cpp index 5d084bb37..30a492a3f 100644 --- a/Telegram/SourceFiles/calls/group/ui/calls_group_recording_box.cpp +++ b/Telegram/SourceFiles/calls/group/ui/calls_group_recording_box.cpp @@ -12,7 +12,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/image/image_prepare.h" #include "ui/layers/generic_box.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 "styles/style_calls.h" #include "styles/style_layers.h" @@ -287,7 +287,7 @@ void EditGroupCallTitleBox( box->closeBox(); 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_cancel(), [=] { box->closeBox(); }); } @@ -346,7 +346,7 @@ void AddTitleGroupCallRecordingBox( box->closeBox(); 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_cancel(), [=] { box->closeBox(); }); } diff --git a/Telegram/SourceFiles/chat_helpers/emoji_suggestions_widget.cpp b/Telegram/SourceFiles/chat_helpers/emoji_suggestions_widget.cpp index a97d1fe42..f6c54ec6d 100644 --- a/Telegram/SourceFiles/chat_helpers/emoji_suggestions_widget.cpp +++ b/Telegram/SourceFiles/chat_helpers/emoji_suggestions_widget.cpp @@ -14,7 +14,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/effects/ripple_animation.h" #include "ui/widgets/shadow.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/ui_utility.h" #include "ui/cached_round_corners.h" diff --git a/Telegram/SourceFiles/chat_helpers/field_autocomplete.cpp b/Telegram/SourceFiles/chat_helpers/field_autocomplete.cpp index 8f5f5fec5..2c7bf803c 100644 --- a/Telegram/SourceFiles/chat_helpers/field_autocomplete.cpp +++ b/Telegram/SourceFiles/chat_helpers/field_autocomplete.cpp @@ -31,7 +31,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "media/clip/media_clip_reader.h" #include "ui/widgets/popup_menu.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/image/image.h" #include "ui/effects/path_shift_gradient.h" diff --git a/Telegram/SourceFiles/chat_helpers/gifs_list_widget.cpp b/Telegram/SourceFiles/chat_helpers/gifs_list_widget.cpp index 0ae43c3dd..13cfda86d 100644 --- a/Telegram/SourceFiles/chat_helpers/gifs_list_widget.cpp +++ b/Telegram/SourceFiles/chat_helpers/gifs_list_widget.cpp @@ -24,7 +24,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "core/click_handler_types.h" #include "ui/controls/tabbed_search.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/effects/ripple_animation.h" #include "ui/image/image.h" diff --git a/Telegram/SourceFiles/chat_helpers/message_field.cpp b/Telegram/SourceFiles/chat_helpers/message_field.cpp index 304c7d3a0..a9c0fd789 100644 --- a/Telegram/SourceFiles/chat_helpers/message_field.cpp +++ b/Telegram/SourceFiles/chat_helpers/message_field.cpp @@ -190,16 +190,18 @@ void EditLinkBox( } }; - QObject::connect(text, &Ui::InputField::submitted, [=] { + text->submits( + ) | rpl::start_with_next([=] { url->setFocusFast(); - }); - QObject::connect(url, &Ui::InputField::submitted, [=] { + }, text->lifetime()); + url->submits( + ) | rpl::start_with_next([=] { if (text->getLastText().isEmpty()) { text->setFocusFast(); } else { submit(); } - }); + }, url->lifetime()); box->setTitle(url->getLastText().isEmpty() ? tr::lng_formatting_link_create_title() @@ -223,8 +225,14 @@ void EditLinkBox( url->customTab(true); text->customTab(true); - QObject::connect(url, &Ui::InputField::tabbed, [=] { text->setFocus(); }); - QObject::connect(text, &Ui::InputField::tabbed, [=] { url->setFocus(); }); + url->tabbed( + ) | rpl::start_with_next([=] { + text->setFocus(); + }, url->lifetime()); + text->tabbed( + ) | rpl::start_with_next([=] { + url->setFocus(); + }, text->lifetime()); } TextWithEntities StripSupportHashtag(TextWithEntities text) { @@ -590,7 +598,8 @@ AutocompleteQuery ParseMentionHashtagBotCommandQuery( MessageLinksParser::MessageLinksParser(not_null field) : _field(field) , _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 timeout = (std::abs(length - _lastLength) > 2) ? 0 diff --git a/Telegram/SourceFiles/chat_helpers/message_field.h b/Telegram/SourceFiles/chat_helpers/message_field.h index acc2808a1..9c4ba031f 100644 --- a/Telegram/SourceFiles/chat_helpers/message_field.h +++ b/Telegram/SourceFiles/chat_helpers/message_field.h @@ -7,9 +7,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #pragma once -#include "ui/widgets/input_fields.h" +#include "ui/widgets/fields/input_field.h" #include "base/timer.h" -#include "base/qt_connection.h" #include "chat_helpers/compose/compose_features.h" #ifndef TDESKTOP_DISABLE_SPELLCHECK @@ -132,7 +131,7 @@ private: int _lastLength = 0; bool _disabled = false; base::Timer _timer; - base::qt_connection _connection; + rpl::lifetime _lifetime; }; diff --git a/Telegram/SourceFiles/chat_helpers/stickers_list_footer.cpp b/Telegram/SourceFiles/chat_helpers/stickers_list_footer.cpp index 15e2e8c34..0c09b6dd3 100644 --- a/Telegram/SourceFiles/chat_helpers/stickers_list_footer.cpp +++ b/Telegram/SourceFiles/chat_helpers/stickers_list_footer.cpp @@ -26,7 +26,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "lottie/lottie_single_player.h" #include "ui/dpr/dpr_icon.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/painter.h" #include "ui/rect_part.h" diff --git a/Telegram/SourceFiles/core/core_settings.cpp b/Telegram/SourceFiles/core/core_settings.cpp index 4a2cb3023..fa5bcfd34 100644 --- a/Telegram/SourceFiles/core/core_settings.cpp +++ b/Telegram/SourceFiles/core/core_settings.cpp @@ -9,7 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "boxes/send_files_box.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 "window/section_widget.h" #include "base/platform/base_platform_info.h" diff --git a/Telegram/SourceFiles/data/data_drafts.cpp b/Telegram/SourceFiles/data/data_drafts.cpp index 474822a48..0a6d64122 100644 --- a/Telegram/SourceFiles/data/data_drafts.cpp +++ b/Telegram/SourceFiles/data/data_drafts.cpp @@ -8,7 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/data_drafts.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 "history/history.h" #include "history/history_widget.h" diff --git a/Telegram/SourceFiles/data/data_forum.cpp b/Telegram/SourceFiles/data/data_forum.cpp index 507f54478..361135d88 100644 --- a/Telegram/SourceFiles/data/data_forum.cpp +++ b/Telegram/SourceFiles/data/data_forum.cpp @@ -24,7 +24,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "lang/lang_keys.h" #include "core/application.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_shared_media.h" #include "window/window_session_controller.h" diff --git a/Telegram/SourceFiles/data/data_types.cpp b/Telegram/SourceFiles/data/data_types.cpp index 0873bd7ec..ba8a44470 100644 --- a/Telegram/SourceFiles/data/data_types.cpp +++ b/Telegram/SourceFiles/data/data_types.cpp @@ -7,7 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #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 "base/openssl_help.h" diff --git a/Telegram/SourceFiles/data/stickers/data_custom_emoji.cpp b/Telegram/SourceFiles/data/stickers/data_custom_emoji.cpp index b9f34f030..54b16fec6 100644 --- a/Telegram/SourceFiles/data/stickers/data_custom_emoji.cpp +++ b/Telegram/SourceFiles/data/stickers/data_custom_emoji.cpp @@ -23,7 +23,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ffmpeg/ffmpeg_frame_generator.h" #include "chat_helpers/stickers_lottie.h" #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_utilities.h" #include "ui/ui_utility.h" diff --git a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp index 7997b183f..2dc8a3045 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp @@ -22,7 +22,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "boxes/peers/edit_peer_requests_box.h" #include "ui/widgets/buttons.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/effects/radial_animation.h" #include "ui/chat/requests_bar.h" @@ -78,6 +78,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include #include +#include namespace Dialogs { namespace { @@ -340,12 +341,12 @@ Widget::Widget( Ui::PostponeCall(this, [=] { listScrollUpdated(); }); }, lifetime()); - QObject::connect(_filter, &Ui::InputField::changed, [=] { + _filter->changes( + ) | rpl::start_with_next([=] { applyFilterUpdate(); - }); - QObject::connect(_filter, &Ui::InputField::submitted, [=] { - submit(); - }); + }, _filter->lifetime()); + _filter->submits( + ) | rpl::start_with_next([=] { submit(); }, _filter->lifetime()); QObject::connect( _filter->rawTextEdit().get(), &QTextEdit::cursorPositionChanged, diff --git a/Telegram/SourceFiles/history/admin_log/history_admin_log_section.cpp b/Telegram/SourceFiles/history/admin_log/history_admin_log_section.cpp index a64f98f47..b50db2c6b 100644 --- a/Telegram/SourceFiles/history/admin_log/history_admin_log_section.cpp +++ b/Telegram/SourceFiles/history/admin_log/history_admin_log_section.cpp @@ -15,7 +15,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/widgets/scroll_area.h" #include "ui/widgets/shadow.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 "mainwidget.h" #include "mainwindow.h" @@ -125,9 +125,16 @@ FixedBar::FixedBar( _cancel->setClickedCallback([=] { cancelSearch(); }); _field->hide(); _filter->setTextTransform(Ui::RoundButton::TextTransform::NoTransform); - connect(_field, &Ui::InputField::cancelled, [=] { cancelSearch(); }); - connect(_field, &Ui::InputField::changed, [=] { searchUpdated(); }); - connect(_field, &Ui::InputField::submitted, [=] { applySearch(); }); + _field->cancelled( + ) | rpl::start_with_next([=] { + cancelSearch(); + }, _field->lifetime()); + _field->changes( + ) | rpl::start_with_next([=] { + searchUpdated(); + }, _field->lifetime()); + _field->submits( + ) | rpl::start_with_next([=] { applySearch(); }, _field->lifetime()); _searchTimer.setCallback([=] { applySearch(); }); _cancel->hide(anim::type::instant); diff --git a/Telegram/SourceFiles/history/history_widget.cpp b/Telegram/SourceFiles/history/history_widget.cpp index bd7e554e9..d3795d4e9 100644 --- a/Telegram/SourceFiles/history/history_widget.cpp +++ b/Telegram/SourceFiles/history/history_widget.cpp @@ -304,25 +304,30 @@ HistoryWidget::HistoryWidget( _joinChannel->addClickHandler([=] { joinChannel(); }); _muteUnmute->addClickHandler([=] { toggleMuteUnmute(); }); _reportMessages->addClickHandler([=] { reportSelectedMessages(); }); - connect( - _field, - &Ui::InputField::submitted, - [=](Qt::KeyboardModifiers modifiers) { sendWithModifiers(modifiers); }); - connect(_field, &Ui::InputField::cancelled, [=] { + _field->submits( + ) | rpl::start_with_next([=](Qt::KeyboardModifiers modifiers) { + sendWithModifiers(modifiers); + }, _field->lifetime()); + _field->cancelled( + ) | rpl::start_with_next([=] { escape(); - }); - connect(_field, &Ui::InputField::tabbed, [=] { + }, _field->lifetime()); + _field->tabbed( + ) | rpl::start_with_next([=] { fieldTabbed(); - }); - connect(_field, &Ui::InputField::resized, [=] { + }, _field->lifetime()); + _field->heightChanges( + ) | rpl::start_with_next([=] { fieldResized(); - }); - connect(_field, &Ui::InputField::focused, [=] { + }, _field->lifetime()); + _field->focusedChanges( + ) | rpl::filter(rpl::mappers::_1) | rpl::start_with_next([=] { fieldFocused(); - }); - connect(_field, &Ui::InputField::changed, [=] { + }, _field->lifetime()); + _field->changes( + ) | rpl::start_with_next([=] { fieldChanged(); - }); + }, _field->lifetime()); connect( controller->widget()->windowHandle(), &QWindow::visibleChanged, diff --git a/Telegram/SourceFiles/history/history_widget.h b/Telegram/SourceFiles/history/history_widget.h index ae1f9bf54..5011c52cb 100644 --- a/Telegram/SourceFiles/history/history_widget.h +++ b/Telegram/SourceFiles/history/history_widget.h @@ -15,7 +15,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "chat_helpers/bot_command.h" #include "chat_helpers/field_autocomplete.h" #include "window/section_widget.h" -#include "ui/widgets/input_fields.h" +#include "ui/widgets/fields/input_field.h" #include "mtproto/sender.h" #include "base/flags.h" diff --git a/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp b/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp index e6a4717d8..22bccf2b6 100644 --- a/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp +++ b/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp @@ -60,7 +60,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "media/audio/media_audio.h" #include "ui/text/text_options.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/text/format_values.h" #include "ui/controls/emoji_button.h" @@ -1250,7 +1250,7 @@ bool ComposeControls::focused() const { } rpl::producer ComposeControls::focusedValue() const { - return rpl::single(focused()) | rpl::then(_focusChanges.events()); + return rpl::single(focused()) | rpl::then(_field->focusedChanges()); } rpl::producer ComposeControls::tabbedPanelShownValue() const { @@ -1291,12 +1291,9 @@ auto ComposeControls::sendContentRequests(SendRequestType requestType) const { return (_send->type() == type) && (sendRequestType == requestType); }); auto map = rpl::map_to(Api::SendOptions()); - auto submits = base::qt_signal_producer( - _field.get(), - &Ui::InputField::submitted); return rpl::merge( _send->clicks() | filter | map, - std::move(submits) | filter | map, + _field->submits() | filter | map, _sendCustomRequests.events()); } @@ -1317,12 +1314,9 @@ rpl::producer ComposeControls::editRequests() const { auto filter = rpl::filter([=] { return _send->type() == Ui::SendButton::Type::Save; }); - auto submits = base::qt_signal_producer( - _field.get(), - &Ui::InputField::submitted); return rpl::merge( _send->clicks() | filter | toValue, - std::move(submits) | filter | toValue); + _field->submits() | filter | toValue); } rpl::producer> ComposeControls::attachRequests() const { @@ -1776,17 +1770,22 @@ void ComposeControls::initKeyHandler() { void ComposeControls::initField() { _field->setMaxHeight(st::historyComposeFieldMaxHeight); updateSubmitSettings(); - //Ui::Connect(_field, &Ui::InputField::submitted, [=] { send(); }); - Ui::Connect(_field, &Ui::InputField::cancelled, [=] { escape(); }); - Ui::Connect(_field, &Ui::InputField::tabbed, [=] { fieldTabbed(); }); - Ui::Connect(_field, &Ui::InputField::resized, [=] { updateHeight(); }); - Ui::Connect(_field, &Ui::InputField::focused, [=] { - _focusChanges.fire(true); - }); - Ui::Connect(_field, &Ui::InputField::blurred, [=] { - _focusChanges.fire(false); - }); - Ui::Connect(_field, &Ui::InputField::changed, [=] { fieldChanged(); }); + _field->cancelled( + ) | rpl::start_with_next([=] { + escape(); + }, _field->lifetime()); + _field->tabbed( + ) | rpl::start_with_next([=] { + fieldTabbed(); + }, _field->lifetime()); + _field->heightChanges( + ) | rpl::start_with_next([=] { + updateHeight(); + }, _field->lifetime()); + _field->changes( + ) | rpl::start_with_next([=] { + fieldChanged(); + }, _field->lifetime()); InitMessageField(_show, _field, [=](not_null emoji) { if (_history && Data::AllowEmojiWithoutPremium(_history->peer)) { return true; diff --git a/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.h b/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.h index 06d8ae9a8..3dc5e46fa 100644 --- a/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.h +++ b/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.h @@ -17,7 +17,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/round_rect.h" #include "ui/rp_widget.h" #include "ui/effects/animations.h" -#include "ui/widgets/input_fields.h" +#include "ui/widgets/fields/input_field.h" class History; class DocumentData; @@ -424,7 +424,6 @@ private: std::unique_ptr _preview; Fn _raiseEmojiSuggestions; - rpl::event_stream _focusChanges; rpl::lifetime _historyLifetime; rpl::lifetime _uploaderSubscriptions; diff --git a/Telegram/SourceFiles/history/view/history_view_schedule_box.cpp b/Telegram/SourceFiles/history/view/history_view_schedule_box.cpp index 95c7c6270..286edd189 100644 --- a/Telegram/SourceFiles/history/view/history_view_schedule_box.cpp +++ b/Telegram/SourceFiles/history/view/history_view_schedule_box.cpp @@ -14,7 +14,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "base/event_filter.h" #include "base/qt/qt_key_modifiers.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/buttons.h" #include "ui/widgets/popup_menu.h" diff --git a/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp b/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp index b752fe2f3..d79ea16b4 100644 --- a/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp +++ b/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp @@ -27,7 +27,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/controls/userpic_button.h" #include "ui/wrap/fade_wrap.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/menu/menu_add_action_callback_factory.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->show(anim::type::instant); _searchCancel->setClickedCallback([=] { _searchCancelled.fire({}); }); - QObject::connect(_searchField, &Ui::InputField::submitted, [=] { + _searchField->submits( + ) | rpl::start_with_next([=] { _searchSubmitted.fire({}); - }); - QObject::connect(_searchField, &Ui::InputField::changed, [=] { + }, _searchField->lifetime()); + _searchField->changes( + ) | rpl::start_with_next([=] { const auto was = _searchQuery.current(); const auto now = _searchField->getLastText(); if (_jumpToDate && was.isEmpty() != now.isEmpty()) { @@ -1243,7 +1245,7 @@ bool TopBarWidget::toggleSearch(bool shown, anim::type animated) { } } _searchQuery = now; - }); + }, _searchField->lifetime()); } else { Assert(_searchField != nullptr); } diff --git a/Telegram/SourceFiles/info/info_content_widget.cpp b/Telegram/SourceFiles/info/info_content_widget.cpp index e96ba3cfc..c14624677 100644 --- a/Telegram/SourceFiles/info/info_content_widget.cpp +++ b/Telegram/SourceFiles/info/info_content_widget.cpp @@ -9,7 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "window/window_session_controller.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/search_field_controller.h" #include "lang/lang_keys.h" diff --git a/Telegram/SourceFiles/info/info_top_bar.cpp b/Telegram/SourceFiles/info/info_top_bar.cpp index f15a6b549..1172ea9e1 100644 --- a/Telegram/SourceFiles/info/info_top_bar.cpp +++ b/Telegram/SourceFiles/info/info_top_bar.cpp @@ -23,7 +23,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "main/main_session.h" #include "ui/widgets/buttons.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/wrap/fade_wrap.h" #include "ui/wrap/padding_wrap.h" @@ -253,7 +253,8 @@ void TopBar::createSearchView( }; cancel->addClickHandler(cancelSearch); - field->connect(field, &Ui::InputField::cancelled, cancelSearch); + field->cancelled( + ) | rpl::start_with_next(cancelSearch, field->lifetime()); wrap->widthValue( ) | rpl::start_with_next([=](int newWidth) { diff --git a/Telegram/SourceFiles/info/profile/info_profile_members.cpp b/Telegram/SourceFiles/info/profile/info_profile_members.cpp index b226935c3..85e689903 100644 --- a/Telegram/SourceFiles/info/profile/info_profile_members.cpp +++ b/Telegram/SourceFiles/info/profile/info_profile_members.cpp @@ -19,7 +19,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "info/info_memento.h" #include "ui/widgets/labels.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/wrap/padding_wrap.h" #include "ui/text/text_utilities.h" // Ui::Text::ToUpper diff --git a/Telegram/SourceFiles/intro/intro_code.cpp b/Telegram/SourceFiles/intro/intro_code.cpp index f1e165283..bdd63a7ba 100644 --- a/Telegram/SourceFiles/intro/intro_code.cpp +++ b/Telegram/SourceFiles/intro/intro_code.cpp @@ -14,6 +14,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "core/update_checker.h" #include "ui/widgets/buttons.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/text_utilities.h" #include "ui/boxes/confirm_box.h" diff --git a/Telegram/SourceFiles/intro/intro_code.h b/Telegram/SourceFiles/intro/intro_code.h index 8e0fc5743..65f39117b 100644 --- a/Telegram/SourceFiles/intro/intro_code.h +++ b/Telegram/SourceFiles/intro/intro_code.h @@ -9,7 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "intro/intro_step.h" #include "intro/intro_widget.h" -#include "ui/widgets/input_fields.h" +#include "ui/widgets/fields/masked_input_field.h" #include "base/timer.h" namespace Ui { diff --git a/Telegram/SourceFiles/intro/intro_password_check.cpp b/Telegram/SourceFiles/intro/intro_password_check.cpp index 935f55d01..d2bff066e 100644 --- a/Telegram/SourceFiles/intro/intro_password_check.cpp +++ b/Telegram/SourceFiles/intro/intro_password_check.cpp @@ -8,15 +8,14 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "intro/intro_password_check.h" #include "intro/intro_widget.h" -#include "core/file_utilities.h" #include "core/core_cloud_password.h" #include "ui/boxes/confirm_box.h" #include "boxes/passcode_box.h" #include "lang/lang_keys.h" #include "intro/intro_signup.h" #include "ui/widgets/buttons.h" -#include "ui/widgets/input_fields.h" -#include "ui/widgets/labels.h" +#include "ui/widgets/fields/input_field.h" +#include "ui/widgets/fields/password_input.h" #include "main/main_account.h" #include "base/random.h" #include "styles/style_intro.h" @@ -46,7 +45,10 @@ PasswordCheckWidget::PasswordCheckWidget( _toRecover->addClickHandler([=] { toRecover(); }); _toPassword->addClickHandler([=] { toPassword(); }); 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()); updateDescriptionText(); diff --git a/Telegram/SourceFiles/intro/intro_signup.cpp b/Telegram/SourceFiles/intro/intro_signup.cpp index b11db8672..0f2f38284 100644 --- a/Telegram/SourceFiles/intro/intro_signup.cpp +++ b/Telegram/SourceFiles/intro/intro_signup.cpp @@ -13,7 +13,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "lang/lang_keys.h" #include "ui/controls/userpic_button.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 "styles/style_intro.h" #include "styles/style_boxes.h" diff --git a/Telegram/SourceFiles/main/main_session_settings.cpp b/Telegram/SourceFiles/main/main_session_settings.cpp index 261ff01ed..769cd6998 100644 --- a/Telegram/SourceFiles/main/main_session_settings.cpp +++ b/Telegram/SourceFiles/main/main_session_settings.cpp @@ -8,7 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "main/main_session_settings.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 "window/section_widget.h" #include "support/support_common.h" diff --git a/Telegram/SourceFiles/passport/passport_edit_identity_box.cpp b/Telegram/SourceFiles/passport/passport_edit_identity_box.cpp index b76d5bf45..68285b9b7 100644 --- a/Telegram/SourceFiles/passport/passport_edit_identity_box.cpp +++ b/Telegram/SourceFiles/passport/passport_edit_identity_box.cpp @@ -8,7 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "passport/passport_edit_identity_box.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/text_options.h" #include "lang/lang_keys.h" diff --git a/Telegram/SourceFiles/passport/passport_panel_edit_contact.cpp b/Telegram/SourceFiles/passport/passport_panel_edit_contact.cpp index 17fc1b9d0..9e1d10851 100644 --- a/Telegram/SourceFiles/passport/passport_panel_edit_contact.cpp +++ b/Telegram/SourceFiles/passport/passport_panel_edit_contact.cpp @@ -10,7 +10,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "core/file_utilities.h" #include "passport/passport_panel_controller.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/buttons.h" #include "ui/widgets/shadow.h" @@ -195,11 +195,12 @@ void VerifyBox::setupControls( if (codeLength > 0) { _code->setAutoSubmit(codeLength, _submit); } 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); - }); + }, _code->lifetime()); } void VerifyBox::setInnerFocus() { diff --git a/Telegram/SourceFiles/passport/passport_panel_edit_document.cpp b/Telegram/SourceFiles/passport/passport_panel_edit_document.cpp index f9779cab6..9f71e2e3a 100644 --- a/Telegram/SourceFiles/passport/passport_panel_edit_document.cpp +++ b/Telegram/SourceFiles/passport/passport_panel_edit_document.cpp @@ -11,7 +11,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "passport/passport_panel_edit_scans.h" #include "passport/ui/passport_details_row.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/labels.h" #include "ui/widgets/buttons.h" diff --git a/Telegram/SourceFiles/passport/passport_panel_password.cpp b/Telegram/SourceFiles/passport/passport_panel_password.cpp index 0f8e8e77a..7046f14f0 100644 --- a/Telegram/SourceFiles/passport/passport_panel_password.cpp +++ b/Telegram/SourceFiles/passport/passport_panel_password.cpp @@ -11,7 +11,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/controls/userpic_button.h" #include "ui/widgets/labels.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/padding_wrap.h" #include "boxes/passcode_box.h" diff --git a/Telegram/SourceFiles/passport/ui/passport_details_row.cpp b/Telegram/SourceFiles/passport/ui/passport_details_row.cpp index c567989f0..2fc7c3698 100644 --- a/Telegram/SourceFiles/passport/ui/passport_details_row.cpp +++ b/Telegram/SourceFiles/passport/ui/passport_details_row.cpp @@ -9,7 +9,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "lang/lang_keys.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/buttons.h" #include "ui/widgets/checkbox.h" @@ -268,9 +269,16 @@ AbstractTextRow::AbstractTextRow( , _field(this, st::passportDetailsField, nullptr, value) , _value(value) { _field->setMaxLength(limit); - connect(_field, &Input::changed, [=] { - _value = valueCurrent(); - }); + if constexpr (std::is_same::value) { + _field->changes( + ) | rpl::start_with_next([=] { + _value = valueCurrent(); + }, _field->lifetime()); + } else { + connect(_field, &Input::changed, [=] { + _value = valueCurrent(); + }); + } } template diff --git a/Telegram/SourceFiles/payments/ui/payments_field.cpp b/Telegram/SourceFiles/payments/ui/payments_field.cpp index 914cc1ccf..73c87dff0 100644 --- a/Telegram/SourceFiles/payments/ui/payments_field.cpp +++ b/Telegram/SourceFiles/payments/ui/payments_field.cpp @@ -7,7 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #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/text/format_values.h" #include "ui/ui_utility.h" @@ -19,6 +19,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "styles/style_payments.h" #include +#include namespace Payments::Ui { namespace { @@ -610,7 +611,8 @@ void Field::setupValidator(Fn validator) { } else { const auto raw = _input->rawTextEdit(); 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) { QObject::connect(_masked, &MaskedInputField::submitted, submitted); } else { - QObject::connect(_input, &InputField::submitted, submitted); + _input->submits( + ) | rpl::start_with_next(submitted, _input->lifetime()); } } diff --git a/Telegram/SourceFiles/platform/linux/main_window_linux.cpp b/Telegram/SourceFiles/platform/linux/main_window_linux.cpp index 7db2d34e7..7fec6ec89 100644 --- a/Telegram/SourceFiles/platform/linux/main_window_linux.cpp +++ b/Telegram/SourceFiles/platform/linux/main_window_linux.cpp @@ -29,7 +29,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "base/event_filter.h" #include "ui/platform/ui_platform_window_title.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" #ifndef DESKTOP_APP_DISABLE_X11_INTEGRATION @@ -40,6 +40,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include #include #include +#include +#include #include #include diff --git a/Telegram/SourceFiles/platform/mac/main_window_mac.mm b/Telegram/SourceFiles/platform/mac/main_window_mac.mm index 6110d4ce8..e674ec8c8 100644 --- a/Telegram/SourceFiles/platform/mac/main_window_mac.mm +++ b/Telegram/SourceFiles/platform/mac/main_window_mac.mm @@ -33,10 +33,12 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "boxes/about_box.h" #include "lang/lang_keys.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 +#include +#include #include #include diff --git a/Telegram/SourceFiles/platform/mac/touchbar/items/mac_scrubber_item.mm b/Telegram/SourceFiles/platform/mac/touchbar/items/mac_scrubber_item.mm index 0f851a03f..7ec68e337 100644 --- a/Telegram/SourceFiles/platform/mac/touchbar/items/mac_scrubber_item.mm +++ b/Telegram/SourceFiles/platform/mac/touchbar/items/mac_scrubber_item.mm @@ -30,7 +30,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "platform/mac/touchbar/mac_touchbar_common.h" #include "styles/style_basic.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/window_controller.h" #include "window/window_session_controller.h" @@ -47,6 +47,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #import #import +#include + using TouchBar::kCircleDiameter; using TouchBar::CreateNSImageFromStyleIcon; diff --git a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_common.cpp b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_common.cpp index 42eb5b782..4a0ba8d68 100644 --- a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_common.cpp +++ b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_common.cpp @@ -13,7 +13,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "lang/lang_keys.h" #include "lottie/lottie_icon.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_confirm.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 "ui/boxes/confirm_box.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/wrap/vertical_layout.h" #include "window/window_session_controller.h" diff --git a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_email.cpp b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_email.cpp index 1e13fae55..0fedabd93 100644 --- a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_email.cpp +++ b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_email.cpp @@ -15,7 +15,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "settings/cloud_password/settings_cloud_password_manage.h" #include "ui/boxes/confirm_box.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/vertical_layout.h" #include "window/window_session_controller.h" @@ -90,9 +90,10 @@ void Email::setupContent() { currentStepDataEmail); const auto newInput = wrap->entity(); const auto error = AddError(content, nullptr); - QObject::connect(newInput, &Ui::InputField::changed, [=] { + newInput->changes( + ) | rpl::start_with_next([=] { error->hide(); - }); + }, newInput->lifetime()); AddSkipInsteadOfField(content); const auto send = [=](Fn close) { @@ -189,7 +190,7 @@ void Email::setupContent() { }); 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(); }); diff --git a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_email_confirm.cpp b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_email_confirm.cpp index 09fc68aa0..24d7fb2ac 100644 --- a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_email_confirm.cpp +++ b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_email_confirm.cpp @@ -136,9 +136,10 @@ void EmailConfirm::setupContent() { std::move(objectInput))); const auto error = AddError(content, nullptr); - QObject::connect(newInput, &Ui::InputField::changed, [=] { + newInput->changes( + ) | rpl::start_with_next([=] { error->hide(); - }); + }, newInput->lifetime()); AddSkipInsteadOfField(content); const auto resendInfo = Ui::CreateChild( @@ -326,7 +327,7 @@ void EmailConfirm::setupContent() { const auto submit = [=] { button->clicked({}, Qt::LeftButton); }; newInput->setAutoSubmit(currentStepDataCodeLength, submit); - QObject::connect(newInput, &Ui::InputField::submitted, submit); + newInput->submits() | rpl::start_with_next(submit, newInput->lifetime()); setFocusCallback([=] { newInput->setFocus(); }); diff --git a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_hint.cpp b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_hint.cpp index e7451ab83..f2a89376e 100644 --- a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_hint.cpp +++ b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_hint.cpp @@ -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_manage.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/wrap/padding_wrap.h" #include "ui/wrap/vertical_layout.h" @@ -79,9 +79,10 @@ void Hint::setupContent() { currentStepDataHint); const auto newInput = wrap->entity(); const auto error = AddError(content, nullptr); - QObject::connect(newInput, &Ui::InputField::changed, [=] { + newInput->changes( + ) | rpl::start_with_next([=] { error->hide(); - }); + }, newInput->lifetime()); AddSkipInsteadOfField(content); const auto save = [=](const QString &hint) { @@ -142,7 +143,7 @@ void Hint::setupContent() { }); 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(); }); diff --git a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_input.cpp b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_input.cpp index 49af9c6a1..e532117b7 100644 --- a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_input.cpp +++ b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_input.cpp @@ -21,7 +21,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/boxes/confirm_box.h" #include "ui/text/format_values.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/wrap/vertical_layout.h" #include "window/window_session_controller.h" diff --git a/Telegram/SourceFiles/settings/settings_chat.cpp b/Telegram/SourceFiles/settings/settings_chat.cpp index 6b353438b..3ef6104b8 100644 --- a/Telegram/SourceFiles/settings/settings_chat.cpp +++ b/Telegram/SourceFiles/settings/settings_chat.cpp @@ -21,7 +21,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "boxes/local_storage_box.h" #include "ui/wrap/vertical_layout.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/color_editor.h" #include "ui/widgets/buttons.h" diff --git a/Telegram/SourceFiles/settings/settings_folders.cpp b/Telegram/SourceFiles/settings/settings_folders.cpp index 18a3630a7..c5be97152 100644 --- a/Telegram/SourceFiles/settings/settings_folders.cpp +++ b/Telegram/SourceFiles/settings/settings_folders.cpp @@ -30,7 +30,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/text/text_utilities.h" #include "ui/widgets/box_content_divider.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/wrap/slide_wrap.h" #include "window/window_controller.h" diff --git a/Telegram/SourceFiles/settings/settings_information.cpp b/Telegram/SourceFiles/settings/settings_information.cpp index da3f97859..9e9fedbb1 100644 --- a/Telegram/SourceFiles/settings/settings_information.cpp +++ b/Telegram/SourceFiles/settings/settings_information.cpp @@ -15,7 +15,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/wrap/slide_wrap.h" #include "ui/widgets/labels.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/box_content_divider.h" #include "ui/widgets/menu/menu_add_action_callback_factory.h" @@ -538,10 +538,8 @@ void SetupBio( auto cursor = bio->textCursor(); cursor.setPosition(bio->getLastText().size()); bio->setTextCursor(cursor); - QObject::connect(bio, &Ui::InputField::submitted, [=] { - save(); - }); - QObject::connect(bio, &Ui::InputField::changed, updated); + bio->submits() | rpl::start_with_next([=] { save(); }, bio->lifetime()); + bio->changes() | rpl::start_with_next(updated, bio->lifetime()); bio->setInstantReplaces(Ui::InstantReplaces::Default()); bio->setInstantReplacesEnabled( Core::App().settings().replaceEmojiValue()); diff --git a/Telegram/SourceFiles/settings/settings_local_passcode.cpp b/Telegram/SourceFiles/settings/settings_local_passcode.cpp index e1c5d56d8..49e8ba019 100644 --- a/Telegram/SourceFiles/settings/settings_local_passcode.cpp +++ b/Telegram/SourceFiles/settings/settings_local_passcode.cpp @@ -20,7 +20,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "storage/storage_domain.h" #include "ui/boxes/confirm_box.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/wrap/vertical_layout.h" #include "window/window_session_controller.h" diff --git a/Telegram/SourceFiles/storage/details/storage_settings_scheme.cpp b/Telegram/SourceFiles/storage/details/storage_settings_scheme.cpp index 6940e8139..a1474b712 100644 --- a/Telegram/SourceFiles/storage/details/storage_settings_scheme.cpp +++ b/Telegram/SourceFiles/storage/details/storage_settings_scheme.cpp @@ -13,7 +13,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "core/application.h" #include "core/core_settings.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/power_saving.h" #include "window/themes/window_theme.h" diff --git a/Telegram/SourceFiles/support/support_autocomplete.cpp b/Telegram/SourceFiles/support/support_autocomplete.cpp index aba4ee89a..aaf9fec54 100644 --- a/Telegram/SourceFiles/support/support_autocomplete.cpp +++ b/Telegram/SourceFiles/support/support_autocomplete.cpp @@ -10,7 +10,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/chat/chat_theme.h" #include "ui/chat/chat_style.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/wrap/padding_wrap.h" #include "ui/painter.h" @@ -418,16 +418,20 @@ void Autocomplete::setupContent() { }; 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, [=] { if (!input->hasFocus()) { deactivate(); } }); - }); - connect(input, &Ui::InputField::cancelled, [=] { deactivate(); }); - connect(input, &Ui::InputField::changed, refresh); - connect(input, &Ui::InputField::submitted, submit); + }, input->lifetime()); + input->cancelled( + ) | rpl::start_with_next([=] { + deactivate(); + }, input->lifetime()); + input->changes() | rpl::start_with_next(refresh, input->lifetime()); + input->submits() | rpl::start_with_next(submit, input->lifetime()); input->customUpDown(true); _activate = [=] { diff --git a/Telegram/SourceFiles/support/support_helper.cpp b/Telegram/SourceFiles/support/support_helper.cpp index cb8fe49c5..fd273c09f 100644 --- a/Telegram/SourceFiles/support/support_helper.cpp +++ b/Telegram/SourceFiles/support/support_helper.cpp @@ -18,7 +18,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "history/history.h" #include "boxes/abstract_box.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/text/format_values.h" #include "ui/text/text_entity.h" @@ -109,8 +109,11 @@ void EditInfoBox::prepare() { addButton(tr::lng_settings_save(), save); addButton(tr::lng_cancel(), [=] { closeBox(); }); - connect(_field, &Ui::InputField::submitted, save); - connect(_field, &Ui::InputField::cancelled, [=] { closeBox(); }); + _field->submits() | rpl::start_with_next(save, _field->lifetime()); + _field->cancelled( + ) | rpl::start_with_next([=] { + closeBox(); + }, _field->lifetime()); Ui::Emoji::SuggestionsController::Init( getDelegate()->outerContainer(), _field, diff --git a/Telegram/SourceFiles/ui/boxes/choose_date_time.cpp b/Telegram/SourceFiles/ui/boxes/choose_date_time.cpp index a56957bc4..e4d8092a5 100644 --- a/Telegram/SourceFiles/ui/boxes/choose_date_time.cpp +++ b/Telegram/SourceFiles/ui/boxes/choose_date_time.cpp @@ -11,13 +11,15 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "base/event_filter.h" #include "ui/boxes/calendar_box.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/ui_utility.h" #include "lang/lang_keys.h" #include "styles/style_layers.h" #include "styles/style_boxes.h" +#include + namespace Ui { namespace { @@ -147,8 +149,9 @@ ChooseDateTimeBoxDescriptor ChooseDateTimeBox( const auto calendar = content->lifetime().make_state>(); const auto calendarStyle = args.style.calendarStyle; - QObject::connect(state->day, &InputField::focused, [=] { - if (*calendar) { + state->day->focusedChanges( + ) | rpl::start_with_next([=](bool focused) { + if (*calendar || !focused) { return; } *calendar = box->getDelegate()->show( @@ -167,7 +170,7 @@ ChooseDateTimeBoxDescriptor ChooseDateTimeBox( ) | rpl::start_with_next(crl::guard(state->time, [=] { state->time->setFocusFast(); }), (*calendar)->lifetime()); - }); + }, state->day->lifetime()); const auto collect = [=] { const auto timeValue = state->time->valueCurrent().split(':'); diff --git a/Telegram/SourceFiles/ui/boxes/confirm_phone_box.cpp b/Telegram/SourceFiles/ui/boxes/confirm_phone_box.cpp index 9fab7f4a5..e69cd3e5f 100644 --- a/Telegram/SourceFiles/ui/boxes/confirm_phone_box.cpp +++ b/Telegram/SourceFiles/ui/boxes/confirm_phone_box.cpp @@ -73,7 +73,8 @@ void ConfirmPhoneBox::prepare() { + st::usernameSkip + (_fragment ? (_fragment->height() + fragmentSkip()) : 0)); - connect(_code, &Ui::InputField::submitted, [=] { sendCode(); }); + _code->submits( + ) | rpl::start_with_next([=] { sendCode(); }, _code->lifetime()); showChildren(); } diff --git a/Telegram/SourceFiles/ui/boxes/edit_invite_link.cpp b/Telegram/SourceFiles/ui/boxes/edit_invite_link.cpp index a27a18859..388a258bd 100644 --- a/Telegram/SourceFiles/ui/boxes/edit_invite_link.cpp +++ b/Telegram/SourceFiles/ui/boxes/edit_invite_link.cpp @@ -10,7 +10,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "lang/lang_keys.h" #include "ui/boxes/choose_date_time.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/wrap/slide_wrap.h" #include "base/unixtime.h" diff --git a/Telegram/SourceFiles/ui/boxes/rate_call_box.cpp b/Telegram/SourceFiles/ui/boxes/rate_call_box.cpp index 8d88bde67..d56889f0b 100644 --- a/Telegram/SourceFiles/ui/boxes/rate_call_box.cpp +++ b/Telegram/SourceFiles/ui/boxes/rate_call_box.cpp @@ -9,7 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "lang/lang_keys.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_calls.h" @@ -92,11 +92,16 @@ void RateCallBox::ratingChanged(int value) { _comment->height()); updateMaxHeight(); - connect(_comment, &InputField::resized, [=] { + _comment->heightChanges( + ) | rpl::start_with_next([=] { commentResized(); - }); - connect(_comment, &InputField::submitted, [=] { send(); }); - connect(_comment, &InputField::cancelled, [=] { closeBox(); }); + }, _comment->lifetime()); + _comment->submits( + ) | rpl::start_with_next([=] { send(); }, _comment->lifetime()); + _comment->cancelled( + ) | rpl::start_with_next([=] { + closeBox(); + }, _comment->lifetime()); } _comment->setFocusFast(); } else if (_comment) { diff --git a/Telegram/SourceFiles/ui/boxes/report_box.cpp b/Telegram/SourceFiles/ui/boxes/report_box.cpp index fa0ac22ff..34c678bb4 100644 --- a/Telegram/SourceFiles/ui/boxes/report_box.cpp +++ b/Telegram/SourceFiles/ui/boxes/report_box.cpp @@ -11,7 +11,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/layers/generic_box.h" #include "ui/wrap/vertical_layout.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 "info/profile/info_profile_icon.h" #include "styles/style_chat_helpers.h" @@ -148,7 +148,8 @@ void ReportDetailsBox( const auto text = details->getLastText(); 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_cancel(), [=] { box->closeBox(); }); } diff --git a/Telegram/SourceFiles/ui/controls/tabbed_search.cpp b/Telegram/SourceFiles/ui/controls/tabbed_search.cpp index a4022d514..6e5165aa8 100644 --- a/Telegram/SourceFiles/ui/controls/tabbed_search.cpp +++ b/Telegram/SourceFiles/ui/controls/tabbed_search.cpp @@ -9,7 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "base/qt_signal_producer.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/widgets/buttons.h" #include "ui/painter.h" @@ -306,7 +306,8 @@ anim::type SearchWithGroups::animated() const { } void SearchWithGroups::initField() { - connect(_field, &InputField::changed, [=] { + _field->changes( + ) | rpl::start_with_next([=] { const auto last = FieldQuery(_field); _query = last; const auto empty = last.empty(); @@ -319,7 +320,7 @@ void SearchWithGroups::initField() { _chosenGroup = QString(); scrollGroupsToStart(); } - }); + }, _field->lifetime()); _fieldPlaceholderWidth = tr::lng_dlg_filter( ) | rpl::map([=](const QString &value) { @@ -492,9 +493,10 @@ void SearchWithGroups::initButtons() { _field->setFocus(); scrollGroupsToStart(); }); - QObject::connect(_field, &InputField::focused, [=] { + _field->focusedChanges( + ) | rpl::filter(rpl::mappers::_1) | rpl::start_with_next([=] { scrollGroupsToStart(); - }); + }, _field->lifetime()); _field->raise(); _fade->raise(); _search->raise(); @@ -519,9 +521,7 @@ void SearchWithGroups::ensureRounding(int size, float64 ratio) { } rpl::producer<> SearchWithGroups::escapes() const { - return base::qt_signal_producer( - _field.get(), - &Ui::InputField::cancelled); + return _field->cancelled(); } rpl::producer> SearchWithGroups::queryValue() const { diff --git a/Telegram/SourceFiles/ui/search_field_controller.cpp b/Telegram/SourceFiles/ui/search_field_controller.cpp index 60dcc1769..a26c59bbe 100644 --- a/Telegram/SourceFiles/ui/search_field_controller.cpp +++ b/Telegram/SourceFiles/ui/search_field_controller.cpp @@ -9,7 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "styles/style_widgets.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/buttons.h" #include "lang/lang_keys.h" @@ -30,9 +30,10 @@ auto SearchFieldController::createRowView( auto field = createField(wrap, st.field).release(); field->show(); - field->connect(field, &Ui::InputField::cancelled, [=] { + field->cancelled( + ) | rpl::start_with_next([=] { field->setText(QString()); - }); + }, field->lifetime()); auto cancel = CreateChild( wrap, @@ -104,9 +105,10 @@ base::unique_qptr SearchFieldController::createField( tr::lng_dlg_filter(), _query.current()); auto field = result.get(); - field->connect(field, &Ui::InputField::changed, [=] { + field->changes( + ) | rpl::start_with_next([=] { _query = field->getLastText(); - }); + }, field->lifetime()); _view.reset(field); return result; } diff --git a/Telegram/SourceFiles/ui/widgets/color_editor.cpp b/Telegram/SourceFiles/ui/widgets/color_editor.cpp index dc2267adb..3141faef3 100644 --- a/Telegram/SourceFiles/ui/widgets/color_editor.cpp +++ b/Telegram/SourceFiles/ui/widgets/color_editor.cpp @@ -12,7 +12,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/painter.h" #include "ui/rect.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 "styles/style_boxes.h" #include "styles/style_media_view.h" diff --git a/Telegram/SourceFiles/ui/widgets/fields/special_fields.cpp b/Telegram/SourceFiles/ui/widgets/fields/special_fields.cpp index 245d8cddb..81b1b1a0d 100644 --- a/Telegram/SourceFiles/ui/widgets/fields/special_fields.cpp +++ b/Telegram/SourceFiles/ui/widgets/fields/special_fields.cpp @@ -9,6 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "lang/lang_keys.h" #include "countries/countries_instance.h" // Countries::ValidPhoneCode +#include "styles/style_widgets.h" #include diff --git a/Telegram/SourceFiles/ui/widgets/fields/special_fields.h b/Telegram/SourceFiles/ui/widgets/fields/special_fields.h index d1dded516..6c000f801 100644 --- a/Telegram/SourceFiles/ui/widgets/fields/special_fields.h +++ b/Telegram/SourceFiles/ui/widgets/fields/special_fields.h @@ -7,7 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #pragma once -#include "ui/widgets/input_fields.h" +#include "ui/widgets/fields/masked_input_field.h" namespace Ui { diff --git a/Telegram/SourceFiles/ui/widgets/multi_select.cpp b/Telegram/SourceFiles/ui/widgets/multi_select.cpp index 86526e111..99b7eaf7d 100644 --- a/Telegram/SourceFiles/ui/widgets/multi_select.cpp +++ b/Telegram/SourceFiles/ui/widgets/multi_select.cpp @@ -8,7 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/widgets/multi_select.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/effects/animations.h" #include "ui/effects/cross_animation.h" @@ -453,7 +453,6 @@ protected: void keyPressEvent(QKeyEvent *e) override; private: - void submitted(Qt::KeyboardModifiers modifiers); void cancelled(); void queryChanged(); void fieldFocused(); @@ -659,10 +658,24 @@ MultiSelect::Inner::Inner( , _field(this, _st.field, std::move(placeholder), query) , _cancel(this, _st.fieldCancel) { _field->customUpDown(true); - connect(_field, &Ui::InputField::focused, [=] { fieldFocused(); }); - connect(_field, &Ui::InputField::changed, [=] { queryChanged(); }); - connect(_field, &Ui::InputField::submitted, this, &Inner::submitted); - connect(_field, &Ui::InputField::cancelled, this, &Inner::cancelled); + _field->focusedChanges( + ) | rpl::filter(rpl::mappers::_1) | rpl::start_with_next([=] { + fieldFocused(); + }, _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([=] { clearQuery(); _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() { if (_cancelledCallback) { _cancelledCallback(); diff --git a/Telegram/SourceFiles/ui/widgets/sent_code_field.cpp b/Telegram/SourceFiles/ui/widgets/sent_code_field.cpp index b98d32466..f5ba4b858 100644 --- a/Telegram/SourceFiles/ui/widgets/sent_code_field.cpp +++ b/Telegram/SourceFiles/ui/widgets/sent_code_field.cpp @@ -19,7 +19,7 @@ SentCodeField::SentCodeField( rpl::producer placeholder, const QString &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 submitCallback) { diff --git a/Telegram/SourceFiles/ui/widgets/sent_code_field.h b/Telegram/SourceFiles/ui/widgets/sent_code_field.h index 12bbdb34e..4c3b519e5 100644 --- a/Telegram/SourceFiles/ui/widgets/sent_code_field.h +++ b/Telegram/SourceFiles/ui/widgets/sent_code_field.h @@ -8,7 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #pragma once #include "base/timer.h" -#include "ui/widgets/input_fields.h" +#include "ui/widgets/fields/input_field.h" namespace Ui { diff --git a/Telegram/SourceFiles/window/notifications_manager_default.cpp b/Telegram/SourceFiles/window/notifications_manager_default.cpp index f68524d1c..b72cb48dd 100644 --- a/Telegram/SourceFiles/window/notifications_manager_default.cpp +++ b/Telegram/SourceFiles/window/notifications_manager_default.cpp @@ -14,7 +14,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "chat_helpers/message_field.h" #include "lang/lang_keys.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/text/text_options.h" #include "ui/text/text_utilities.h" @@ -1105,9 +1105,16 @@ void Notification::showReplyField() { // Catch mouse press event to activate the window. QCoreApplication::instance()->installEventFilter(this); - connect(_replyArea, &Ui::InputField::resized, [=] { replyResized(); }); - connect(_replyArea, &Ui::InputField::submitted, [=] { sendReply(); }); - connect(_replyArea, &Ui::InputField::cancelled, [=] { replyCancel(); }); + _replyArea->heightChanges( + ) | rpl::start_with_next([=] { + 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->moveToRight(st::notifyBorderWidth, st::notifyMinHeight); diff --git a/Telegram/SourceFiles/window/themes/window_theme_editor_box.cpp b/Telegram/SourceFiles/window/themes/window_theme_editor_box.cpp index 46b5cf5fb..b45e02b69 100644 --- a/Telegram/SourceFiles/window/themes/window_theme_editor_box.cpp +++ b/Telegram/SourceFiles/window/themes/window_theme_editor_box.cpp @@ -14,7 +14,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "window/window_controller.h" #include "ui/boxes/confirm_box.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/buttons.h" #include "ui/widgets/labels.h" diff --git a/Telegram/SourceFiles/window/window_lock_widgets.cpp b/Telegram/SourceFiles/window/window_lock_widgets.cpp index c0b02c9c3..813db805b 100644 --- a/Telegram/SourceFiles/window/window_lock_widgets.cpp +++ b/Telegram/SourceFiles/window/window_lock_widgets.cpp @@ -15,7 +15,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/text/text.h" #include "ui/widgets/buttons.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/wrap/vertical_layout.h" #include "ui/toast/toast.h" diff --git a/Telegram/SourceFiles/window/window_peer_menu.cpp b/Telegram/SourceFiles/window/window_peer_menu.cpp index 92025ae40..26571b1d6 100644 --- a/Telegram/SourceFiles/window/window_peer_menu.cpp +++ b/Telegram/SourceFiles/window/window_peer_menu.cpp @@ -12,7 +12,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "chat_helpers/compose/compose_show.h" #include "chat_helpers/message_field.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 "lang/lang_keys.h" #include "ui/boxes/confirm_box.h" @@ -1924,9 +1924,8 @@ QPointer ShowForwardMessagesBox( const auto field = comment->entity(); - QObject::connect(field, &Ui::InputField::submitted, [=] { - submit({}); - }); + field->submits( + ) | rpl::start_with_next([=] { submit({}); }, field->lifetime()); InitMessageFieldHandlers( session, show, diff --git a/Telegram/lib_spellcheck b/Telegram/lib_spellcheck index c989a9f41..dfc42b20c 160000 --- a/Telegram/lib_spellcheck +++ b/Telegram/lib_spellcheck @@ -1 +1 @@ -Subproject commit c989a9f41e5bd8268587af2256efa89327cb3ae0 +Subproject commit dfc42b20ce602b105e5400e03eed626fd5bab7df diff --git a/Telegram/lib_ui b/Telegram/lib_ui index bcf88b906..5a2402ad5 160000 --- a/Telegram/lib_ui +++ b/Telegram/lib_ui @@ -1 +1 @@ -Subproject commit bcf88b90658c7e0925c11c486732d874477baf0d +Subproject commit 5a2402ad5d7e41a48c84d56c45df6b5d49e8b176 diff --git a/Telegram/lib_webview b/Telegram/lib_webview index 5b9092bcb..552d96a51 160000 --- a/Telegram/lib_webview +++ b/Telegram/lib_webview @@ -1 +1 @@ -Subproject commit 5b9092bcb27a207fed3cb2155bb98db46d7cedfa +Subproject commit 552d96a51fa5c8e50f9d6f631055558d99356cb4