nlve/tests/buttonclicks.sh
4aiman aba9bd57e4 Кнопки внизу: подсказка не перехватывает щелчок, щелчки не теряются
Две беды у всех кнопок нижней полосы.

Всплывающая подсказка появлялась прямо поверх кнопки, о которой
рассказывает, и перехватывала щелчок: нажать кнопку было нельзя.
Подсказка переехала в строку состояния — она в той же полосе, ничего не
закрывает и меняется сразу после щелчка, не дожидаясь нового наведения.
Строка состояния теперь занимает всё свободное место справа, пока рядом
не показан ход работы, а самые длинные подсказки укорочены: раньше их
обрезало на полуслове.

Второй щелчок подряд виджетсет отдавал как двойной, и кнопка его не
видела: быстрая очередь щелчков срабатывала через раз. У кнопки убран
csDoubleClicks, а на случай, если двойной всё же дойдёт, он считается
за обычный.

Проверено: tests/lfmcheck, раздел «Кнопки нижней панели», и
tests/buttonclicks.sh мышью на невидимом экране — по всем шести
переключателям очереди из 1-5 щелчков отрабатываются полностью.
2026-09-30 15:44:29 +03:00

56 lines
2.7 KiB
Bash
Executable file
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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)"