diff --git a/Telegram/SourceFiles/window/window_main_menu.cpp b/Telegram/SourceFiles/window/window_main_menu.cpp index 327a77724e..158c68863f 100644 --- a/Telegram/SourceFiles/window/window_main_menu.cpp +++ b/Telegram/SourceFiles/window/window_main_menu.cpp @@ -101,7 +101,7 @@ private: void paintEvent(QPaintEvent *e) override; void paintUserpic(Painter &p); - const not_null _account; + const not_null _session; const style::Menu &_st; std::shared_ptr _userpicView; InMemoryKey _userpicKey = {}; @@ -153,7 +153,7 @@ MainMenu::AccountButton::AccountButton( QWidget *parent, not_null account) : RippleButton(parent, st::defaultRippleAnimation) -, _account(account) +, _session(&account->session()) , _st(st::mainMenu){ const auto height = _st.itemPadding.top() + _st.itemStyle.font->height @@ -167,33 +167,27 @@ MainMenu::AccountButton::AccountButton( } }); - _account->sessionValue( - ) | rpl::filter([=](Main::Session *session) { - return (session != nullptr); - }) | rpl::start_with_next([=](not_null session) { - rpl::single( - rpl::empty_value() - ) | rpl::then( - session->data().unreadBadgeChanges() - ) | rpl::start_with_next([=] { - _unreadBadge = session->data().unreadBadge(); - _unreadBadgeMuted = session->data().unreadBadgeMuted(); - update(); - }, lifetime()); + rpl::single( + rpl::empty_value() + ) | rpl::then( + _session->data().unreadBadgeChanges() + ) | rpl::start_with_next([=] { + _unreadBadge = _session->data().unreadBadge(); + _unreadBadgeMuted = _session->data().unreadBadgeMuted(); + update(); }, lifetime()); } void MainMenu::AccountButton::paintUserpic(Painter &p) { - Expects(_account->sessionExists()); - const auto size = st::mainMenuAccountSize; const auto iconSize = height() - 2 * _st.itemIconPosition.y(); const auto shift = (size - iconSize) / 2; const auto x = _st.itemIconPosition.x() - shift; const auto y = (height() - size) / 2; - const auto check = (_account == &Core::App().domain().active()); - const auto user = _account->session().user(); + const auto check = (&_session->account() + == &Core::App().domain().active()); + const auto user = _session->user(); if (!check) { user->paintUserpicLeft(p, _userpicView, x, y, width(), size); return; @@ -234,8 +228,6 @@ void MainMenu::AccountButton::paintUserpic(Painter &p) { } void MainMenu::AccountButton::paintEvent(QPaintEvent *e) { - Expects(_account->sessionExists()); - auto p = Painter(this); const auto over = isOver(); p.fillRect(rect(), over ? _st.itemBgOver : _st.itemBg); @@ -244,7 +236,8 @@ void MainMenu::AccountButton::paintEvent(QPaintEvent *e) { paintUserpic(p); auto available = width() - _st.itemPadding.left(); - if (_unreadBadge && _account != &Core::App().activeAccount()) { + if (_unreadBadge + && (&_session->account() != &Core::App().activeAccount())) { _unreadSt.muted = _unreadBadgeMuted; const auto string = (_unreadBadge > 99) ? "99+" @@ -267,7 +260,7 @@ void MainMenu::AccountButton::paintEvent(QPaintEvent *e) { } p.setPen(over ? _st.itemFgOver : _st.itemFg); - _account->session().user()->nameText().drawElided( + _session->user()->nameText().drawElided( p, _st.itemPadding.left(), _st.itemPadding.top(),