From 30180ac8bb125e4cae03c415201f796863d4c80b Mon Sep 17 00:00:00 2001 From: James Booth Date: Wed, 4 Feb 2015 23:35:28 +0000 Subject: [PATCH] Move SIGWINCH handling to ui/core.c, ignore signal whilst resizing --- src/profanity.c | 1 + src/ui/core.c | 15 +++++++++++++++ src/ui/inputwin.c | 9 --------- src/ui/ui.h | 1 + tests/ui/stub_ui.c | 1 + 5 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/profanity.c b/src/profanity.c index f3c53003..f863a323 100644 --- a/src/profanity.c +++ b/src/profanity.c @@ -204,6 +204,7 @@ _init(const int disable_tls, char *log_level) signal(SIGPIPE, SIG_IGN); signal(SIGINT, SIG_IGN); signal(SIGTSTP, SIG_IGN); + signal(SIGWINCH, ui_sigwinch_handler); _create_directories(); log_level_t prof_log_level = log_level_from_string(log_level); prefs_load(); diff --git a/src/ui/core.c b/src/ui/core.c index de3bafd2..add80dff 100644 --- a/src/ui/core.c +++ b/src/ui/core.c @@ -79,6 +79,8 @@ static char *win_title; static int inp_size; +static gboolean perform_resize = FALSE; + #ifdef HAVE_LIBXSS static Display *display; #endif @@ -120,6 +122,12 @@ ui_init(void) win_update_virtual(window); } +void +ui_sigwinch_handler(int sig) +{ + perform_resize = TRUE; +} + void ui_update(void) { @@ -137,6 +145,13 @@ ui_update(void) status_bar_update_virtual(); inp_put_back(); doupdate(); + + if (perform_resize) { + signal(SIGWINCH, SIG_IGN); + ui_resize(); + perform_resize = FALSE; + signal(SIGWINCH, ui_sigwinch_handler); + } } void diff --git a/src/ui/inputwin.c b/src/ui/inputwin.c index f29b5318..1e78bbcc 100644 --- a/src/ui/inputwin.c +++ b/src/ui/inputwin.c @@ -79,7 +79,6 @@ static gboolean cmd_result = TRUE; static void _inp_win_update_virtual(void); static int _inp_printable(const wint_t ch); static void _inp_win_handle_scroll(void); -static void _inp_resize_signal_handler(int signal); static int _inp_offset_to_col(char *str, int offset); static void _inp_write(char *line, int offset); @@ -125,8 +124,6 @@ create_input_window(void) rl_startup_hook = _inp_rl_startup_hook; rl_callback_handler_install(NULL, _inp_rl_linehandler); - signal(SIGWINCH, _inp_resize_signal_handler); - inp_win = newpad(1, INP_WIN_MAX); wbkgd(inp_win, theme_attrs(THEME_INPUT_TEXT));; keypad(inp_win, TRUE); @@ -311,12 +308,6 @@ _inp_offset_to_col(char *str, int offset) return col; } -static void -_inp_resize_signal_handler(int signal) -{ - ui_resize(); -} - static void _inp_win_handle_scroll(void) { diff --git a/src/ui/ui.h b/src/ui/ui.h index 5008593f..92f570d5 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -62,6 +62,7 @@ GSList* ui_get_chat_recipients(void); gboolean ui_switch_win(const int i); void ui_next_win(void); void ui_previous_win(void); +void ui_sigwinch_handler(int sig); void ui_gone_secure(const char * const barejid, gboolean trusted); void ui_gone_insecure(const char * const barejid); diff --git a/tests/ui/stub_ui.c b/tests/ui/stub_ui.c index d681ec15..e0556ac8 100644 --- a/tests/ui/stub_ui.c +++ b/tests/ui/stub_ui.c @@ -91,6 +91,7 @@ void ui_smp_answer_failure(const char * const barejid) {} void ui_otr_authenticating(const char * const barejid) {} void ui_otr_authetication_waiting(const char * const recipient) {} +void ui_sigwinch_handler(int sig) {} unsigned long ui_get_idle_time(void) {