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) {
fillHistoryVisibilityButton();
}
if (canEditPreHistoryHidden || canEditSignatures || canEditInviteLink) {
if (canEditPreHistoryHidden
|| canEditSignatures
|| canEditInviteLink
|| canEditUsername) {
AddSkip(_controls.buttonsLayout,
st::editPeerTopButtonsLayoutSkip,
st::editPeerTopButtonsLayoutSkipCustomBottom);

View File

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

View File

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