Commit f68c4f6
fix: prevent dockHiddenSurfaceIds from being reset to empty
The commit refactors the save logic for tray sort order data to prevent
`dockHiddenSurfaceIds` from being accidentally cleared. Previously,
`onAvailableSurfacesChanged()` called `saveDataToDConfig()` which
saved all configuration values, including `dockHiddenSurfaceIds`, at a
point where other processes might be concurrently modifying this value,
leading to a race condition where it could be overwritten with empty
data.
The fix splits the monolithic `saveDataToDConfig()` into targeted
save methods: `saveSortOrderToDConfig()`, `saveHiddenIdsToDConfig()`,
`saveDockHiddenIdsToDConfig()`, and `saveCollapsedToDConfig()`. In
`onAvailableSurfacesChanged()`, only sort order and hidden IDs are
saved, deliberately excluding `dockHiddenSurfaceIds` to avoid the
race condition. The `dockHiddenSurfaceIds` is now only saved from
`setDockVisible()` via the new `saveDockHiddenIdsToDConfig()` method,
when the value is explicitly changed.
Influence:
1. Test tray plugin visibility toggling and verify
`dockHiddenSurfaceIds` persists correctly
2. Verify `hiddenSurfaceIds` and sort order still update properly on
surface changes
3. Test scenarios where multiple processes might modify dock
configuration simultaneously
4. Verify no data loss occurs when hiding/showing dock tray items
5. Test that collapsed state saves and loads correctly
fix: 修复 dockHiddenSurfaceIds 被意外重置为空的问题
本次重构了托盘排序数据的保存逻辑,防止 `dockHiddenSurfaceIds` 被意外清
空。之前 `onAvailableSurfacesChanged()` 调用 `saveDataToDConfig()` 会保
存所有配置值,包括 `dockHiddenSurfaceIds`,而此时其他进程可能正在并发修
改该值,导致竞态条件,使其被空数据覆盖。
修复方案将单一的 `saveDataToDConfig()` 拆分为针对性的保存方
法:`saveSortOrderToDConfig()`、`saveHiddenIdsToDConfig()`、
`saveDockHiddenIdsToDConfig()` 和 `saveCollapsedToDConfig()`。
在 `onAvailableSurfacesChanged()` 中,只保存排序和隐藏 ID,刻意排
除 `dockHiddenSurfaceIds` 以避免竞态条件。`dockHiddenSurfaceIds`
现在仅在通过 `setDockVisible()` 显式修改时,通过新增的
`saveDockHiddenIdsToDConfig()` 方法保存。
Influence:
1. 测试托盘插件的可见性切换,验证 `dockHiddenSurfaceIds` 是否持久化保存
2. 验证在 surface 变化时 `hiddenSurfaceIds` 和排序是否正常更新
3. 测试多个进程同时修改 dock 配置的场景
4. 验证显示/隐藏 dock 托盘项时数据不会丢失
5. 测试折叠状态的保存和加载是否正常
PMS:BUG-3631491 parent 889ea78 commit f68c4f6
2 files changed
Lines changed: 39 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
57 | 57 | | |
58 | 58 | | |
59 | 59 | | |
60 | | - | |
| 60 | + | |
61 | 61 | | |
62 | 62 | | |
63 | 63 | | |
| |||
223 | 223 | | |
224 | 224 | | |
225 | 225 | | |
| 226 | + | |
226 | 227 | | |
227 | 228 | | |
228 | 229 | | |
| |||
242 | 243 | | |
243 | 244 | | |
244 | 245 | | |
245 | | - | |
| 246 | + | |
246 | 247 | | |
247 | 248 | | |
248 | 249 | | |
| |||
547 | 548 | | |
548 | 549 | | |
549 | 550 | | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
| 555 | + | |
| 556 | + | |
| 557 | + | |
550 | 558 | | |
551 | 559 | | |
552 | 560 | | |
553 | 561 | | |
| 562 | + | |
| 563 | + | |
| 564 | + | |
| 565 | + | |
| 566 | + | |
| 567 | + | |
| 568 | + | |
| 569 | + | |
| 570 | + | |
| 571 | + | |
554 | 572 | | |
| 573 | + | |
| 574 | + | |
| 575 | + | |
| 576 | + | |
555 | 577 | | |
| 578 | + | |
| 579 | + | |
| 580 | + | |
| 581 | + | |
556 | 582 | | |
557 | 583 | | |
558 | 584 | | |
| |||
575 | 601 | | |
576 | 602 | | |
577 | 603 | | |
578 | | - | |
579 | | - | |
| 604 | + | |
| 605 | + | |
| 606 | + | |
| 607 | + | |
| 608 | + | |
| 609 | + | |
580 | 610 | | |
581 | 611 | | |
582 | 612 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
123 | 123 | | |
124 | 124 | | |
125 | 125 | | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
126 | 131 | | |
127 | 132 | | |
128 | 133 | | |
| |||
0 commit comments