diff --git a/src/ncmpcpp.cpp b/src/ncmpcpp.cpp index 07d3ad99..a4eb487b 100644 --- a/src/ncmpcpp.cpp +++ b/src/ncmpcpp.cpp @@ -92,17 +92,12 @@ namespace std::streambuf *cerr_buffer; bool design_changed = 0; + bool order_resize = 0; size_t header_height, footer_start_y, footer_height; - void sighandler(GNUC_UNUSED int signal) + void resize_screen() { -# if !defined(WIN32) - if (signal == SIGPIPE) - { - ShowMessage("Broken pipe signal caught!"); - return; - } -# endif // !WIN32 + order_resize = 0; # if defined(USE_PDCURSES) resize_term(0, 0); @@ -114,7 +109,11 @@ namespace refresh(); // get rid of KEY_RESIZE as it sometimes // corrupts our new cool ReadKey() function + // because KEY_RESIZE doesn't come from stdin + // and thus select cannot detect it + timeout(10); getch(); + timeout(-1); } # endif @@ -193,6 +192,20 @@ namespace wFooter->Refresh(); } +# if !defined(WIN32) + void sighandler(int signal) + { + if (signal == SIGPIPE) + { + ShowMessage("Broken pipe signal caught!"); + } + else if (signal == SIGWINCH) + { + order_resize = 1; + } + } +# endif // !WIN32 + void do_at_exit() { // restore old cerr buffer @@ -323,6 +336,9 @@ int main(int argc, char *argv[]) MessagesAllowed = 1; + if (order_resize) + resize_screen(); + // header stuff if (((Timer.tv_sec == past.tv_sec && Timer.tv_usec >= past.tv_usec+500000) || Timer.tv_sec > past.tv_sec) && (myScreen == myPlaylist || myScreen == myBrowser || myScreen == myLyrics) @@ -511,11 +527,7 @@ int main(int argc, char *argv[]) UnlockProgressbar(); UnlockStatusbar(); design_changed = 1; -# if !defined(WIN32) - sighandler(SIGWINCH); -# else - sighandler(0); -# endif // !WIN23 + resize_screen(); } else if (Keypressed(input, Key.GoToParentDir)) {