ui/gtk/toolkit.c

changeset 673
90a32d739b8e
parent 659
d6baaa93f7be
child 674
51670b0bc625
--- a/ui/gtk/toolkit.c	Fri Jul 18 21:54:33 2025 +0200
+++ b/ui/gtk/toolkit.c	Sun Jul 20 12:27:33 2025 +0200
@@ -66,6 +66,8 @@
 
 static int scale_factor = 1;
 
+static UiBool        exit_on_shutdown;
+
 UIEXPORT void ui_init(const char *appname, int argc, char **argv) {
     application_name = appname;
     uic_init_global_context();
@@ -110,8 +112,15 @@
     exit_data = userdata;
 }
 
+void ui_app_onexit(void) {
+    uic_store_app_properties();
+}
 
-#ifndef UI_GTK2
+void ui_app_exit_on_shutdown(UiBool exitapp) {
+    exit_on_shutdown = exitapp;
+}
+
+#ifdef UI_APPLICATION
 static void app_startup(GtkApplication* app, gpointer userdata) {
     if(startup_func) {
         startup_func(NULL, startup_data);
@@ -119,8 +128,16 @@
 }
 
 static void app_activate(GtkApplication* app, gpointer userdata) {
-    printf("activate\n");
+    //printf("activate\n");
 }
+
+static void app_shutdown(GtkApplication *app, gpointer userdata) {
+    if(exit_func) {
+        exit_func(NULL, exit_data);
+    }
+    ui_app_onexit();
+}
+
 #endif
 
 void ui_main() {
@@ -130,6 +147,7 @@
             application_name ? application_name : "application1");
     app = UI_APPLICATION_NEW(appid.ptr);
     g_signal_connect (app, "startup", G_CALLBACK (app_startup), NULL);
+    g_signal_connect (app, "shutdown", G_CALLBACK (app_shutdown), NULL);
     g_signal_connect (app, "activate", G_CALLBACK (app_activate), NULL);
     g_application_run(G_APPLICATION (app), 0, NULL);
     g_object_unref (app);
@@ -140,11 +158,14 @@
         startup_func(NULL, startup_data);
     }
     gtk_main();
-#endif
     if(exit_func) {
         exit_func(NULL, exit_data);
     }
-    uic_store_app_properties();
+    ui_app_onexit();
+#endif
+    if(exit_on_shutdown) {
+        exit(0);
+    }
 }
 
 #ifndef UI_GTK2

mercurial