From 587e3822d90d458dfb7b5b2403f1bd117a1844d2 Mon Sep 17 00:00:00 2001 From: chenbin Date: Mon, 10 Jan 2022 09:48:41 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BB=BB=E5=8A=A1=E6=A0=8F=E4=BB=85?= =?UTF-8?q?=E4=B8=BB=E5=B1=8F=E6=98=BE=E7=A4=BA=E5=85=B3=E8=81=94=E4=BF=A1?= =?UTF-8?q?=E5=8F=B7=E6=94=B9=E7=94=A8=E5=90=8E=E7=AB=AF=E7=9A=84=E4=BF=A1?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit wayland下改变主屏后不会发出QApplication::primaryScreenChanged信号,改用后端PrimaryChanged信号 Log: 修复wayland下任务栏设置仅主屏显示后切换主屏任务栏未跟随显示的问题 Influence: 切换主屏后,任务栏显示 Bug: https://pms.uniontech.com/bug-view-129559.html Change-Id: I70e4d71916326fa6ff203b64e337075ad87bec8c --- frame/display/displaymanager.cpp | 10 ++++++++-- frame/display/displaymanager.h | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/frame/display/displaymanager.cpp b/frame/display/displaymanager.cpp index a5d43c299..926789bb5 100644 --- a/frame/display/displaymanager.cpp +++ b/frame/display/displaymanager.cpp @@ -31,9 +31,15 @@ DisplayManager::DisplayManager(QObject *parent) : QObject(parent) , m_gsettings(Utils::SettingsPtr("com.deepin.dde.dock.mainwindow", "/com/deepin/dde/dock/mainwindow/", this)) , m_onlyInPrimary(Utils::SettingValue("com.deepin.dde.dock.mainwindow", "/com/deepin/dde/dock/mainwindow/", "onlyShowPrimary", false).toBool()) + , m_displayInter(nullptr) { connect(qApp, &QApplication::primaryScreenChanged, this, &DisplayManager::primaryScreenChanged); - connect(qApp, &QApplication::primaryScreenChanged, this, &DisplayManager::dockInfoChanged); + if (Utils::IS_WAYLAND_DISPLAY) { + m_displayInter = new DisplayInter("com.deepin.daemon.Display", "/com/deepin/daemon/Display",QDBusConnection::sessionBus(), this); + connect(m_displayInter, &__Display::PrimaryChanged, this, &DisplayManager::dockInfoChanged); + } else { + connect(qApp, &QApplication::primaryScreenChanged, this, &DisplayManager::dockInfoChanged); + } connect(qApp, &QGuiApplication::screenAdded, this, &DisplayManager::screenCountChanged); connect(qApp, &QGuiApplication::screenRemoved, this, &DisplayManager::screenCountChanged); @@ -166,7 +172,7 @@ void DisplayManager::updateScreenDockInfo() // 仅显示在主屏时的处理 if (m_onlyInPrimary) { for (auto s : m_screens) { - if (s != qApp->primaryScreen()) { + if (Utils::IS_WAYLAND_DISPLAY ? !s->model().contains(m_displayInter->primary()) : s != qApp->primaryScreen()) { QMap map; map.insert(Position::Top, false); map.insert(Position::Bottom, false); diff --git a/frame/display/displaymanager.h b/frame/display/displaymanager.h index 99673dc15..7cf4d1d18 100644 --- a/frame/display/displaymanager.h +++ b/frame/display/displaymanager.h @@ -68,6 +68,7 @@ private: QMap> m_screenPositionMap; const QGSettings *m_gsettings; // 多屏配置控制 bool m_onlyInPrimary; + DisplayInter *m_displayInter; }; #endif // DISPLAYMANAGER_H