AnalogTerm2: Avoid direct screen_select_clear() in SIGALRM handler
authorMatthew Mondor <mmondor@pulsar-zone.net>
Wed, 23 Aug 2023 13:24:40 +0000 (13:24 +0000)
committerMatthew Mondor <mmondor@pulsar-zone.net>
Wed, 23 Aug 2023 13:24:40 +0000 (13:24 +0000)
mmsoftware/analogterm2/src/main.c
mmsoftware/analogterm2/src/screen.c
mmsoftware/analogterm2/src/screen.h
mmsoftware/analogterm2/src/timer.c

index f0e6601..c188b57 100644 (file)
@@ -114,6 +114,10 @@ x11_process(screen_t *screen, tty_t *ttys, state_t *state)
                draw_blink_update();
        if (refresh_expired)
                draw_update_screen(screen, state);
+       if (screen_select_clear_now) {
+               screen_select_clear_now = false;
+               screen_select_clear(state);
+       }
 
        while (XPending(screen->dpy) > 0) {
                (void)XNextEvent(screen->dpy, &event);
index a26cbea..5266c0b 100644 (file)
@@ -143,6 +143,7 @@ static Atom         atom_primary, atom_targets, atom_utf8_string,
                        atom_string, atom_incr;
 
 int                    screen_select_ticks = 0;
+bool                   screen_select_clear_now = false;
 
 
 screen_t *
index ae22027..ab5d32d 100644 (file)
@@ -82,6 +82,7 @@ void          screen_select_notify(state_t *, XSelectionEvent *);
 
 
 extern int     screen_select_ticks;
+extern bool    screen_select_clear_now;
 
 
 #endif
index d417048..9d9a499 100644 (file)
@@ -116,6 +116,6 @@ alarm_sighandler(int sig)
        /* Clipboard selection timeout */
        if (screen_select_ticks > 0) {
                if (--screen_select_ticks == 0)
-                       screen_select_clear(state);
+                       screen_select_clear_now = true;
        }
 }