eww: Set window revealer duration inside manage script only

Use window arguments to pass revealer duration to eww.
This commit is contained in:
elenapan 2025-04-01 17:05:31 +03:00
parent 61ba0da028
commit ea10a0e5b2
8 changed files with 34 additions and 30 deletions

View file

@ -37,16 +37,15 @@ secondary_monitors=(
declare -A overlay_widgets
overlay_widgets[powermenu]=true
# How long to wait for the revealer animation to complete. This should be
# match the revealer delay in the respective *.yuck files.
declare -A revealer_delay
revealer_delay[sidebar]=0.3
revealer_delay[powermenu]=0.3
revealer_delay[split-indicator]=0.3
revealer_delay[mode-indicator]=0.3
revealer_delay[microphone-indicator]=0.2
revealer_delay[networks]=0.3
revealer_delay[alarms]=0.3
# How long to wait for the revealer animation to complete (in milliseconds).
declare -A revealer_duration
revealer_duration[sidebar]=300
revealer_duration[powermenu]=300
revealer_duration[split-indicator]=300
revealer_duration[mode-indicator]=300
revealer_duration[microphone-indicator]=200
revealer_duration[networks]=300
revealer_duration[alarms]=300
# Only one of these should be visible at a time
mutually_exclusive_widgets=(
@ -98,6 +97,11 @@ _is_secondary_monitor() {
grep -q "^${mon}$" <<< "$(printf '%s\n' "${secondary_monitors[@]}")"
}
_get_revealer_duration_seconds() {
widget_name="$1"
awk "BEGIN {printf \"%.3f\",${revealer_duration[$widget_name]:-0}/1000}"
}
_open() {
widget_name="$1"
@ -110,6 +114,10 @@ _open() {
done
fi
if [[ -v revealer_duration["$widget_name"] ]]; then
extra_args+=" --arg revealer-duration=${revealer_duration[$widget_name]}ms"
fi
# shellcheck disable=2086
eww open-many "$widget_name" $extra_args >/dev/null
}
@ -215,11 +223,10 @@ _show() {
_hide() {
widget_name="$1"
delay="${revealer_delay[$widget_name]:-0}" # default delay is 0
_pre_hide "$widget_name"
_mode_disable "$widget_name"
eww update "${widget_name}"-visible=false
sleep "$delay"
sleep "$(_get_revealer_duration_seconds "$widget_name")"
_close "$widget_name"
_post_hide "$widget_name"
}
@ -251,7 +258,6 @@ hide_all_except() {
for widget in "${mutually_exclusive_widgets[@]}"; do
if [[ ! "$widget" == "$widget_except" ]] && grep -e "^${widget}:" >/dev/null <<< "$active_windows"; then
delay="${revealer_delay[$widget]:-0}" # default delay is 0
# We do not call the `hide` helper because we do not necessarily
# want to mess with the sway modes.
# The widget to be activated will set its own mode through the
@ -272,7 +278,7 @@ hide_all_except() {
(
_pre_hide "$widget"
eww update "${widget}-visible"=false
sleep "$delay"
sleep "$(_get_revealer_duration_seconds "$widget_name")"
_close "$widget"
_post_hide "$widget"
)&