From 562bd28cffaeb646a9e8af95c3c1a87ae01e1ed2 Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Tue, 19 May 2026 22:25:43 +0200 Subject: [PATCH] fix(ui): guard terminal writes while suspended We forgot to guard `beep()` and `flush()`. Ref: 36ec2b0ae1fa7afcdfe6f166323955b8bd121b0f Ref: dd76f9087fe93db5ced608ee3c744f299b933cbe Signed-off-by: Michael Vetter Fixes: https://github.com/profanity-im/profanity/issues/2162 (cherry picked from commit 5e4b5d313a9e055e039e2feb4efae58b6aaead78) --- src/event/server_events.c | 4 ++-- src/ui/chatwin.c | 4 ++-- src/ui/core.c | 17 +++++++++++++++++ src/ui/inputwin.c | 4 +++- src/ui/privwin.c | 4 ++-- src/ui/ui.h | 2 ++ tests/unittests/ui/stub_ui.c | 10 ++++++++++ 7 files changed, 38 insertions(+), 7 deletions(-) diff --git a/src/event/server_events.c b/src/event/server_events.c index 09b8af0a..71d7af35 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -341,7 +341,7 @@ sv_ev_room_message(ProfMessage* message) status_bar_active(num, WIN_MUC, mucwin->roomjid); if ((g_strcmp0(mynick, message->from_jid->resourcepart) != 0) && (prefs_get_boolean(PREF_BEEP))) { - beep(); + ui_beep(); } // not currently on groupchat window @@ -349,7 +349,7 @@ sv_ev_room_message(ProfMessage* message) status_bar_new(num, WIN_MUC, mucwin->roomjid); if ((g_strcmp0(mynick, message->from_jid->resourcepart) != 0) && (prefs_get_boolean(PREF_FLASH))) { - flash(); + ui_flash(); } cons_show_incoming_room_message(message->from_jid->resourcepart, mucwin->roomjid, num, mention, triggers, mucwin->unread, window); diff --git a/src/ui/chatwin.c b/src/ui/chatwin.c index f231c23e..414d3517 100644 --- a/src/ui/chatwin.c +++ b/src/ui/chatwin.c @@ -327,7 +327,7 @@ chatwin_incoming_msg(ProfChatWin* chatwin, ProfMessage* message, gboolean win_cr cons_show_incoming_message(display_name, num, chatwin->unread, window); if (prefs_get_boolean(PREF_FLASH)) { - flash(); + ui_flash(); } chatwin->unread++; @@ -364,7 +364,7 @@ chatwin_incoming_msg(ProfChatWin* chatwin, ProfMessage* message, gboolean win_cr wins_add_quotes_ac(window, message->plain, FALSE); if (prefs_get_boolean(PREF_BEEP)) { - beep(); + ui_beep(); } } diff --git a/src/ui/core.c b/src/ui/core.c index f755cfa9..f67df803 100644 --- a/src/ui/core.c +++ b/src/ui/core.c @@ -180,6 +180,7 @@ void ui_suspend(void) { inp_suspend(); + doupdate(); endwin(); } @@ -190,6 +191,22 @@ ui_resume(void) inp_resume(); } +void +ui_beep(void) +{ + if (!isendwin()) { + beep(); + } +} + +void +ui_flash(void) +{ + if (!isendwin()) { + flash(); + } +} + void ui_resize(void) { diff --git a/src/ui/inputwin.c b/src/ui/inputwin.c index c9c4aef8..9ad741c6 100644 --- a/src/ui/inputwin.c +++ b/src/ui/inputwin.c @@ -459,7 +459,9 @@ _inp_write(char* line, int offset) _inp_win_handle_scroll(); _inp_win_update_virtual(); - doupdate(); + if (!isendwin()) { + doupdate(); + } } static int diff --git a/src/ui/privwin.c b/src/ui/privwin.c index 19384d6e..33bd53a6 100644 --- a/src/ui/privwin.c +++ b/src/ui/privwin.c @@ -57,7 +57,7 @@ privwin_incoming_msg(ProfPrivateWin* privatewin, ProfMessage* message) privatewin->unread++; if (prefs_get_boolean(PREF_FLASH)) { - flash(); + ui_flash(); } } @@ -65,7 +65,7 @@ privwin_incoming_msg(ProfPrivateWin* privatewin, ProfMessage* message) wins_add_quotes_ac(window, message->plain, TRUE); if (prefs_get_boolean(PREF_BEEP)) { - beep(); + ui_beep(); } if (notify) { diff --git a/src/ui/ui.h b/src/ui/ui.h index 7bed0782..4622ca1c 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -84,6 +84,8 @@ void ui_handle_recipient_error(const char* const recipient, const char* const er void ui_handle_error(const char* const err_msg); void ui_clear_win_title(void); void ui_goodbye_title(void); +void ui_beep(void); +void ui_flash(void); void ui_handle_room_configuration_form_error(const char* const roomjid, const char* const message); void ui_handle_room_config_submit_result(const char* const roomjid); void ui_handle_room_config_submit_result_error(const char* const roomjid, const char* const message); diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index 2d5da2ef..ad338403 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -1475,3 +1475,13 @@ ui_is_suspended(void) { return FALSE; } + +void +ui_beep(void) +{ +} + +void +ui_flash(void) +{ +}