Fixed focus in EditPeerTypeBox. Slightly refactored code.

This commit is contained in:
23rd 2019-03-19 15:25:44 +03:00 committed by John Preston
parent bd7ba3acb1
commit 5edf200157
4 changed files with 33 additions and 28 deletions

View File

@ -672,7 +672,10 @@ void Controller::fillManageSection() {
if (canEditPreHistoryHidden) { if (canEditPreHistoryHidden) {
fillHistoryVisibilityButton(); fillHistoryVisibilityButton();
} }
if (canEditPreHistoryHidden || canEditSignatures || canEditInviteLink) { if (canEditPreHistoryHidden
|| canEditSignatures
|| canEditInviteLink
|| canEditUsername) {
AddSkip(_controls.buttonsLayout, AddSkip(_controls.buttonsLayout,
st::editPeerTopButtonsLayoutSkip, st::editPeerTopButtonsLayoutSkip,
st::editPeerTopButtonsLayoutSkipCustomBottom); st::editPeerTopButtonsLayoutSkipCustomBottom);

View File

@ -52,8 +52,7 @@ public:
not_null<Ui::VerticalLayout*> container, not_null<Ui::VerticalLayout*> container,
not_null<PeerData*> peer, not_null<PeerData*> peer,
std::optional<Privacy> privacySavedValue, std::optional<Privacy> privacySavedValue,
std::optional<QString> usernameSavedValue, std::optional<QString> usernameSavedValue);
std::optional<LangKey> usernameError);
void createContent(); void createContent();
QString getUsernameInput(); QString getUsernameInput();
@ -79,6 +78,11 @@ public:
return _controls.privacy->value(); return _controls.privacy->value();
} }
void showError(LangKey key) {
_controls.usernameInput->showError();
showUsernameError(Lang::Viewer(key));
}
private: private:
struct Controls { struct Controls {
@ -137,7 +141,6 @@ private:
not_null<PeerData*> _peer; not_null<PeerData*> _peer;
std::optional<Privacy> _privacySavedValue = std::nullopt; std::optional<Privacy> _privacySavedValue = std::nullopt;
std::optional<QString> _usernameSavedValue = std::nullopt; std::optional<QString> _usernameSavedValue = std::nullopt;
std::optional<LangKey> _usernameError = std::nullopt;
bool _isGroup = false; bool _isGroup = false;
bool _isInviteLink = false; bool _isInviteLink = false;
@ -157,12 +160,10 @@ Controller::Controller(
not_null<Ui::VerticalLayout*> container, not_null<Ui::VerticalLayout*> container,
not_null<PeerData*> peer, not_null<PeerData*> peer,
std::optional<Privacy> privacySavedValue, std::optional<Privacy> privacySavedValue,
std::optional<QString> usernameSavedValue, std::optional<QString> usernameSavedValue)
std::optional<LangKey> usernameError)
: _peer(peer) : _peer(peer)
, _privacySavedValue(privacySavedValue) , _privacySavedValue(privacySavedValue)
, _usernameSavedValue(usernameSavedValue) , _usernameSavedValue(usernameSavedValue)
, _usernameError(usernameError)
, _isGroup(_peer->isChat() || _peer->isMegagroup()) , _isGroup(_peer->isChat() || _peer->isMegagroup())
, _isInviteLink(!_privacySavedValue.has_value() && !_usernameSavedValue.has_value()) , _isInviteLink(!_privacySavedValue.has_value() && !_usernameSavedValue.has_value())
, _isAllowSave(!_usernameSavedValue.value_or(QString()).isEmpty()) , _isAllowSave(!_usernameSavedValue.value_or(QString()).isEmpty())
@ -191,12 +192,6 @@ void Controller::createContent() {
if (_controls.privacy->value() == Privacy::Private) { if (_controls.privacy->value() == Privacy::Private) {
checkUsernameAvailability(); checkUsernameAvailability();
} }
if (_usernameError.has_value()) {
showUsernameError(Lang::Viewer(_usernameError.value()));
// Not focused actually.
_controls.usernameInput->setDisplayFocused(true);
setFocusUsername();
}
} }
@ -387,14 +382,12 @@ void Controller::privacyChanged(Privacy value) {
} }
refreshVisibilities(); refreshVisibilities();
_controls.usernameInput->setDisplayFocused(true); _controls.usernameInput->setDisplayFocused(true);
setFocusUsername();
// _box->scrollToWidget(_controls.usernameInput);
} else { } else {
request(base::take(_checkUsernameRequestId)).cancel(); request(base::take(_checkUsernameRequestId)).cancel();
_checkUsernameTimer.cancel(); _checkUsernameTimer.cancel();
refreshVisibilities(); refreshVisibilities();
setFocusUsername();
} }
setFocusUsername();
} }
void Controller::checkUsernameAvailability() { void Controller::checkUsernameAvailability() {
@ -443,7 +436,6 @@ void Controller::checkUsernameAvailability() {
if (_controls.privacy->value() == Privacy::Public) { if (_controls.privacy->value() == Privacy::Public) {
_controls.usernameResult = nullptr; _controls.usernameResult = nullptr;
setFocusUsername(); setFocusUsername();
// _box->scrollToWidget(_controls.usernameInput);
} }
} else if (type == qstr("USERNAME_INVALID")) { } else if (type == qstr("USERNAME_INVALID")) {
showUsernameError( showUsernameError(
@ -716,6 +708,10 @@ EditPeerTypeBox::EditPeerTypeBox(
, _usernameError(usernameError) { , _usernameError(usernameError) {
} }
void EditPeerTypeBox::setInnerFocus() {
_focusRequests.fire({});
}
void EditPeerTypeBox::prepare() { void EditPeerTypeBox::prepare() {
_peer->updateFull(); _peer->updateFull();
@ -726,11 +722,16 @@ void EditPeerTypeBox::prepare() {
content, content,
_peer, _peer,
_privacySavedValue, _privacySavedValue,
_usernameSavedValue, _usernameSavedValue);
_usernameError);
_focusRequests.events( _focusRequests.events(
) | rpl::start_with_next( ) | rpl::start_with_next(
[=] { controller->setFocusUsername(); }, [=] {
controller->setFocusUsername();
if (_usernameError.has_value()) {
controller->showError(_usernameError.value());
_usernameError = std::nullopt;
}
},
lifetime()); lifetime());
controller->createContent(); controller->createContent();

View File

@ -50,6 +50,7 @@ public:
protected: protected:
void prepare() override; void prepare() override;
void setInnerFocus() override;
private: private:
not_null<PeerData*> _peer; not_null<PeerData*> _peer;