sxmo-utils/scripts/core/sxmo_rotate.sh
Colin 0b3ce90e74 sxmo_rotate: don't restart lisgd on sway
AFAICT we restart lisgd because it learns the orientation via its
`-o <orientation>` CLI argument. but we only pass that flag on dwm/x11,
not sway. restarting it on sway is wasteful, and potentially racy (i'm
able to get multiple lisgd's running just by enabling autorotate and
flipping the phone rapidly), so don't do that.
2023-07-16 12:45:54 +00:00

134 lines
2.4 KiB
Bash
Executable File

#!/bin/sh
# SPDX-License-Identifier: AGPL-3.0-only
# Copyright 2022 Sxmo Contributors
# include common definitions
# shellcheck source=scripts/core/sxmo_common.sh
. "$(dirname "$0")/sxmo_common.sh"
applyptrmatrix() {
[ -n "$SXMO_TOUCHSCREEN_ID" ] && xinput set-prop "$SXMO_TOUCHSCREEN_ID" --type=float --type=float "Coordinate Transformation Matrix" "$@"
[ -n "$SXMO_STYLUS_ID" ] && xinput set-prop "$SXMO_STYLUS_ID" --type=float --type=float "Coordinate Transformation Matrix" "$@"
}
swayfocusedtransform() {
swaymsg -t get_outputs | jq -r '.[] | select(.focused == true) | .transform'
}
swayfocusedname() {
swaymsg -t get_outputs | jq -r '.[] | select(.focused == true) | .name'
}
xorgisrotated() {
rotation="$(
xrandr | grep primary | cut -d' ' -f 5 | sed s/\(//
)"
if [ "$rotation" = "normal" ]; then
return 1;
fi
printf %s "$rotation"
return 0;
}
swayisrotated() {
rotation="$(
swayfocusedtransform | sed -e s/90/right/ -e s/270/left/ -e s/180/reverse/
)"
if [ "$rotation" = "normal" ]; then
return 1;
fi
printf %s "$rotation"
return 0;
}
xorgrotinvert() {
sxmo_keyboard.sh close
xrandr -o inverted
applyptrmatrix -1 0 1 0 -1 1 0 0 1
superctl restart sxmo_hook_lisgd
sxmo_hook_rotate.sh invert
exit 0
}
swayrotinvert() {
swaymsg -- output "-" transform 180
sxmo_hook_rotate.sh invert
exit 0
}
xorgrotnormal() {
sxmo_keyboard.sh close
xrandr -o normal
applyptrmatrix 0 0 0 0 0 0 0 0 0
superctl restart sxmo_hook_lisgd
sxmo_hook_rotate.sh normal
exit 0
}
swayrotnormal() {
swaymsg -- output "-" transform 0
sxmo_hook_rotate.sh normal
exit 0
}
xorgrotright() {
sxmo_keyboard.sh close
xrandr -o right
applyptrmatrix 0 1 0 -1 0 1 0 0 1
superctl restart sxmo_hook_lisgd
sxmo_hook_rotate.sh right
exit 0
}
swayrotright() {
swaymsg -- output "-" transform 90
sxmo_hook_rotate.sh right
exit 0
}
xorgrotleft() {
sxmo_keyboard.sh close
xrandr -o left
applyptrmatrix 0 -1 1 1 0 0 0 0 1
superctl restart sxmo_hook_lisgd
sxmo_hook_rotate.sh left
exit 0
}
swayrotleft() {
swaymsg -- output "-" transform 270
sxmo_hook_rotate.sh left
exit 0
}
isrotated() {
case "$SXMO_WM" in
sway)
"swayisrotated"
;;
dwm)
"xorgisrotated"
;;
esac
}
if [ -z "$1" ] || [ "rotate" = "$1" ]; then
if [ $# -ne 0 ]; then
shift
fi
if isrotated; then
set -- rotnormal "$@"
else
set -- rotright "$@"
fi
fi
case "$SXMO_WM" in
sway)
"sway$1" "$@"
;;
dwm)
"xorg$1" "$@"
;;
esac