ui/motif/window.c

changeset 479
d9b58dd1c30b
parent 471
063a9f29098c
--- 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;

mercurial