Skip to content

Commit e6c167a

Browse files
ssk-whdeepin-bot[bot]
authored andcommitted
fix: 修复主屏数据错误的问题
主屏数据错误导致任务栏显示出错 Log: 修复主屏数据错误的问题 Influence: 任务栏显示到错误的主屏 Bug: https://pms.uniontech.com/bug-view-161077.html Change-Id: Icd6e1e295c523c93e1ae59f31727d5657e5354c7
1 parent a512e81 commit e6c167a

2 files changed

Lines changed: 51 additions & 15 deletions

File tree

display/manager.go

Lines changed: 46 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ const (
7373
gsKeyRateFilter = "rate-filter"
7474
//gsKeyPrimary = "primary"
7575
gsXSettingsPrimaryName = "primary-monitor-name"
76+
gsXSettingsPrimaryRect = "primary-monitor-rect"
7677
gsKeyCustomMode = "current-custom-mode"
7778
gsKeyColorTemperatureMode = "color-temperature-mode"
7879
gsKeyColorTemperatureManual = "color-temperature-manual"
@@ -1002,45 +1003,75 @@ func (m *Manager) init() {
10021003
}
10031004

10041005
go func() {
1005-
// 每次设置过主屏后,都将此值同步到xsettings
1006+
// 每次设置过主屏和其rect区域后,都将此值同步到xsettings
10061007
bus, _ := dbus.SessionBus()
10071008
display := sessiondisplay.NewDisplay(bus)
10081009
sigLoop := dbusutil.NewSignalLoop(bus, 10)
10091010
sigLoop.Start()
10101011
display.InitSignalExt(sigLoop, true)
1012+
10111013
err = display.Primary().ConnectChanged(func(hasValue bool, primary string) {
10121014
if !hasValue {
10131015
return
10141016
}
10151017

1016-
// 保持主屏数据和xsettings同步
1017-
for _, key := range m.xSettingsGs.ListKeys() {
1018-
if gsXSettingsPrimaryName == key {
1019-
oldPrimary := m.xSettingsGs.GetString(gsXSettingsPrimaryName)
1020-
if oldPrimary != primary {
1021-
m.xSettingsGs.SetString(gsXSettingsPrimaryName, primary)
1022-
}
1023-
return
1018+
// 保持主屏Name和xsettings同步
1019+
if m.xSettingsGs.GetSchema().HasKey(gsXSettingsPrimaryName) {
1020+
oldPrimary := m.xSettingsGs.GetString(gsXSettingsPrimaryName)
1021+
if oldPrimary != primary {
1022+
m.xSettingsGs.SetString(gsXSettingsPrimaryName, primary)
10241023
}
1024+
return
10251025
}
10261026
})
10271027
if err != nil {
10281028
logger.Warning("connect to `Primary` property changed failed:", err)
10291029
}
10301030

1031-
// 启动后先同步一次
1032-
for _, key := range m.xSettingsGs.ListKeys() {
1033-
if gsXSettingsPrimaryName == key {
1034-
oldPrimary := m.xSettingsGs.GetString(gsXSettingsPrimaryName)
1035-
if oldPrimary != m.Primary {
1036-
m.xSettingsGs.SetString(gsXSettingsPrimaryName, m.Primary)
1031+
err = display.PrimaryRect().ConnectChanged(func(hasValue bool, rect sessiondisplay.Rectangle) {
1032+
if !hasValue {
1033+
return
1034+
}
1035+
1036+
// 保持主屏Rect和xsettings同步
1037+
if m.xSettingsGs.GetSchema().HasKey(gsXSettingsPrimaryRect) {
1038+
oldRect:= m.xSettingsGs.GetString(gsXSettingsPrimaryRect)
1039+
if oldRect != rect2String(rect) {
1040+
m.xSettingsGs.SetString(gsXSettingsPrimaryRect, rect2String(rect))
10371041
}
10381042
return
10391043
}
1044+
})
1045+
if err != nil {
1046+
logger.Warning("connect to `PrimaryRect` property changed failed:", err)
1047+
}
1048+
1049+
// 启动后先同步一次
1050+
if m.xSettingsGs.GetSchema().HasKey(gsXSettingsPrimaryName) {
1051+
oldPrimary := m.xSettingsGs.GetString(gsXSettingsPrimaryName)
1052+
if oldPrimary != m.Primary {
1053+
m.xSettingsGs.SetString(gsXSettingsPrimaryName, m.Primary)
1054+
}
1055+
return
1056+
}
1057+
if m.xSettingsGs.GetSchema().HasKey(gsXSettingsPrimaryRect) {
1058+
oldRect := m.xSettingsGs.GetString(gsXSettingsPrimaryRect)
1059+
if oldRect != xrect2String(m.PrimaryRect) {
1060+
m.xSettingsGs.SetString(gsXSettingsPrimaryRect, xrect2String(m.PrimaryRect))
1061+
}
1062+
return
10401063
}
10411064
}()
10421065
}
10431066

1067+
func xrect2String(rect x.Rectangle) string {
1068+
return fmt.Sprintf("%d-%d-%d-%d", rect.X, rect.Y, rect.Width, rect.Height)
1069+
}
1070+
1071+
func rect2String(rect sessiondisplay.Rectangle) string {
1072+
return fmt.Sprintf("%d-%d-%d-%d", rect.X, rect.Y, rect.Width, rect.Height)
1073+
}
1074+
10441075
// calcRecommendedScaleFactor 计算推荐的缩放比
10451076
func calcRecommendedScaleFactor(widthPx, heightPx, widthMm, heightMm float64) float64 {
10461077
if widthMm == 0 || heightMm == 0 {

xsettings/xsettings_info.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,11 @@ var gsInfos = typeGSKeyInfos{
284284
gsType: gsKeyTypeString,
285285
xsKey: "Gdk/PrimaryMonitorName",
286286
},
287+
{
288+
gsKey: "primary-monitor-rect",
289+
gsType: gsKeyTypeString,
290+
xsKey: "DDE/PrimaryMonitorRect",
291+
},
287292
}
288293

289294
var settingTypeColorVar = settingTypeColor

0 commit comments

Comments
 (0)