Sisyphus repository
Last update: 1 october 2023 | SRPMs: 18631 | Visits: 37515237
en ru br
ALT Linux repos
S:5.6.8-alt1

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


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
 
design & coding: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
current maintainer: Michael Shigorin