nlve/tests/buttonclicks.sh

56 lines
2.7 KiB
Bash
Raw Permalink Normal View History

Кнопки внизу: подсказка не перехватывает щелчок, щелчки не теряются Две беды у всех кнопок нижней полосы. Всплывающая подсказка появлялась прямо поверх кнопки, о которой рассказывает, и перехватывала щелчок: нажать кнопку было нельзя. Подсказка переехала в строку состояния — она в той же полосе, ничего не закрывает и меняется сразу после щелчка, не дожидаясь нового наведения. Строка состояния теперь занимает всё свободное место справа, пока рядом не показан ход работы, а самые длинные подсказки укорочены: раньше их обрезало на полуслове. Второй щелчок подряд виджетсет отдавал как двойной, и кнопка его не видела: быстрая очередь щелчков срабатывала через раз. У кнопки убран csDoubleClicks, а на случай, если двойной всё же дойдёт, он считается за обычный. Проверено: tests/lfmcheck, раздел «Кнопки нижней панели», и tests/buttonclicks.sh мышью на невидимом экране — по всем шести переключателям очереди из 1-5 щелчков отрабатываются полностью.
2026-09-30 15:44:29 +03:00
#!/bin/sh
# Проверка того, что каждый быстрый щелчок по кнопке нижней полосы
# доходит до неё.
#
# Кнопки там — переключатели: щелчок меняет вид полосы. Значит, N щелчков
# подряд должны дать N переключений, и снимки с одинаковой чётностью
# числа щелчков обязаны совпасть, с разной — разойтись. Раньше второй
# щелчок подряд приходил как двойной и пропадал.
#
# Запуск (редактор уже должен идти на невидимом экране :99):
# tests/buttonclicks.sh <окно> <x> <y>
# где окно — из `DISPLAY=:99 xdotool search --name nlve`, а x и y —
# точка внутри кнопки.
set -e
cd "$(dirname "$0")/.."
WIN=$1
X=$2
Y=$3
DISP=${DISP:-:99}
SHOT=${SHOT:-test/кадры-кнопок}
rm -rf "$SHOT"; mkdir -p "$SHOT"
# Снимается низ окна: там и полоса сообщений, и сами кнопки.
H=$(DISPLAY=$DISP xwininfo -id "$WIN" | awk '/Height:/ {print $2}')
W=$(DISPLAY=$DISP xwininfo -id "$WIN" | awk '/Width:/ {print $2}')
CROP="${W}x200+0+$((H - 200))"
# Мышь уводится с кнопки перед снимком: под курсором подсказка идёт в
# строку состояния, и её текст сам по себе отличал бы снимки.
snap() {
DISPLAY=$DISP xdotool mousemove $((W / 2)) $((H / 3))
sleep 0.4
DISPLAY=$DISP import -window "$WIN" -crop "$CROP" +repage "$SHOT/$1.png"
}
same() { compare -metric AE "$SHOT/$1.png" "$SHOT/$2.png" null: 2>&1 | cut -d' ' -f1; }
snap base
TOTAL=0
for N in 1 2 3 4 5; do
I=0
while [ $I -lt $N ]; do
DISPLAY=$DISP xdotool mousemove "$X" "$Y" click 1
I=$((I + 1))
sleep 0.12
done
TOTAL=$((TOTAL + N))
sleep 1.2
snap "после$TOTAL"
echo "залпом $N, всего щелчков $TOTAL: отличий от исходной $(same base "после$TOTAL")"
done
# Полоса сообщений прирастает строками сама по себе, поэтому сверяемся не
# с исходной картинкой, а снимками между собой.
echo " 3 и 15 щелчков (оба нечётные, должны совпасть): $(same после3 после15)"
echo " 6 и 10 щелчков (оба чётные, должны совпасть): $(same после6 после10)"
echo " 6 и 15 щелчков (чётное и нечётное, должны разойтись): $(same после6 после15)"