Disable most of input handler when a locker is running

A problem was introduced in 4562daea67
because it kind-of bypasses the state mechanism. Whenever a locker was
running the state would remain `unlock` and therefore the inputhandler
would be fully enabled and menus could still be opened with gestured
(although they wouldn't show because of the locker).

This patch solves that, it's not an ideal implementation but is
a bit of a minimal temporary patch until we revise/simplify the
entire state locking mechanism.

It also moves the burden of removing icons for peanutbutter to
sxmo_hook_statusbar instead of sxmo_hook_lockstatusbar

Signed-off-by: Willow Barraco <contact@willowbarraco.fr>
This commit is contained in:
Maarten van Gompel
2024-11-24 19:32:28 +01:00
committed by Willow Barraco
parent 84b61f4a72
commit 6bb78da702
5 changed files with 32 additions and 16 deletions

View File

@@ -22,7 +22,7 @@ WMNAME="$(printf %s "$XPROPOUT" | grep title: | cut -d" " -f2- | tr '[:upper:]'
sxmo_debug "STATE: $(sxmo_state.sh get) ACTION: $ACTION WMCLASS: $WMCLASS WMNAME: $WMNAME"
if ! sxmo_state.sh get | grep -q unlock; then
if sxmo_state.sh is_locked; then
case "$WMNAME" in # Handle programs
*"epy"*|*"epr"*)
case "$ACTION" in

View File

@@ -5,7 +5,8 @@
# For use with peanutbutter (peanutbutter --font Sxmo --statuscommand sxmo_hook_lockstatusbar.sh)
# This filters out the last component (which is usually the time and is already displayed more prominently
# obtain status output to pass to peanutbutter, using awk to remove the last
# column (the time), which we don't need duplicated. We also remove the · symbol which we use in $SXMO_NOTCH
# and is not needed for the lockscreen.
sxmo_status_watch.sh -o pango | tr -d "·" | awk 'NF{NF-=1};1'
# make sure status bar icons are suited for peanutbutter
sxmo_hook_statusbar.sh state_change
# obtain status output to pass to peanutbutter (this keeps running and updating to stdout)
sxmo_status_watch.sh -o pango

View File

@@ -43,6 +43,8 @@ wait
case "$SXMO_WM" in
sway)
command -v peanutbutter 2> /dev/null && peanutbutter --font Sxmo --statuscommand sxmo_hook_lockstatusbar.sh &
if command -v peanutbutter > /dev/null; then
peanutbutter --font Sxmo --statuscommand sxmo_hook_lockstatusbar.sh && sxmo_hook_statusbar.sh state_change &
fi
;;
esac

View File

@@ -17,9 +17,14 @@
# right and "variable" icons (that come and go) on the left.
set_time() {
date "+${SXMO_STATUS_DATE_FORMAT:-%H:%M}" | while read -r date; do
sxmobar -a time 99 "$date"
done
if pidof peanutbutter > /dev/null; then
#peanutbutter already features a clock, no need for one in the icon bar
sxmobar -d time
else
date "+${SXMO_STATUS_DATE_FORMAT:-%H:%M}" | while read -r date; do
sxmobar -a time 99 "$date"
done
fi
}
set_state() {
@@ -32,11 +37,10 @@ set_state() {
return
fi
if command -v peanutbutter 2> /dev/null; then
if [ "$SXMO_STATES" = "unlock screenoff" ]; then
# no need for a state icon in this (default) scenario, the state will be obvious, either peanutbutter is on or it isn't
return
fi
if command -v peanutbutter > /dev/null; then
# no need for a state icon in this (default) scenario, the state will be obvious, either peanutbutter is on or it isn't
sxmobar -d state
return
fi
case "$(sxmo_state.sh get)" in
@@ -426,8 +430,10 @@ set_volume() {
}
set_notch() {
if [ -n "$SXMO_NOTCH" ]; then
if [ -n "$SXMO_NOTCH" ] && ! pidof peanutbutter > /dev/null; then
sxmobar -a notch "${SXMO_NOTCH_PRIO:-29}" "$SXMO_NOTCH"
else
sxmobar -d notch
fi
}
@@ -449,6 +455,7 @@ case "$1" in
if [ -z "$SXMO_NO_MODEM" ]; then
set_modem
fi
set_notch
set_state
set_network wifi wlan0
;;

View File

@@ -5,7 +5,7 @@
. sxmo_common.sh
SXMO_STATE="${SXMO_STATE:-$XDG_RUNTIME_DIR/sxmo.state}"
if command -v peanutbutter 2> /dev/null; then
if command -v peanutbutter > /dev/null; then
#no separate lock stage needed when peanutbutter is used
SXMO_STATES="${SXMO_STATES:-unlock screenoff}"
else
@@ -164,6 +164,12 @@ case "$action" in
read_state
printf %s "$state"
;;
is_locked)
pidof peanutbutter swaylock waylock i3lock > /dev/null && exit 0
if sxmo_state.sh get | grep -q unlock; then
exit 1
fi
;;
set)
lock_exclusive
read_state