• step's avatar
    fix UI not updated when sync command runs · c8e9ef20
    step authored
    Before this commit, reproduce this issue with the following command:
    
    ```sh
    yad --form --field=chk:CHK TRUE --changed-action='echo 2:' --field=changes
    ```
    
    *don't* use your mouse; instead press the Space key *once* to toggle the checkbox. The "changes" field isn't updated but it should be. This is the issue.
    
    Now pressing Space again (or dragging/clicking the mouse) pumps the main loop, which frees the thread to run, which updates the "changes" field. This is a manual work-around for this issue.
    
    To fix this issue I replaced `gtk_main_iteration` with `gtk_main_iteration_do (FALSE)`. This way the main loop doesn't block when no events are pending, and the thread is always free to run.
    
    Then slow down the busy-waiting loop not to hog the CPU. 10000 us keeps yad below 1% CPU on my rig, and the form UI remains very responsive. I'm using this command to test how responsive it is:
    ```sh
    yad --no-buttons --form --changed-action='echo 1:' --field=changes '' --field=2:CHK TRUE --field=3:CHK TRUE --field=4:CHK TRUE --field=5:CHK TRUE --field=6:CHK TRUE --field=7:CHK TRUE &
    ```
    Just keep pressing Tab Space Tab Space ... quickly to update each field. Test with and without `--changed-action`.
    c8e9ef20
util.c 22.3 KB