From efbae916fbbbdf76eecc67e2ebf5a351d2dfb43a Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Sun, 7 May 2023 23:23:52 +0200 Subject: [PATCH] UI: Fix crash on macOS when closing OAUTH browser panel Deleting the cefWidget in the panel's destructor can result in a crash on macOS because the underlying NSView might have been destroyed in memory between Qt closing the QDialog and the destructor call. Moving the browser destruction into the accept and reject calls ensures that CEF can clean up its state _before_ Qt tears down the view hierarchy. --- UI/auth-oauth.cpp | 23 +++++++++++++++++------ UI/auth-oauth.hpp | 2 ++ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/UI/auth-oauth.cpp b/UI/auth-oauth.cpp index c19be67bd..d18923d9d 100644 --- a/UI/auth-oauth.cpp +++ b/UI/auth-oauth.cpp @@ -71,12 +71,7 @@ OAuthLogin::OAuthLogin(QWidget *parent, const std::string &url, bool token) #endif } -OAuthLogin::~OAuthLogin() -{ -#ifdef BROWSER_AVAILABLE - delete cefWidget; -#endif -} +OAuthLogin::~OAuthLogin() {} int OAuthLogin::exec() { @@ -88,6 +83,22 @@ int OAuthLogin::exec() return QDialog::Rejected; } +void OAuthLogin::reject() +{ +#ifdef BROWSER_AVAILABLE + delete cefWidget; +#endif + QDialog::reject(); +} + +void OAuthLogin::accept() +{ +#ifdef BROWSER_AVAILABLE + delete cefWidget; +#endif + QDialog::accept(); +} + void OAuthLogin::urlChanged(const QString &url) { std::string uri = get_token ? "access_token=" : "code="; diff --git a/UI/auth-oauth.hpp b/UI/auth-oauth.hpp index b558692b2..364dccdc4 100644 --- a/UI/auth-oauth.hpp +++ b/UI/auth-oauth.hpp @@ -24,6 +24,8 @@ public: inline bool LoadFail() const { return fail; } virtual int exec() override; + virtual void reject() override; + virtual void accept() override; public slots: void urlChanged(const QString &url);