fix: 修复任务栏启动器找不到显示器导致其崩溃的问题

修复任务栏启动器找不到显示器导致其崩溃的问题

Log: 修复任务栏启动器找不到显示器导致其崩溃的问题
Change-Id: Ib1bff6b7f255df521c41029c4c2417e43211931f
Reviewed-on: http://gerrit.uniontech.com/c/dde-dock/+/3435
Reviewed-by: wangwei <wangwei@uniontech.com>
Reviewed-by: fanpengcheng <fanpengcheng@uniontech.com>
Tested-by: fanpengcheng <fanpengcheng@uniontech.com>
This commit is contained in:
范朋程 2020-09-03 09:45:15 +08:00 committed by fanpengcheng
parent 2f9174e48c
commit 1067a0fe95

View File

@ -34,6 +34,8 @@
// 保证以下数据更新顺序(大环节顺序不要变,内部还有一些小的调整,比如任务栏显示区域更新的时候,里面内容的布局方向可能也要更新...)
// Monitor数据屏幕是否可停靠更新监视唤醒区域更新任务栏显示区域更新拖拽区域更新通知后端接口通知窗管
// TODO 后续需要去除使用qt的接口获取屏幕信息统一使用从com.deepin.daemon.Display服务中给定的数据
MultiScreenWorker::MultiScreenWorker(QWidget *parent, DWindowManagerHelper *helper)
: QObject(nullptr)
, m_parent(parent)
@ -481,6 +483,11 @@ void MultiScreenWorker::onHideStateChanged()
// 检查当前屏幕的当前位置是否允许显示,不允许需要更新显示信息(这里应该在函数外部就处理好,不应该走到这里)
Monitor *currentMonitor = monitorByName(validMonitorList(m_monitorInfo), m_ds.current());
if (!currentMonitor) {
qDebug() << "cannot find monitor by name: " << m_ds.current();
return;
}
if (!currentMonitor->dockPosition().docked(m_position)) {
Q_ASSERT(false);
m_ds.updateDockedScreen(getValidScreen(m_position));
@ -1261,8 +1268,10 @@ QString MultiScreenWorker::getValidScreen(const Position &pos)
}
Monitor *primaryMonitor = monitorByName(validMonitorList(m_monitorInfo), primaryName);
Q_ASSERT(primaryMonitor);
if (!primaryMonitor) {
qDebug() << "cannot find monitor by name: " << primaryName;
return QString();
}
// 优先选用主屏显示
if (primaryMonitor->dockPosition().docked(pos))
@ -1283,6 +1292,10 @@ void MultiScreenWorker::autosetDockScreen()
QList<Monitor *> monitorList = validMonitorList(m_monitorInfo);
if (monitorList.size() == 2) {
Monitor *primaryMonitor = monitorByName(validMonitorList(m_monitorInfo), m_ds.primary());
if (!primaryMonitor) {
qDebug() << "cannot find monitor by name: " << m_ds.primary();
return;
}
if (!primaryMonitor->dockPosition().docked(position())) {
foreach (auto monitor, monitorList) {
if (monitor->name() != m_ds.current()