ui/gtk/window.c

changeset 1129
a4affe75198c
parent 1125
428ee5baec0e
child 1130
f0def0c24ae6
--- a/ui/gtk/window.c	Mon May 18 21:29:56 2026 +0200
+++ b/ui/gtk/window.c	Tue May 19 18:10:13 2026 +0200
@@ -112,7 +112,12 @@
         }
     }
     
-    obj->ref--;
+    if(obj->ref > 0) {
+        obj->ref--;
+    } else {
+        // warn about invalid reference counting
+        fprintf(stderr, "Error: UiObject %p ref == 0\n", obj);
+    }
     if(obj->ref > 0) {
 #if GTK_CHECK_VERSION(2, 18, 0)
         gtk_widget_set_visible(obj->widget, FALSE);
@@ -138,12 +143,25 @@
     }
 }
 
+static void window_onclose_callback(UiObject *obj) {
+    if(obj->onclose) {
+        UiEvent event;
+        memset(&event, 0, sizeof(UiEvent));
+        event.obj = obj;
+        event.window = obj->window;
+        event.document = obj->ctx->document;
+        obj->onclose(&event, obj->onclosedata);
+    }
+}
+
 #if GTK_MAJOR_VERSION >= 4
 static gboolean close_request(GtkWindow* self, UiObject *obj) {
+    window_onclose_callback(obj);
     return ui_window_close_request(obj);
 }
 #else
 static gboolean close_request(GtkWidget* self, GdkEvent* event, UiObject *obj) {
+    window_onclose_callback(obj);
     return ui_window_close_request(obj);
 }
 #endif
@@ -305,17 +323,23 @@
             adw_header_bar_set_show_title(ADW_HEADER_BAR(headerbar_sidebar), FALSE);
         } else if(!strcmp(show_title, "sidebar")) {
             adw_header_bar_set_show_title(ADW_HEADER_BAR(headerbar_main), FALSE);
-            adw_header_bar_set_show_title(ADW_HEADER_BAR(headerbar_sidebar), TRUE);
+            if(headerbar_sidebar) {
+                adw_header_bar_set_show_title(ADW_HEADER_BAR(headerbar_sidebar), TRUE);
+            }
         } else if(!strcmp(show_title, "false")) {
-            adw_header_bar_set_show_title(ADW_HEADER_BAR(headerbar_sidebar), FALSE);
+            if(headerbar_sidebar) {
+                adw_header_bar_set_show_title(ADW_HEADER_BAR(headerbar_sidebar), FALSE);
+            }
             adw_header_bar_set_show_title(ADW_HEADER_BAR(headerbar_main), FALSE);
         } else {
             fprintf(stderr, "Unknown value '%s' for property ui.gtk.window.showtitle\n", show_title);
-            adw_header_bar_set_show_title(ADW_HEADER_BAR(headerbar_sidebar), FALSE);
+            if(headerbar_sidebar) {
+                adw_header_bar_set_show_title(ADW_HEADER_BAR(headerbar_sidebar), FALSE);
+            }
         }
     } else {
         adw_header_bar_set_show_title(ADW_HEADER_BAR(headerbar_main), FALSE);
-        if(sidebar) {
+        if(headerbar_sidebar) {
             adw_header_bar_set_show_title(ADW_HEADER_BAR(headerbar_sidebar), TRUE);
         }
     }

mercurial