¿Hay alguna manera de detectar que un Zenity
diálogo ha perdido el foco?
Me gustaría mantener el cuadro de diálogo en primer plano a menos que el usuario presione ESC.
Estoy intentando agregarlo a este script :
#!/bin/bash
# requires these packages from ubuntu repository:
# wmctrl, zenity, x11-utils
# and the script mouse-speed
# This procect on git: https://github.com/rubo77/mouse-speed
######## configuration ##########
# seconds between micro breaks
microbreak_time=$(( 10 * 60 ))
# micro break duration in seconds
microbreak_duration=15
# seconds between long breaks
longbreak_time=$(( 120 * 60 ))
# message to display
message="Try focussing a far object outside the window with the eye to relax!"
longbreak_message="Change your seating or continue work in a standing/sitting position"
#postpone label
postpone="Postpone"
window_title="typebreak"
# global zoom of your window manager:
ZOOM=2
# height in px of the top system-bar:
TOPMARGIN=57
# sum in px of all horizontal borders:
HORIZONTALMARGIN=40
# get width of screen and height of screen
SCREEN_WIDTH=$(xwininfo -root | awk '$1=="Width:" {print $2}')
SCREEN_HEIGHT=$(xwininfo -root | awk '$1=="Height:" {print $2}')
# width and height
W=$(( $SCREEN_WIDTH / $ZOOM - 2 * $HORIZONTALMARGIN ))
H=$(( $SCREEN_HEIGHT / $ZOOM - 2 * $TOPMARGIN ))
function slow_down(){
#zenity --warning --text "slow down mouse";
mouse-speed -d 30
}
while true; do
# short loop every few minutes to look around
sleep $microbreak_time
(
echo "99"
sleep $(( $microbreak_duration - 2 ))
echo "# Mouse speed reset to 100%"
sleep 2
echo "100"
) | if ( sleep 1 && wmctrl -F -a "$window_title" -b add,maximized_vert,maximized_horz && sleep 3 && wmctrl -F -a "$window_title" -b add,above ) & ( zenity --progress --text "$message" --percentage=0 --auto-close --height=$H --width=$W --pulsate --title="$window_title" --cancel-label="$postpone" ); then
#zenity --info --text "Maus normal speed!"
mouse-speed -r
else
slow_down
fi
done &
while true; do
# second long loop to change seat position
sleep $longbreak_time
zenity --warning --text "$longbreak_message" --title="$window_title - long break"
done
Respuestas:
Fuente:
fuente
add,fullscreen
también funcionará(while ! wmctrl -F -a "$$ the title" -b add,above;do sleep 1;done) &
y también puse el script pid en el título para que sea más único.Puede tener problemas si ejecuta esto como un trabajo cron. El entorno de Cron no es consciente de su pantalla X, dbus o escritorio y no mostrará el cuadro zenity ni lo mantendrá en la parte superior. Adición de DISPLAY =: 0 antes de tanto wmctrl y zenity resuelve el problema:
(sleep 1 && DISPLAY=:0 wmctrl -F -a "I am on top" -b add,above) & (DISPLAY=:0 zenity --info --title="I am on top" --text="How to help Zenity to get focus and be always on top")
fuente
Esta solución es casi la misma que la de @Jan, pero usa el PID en lugar del título de la ventana para identificar la ventana, y además es compatible con Bourne Shell (-> no requiere bash).
fuente