Sun, 20 Jul 2025 12:27:33 +0200
improve exit behavior (GTK)
| application/main.c | file | annotate | diff | comparison | revisions | |
| ui/gtk/toolkit.c | file | annotate | diff | comparison | revisions | |
| ui/ui/toolkit.h | file | annotate | diff | comparison | revisions |
--- a/application/main.c Fri Jul 18 21:54:33 2025 +0200 +++ b/application/main.c Sun Jul 20 12:27:33 2025 +0200 @@ -521,7 +521,7 @@ ui_attach_document(obj->ctx, doc); ui_sidebar(obj, .margin = 0, .spacing = 0) { - ui_sourcelist(obj, .fill = UI_ON, + ui_sourcelist(obj, .fill = TRUE, .getvalue = sourcelist_getvalue, .sublists = UI_SUBLISTS(UI_SUBLIST(.varname = "srclist1", .header = "Header 1", .userdata = "Sublist1"), UI_SUBLIST(.varname = "srclist2", .header = "Header 2", .userdata = "Sublist2")), .onactivate = action_sourcelist_activate); @@ -529,12 +529,12 @@ ui_tabview(obj, .spacing=10, .margin=10, .tabview = UI_TABVIEW_NAVIGATION_SIDE, .varname="tabview") { ui_tab(obj, "Tab 0") { - ui_vbox(obj, .fill = UI_OFF, .margin = 15, .spacing = 15) { + ui_vbox(obj, .fill = FALSE, .margin = 15, .spacing = 15) { ui_button(obj, .label = "Test Button", .icon = "application-x-generic", .onclick = action_button); ui_togglebutton(obj, .label = "Toggle"); ui_checkbox(obj, .label = "My Checkbox"); } - ui_grid(obj, .fill = UI_OFF, .columnspacing = 15, .rowspacing = 15, .margin = 15) { + ui_grid(obj, .fill = FALSE, .columnspacing = 15, .rowspacing = 15, .margin = 15) { ui_button(obj, .label = "Activate Group 1", .hexpand = TRUE, .onclick = action_group1); ui_button(obj, .label = "Disable Group 1", .onclick = action_group1, .onclickdata = "disable"); ui_newline(obj); @@ -590,10 +590,10 @@ UiModel *model = ui_model(obj->ctx, UI_STRING, "col1", UI_INTEGER, "col2", UI_ICON, "col3", UI_ICON_TEXT, "col4", UI_INTEGER, "col5", -1); model->columnsize[0] = -1; model->getvalue = table_getvalue; - ui_table(obj, .model = model, .list = doc->list2, .colspan = 2, .fill = UI_ON, .contextmenu = menubuilder, .multiselection = TRUE, + ui_table(obj, .model = model, .list = doc->list2, .colspan = 2, .fill = TRUE, .contextmenu = menubuilder, .multiselection = TRUE, .fill = TRUE, .onactivate = action_table_activate, .onactivatedata = "activate", .onselection = action_table_activate, .onselectiondata = "selection"); - ui_hbox(obj, .fill = UI_OFF) { + ui_hbox(obj, .fill = FALSE) { ui_textfield(obj, .value = doc->list_input); ui_button(obj, .label = "Update List Item 1", .onclick = action_update_list); } @@ -607,7 +607,7 @@ ui_button(obj, .label = "Button 6", .onclick=action_tab2_button); } ui_tab(obj, "Tab 3") { - UiTabViewArgs args = {0}; + UiTabViewArgs args = {.fill = TRUE}; UI_CTN(obj, tabview=ui_tabview_create(obj, &args)) { UiObject *tab1 = ui_tabview_add(tabview, "Sub 1", -1); ui_button(tab1, .label = "Button 1"); @@ -618,15 +618,15 @@ } } ui_tab(obj, "Tab 4") { - ui_textarea(obj, .varname = "text"); + ui_textarea(obj, .varname = "text", .fill = TRUE); } ui_tab(obj, "Tab 5") { ui_button(obj, .label = "Test Button", .icon = "application-x-generic", .onclick = action_button); - ui_imageviewer(obj, .varname = "image", .style_class = "imageviewer", .contextmenu = menubuilder, .scrollarea = TRUE, .useradjustable = TRUE, .autoscale = TRUE); + ui_imageviewer(obj, .varname = "image", .style_class = "imageviewer", .contextmenu = menubuilder, .scrollarea = TRUE, .useradjustable = TRUE, .autoscale = TRUE, .fill = TRUE); } ui_tab(obj, "Tab 6") { - ui_scrolledwindow(obj, .fill = UI_ON) { + ui_scrolledwindow(obj, .fill = TRUE) { ui_expander(obj, .label = "Expander", .margin = 10, .spacing = 10) { ui_label(obj, .label = "Test"); ui_button(obj, .label = "Button"); @@ -648,18 +648,18 @@ } ui_tab(obj, "Tab 7") { - ui_itemlist(obj, .create_ui = create_item, .varname = "items", .subcontainer = UI_CONTAINER_HBOX, .sub_spacing = 10, .margin = 10, .spacing = 4, .userdata = doc); + ui_itemlist(obj, .create_ui = create_item, .varname = "items", .subcontainer = UI_CONTAINER_HBOX, .sub_spacing = 10, .margin = 10, .spacing = 4, .userdata = doc, .fill = TRUE); } ui_tab(obj, "Tab 8") { - ui_hsplitpane(obj, .initial_position = 100) { + ui_hsplitpane(obj, .initial_position = 100, .fill = TRUE) { ui_button(obj, .label = "Button 1"); ui_button(obj, .label = "Button 2"); } } ui_tab(obj, "Tab 9") { #ifdef UI_WEBVIEW - ui_webview(obj, .fill = UI_ON, .value = doc->web); + ui_webview(obj, .fill = TRUE, .value = doc->web); cxstring html = CX_STR("<html><body><h1>Hello Toolkit</h1><p>Toolkit WebView</p></body></html>"); ui_webview_load_content(doc->web, "mypage", html.ptr, html.length, NULL, NULL); #else
--- 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
--- a/ui/ui/toolkit.h Fri Jul 18 21:54:33 2025 +0200 +++ b/ui/ui/toolkit.h Sun Jul 20 12:27:33 2025 +0200 @@ -514,6 +514,9 @@ UIEXPORT void ui_onopen(ui_callback f, void *userdata); UIEXPORT void ui_onexit(ui_callback f, void *userdata); +UIEXPORT void ui_app_onexit(void); +UIEXPORT void ui_app_exit_on_shutdown(UiBool exitapp); + UIEXPORT void ui_main(void); UIEXPORT void ui_show(UiObject *obj); UIEXPORT void ui_close(UiObject *obj);