diff --git a/Telegram/SourceFiles/boxes/add_contact_box.cpp b/Telegram/SourceFiles/boxes/add_contact_box.cpp index a69e40b96..a1510ac9a 100644 --- a/Telegram/SourceFiles/boxes/add_contact_box.cpp +++ b/Telegram/SourceFiles/boxes/add_contact_box.cpp @@ -268,7 +268,7 @@ AddContactBox::AddContactBox( this, st::defaultInputField, tr::lng_contact_phone(), - ExtractPhonePrefix(session->user()->phone()), + Ui::ExtractPhonePrefix(session->user()->phone()), phone) , _invertOrder(langFirstNameGoesSecond()) { if (!phone.isEmpty()) { diff --git a/Telegram/SourceFiles/intro/intro_phone.cpp b/Telegram/SourceFiles/intro/intro_phone.cpp index 3f61abb39..d4260e460 100644 --- a/Telegram/SourceFiles/intro/intro_phone.cpp +++ b/Telegram/SourceFiles/intro/intro_phone.cpp @@ -46,12 +46,24 @@ PhoneWidget::PhoneWidget( , _code(this, st::introCountryCode) , _phone(this, st::introPhone) , _checkRequestTimer([=] { checkRequest(); }) { - connect(_phone, SIGNAL(voidBackspace(QKeyEvent*)), _code, SLOT(startErasing(QKeyEvent*))); - connect(_country, SIGNAL(codeChanged(const QString &)), _code, SLOT(codeSelected(const QString &))); - connect(_code, SIGNAL(codeChanged(const QString &)), _country, SLOT(onChooseCode(const QString &))); - connect(_code, SIGNAL(codeChanged(const QString &)), _phone, SLOT(onChooseCode(const QString &))); + _phone->frontBackspaceEvent( + ) | rpl::start_with_next([=](not_null e) { + _code->startErasing(e); + }, _code->lifetime()); + + connect(_country, &CountryInput::codeChanged, [=](const QString &code) { + _code->codeSelected(code); + }); + _code->codeChanged( + ) | rpl::start_with_next([=](const QString &code) { + _country->onChooseCode(code); + _phone->chooseCode(code); + }, _code->lifetime()); connect(_country, SIGNAL(codeChanged(const QString &)), _phone, SLOT(onChooseCode(const QString &))); - connect(_code, SIGNAL(addedToNumber(const QString &)), _phone, SLOT(addedToNumber(const QString &))); + _code->addedToNumber( + ) | rpl::start_with_next([=](const QString &added) { + _phone->addedToNumber(added); + }, _phone->lifetime()); connect(_phone, &Ui::PhonePartInput::changed, [=] { phoneChanged(); }); connect(_code, &Ui::CountryCodeInput::changed, [=] { phoneChanged(); }); diff --git a/Telegram/SourceFiles/payments/payments_form.cpp b/Telegram/SourceFiles/payments/payments_form.cpp index 96dfa27c1..3cc62685e 100644 --- a/Telegram/SourceFiles/payments/payments_form.cpp +++ b/Telegram/SourceFiles/payments/payments_form.cpp @@ -295,7 +295,6 @@ void Form::refreshPaymentMethodDetails() { const auto &entered = _paymentMethod.newCredentials; _paymentMethod.ui.title = entered ? entered.title : saved.title; _paymentMethod.ui.ready = entered || saved; - _paymentMethod.ui.native.defaultPhone = defaultPhone(); _paymentMethod.ui.native.defaultCountry = defaultCountry(); } diff --git a/Telegram/SourceFiles/ui/special_fields.cpp b/Telegram/SourceFiles/ui/special_fields.cpp index a1099e4d7..238bb6f06 100644 --- a/Telegram/SourceFiles/ui/special_fields.cpp +++ b/Telegram/SourceFiles/ui/special_fields.cpp @@ -30,8 +30,7 @@ constexpr auto kMaxPhoneCodeLength = 4; CountryCodeInput::CountryCodeInput( QWidget *parent, const style::InputField &st) -: MaskedInputField(parent, st) -, _nosignal(false) { +: MaskedInputField(parent, st) { } void CountryCodeInput::startErasing(QKeyEvent *e) { @@ -91,14 +90,15 @@ void CountryCodeInput::correctValue( setCorrectedText(now, nowCursor, newText, newPos); if (!_nosignal && was != newText) { - codeChanged(newText.mid(1)); + _codeChanged.fire(newText.mid(1)); } if (!addToNumber.isEmpty()) { - addedToNumber(addToNumber); + _addedToNumber.fire_copy(addToNumber); } } -PhonePartInput::PhonePartInput(QWidget *parent, const style::InputField &st) : MaskedInputField(parent, st/*, tr::lng_phone_ph(tr::now)*/) { +PhonePartInput::PhonePartInput(QWidget *parent, const style::InputField &st) +: MaskedInputField(parent, st/*, tr::lng_phone_ph(tr::now)*/) { } void PhonePartInput::paintAdditionalPlaceholder(Painter &p) { @@ -119,8 +119,8 @@ void PhonePartInput::paintAdditionalPlaceholder(Painter &p) { } void PhonePartInput::keyPressEvent(QKeyEvent *e) { - if (e->key() == Qt::Key_Backspace && getLastText().isEmpty()) { - voidBackspace(e); + if (e->key() == Qt::Key_Backspace && cursorPosition() == 0) { + _frontBackspaceEvent.fire_copy(e); } else { MaskedInputField::keyPressEvent(e); } @@ -204,7 +204,7 @@ void PhonePartInput::addedToNumber(const QString &added) { startPlaceholderAnimation(); } -void PhonePartInput::onChooseCode(const QString &code) { +void PhonePartInput::chooseCode(const QString &code) { _pattern = phoneNumberParse(code); if (!_pattern.isEmpty() && _pattern.at(0) == code.size()) { _pattern.pop_front(); diff --git a/Telegram/SourceFiles/ui/special_fields.h b/Telegram/SourceFiles/ui/special_fields.h index c0d50b6d2..fae5093a4 100644 --- a/Telegram/SourceFiles/ui/special_fields.h +++ b/Telegram/SourceFiles/ui/special_fields.h @@ -12,18 +12,19 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL namespace Ui { class CountryCodeInput : public MaskedInputField { - Q_OBJECT - public: CountryCodeInput(QWidget *parent, const style::InputField &st); -public Q_SLOTS: void startErasing(QKeyEvent *e); - void codeSelected(const QString &code); -Q_SIGNALS: - void codeChanged(const QString &code); - void addedToNumber(const QString &added); + [[nodiscard]] rpl::producer addedToNumber() const { + return _addedToNumber.events(); + } + [[nodiscard]] rpl::producer codeChanged() const { + return _codeChanged.events(); + } + + void codeSelected(const QString &code); protected: void correctValue( @@ -33,22 +34,23 @@ protected: int &nowCursor) override; private: - bool _nosignal; + bool _nosignal = false; + rpl::event_stream _addedToNumber; + rpl::event_stream _codeChanged; }; class PhonePartInput : public MaskedInputField { - Q_OBJECT - public: PhonePartInput(QWidget *parent, const style::InputField &st); -public Q_SLOTS: - void addedToNumber(const QString &added); - void onChooseCode(const QString &code); + [[nodiscard]] auto frontBackspaceEvent() const + -> rpl::producer> { + return _frontBackspaceEvent.events(); + } -Q_SIGNALS: - void voidBackspace(QKeyEvent *e); + void addedToNumber(const QString &added); + void chooseCode(const QString &code); protected: void keyPressEvent(QKeyEvent *e) override; @@ -63,6 +65,7 @@ protected: private: QVector _pattern; QString _additionalPlaceholder; + rpl::event_stream> _frontBackspaceEvent; };