--- a/ui/motif/window.c Wed Feb 26 18:21:04 2025 +0100 +++ b/ui/motif/window.c Wed Feb 26 18:59:21 2025 +0100 @@ -45,16 +45,27 @@ static int window_default_width = 600; static int window_default_height = 500; -static void window_close_handler(Widget window, void *udata, void *cdata) { - UiObject *obj = udata; +void ui_window_widget_destroy(UiObject *obj) { + XtDestroyWidget(obj->widget); uic_object_destroy(obj); - nwindows--; if(nwindows == 0) { ui_exit_mainloop(); } } +static void window_close_handler(Widget window, void *udata, void *cdata) { + UiObject *obj = udata; + + uic_context_prepare_close(obj->ctx); + obj->ref--; + if(obj->ref > 0) { + XtUnmapWidget(obj->widget); + } else { + ui_window_widget_destroy(obj); + } +} + static UiObject* create_window(const char *title, void *window_data, Boolean simple) { CxMempool *mp = cxMempoolCreateSimple(256); @@ -62,6 +73,7 @@ UiObject *obj = cxCalloc(a, 1, sizeof(UiObject)); obj->ctx = uic_context(obj, mp); obj->window = window_data; + obj->destroy = ui_window_widget_destroy; Arg args[16]; int n = 0;