]> git.tuebingen.mpg.de Git - paraslash.git/commitdiff
Merge branch 'refs/heads/t/gui-sigwinch'
authorAndre Noll <maan@tuebingen.mpg.de>
Tue, 1 May 2018 16:17:32 +0000 (18:17 +0200)
committerAndre Noll <maan@tuebingen.mpg.de>
Tue, 1 May 2018 16:25:59 +0000 (18:25 +0200)
A single patch which removes a long standing issue of para_gui.

Cooking for half a year.

* refs/heads/t/gui-sigwinch:
  gui: Catch SIGWINCH.

NEWS.md
gui.c

diff --git a/NEWS.md b/NEWS.md
index d0bd6585a3a2f04be5ec262d580bfb8800733498..4fd9dcb495e7f42cf89468ae18d485338820ec9b 100644 (file)
--- a/NEWS.md
+++ b/NEWS.md
@@ -1,6 +1,13 @@
 NEWS
 ====
 
+-------------------------------------------
+0.6.2 (to be accounced) "elastic diversity"
+-------------------------------------------
+
+- para_gui no longer waits up to one second to update the screen when
+the geometry of the terminal changes.
+
 ----------------------------------------
 0.6.1 (2017-09-23) "segmented iteration"
 ----------------------------------------
diff --git a/gui.c b/gui.c
index 6882a31cbaca0a39cd5e25a8b32936a094a6352a..69a9243da25245d5a4a67c1bf98deaef222dc593 100644 (file)
--- a/gui.c
+++ b/gui.c
@@ -941,6 +941,14 @@ static int signal_post_select(struct sched *s, __a_unused void *context)
        switch (ret) {
        case SIGTERM:
                die(EXIT_FAILURE, "only the good die young (caught SIGTERM)\n");
+       case SIGWINCH:
+               PARA_NOTICE_LOG("got SIGWINCH\n");
+               if (curses_active()) {
+                       shutdown_curses();
+                       init_curses();
+                       redraw_bot_win();
+               }
+               return 1;
        case SIGINT:
                return 1;
        case SIGUSR1:
@@ -1146,14 +1154,8 @@ static int input_post_select(__a_unused struct sched *s,
        ret = wgetch(top.win);
        if (ret == ERR)
                return 0;
-       if (ret == KEY_RESIZE) {
-               if (curses_active()) {
-                       shutdown_curses();
-                       init_curses();
-                       redraw_bot_win();
-               }
+       if (ret == KEY_RESIZE) /* already handled in signal_post_select() */
                return 0;
-       }
        if (exs == EXEC_IDLE)
                handle_command(ret);
        else if (exec_pid > 0)
@@ -1456,6 +1458,7 @@ static int setup_tasks_and_schedule(void)
        para_install_sighandler(SIGTERM);
        para_install_sighandler(SIGCHLD);
        para_install_sighandler(SIGUSR1);
+       para_install_sighandler(SIGWINCH);
        signal_task->task = task_register(&(struct task_info) {
                .name = "signal",
                .pre_select = signal_pre_select,