diff options
Diffstat (limited to 'degesch.c')
-rw-r--r-- | degesch.c | 25 |
1 files changed, 15 insertions, 10 deletions
@@ -5021,14 +5021,17 @@ irc_initiate_disconnect (struct server *s, const char *reason) } static void -initiate_quit (struct app_context *ctx, const char *message) +request_quit (struct app_context *ctx, const char *message) { - log_global_status (ctx, "Shutting down"); + if (!ctx->quitting) + { + log_global_status (ctx, "Shutting down"); + ctx->quitting = true; - // Hide the user interface - CALL (ctx->input, hide); + // Disable the user interface + CALL (ctx->input, hide); + } - // Initiate a connection close struct str_map_iter iter = str_map_iter_make (&ctx->servers); struct server *s; while ((s = str_map_iter_next (&iter))) @@ -5042,7 +5045,6 @@ initiate_quit (struct app_context *ctx, const char *message) irc_destroy_connector (s); } - ctx->quitting = true; try_finish_quit (ctx); } @@ -11280,7 +11282,7 @@ handle_command_me (struct handler_args *a) static bool handle_command_quit (struct handler_args *a) { - initiate_quit (a->ctx, *a->arguments ? a->arguments : NULL); + request_quit (a->ctx, *a->arguments ? a->arguments : NULL); return true; } @@ -13722,12 +13724,15 @@ on_signal_pipe_readable (const struct pollfd *fd, struct app_context *ctx) while (try_reap_child (ctx)) ; - if (g_termination_requested && !ctx->quitting) - initiate_quit (ctx, NULL); + if (g_termination_requested) + { + g_termination_requested = false; + request_quit (ctx, NULL); + } if (g_winch_received) { - redraw_screen (ctx); g_winch_received = false; + redraw_screen (ctx); } } |