ui/gtk/toolkit.c

changeset 673
90a32d739b8e
parent 659
d6baaa93f7be
child 674
51670b0bc625
equal deleted inserted replaced
672:1b08ba076b65 673:90a32d739b8e
64 64
65 static UiObject *active_window; 65 static UiObject *active_window;
66 66
67 static int scale_factor = 1; 67 static int scale_factor = 1;
68 68
69 static UiBool exit_on_shutdown;
70
69 UIEXPORT void ui_init(const char *appname, int argc, char **argv) { 71 UIEXPORT void ui_init(const char *appname, int argc, char **argv) {
70 application_name = appname; 72 application_name = appname;
71 uic_init_global_context(); 73 uic_init_global_context();
72 74
73 #if GTK_MAJOR_VERSION >= 4 75 #if GTK_MAJOR_VERSION >= 4
108 void ui_onexit(ui_callback f, void *userdata) { 110 void ui_onexit(ui_callback f, void *userdata) {
109 exit_func = f; 111 exit_func = f;
110 exit_data = userdata; 112 exit_data = userdata;
111 } 113 }
112 114
113 115 void ui_app_onexit(void) {
114 #ifndef UI_GTK2 116 uic_store_app_properties();
117 }
118
119 void ui_app_exit_on_shutdown(UiBool exitapp) {
120 exit_on_shutdown = exitapp;
121 }
122
123 #ifdef UI_APPLICATION
115 static void app_startup(GtkApplication* app, gpointer userdata) { 124 static void app_startup(GtkApplication* app, gpointer userdata) {
116 if(startup_func) { 125 if(startup_func) {
117 startup_func(NULL, startup_data); 126 startup_func(NULL, startup_data);
118 } 127 }
119 } 128 }
120 129
121 static void app_activate(GtkApplication* app, gpointer userdata) { 130 static void app_activate(GtkApplication* app, gpointer userdata) {
122 printf("activate\n"); 131 //printf("activate\n");
123 } 132 }
133
134 static void app_shutdown(GtkApplication *app, gpointer userdata) {
135 if(exit_func) {
136 exit_func(NULL, exit_data);
137 }
138 ui_app_onexit();
139 }
140
124 #endif 141 #endif
125 142
126 void ui_main() { 143 void ui_main() {
127 #ifdef UI_APPLICATION 144 #ifdef UI_APPLICATION
128 cxmutstr appid = cx_asprintf( 145 cxmutstr appid = cx_asprintf(
129 "ui.%s", 146 "ui.%s",
130 application_name ? application_name : "application1"); 147 application_name ? application_name : "application1");
131 app = UI_APPLICATION_NEW(appid.ptr); 148 app = UI_APPLICATION_NEW(appid.ptr);
132 g_signal_connect (app, "startup", G_CALLBACK (app_startup), NULL); 149 g_signal_connect (app, "startup", G_CALLBACK (app_startup), NULL);
150 g_signal_connect (app, "shutdown", G_CALLBACK (app_shutdown), NULL);
133 g_signal_connect (app, "activate", G_CALLBACK (app_activate), NULL); 151 g_signal_connect (app, "activate", G_CALLBACK (app_activate), NULL);
134 g_application_run(G_APPLICATION (app), 0, NULL); 152 g_application_run(G_APPLICATION (app), 0, NULL);
135 g_object_unref (app); 153 g_object_unref (app);
136 154
137 free(appid.ptr); 155 free(appid.ptr);
138 #else 156 #else
139 if(startup_func) { 157 if(startup_func) {
140 startup_func(NULL, startup_data); 158 startup_func(NULL, startup_data);
141 } 159 }
142 gtk_main(); 160 gtk_main();
143 #endif
144 if(exit_func) { 161 if(exit_func) {
145 exit_func(NULL, exit_data); 162 exit_func(NULL, exit_data);
146 } 163 }
147 uic_store_app_properties(); 164 ui_app_onexit();
165 #endif
166 if(exit_on_shutdown) {
167 exit(0);
168 }
148 } 169 }
149 170
150 #ifndef UI_GTK2 171 #ifndef UI_GTK2
151 void ui_app_quit() { 172 void ui_app_quit() {
152 g_application_quit(G_APPLICATION(app)); 173 g_application_quit(G_APPLICATION(app));

mercurial