X-Git-Url: https://git.stderr.nl/gitweb?p=rodin%2Fchimara.git;a=blobdiff_plain;f=libchimara%2Fabort.c;h=517dec5649761308b2592be09f6c78feced3c94c;hp=5a812cfc200ac4ba9d7b75a9688a414f94146a4d;hb=90c824d0e150efca7bc2860661a7823c23c46b6a;hpb=5f736bab8c5a29ed6a1f2f3f61db693525756067 diff --git a/libchimara/abort.c b/libchimara/abort.c index 5a812cf..517dec5 100644 --- a/libchimara/abort.c +++ b/libchimara/abort.c @@ -72,7 +72,7 @@ shutdown_glk(void) /* Stop any timers */ glk_request_timer_events(0); - /* Cancel any pending input requests */ + /* Cancel any pending input requests and flush all window buffers */ winid_t win; for(win = glk_window_iterate(NULL, NULL); win; win = glk_window_iterate(win, NULL)) { @@ -90,6 +90,8 @@ shutdown_glk(void) default: ; /* Handle mouse and hyperlink requests */ } + + flush_window_buffer(win); } /* Close any open resource files */ @@ -102,6 +104,11 @@ shutdown_glk(void) g_async_queue_unref(glk_data->char_input_queue); g_async_queue_unref(glk_data->line_input_queue); - printf("cleaning up...\n"); + /* Wait for any pending window rearrange */ + g_mutex_lock(glk_data->arrange_lock); + if(glk_data->needs_rearrange) + g_cond_wait(glk_data->rearranged, glk_data->arrange_lock); + g_mutex_unlock(glk_data->arrange_lock); + chimara_glk_reset(glk_data->self); }