--- a/ui/gtk/toolkit.c Sun Jan 11 15:10:20 2026 +0100 +++ b/ui/gtk/toolkit.c Mon Jan 12 20:54:27 2026 +0100 @@ -33,6 +33,7 @@ #include "toolkit.h" #include "toolbar.h" +#include "window.h" #include "icon.h" #include "../common/document.h" #include "../common/properties.h" @@ -145,27 +146,33 @@ #endif void ui_show(UiObject *obj) { - gboolean visible = gtk_widget_is_visible(obj->widget); - + gboolean visible = FALSE; uic_check_state_widgets(obj->ctx); + if(obj->widget) { + visible = gtk_widget_is_visible(obj->widget); #if GTK_MAJOR_VERSION >= 4 - gtk_window_present(GTK_WINDOW(obj->widget)); + gtk_window_present(GTK_WINDOW(obj->widget)); #elif GTK_MAJOR_VERSION <= 3 - gtk_widget_show_all(obj->widget); + gtk_widget_show_all(obj->widget); #endif - + } + if(!visible) { obj->ref++; } } void ui_close(UiObject *obj) { - uic_context_prepare_close(obj->ctx); + uic_context_prepare_close(obj->ctx); // TODO: should this be moved to the close event handler? + if(obj->widget) { #if GTK_CHECK_VERSION(4, 0, 0) - gtk_window_close(GTK_WINDOW(obj->widget)); + gtk_window_close(GTK_WINDOW(obj->widget)); #else - gtk_widget_destroy(obj->widget); + gtk_widget_destroy(obj->widget); #endif + } else { + ui_window_close_request(obj); + } }