Group :: Graphical desktop/Other
RPM: dtkwidget
Main Changelog Spec Patches Sources Download Gear Bugs and FR Repocop
Patch: 0001-fix-feature-display-dialog.patch
Download
Download
From 92a7561e0f541e165e91eb108cb846f0d4701fe3 Mon Sep 17 00:00:00 2001
From: wang fei <wangfeia@uniontech.com>
Date: Tue, 7 Feb 2023 16:56:57 +0800
Subject: [PATCH] fix: 二次调起特性对话框崩溃
原因:特性对话框的父窗口是关于对话框时,
随着关于对话框销毁,再次访问特性对话框对象就会崩溃。
修改:1.特性对话框不设置父窗口,随着应用退出销毁。
2.特性对话框展示时,调整位置。
Log: 修复二次调起特性对话框崩溃问题
Influence: 特性对话框
Change-Id: I56671745ae6fb087133c34fcd50f54d4b9789e81
---
src/widgets/dapplication.cpp | 7 ++++++-
src/widgets/dfeaturedisplaydialog.cpp | 5 +++++
src/widgets/dmainwindow.cpp | 9 ---------
3 files changed, 11 insertions(+), 10 deletions(-)
diff --git a/src/widgets/dapplication.cpp b/src/widgets/dapplication.cpp
index 1342f8a..5f1d14f 100644
--- a/src/widgets/dapplication.cpp
+++ b/src/widgets/dapplication.cpp
@@ -1112,5 +1112,10 @@ DFeatureDisplayDialog *DApplication::featureDisplayDialog()
D_D(DApplication);
if (d->featureDisplayDialog == nullptr) {
- d->featureDisplayDialog = new DFeatureDisplayDialog(activeWindow());
+ d->featureDisplayDialog = new DFeatureDisplayDialog();
+ connect(this, &DApplication::aboutToQuit, this, [this]{
+ D_D(DApplication);
+ d->featureDisplayDialog->deleteLater();
+ d->featureDisplayDialog = nullptr;
+ });
}
return d->featureDisplayDialog;
diff --git a/src/widgets/dfeaturedisplaydialog.cpp b/src/widgets/dfeaturedisplaydialog.cpp
index 69b0827..1d4aea3 100644
--- a/src/widgets/dfeaturedisplaydialog.cpp
+++ b/src/widgets/dfeaturedisplaydialog.cpp
@@ -10,4 +10,5 @@
#include <DGuiApplicationHelper>
+#include <QApplication>
#include <QLabel>
#include <QHBoxLayout>
@@ -327,4 +328,8 @@ void DFeatureDisplayDialog::show()
d->updateItemWidth();
DDialog::show();
+ if (QWidget* window = qApp->activeWindow()) {
+ const auto point(window->mapToGlobal(window->rect().topLeft()));
+ moveToCenterByRect(QRect(point.x(), point.y(), window->rect().width(), window->rect().height()));
+ }
}
diff --git a/src/widgets/dmainwindow.cpp b/src/widgets/dmainwindow.cpp
index 536c616..adb21c5 100644
--- a/src/widgets/dmainwindow.cpp
+++ b/src/widgets/dmainwindow.cpp
@@ -140,13 +140,4 @@ void DMainWindowPrivate::_q_autoShowFeatureDialog()
if (q->windowHandle()->isActive()) {
qApp->featureDisplayDialog()->show();
- const QPoint pos = q->pos();
- QRect rect;
- for (QScreen *screen : qApp->screens()) {
- if (screen->geometry().contains(pos)) {
- rect = screen->geometry();
- break;
- }
- }
- qApp->featureDisplayDialog()->moveToCenterByRect(rect);
q->disconnect(q->windowHandle(), SIGNAL(activeChanged()), q, SLOT(_q_autoShowFeatureDialog()));
}
--
libgit2 1.3.2