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"
)&

View file

@ -1,4 +1,4 @@
(defwindow alarms
(defwindow alarms [revealer-duration]
:monitor 0
:geometry (geometry :x 0
; Same as sway gaps (we cannot use EWW_SCALE here)
@ -13,7 +13,7 @@
(revealer
:transition "slideleft"
:reveal "${alarms-visible}"
:duration "300ms"
:duration "${revealer-duration}"
(eventbox
:onmiddleclick "${eww-scripts}/manage hide alarms"
:halign "fill"

View file

@ -1,4 +1,4 @@
(defwindow microphone-indicator
(defwindow microphone-indicator [revealer-duration]
:monitor 0
:geometry (geometry :x 0
; We cannot use get_env(EWW_SCALE) here
@ -9,7 +9,7 @@
(revealer
:transition "slidedown"
:reveal "${microphone-indicator-visible}"
:duration "200ms"
:duration "${revealer-duration}"
(eventbox :cursor "hand2"
:onclick "pactl set-source-mute @DEFAULT_SOURCE@ toggle"
:onmiddleclick "${eww-scripts}/manage hide microphone-indicator &"

View file

@ -1,4 +1,4 @@
(defwindow mode-indicator
(defwindow mode-indicator [revealer-duration]
:monitor 0
:geometry (geometry :x 0
:y 0
@ -12,7 +12,7 @@
(revealer
:transition "slidedown"
:reveal "${mode-indicator-visible}"
:duration "300ms"
:duration "${revealer-duration}"
(eventbox
; On click, cancel active binding mode and hide widget
:onclick "swaymsg -q mode default & ${eww-scripts}/manage hide mode-indicator &"

View file

@ -1,4 +1,4 @@
(defwindow networks
(defwindow networks [revealer-duration]
:monitor 0
:geometry (geometry :x 0
; Same as sway gaps (we cannot use EWW_SCALE here)
@ -13,7 +13,7 @@
(revealer
:transition "slideleft"
:reveal "${networks-visible}"
:duration "300ms"
:duration "${revealer-duration}"
(eventbox
:onmiddleclick "${eww-scripts}/manage hide networks"
:halign "fill"

View file

@ -1,4 +1,4 @@
(defwindow powermenu [is-secondary]
(defwindow powermenu [is-secondary revealer-duration]
:monitor 0
:geometry (geometry
:x 0
@ -21,7 +21,7 @@
(revealer
:transition "crossfade"
:reveal "${powermenu-visible}"
:duration "300ms"
:duration "${revealer-duration}"
(eventbox
:halign "fill"
:valign "fill"

View file

@ -1,4 +1,4 @@
(defwindow sidebar
(defwindow sidebar [revealer-duration]
:monitor 0
:geometry (geometry :x 0
:y 0
@ -11,11 +11,9 @@
:exclusive false
:focusable false
(revealer
; Would prefer a slideright animation here but it does not work
; https://github.com/elkowar/eww/issues/1107
:transition "slideright"
:reveal "${sidebar-visible}"
:duration "300ms"
:duration "${revealer-duration}"
(eventbox
:width "${300 * get_env("EWW_SCALE")}"
:onmiddleclick "${eww-scripts}/manage hide sidebar &"

View file

@ -1,4 +1,4 @@
(defwindow split-indicator
(defwindow split-indicator [revealer-duration]
:monitor 0
:geometry (geometry :x 0
:y 0
@ -8,7 +8,7 @@
(revealer
:transition "crossfade"
:reveal "${split-indicator-visible}"
:duration "300ms"
:duration "${revealer-duration}"
(eventbox
:onclick "${eww-scripts}/manage hide split-indicator &"
:onmiddleclick "${eww-scripts}/manage hide split-indicator &"