From 52ac632bc4b0c7c9e80d012e6aa6ba154949e0ef Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 23 Mar 2021 16:32:21 +0400 Subject: [PATCH] Allow destroying Ui::Window on close. --- ui/integration.cpp | 4 ++++ ui/integration.h | 2 ++ ui/platform/ui_platform_window_title.cpp | 15 ++++++++++++--- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/ui/integration.cpp b/ui/integration.cpp index ae49b3e..f8df624 100644 --- a/ui/integration.cpp +++ b/ui/integration.cpp @@ -79,6 +79,10 @@ const Emoji::One *Integration::defaultEmojiVariant(const Emoji::One *emoji) { return emoji; } +QWidget *Integration::modalWindowParent() { + return nullptr; +} + rpl::producer<> Integration::forcePopupMenuHideRequests() { return rpl::never(); } diff --git a/ui/integration.h b/ui/integration.h index 0ae8343..e3c90db 100644 --- a/ui/integration.h +++ b/ui/integration.h @@ -56,6 +56,8 @@ public: [[nodiscard]] virtual const Emoji::One *defaultEmojiVariant( const Emoji::One *emoji); + [[nodiscard]] virtual QWidget *modalWindowParent(); + [[nodiscard]] virtual rpl::producer<> forcePopupMenuHideRequests(); [[nodiscard]] virtual QString phraseContextCopyText(); diff --git a/ui/platform/ui_platform_window_title.cpp b/ui/platform/ui_platform_window_title.cpp index 1a5b406..7da20ec 100644 --- a/ui/platform/ui_platform_window_title.cpp +++ b/ui/platform/ui_platform_window_title.cpp @@ -90,12 +90,16 @@ not_null TitleControls::window() const { void TitleControls::init(Fn maximize) { _minimize->setClickedCallback([=] { + const auto weak = MakeWeak(_minimize.data()); window()->setWindowState( window()->windowState() | Qt::WindowMinimized); - _minimize->clearState(); + if (weak) { + _minimize->clearState(); + } }); _minimize->setPointerCursor(false); _maximizeRestore->setClickedCallback([=] { + const auto weak = MakeWeak(_maximizeRestore.data()); if (maximize) { maximize(!_maximizedState); } else { @@ -103,12 +107,17 @@ void TitleControls::init(Fn maximize) { ? Qt::WindowNoState : Qt::WindowMaximized); } - _maximizeRestore->clearState(); + if (weak) { + _maximizeRestore->clearState(); + } }); _maximizeRestore->setPointerCursor(false); _close->setClickedCallback([=] { + const auto weak = MakeWeak(_close.data()); window()->close(); - _close->clearState(); + if (weak) { + _close->clearState(); + } }); _close->setPointerCursor(false);