diff --git a/Telegram/SourceFiles/history/view/history_view_message.cpp b/Telegram/SourceFiles/history/view/history_view_message.cpp index a0f4ca5f1..c8f0f98d8 100644 --- a/Telegram/SourceFiles/history/view/history_view_message.cpp +++ b/Telegram/SourceFiles/history/view/history_view_message.cpp @@ -340,6 +340,9 @@ QSize Message::performCountOptimalSize() { } maxWidth = plainMaxWidth(); + if (context() == Context::Replies && item->isDiscussionPost()) { + maxWidth = st::msgMaxWidth; + } minHeight = hasVisibleText() ? item->_text.minHeight() : 0; if (!mediaOnBottom) { minHeight += st::msgPadding.bottom(); @@ -551,7 +554,8 @@ void Message::draw( auto skipTail = isAttachedToNext() || (media && media->skipBubbleTail()) - || (keyboard != nullptr); + || (keyboard != nullptr) + || (context() == Context::Replies && data()->isDiscussionPost()); auto displayTail = skipTail ? RectPart::None : (outbg && !Core::App().settings().chatWide()) ? RectPart::Right : RectPart::Left; PaintBubble(p, g, width(), selected, outbg, displayTail); @@ -1113,7 +1117,9 @@ bool Message::hasFromPhoto() const { case Context::History: case Context::Replies: { const auto item = message(); - if (item->isPost() || item->isEmpty()) { + if (item->isPost() + || item->isEmpty() + || (context() == Context::Replies && data()->isDiscussionPost())) { return false; } else if (Core::App().settings().chatWide()) { return true; @@ -2274,6 +2280,8 @@ TextSelection Message::unskipTextSelection(TextSelection selection) const { } QRect Message::countGeometry() const { + const auto commentsRoot = (context() == Context::Replies) + && data()->isDiscussionPost(); const auto item = message(); const auto media = this->media(); const auto mediaWidth = (media && media->isDisplayed()) @@ -2282,7 +2290,7 @@ QRect Message::countGeometry() const { const auto outbg = hasOutLayout(); const auto availableWidth = width() - st::msgMargin.left() - - st::msgMargin.right(); + - (commentsRoot ? st::msgMargin.left() : st::msgMargin.right()); auto contentLeft = (outbg && !Core::App().settings().chatWide()) ? st::msgMargin.right() : st::msgMargin.left(); @@ -2306,8 +2314,14 @@ QRect Message::countGeometry() const { contentWidth = mediaWidth; } } - if (contentWidth < availableWidth && outbg && !Core::App().settings().chatWide()) { - contentLeft += availableWidth - contentWidth; + if (contentWidth < availableWidth && !Core::App().settings().chatWide()) { + if (outbg) { + contentLeft += availableWidth - contentWidth; + } else if (commentsRoot) { + contentLeft += (availableWidth - contentWidth) / 2; + } + } else if (contentWidth < availableWidth && commentsRoot) { + contentLeft += ((st::msgMaxWidth + 2 * st::msgPhotoSkip) - contentWidth) / 2; } const auto contentTop = marginTop(); diff --git a/Telegram/SourceFiles/history/view/history_view_replies_section.cpp b/Telegram/SourceFiles/history/view/history_view_replies_section.cpp index 7494d2c84..f7782b341 100644 --- a/Telegram/SourceFiles/history/view/history_view_replies_section.cpp +++ b/Telegram/SourceFiles/history/view/history_view_replies_section.cpp @@ -1332,9 +1332,20 @@ void RepliesWidget::resizeEvent(QResizeEvent *e) { return; } _composeControls->resizeToWidth(width()); + recountChatWidth(); updateControlsGeometry(); } +void RepliesWidget::recountChatWidth() { + auto layout = (width() < st::adaptiveChatWideWidth) + ? Adaptive::ChatLayout::Normal + : Adaptive::ChatLayout::Wide; + if (layout != Global::AdaptiveChatLayout()) { + Global::SetAdaptiveChatLayout(layout); + Adaptive::Changed().notify(true); + } +} + void RepliesWidget::updateControlsGeometry() { const auto contentWidth = width(); diff --git a/Telegram/SourceFiles/history/view/history_view_replies_section.h b/Telegram/SourceFiles/history/view/history_view_replies_section.h index 91c5253cd..12b7f92f1 100644 --- a/Telegram/SourceFiles/history/view/history_view_replies_section.h +++ b/Telegram/SourceFiles/history/view/history_view_replies_section.h @@ -191,6 +191,7 @@ private: void calculateNextReplyReturn(); void restoreReplyReturns(const std::vector &list); void checkReplyReturns(); + void recountChatWidth(); void uploadFile(const QByteArray &fileContent, SendMediaType type); bool confirmSendingFiles(