From 075a1fd1d67c6e347ab40f460819067b947f92f6 Mon Sep 17 00:00:00 2001 From: Yuhang Zhao <zhaoyuhang@rankyee.com> Date: 周三, 06 12月 2023 18:06:54 +0800 Subject: [PATCH] fix mem leak --- src/core/corewindowagent.cpp | 35 ++++++++++++++++++----------------- 1 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/core/corewindowagent.cpp b/src/core/corewindowagent.cpp index c843273..5d1f74e 100644 --- a/src/core/corewindowagent.cpp +++ b/src/core/corewindowagent.cpp @@ -1,6 +1,8 @@ #include "corewindowagent.h" #include "corewindowagent_p.h" +#include "qwkcoreglobal_p.h" + #ifdef Q_OS_WINDOWS # include "win32windowcontext_p.h" #else @@ -11,34 +13,33 @@ namespace QWK { - CoreWindowAgentPrivate::CoreWindowAgentPrivate() : eventHandler(nullptr) { + CoreWindowAgentPrivate::CoreWindowAgentPrivate() : q_ptr(nullptr), context(nullptr) { } CoreWindowAgentPrivate::~CoreWindowAgentPrivate() { - delete eventHandler; + if (context) { + delete context; + context = nullptr; + } } void CoreWindowAgentPrivate::init() { } - bool CoreWindowAgentPrivate::setup(QWindow *window, WindowItemDelegate *delegate) { - Q_ASSERT(window); - if (!window) { - return false; - } - - auto handler = + bool CoreWindowAgentPrivate::setup(const QObject *host, const WindowItemDelegate *delegate) { + auto ctx = #ifdef Q_OS_WINDOWS - new Win32WindowContext(window, delegate) + new Win32WindowContext(host, delegate) #else - new QtWindowContext(window, delegate) + new QtWindowContext(host, window, delegate) #endif ; - if (!handler->setup()) { - delete handler; + if (!ctx->setup()) { + delete ctx; + ctx = nullptr; return false; } - eventHandler = handler; + context = ctx; return true; } @@ -46,12 +47,12 @@ void CoreWindowAgent::showSystemMenu(const QPoint &pos) { Q_D(CoreWindowAgent); - d->eventHandler->showSystemMenu(pos); + d->context->showSystemMenu(pos); } void CoreWindowAgent::startSystemMove(const QPoint &pos) { Q_D(CoreWindowAgent); - auto win = d->eventHandler->window(); + auto win = d->context->window(); if (!win) { return; } @@ -62,7 +63,7 @@ void CoreWindowAgent::startSystemResize(Qt::Edges edges, const QPoint &pos) { Q_D(CoreWindowAgent); - auto win = d->eventHandler->window(); + auto win = d->context->window(); if (!win) { return; } -- Gitblit v1.9.1