diff --git a/ryoku/shell/CHANGELOG.md b/ryoku/shell/CHANGELOG.md index 5f08410cf..1add6d0fa 100644 --- a/ryoku/shell/CHANGELOG.md +++ b/ryoku/shell/CHANGELOG.md @@ -1,6 +1,10 @@ # Changelog: ryoku/shell/ ## Unreleased +- **Opening Controls no longer makes the whole screen hitch.** With an external + monitor on DDC/CI, the panel read its brightness the moment it opened, and that + read stalled every display for a fraction of a second. It now reads a quarter + second after the panel appears, so the external brightness slider fills in a moment later. - **Windows reach the Shima dock again.** Under the Shima bar style the frame and the dock both reserved the dock's band, which left a dock-tall gap between windows and the dock. The frame's reservation is now the only one there. diff --git a/ryoku/shell/quickshell/shell/modules/sidebar/ControlsLevels.qml b/ryoku/shell/quickshell/shell/modules/sidebar/ControlsLevels.qml index 5974b8820..fd38276cc 100644 --- a/ryoku/shell/quickshell/shell/modules/sidebar/ControlsLevels.qml +++ b/ryoku/shell/quickshell/shell/modules/sidebar/ControlsLevels.qml @@ -45,8 +45,9 @@ Item { function syncActive(): void { if (root.active && root.showBrightness) { Devices.startProbes(root); - root.readExternalBrightness(); + externalReadDelay.restart(); } else { + externalReadDelay.stop(); root.volumeOpen = false; root.brightnessOpen = false; root.writeBrightness(); @@ -109,6 +110,15 @@ Item { } } + // A DDC/CI read that overlaps the panel's layers mapping stalled every + // output's frames for 45-200 ms on each open (seen on NVIDIA I2C); from + // 100 ms on there were none, so the live level is read after the map. + Timer { + id: externalReadDelay + interval: 250 + onTriggered: root.readExternalBrightness() + } + Timer { id: brightnessWrite interval: 90