From 32bdd7be5e78730a2c380226bc8adb2503138722 Mon Sep 17 00:00:00 2001 From: heyuming Date: Thu, 23 Mar 2023 13:18:26 +0800 Subject: [PATCH] fix: dock crashed while gragging sniItem MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Log: 修复拖拽sni控件时引起的dock崩溃 --- frame/window/tray/widgets/snitrayitemwidget.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/frame/window/tray/widgets/snitrayitemwidget.cpp b/frame/window/tray/widgets/snitrayitemwidget.cpp index 07009f2a6..47ca1b3b1 100644 --- a/frame/window/tray/widgets/snitrayitemwidget.cpp +++ b/frame/window/tray/widgets/snitrayitemwidget.cpp @@ -32,9 +32,10 @@ Dock::Position SNITrayItemWidget::DockPosition = Dock::Position::Bottom; using namespace Dock; SNITrayItemWidget::SNITrayItemWidget(const QString &sniServicePath, QWidget *parent) - : BaseTrayWidget(parent), - m_menu(nullptr), - m_updateIconTimer(new QTimer(this)) + : BaseTrayWidget(parent) + , m_dbusMenuImporter(nullptr) + , m_menu(nullptr) + , m_updateIconTimer(new QTimer(this)) , m_updateOverlayIconTimer(new QTimer(this)) , m_updateAttentionIconTimer(new QTimer(this)) , m_sniServicePath(sniServicePath) @@ -785,6 +786,16 @@ bool SNITrayItemWidget::containsPoint(const QPoint &pos) { QRect rectGlobal(ptGlobal, this->size()); if (rectGlobal.contains(pos)) return true; + if (!m_menu) { + if (m_dbusMenuImporter) { + qInfo() << "importer exists: " << m_dbusMenuImporter; + m_menu = m_dbusMenuImporter->menu(); + } else { + qInfo() << "importer not exists."; + initMenu(); + } + } + // 如果菜单列表隐藏,则认为不在区域内 if (!m_menu->isVisible()) return false;