diff --git a/Telegram/SourceFiles/info/profile/info_profile_emoji_status_panel.cpp b/Telegram/SourceFiles/info/profile/info_profile_emoji_status_panel.cpp index 890a755ae2..085d4fff2f 100644 --- a/Telegram/SourceFiles/info/profile/info_profile_emoji_status_panel.cpp +++ b/Telegram/SourceFiles/info/profile/info_profile_emoji_status_panel.cpp @@ -180,6 +180,16 @@ void EmojiStatusPanel::hideFast() { } } +void EmojiStatusPanel::hideAnimated() { + if (_panel) { + _panel->hideAnimated(); + } +} + +bool EmojiStatusPanel::shown() const { + return _panel && !_panel->isHidden(); +} + bool EmojiStatusPanel::hasFocus() const { return _panel && Ui::InFocusChain(_panel.get()); } diff --git a/Telegram/SourceFiles/info/profile/info_profile_emoji_status_panel.h b/Telegram/SourceFiles/info/profile/info_profile_emoji_status_panel.h index 48e854ed6f..f9a6252b38 100644 --- a/Telegram/SourceFiles/info/profile/info_profile_emoji_status_panel.h +++ b/Telegram/SourceFiles/info/profile/info_profile_emoji_status_panel.h @@ -60,6 +60,8 @@ public: }; void show(Descriptor &&descriptor); void hideFast(); + void hideAnimated(); + [[nodiscard]] bool shown() const; void repaint(); struct CustomChosen { diff --git a/Telegram/SourceFiles/window/window_main_menu.cpp b/Telegram/SourceFiles/window/window_main_menu.cpp index d096e390e3..f6f0985397 100644 --- a/Telegram/SourceFiles/window/window_main_menu.cpp +++ b/Telegram/SourceFiles/window/window_main_menu.cpp @@ -829,12 +829,30 @@ void MainMenu::chooseEmojiStatus() { if (_controller->showFrozenError()) { return; } else if (const auto widget = _badge->widget()) { + setupEmojiStatusDismiss(); _emojiStatusPanel->show(_controller, widget, _badge->sizeTag()); } else { ShowPremiumPreviewBox(_controller, PremiumFeature::EmojiStatus); } } +void MainMenu::setupEmojiStatusDismiss() { + if (_emojiStatusDismissSetup) { + return; + } + _emojiStatusDismissSetup = true; + + base::install_event_filter(this, parentWidget(), [=]( + not_null e) { + if (e->type() != QEvent::MouseButtonPress + || !_emojiStatusPanel->shown()) { + return base::EventFilterResult::Continue; + } + _emojiStatusPanel->hideAnimated(); + return base::EventFilterResult::Cancel; + }); +} + bool MainMenu::eventHook(QEvent *event) { const auto type = event->type(); if (type == QEvent::TouchBegin diff --git a/Telegram/SourceFiles/window/window_main_menu.h b/Telegram/SourceFiles/window/window_main_menu.h index 281b747856..5975e0e60d 100644 --- a/Telegram/SourceFiles/window/window_main_menu.h +++ b/Telegram/SourceFiles/window/window_main_menu.h @@ -72,6 +72,7 @@ private: void setupAccounts(); void setupAccountsToggle(); void setupSetEmojiStatus(); + void setupEmojiStatusDismiss(); void setupArchive(); void setupMenu(); void updateControlsGeometry(); @@ -113,6 +114,7 @@ private: rpl::variable _showFinished = false; bool _insideEventRedirect = false; + bool _emojiStatusDismissSetup = false; };