Existe-t-il un moyen de détecter qu'une Zenity
boîte de dialogue a perdu le focus?
Je voudrais garder la boîte de dialogue au premier plan, sauf si l'utilisateur appuie sur ESC.
J'essaie de l'ajouter à ce 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
Réponses:
La source:
la source
add,fullscreen
cela fonctionnera aussi(while ! wmctrl -F -a "$$ the title" -b add,above;do sleep 1;done) &
et mettez également le script pid sur le titre pour le rendre plus unique.Vous pouvez rencontrer des problèmes si vous l'exécutez en tant que tâche cron. L'environnement de Cron n'est pas au courant de votre écran X, dbus ou bureau et n'affichera pas la boîte zenity ni ne la gardera en haut. Ajout DISPLAY =: 0 avant les deux wmctrl et zenity résout le problème:
(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")
la source
Cette solution est essentiellement la même que celle de @Jan, mais utilise le PID au lieu du titre de la fenêtre pour identifier la fenêtre, et est en outre compatible avec Bourne Shell (-> ne nécessite pas bash).
la source