Releases: digitaltrails/vdu_controls
v2.1.2 Clock-Watcher
The main feature in this release is a new implementation of Preset scheduling. The new implementation accounts for PC-sleep/hibernation. The previous implementation relied on Qt QTimer objects, QTimer "countdowns" are suspended during PC-sleep/hibernation, so QTimers cannot guarantee that they will countdown to a specific wall-clock time. The new implementation wakes up once a minute and triggers due or overdue Presets based on the wall-clock time.
- Replace the Preset-scheduler with an implementation that remains accurate after PC-sleep/hibernation.
- Fix the day-rollover which was scheduling for the wrong day if triggered at 12:59:59.
- When performing a set-vcp, don't increment the NVRAM write count if the VDU doesn't respond.
- When reconfiguring VDU controllers, discard pending VDU VCP changes from previous controllers.
- Eliminate a potential for deadlock when handling change-events from ddcutil-service.
- Better handle ddcutil-service unexpected event types (don't raise an error dialog).
- The main window height will now automatically resize to accommodate the number of controls present.
- Toggling lux brightness-interpolation now immediately updates the profile-plot to reflect the change.
- Fix the Lux Dialog, it was turning off interpolation when first constructed.
v2.1.1 - Quick fixes and improvements.
A collection of quick fixes and cleanups:
- Removed --dbus-signals-enabled. DBus signals are now always enabled when --dbus-client is enabled.
- Fix the active Preset icon display which was sometimes incorrect after DPMS-sleep or errors.
- Fix a code regression when handling non-DDC-capable VDUs (fix status=-3020 exception).
- The About-Window now includes counts of set_vcp/NVRAM-writes for each VDU.
- Hovering over a VDU-name in the main-window reveals the write count for that VDU.
- Minor changes to reduce unnecessary work and improve log messages.
The new write-counts may help with designing schedules or lux-profiles that minimise writes.
v2.1.0 - Frugal Writes, the sequel
This release includes more enhancements focused around NVRAM durability or lack thereof:
- Preset transitions have been deprecated. All presets are now restored instantly no
matter how they have been set to transition. The Preset-Dialog controls for assigning
transitions have been hidden. All transition related code may be removed in a future
version, please contact me or comment on issue #93 if you prefer transitions to be retained. - Transitions and related controls can be re-enabled by disabling
protect-nvram
in the Settings-Dialog. - To avoid unnecessary updates, preset restoration now queries the VDU's existing
values. This may slow down preset restoration. - Lux-metered auto adjustment has been defaulted to 10 minute intervals (up from 5).
- Color-Preset (VCP code 0x14) has been added to the list of standard controls.
- Added a VDU Initializer-Preset feature to provide a replacement for dead NVRAM.
This also provides a way to restore settings not persisted in VDU NVRAM. A VDU's initializer-preset is
automatically run if the target VDU is present at startup or is subsequently detected.
Any preset that has a name that matches a VDU model and serial-number will be treated
as an Initializer-Preset. - The Preset-Dialog now includes a tool-button to the right of the preset-name entry
that will create a VDU specific Initializer-Preset. See below:
v2.0.4 - Tiny Tweeks
- The About-Dialog now refreshes the ddcutil version info on each invocation.
- Increased dbus timeout to 10 seconds (in case numerous VDUs or errors slow down VDU detection).
- Dynamically enable a scroll-area when the main-panel exceeds the available screen height.
v2.0.3 - Frugal Writes
- Reduce the number of writes to VDU NVRAM by sliders, spinners, and ambient brightness adjustments.
- Slider and spin-box controls now only update the VDU when adjustments become slow or stop (when
the control value remains constant for 0.5 seconds). - Spin-Boxes now select the entire text on focus in (enables easier overtyping and decreases VDU updates).
- Ambient lighting initiated changes in brightness of up to 20% are applied without any transitional
steps (plus the existing code ignores updates of less than 10%). - Set the default ambient-light brightness adjustment-interval to 5 minutes.
- Slider and spin-box controls now only update the VDU when adjustments become slow or stop (when
- React to DPMS awake signal from ddcutil-service by re-assessing ambient brightness.
- Simplified locking and conformed to a lock hierarchy to avoid deadlocks.
This release is in part a response to the announced future direction for KDE6 PowerDevil where VDU DDC updates are to be minimised out of concern for VDU life span. I'm unsure how seriously to regard these concerns, but I've put in place several measures to reduce DDC updates.
v2.0.2 - Autumn rollup
Version 2.0.2 rolls up fixes for recent issues (both bugs and enhancement requests).
- Added a refresh annotation suffix for use with VCP-codes which cause multiple changes.
- Make manual adjustment of the ambient Light Level more accurate and responsive.
- When using ddcutil-server, values change as sliders are dragged (rather than only on release).
- Fix exception on monitors that return invalid/unexpected combo-box VCP values.
- Fix exception on monitors with blank VCP value descriptions.
- When refresh is pressed, only auto adjust ambient brightness if auto-brightness is enabled.
- Don't automatically refresh on error, eliminate popup dialog loops.
- Eliminate deadlocks when exceptions occur.
- Cleanup the initialisation of the ddcutil-service connection.
- Add more caveats and limitations to the documentation.
- Fix manual ambient light slider when light meter is uninitialized.
- Promote Simple-Non-Continuous values whose metadata exceeds one-byte to two-byte Complex-NC.
v2.0.1 - Ambient light and travelling by Bus rollup
Version 2.0.1 contains addresses issues raised subsequent to Release 2.0.0:
- Fix D-Bus client code for python versions prior to 3.11.
- Fix infinite-loop when altering an existing FIFO lux-meter in the Lux-Dialog.
- Fix the refresh of the LuxDialog meter-readout/plot when changing to a new meter.
- Apply context-aware defaults to the LuxDialog device file-chooser.
- Improve/fix the handling of displays/laptop-displays that may be detected but lack proper DDC.
- Force the file-picker to always show devices and FIFOs - it wasn't showing then on some desktops.
- Add some notes to the help concerning ddcutil-service, ddcutil-command.
v2.0.0 - Ambient light and travelling by Bus
Ambient-Light-Level slider
I've added an Ambient-Light-Level slider - one slider for adjusting brightness on all displays.
This slider works with the existing Lux Options that allow you to define a ambient-light to brightness mapping for each display (the existing lux options need to be enabled).
I've added an immediate-lighting-check button (stopwatch icon in bottom toolbar) and a corresponding context-menu item (when lux options are enabled).
D-Bus Interface for up to 10x faster response times.
I've written a related package: ddcutil-service, a D-Bus wrapper for libddcutil . If ddcutil-service is available, vdu_controls
will use it instead of the ddcutil
command.
Because the service stays running and initialized it can be up to ten times faster than issuing ddcutil commands. Control-sliders are far more responsive and act more smoothly. Restoring Presets and refreshing the interface are also much faster. The service is implemented in C which eliminates the previous shell+exec overheads incurred when running ddcutil commands.
The service provides some event detection capabilities. Depending on hardware, drivers and cabling, vdu_controls
may now receive signals from the service for hotplug and DPMS events. Exactly which events are supported is subject to GPU, GPU driver limitations (AMD generally works out of the box). At a minimum, the service can fallback to polled hotplug detection (defaulting to a 30 second poll, minimum 10 seconds, so change detection by polling is not exactly swift).
Adding the option for using the new ddcutil-service is the main reason for the version bump to 2.0. The existing code had to be refactored to support options for both the ddcutil-service and the existing ddcutil command. The the option to use DDC via the ddcutil command will remain supported, the option may be reviewed if the ddcutil-service becomes universally available.
More tweaks and icons
As usual there have been a number tweaks to the user-interface and internals, plus I've added a few more icons for use with presets.
Notes on Packaging for Distributions.
See issue #71
Blending in
This release includes enhancements that alter vdu_controls' appearance to better match your desktop:
Proportional sizing of graphical elements
Windows, icons and other graphical elements are now sized relative to your default-font height (Issue #63 and #65). In doing so, the sizing of elements will also automatically adjust for your display's DPI and take account of any high-DPI scaling.
This change obsoletes the adjust-for-dpi setting introduced in v1.12.0 which didn't properly account for scaling or 2K displays.
Options for tray icons
Two settings have been added to configure the tray-icon for monochrome desktop trays (Issue #66):
- monochrome-tray switches to a monochrome theme defaulting to a light on dark icon.
- mono-light-tray is a second switch that changes the icon to dark on light (monochrome-tray is the master switch, so both have to be enabled).
Sample captures of the tray icon options:
<= monochrome-tray (KDE Breeze Dark Theme)
<= monochrome-tray + mono-light-tray (KDE Breeze Twilight Theme)
<= default tray icon (KDE Breeze Theme)
The tray theming is controlled manually to accommodate different combinations of dark/light tray/desktop theming. For example, the KDE Plasma Breeze Dark theme is dark-desktop/dark-tray, where as the KDE Plasma Breeze Twilight is light-desktop/dark-tray (automatically detecting a tray's theme in portable manner proved intractable).
When Preset-icons are overlaid onto the tray, they are altered to match. In the sample captures above, the cloud-icon is altered to match the tray-icon. (This applies SVG icons only, and only if they are drawn in black/0x000000 or the breeze dark-tone/0x232629.)
To accommodate unusual tray themes, it's now possible to override the normal tray-icon by placing an appropriate SVG file in $HOME/.config/vdu_controls/tray_icon.svg
.
Other changes:
- If a Preset has been set to transition slowly, when it's transitioning, the main UI controls and sliders now remain unlocked and can be moved to override and stop the transition.
- Obsolete settings persisted to file will no longer appear as zombie-settings in the UI.
- There has been considerable internal refactoring of handing of Settings and command line arguments (but no changes in functionally).
F10 for everyone
- Version1.12.0
- Added an F10_key context menu shortcut to all application windows (KDE accessibility standard).
- Set icon and pixmap sizes appropriately for Normal and High DPI (controlled by adjust-for-dpi) (issue #63).
- Icon/device-chooser-dialog: init-time reduced from 30 to 5 seconds for users with large home folders (issue #61).
- Improvements/Fixes to the vlux_meter.py sample-script and the related vdu_controls FIFO reader.
- Improved visibility of the app-icon's preset-transitioning indicator and auto-lux indicator.
- Increased contrast for generated text preset-abbreviation icons.
- Encode translations in plain text rather than escaped XML (for easier editing).