Две беды у всех кнопок нижней полосы. Всплывающая подсказка появлялась прямо поверх кнопки, о которой рассказывает, и перехватывала щелчок: нажать кнопку было нельзя. Подсказка переехала в строку состояния — она в той же полосе, ничего не закрывает и меняется сразу после щелчка, не дожидаясь нового наведения. Строка состояния теперь занимает всё свободное место справа, пока рядом не показан ход работы, а самые длинные подсказки укорочены: раньше их обрезало на полуслове. Второй щелчок подряд виджетсет отдавал как двойной, и кнопка его не видела: быстрая очередь щелчков срабатывала через раз. У кнопки убран csDoubleClicks, а на случай, если двойной всё же дойдёт, он считается за обычный. Проверено: tests/lfmcheck, раздел «Кнопки нижней панели», и tests/buttonclicks.sh мышью на невидимом экране — по всем шести переключателям очереди из 1-5 щелчков отрабатываются полностью.
56 lines
2.7 KiB
Bash
Executable file
56 lines
2.7 KiB
Bash
Executable file
#!/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)"
|