From 5c305513539aa96ee0d837a4a5d100eeb5267aa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8C=83=E6=9C=8B=E7=A8=8B?= Date: Thu, 18 Feb 2021 15:01:45 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=8B=94=E6=8E=89?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E5=99=A8=E4=BB=BB=E5=8A=A1=E6=A0=8F=E5=B4=A9?= =?UTF-8?q?=E6=BA=83=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 拔掉主屏幕显示器后,如果设置了仅显示在主屏,那么任务栏会找不到显示的屏幕。导致空指针从而崩溃 Log: 修复拔掉显示器任务栏崩溃的问题 Task: https://pms.uniontech.com/zentao/task-view-61658.html Change-Id: Ic9d431fc7828039bec9600789a406bf1d8e8f15a --- frame/util/multiscreenworker.h | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/frame/util/multiscreenworker.h b/frame/util/multiscreenworker.h index 9eb7a59c2..e5b9468cd 100644 --- a/frame/util/multiscreenworker.h +++ b/frame/util/multiscreenworker.h @@ -90,12 +90,26 @@ public: QMapIteratorit(m_monitorInfo); while (it.hasNext()) { it.next(); - // 仅显示在主屏的情况下,可用屏幕信息只提供主屏幕 - if ((!m_showInPrimary && it.key()->enable()) - || (m_showInPrimary && it.key()->name() == m_primary)) { - list << it.key(); + // 仅显示在主屏的情况下,可用屏幕信息只提供主屏幕(m_primary有可能不是主屏幕的名字,数据还没来得及切换过来) + // 问题场景:连接双屏,设置任务栏仅显示在主屏(gsettings),然后拔掉主屏幕显示器,任务栏崩溃 + if (it.key()->enable()) { + if (m_showInPrimary) { + if (it.key()->name() == m_primary) { + list.clear(); + list.append(it.key()); + return list; + } + + if (!list.isEmpty()) { + list.removeAt(0); + list.push_front(it.key()); + } else + list << it.key(); + } else + list << it.key(); } } + return list; } /**