Simpan kotak dialog Zenity selalu di atas di latar depan

8

Apakah ada cara untuk mendeteksi bahwa Zenitydialog telah kehilangan fokus?

Saya ingin menyimpan kotak dialog di latar depan kecuali pengguna menekan ESC.

Saya mencoba menambahkannya ke skrip ini :

#!/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
rubo77
sumber
askubuntu.com/questions/197099/zenity-window-on-top
Ciro Santilli 冠状 病毒 审查 六四 事件 事件

Jawaban:

12
#!/bin/bash
# This will wait one second and then steal focus and make the Zenity dialog box always-on-top (aka. 'above').

(sleep 1 && wmctrl -F -a "I am on top" -b add,above) &
(zenity --info --title="I am on top" --text="How to help Zenity to get focus and be always on top")

Sumber:

Jan
sumber
Saya ingin tahu apakah add,fullscreenjuga akan berfungsi
rubo77
Saya juga menambahkan `-b add, maximized_vert, maximized_horz` dalam panggilan wmctrl kedua. Sekarang saya perlu memanggil skrip juga jika jendela zenity diperkecil, diubah ukurannya atau dipindahkan
rubo77
Saat startup, segalanya mungkin menjadi sangat lambat, jadi saya menyarankan ini: (while ! wmctrl -F -a "$$ the title" -b add,above;do sleep 1;done) &dan juga letakkan skrip pid pada judul untuk membuatnya lebih unik.
Aquarius Power
0

Anda dapat mengalami masalah jika Anda menjalankan ini sebagai tugas cron. Lingkungan Cron tidak mengetahui tampilan X, dbus, atau desktop Anda dan tidak akan menampilkan kotak zenity atau menyimpannya di atas. Menambahkan DISPLAY =: 0 sebelum kedua wmctrl dan zenity menyelesaikan masalah:

(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")

Penjebak
sumber
0

Solusi ini sebagian besar sama dengan yang dilakukan oleh @Jan, tetapi menggunakan PID alih-alih judul jendela untuk mengidentifikasi jendela, dan juga kompatibel dengan Bourne Shell (-> tidak memerlukan bash).

#!/bin/sh
# This will wait 200ms, steal focus and set the Zenity dialog box
# to "always-on-top".

modify_win_by_pid() {
    pid=$1

    sleep 0.2
    win_id=`wmctrl -l -p | grep ${pid} | awk '{print $1}'`
    wmctrl -i - ${win_id} -b add,above
}

zenity --info --title="I am on top" --text="I received focus and will stay on top" &
modify_win_by_pid $!
hoijui
sumber