mirror of https://github.com/procxx/kepka.git
Fix an infinite recursion in Emoji panel/section.
HistoryWidget::resizeEvent() can start taking TabbedSelector from TabbedPanel which will call QWidget::render() which can call again HistoryWidget::resizeEvent() from sendPendingMoveAndResizeEvents(). Use a separate flag for _tabbedSection to prevent recursion there.
This commit is contained in:
parent
aedbd6dfe4
commit
33f59dd3ec
|
@ -3699,13 +3699,17 @@ void HistoryWidget::topBarClick() {
|
||||||
|
|
||||||
void HistoryWidget::updateTabbedSelectorSectionShown() {
|
void HistoryWidget::updateTabbedSelectorSectionShown() {
|
||||||
auto tabbedSelectorSectionEnabled = AuthSession::Current().data().tabbedSelectorSectionEnabled();
|
auto tabbedSelectorSectionEnabled = AuthSession::Current().data().tabbedSelectorSectionEnabled();
|
||||||
auto shown = tabbedSelectorSectionEnabled && (width() >= minimalWidthForTabbedSelectorSection());
|
auto useTabbedSection = tabbedSelectorSectionEnabled && (width() >= minimalWidthForTabbedSelectorSection());
|
||||||
auto shownNow = (_tabbedSection != nullptr);
|
if (_tabbedSectionUsed == useTabbedSection) {
|
||||||
if (shown == shownNow) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
_tabbedSectionUsed = useTabbedSection;
|
||||||
|
|
||||||
if (shown) {
|
// Use a separate bool flag instead of just (_tabbedSection != nullptr), because
|
||||||
|
// _tabbedPanel->takeSelector() calls QWidget::render(), which calls
|
||||||
|
// sendPendingMoveAndResizeEvents() for all widgets in the window, which can lead
|
||||||
|
// to a new HistoryWidget::resizeEvent() call and an infinite recursion here.
|
||||||
|
if (_tabbedSectionUsed) {
|
||||||
_tabbedSection.create(this, _controller, _tabbedPanel->takeSelector());
|
_tabbedSection.create(this, _controller, _tabbedPanel->takeSelector());
|
||||||
_tabbedSection->setCancelledCallback([this] { setInnerFocus(); });
|
_tabbedSection->setCancelledCallback([this] { setInnerFocus(); });
|
||||||
_rightShadow.create(this, st::shadowFg);
|
_rightShadow.create(this, st::shadowFg);
|
||||||
|
|
|
@ -790,6 +790,7 @@ private:
|
||||||
object_ptr<ChatHelpers::TabbedPanel> _tabbedPanel;
|
object_ptr<ChatHelpers::TabbedPanel> _tabbedPanel;
|
||||||
object_ptr<ChatHelpers::TabbedSection> _tabbedSection = { nullptr };
|
object_ptr<ChatHelpers::TabbedSection> _tabbedSection = { nullptr };
|
||||||
QPointer<ChatHelpers::TabbedSelector> _tabbedSelector;
|
QPointer<ChatHelpers::TabbedSelector> _tabbedSelector;
|
||||||
|
bool _tabbedSectionUsed = false;
|
||||||
DragState _attachDrag = DragStateNone;
|
DragState _attachDrag = DragStateNone;
|
||||||
object_ptr<DragArea> _attachDragDocument, _attachDragPhoto;
|
object_ptr<DragArea> _attachDragDocument, _attachDragPhoto;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue