From aeed2a0bcd0f28c1cb304cc406f34eda5be468fb Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Fri, 27 Mar 2026 13:16:17 +0300 Subject: [PATCH] [poll-create] Slightly improved ux. --- .../SourceFiles/boxes/create_poll_box.cpp | 21 ++++++++++++------- Telegram/SourceFiles/boxes/polls.style | 2 ++ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/Telegram/SourceFiles/boxes/create_poll_box.cpp b/Telegram/SourceFiles/boxes/create_poll_box.cpp index 06bb6adee0..806403697a 100644 --- a/Telegram/SourceFiles/boxes/create_poll_box.cpp +++ b/Telegram/SourceFiles/boxes/create_poll_box.cpp @@ -73,6 +73,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/boxes/choose_date_time.h" #include "ui/text/format_values.h" #include "ui/widgets/popup_menu.h" +#include "ui/widgets/scroll_area.h" #include "ui/widgets/shadow.h" #include "ui/wrap/fade_wrap.h" #include "ui/wrap/slide_wrap.h" @@ -147,6 +148,7 @@ public: void enableChooseCorrect(bool enabled, bool multiCorrect = false); + [[nodiscard]] not_null layoutWidget() const; [[nodiscard]] rpl::producer usedCount() const; [[nodiscard]] rpl::producer> scrollToWidget() const; [[nodiscard]] rpl::producer<> backspaceInFront() const; @@ -739,6 +741,10 @@ bool Options::hasUploadingMedia() const { return ranges::any_of(_list, &Option::uploadingMedia); } +not_null Options::layoutWidget() const { + return _optionsLayout; +} + rpl::producer Options::usedCount() const { return _usedCount.value(); } @@ -1318,7 +1324,7 @@ not_null CreatePollBox::setupSolution( object_ptr>( container, object_ptr(container)) - )->setDuration(0)->toggleOn(std::move(shown)); + )->toggleOn(std::move(shown)); const auto inner = outer->entity(); const auto session = &_controller->session(); @@ -1372,12 +1378,9 @@ not_null CreatePollBox::setupSolution( geometry.width()); }, warning->lifetime()); - inner->add( - object_ptr( - inner, - tr::lng_polls_solution_about(), - st::boxDividerLabel), - st::createPollFieldTitlePadding); + Ui::AddDividerText( + inner, + tr::lng_polls_solution_about()); return solution; } @@ -2640,6 +2643,7 @@ object_ptr CreatePollBox::setupContent() { if (checked) { state->addOptionsForceOff.fire(false); state->revotingForceOff.fire(false); + solution->setFocus(); } updateQuizDependentLocks(checked); options->enableChooseCorrect(checked, multiple->toggled()); @@ -2809,6 +2813,7 @@ object_ptr CreatePollBox::setupContent() { options->focusFirst(); } else if (state->error & Error::Correct) { showError(tr::lng_polls_choose_correct); + scrollToWidget(options->layoutWidget()); } else if (state->error & Error::Solution) { solution->showError(); } else if (state->error & Error::Media) { @@ -2867,4 +2872,6 @@ void CreatePollBox::prepare() { const auto inner = setInnerWidget(setupContent()); setDimensionsToContent(st::boxWideWidth, inner); + + Ui::SetStickyBottomScroll(this, inner); } diff --git a/Telegram/SourceFiles/boxes/polls.style b/Telegram/SourceFiles/boxes/polls.style index 1d9918b3b4..c3ab8fa120 100644 --- a/Telegram/SourceFiles/boxes/polls.style +++ b/Telegram/SourceFiles/boxes/polls.style @@ -267,6 +267,8 @@ pollDescriptionField: InputField(createPollField) { pollMediaField: InputField(createPollSolutionField) { textMargins: margins(0px, 4px, pollAttachTextSkip, 4px); + border: 0px; + borderActive: 0px; } infoPollsNewButtonBottom: 19px;