mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-10-26 13:07:49 -04:00
* island: open media and the power menu in one step, fix dash edits - Clicking media on the home face opens the player. Closing a sheet goes back to the face the user picked, and an opt-in setting switches to media when playback starts. - The power menu can open in the island (Super+X, the dock button), with its own route row in the island settings. - An island collapses when another popout opens on its screen. - The widgets page hides the center section the island replaces. - Dragging or resizing a dashboard card no longer blanks the overview: Qt hands the committed list over as a non-array, which read as empty. - The island blur region stays inside the rounded fill. * fix(island): address review feedback on switching faces by mouse Opening the player with one click removed the only mouse path from the home face to the media face. A right-click on the collapsed island now swaps between the two while media is available. The swap resizes the island under the pointer, so hover-open stays off until the pointer leaves. Without a face to swap to, the press is not accepted and reaches the bar's own right-click action as before.
Shell tests
make test-qml runs three suites: logic (the *.test.mjs files here under node --test), qt (qmltestrunner over unit/) and lock (qmltestrunner over lock/ with the mocks in lock/mocks). It needs Python 3, Node.js, Lua, make and the Qt 6 qmltestrunner. The Nix development shell includes them.
The qml-tests pre-commit hook runs the same suites when shell code, tests or their configuration changes. CI runs that hook in the QML tests job.
prek run qml-tests --all-files
python3 quickshell/tests/run-qml.py logic
python3 quickshell/tests/run-qml.py qt
python3 quickshell/tests/run-qml.py lock
Set QMLTESTRUNNER to override the Qt 6 executable.
Writing a test
- A test exercises a
.jsmodule, a function of aServices/orCommon/singleton, or an IPC handler. Nothing underModules/,Modals/orWidgets/is read, sliced or mocked. Those files change with every UI tweak, and tests over them only ever failed on the tweak. - No compositor, display server, running shell, timers or waits. Each suite finishes in well under a second.
- A test must fail on the broken code. No defaults, no tables asserted against a copy of themselves, no "it instantiates".
- When a test slices QML source, the mock has to honour the arguments the function passes. A mock that ignores them passes on the old code and fails on an equivalent rewrite.