Add configurable Plasma panel scroll and click actions
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
#!/usr/bin/env bash
|
||||
# SPDX-License-Identifier: MIT
|
||||
# Run in a Fedora build environment with the application's dependencies.
|
||||
set -euo pipefail
|
||||
if (( $# != 2 )); then
|
||||
printf 'Usage: %s OLD_RPM NEW_RPM\n' "$0" >&2
|
||||
exit 2
|
||||
fi
|
||||
old_rpm=$(realpath "$1")
|
||||
new_rpm=$(realpath "$2")
|
||||
work=$(mktemp -d)
|
||||
trap 'rm -rf -- "$work"' EXIT
|
||||
mkdir -p "$work/root" "$work/runtime"
|
||||
export XDG_CONFIG_HOME="$work/config" XDG_CACHE_HOME="$work/cache"
|
||||
export XDG_DATA_HOME="$work/data" XDG_DATA_DIRS="$work/root/usr/share:/usr/share"
|
||||
export XDG_RUNTIME_DIR="$work/runtime"
|
||||
export QT_QPA_PLATFORM=offscreen QT_QUICK_BACKEND=software
|
||||
unset QML_DISABLE_DISK_CACHE QML_FORCE_DISK_CACHE QML_DISK_CACHE_PATH QML_DISK_CACHE
|
||||
|
||||
launch_settings() {
|
||||
if timeout 3s dbus-run-session -- "$work/root/usr/bin/plasma-panel-actions" --settings > "$work/launch.log" 2>&1; then
|
||||
printf 'Settings exited before the test timeout.\n' >&2
|
||||
cat "$work/launch.log" >&2
|
||||
exit 1
|
||||
else
|
||||
status=$?
|
||||
if (( status != 124 )); then
|
||||
cat "$work/launch.log" >&2
|
||||
exit "$status"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
cache_for() {
|
||||
for file in "$XDG_CACHE_HOME"/plasma-panel-actions/qmlcache/*.qmlc; do
|
||||
[[ -f $file ]] || continue
|
||||
if strings -el "$file" | grep -Fx "file://$1" > /dev/null; then
|
||||
printf '%s\n' "$file"
|
||||
return
|
||||
fi
|
||||
done
|
||||
printf 'No QML cache was generated for %s\n' "$1" >&2
|
||||
return 1
|
||||
}
|
||||
|
||||
rpm2cpio "$old_rpm" | (cd "$work/root" && cpio -idm --quiet)
|
||||
launch_settings
|
||||
old_ui="$work/root/usr/share/plasma-panel-actions/ConfigGeneral.qml"
|
||||
old_cache=$(cache_for "$old_ui")
|
||||
old_checksum=$(sha256sum "$old_cache")
|
||||
|
||||
# Extract over the same location and keep the old cache intact. Changing
|
||||
# the staging directory would hide the cache-collision regression.
|
||||
rpm2cpio "$new_rpm" | (cd "$work/root" && cpio -idmu --quiet)
|
||||
new_ui="$work/root$(rpm -qpl "$new_rpm" | grep '/ConfigGeneral.qml$')"
|
||||
[[ $(stat -c %Y "$old_ui") == "$(stat -c %Y "$new_ui")" ]]
|
||||
launch_settings
|
||||
new_cache=$(cache_for "$new_ui")
|
||||
[[ $new_cache != "$old_cache" ]]
|
||||
[[ $(sha256sum "$old_cache") == "$old_checksum" ]]
|
||||
strings -el "$new_cache" | grep -Fx twinFormLayouts > /dev/null
|
||||
printf 'PASS: updated settings loaded with identical source timestamps and the old cache intact.\n'
|
||||
Reference in New Issue
Block a user