diff --git a/4ed_api_implementation.cpp b/4ed_api_implementation.cpp index d1cd1242..bca1f31f 100644 --- a/4ed_api_implementation.cpp +++ b/4ed_api_implementation.cpp @@ -1664,6 +1664,18 @@ view_set_mark(Application_Links *app, View_ID view_id, Buffer_Seek seek) return(result); } +api(custom) function b32 +view_quit_ui(Application_Links *app, View_ID view_id){ + Models *models = (Models*)app->cmd_context; + View *view = imp_get_view(models, view_id); + b32 result = false; + if (view != 0){ + view_quit_ui(app->tctx, models, view); + result = true; + } + return(result); +} + api(custom) function b32 view_set_buffer(Application_Links *app, View_ID view_id, Buffer_ID buffer_id, Set_Buffer_Flag flags) { @@ -1676,8 +1688,7 @@ view_set_buffer(Application_Links *app, View_ID view_id, Buffer_ID buffer_id, Se if (file != view->file){ view_set_file(app->tctx, models, view, file); if (!(flags & SetBuffer_KeepOriginalGUI)){ - //view_quit_ui(models, view); - // TODO(allen): back to base context + view_quit_ui(app->tctx, models, view); } } result = true; diff --git a/4ed_view.cpp b/4ed_view.cpp index 7068920b..26f772de 100644 --- a/4ed_view.cpp +++ b/4ed_view.cpp @@ -594,9 +594,9 @@ view_check_co_exited(Models *models, View *view){ if (view->co == 0){ b32 result = view_close(models, view); // TODO(allen): Here it looks like the final view has - // closed exited from it's event handler. We should probably - // have a failsafe restarter for the event handler when this - // happens. + // exited from it's event handler. We should probably + // have a failsafe restarter for the event handler when + // this happens. Assert(result); } } @@ -619,10 +619,10 @@ co_full_abort(Thread_Context *tctx, Models *models, View *view){ co = co_run(tctx, models, co, &in, &view->co_out); } if (co != 0){ -#define M "SERIOUS ERROR: full stack abort did not complete" Application_Links app = {}; app.tctx = tctx; app.cmd_context = models; +#define M "SERIOUS ERROR: full stack abort did not complete" print_message(&app, string_u8_litexpr(M)); #undef M } @@ -708,6 +708,28 @@ co_send_core_event(Thread_Context *tctx, Models *models, Core_Code code){ //////////////////////////////// +function void +view_quit_ui(Thread_Context *tctx, Models *models, View *view){ + for (u32 j = 0;; j += 1){ + if (j == 100){ + Application_Links app = {}; + app.tctx = tctx; + app.cmd_context = models; +#define M "SERIOUS ERROR: view quit ui did not complete" + print_message(&app, string_u8_litexpr(M)); +#undef M + break; + } + View_Context_Node *ctx = view->ctx; + if (ctx->next == 0){ + break; + } + co_single_abort(tctx, models, view); + } +} + +//////////////////////////////// + internal b32 file_is_viewed(Layout *layout, Editing_File *file){ b32 is_viewed = false;